前言:这是我在大一时候做的C语言课程设计项目,当时用的IDE是VS2019,程序结构组织很简单(见下图),但那时候作为完完全全的小白还是费了不少劲的,后来还拿这个发了篇软著,现在把源码放出来给大家参考一下。
对于刚学编程的同学们,如果有此类课设任务,真心建议大家从头自己一点一点实现,而不是直接找学长要或者从网上down,可以去网上找源码参考,重点看它的实现思路,大体的思路有了,大家自己实现起来也就没那么难了。刚开始的时候总是很艰难的,怎么选择IDE、怎么调试、怎么理解需求,但一旦跨过去就是一片坦途了,那时你也将取得巨大的成长。
程序主界面如下:
1、base.h //本系统代码由多文件组织完成,以下用“序号+文件名”标识每个程序文件的代码 #pragma once #include#include #include //诊疗记录 :患者信息、医生信息、诊疗情况 //#define_CRT_SECURE_NO_WARNINGS #pragma warning(disable:4996) struct money { int yuan; int jiao; int fen; }; struct patient{ //患者信息 int id; //病人id char name[20]; int age; struct patient *next; }; struct doctor{ //医生信息 int id; //工号 char name[20]; int level; //级别,有1-4级,分别对应住院医师、主治医师、副主任医师、主任医师 int section; //科室,共有1-6 六个科室 int schedule[7]; //出诊时间 ,a[0]-a[6]分别对应周一到周日,不出诊为 0,出诊为 1 struct doctor *next; }; struct cases{ //诊疗情况 int ifcheck; //是否进行了检查 1是 0否 int ifprescribe; //是否进行了开药 1是 0否 int ifinhospital; //是否进行了住院 1是 0否 struct check{ //检查 struct money percost[200]; //每种检查费用 依次读入 此处可扩展 struct money totalcost; //所有检查总费用 }check1; struct prescribe{ //开药 struct pill{ //药品信息 char pillname[20]; //药品名称 struct money price; //单价 int count; //药品数量 }piller[100]; //药品类对象 struct money totalcost; //所有药品总费用 }prescribe1; struct inhospital { //住院 int startdate[2]; //住院开始日期 int planoutdate[2];//预计出院日期 struct money cashin; //住院押金 }inhospital1; //第一个是字母l 第二个是数字1 }; struct record{ //诊疗记录 char number[20]; // 挂号,8位 包含病人id两位,医生id两位,挂号月、日四位 为应对首位为0的情况所以用字符串实现 int time[4]; //time[0]-time[3]分别对应月日时分 struct money cost; //费用(该条诊疗记录的) ,需要输出的时候按两位小数输出,分别对应角分 struct patient pat; //实例化命名规则:取前三个字母 struct doctor doc; struct cases cas; struct record *next; }; extern struct record * head; //诊疗记录表头指针作为全局变量 struct record * add(struct record* p); //从文件中添加诊疗记录 struct record* regist( struct record* p); //挂号(即手动录入一条诊疗记录) void search(void); //查询模块 void output(struct record* p); //打印一个节点函数 void convert(struct money* a); //金额换算函数 struct record* modify(struct record* p); //修改 struct record* delete1(struct record* p); //删除 void save(void); //保存到文件 2、regist.cpp #include "base.h" int createid(void) { //生成患者id (值为当前患者最大id+1) int biggest = 0; struct record * now=head->next; biggest = now->pat.id; while (now != NULL) { if (now->pat.id > biggest) { biggest = now->pat.id; } now = now->next; } return biggest + 1; } struct record* regist(struct record* p) { int i,m; //i为循环控制变量 m用来读入后面键入的医生工号 struct record* x; x = (struct record*)malloc(sizeof(struct record)); //创建新节点 p->next = x; p = p->next; x = NULL; p->next = NULL; int a; p->cost.yuan = 0; //消费金额初始化 p->cost.jiao = 0; p->cost.fen= 0; p->cas.check1.totalcost.yuan = 0; //检查费用 p->cas.check1.totalcost.jiao = 0; p->cas.check1.totalcost.fen = 0; p->cas.prescribe1.totalcost.yuan = 0; //开药费用 p->cas.prescribe1.totalcost.jiao = 0; p->cas.prescribe1.totalcost.fen = 0; printf("n********挂号功能********n"); printf("请问您是否已有id?1是0否n"); //录入病人信息 scanf("%d", &a); if (a==1) { printf("请输入您的id:n"); scanf("%d", &p->pat.id); } else { p->pat.id = createid(); printf("已为您生成 您的id为%dn", p->pat.id); } printf("请输入您的姓名:n"); scanf("%s", p->pat.name); printf("请输入您的年龄:n"); scanf("%d", &p->pat.age); printf("请按照月 日 时 分 间隔输入当前时间:n"); //挂号时间 for (i = 0; i < 4; i++) { scanf("%d", &p->time[i]); } printf("n"); printf("科室1——内科 科室2——外科 级别1——住院医师 级别2——主治医师 n"); //挂号 选择医生 printf("科室3——妇产科 科室4——儿科 级别3——副主任医师 级别4——主任医师 n"); printf("科室5——口腔科 科室6——耳鼻喉科 出诊日期用七位的0、1代表周一到周日 出诊为1 不出诊为0 n"); printf("n"); printf("科室 工号 姓名 级别 出诊日期n"); printf("1 10 王一 1 1 0 1 0 0 0 0n"); printf("1 11 王四 2 0 0 1 1 0 0 0n"); printf("1 12 王五 2 0 0 0 1 1 0 0n"); printf("1 13 赵二 4 0 1 1 0 0 0 1n"); printf("n"); printf("2 7 赵三 1 1 1 1 0 0 0 0n"); printf("2 9 王二 2 1 1 0 0 0 0 0n"); printf("2 8 赵五 2 1 0 1 0 0 0 0n"); printf("2 6 钱一 4 1 0 0 0 0 1 0n"); printf("n"); printf("3 3 钱二 1 1 1 0 1 0 0 0n"); printf("3 2 钱三 2 0 0 0 1 1 1 0n"); printf("3 4 钱五 3 1 1 0 0 0 0 0n"); printf("3 1 孙一 4 0 1 1 0 0 0 0n"); printf("n"); printf("4 16 孙二 1 1 1 1 0 0 0 0n"); printf("4 15 孙三 1 1 0 0 0 0 1 0n"); printf("4 5 孙五 2 1 1 1 0 0 0 0n"); printf("4 14 李一 4 0 0 0 0 1 0 1n"); printf("n"); printf("5 19 李二 1 0 0 0 1 1 1 0n"); printf("5 18 李三 1 0 0 0 1 0 1 0n"); printf("5 17 李五 3 0 1 1 1 0 0 0n"); printf("5 20 吴一 4 0 0 0 0 0 1 1n"); printf("n"); printf("6 23 吴二 1 0 0 0 1 1 1 1n"); printf("6 24 吴三 2 1 1 0 0 1 0 0n"); printf("6 21 吴四 3 0 0 0 1 1 0 0n"); printf("6 22 吴五 4 1 0 1 0 0 0 0n"); printf("n"); printf("请输入您选择挂号的医生工号:"); scanf("%d", &m); printf("n"); switch (m) { case 1: p->doc.id=m; strcpy(p->doc.name, "孙一"); p->doc.level = 4; p->doc.section = 3; p->doc.schedule[0] = 0; p->doc.schedule[1] = 1; p->doc.schedule[2] = 1; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 2: p->doc.id = m; strcpy(p->doc.name, "钱三"); p->doc.level = 2; p->doc.section = 3; p->doc.schedule[0] = 0; p->doc.schedule[1] = 0; p->doc.schedule[2] = 0; p->doc.schedule[3] = 1; p->doc.schedule[4] = 1; p->doc.schedule[5] = 1; p->doc.schedule[6] = 0; break; case 3: p->doc.id = m; strcpy(p->doc.name, "钱二"); p->doc.level = 1; p->doc.section = 3; p->doc.schedule[0] = 1; p->doc.schedule[1] = 1; p->doc.schedule[2] = 0; p->doc.schedule[3] = 1; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 4: p->doc.id = m; strcpy(p->doc.name, "钱五"); p->doc.level = 3; p->doc.section = 3; p->doc.schedule[0] = 1; p->doc.schedule[1] = 1; p->doc.schedule[2] = 0; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 5: p->doc.id = m; strcpy(p->doc.name, "孙五"); p->doc.level = 2; p->doc.section = 4; p->doc.schedule[0] = 1; p->doc.schedule[1] = 1; p->doc.schedule[2] = 1; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 6: p->doc.id = m; strcpy(p->doc.name, "钱一"); p->doc.level = 4; p->doc.section = 2; p->doc.schedule[0] = 1; p->doc.schedule[1] = 0; p->doc.schedule[2] = 0; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 1; p->doc.schedule[6] = 0; break; case 7: p->doc.id = m; strcpy(p->doc.name, "赵三"); p->doc.level = 1; p->doc.section = 2; p->doc.schedule[0] = 1; p->doc.schedule[1] = 1; p->doc.schedule[2] = 1; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 8: p->doc.id = m; strcpy(p->doc.name, "赵五"); p->doc.level = 2; p->doc.section = 2; p->doc.schedule[0] = 1; p->doc.schedule[1] = 0; p->doc.schedule[2] = 1; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 9: p->doc.id = m; strcpy(p->doc.name, "王二"); p->doc.level = 2; p->doc.section = 2; p->doc.schedule[0] = 1; p->doc.schedule[1] = 1; p->doc.schedule[2] = 0; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 10: p->doc.id = m; strcpy(p->doc.name, "王一"); p->doc.level = 1; p->doc.section = 1; p->doc.schedule[0] = 1; p->doc.schedule[1] = 0; p->doc.schedule[2] = 1; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 11: p->doc.id = m; strcpy(p->doc.name, "王四"); p->doc.level = 2; p->doc.section = 1; p->doc.schedule[0] = 0; p->doc.schedule[1] = 0; p->doc.schedule[2] = 1; p->doc.schedule[3] = 1; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 12: p->doc.id = m; strcpy(p->doc.name, "王五"); p->doc.level = 2; p->doc.section = 1; p->doc.schedule[0] = 0; p->doc.schedule[1] = 0; p->doc.schedule[2] = 0; p->doc.schedule[3] = 1; p->doc.schedule[4] = 1; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 13: p->doc.id = m; strcpy(p->doc.name, "赵二"); p->doc.level = 4; p->doc.section = 1; p->doc.schedule[0] = 0; p->doc.schedule[1] = 1; p->doc.schedule[2] = 1; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 1; break; case 14: p->doc.id = m; strcpy(p->doc.name, "李一"); p->doc.level = 4; p->doc.section = 4; p->doc.schedule[0] = 0; p->doc.schedule[1] = 0; p->doc.schedule[2] = 0; p->doc.schedule[3] = 0; p->doc.schedule[4] = 1; p->doc.schedule[5] = 0; p->doc.schedule[6] = 1; break; case 15: p->doc.id = m; strcpy(p->doc.name, "孙三"); p->doc.level = 1; p->doc.section = 4; p->doc.schedule[0] = 1; p->doc.schedule[1] = 0; p->doc.schedule[2] = 0; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 1; p->doc.schedule[6] = 0; break; case 16: p->doc.id = m; strcpy(p->doc.name, "孙二"); p->doc.level = 1; p->doc.section = 4; p->doc.schedule[0] = 1; p->doc.schedule[1] = 1; p->doc.schedule[2] = 1; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 17: p->doc.id = m; strcpy(p->doc.name, "李五"); p->doc.level = 3; p->doc.section = 5; p->doc.schedule[0] = 0; p->doc.schedule[1] = 1; p->doc.schedule[2] = 1; p->doc.schedule[3] = 1; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 18: p->doc.id = m; strcpy(p->doc.name, "李三"); p->doc.level = 1; p->doc.section = 5; p->doc.schedule[0] = 0; p->doc.schedule[1] = 0; p->doc.schedule[2] = 0; p->doc.schedule[3] = 1; p->doc.schedule[4] = 0; p->doc.schedule[5] = 1; p->doc.schedule[6] = 0; break; case 19: p->doc.id = m; strcpy(p->doc.name, "李二"); p->doc.level = 1; p->doc.section = 5; p->doc.schedule[0] = 0; p->doc.schedule[1] = 0; p->doc.schedule[2] = 0; p->doc.schedule[3] = 1; p->doc.schedule[4] = 1; p->doc.schedule[5] = 1; p->doc.schedule[6] = 0; break; case 20: p->doc.id = m; strcpy(p->doc.name, "吴一"); p->doc.level = 4; p->doc.section = 5; p->doc.schedule[0] = 0; p->doc.schedule[1] = 0; p->doc.schedule[2] = 0; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 1; p->doc.schedule[6] = 1; break; case 21: p->doc.id = m; strcpy(p->doc.name, "吴四"); p->doc.level = 3; p->doc.section = 6; p->doc.schedule[0] = 0; p->doc.schedule[1] = 0; p->doc.schedule[2] = 0; p->doc.schedule[3] = 1; p->doc.schedule[4] = 1; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 22: p->doc.id = m; strcpy(p->doc.name, "吴五"); p->doc.level = 4; p->doc.section = 6; p->doc.schedule[0] = 1; p->doc.schedule[1] = 0; p->doc.schedule[2] = 1; p->doc.schedule[3] = 0; p->doc.schedule[4] = 0; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; case 23: p->doc.id = m; strcpy(p->doc.name, "吴二"); p->doc.level = 1; p->doc.section = 6; p->doc.schedule[0] = 0; p->doc.schedule[1] = 0; p->doc.schedule[2] = 0; p->doc.schedule[3] = 1; p->doc.schedule[4] = 1; p->doc.schedule[5] = 1; p->doc.schedule[6] = 1; break; case 24: p->doc.id = m; strcpy(p->doc.name, "吴三"); p->doc.level = 2; p->doc.section = 6; p->doc.schedule[0] = 1; p->doc.schedule[1] = 1; p->doc.schedule[2] = 0; p->doc.schedule[3] = 0; p->doc.schedule[4] = 1; p->doc.schedule[5] = 0; p->doc.schedule[6] = 0; break; } printf("n"); printf("请问您是否需要进行检查:输入0为否 输入1为是 "); scanf("%d", &p->cas.ifcheck); if (p->cas.ifcheck != 0 && p->cas.ifcheck != 1) { printf("n输入有误 请重新输入!n"); scanf("%d", &p->cas.ifcheck); } int flag,count=0; if (p->cas.ifcheck==1) { i = 0; while (1) { printf("1.血常规 30元n"); printf("2.尿常规 40元n"); printf("3.测血糖 10元n"); printf("4.CT 300元n"); printf("5.彩超 200元n"); printf("0.退出n"); scanf("%d", &flag); switch (flag) { case 1: p->cas.check1.percost[i].yuan = 30; p->cas.check1.percost[i].jiao= 0; p->cas.check1.percost[i].fen = 0; p->cas.check1.totalcost.yuan += p->cas.check1.percost[i].yuan; i++; break; case 2: p->cas.check1.percost[i].yuan = 40; p->cas.check1.percost[i].jiao = 0; p->cas.check1.percost[i].fen = 0; p->cas.check1.totalcost.yuan += p->cas.check1.percost[i].yuan; i++; break; case 3: p->cas.check1.percost[i].yuan = 10; p->cas.check1.percost[i].jiao = 0; p->cas.check1.percost[i].fen = 0; p->cas.check1.totalcost.yuan += p->cas.check1.percost[i].yuan; i++; break; case 4: p->cas.check1.percost[i].yuan = 300; p->cas.check1.percost[i].jiao = 0; p->cas.check1.percost[i].fen = 0; p->cas.check1.totalcost.yuan += p->cas.check1.percost[i].yuan; i++; break; case 5: p->cas.check1.percost[i].yuan = 200; p->cas.check1.percost[i].jiao = 0; p->cas.check1.percost[i].fen = 0; p->cas.check1.totalcost.yuan += p->cas.check1.percost[i].yuan; i++; break; case 0: p->cas.check1.percost[i].yuan = -1; break; default: printf("输入有误 请重新输入:n"); continue; } convert(&(p->cas.check1.totalcost)); if (flag == 0) break; } } printf("n"); printf("请问您是否需要进行开药:输入0为否 输入1为是 "); scanf("%d", &p->cas.ifprescribe); if (p->cas.ifprescribe != 0 && p->cas.ifprescribe != 1) { printf("n输入有误 请重新输入!n"); scanf("%d", &p->cas.ifprescribe); } if (p->cas.ifprescribe==1) { i = 0; while (1) { printf("1.感康 18元n"); printf("2.金银花颗粒 20元n"); printf("3.枇杷露 12元n"); printf("4.金嗓子喉宝 13元n"); printf("0.退出n"); scanf("%d", &flag); switch (flag) { case 1: printf("购买数量:n"); scanf("%d", &count); strcpy(p->cas.prescribe1.piller[i].pillname, "感康"); p->cas.prescribe1.piller[i].price.yuan = 18; p->cas.prescribe1.piller[i].price.jiao = 0; p->cas.prescribe1.piller[i].price.fen = 0; p->cas.prescribe1.piller[i].count = count; p->cas.prescribe1.totalcost.yuan += count * 18; i++; break; case 2: printf("购买数量:n"); scanf("%d", &count); strcpy(p->cas.prescribe1.piller[i].pillname, "金银花颗粒"); p->cas.prescribe1.piller[i].price.yuan = 20; p->cas.prescribe1.piller[i].price.jiao = 0; p->cas.prescribe1.piller[i].price.fen = 0; p->cas.prescribe1.piller[i].count = count; p->cas.prescribe1.totalcost.yuan += count * 20; i++; break; case 3: printf("购买数量:n"); scanf("%d", &count); strcpy(p->cas.prescribe1.piller[i].pillname, "枇杷露"); p->cas.prescribe1.piller[i].price.yuan = 12; p->cas.prescribe1.piller[i].price.jiao = 0; p->cas.prescribe1.piller[i].price.fen = 0; p->cas.prescribe1.piller[i].count = count; p->cas.prescribe1.totalcost.yuan += count * 12; i++; break; case 4: printf("购买数量:n"); scanf("%d", &count); strcpy(p->cas.prescribe1.piller[i].pillname, "金嗓子喉宝"); p->cas.prescribe1.piller[i].price.yuan = 13; p->cas.prescribe1.piller[i].price.jiao = 0; p->cas.prescribe1.piller[i].price.fen = 0; p->cas.prescribe1.piller[i].count = count; p->cas.prescribe1.totalcost.yuan += count * 13; i++; break; case 0: strcpy(p->cas.prescribe1.piller[i].pillname, "over"); break; default: printf("输入有误 请重新输入:n"); continue; } convert(&(p->cas.prescribe1.totalcost)); if (flag == 0) break; } } printf("n"); printf("请问您是否需要进行住院:输入0为否 输入1为是 "); scanf("%d", &p->cas.ifinhospital); if (p->cas.ifinhospital != 0 && p->cas.ifinhospital != 1) { printf("n输入有误 请重新输入!n"); scanf("%d", &p->cas.ifinhospital); } if (p->cas.ifinhospital==1) { printf("请输入住院开始月、日:n"); scanf("%d %d", &p->cas.inhospital1.startdate[0], &p->cas.inhospital1.startdate[1]); printf("请输入预计出院月、日:n"); scanf("%d %d", &p->cas.inhospital1.planoutdate[0], &p->cas.inhospital1.planoutdate[1]); printf("请按元 角 分 依次输入您的住院押金金额 至少为1000元n"); scanf("%d", &p->cas.inhospital1.cashin.yuan); scanf("%d", &p->cas.inhospital1.cashin.jiao); scanf("%d", &p->cas.inhospital1.cashin.fen); if (p->cas.inhospital1.cashin.yuan < 1000) { printf("输入有误 请重新输入!n"); printf("请按元 角 分 依次输入您的住院押金金额 至少为1000元n"); scanf("%d", &p->cas.inhospital1.cashin.yuan); scanf("%d", &p->cas.inhospital1.cashin.jiao); scanf("%d", &p->cas.inhospital1.cashin.fen); } convert(&(p->cas.inhospital1.cashin)); } //生成挂号 char j[100], k[100]; if (p->pat.id <= 9) { //处理患者id首位为0的情况 sprintf(j, "%d", p->pat.id); //把整型转换成字符串 p->number[0] = '0'; p->number[1] = ' '; strcat(p->number, j); //字符串拼接 } else { sprintf(p->number, "%d", p->pat.id); } if (p->doc.id <= 9) { sprintf(k, "%d", p->doc.id); p->number[2] = '0'; p->number[3] = ' '; strcat(p->number, k); } else { sprintf(k, "%d", p->doc.id); strcat(p->number, k); } if (p->time[0] > 9) { //月为两位 sprintf(j, "%d", p->time[0]); strcat(p->number, j); } else { //月为一位 p->number[4] = '0'; p->number[5] = ' '; sprintf(j, "%d", p->time[0]); strcat(p->number, j); } if (p->time[1] > 9) { //日为两位 sprintf(j, "%d", p->time[1]); strcat(p->number, j); } else { //日为一位 p->number[6] = '0'; p->number[7] = ' '; sprintf(j, "%d", p->time[1]); strcat(p->number, j); } printf("n"); printf("您已成功挂号! 您的挂号为%sn", p->number); p->cost.yuan = p->cas.check1.totalcost.yuan + p->cas.prescribe1.totalcost.yuan; //统计消费金额 p->cost.jiao = p->cas.check1.totalcost.jiao + p->cas.prescribe1.totalcost.jiao; p->cost.fen = p->cas.check1.totalcost.fen + p->cas.prescribe1.totalcost.fen; convert(&(p->cost)); printf("n"); return p; } 3、add.cpp #include "base.h" void convert(struct money *a) { //金额换算函数 a->jiao += a->fen / 10; a->fen = a->fen % 10; a->yuan += a->jiao / 10; a->jiao = a->jiao % 10; return ; } struct record * add(struct record* p) { //add函数实现的是在所给节点指针后链接n个新节点 FILE* fp; int n, i = 0, j; //n为录入诊疗记录的条数,i ,j是循环控制变量 if ((fp = fopen("test.txt", "r"))==NULL) { printf("Fail to open the file!n"); return NULL; } struct record * x; //x用于创建链表新节点 printf("n********录入功能********n"); printf("请输入您想录入诊疗记录的条数: "); scanf("%d", &n); printf("n"); //下次输出另起一行 if (n <= 0||n>30) { printf("输入不合法!n"); return NULL; } while (i < n) { //录入n条诊疗记录 if (feof(fp)) { printf("已经到达文件尾部n"); return NULL; } x = (struct record*)malloc(sizeof(struct record)); p->next = x; p = p->next; x = NULL; p->next = NULL; fscanf(fp, "%s", &p->number); //读入挂号 for (j = 0; j < 4; j++) //读入时间 fscanf(fp, "%d", &p->time[j]); p->cost.yuan = 0; //该条诊疗记录的费用初始化为0 p->cost.jiao = 0; p->cost.fen = 0; p->cas.check1.totalcost.yuan = 0; //检查费用初始化为0 p->cas.check1.totalcost.jiao = 0; p->cas.check1.totalcost.fen = 0; p->cas.prescribe1.totalcost.yuan = 0; //开药费用初始化为0 p->cas.prescribe1.totalcost.jiao = 0; p->cas.prescribe1.totalcost.fen = 0; fscanf(fp, "%d", &p->pat.id); //病人信息 fscanf(fp, "%s", p->pat.name); fscanf(fp, "%d", &p->pat.age); fscanf(fp, "%d", &p->doc.id); //医生信息 fscanf(fp, "%s", p->doc.name); fscanf(fp, "%d", &p->doc.level); fscanf(fp, "%d", &p->doc.section); for (j = 0; j < 7; j++) { fscanf(fp, "%d", &p->doc.schedule[j]); //用一个长度为7的数组来保存医生的出诊时间, } fscanf(fp, "%d", &p->cas.ifcheck); //诊疗情况 fscanf(fp, "%d", &p->cas.ifprescribe); fscanf(fp, "%d", &p->cas.ifinhospital); j = 0; if (p->cas.ifcheck == 1) { //如果进行了检查 则进入下层统计费用 否则什么也不执行 检查总费用为0 fscanf(fp, "%d", &p->cas.check1.percost[j].yuan); //先读入一个然后进入循环 while (p->cas.check1.percost[j].yuan != -1) { //约定输入元为-1时结束 fscanf(fp, "%d", &p->cas.check1.percost[j].jiao); fscanf(fp, "%d", &p->cas.check1.percost[j].fen); p->cas.check1.totalcost.yuan += p->cas.check1.percost[j].yuan; //下三行即是将单项检查费用统计到总费用中 此时角分均可大于10 p->cas.check1.totalcost.jiao += p->cas.check1.percost[j].jiao; p->cas.check1.totalcost.fen += p->cas.check1.percost[j].fen; j++; fscanf(fp, "%d", &p->cas.check1.percost[j].yuan); //最后这个-1还是读进来了 存到了最后一项检查费用的后面 } convert(&(p->cas.check1.totalcost)); //把金额换算成十进制 按地址传送 } //检查录入完毕 if (p->cas.ifprescribe == 1) { fscanf(fp, "%s", p->cas.prescribe1.piller[0].pillname); j = 0; while (strcmp(p->cas.prescribe1.piller[j].pillname, "over") != 0) { //读入所开药品的信息 约定药品名为over时为结束 fscanf(fp, "%d", &p->cas.prescribe1.piller[j].price.yuan); //一种药的单价 fscanf(fp, "%d", &p->cas.prescribe1.piller[j].price.jiao); fscanf(fp, "%d", &p->cas.prescribe1.piller[j].price.fen); fscanf(fp, "%d", &p->cas.prescribe1.piller[j].count); //药品数 p->cas.prescribe1.totalcost.yuan += p->cas.prescribe1.piller[j].count * p->cas.prescribe1.piller[j].price.yuan; //统计开药总费用,此时角分都可能大于10 p->cas.prescribe1.totalcost.jiao += p->cas.prescribe1.piller[j].count * p->cas.prescribe1.piller[j].price.jiao; p->cas.prescribe1.totalcost.fen += p->cas.prescribe1.piller[j].count * p->cas.prescribe1.piller[j].price.fen; j++; fscanf(fp, "%s", p->cas.prescribe1.piller[j].pillname); } convert(&(p->cas.prescribe1.totalcost)); //把金额换算成十进制 按地址传送 } //开药录入完毕 if (p->cas.ifinhospital == 1) { fscanf(fp, "%d", &p->cas.inhospital1.startdate[0]); //读入住院日期 月 日 fscanf(fp, "%d", &p->cas.inhospital1.startdate[1]); fscanf(fp, "%d", &p->cas.inhospital1.planoutdate[0]); //读入预计出院日期 月 日 fscanf(fp, "%d", &p->cas.inhospital1.planoutdate[1]); fscanf(fp, "%d", &p->cas.inhospital1.cashin.yuan); //读入押金 fscanf(fp, "%d", &p->cas.inhospital1.cashin.jiao); fscanf(fp, "%d", &p->cas.inhospital1.cashin.fen); convert(&(p->cas.inhospital1.cashin)); //处理输入金额不规范的情况 if (p->cas.inhospital1.cashin.yuan < 1000) { printf("请挂号为%s的患者缴纳住院押金,您的押金已不足n", p->number); } } i++; //循环控制变量+1 读入诊疗记录数量+1 p->cost.yuan = p->cas.check1.totalcost.yuan + p->cas.prescribe1.totalcost.yuan; p->cost.jiao = p->cas.check1.totalcost.jiao + p->cas.prescribe1.totalcost.jiao; p->cost.fen = p->cas.check1.totalcost.fen + p->cas.prescribe1.totalcost.fen; convert(&(p->cost)); }; printf("%d条诊疗记录已录入完毕。n", n); printf("n"); fclose(fp); return p; } , &FirstChoose2); Sleep(100);//延时,降低CPU占用率,并且做到点击效果 p = regist(p); } if (msg.x > 489 && msg.x < 659 && msg.y > 455 && msg.y < 555)//鼠标点击修改 { loadimage(&FirstChoose3, "FirstChoose3.jpg"); putimage(0, 0, &FirstChoose3); Sleep(100);//延时,降低CPU占用率,并且做到点击效果 p = modify(p); } if (msg.x > 709 && msg.x < 879 && msg.y > 455 && msg.y < 555)//鼠标点击删除 { loadimage(&FirstChoose4, "FirstChoose4.jpg"); putimage(0, 0, &FirstChoose4); Sleep(100);//延时,降低CPU占用率,并且做到点击效果 4、save.cpp #include "base.h" void save(void) { FILE* fp; fp = fopen("storage.txt", "w"); if (fp == NULL) { printf("打开文件失败!返回上层n"); return; } struct record* p = head->next; while (p != NULL) { int i; fprintf(fp,"挂号:%sn", p->number); fprintf(fp, "时间:%d月 %d日 %d时 %d分n", p->time[0], p->time[1], p->time[2], p->time[3]); fprintf(fp, "费用:%d元 %d角 %d分n", p->cost.yuan, p->cost.jiao, p->cost.fen); fprintf(fp, "患者 ID:%d 姓名:%s 年龄:%dn", p->pat.id, p->pat.name, p->pat.age); fprintf(fp, "医生 工号:%d 姓名:%s 级别:%d 科室:%d n 出诊时间:", p->doc.id, p->doc.name, p->doc.level, p->doc.section); if (p->doc.schedule[0] == 1) //打印医生出诊时间 fprintf(fp, " 周一"); if (p->doc.schedule[1] == 1) fprintf(fp, " 周二"); if (p->doc.schedule[2] == 1) fprintf(fp, " 周三"); if (p->doc.schedule[3] == 1) fprintf(fp, " 周四"); if (p->doc.schedule[4] == 1) fprintf(fp, " 周五"); if (p->doc.schedule[5] == 1) fprintf(fp, " 周六"); if (p->doc.schedule[6] == 1) fprintf(fp, " 周日"); fprintf(fp, "nn"); fprintf(fp, "诊疗情况:nn"); if (p->cas.ifcheck == 1) { fprintf(fp, "进行了检查n"); i = 0; fprintf(fp, "各项检查费用分别为:"); while (p->cas.check1.percost[i].yuan != -1) { fprintf(fp, "%d元 %d角 %d分 ", p->cas.check1.percost[i].yuan, p->cas.check1.percost[i].jiao, p->cas.check1.percost[i].fen); i++; } fprintf(fp, "n"); fprintf(fp, "所有检查总费用为:%d元 %d角 %d分n", p->cas.check1.totalcost.yuan, p->cas.check1.totalcost.jiao, p->cas.check1.totalcost.fen); } if (p->cas.ifprescribe == 1) { fprintf(fp, "进行了开药n"); i = 0; while (strcmp(p->cas.prescribe1.piller[i].pillname, "over") != 0) { fprintf(fp, "药品名:%s ", p->cas.prescribe1.piller[i].pillname); fprintf(fp, "单价:%d元 %d角 %d分 ", p->cas.prescribe1.piller[i].price.yuan, p->cas.prescribe1.piller[i].price.jiao, p->cas.prescribe1.piller[i].price.fen); fprintf(fp, "数量:%dn", p->cas.prescribe1.piller[i].count); i++; } fprintf(fp, "所有药品总价:%d元 %d角 %d分n", p->cas.prescribe1.totalcost.yuan, p->cas.prescribe1.totalcost.jiao, p->cas.prescribe1.totalcost.fen); } if (p->cas.ifinhospital == 1) { fprintf(fp, "进行了住院n"); fprintf(fp, "住院开始日期:%d月 %d日n", p->cas.inhospital1.startdate[0], p->cas.inhospital1.startdate[1]); fprintf(fp, "预计出院日期:%d月 %d日n", p->cas.inhospital1.planoutdate[0], p->cas.inhospital1.planoutdate[1]); fprintf(fp, "住院押金:%d元 %d角 %d分n", p->cas.inhospital1.cashin.yuan, p->cas.inhospital1.cashin.jiao, p->cas.inhospital1.cashin.fen); } fprintf(fp,"nn"); p = p->next; } printf("n当前系统内所有信息已保存到文件storage.txt中n"); fclose(fp); } 5、search.cpp #include "base.h" void output(struct record* p) { int i; printf("患者 ID:%d 姓名:%s 年龄:%dn", p->pat.id, p->pat.name, p->pat.age); printf("挂号:%sn",p->number); printf("时间:%d月 %d日 %d时 %d分n",p->time[0], p->time[1], p->time[2], p->time[3]); printf("费用:%d元 %d角 %d分n",p->cost.yuan,p->cost.jiao,p->cost.fen); printf("医生 工号:%d 姓名:%s 级别:%d 科室:%d n 出诊时间:",p->doc.id,p->doc.name,p->doc.level,p->doc.section); if (p->doc.schedule[0] == 1) //打印医生出诊时间 printf(" 周一"); if (p->doc.schedule[1] == 1) printf(" 周二"); if (p->doc.schedule[2] == 1) printf(" 周三"); if (p->doc.schedule[3] == 1) printf(" 周四"); if (p->doc.schedule[4] == 1) printf(" 周五"); if (p->doc.schedule[5] == 1) printf(" 周六"); if (p->doc.schedule[6] == 1) printf(" 周日"); printf("nn"); printf("诊疗情况:nn"); if (p->cas.ifcheck == 1) { printf("进行了检查n"); i = 0; printf("各项检查费用分别为:"); while (p->cas.check1.percost[i].yuan != -1) { printf("%d元 %d角 %d分 ", p->cas.check1.percost[i].yuan, p->cas.check1.percost[i].jiao, p->cas.check1.percost[i].fen); i++; } printf("n"); printf("所有检查总费用为:%d元 %d角 %d分n", p->cas.check1.totalcost.yuan, p->cas.check1.totalcost.jiao, p->cas.check1.totalcost.fen); } if (p->cas.ifprescribe == 1) { printf("进行了开药n"); i = 0; while (strcmp(p->cas.prescribe1.piller[i].pillname, "over") != 0) { printf("药品名:%s ", p->cas.prescribe1.piller[i].pillname); printf("单价:%d元 %d角 %d分 ", p->cas.prescribe1.piller[i].price.yuan, p->cas.prescribe1.piller[i].price.jiao, p->cas.prescribe1.piller[i].price.fen); printf("数量:%dn", p->cas.prescribe1.piller[i].count); i++; } printf("所有药品总价:%d元 %d角 %d分n", p->cas.prescribe1.totalcost.yuan, p->cas.prescribe1.totalcost.jiao, p->cas.prescribe1.totalcost.fen); } if (p->cas.ifinhospital == 1) { printf("进行了住院n"); printf("住院开始日期:%d月 %d日n", p->cas.inhospital1.startdate[0], p->cas.inhospital1.startdate[1]); printf("预计出院日期:%d月 %d日n", p->cas.inhospital1.planoutdate[0], p->cas.inhospital1.planoutdate[1]); printf("住院押金:%d元 %d角 %d分n", p->cas.inhospital1.cashin.yuan, p->cas.inhospital1.cashin.jiao, p->cas.inhospital1.cashin.fen); } printf("nn"); } void search(void) { //查询模块 int x,a,b,m,n,flag=0; struct money sum; //营业额初始化为0 sum.yuan = 0; sum.jiao = 0; sum.fen = 0; struct record* p=head->next; while (1) { sum.yuan = 0; sum.jiao = 0; sum.fen = 0; printf("n********查询功能********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("0.退出n"); printf("请输入:n"); scanf("%d",&x ); printf("n"); switch (x) { case 0: return; case 1: p = head->next; while (p != NULL) { output(p); p = p->next; } printf("n查询完毕n"); break; case 2: printf("请输入起始月份、终止月份:n"); scanf("%d%d", &a, &b); if (a > b) { printf("输入有误!请重新输入:n"); scanf("%d%d", &a, &b); } p = head->next; while (p != NULL) { if (p->time[0] >= a && p->time[0] <= b) { output(p); } p = p->next; } printf("n查询完毕n"); break; case 3: printf("请输入该医生工号:"); scanf("%d", &m); p = head->next; while (p != NULL) { if (m == p->doc.id) { flag = 1; output(p); } p = p->next; } if (flag == 0) printf("n不存在该医生的诊疗记录!n"); printf("n查询完毕n"); break; case 4: printf("请输入查询的科室号:n"); scanf("%d", &n); if (n <= 0 || n > 6) { printf("输入有误!请重新输入:n"); scanf("%d", &n); } p = head->next; while (p != NULL) { if (p->doc.section == n) { output(p); } p = p->next; } printf("n查询完毕n"); break; case 5: printf("请输入该患者ID:"); scanf("%d", &m); p = head->next; while (p != NULL) { if (m == p->pat.id) { flag = 1; output(p); } p = p->next; } if (flag == 0) printf("n不存在该患者的诊疗记录!n"); printf("n查询完毕n"); break; case 6: p = head->next; while (p != NULL) { sum.yuan += p->cost.yuan; sum.jiao += p->cost.jiao; sum.fen += p->cost.fen; p = p->next; } convert(&(sum)); printf("当前医院营业额:%d元 %d角 %d分nn", sum.yuan, sum.jiao, sum.fen); break; case 7: printf("科室 工号 姓名 级别 出诊日期n"); printf("1 10 王一 1 1 0 1 0 0 0 0 每周出诊2天n"); printf("1 11 王四 2 0 0 1 1 0 0 0 每周出诊2天n"); printf("1 12 王五 2 0 0 0 1 1 0 0 每周出诊2天n"); printf("1 13 赵二 4 0 1 1 0 0 0 1 每周出诊3天n"); printf("n"); printf("2 7 赵三 1 1 1 1 0 0 0 0 每周出诊3天n"); printf("2 9 王二 2 1 1 0 0 0 0 0 每周出诊2天n"); printf("2 8 赵五 2 1 0 1 0 0 0 0 每周出诊2天n"); printf("2 6 钱一 4 1 0 0 0 0 1 0 每周出诊2天n"); printf("n"); printf("3 3 钱二 1 1 1 0 1 0 0 0 每周出诊3天n"); printf("3 2 钱三 2 0 0 0 1 1 1 0 每周出诊3天n"); printf("3 4 钱五 3 1 1 0 0 0 0 0 每周出诊2天n"); printf("3 1 孙一 4 0 1 1 0 0 0 0 每周出诊2天n"); printf("n"); printf("4 16 孙二 1 1 1 1 0 0 0 0 每周出诊3天n"); printf("4 15 孙三 1 1 0 0 0 0 1 0 每周出诊2天n"); printf("4 5 孙五 2 1 1 1 0 0 0 0 每周出诊3天n"); printf("4 14 李一 4 0 0 0 0 1 0 1 每周出诊2天n"); printf("n"); printf("5 19 李二 1 0 0 0 1 1 1 0 每周出诊3天n"); printf("5 18 李三 1 0 0 0 1 0 1 0 每周出诊2天n"); printf("5 17 李五 3 0 1 1 1 0 0 0 每周出诊3天n"); printf("5 20 吴一 4 0 0 0 0 0 1 1 每周出诊2天n"); printf("n"); printf("6 23 吴二 1 0 0 0 1 1 1 1 每周出诊4天n"); printf("6 24 吴三 2 1 1 0 0 1 0 0 每周出诊3天n"); printf("6 21 吴四 3 0 0 0 1 1 0 0 每周出诊2天n"); printf("6 22 吴五 4 1 0 1 0 0 0 0 每周出诊2天n"); printf("n"); break; case 8: printf("请输入当前月、日:n"); scanf("%d%d",&m,&n); p = head->next; while (p != NULL) { if (p->cas.ifinhospital == 1&&m>=p->cas.inhospital1.startdate[0]&&m<= p->cas.inhospital1.planoutdate[0]&& n>= p->cas.inhospital1.startdate[1] && n <= p->cas.inhospital1.planoutdate[1]) output(p); p = p->next; } } if (x == 0) break; } } 6、modify.cpp #include "base.h" struct record * modify(struct record *p) { char x[100]; int flag=0; struct record *a=head,*b; printf("n********修改功能********n"); printf("请输入您想修改的诊疗记录挂号:n"); scanf("%s",x); while (a->next!= NULL) { if (strcmp(x, a->next->number) == 0) { flag = 1; b = a->next; if (b->next != NULL) { a->next = b->next; free(b); } else { p = a; free(b); } p = regist(p); printf("已修改成功!n"); break; } a = a->next; } if (flag == 0) { printf("不存在该条诊疗记录!自动返回上层n"); } return p; } 7、delete.cpp #include "base.h" struct record* delete1(struct record* p) { char x[100]; int flag = 0; struct record* a = head, * b; printf("n********删除功能********n"); printf("请输入您想删除的诊疗记录挂号:n"); scanf("%s",x); while (a->next != NULL) { if (strcmp(x, a->next->number) == 0) { flag = 1; b = a->next; if (b->next != NULL) { a->next = b->next; free(b); } else { p = a; p->next = NULL; free(b); } printf("n已删除!n"); break; } a = a->next; } if (flag == 0) { printf("不存在该条诊疗记录!自动返回上层n"); } return p; } 8、main.cpp //主函数文件 #include "base.h" struct record* head; int main() { struct record *t; //head是所创建的诊疗记录链表的哨兵节点,t是当前链表指针所在的位置 head = (struct record*)malloc(sizeof(struct record)); t = head; t->next = NULL; if (t == NULL) { printf("申请空间失败,程序中止。 n"); return 0; } int x; while (1) { printf("n ********主菜单********nn"); printf(" | 1.从文件中录入 |n"); printf(" | 2.挂号 |n"); printf(" | 3.修改 |n"); printf(" | 4.删除 |n"); printf(" | 5.查询 |n"); printf(" | 6.保存 |n"); printf(" | 0.退出 |n"); printf("n *******欢迎使用********n"); scanf("%d", &x); switch (x) { case 0: printf("谢谢使用!n"); return 0; case 1: t = add(t); break; case 2: t = regist(t); break; case 3: t = modify(t); break; case 4: t = delete1(t); break; case 5: search(); break; case 6: save(); break; default: printf("输入有误!请重新输入:n"); } } return 0; }
以上就是全部啦,感谢阅读。



