C语言程序设计(医院信息管理系统)附源代码
西安邮电大学 C语言实习 医院管理系统

西安郵電大学C语言课程设计报告题目:医院信息管理系统院系名称:计算机学院专业名称:计算机科学与技术班级:学生姓名:学号(8位):指导教师:王春梅设计起止时间:2012年06月06日~2012年06月15日一. 设计目的1,通过本课程设计,强化上机动手能力,使自己在理论和实践的基础上进一步巩固《C语言程序设计》课程学习的内容,掌握软件设计的基本方法。
2,学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
3,为后续各门计算机课程的学习打下坚实基础;为毕业设计和以后工作打下必要基础。
二. 设计内容建立一个医院信息管理系统,主要应用了数据结构体,数组,指针等。
在内容上包括录入信息模块,读取信息模块,保存信息模块,查寻信息模块,插入信息模块,删除信息模块,修改信息模块,显示信息模块及排序信息模块(按姓名进行排序)等,并且还有统计信息和相关信息的排序。
三.概要设计1.功能模块图;2.各个模块详细的功能描述。
(1)登陆界面:主要是用户进行注册和登陆的程序。
(2)录入模块:录入需要管理的病人及药品信息并将信息保存于文件中,以方便日后进行打印、读取、更新等操作。
(3)删除模块:可对病人及药品信息做删除处理。
(4)添加模块:可添加一个或多个病人及药品信息并将所添加病人和药品信息保存,方便查找。
(5)修改模块:可根据需要对病人和药品信息整体进行修改,也可随时对个别项进行修改。
(6)按编号排序:方便管理员进行查找信息。
(7)显示病人信息:使管理员更直接的了解病人及药品的相关信息。
四.详细设计1.功能函数的调用关系图;2.各功能函数的数据流程图;(1)链表的创建,尾插法(2)读取(3)查找((5)添加(6)修改模块(7)排序(8)统计3.重点设计及编码。
(1)密码:while (!feof(fp1))//循环逐行读取data.txt将读取到的信息保存在数组Userdata 中直到文件结束{fgets(Userdata1,30,fp1);if (strcmp(Linedata1,Userdata1)==0 ){printf("该用户已经注册!\n");printf("按任意键重新注册\n");getch();UserReg();}}fputs(Linedata,fp);//将这一行格式调整好的用户名密码信息写入data.txt文件fclose(fp);//关闭data.txt文件指针fputs(Linedata1,fp1);//将这一行格式调整好的用户名密码信息写入data.txt文件fclose(fp1);//关闭文件指针printf("亲,注册成功喽,赶快去登录吧!\n");printf("按任意键进入登陆界面\n");getch();system("cls");Login();}(2)排序while (first != NULL) /*遍历剩下无序的链表*/{/*注意:这里for语句就是体现直接插入排序思想的地方*/for (t=first, q=head; ((q!=NULL) && (q->id1<t->id1)); p=q, q=q->next); /*无序节点在有序链表中找插入的位置*//*退出for循环,就是找到了插入的位置*//*注意:按道理来说,这句话可以放到下面注释了的那个位置也应该对的,但是就是不能。
C语言实现的医院管理系统

C语言实现的医院管理系统本文将介绍一种用C语言实现的医院管理系统。
该系统旨在帮助医院管理和优化其日常运营活动,包括患者信息管理、医生排班、病历记录、门诊挂号、药品库存等功能。
通过此系统,医院可以提高工作效率,方便患者就医,减少人力资源的浪费。
一、系统概述医院管理系统是一种信息化系统,它通过计算机技术实现医院各部门之间信息的交流和协同工作。
它可以帮助医院更好地管理患者就诊流程、医生排班、检验报告记录和药品库存等方面的工作。
二、系统功能1. 患者信息管理:该功能模块主要负责患者信息的录入、查询和修改。
通过该模块,医院可以存储和管理患者的基本信息、就诊记录、病历等数据。
2. 医生排班:该功能模块用于医生的排班安排,包括门诊时间、专科领域等信息的设置。
通过该模块,医院可以将医生的排班信息输入到系统中,供患者进行预约挂号。
3. 病历记录:该功能模块用于医生记录患者的病历信息,包括主诉、查体、诊断、用药等内容。
通过该模块,医生可以方便地查看和修改患者的病历记录。
4. 门诊挂号:该功能模块用于患者的门诊挂号,包括预约挂号和现场挂号。
通过该模块,患者可以选择就诊医生、日期和时间段,方便安排就诊事宜。
5. 药品库存管理:该功能模块主要用于医院的药品库存管理。
通过该模块,医院可以录入药品的信息、采购和入库、药品的发放和消耗等。
三、系统实现1. 数据库设计:医院管理系统的数据存储和管理采用数据库技术,如MySQL或Oracle等。
根据系统功能需求,设计合理的数据库结构,包括患者信息表、医生信息表、病历记录表、药品库存表等。
2. 用户界面设计:合理的用户界面设计可以提高系统的易用性。
通过使用C语言的图形库或命令行界面库,设计友好的界面,包括菜单、输入输出格式等。
3. 数据处理:通过编写C语言代码,实现对数据库的增删改查操作。
例如,可以使用结构体和指针等数据结构,实现对患者信息、医生排班、病历记录等数据的处理和管理。
4. 模块划分:按照系统功能的模块化设计原则,划分各个模块,分别编写相应的C语言代码。
C语言程序设计医院信息管理系统附源代码样本

专业设计报告课程名称: C 语言程序设计课题名称: 医院信息管理系统专业班别: 12本计算机科学与技术二班姓名:学号:指导教师:设计日期: -5-25教师评语:成绩评定:指导教师签名:日期: 年月日课程设计题目医院信息管理程序作者姓名:同组成员:摘要利用结构体存储每个病人的信息和每种药品的信息, 并使用链表存储全部病人的信息; 能完成对医院内所有病人信息的注册、查询、删除和修改等操作, 同时又能对药房内库存的药品进行查询; 能够将链表中的病人信息保存在文件中, 而且能够对文件中的病人信息进行读取与显示1.专业设计目的1、掌握链表的操作, 包括链表节点的创立、释放还有链表的遍历2、掌握对二进制文件的创立、增添等基本操作。
3、熟悉C语言函数的使用方法, 学会模块化处理问题以及多个源文件的处理方式2.设计基本要求(1、使用结构体来存储病人的信息, 结构体中包括病的id号码、姓名、病历以及消费信息, 并用链表将所有病人信息整合。
2、用文件来存储链表的信息以便下次再使用该程序时载入病人信息3、能够实现病人信息的注册、病人信息的查询、病人消费统计、保存链表信息、载入链表信息、查询库存等几项功能。
4、要求用四个源文件main.c、link.c、find.c、save_load.c5、系统完成后应实现类似下面所示界面3、算法分析1、数据结构设计链表中的一个节点存储一个病人的信息, 使用下面的结构体类型定义:struct patient{char id[10];char name[10];char casehist[200];int cost[3];int transfusion;int surgery;struct patient *next;};其中cost数组用来存储病人卖药的的个数( 总共三种药) , casehist存储病历内容, transfusion用来存储病人输液的花费, surgery存储手术的花费。
c语言项目设计医院挂号系统(经典)

#include<stdio.h>void search();void main(){int f;printf(" ************************************************************\n");printf("欢迎访问XX附属医院挂号系统!\nWelcome to Hohai University Hospital in Chang Zhou!\n");printf("************************************************************\n");printf("1.进入 2.退出\n1.Enter 2.Exit\n");scanf("%d",&f);if(f==1)search();elseprintf("感谢访问!\n Thanks for visit!\n");}void search(){int d[18],g[3],a,b,c,x,y,h;printf("请选择您需要的服务:\n1.预约挂号\n2.退定预约\n1.make an appointment\n2.draw back an appointment\n");scanf("%d",&a);if(a>2||a<1){printf("您输入有误请您重试!\ninput error please try again!\n");}else switch(a){case 1:{printf("请您输入您的18位身份证号码:\nplease input your ID(18 numbers):\n");scanf("%d",&d[18]);printf("您已登陆成功!\nLogin successful!\n");printf("请您选择预约科室:\nPlease choose your reservation department:\n");printf("1.外科\n2.内科\n3.五官科\n4.急诊科\n5.健康体检中心\n1.Surgery Dept\n2.Internal medicine Dept\n3.Ent\n4.Emergency Dept\n5.Health examination center\n");scanf("%d",&b);switch(b){case 1:printf("请预交款为10元。
C语言 医院信息管理系统

//界面显示相关的函数声明
void Display();
void Display1();
void Display2();
void Display3();
//病人信息相关函数声明
void Find1();
void patient();//病人信息函数
void inp1();//输入病人信息函数
struct medicine *read2();
struct medicine *find21();
struct medicine *did main(void);
void print1(struct patient *h);
void print2(struct medicine *h);
char tele1[15];//电话
DATE date;
struct patient *next;
};
//药品基本信息结构体
struct medicine
{
char id2[20];//编号
char name2[100];//药名
char treat2[500];//用于治疗
case 3:Del2();break;
case 4:Insert2();break;
case 5:Alter2();break;
case 6:head=read2();print2(head);break;
case 0:Display(0);
void save1();//存储病人信息函数
int insert1(struct patient *h);//添加病人信息函数
void Insert1();
医院管理系统源代码

#include<stdio.h>#include<Windows.h>//为以下system的函数的头文件#define N 100 //宏定义,下面在主程序中对N进行了使用。
N表示病人的个数,以后修改时可以直接修改这里。
int n;//整体变量,表示病人数typedef struct bingren//病人信息自己定义的结构体,建立所需要的数据类型{ /*c语言中给的数据结构不能满足需要,所以自己建立组合型数据结构*/char number[20];//定义number为整型数据,当number为0时退出。
不能超过4位char name[10];int xiaofei;//消费信息为实型int nianling;//年龄为整型数据char bingli[200];//病例信息为字符型数组,能输入99个汉字(还有\0)}BINGREN;//定义一个结构体变量为 BINGREN void xinghao()/*星号子函数模块,用于输出一排星号*/{int i;for(i = 0; i < 80; i++)//输出一排******号putchar('*');//输出*号}/*-----------输入信息子程序---------*/ void input(BINGREN *data, int *len) {int i;system("cls");//清屏system("title 病人信息录入菜单"); system("color 3f");//湖蓝色背景+亮白色字体printf("\n");//换行操作,目的是让下面显示的字的排布更好看printf("\n");//换行操作,目的是让下面显示的字的排布更好看printf( " 请输入需要输入的病人人数如果需要退出当前菜单请输入0.\n"); scanf("%d",&n);for(i=0;i<n;i++){printf("\n");//换行操作,目的是让下面显示的字的排布更好看printf(" 请输入第%d个病人ID号 :",i+1);scanf("%s", data[*len].number);//输入语句,输入的数字经过判断,如果是0则退回菜单页面。
基于C的医院管理系统设计与实现

基于C的医院管理系统设计与实现一、引言随着信息技术的不断发展,医院管理系统在提高医疗服务效率、优化资源配置、提升医疗质量等方面发挥着越来越重要的作用。
本文将介绍基于C语言的医院管理系统的设计与实现,通过该系统可以实现对医院各项业务的有效管理和优化。
二、系统需求分析在设计医院管理系统之前,首先需要进行系统需求分析,明确系统的功能和性能需求。
医院管理系统通常包括以下功能模块: 1. 患者信息管理:包括患者基本信息、病历信息、就诊记录等; 2. 医生信息管理:包括医生基本信息、专业领域、排班信息等; 3. 科室管理:包括科室信息、科室人员管理、设备管理等; 4. 挂号管理:包括患者挂号、退号、排队等; 5. 就诊管理:包括医生就诊安排、病人就诊情况记录等; 6. 药品管理:包括药品库存管理、药品进销存等。
三、系统设计1. 数据结构设计在C语言中,可以通过结构体来定义各种数据类型,用于表示患者信息、医生信息、科室信息等。
例如:示例代码star:编程语言:ctypedef struct {int patient_id;char name[50];char gender;int age;char address[100]; // other fields} Patient;typedef struct {int doctor_id;char name[50];char gender;char department[50]; // other fields} Doctor;// 定义其他结构体...示例代码end2. 功能模块设计根据系统需求分析,可以将系统划分为患者信息管理模块、医生信息管理模块、挂号管理模块等多个功能模块。
每个功能模块包含相应的操作函数,用于实现具体功能。
3. 界面设计在C语言中,可以使用控制台界面来实现医院管理系统的用户交互界面。
通过菜单选择和输入命令的方式,实现用户对系统功能的操作。
四、系统实现1. 数据库设计在C语言中,可以使用文件来模拟数据库存储数据。
C语言程序设计医院信息管理系统附源代码

专业设计报告课程名称: C 语言程序设计课题名称:医院信息管理系统专业班别:12本计算机科学与技术二班姓名:学号:指导教师:设计日期:2012-5-25教师评语:成绩评定:指导教师签名:日期:2012 年月日课程设计题目医院信息管理程序作者姓名:同组成员:摘要利用结构体存储每个病人的信息和每种药品的信息,并使用链表存储全部病人的信息;能完成对医院内所有病人信息的注册、查询、删除和修改等操作,同时又能对药房内库存的药品进行查询;可以将链表中的病人信息保存在文件中,并且可以对文件中的病人信息进行读取与显示1.专业设计目的1、掌握链表的操作,包括链表节点的创建、释放还有链表的遍历2、掌握对二进制文件的创建、增添等基本操作。
3、熟悉C语言函数的使用方法,学会模块化处理问题以及多个源文件的处理方式2.设计基本要求(1、使用结构体来存储病人的信息,结构体中包括病的id号码、姓名、病历以及消费信息,并用链表将所有病人信息整合。
2、用文件来存储链表的信息以便下次再使用该程序时载入病人信息3、能够实现病人信息的注册、病人信息的查询、病人消费统计、保存链表信息、载入链表信息、查询库存等几项功能。
4、要求用四个源文件main.c、link.c、find.c、save_load.c5、系统完成后应实现类似下面所示界面3、算法分析1、数据结构设计链表中的一个节点存储一个病人的信息,使用下面的结构体类型定义:struct patient{char id[10];c har name[10];c har casehist[200];i nt cost[3];i nt transfusion;i nt surgery;s truct patient *next;};其中cost数组用来存储病人卖药的的个数(总共三种药),casehist存储病历内容,transfusion用来存储病人输液的花费,surgery存储手术的花费。
Struct patient *next用来指向下一个病人结构体的起始地址从而形成一个链表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序设计(医院信息管理系统)附源代码————————————————————————————————作者:————————————————————————————————日期:专业设计报告课程名称: C 语言程序设计课题名称:医院信息管理系统专业班别:12本计算机科学与技术二班姓名:学号:指导教师:设计日期:2012-5-25教师评语:等级优良中及格差项目专业设计目的设计基本要求算法分析源程序代码源程序代码测试设计总结成绩评定:指导教师签名:日期:2012 年月日课程设计题目医院信息管理程序作者姓名:同组成员:摘要利用结构体存储每个病人的信息和每种药品的信息,并使用链表存储全部病人的信息;能完成对医院内所有病人信息的注册、查询、删除和修改等操作,同时又能对药房内库存的药品进行查询;可以将链表中的病人信息保存在文件中,并且可以对文件中的病人信息进行读取与显示1.专业设计目的1、掌握链表的操作,包括链表节点的创建、释放还有链表的遍历2、掌握对二进制文件的创建、增添等基本操作。
3、熟悉C语言函数的使用方法,学会模块化处理问题以及多个源文件的处理方式2.设计基本要求(1、使用结构体来存储病人的信息,结构体中包括病的id号码、姓名、病历以及消费信息,并用链表将所有病人信息整合。
2、用文件来存储链表的信息以便下次再使用该程序时载入病人信息3、能够实现病人信息的注册、病人信息的查询、病人消费统计、保存链表信息、载入链表信息、查询库存等几项功能。
4、要求用四个源文件main.c、link.c、find.c、save_load.c5、系统完成后应实现类似下面所示界面3、算法分析1、数据结构设计链表中的一个节点存储一个病人的信息,使用下面的结构体类型定义:struct patient{char id[10];char name[10];char casehist[200];int cost[3];int transfusion;int surgery;struct patient *next;};其中cost数组用来存储病人卖药的的个数(总共三种药),casehist存储病历内容,transfusion用来存储病人输液的花费,surgery存储手术的花费。
Struct patient *next用来指向下一个病人结构体的起始地址从而形成一个链表。
此外还要用到一个结构体来存储库存中当前的药品情况。
struct storage{int amount[3];int price[3];};2、函数定义程序代码有main.c、link.c、find.c、save_load.c四个源文件组成,使用头文件head.h把四个源文件连接起来,四个文件中所包含的函数说明如表所示。
源文件函数原型功能说明Main.c void test() 检测有无存储病人的二进制文件void init(struct storage *temp) 初始化库存中的药品,参数为指向structstorage类型的指针void printmenu() 打印提示菜单Void liststock(struct storagetemp)列出库存中的药品struct patient *enroll() 注册新病人信息void freeall(struct patient*temp)清除链表内容,参数为指向struct patient类型的指针Find.c void search(struct patient*temp)查询单个病人的信息,参数为指向structpatient类型的指针void listall(struct patient*temp)列出所有病人的信息,参数为指向structpatient类型的指针Link.c struct patient *insert(structpatient *head,struct patient*rea加入新节点,参数为指向struct patient类型的指针void modify(struct patient*temp)修改病人病历,参数为指向struct patient类型的指针void buy(struct patient*temp,struct storage *s)/用于病人的消费处理,参数为指向structpatient类型的指针与指向struct storage的指针Save_load.c void save(struct patient*head)将链表信息保存到文件中,参数为指向structpatient类型的指针struct patient *load(structpatient *head)将文件信息写入到链表中,参数为指向structpatient类型的指针3、处理过程(1)检查存储病人信息的文件是否存在,若不存在则创建一个新文件并设置flag值为1,以标记现在可以对链表进行操作。
(2)初始化库存令巴米尔、感冒灵、病毒唑3种药的数量分别为20、20、10,价格分别为5、9、16。
(3)输出提示菜单让用户悬着要操作的项目.1)写病历前先检查是否有可用的链表(此标记为flag的值,若为1则代表可以修改病历,否则要求用户重新做出选择)。
确认有可用链表之后进入modify函数。
要求用户输入病人的id号码,然后在链表中寻找该病所对应的节点,若无此病人的id则直接输出提示信息后返回:若找到后,先输出原来的病历内容,然后提示用户输入当前日期和新添加的病历内容,调用strcmp函数将新内容追加到原来的casehist字符串数组中。
printf("原有病历: %s\n",temp->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)载入链表信息是首先定义一个文件指针,然后以只读方式打开文件。
若失败则输出提示信息返回,成功后调用malloc函数来申请一块内存,用read函数将文件内容写入到节点中,随后调用insert函数将节点加入链表,如此循环下去直到fread函数返回0值,即文件已经读到了末尾时,再将链表的头指针返回给主函数即可。
Flag值置为1,用来代表已有可用链表。
if((fp=fopen("data","r"))==0){printf("文件不存在!");return head;}while(1){rear=(struct patient *)malloc(sizeof(struct 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<stdlib.h>#include<stdio.h>#include<string.h>struct patient{ //存储一个病人的信息char id[10]; //id数组存储病人号码char name[10]; //name数组存储病人姓名char casehist[200]; //casehist存储病历内容int cost[3]; //cost数组存储病人买药的个数(总共三种)int transfusion; //transfusion存储病人输液的花费int surgery; //surgery存储手术的花费struct patient *next;//struct patient *next用来指向下一个病人结构体的起始地址从而形成一个链表};struct storage{ //存储库存中当前的药品情况int amount[3];int price[3];};int flag;void search(struct patient *temp); //查询单个病人的信息,参数为指向struct patient类型的指针void listall(struct patient *temp); //列出所有病人的信息,参数为指向struct patient类型的指针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 patient类型的指针与指向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 t[10]; //定义字符数组int sum; //定义整型变量sumprintf("请输入病人的id\n");gets(t); /输入字符串while(temp&&strcmp(temp->id,t)){//比较字符串temp->id和t,其值和temp逻辑与运算,结果为非0时,执行循环体temp=temp->next;}if(temp){ //temp的值为非0时,执行下列步骤printf("id: %s\n",temp->id);printf("\n姓名: %s",temp->name);printf("\n病历: \n%s",temp->casehist);printf("\n消费记录:\n");if(temp->cost[0]){printf("巴米尔%d个\n",temp->cost[0]);}if(temp->cost[1]){printf("感冒灵%d个\n",temp->cost[1]);}if(temp->cost[2]){printf("病毒唑%d个\n",temp->cost[2]);}if(temp->transfusion){printf("输液费%d\n",temp->transfusion);}if(temp->surgery){printf("手术费%d\n",temp->surgery);}sum=temp->cost[0]*5+temp->cost[1]*9+temp->cost[2]*16+temp->transfusion+temp->surgery;//计算sum的值printf("总费用%d元",sum);}else{printf("无该病人的信息!\n");}}void listall(struct patient *temp){ //定义listall函数,列出所有病人的信息printf("id 姓名\n");while(temp){printf("%s %s\n",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(head){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 t[10],d[200]; //定义字符组char a[4],b[2],c[2]; //定义字符组printf("请输入病人的id\n");gets(t); //输入病人的idwhile(temp&&strcmp(temp->id,t)){ //自动查找病人的idtemp=temp->next;}if(temp){printf("原有病历: %s\n",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(temp->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 buy(struct patient *temp,struct storage *s){ //病人消费处理char t[10];int a,b,c,d,e;int flag1;printf("请输入病人的id\n");gets(t); //输入病人的idwhile(temp&&strcmp(temp->id,t)){ //自动查找病人的idtemp=temp->next;}if(temp){flag1=0;do{printf("请输入买入巴米尔的个数:\n");scanf("%d",&a);flag1=0;if(a>s->amount[0]){ //若输入的值大于库存的值,则提示"库存不足"printf("库存不足!\n");flag1=1;}}while(flag1); //flag1=1时,执行循环体flag1=0;do{printf("请输入买入感冒灵的个数:\n");scanf("%d",&b);flag1=0;if(b>s->amount[1]){ //若输入的值大于库存的值,则提示"库存不足"printf("库存不足!\n");flag1=1;}}while(flag1); //flag1=1时,执行循环体flag1=0;do{printf("请输入买入病毒唑的个数:\n");scanf("%d",&c);flag1=0;if(c>s->amount[2]){ //若输入的值大于库存的值,则提示"库存不足"printf("库存不足!\n");flag1=1;}}while(flag1); //flag1=1时,执行循环体temp->cost[0]+=a; //temp->cost[0]和a的值相加后赋给temp->cost[0]temp->cost[1]+=b; //temp->cost[1]和b的值相加后赋给temp->cost[1]temp->cost[2]+=c; //temp->cost[2]和c的值相加后赋给temp->cost[2]printf("请输入输液费\n");scanf("%d",&d);temp->transfusion+=d; //temp->transfusion和d的值相加后赋给temp->transfusionprintf("请输入手术费\n");scanf("%d",&e);temp->surgery+=e; //temp->surgery和e的值相加后赋给temp->surgerys->amount[0]-=a; //s->amount[0]减去a的值后赋给s->amount[0]s->amount[1]-=b; //s->amount[1]减去b的值后赋给s->amount[1]s->amount[2]-=c; //s->amount[2]减去c的值后赋给s->amount[2]printf("\n购买成功!\n");}else{printf("无此病人信息!\n");}}/*main.h*/#include "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 *head=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){ //检查是否有可用的链表search(head); //查询病人信息}else {printf("您没有载入信息不能进行查询!\n");}break;case '3':if(flag){ //检查是否有可用的链表modify(head); //修改病人病历}else {printf("您没有载入信息不能修改病历!\n");}break;case '4':if(flag){ //检查是否有可用的链表buy(head,&stock); //病人的消费}else {printf("您没有载入信息不能进行消费!\n");}break;case '5':if(flag){ //检查是否有可用的链表listall(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: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=fopen("data","r"))==0){printf("这是您第一次使用该系统,在退出时不要忘了保存信息\n");fp=fopen("data","w"); //打开外部文件flag=1;fclose(fp); //文件执行后返回fp}}void init(struct storage *temp){ //初始化库存中的药品,参数为指向struct storage 类型的指针temp->amount[0]=20; //初始化库存令巴米尔数量为20temp->amount[1]=20; //初始化库存令感冒灵数量为20temp->amount[2]=10; //初始化库存令病毒唑数量为10temp->price[0]=5; //初始化库存令巴米尔价格为5temp->price[1]=9; //初始化库存令感冒灵价格为9temp->price[2]=16; //初始化库存令感冒灵价格为16 }void liststock(struct storage temp){ //列出库存中的药品int i;printf("药品名数量单价\n"); //输出库存中各药品的数量、价格for(i=0;i<3;i++){switch(i) {case 0:printf("巴米尔%d %d\n",temp.amount[i],temp.price[i]);//输出巴米尔的数量、单价break;case 1:printf("感冒灵%d %d\n",temp.amount[i],temp.price[i]);//输出感冒灵的数量、单价break;case 2:printf("病毒唑%d %d\n",temp.amount[i],temp.price[i]);//输出病毒唑的数量、单价break;}}}struct patient *enroll(){ //注册新病人信息struct patient *rear;rear=(struct patient *)malloc(sizeof(struct patient));printf("请输入病人id:\n");scanf("%s",rear->id); //获得病人id号码printf("请输入病人姓名\n");scanf("%s",rear->name); //获得病人姓名strcpy(rear->casehist,""); //将注册信息存储进病历rear->cost[0]=0; //初始化令购买巴米尔的花费为0rear->cost[1]=0; //初始化令购买感冒灵的花费为0rear->cost[2]=0; //初始化令购买病毒唑的花费为0rear->surgery=0; //初始化令手术的花费为0rear->transfusion=0; //初始化令病人输液的花费为0return rear;}void freeall(struct patient *temp){ //清除链表内容,参数为指向struct patient类型的指针struct patient *t;while(temp) {t=temp;temp=temp->next;free(t);}}/*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,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),1,fp); //把数据写进datd文件中temp=temp->next;}}fclose(fp);}5、源程序代码测试输入1,界面如下:输入4,界面如下:输入3,界面如下:输入2,界面如下:6、结束语7、参考文献:谭浩强.C程序设计(第四版).北京:清华大学出版社,2010谭浩强.C程序设计(第四版)学习辅导.北京:清华大学出版社,2010 李丹程.C语言程序设计案例实践. 北京:清华大学出版社,2009 …………。