软件课程设计实验报告10161015.docx
- 文档编号:27349251
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:63
- 大小:379.97KB
软件课程设计实验报告10161015.docx
《软件课程设计实验报告10161015.docx》由会员分享,可在线阅读,更多相关《软件课程设计实验报告10161015.docx(63页珍藏版)》请在冰豆网上搜索。
软件课程设计实验报告10161015
软件课程设计报告的格式要求
1软件课程设计报告打印的用纸要求
本科学生软件课程设计报告采用A4打印纸或复印纸印制。
2软件课程设计报告的排版要求
2.1页面设置
本科学生软件课程设计报告要求纵向打印,页边距的要求为:
上(T):
2.5cm
下(B):
2.5cm
左(L):
2.5cm
右(R):
2.5cm
装订线(T):
0.5cm
装订线位置(T):
左
其余设置采取系统默认设置。
2.2排式与用字
文字图形一律从左至右横写横排。
文字一律通栏编辑。
字迹必须清楚整齐,忌用异体字、复合字及一切不规范的简化字。
除非必要,不使用繁体字。
2.3段落设置
在“格式”选项中的“段落”设置窗口中,取消“如果定义了文档网格,则与网格对齐(W)”选项,采用多倍行距,行距设置值为1.25。
其余设置采取系统默认设置。
2.4页眉、页脚设置
本科学生软件课程设计报告的页眉自己不设置内容;页脚需要设置页码,页码采用10.5号、宋体、居中放置。
3软件课程设计报告各部分的编排式样
报告的打印顺序为封面、中文提要、关键词、正文、参考文献、附录(附图)、致谢。
具体要求见后。
中南民族大学
软件课程设计报告
生物医学工程学院10级医学信息专业
题目药品管理系统
学生杨宝钦学号10161015
指导教师唐奇玲
2012年12月02日
(目录内容字体:
小四宋体)
设计题目
摘要:
用C语言建立一个药品管理系统,可对医院药品的库存和销售进行管理。
在内容上,包括库存和销售两方面。
库存应包括:
商品的货号、名称、生产厂家、库存量、进货日期、进货价格、进货量。
销售应包括:
商品的货号、名称、销售日期、销售价格、销售数量、利润。
关键字:
药品管理系统;库存管理;销售管理
1引言
背景:
本次软件课程设计是在大三上学期开设的,而我们C语言课程是在大一下开设的。
C语言编程的水品停留在二级的水品,因此,此次的课程设计的正好可以用来提高我们的编程水品。
当今社会发展讯速,科技日新月异。
作为大学生,特别是工程专业的本科生,编程能力尤为重要。
目的:
本次课程设计主要是设计一个药品管理系统,通过实践来提高我的动手能力。
2设计依据及框图
设计依据:
(1)登陆系统:
用户通过密码验证登陆系统;
(2)药品管理系统:
包括库存管理和销售管理;库存包括:
商品的货号、名称、生产厂家、库存量、进货日期、进货价格、进货量。
销售:
商品的货号、名称、销售日期、销售价格、销售数量、利润。
(3)用结构体数组组织数据,采用链表实现系统,对已建立的结构数组,在指定位置进行插入和删除一个结构数组元素工作,数据以文件形式存放,分为库存和销售两个文件。
分成六个模块:
数据输入,数据输出,数据更新,查询,统计,排序。
药品管理系统
销售管理
库存管理
货号
名称
生产厂家
库存量
进货日期
进货价格
进货量
利润
销售数量
销售价格
货号
名称
销售日期
2.1设计平台
VisualC++6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用有很大的局限性,只适用于Windows2000、WindowsXP和Window。
VisualC++6.0由Microsoft开发,它不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
2.2设计思想
系统管理模块分为接受输入药品信息、查询药品信息,更新药品信息,更新库存,产生报表,来完成系统功能。
通过接受输入信息信息,来查询药品信息,输入药品信息对数据库进行更新,划单触发库存自动更新。
并可按用户命令产生两种报表:
库存报表和销售报表来协助管理员对药品信息进行管理。
并且可查询药品信息来使管理员随时了解库存信息。
2.3用户界面
用户界面:
|**************************************************************************|
主菜单
|**************************************************************************|
|************---1---输入信息--*************|
|************---2---显示信息--*************|
|************---3---查找------**************|
|************---4---修改------**************|
|************---5---添加------**************|
|************---6---删除------**************|
|************---7---排序------**************|
|************---0---退出系统--*************|
|**************************************************************************|
3各模块功能及主要模块的流程图
3.1各模块功能简介
一、结构体的定义
药品库存信息的结构体
structDrugstock
{longnum;//商品的货号
charname[30];//商品的名称
charfactoryname[30];//生产厂家名
longstorage;//库存量
longindate;//进货日期
longinprice;//进货价格
longinnum;//进货量
structDrug*next;
};
药品销售信息的结构体
structDrugsell
{longnum;//商品的货号
charname[30];//商品的名称
longoutdate;//销售日期
longoutprice;//销售价格
longoutnum;//销售数量
longprofit;//利润
structDrugsell*next;
};
二、函数编写
1、主函数voidmain()
主函数voidmain()实现各功能的选择,分为创建、增加、删除、修改、查询,以及统计等功能,而各功能分别编写为被调函数。
利用while循环实现用户的人性化操作,以达到结束程序或继续运行程序的目的。
创建、增加、删除、修改、查询、统计等被调函数,都须写于主函数之上;利用switch()函数实现各功能的选择。
对数据的增、删、改操作,必须返回结构退指针,而查找功能只需要输出即可。
2、创建链表structDrugstock*creat(void)和structDrugsell*creat1(void)
创建新链表函数,返回链表头指针。
定义结构体指针变量“structDrugstock*head=NULL,*p1,*p2;”。
head为头指针,及数据表的表头;动态分配内存给p1,令其始终指向新节点;而p2为中间辅助指针,是链表按要求链接。
在创建链表的过程中,动态分配内存给指针p1,分别输入库存药品信息和销售药品信息,进行赋值。
在输入玩一个信息之后,选择退出选择货号为0。
3、增加新节点structDrugstock*insert(structDrugstock*head,structDrugsell*head1)和structDrugstock*insert1(structDrugstock*head,structDrugstock*head1)
增加过程与创建过程大致相同,唯一不同的是,增加过程需要得到形参继续增加库存和销售信息。
4、删除节点structDrugstock*Delete(structDrugstock*head)
structDrugsell*Delete1(structDrugsell*head)
删除库存药品信息实质就是,将链表指针所指向的地址在内存中擦除。
主要分为两种情况:
删除头指针所指向的节点地址是否为空和删除中间或结尾的节点地址。
首先,需要判断所删除节点的地址所指的空间if(head==NULL){printf("\n链表是空的!
\n"),然后进行判断while(num!
=p1->num&&p1->next!
=NULL),然后,进行逻辑判断,是否存在该货号的节点,以及判断是否为头指针。
5、修改节点structDrugstock*modify(structDrugstock*head)
structDrugsell*modify1(structDrugsell*head)
即删除和增加过成功地结合。
先进行用while(p->num!
=t&&p->next!
=NULL)判断是否是所需寻找的节点,p=p->next;如果是的话,if(p->num==t),开始进行选择你想要修改的是药品的什么信息,货号、名称、生产厂家、库存量、进货日期、进货价格、进货量还是货号、名称、销售日期、销售价格、销售数量、利润,进行判断后,开始进行选择修改。
6、查找节点voidsearch(structDrugstock*head)
voidsearch2(structDrugsell*head)
查找节点,即根据所查询的信息查找记录,需要定义结构体指针变量p,进行逻辑判断即可。
查找所需节点信息,根据需要选择是销售还是库存,判断后进入函数体后进行查找所需内容,用if语句进行判断后选择。
7、统计voidstatistic1(structDrug*head)
voidstatistic2(structDrugsell*head)
需要根据创建(或增加)时计算出各节点段的个数来统计。
分为销售和库存信息二个部分,根据需要进行选择,用count,sum,计算统计个数,用if语句进行判断统计个数。
8、排序structDrugstock*sort(structDrugstock*head)
structDrugsell*sort1(structDrugsell*head)
按选择进行排序需要建立新的链表。
是选择升序还是降序,创建structDrugsell*m,*f,*p,*han。
structDrugstock*m,*f,*p,*han。
9、数据的文件存储,voidsavetofile(structDrugstock*head,charfname[30])
structDrugstock*readfromfile(charfname[30])
voidsavetofile1(structDrugsell*head,charfname[30])structDrugsell*readfromfile1(charfname[30])
分别调用这些函数进行药品库存信息数据和药品销售信息数据的存储,将数据存入指定的文档中。
3.2主要流程图
一、用户登录
(1)功能流图
用户登录功能流图
(2)功能描述
用户根据已知的密码登录系统,只有登录成功才能进行系列的药品库存管理、药品销售管理,入库和出库管理的操作。
二、药品管理程序流程图
(1)功能流图
药品添加功能流图
(2)功能描述
用户进入系统以后,首先需要添加药品信息,没有药品信息就无法进行库存管理了,更做不到药品入库和出库。
药品信息作为库存管理的一部分,是药品入库和出库的编号查询;还有为提供药品有效期的报警来源。
三、库存管理
(1)功能流图
库存初始化功能流图
(2)功能描述
用户登录进入库存管理页面,进行库存初始化。
库存初始化是把现有的库存添加到库存表当中去,但是首先这些库存的药品信息已经都是被录入药品表。
所以在查询到这些药品信息后便可以进行库存初始化了。
4软件调试分析
说明:
整个系统分为两个模块:
药品库存管理和药品销售管理,在软件调试中,先输入药品信息(库存和销售)、查看已有药品信息(库存和销售)、添加新的药品信息(库存和销售)、删除药品信息(库存和销售)、修改药品信息(库存和销售)、查询药品信息(库存和销售)、统计药品信息(库存和销售)、对药品按货号升序排序。
1.登陆
2.输入及显示信息
3查找信息
4修改信息
5添加信息
6删除信息
7排序
8统计
5结语
课程设计结束了,通过实践我对学过的软件知识娱乐提高。
从刚开始的不懂或者说很是模糊,开始去查找各种资料,到基本了解了整个软件设计的过程,对c语言编程的过程更加清楚,并懂得了需求分析阶段的重要性,了解现实世界中业务流程和软件想结合的需要,整个设计过程是对系统的一点点加深理解的过程,经过对问题的一步步深入的了解,对系统实现的功能进一步清楚,对模糊的功能需求通过询问,查找资料,使之得到了充分的解决。
本次软件课程设计是在大三上学期开设的,而我们C语言课程是在大一下开设的。
C语言编程的水品停留在二级的水品,因此,此次的课程设计的正好可以用来提高我们的编程水品。
当今社会发展讯速,科技日新月异。
作为大学生,特别是工程专业的本科生,编程能力尤为重要。
本次课程设计主要是设计一个药品管理系统,通过实践提高我的实践动手能力。
参考文献
[1]谭浩强.C语言程序设计(第四版).北京:
清华大学出版社,2010.6
[2]刘振安,孙忱,刘燕君.C语言程序设计课程设计.机械工业出版社,2004.9
附录
详细程序:
#include
#include
#include
#defineN30
structDrugstock//药品进货
{
longnum;//药品货号
charname[N];//名称
charfactory[N];//生产厂家
longstorage;//库存量
longindate;//进货日期
longinprice;//进货价格
longinnum;//进货量
structDrugstock*next;
};
structDrugsell//药品销售
{
longnum;//药品的货号
charname[N];//名称
longoutdate;//销售日期
longoutprice;//销售价格
longoutnum;//销售数量
longprofit;//利润
structDrugsell*next;
};
intn;
/*************************************************药品库存/*----------------------------药品库存链表函数create---------------------------------*/
structDrugstock*create(void)//建立药品库存的链表函数create
{
structDrugstock*head;
structDrugstock*p1,*p2;
n=0;
p1=p2=(structDrugstock*)malloc(sizeof(structDrugstock));//强制类型转换为指针
printf("\n注意:
");
printf("
(1)您输入的药品货号必须是唯一的;\n");
printf("
(2)输入药品货号为空时返回主菜单。
\n");
printf("\n请依次输入药品的信息:
货号名称生产厂家库存量进货日期进货价格进货量\n");
printf("\n请输入第一个药品的货号:
");scanf("%ld",&p1->num);/*输入药品的货号*/
if(p1->num!
=0)
{printf("请输入第一个药品的名称:
");scanf("%s",p1->name);//输入药品的名称
printf("请输入第一个药品的生产厂家名:
");scanf("%s",p1->factory);/*输入药品的生产厂家名*/
printf("请输入第一个药品的库存量:
");scanf("%ld",&p1->storage);/*输入药品的库存量*/
printf("请输入第一个药品的进货日期:
");scanf("%ld",&p1->indate);/*输入药品的进货日期*/
printf("请输入第一个药品的进货价格:
");scanf("%ld",&p1->inprice);//输入药品的进货价
printf("请输入第一个药品的进货量:
");scanf("%ld",&p1->innum);//输入药品的进货量
}
else
{
printf("\n您输入的货号为0!
!
!
\n");
}
head=NULL;
printf("\n请接着输入药品的信息:
货号名称生产厂家库存量进货日期进货价格进货量\n");
while(p1->num!
=0)
{printf("\n注意:
输完信息要退出请输入货号为0\n");
n=n+1;
if(n==1)head=p1;
elsep2->next=p1;
p2=p1;
p1=(structDrugstock*)malloc(sizeof(structDrugstock));
printf("\n请输入药品的货号:
");scanf("%ld",&p1->num);/*输入药品的货号*/
if(p1->num!
=0)
{
printf("请输入药品的名称:
");scanf("%s",p1->name);//输入药品的名称
printf("请输入药品的生产厂家名:
");scanf("%s",p1->factory);/*输入药品的生产厂家名*/
printf("请输入药品的库存量:
");scanf("%ld",&p1->storage);/*输入药品的库存量*/
printf("请输入药品的进货日期:
");scanf("%ld",&p1->indate);/*输入药品的进货日期*/
printf("请输入药品的进货价格:
");scanf("%ld",&p1->inprice);//输入药品的进货价格
printf("请输入药品的进货量:
");scanf("%ld",&p1->innum);//输入药品的进货量
}
elseprintf("\n输入成功!
\n");
}
p2->next=NULL;
return(head);
}
/*------------------------------------------------------------------------------------------*/
/*-----------------------------------------库存显示-----------------------------------------*/
structDrugstock*printlink(structDrugstock*head)
{structDrugstock*p;
printf("\n以下是%d个库存药品信息:
\n\n",n);
p=head;
if(head!
=NULL)/*如果链表不是空,则打印每个结点信息*/
{printf("|------|------|------------|--------|----------|----------|--------|\n");
printf("|货号|名称|生产厂家名|库存量|进货日期|进货价格|进货量|\n");
do
{printf("|------|------|------------|--------|----------|----------|--------|\n");
printf("|%-6ld|%-6s|%-12s|%-8ld|%-10ld|%-10ld|%-8ld|\n",p->num,p->name,p->factory,p->storage,p->indate,p->inprice,p->innum);
p=p->next;
}while(p!
=NULL);
printf("|------|------|------------|--------|----------|----------|--------|\n");
}
elseprintf("链表是空的!
\n");/*如果链表是空表,刚提示这个链表是空表*/
returnhead;
}
/*------------------------------------------------------------------------------------------*/
/*------------------------------------------库存存文件--------------------------------------*/
voidsavetofile(structDrugstock*head,charfname[30])
{
FILE*fp;
if((fp=fopen(fname,"wb"))==NULL)
{
printf("\nopenfileerror!
");
exit(0);
}
if(head==NULL)printf("\n输入不能为空!
!
!
");
else
{
while(head!
=NULL)
{
fwrite(head,sizeof(structDrugstock),1,fp);
fprintf(fp,"%ld,%s,%s,%ld,%ld,%ld,%ld\n",head->num,head->name,head->factory,head->storage,head->indate,head->inprice,head->innum);
head=head->next;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 课程设计 实验 报告 10161015