1、 成 绩 评 定 表学生姓名 班级学号专 业 计算机科学与技术课程设计题目 医药管理系统 评语组长签字:成绩日期 2015 年 月 日课程设计任务书学 院 信息科学与工程学院 专 业 计算机科学与技术学生姓名 班级学号课程设计题目 医药管理系统实践教学要求与任务:任务:制作一个医药管理系统,能够查看药品列表,显示药品相关信息,能够修改药品信息,能够添加没有的药品,能够根据不同条件查询药品信息。要求:1.设计数据结构,存储结构;2.在 c 兼容环境完成上述题目的代码编写与调试;3.程序运行界面交互性好;4.软件运行,给出测试数据。工作计划与进度安排:数据结构课程设计时间安排在教学第 14 周、第
2、 15 周内完成,按上述题目要求完成查阅资料、程序设计、调试、运行等工作。时间安排如下:1、查阅资料、与初步设计;1-2 天2、整体功能设计、代码编码与初步调试。1-3 天3、调试和软件功能的测试和验收。1-3 天4、答辩与论文撰写。1-2 天指导教师:2015 年 12 月 12 日专业负责人:2015 年 12 月 12 日学院教学副院长:2015 年 12 月 12 日目 录 一、题目概述(内容及要求) 4二、功能分析 4三、设计 6四、运行与测 试 7五、总结 8参考文献 8一、 题目概述(内容及要求)1. 内容:制作一个医药管理系统,能够查看药品列表,显示药品相关信息,能够修改药品信
3、息,能够添加没有的药品,能够根据不同条件查询药品信息。2. 要求:1.程序代码完成,编译运行成功。2.数据输入首选采用文件的方式,其次键盘输入。3.分析采用哪种合适的存储结构来储存数据4.设计一定的用户界面,简洁。二、 功能分析1. 功能模块图添加新的药品删除药品信息查看已有药品列表退出程序修改药品信息分类查询医疗管理系统2. 程序流程图查看添加 返回 删除 修改 返回 返回NYY N 返回NYN N返回YN 返回图 2.2 程序流程图开 始修改菜单界面输入编号是否在文档中选择添加相关信息删除相关信息结束读取文档中的数据输入编号是否在文档中查询信息是否在文档中修改三、设计相关代码:#inclu
4、de #include #include #include #include typedef struct Drug char Drug_id30; /编号char Drug_name50; /药品名称char Drug_type10; /类型float Drug_price; /价格int amount; /库存数量char Drug_time30; /入库时间char remark30; /备注struct Drug *next;Drug,*DrugPtr;#define MENU “欢迎进入药品管理系统n“1: 查看已有药品列表n“2: 添加新的药品n“3: 删除药品信息n“4: 修改药
5、品信息n“5: 分类查询n“0: 退出n“请您选择:“#define MENU41 “请选择要修改的选项n“1:修改药品名称n“2:修改药品价格n“3:修改药品数量n“4:修改药品类型n“5:修改药品备注n“0:返回主菜单n“请您选择:“#define MENU5 “欢迎进入分类查询页面n“1: 按编号查询n“2: 按名称查询n“3: 按类型查询n“4: 按价格查询n“5: 按库存数量查询n“6: 按入库时间查询n“0: 返回主菜单n“请您选择:“#define MENU50 “按药品编号查询n“请输入要查询的药品编号 :“#define MENU51 “按药品名称查询n“请输入要查询的药品名
6、称 :“#define MENU52 “按药品类型查询n“请输入要查询的药品类型 :n“1: 中药n“2: 中成药n“3: 西药n“0: 返回查询菜单n“请您选择 :“#define MENU53 “按药品价格查询n“请输入要查询的药品价格 :“#define MENU54 “按药品库存数量查询n“请输入要查询的药品的库存数量 :“#define MENU55 “按药品入库时间查询n“请输入要查询的药品入库时间 :“#define STRCMP(NAME, STR) strcmp(char *)GetStdin(“请输入药品的编号( 按 0 结束):“, “%s“, STR), “0“)Dru
7、gPtr insert(DrugPtr head, int id, char* name); /添加药品void save_to_file( DrugPtr /将更新后的链表保存到文件中 void read_to_list(DrugPtr /将文件读入链表void *GetStdin(const char *numstr, char *control, void *ret);DrugPtr getvalue(); /取值void druginsert(DrugPtr /插入操作int isdrugin(DrugPtr yaolist, DrugPtr yao); /判断void drugmod
8、ify(DrugPtr /修改操作void deletenode(DrugPtr /删除操作void deletedrug(DrugPtr void updatedrug(DrugPtr void listshow(DrugPtr yaolist); /显示操作void drug_find_name(DrugPtr head, char *name); /以名称查询void drug_find_id(DrugPtr head,char *id); /以编号查询void drug_find_type_z(DrugPtr head); /查询中药void drug_find_type_zc(Dru
9、gPtr head); /查询中成药void drug_find_type_x(DrugPtr head); /查询西药void drug_find_price(DrugPtr head,float price); /以价格查询void drug_find_amout(DrugPtr head,int amout); /以库存数量查询void drug_find_time(DrugPtr head,char *time); /以入库时间查询void drug_type_choose(DrugPtr head); /查询主菜单void choose_type(DrugPtr head); /类型
10、查询int main() int choice;DrugPtr head=NULL;DrugPtr yao;read_to_list(head);while (*(int *)GetStdin(MENU, “%d“, /显示药品列表break;case 2:yao=getvalue();druginsert(head,yao);/添加药品printf(“药品添加成功n“);break;case 3:deletedrug(head);/删除药品break;case 4: updatedrug(head);/修改药品信息break;case 5: /分类查询drug_type_choose(hea
11、d);break;case 0: /退出break;save_to_file(head);return 0;void *GetStdin(const char *numstr, char *control, void *ret)cputs(numstr);while (! scanf(control, ret) fflush(stdin);system(“cls“);cputs(numstr);system(“cls“);return ret; /显示列表void listshow(DrugPtr yaolist)printf (“%5s%8s%16s%10s%14s%13s%7sn“, “药
12、品编号 “, “名称“, “价格“, “类型“, “入库时间“,“ 库存数量“,“备注“);DrugPtr p=yaolist;if(!p)printf(“kong“);while(p) printf(“%-10s%-18s%-10.2f%-10s%-13s%-10d%-10sn“,p-Drug_id,p-Drug_name,p-Drug_price,p-Drug_type,p-Drug_time,p-amount,p-remark);p=p-next;DrugPtr getvalue() DrugPtr yao=(DrugPtr)malloc(sizeof(Drug);printf(“请输入
13、药品编号:“);scanf(“%s“,printf(“n“);printf(“请输入药品名称:“);scanf(“%s“,printf(“n“);printf(“请输入药品价格:“);scanf(“%f“,printf(“n“);printf(“请输入药品数量:“);scanf(“%d“,printf(“n“);printf(“请输入药品入库时间:“);scanf(“%s“,printf(“n“);printf(“请输入药品类型:“);scanf(“%s“,printf(“n“);printf(“请输入药品备注:“);scanf(“%s“,printf(“n“);yao-next=NULL;r
14、eturn yao;void druginsert(DrugPtr else yao-next=yaolist-next;yaolist-next=yao;DrugPtr isdrugin(DrugPtr yaolist,char drug_id) DrugPtr p=yaolist;while(p) if(!strcmp(p-Drug_id,drug_id)break;elsep=p-next;return p; /更新结点void drugmodify(DrugPtr DrugPtr p=yaolist;float t=0;/没有这句出现 float point not loaded wh
15、ile(*(int *)GetStdin(MENU41, “%d“, printf(“n“);cputs(“更新成功!请继续选择n“);printf(“n“);break;case 2:GetStdin(“请输入药品的新价格:“, “%f“, printf(“n“);cputs(“更新成功!请继续选择n“);printf(“n“);break;case 3:GetStdin(“请输入药品的修改数量:“, “%d“,printf(“n“);cputs(“更新成功!请继续选择n“);printf(“n“);break;case 4:GetStdin(“请输入药品的新类型:“, “%s“,yao-D
16、rug_type);printf(“n“);cputs(“更新成功!请继续选择n“);printf(“n“);break;case 5:GetStdin(“请输入药品的新备注:“, “%s“,yao-remark);printf(“n“);cputs(“更新成功!请继续选择n“);printf(“n“);break;case 0:break; /找到结点返回 updatevoid updatedrug(DrugPtr DrugPtr yao;while (strcmp(char *)GetStdin(“请输入药品编号( 按 0 结束):n“, “%s“, string), “0“) yao=i
17、sdrugin(yaolist,string);if(yao)/判断药是否存在drugmodify(yaolist,yao);elseprintf(“没有这种药n“);void deletedrug(DrugPtr while (STRCMP(SECOND, string) if (isdrugin(yaolist, string)deletenode(yaolist, string); elseprintf(“药品不存在!“);void deletenode(DrugPtr q=yaolist;p=q-next;if(!strcmp(yaolist-Drug_id,drug_id) yaol
18、ist=yaolist-next;free(q);else while(p) if(!strcmp(p-Drug_id,drug_id)break;q=q-next;p=p-next;q-next=p-next;free(p);printf(“药品已删除!“);void read_to_list(DrugPtr if(!fp)printf(“error“);while( !feof(fp) DrugPtr yao=(DrugPtr)malloc(sizeof(Drug);yao-next=NULL; fscanf(fp,“%s%s%f%s%s%d%sn“,yao-Drug_id,yao-Dru
19、g_name,druginsert(yaolist,yao);fclose(fp);void save_to_file(DrugPtr FILE *fp=fopen(“E:/yao.txt“,“w“);if(!fp)printf(“error“);while(p)fprintf(fp,“%-5s%-18s%-10.2f%-10s%-13s%-6d%-10sn“,p-Drug_id,p-Drug_name,p-Drug_price,p-Drug_type,p-Drug_time,p-amount,p-remark);p=p-next;fclose(fp);void drug_find_name(
20、DrugPtr head, char *name) DrugPtr cur,p;p=head;cur = head;int i=0;while(p) if(!strcmp(p-Drug_name,name)break;elsep=p-next;if(p) while(cur!=NULL) if(!strcmp(cur-Drug_name,name) printf(“%-5s%-18s%-10.2f%-10s%-13s%-6d%-10sn“,cur-Drug_id, cur-Drug_name, cur-Drug_price,cur-Drug_type,cur-Drug_time,cur-amo
21、unt,cur-remark);i+;cur=cur-next;printf(“n“);printf(“所有名称为%s 的数量为%dn“,name,i);printf(“n“);else printf(“n“);printf(“没有找到该药名!n“);printf(“n“);void drug_find_type_z(DrugPtr head)DrugPtr cur,p;cur = head;p=head;int i=0;while(p) if(!strcmp(p-Drug_type,“中药“)break;elsep=p-next;if(p) while(cur!=NULL) if(!strc
22、mp(cur-Drug_type, “中药“)printf(“%-5s%-18s%-10.2f%-10s%-13s%-6d%-10sn“,cur-Drug_id,cur-Drug_name,cur-Drug_price,cur-Drug_type,cur-Drug_time,cur-amount,cur-remark);i+;cur=cur-next;printf(“n“);printf(“所有中药的数量为%dn“,i);printf(“n“);else printf(“n“);printf(“没有该类型的药!n“);printf(“n“);void drug_find_type_zc(Dru
23、gPtr head) DrugPtr cur,p;cur = head;p=head;int i=0;while(p) if(!strcmp(p-Drug_type,“中成药“)break;elsep=p-next;if(p)while(cur!=NULL)if(!strcmp(cur-Drug_type, “中成药“)printf(“%-5s%-18s%-10.2f%-10s%-13s%-6d%-10sn“,cur-Drug_id,cur-Drug_name,cur-Drug_price,cur-Drug_type,cur-Drug_time,cur-amount,cur-remark);i
24、+;cur=cur-next;printf(“n“);printf(“所有中成药的数量为%dn“,i);printf(“n“);else printf(“n“);printf(“没有该类型的药!n“);printf(“n“);void drug_find_type_x(DrugPtr head) DrugPtr cur,p;cur = head;p=head;int i=0;while(p) if(!strcmp(p-Drug_type,“西药“)break;elsep=p-next;if(p)while(cur!=NULL) if(!strcmp(cur-Drug_type, “西药“)pr
25、intf(“%-5s%-18s%-10.2f%-10s%-13s%-6d%-10sn“,cur-Drug_id,cur-Drug_name,cur-Drug_price,cur-Drug_type,cur-Drug_time,cur-amount,cur-remark);i+;cur=cur-next;printf(“n“);printf(“所有西药的数量为%dn“,i);printf(“n“);elseprintf(“n“);printf(“没有该类型的药!n“);printf(“n“);void drug_find_price(DrugPtr head,float price) DrugP
26、tr cur,p;cur = head;int i=0;p=head;while(p) if(p-Drug_price=price)break;elsep=p-next;if(p)while(cur!=NULL) if(cur-Drug_price=price)printf(“%-5s%-18s%-10.2f%-10s%-13s%-6d%-10sn“,cur-Drug_id,cur-Drug_name,cur-Drug_price,cur-Drug_type,cur-Drug_time,cur-amount,cur-remark);i+;cur=cur-next;printf(“n“);pri
27、ntf(“所有药品价格为%f 的数量为%dn“,price,i);printf(“n“);else printf(“n“);printf(“没有该价格的药品!n“);printf(“n“);void drug_find_amout(DrugPtr head,int amout) DrugPtr cur,p;cur = head;int i=0;p=head;while(p) if(p-amount=amout)break;elsep=p-next;if(p)while(cur!=NULL) if(cur-amount=amout)printf(“%-5s%-18s%-10.2f%-10s%-1
28、3s%-6d%-10sn“,cur-Drug_id,cur-Drug_name,cur-Drug_price,cur-Drug_type,cur-Drug_time,cur-amount,cur-remark);i+;cur=cur-next;printf(“n“);printf(“所有药品库存量为%d 的数量为%dn“,amout,i);printf(“n“);else printf(“n“);printf(“没有库存量为%d 的药品!n“,amout);printf(“n“);void drug_find_time(DrugPtr head,char *time) DrugPtr cur,
29、p;cur = head;int i=0;p=head;while(p) if(!(strcmp(p-Drug_time, time)break;elsep=p-next;if(p)while(cur!=NULL) if(!(strcmp(cur-Drug_time, time)printf(“%-5s%-18s%-10.2f%-10s%-13s%-6d%-10sn“,cur-Drug_id,cur-Drug_name,cur-Drug_price,cur-Drug_type,cur-Drug_time,cur-amount,cur-remark);i+;cur=cur-next;printf
30、(“n“);printf(“所有药品入库时间为%s 的数量为%dn“,time,i);printf(“n“);else printf(“n“);printf(“没有找到入库时间为%s 的药品!n“,time);printf(“n“);void drug_find_id(DrugPtr head,char *id) DrugPtr cur;cur = head;while(cur!=NULL) if(!strcmp(cur-Drug_id,id)printf(“%-5s%-18s%-10.2f%-10s%-13s%-6d%-10sn“,cur-Drug_id,cur-Drug_name,cur-
31、Drug_price,cur-Drug_type,cur-Drug_time,cur-amount,cur-remark);printf(“n“);break;elsecur=cur-next;if(!cur) printf(“n“);printf(“没有找到该编号的药品!n“);printf(“n“);void drug_type_choose(DrugPtr head) int choice2;while (*(int *)GetStdin(MENU5, “%d“, GetStdin(MENU50, “%s“, id);drug_find_id(head,id);break;case 2:
32、 /名称char name50;GetStdin(MENU51, “%s“, name);drug_find_name(head,name);break;case 3: /类型choose_type(head);break;case 4: /价格float price;GetStdin(MENU53, “%f“, drug_find_price(head,price);break;case 5: /库存int amount;GetStdin(MENU54, “%d“, drug_find_amout(head,amount);break;case 6: /入库时间char time30;Get
33、Stdin(MENU55, “%s“, time);drug_find_time(head,time);break;case 0:break;void choose_type(DrugPtr head) int choice3;while (*(int *)GetStdin(MENU52, “%d“, drug_find_type_z(head);break;case 2: /中成药printf(“药库中的中成药有:n“);drug_find_type_zc(head);break;case 3: /西药printf(“药库中的西药有:n“);drug_find_type_x(head);br
34、eak;case 0: /返回查询菜单break;设计思路:首先会显示程序菜单,对应选项对应正确的功能,查看已有药品列表会直接读取程序要求文件 yao.txt 文件,并且显示在程序上。选择添加新的药品将会显示药品的让你添加药品的相对应的相关信息,并且存入 yao.txt 文件之中。删除药品信息的时候,如果输入的编号不在文件之中,则会显示药品不存在;若编号存在,则程序运行删除程序将编号对应的药品信息删除,并存入 yao.txt 文件。修改药品信息,输入编号,若输入的编号不在文见之中,则会显示药品不存在;若编号存在,则将所要修改的信息输入,程序将自动替换原有数据并且会在程序结束时存入 yao.tx
35、t 文件之中。分类查询,将会出现相关选项,按照相关选项输入,程序将会读取文档之中的数据,并且判断使用者输入的数据是否在文档之中,若输入选项在文档之中,将会显示相关药品信息;若不在文档之中,将会显示药品不存在。四、运行与测试初始界面如图 5.1 所示:图 5.1 初始界面查看已有药品列表运行结果如图 5.2 所示:图 5.2 查看已有药品列表添加新的药品界面如图 5.3 所示:图 5.3 添加新的药品修改药品信息界面如图 5.4 所示:图 5.4 修改药品信息分类查询界面如图 5.5 所示:图 5.5 分类查询五、总结首先,感谢老师在课设期间对我的耐心指导,由于 c 语言是在大一上学期学习,有点
36、遗忘,所以本次课设难免遇到一些问题,经过反复的修改、和同学们的交流,和老师的耐心指导,本次项目实训圆满完成。我深知数据结构对于我们计算机专业的学生来说是一门很重要的课,而且学习起来也不是那么容易,在学习理论课的过程中我就留下好多疑问,虽然理论上明白,但实践中到底怎么用,用来干什么对我来说还是个迷。通过本次数据结构的课设,让我将理论用于实践,遇到问题努力自己探索或者寻求老师的帮助,让我的很多谜团得到解决,更是激起了我学习数据结构的乐趣,总之,很感谢这次课设,更谢谢为这次课设天天忙碌陪伴我们的老师。参考文献1数据结构案例分析与习题解答李筠、姜学军 清华大学出版社,20132数据结构与算法严蔚敏 清华大学出版社,2010