2022年C语言程序设计附源代码 .pdf

上传人:C****o 文档编号:39687392 上传时间:2022-09-07 格式:PDF 页数:17 大小:1.17MB
返回 下载 相关 举报
2022年C语言程序设计附源代码 .pdf_第1页
第1页 / 共17页
2022年C语言程序设计附源代码 .pdf_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《2022年C语言程序设计附源代码 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言程序设计附源代码 .pdf(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1 专 业设 计 报 告课程名称:C 语 言 程 序 设 计课题名称:医院信息管理系统专业班别:12本计算机科学与技术二班姓名:学号:指导教师:设计日期:2012-5-25 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 17 页 -2 教师评语:等级项目优良中及格差专业设计目的设计基本要求算法分析源程序代码源程序代码测试设计总结成绩评定:指导教师签名:日期:2012 年月日名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 17 页 -3 课程设计题目医院信息管理程序作者姓名:同组成员:摘要利用结构体存储每个病人的信息和每种药品的信息,并使用链表存储全部病人的信息;能

2、完成对医院内所有病人信息的注册、查询、删除和修改等操作,同时又能对药房内库存的药品进行查询;可以将链表中的病人信息保存在文件中,并且可以对文件中的病人信息进行读取与显示1专业设计目的1、掌握链表的操作,包括链表节点的创建、释放还有链表的遍历2、掌握对二进制文件的创建、增添等基本操作。3、熟悉 C 语言函数的使用方法,学会模块化处理问题以及多个源文件的处理方式2设计基本要求(1、使用结构体来存储病人的信息,结构体中包括病的id 号码、姓名、病历以及消费信息,并用链表将所有病人信息整合。2、用文件来存储链表的信息以便下次再使用该程序时载入病人信息3、能够实现病人信息的注册、病人信息的查询、病人消费

3、统计、保存链表信息、载入链表信息、查询库存等几项功能。4、要求用四个源文件main.c、link.c、find.c、save_load.c 5、系统完成后应实现类似下面所示界面名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 17 页 -4 3、算法分析1、数据结构设计链表中的一个节点存储一个病人的信息,使用下面的结构体类型定义:struct patient char id10;char name10;char casehist200;int cost3;int transfusion;int surgery;struct patient*next;其中 cost数组用来存储病人卖

4、药的的个数(总共三种药),casehist存储病历内容,transfusion 用来存储病人输液的花费,surgery 存储手术的花费。Struct patient*next 用来指向下一个病人结构体的起始地址从而形成一个链表。此外还要用到一个结构体来存储库存中当前的药品情况。struct storage int amount3;int price3;2、函数定义程序代码有main.c、link.c、find.c、save_load.c四个源文件组成,使用头文件head.h 把四个源文件连接起来,四个文件中所包含的函数说明如表所示。源文件函数原型功能说明Main.c void test()检测

5、有无存储病人的二进制文件void init(struct storage*temp)初始化库存中的药品,参数为指向struct storage类型的指针void printmenu()打印提示菜单Void liststock(struct storage temp)列出库存中的药品struct patient*enroll()注册新病人信息void freeall(struct patient*temp)清除链表内容,参数为指向struct patient 类型的指针Find.c void search(struct patient*temp)查询单个病人的信息,参数为指向struct pat

6、ient 类型的指针void listall(struct patient*temp)列出所有病人的信息,参数为指向struct patient 类型的指针名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 17 页 -5 Link.c struct patient*insert(struct patient*head,struct patient*rea 加入新节点,参数为指向struct patient 类型的指针void modify(struct patient*temp)修改病人病历,参数为指向struct patient 类型的指针void buy(struct pati

7、ent*temp,struct storage*s)/用于病人的消费处理,参数为指向struct patient 类型的指针与指向struct storage的指针Save_load.c void save(struct patient*head)将链表信息保存到文件中,参数为指向struct patient 类型的指针struct patient*load(struct patient*head)将文件信息写入到链表中,参数为指向struct patient 类型的指针3、处理过程(1)检查存储病人信息的文件是否存在,若不存在则创建一个新文件并设置flag 值为 1,以标记现在可以对链表进行

8、操作。(2)初始化库存令巴米尔、感冒灵、病毒唑3 种药的数量分别为20、20、10,价格分别为5、9、16。(3)输出提示菜单让用户悬着要操作的项目.1)写病历前先检查是否有可用的链表(此标记为flag 的值,若为1 则代表可以修改病历,否则要求用户重新做出选择)。确认有可用链表之后进入modify 函数。要求用户输入病人的id 号码,然后在链表中寻找该病所对应的节点,若无此病人的id 则直接输出提示信息后返回:若找到后,先输出原来的病历内容,然后提示用户输入当前日期和新添加的病历内容,调用 strcmp 函数将新内容追加到原来的casehist字符串数组中。printf(原有病历:%sn,t

9、emp-casehist);printf(输入当前日期年份);gets(a);printf(输入当前月份);gets(b);printf(输入当前日子);gets(c);strcat(temp-casehist,a);strcat(temp-casehist,/);strcat(temp-casehist,b);strcat(temp-casehist,/);strcat(temp-casehist,c);strcat(temp-casehist,:);printf(请输入新病历的内容n);gets(d);strcat(temp-casehist,d);2)载入链表信息是首先定义一个文件指针,

10、然后以只读方式打开文件。若失败则输出提示信息返名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 17 页 -6 回,成功后调用malloc 函数来申请一块内存,用read 函数将文件内容写入到节点中,随后调用insert 函数将节点加入链表,如此循环下去直到fread 函数返回0 值,即文件已经读到了末尾时,再将链表的头指针返回给主函数即可。Flag 值置为 1,用来代表已有可用链表。if(fp=fopen(data,r)=0)printf(文件不存在!);return head;while(1)rear=(struct patient*)malloc(sizeof(struct

11、patient);if(fread(rear,sizeof(struct patient),1,fp)head=insert(head,rear);else free(rear);flag=1;break;4、源程序代码/*head.h*/#ifndef FIRST#include#include#include struct patient/存储一个病人的信息char id10;/id 数组存储病人号码char name10;/name 数组存储病人姓名char casehist200;/casehist存储病历内容int cost3;/cost数组存储病人买药的个数(总共三种)int tr

12、ansfusion;/transfusion 存储病人输液的花费int surgery;/surgery 存储手术的花费struct patient*next;/struct patient*next 用来指向下一个病人结构体的起始地址从而形成一个链表;struct storage/存储库存中当前的药品情况int amount3;int price3;int flag;void search(struct patient*temp);/查询单个病人的信息,参数为指向struct patient 类型的指针void listall(struct patient*temp);/列出所有病人的信息,

13、参数为指向struct patient 类型的指名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 17 页 -7 针struct patient*insert(struct patient*head,struct patient*rear);/加入新节点,参数为指向struct patient 类型的指针void modify(struct patient*temp);/修改病人病历,参数为指向struct patient 类型的指针void buy(struct patient*temp,struct storage*s);/用于病人的消费处理,参数为指向struct patie

14、nt 类型的指针与指向struct storage的指针struct patient*load(struct patient*head);/将文件信息写入到链表中,参数为指向struct patient 类型的指针void save(struct patient*head);/将链表信息保存到文件中,参数为指向struct patient 类型的指针#define FIRST#endif/*find.c*/#include head.h void search(struct patient*temp)/定义 search函数,查询单个病人的信息char t10;/定义字符数组int sum;/

15、定义整型变量sum printf(请输入病人的idn);gets(t);/输入字符串while(temp&strcmp(temp-id,t)/比较字符串temp-id 和 t,其值和temp 逻辑与运算,结果为非0 时,执行循环体temp=temp-next;if(temp)/temp 的值为非0 时,执行下列步骤printf(id:%sn,temp-id);printf(n 姓名:%s,temp-name);printf(n 病历:n%s,temp-casehist);printf(n 消费记录:n);if(temp-cost0)printf(巴米尔%d 个n,temp-cost0);if(

16、temp-cost1)printf(感冒灵%d 个n,temp-cost1);if(temp-cost2)printf(病毒唑%d 个n,temp-cost2);if(temp-transfusion)printf(输液费%dn,temp-transfusion);if(temp-surgery)printf(手术费%dn,temp-surgery);名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 17 页 -8 sum=temp-cost0*5+temp-cost1*9+temp-cost2*16+temp-transfusion+temp-surgery;/计算 sum 的值

17、printf(总费用%d 元,sum);else printf(无该病人的信息!n);void listall(struct patient*temp)/定义 listall 函数,列出所有病人的信息printf(id 姓名 n);while(temp)printf(%s%sn,temp-id,temp-name);temp=temp-next;/*link.c*/#include head.h struct patient*insert(struct patient*head,struct patient*rear)/*!可以出现重复id*/struct patient*temp;if(he

18、ad)temp=head;while(temp-next)temp=temp-next;temp-next=rear;rear-next=0;else head=rear;rear-next=0;return head;void modify(struct patient*temp)/修改病人病历char t10,d200;/定义字符组char a4,b2,c2;/定义字符组printf(请输入病人的idn);gets(t);/输入病人的id 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 17 页 -9 while(temp&strcmp(temp-id,t)/自动查找病人的i

19、d temp=temp-next;if(temp)printf(原有病历:%sn,temp-casehist);printf(输入当前日期年份);gets(a);/输入年份printf(输入当前月份);gets(b);/输入月份printf(输入当前日子);gets(c);/输入日期strcat(temp-casehist,a);/把字符串a 接到 temp-casehist 后面strcat(temp-casehist,/);/把字符“/”接到 temp-casehist后面strcat(temp-casehist,b);/把字符串b 接到 temp-casehist 后面strcat(te

20、mp-casehist,/);/把字符“/”接到 temp-casehist后面strcat(temp-casehist,c);/把字符串c 接到 temp-casehist后面strcat(temp-casehist,:);/把字符“:”接到 temp-casehist后面printf(请输入新病历的内容n);gets(d);/输入新病历内容strcat(temp-casehist,d);/把字符串d 接到 temp-casehist 后面strcat(temp-casehist,n);/把字符 n 接到 temp-casehist后面 else printf(无此病人信息!n);void

21、buy(struct patient*temp,struct storage*s)/病人消费处理char t10;int a,b,c,d,e;int flag1;printf(请输入病人的idn);gets(t);/输入病人的id while(temp&strcmp(temp-id,t)/自动查找病人的id temp=temp-next;if(temp)flag1=0;do printf(请输入买入巴米尔的个数:n);scanf(%d,&a);flag1=0;if(as-amount0)/若输入的值大于库存的值,则提示库存不足 printf(库存不足!n);名师资料总结-精品资料欢迎下载-名师

22、精心整理-第 9 页,共 17 页 -10 flag1=1;while(flag1);/flag1=1 时,执行循环体flag1=0;do printf(请输入买入感冒灵的个数:n);scanf(%d,&b);flag1=0;if(bs-amount1)/若输入的值大于库存的值,则提示库存不足 printf(库存不足!n);flag1=1;while(flag1);/flag1=1 时,执行循环体flag1=0;do printf(请输入买入病毒唑的个数:n);scanf(%d,&c);flag1=0;if(cs-amount2)/若输入的值大于库存的值,则提示库存不足 printf(库存不足

23、!n);flag1=1;while(flag1);/flag1=1 时,执行循环体temp-cost0+=a;/temp-cost0 和a的 值 相 加 后 赋 给temp-cost0 temp-cost1+=b;/temp-cost1 和b的 值 相 加 后 赋 给temp-cost1 temp-cost2+=c;/temp-cost2 和c的 值 相 加 后 赋 给temp-cost2 printf(请输入输液费n);scanf(%d,&d);temp-transfusion+=d;/temp-transfusion 和 d 的值相加后赋给temp-transfusion printf(请

24、输入手术费n);scanf(%d,&e);temp-surgery+=e;/temp-surgery 和 e 的值相加后赋给temp-surgery s-amount0-=a;/s-amount0 减去 a 的值后赋给s-amount0 s-amount1-=b;/s-amount1 减去 b 的值后赋给s-amount1 s-amount2-=c;/s-amount2 减去 c 的值后赋给s-amount2 printf(n 购买成功!n);else printf(无此病人信息!n);名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 17 页 -11/*main.h*/#inc

25、lude head.h void test();/检测有无存储病人的二进制文件void init(struct storage*temp);/初始化库存中的药品,参数为指向struct storage 类型的指针void printmenu();/打印提示菜单void liststock(struct storage temp);/列出库存中的药品struct patient*enroll();/注册新病人信息void freeall(struct patient*temp);/清除链表内容,参数为指向struct patient类型的指针void main()struct patient*h

26、ead=0,*rear;struct storage stock;char ch;printf(欢迎使用医院管理系统n);test();init(&stock);while(1)printmenu();fflush(stdin);ch=getchar();fflush(stdin);switch(ch)case 1:if(flag)/检查是否有可用的链表rear=enroll();head=insert(head,rear);/调用 insert 函数将节点加入链表printf(注册成功!n);else printf(您没有载入信息不能注册!n);break;case 2:if(flag)/检

27、查是否有可用的链表search(head);/查询病人信息 else printf(您没有载入信息不能进行查询!n);break;case 3:名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 17 页 -12 if(flag)/检查是否有可用的链表modify(head);/修改病人病历 else printf(您没有载入信息不能修改病历!n);break;case 4:if(flag)/检查是否有可用的链表buy(head,&stock);/病人的消费 else printf(您没有载入信息不能进行消费!n);break;case 5:if(flag)/检查是否有可用的链表l

28、istall(head);/列出所有病人信息 else printf(您没有载入信息!n);break;case 6:freeall(head);/清除链表内容head=0;head=load(head);/文件信息写入到链表break;case 7:if(flag)/检查是否有可用的链表save(head);/链表信息保存到病历中 else printf(您没有载入信息!n);break;case 8:liststock(stock);/库存中药品列表break;case 9:printf(谢谢使用!n);exit(0);break;default:名师资料总结-精品资料欢迎下载-名师精心整

29、理-第 12 页,共 17 页 -13 printf(输入有误!n);break;void printmenu()/打印提示菜单printf(n);printf(*n);printf(1.注册新病人信息n);printf(2.查询单个病人信息n);printf(3.写病历 n);printf(4.病人消费 n);printf(5.列出所有病人的信息n);printf(6.载入所有病人信息n);printf(7.保存现有信息n);printf(8.查询库存 n);printf(9.退出 n);printf(*n);void test()/检测病人有无存储病人的二进制文件FILE*fp;if(fp

30、=fopen(data,r)=0)printf(这是您第一次使用该系统,在退出时不要忘了保存信息n);fp=fopen(data,w);/打开外部文件flag=1;fclose(fp);/文件执行后返回fp void init(struct storage*temp)/初始化库存中的药品,参数为指向struct storage类型的指针temp-amount0=20;/初始化库存令巴米尔数量为20 temp-amount1=20;/初始化库存令感冒灵数量为20 temp-amount2=10;/初始化库存令病毒唑数量为10 temp-price0=5;/初始化库存令巴米尔价格为5 temp-p

31、rice1=9;/初始化库存令感冒灵价格为9 temp-price2=16;/初始化库存令感冒灵价格为16 void liststock(struct storage temp)/列出库存中的药品int i;名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 17 页 -14 printf(药品名数量单价 n);/输出库存中各药品的数量、价格for(i=0;iid);/获得病人id 号码printf(请输入病人姓名n);scanf(%s,rear-name);/获得病人姓名strcpy(rear-casehist,);/将注册信息存储进病历rear-cost0=0;/初始化令购买巴

32、米尔的花费为0 rear-cost1=0;/初始化令购买感冒灵的花费为0 rear-cost2=0;/初始化令购买病毒唑的花费为0 rear-surgery=0;/初始化令手术的花费为0 rear-transfusion=0;/初始化令病人输液的花费为0 return rear;void freeall(struct patient*temp)/清除链表内容,参数为指向struct patient 类型的指针struct patient*t;while(temp)t=temp;temp=temp-next;free(t);名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 17 页

33、 -15/*save_load.c*/#include head.h struct patient*load(struct patient*head)/将文件信息写入到链表中FILE*fp;/定义一个指向文件的指针变量fp struct patient*rear;if(fp=fopen(data,r)=0)/以 r 指定的方式打开输入文件datd printf(文件不存在!);return head;while(1)rear=(struct patient*)malloc(sizeof(struct patient);if(fread(rear,sizeof(struct patient),1

34、,fp)/从 datd 文件中读数据head=insert(head,rear);else free(rear);flag=1;break;fclose(fp);return head;void save(struct patient*head)/将链表信息保存到文件中FILE*fp;/定义一个指向文件的指针变量fp struct patient*temp;temp=head;if(fp=fopen(data,w)=0)/以 w 指定的方式打开输入文件datd printf(文件已损坏!n);else while(temp)fwrite(temp,sizeof(struct patient),

35、1,fp);/把数据写进datd 文件中temp=temp-next;fclose(fp);5、源程序代码测试输入 1,界面如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 17 页 -16 输入 4,界面如下:输入 3,界面如下:输入 2,界面如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 17 页 -17 6、结束语7、参考文献:谭浩强.C 程序设计(第四版).北京:清华大学出版社,2010 谭浩强.C 程序设计(第四版)学习辅导.北京:清华大学出版社,2010 李丹程.C 语言程序设计案例实践.北京:清华大学出版社,2009,名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 17 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁