文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 设计任务与自顶向下程序设计图
- 一、具体编程过程难点及设计方法
- 二、源代码
- 反思总结不足与收获
设计任务与自顶向下程序设计图
提示:这里可以添加本文要记录的大概内容:
设计任务:
1.任务选项功能—界面尽可能友好,实现人机交互(让没有编程基础的人也能在指引下完成疫情防控系统的操作)
2.数据输入功能—数据存储采用结构体数组;具有输入提示,分隔符说明
3.算法与统计功能—根据系统设计,实现排序,查找,插入/删除,修改等功能
4.函数层层嵌套调用功能—本系统有特别多的函数功能需要实现,能否成功层层调用是个很重要的关键点
系统功能概述:
管理员功能概述
1.学生信息管理功能,包括添加学生和删除学生
2.填报记录查看功能,可查询学生每日健康情况,核酸,疫苗,离校申请填报情况
3.查询功能,可查询是否体温异常,咳嗽发烧症状
4.统计分析功能,统计出核酸检测次数少,疫苗接种不足,或离校申请次数过多学生
5.离校审核,对学生离校申请进行审核
学生用户功能概述
1.修改信息功能,可以修改自己的个人信息
2.填报记录功能,可以进行每日健康情况,核酸,疫苗,离校申请填报
3.历史填报记录查询
自顶向下程序设计图:
关于自顶向下程序设计图几点说明:
1.由于函数较多,设计图分支较多,局限于word版幅有限,因此只能将设计图横着放,字体也因此变得比较小,读者需放大查看,望读者海涵。
2.实际上每一个meau()函数下都对应着一个跳转函数(待会也会提到这个),跳转函数作用一致,都是方便函数层层嵌套调用,为了简化程序图,这里就不一一列出。
3.关于函数命名问题,这里之所以使用汉语拼音命名而没有根据实际含义进行驼峰命名的原因主要在于,这个程序代码很长,需要调用的函数也特别多,因此为了防止我在编程过程中因忘记函数名或输错函数名导致一直报错,我索性全部有拼音来命名函数,这样就减少了写代码时的记忆负担,也不容易因为这个原因导致代码报错,也望读者海涵。
提示:以下是本篇文章正文内容,下面案例可供参考
一、具体编程过程难点及设计方法在整个编程过程中,我认为发挥着核心作用的一种编程方法就是设身处地思考法,首先我分析了我画出的整个自顶向下程序设计图发现总体来说学生用户功能实现相较于管理员功能实现要更为简单,于是我在设计完meau()的选择结构后首先选择对学生功能进行代码实现,这时候我设身处地的进行思考,在进入疫情防控系统后我应该做些什么,做这些事情的顺序是什么,函数之间逐个调用关系是什么。比如,在注册完成之后我应该返回登陆界面而不是直接退出程序,这就需要先想清楚break语句到底在哪一个层级进行跳出,否则在程序运行时很容易出现不明不白的尴尬结束整个程序的情况,这也是我在写代码时遇到的第一个难点,就是如何返回上一层级,一开始我只能实现单向跳转,而经过思考我想到一个很好的解决方案,即加入一个恒为真的while循环(while(1)),然后在这个循环体中放入一个选择结构swith,并通过在switch中再次调用一个用来跳转到别的函数界面的跳转函数从而实现了双向的跳转,相通了这个跳转到上一界面的方法,很快我对进入下一个子界面也有了编程想法,即通过调用子目录函数在呈现下一功能页面目录的同时调用下一功能对应的功能函数,达到一举两得的效果。另外在这个过程中遇到的一个难点是,对于一个学生而言,其对于了疫苗核酸发烧咳嗽症状体温等等许多数据,由于使用了结构体,如何让他们都对应同一个人,这个问题对我造成了不小的麻烦,一番思考后,我的想法是不妨在指针登陆时,使它们的指向相同,同时struct对应的所有指针使其在初始时都指向NULL,这样做的效果是使学生登陆后几个结构体数组的下标全部相同,为后续的填报查询等功能都提供了极大的便利。这几个问题解决后,学生用户功能这个模块很快就实现完成,并且简单调试后就没有报错情况,于是这个时候我进行了运行过程,发现程序有一个明显的缺点,就是每个层级的提示菜单均在同一页面冗余出现,这个问题的解决方法我百思不得其解,于是我查询了csdn论坛想寻求一个可以清屏的方案,果然c语言提供一种system(“cls”)的清屏操作和system(“pause”)的按任意键继续操作【1】简单掌握用法后我便在对应的位置加上了代码,很好的实现了预期效果。
实现完学生用户功能后,我开始继续实现功能更为复杂的管理员功能,其实核心的逻辑和学生功能的实现是一致的,我之所以先进行函数更少的学生部分,正是一种化繁为简的想法。所以在对管理员层层结构调用进行处理时几乎是行云流水没有什么很大的逻辑障碍,这一模块遇到的主要问题是由于功能较多,需要进行调用的函数也特别多,并且对应的菜单模板各不相同,需要分别定义函数进行调用,过程特别繁琐,需要耐着性子静下心来慢慢写好。在这个点上存在的另一个难题是数据模板的对齐问题,在开始时我尝试使用t来解决这个问题,但是在跑代码时发现数据还是对齐的歪歪扭扭,所以这个时候我想到一个笨方法,就是利用printf时在每个对应数据前加空格,一个一个数据往前试,一个一个空格往前加,一遍一遍地跑代码寻找最优解(这个过程中一个好方法是另外开一个文件,在这个文件中单独测试对齐模板函数,好处是不用在原来的代码上把无关代码注释掉就能达到调试寻找最优解的效果,等在这个新建文件调试寻找到最优解后再把代码复制粘贴)事实证明这样的笨方法虽然耗费的时间成本大了一些但是效果出奇的好,最终利用这种方法我也成功完成了繁琐的模板打印和模板对齐。
最后就是对整个程序的整合和宏观调试。我同样是利用设身处地思考问题的方式,先选择学生界面进行注册,然后登陆刚刚注册的学生账号进行各种信息填报,离校申请等操作,然后退出学生界面,选择管理员界面进行注册登陆,并对刚刚我注册登录的学生所填报的信息记录等进行查询,确保程序做到滴水不漏(建议读者在试我的程序的时候也可以按照同样的思路对我的程序进行测试),在这个整合检验的过程中我及时发现了几个小bug并进行了修改,最终完成了整个程序。
代码如下(示例):
#include反思总结不足与收获#include #include struct guanliyuan{ int id; int mima; }guanli[20]; struct student{ int id; int mima; char xinming[50]; int dianhua; char yuanxi[50]; char banji[50]; } stu[50]; struct meiri{ int id; char riqi[50][50]; float zaotiwen[50]; float zhongtiwen[50]; float wantiwen[50]; int keso[50]; int fashao[50]; } mei[50]; struct hesuan{ int id; char riqi[50][50]; char didian[50][50]; int jieguo[50]; } he[50]; struct yimiao{ int id; int cisu[5]; char riqi[5][50]; char didian[5][50]; int xinghao[5]; } yi[50]; struct lixiaoshenqin{ int id; char yuanyi[50][50]; char chuxiaoxhijian[50][50]; char fanxiaoshijian[50][50]; int shenghezhuangtai[50]; int shengheyijian[50]; } lixiao[50]; struct student *p1=NULL; struct meiri *p2=NULL; struct hesuan *p3=NULL; struct yimiao *p4=NULL; struct lixiaoshenqin *p5=NULL; void menu3() ; //菜单 void menu2() ; //菜单 void menu4(); //菜单 void menu5(); //菜单 void menu6(); //菜单 void menu7(); //菜单 void menu8(); //菜单 void menu9(); //菜单 void menu10(); //菜单 void menu11(); //菜单 void menu12(); //菜单 void menu13(); //菜单 int anjian3(); //用于让用户输出1到3的数字 int anjian4(); //用于让用户输出1到4的数字 int denglu(); //学生登陆函数,用于验证学号密码 int anjian6(); //用于让用户输出1到6的数字 int anjian5(); //用于让用户输出1到5的数字 int anjian2(); //用于让用户输出1到2的数字 int zuce(); //用于学生注册 void xiugaimima(); //密码修改函数,用于修改密码 void xiugaixinming(); //姓名修改函数,用于修改姓名 void xiugaidianhua(); //用于修改电话 void xiugaiyuanxi(); //用于修改院系 void xiugaibanji(); //用于修改班级 void tianbaomeiri(); //用于填报每日 void tianbaohesuan(); //用于填报核酸 void tianbaoyimiao(); //用于疫苗填报 int tianbaolixiao(); //用于离校申请填报 int tiaozuan2(); //过度函数,用来实现不同函数之间的跳转 int tiaozuan3(); //过度函数,用来实现不同函数之间的跳转 int tiaozuan4(); //过度函数,用来实现不同函数之间的跳转 int tianjiaxueshen(); //用于管理员添加学生 int shanchuxueshen(); //用于管理员删除学生 int tiaozuan6(); //过度函数,用来实现不同函数之间的跳转 int tiaozuan7(); //过度函数,用来实现不同函数之间的跳转 int tiaozuan8(); //过度函数,用来实现不同函数之间的跳转 int tiaozuan9(); //过度函数,用来实现不同函数之间的跳转 int tongjilixiao(); //用于管理员统计离校情况 int tongjiyimiao(); //用于管理员统计疫苗情况 int tongjihesuan(); //用于管理员统计核酸情况 int fashaozhenzhuang(); //用于检测是否有发烧症状 int kesozhenzhuang(); //用于检测是否有咳嗽症状 int tiwenyichang(); //用于检测是否有体温异常 int yimiaochaxun(); //用于管理员查询疫苗填报情况 int hesuanchaxun(); //用于管理员查询核酸填报情况 int meirichaxun(); //用于管理员查询每日填报情况 int lixiaochaxun(); //用于管理员查询离校申请填报情况 int zuce1(); //用于管理员注册 int denglu1(); //用于管理员登陆 int guanliyuan(); //管理员主函数,用于实现管理员的各种功能 int lixiaoshenhe(); //用于管理员进行离校审核 int tiaozuan5(); 过度函数,用来实现不同函数之间的跳转 void chaxunmeiri(); //用于学生查询每日填报情况 void chaxunhesuan(); //用于学生查询核酸填报情况 void chaxunyimiao(); //用于学生查询疫苗填报情况 int chaxunlixiao(); //用于学生查询离校填报情况 int anleibiechaxun(); //过度函数,可跳转至四个查询情况的函数 int anshijianchaxun(); //用于学生通过时间查询填报情况 int xueshen(); //学生主函数,用于实现学生的不同功能 int tiaozuan(); //过度函数,用来实现不同函数之间的跳转 void menu(); //菜单 int main() { int i; stu[0].id=21; stu[0].mima=4567; he[0].id=21; yi[0].id=21; lixiao[0].id=21; stu[1].id=24; stu[1].mima=8975; for(i=2;i<50;i++) stu[i].id=0; while(1) { menu(); switch(anjian3()) { case 1: menu8();if(tiaozuan5()==0) continue;break; case 2: menu2();if(tiaozuan()==0) continue;break; case 3: break; } break; } return 0; } void menu3() { system("cls"); printf("欢迎你 %s 使用该系统,请选择以下功能n",(*p1).xinming); printf("**********************************n"); printf("1修改信息n"); printf("2填报记录n"); printf("3查看历史填报记录n"); printf("4返回主菜单n"); } void menu2() { system("cls"); printf(" 用户登录n"); printf("*******************************************************n"); printf("1注册n"); printf("2登陆n"); printf("3返回n"); } void menu4() { system("cls"); printf("请选择你要修改的信息n"); printf("******************************************n"); printf("1.密码n"); printf("2.姓名n"); printf("3.电话n"); printf("4.院系n"); printf("5.班级n"); printf("6.返回上一级界面n"); } void menu5() { system("cls"); printf("请选择你要填报的记录n"); printf("*************************************n"); printf("1.每日健康记录n"); printf("2.核酸填报记录n"); printf("3.疫苗接种记录n"); printf("4.离校申请记录n"); printf("5.返回上一级界面n"); } void menu6() { system("cls"); printf("请选择你要查询的方式n"); printf("*************************************n"); printf("1.按时间查询n"); printf("2.按类别查询n"); printf("3.返回上一级界面n"); } void menu7() { system("cls"); printf("请选择你要查询的类别n"); printf("**************************************n"); printf("1.每日健康填报记录n"); printf("2.核酸填报记录n"); printf("3.疫苗接种填报记录n"); printf("4.离校申请记录n"); printf("5.返回主界面n"); } void menu8() { system("cls"); printf(" 管理员登录n"); printf("***************************n"); printf("1.注册n"); printf("2.登录n"); printf("3.返回n"); } void menu9() { system("cls"); printf("欢迎你 管理员 使用该系统,请选择以下功能n"); printf("***********************************************n"); printf("1.学生信息管理n"); printf("2.查看填报记录n"); printf("3.查询n"); printf("4.统计分析n"); printf("5.离校审核n"); printf("6.返回主菜单n"); } void menu10() { system("cls"); printf(" 请选择你的操作n"); printf("************************************n"); printf("1.添加学生n"); printf("2.删除学生n"); printf("3.取消n"); } void menu11() { system("cls"); printf("请选择你要查看的记录类别n"); printf("*************************************n"); printf("1.每日健康填报记录n"); printf("2.核酸填报记录n"); printf("3.疫苗接种填报记录n"); printf("4.离校申请记录n"); printf("5.返回n"); } void menu12() { system("cls"); printf("请选择你要查看的标准n"); printf("*************************************n"); printf("1.是否有体温异常n"); printf("2.是否有咳嗽症状n"); printf("3.是否有发烧症状n"); printf("4.返回n"); } void menu13() { system("cls"); printf("请选择你要统计的标准n"); printf("**************************************n"); printf("1.核酸检测<5次n"); printf("2.接种疫苗<2次n"); printf("3.离校申请>3次n"); printf("4.返回n"); } int anjian3() { int i; for(;;) {scanf("%d",&i); if(i>=1&&i<=3) return i; else printf("输入错误,请输入正确数字n"); } } int anjian4() { int i; for(;;) { scanf("%d",&i); if(i>=1&&i<=4) return i; else printf("输入错误,请输入正确选项n"); } return 0; } int denglu() { int a,b,i,l=0,k=0; system("cls"); printf("请输入学号"); scanf("%d",&a); for(i=0;i<50;i++) if(a==stu[i].id) {l=1;k=i;break;} if(l!=1) {printf("该学号未注册");system("pause");return 0;} printf("请输入密码(纯数字)"); for(;;) {scanf("%d",&b); if(b==stu[k].mima) {printf("登陆成功");break;} else printf("密码错误,请重新输入或按0退出n"); if(b==0) return 0; } p1=&stu[k]; p2=&mei[k]; p3=&he[k]; p4=&yi[k]; p5=&lixiao[k]; system("pause"); return 1; } int anjian6() { int i; for(;;) { scanf("%d",&i); if(i>=1&&i<=6) return i; else printf("输入错误,请输入正确选项n"); } return 0; } int anjian5() { int i; for(;;) { scanf("%d",&i); if(i>=1&&i<=5) return i; else printf("输入错误,请输入正确选项n"); } return 0; } int anjian2() { int i; for(;;) { scanf("%d",&i); if(i>=1&&i<=2) return i; else printf("输入错误,请输入正确选项n"); } return 0; } int zuce() { int i,a,k=0; system("cls"); printf("请输入学号n"); scanf("%d",&a); for(i=0;stu[i].id!=0;i++) if(a==stu[i].id) {printf("该学号已被注册");system("pause");k=1;break;} if(k==1) return 1; stu[i].id=a; mei[i].id=a; he[i].id=a; yi[i].id=a; lixiao[i].id=a; printf("请输入密码n"); scanf("%d",&stu[i].mima); printf("请输入姓名n"); scanf("%s",stu[i].xinming); printf("请输入电话n"); scanf("%d",&stu[i].dianhua); printf("请输入院系n"); scanf("%s",stu[i].yuanxi); printf("请输入班级n"); scanf("%s",stu[i].banji ); printf("注册成功"); system("pause"); return 1; } void xiugaimima() { int n; system("cls"); printf(" 老密码:%dn",(*p1).mima); printf("请输入新密码(纯数字):n"); scanf("%d",&n); (*p1).mima=n; printf("修改成功,请重新登陆"); system("pause"); } void xiugaixinming() { system("cls"); printf("旧名:");puts((*p1).xinming); printf("请输入新的名字n"); scanf("%s",(*p1).xinming); printf("修改成功"); system("pause"); } void xiugaidianhua() { system("cls"); printf("原电话:%dn",(*p1).dianhua); printf("请输入新电话n"); scanf("%d",&(*p1).dianhua); printf("修改成功"); system("pause"); } void xiugaiyuanxi() { system("cls"); printf("原院系: %s n",(*p1).yuanxi); printf("请输入新院系n"); scanf("%s",(*p1).yuanxi ); printf("修改成功"); system("pause"); } void xiugaibanji() { system("cls"); printf("原班级: %s n",(*p1).banji ); printf("请输入新班级n"); scanf("%s",(*p1).banji); printf("修改成功"); system("pause"); } void tianbaomeiri() { int i,j,k; system("cls"); printf("请填写日期(格式:xxxx年xx月xx日n"); for(i=0;(*p2).riqi[i][0]!=' ';i++); scanf("%s",&(*p2).riqi[i]); printf("%sn",(*p2).riqi[i]); printf("请填写早体温n"); scanf("%f",&(*p2).zaotiwen[i]); printf("%.2f °n",(*p2).zaotiwen[i]); printf("请填写中午体温n"); scanf("%f",&(*p2).zhongtiwen[i]); printf("%.2f °n",(*p2).zhongtiwen[i]); printf("请填写晚体温n"); scanf("%f",&(*p2).wantiwen[i]); printf("%.2f °n",(*p2).wantiwen [i]); printf("请填写是否咳嗽:是选择1,不是选择2n"); j=anjian2(); (*p2).keso[i]=j; if(j==1) printf("是n"); else printf("否n"); printf("请填写是否发烧:是选择1,不是选择2n"); k=anjian2(); (*p2).fashao[i]=k; if(k==1) printf("是n"); else printf("否n"); system("pause"); } void tianbaohesuan() { int i,j; for(i=0;(*p3).riqi[i][0]!=' ';i++) ; system("cls"); printf("请填写日期(格式xxxx年xx月xx日)n"); scanf("%s",(*p3).riqi[i]); printf("%sn",(*p3).riqi[i]); printf("请填写地点n"); scanf("%s",(*p3).didian[i]); printf("%sn",(*p3).didian[i]); printf("请填写结果:阳性请选择1,阴性请选择2n"); j=anjian2(); (*p3).jieguo[i]=j; if(j==1) printf("阳性n"); else printf("阴性n"); system("pause"); } void tianbaoyimiao() { int i,j; for(i=0;(*p4).riqi[i][0]!=' ';i++) ; system("cls"); printf("请填写接种针数n"); (*p4).cisu[i]=anjian3(); printf("%dn",(*p4).cisu[i]); printf("请填写日期(格式xxxx年xx月xx日)n"); scanf("%s",(*p4).riqi[i]); printf("%sn",(*p4).riqi[i]); printf("请填写地点n"); scanf("%s",(*p4).didian[i]); printf("%sn",(*p4).didian[i]); printf("请填写疫苗种类:科兴请选择1,瑞辉请选择2n"); j=anjian2(); (*p4).xinghao[i]=j; if(j==1) printf("科兴n"); else printf("瑞辉n"); system("pause"); } int tianbaolixiao() { int i,j; for(i=0;(*p5).yuanyi[i][0]!=' ';i++) ; system("cls"); printf("请填写离校原因n"); scanf("%s",(*p5).yuanyi[i]); printf("请填写出校时间n"); scanf("%s",(*p5).chuxiaoxhijian[i]); printf("请填写返校时间n"); scanf("%s",(*p5).fanxiaoshijian ); (*p5).shenghezhuangtai[i]=1; system("pause"); } int tiaozuan2() { int i; switch(anjian6()) {case 1: xiugaimima();return 2; case 2: xiugaixinming();break; case 3: xiugaidianhua();break; case 4: xiugaiyuanxi();break; case 5: xiugaibanji();break; case 6: return 0; } return 0; } int tiaozuan3() { int i; switch(anjian5()) {case 1: tianbaomeiri();break; case 2: tianbaohesuan();break; case 3: tianbaoyimiao();break; case 4: tianbaolixiao();break; case 5: return 0; } return 0; } int tiaozuan4() { int i; switch(anjian3()) {case 1: anshijianchaxun();break; case 2: anleibiechaxun();break; case 3: return 0; } return 0; } int tianjiaxueshen() { int i,a,k=0; system("cls"); printf("请输入学号n"); scanf("%d",&a); for(i=0;stu[i].id!=0;i++) if(a==stu[i].id) {printf("该学号已被注册");system("pause");k=1;break;} if(k==1) return 1; stu[i].id=a; mei[i].id=a; he[i].id=a; yi[i].id=a; printf("请输入密码n"); scanf("%d",&stu[i].mima); printf("请输入姓名n"); scanf("%s",stu[i].xinming); printf("请输入电话n"); scanf("%d",&stu[i].dianhua); printf("请输入院系n"); scanf("%s",stu[i].yuanxi); printf("请输入班级n"); scanf("%s",stu[i].banji ); printf("添加成功"); system("pause"); return 1; } int shanchuxueshen() { int a,i,k=0,m,j; char b[50]={' '}; system("cls"); printf("请输入要删除学生的学号n"); scanf("%d",&a); for(i=0;i<50;i++) if(a==stu[i].id) {k=1;break;} if(k==0) printf("该学号不存在n"); else printf("是否删除 %s, 院系: %s ,班级 %sn",stu[i].xinming,stu[i].yuanxi,stu[i].banji); printf("是请按1,否请按2n"); m=anjian2(); if(m==1) {stu[i].id=0; stu[i].mima=0; stu[i].dianhua=0; strcpy(stu[i].banji,b); strcpy(stu[i].yuanxi,b); strcpy(stu[i].xinming,b); mei[i].id=0; he[i].id=0; yi[i].id=0; for(j=0;j<50;j++) {strcpy(mei[i].riqi[j],b); strcpy(he[i].riqi[j],b); strcpy(he[i].didian[j],b); mei[i].zaotiwen[j]=0; mei[i].zhongtiwen[j]=0; mei[i].wantiwen[j]=0; mei[i].keso[j]=0; mei[i].fashao[j]=0; he[i].jieguo[j]=0; } for(j=0;j<5;j++) { yi[i].cisu[j]=0; strcpy(yi[i].riqi[j],b); strcpy(yi[i].didian[j],b); yi[i].xinghao[j]=0; } printf("删除成功n"); } else return 0; return 1; } int tiaozuan6() { int i; switch(anjian3()) {case 1: tianjiaxueshen();break; case 2: shanchuxueshen();break; case 3: break; } return 0; } int tiaozuan7() { int i; switch(anjian5()) {case 1: meirichaxun();break; case 2: hesuanchaxun();break; case 3: yimiaochaxun();break; case 4: lixiaochaxun();break; case 5: break; } return 0; } int tiaozuan8() { int i; switch(anjian4()) {case 1: tiwenyichang();break; case 2: kesozhenzhuang();break; case 3: fashaozhenzhuang();break; case 4: return 0; } return 0; } int tiaozuan9() { int i; switch(anjian4()) {case 1: tongjihesuan();break; case 2: tongjiyimiao();break; case 3: tongjilixiao();break; case 4: return 0; } return 0; } int tongjilixiao() { int i,j,k; system("cls"); printf("idn"); for(i=0;i<50;i++) { if(lixiao[i].id!=0) { k=0; for(j=0;j<50;j++) if(lixiao[i].yuanyi[j][0]!=' ') k++; if(k>3) printf("%d",lixiao[i].id); } } system("pause"); return 0; } int tongjiyimiao() { int i,j,k; system("cls"); printf("idn"); for(i=0;i<50;i++) { if(yi[i].id!=0) { k=0; for(j=0;j<5;j++) if(yi[i].riqi[j][0]!=' ') k++; if(k<2) printf("%d",yi[i].id); } } system("pause"); return 0; } int tongjihesuan() { int i,j,k; system("cls"); printf("idn"); for(i=0;i<50;i++) { if(he[i].id!=0) { k=0; for(j=0;j<50;j++) if(he[i].riqi[j][0]!=' ') k++; if(k<5) printf("%d",he[i].id); } } system("pause"); return 0; } int fashaozhenzhuang() { int i,j,k=0; system("cls"); printf("id 时间 发烧n"); for(i=0;i<50;i++) for(j=0;j<50;j++) if(mei[i].fashao[j]==1) {printf("%d %s 是n",mei[i].id,mei[i].riqi[j]); k++;} if(k==0) printf("无发烧症状"); system("pause"); } int kesozhenzhuang() { int i,j,k=0; system("cls"); printf("id 时间 咳嗽n"); for(i=0;i<50;i++) for(j=0;j<50;j++) if(mei[i].keso[j]==1) {printf("%d %s 是n",mei[i].id,mei[i].riqi[j]); k++;} if(k==0) printf("无咳嗽症状"); system("pause"); } int tiwenyichang() { int i,j,k=0; system("cls"); printf( "id 时间 早体温 午体温 晚体温n"); for(i=0;i<50;i++) for(j=0;j<50;j++) if(mei[i].zaotiwen[j]>37.3||mei[i].zhongtiwen[j]>37.3||mei[i].wantiwen[j]>37.3) {printf("%d %s %.2f %.2f %.2fn",mei[i].id,mei[i].riqi[j],mei[i].zaotiwen[j],mei[i].zhongtiwen[j],mei[i].wantiwen[j]); k++; } if(k==0) printf("无体温异常"); system("pause"); } int yimiaochaxun() { int i,j; system("cls"); printf("id 次数 时间 地点 型号n"); for(i=0;i<50;i++) for(j=0;j<5;j++) if(yi[i].riqi[j][0]!=' ') {printf("%d %d %s %s",yi[i].id,yi[i].cisu[j],yi[i].riqi[j],yi[i].didian[j]); if(yi[i].xinghao[j]==1) printf(" 科兴n"); else printf(" 瑞辉n"); } system("pause"); } int hesuanchaxun() { int i,j; system("cls"); printf(" id 日期 地点 结果n"); for(i=0;i<50;i++) for(j=0;j<50;j++) if(he[i].riqi[j][0]!=' ') {printf("%d %s %s",he[i].id,he[i].riqi[j],he[i].didian[j]); if(he[i].jieguo[j]==1) printf(" 阳性n"); else printf(" 阴性n"); } system("pause"); } int meirichaxun() { int i,j; system("cls"); printf(" id 日期 早体温 午体温 晚体温 咳嗽 发烧n"); for(i=0;i<50;i++) for(j=0;j<50;j++) if(mei[i].riqi[j][0]!=' ') {printf("%d %s %.2f %.2f %.2f",mei[i].id,mei[i].riqi[j],mei[i].zaotiwen[j],mei[i].zhongtiwen[j],mei[i].wantiwen[j]); if(mei[i].keso[j]==1) printf(" 是"); else printf(" 否"); if(mei[i].fashao[j]==1) printf(" 是n"); else printf(" 否n"); } system("pause"); } int lixiaochaxun() { int i,j; system("cls"); printf("id 原因 出校时间 返校时间 审核状态 审核结果n"); for(i=0;i<50;i++) for(j=0;j<50;j++) if(lixiao[i].yuanyi[j][0]!=' ') { printf("%d %s %s %s",lixiao[i].id,lixiao[i].yuanyi[j],lixiao[i].chuxiaoxhijian[j],lixiao[i].fanxiaoshijian[j]); if(lixiao[i].shenghezhuangtai[j]==1) printf(" 等待审核n"); else {printf(" 已审核"); if(lixiao[i].shengheyijian[j]==1) printf(" 通过n"); else printf(" 未通过n"); } } system("pause"); } int zuce1() { int i,a,k=0; system("cls"); printf("请输入idn"); scanf("%d",&a); for(i=0;guanli[i].id!=0;i++) if(a==guanli[i].id) {printf("该id已被注册");system("pause");k=1;break;} if(k==1) return 1; guanli[i].id=a; printf("请输入密码n"); scanf("%d",&guanli[i].mima); printf("注册成功"); system("pause"); return 1; } int denglu1() { int a,b,i,l=0,k=0; system("cls"); printf("请输入id"); scanf("%d",&a); for(i=0;i<20;i++) if(a==guanli[i].id) {l=1;k=i;break;} if(l!=1) {printf("该id未注册");system("pause");return 0;} printf("请输入密码(纯数字)"); for(;;) {scanf("%d",&b); if(b==guanli[k].mima) {printf("登陆成功");break;} else printf("密码错误,请重新输入或按0退出n"); if(b==0) return 0; } } int guanliyuan() { int i,j,k,m; while(1){ menu9(); switch(anjian6()) {case 1: menu10();i=tiaozuan6();if(i==0) continue;break; case 2: menu11();j=tiaozuan7();if(j==0) continue;break; case 3: menu12();k=tiaozuan8();if(k==0) continue;break; case 4: menu13();m=tiaozuan9();if(m==0) continue;break; case 5: lixiaoshenhe();continue;break; case 6: return 0; } break; } return 1; } int lixiaoshenhe() { int i,j,m,n,k; system("cls"); printf("坐标(i,j) id 原因 出校时间 返回时间n"); for(i=0;i<50;i++) { if(lixiao[i].id!=0) for(j=0;j<50;j++) if(lixiao[i].shenghezhuangtai[j]==1) { printf("(%d,%d) %d %s %s %sn",i,j,lixiao[i].id,lixiao[i].yuanyi[j],lixiao[i].chuxiaoxhijian[j],lixiao[i].fanxiaoshijian[j]); } } while(1) { printf("请输入你要审核的坐标n"); printf("请输入i"); scanf("%d",&m); printf("请输入j"); scanf("%d",&k); if(lixiao[m].yuanyi[k][0]!=' ') break; } printf("同意请按1,不同意请按2n"); n=anjian2(); if(n==1) { lixiao[m].shenghezhuangtai[k]=2; lixiao[m].shengheyijian[k]=1; } else { lixiao[m].shenghezhuangtai[k]=2; lixiao[m].shengheyijian[k]=2; } system("pause"); } int tiaozuan5() { int i,k,m; i=anjian3(); if(i==1) {k=zuce1();if(k==1) return 0;} if(i==2) {m=denglu1();if(m==0) return 0;if(guanliyuan()==0) return 0;} if(i==3) return 0; return 1; } void chaxunmeiri() { int i; system("cls"); printf(" 日期 早体温 午体温 晚体温 咳嗽 发烧n"); for(i=0;(*p2).riqi[i][0]!=' ';i++) {printf(" %s %.2f %.2f %.2f",(*p2).riqi[i],(*p2).zaotiwen[i],(*p2).zhongtiwen[i],(*p2).wantiwen[i]); if((*p2).keso[i]==1) printf(" 是"); else printf(" 否"); if((*p2).fashao[i]==1) printf(" 是n"); else printf(" 否n"); } system("pause"); } void chaxunhesuan() { int i; system("cls"); printf(" 日期 地点 结果n"); for(i=0;(*p3).riqi[i][0]!=' ';i++) { printf(" %s %s",(*p3).riqi[i],(*p3).didian[i]); if((*p3).jieguo[i]==1) printf(" 阳性n"); else printf(" 阴性n"); } system("pause"); } void chaxunyimiao() { int i; system("cls"); printf(" 次数 日期 地点 类型n"); for(i=0;(*p4).riqi[i][0]!=' ';i++) { printf(" %d %s %s",(*p4).cisu[i],(*p4).riqi[i],(*p4).didian[i]); if((*p4).xinghao[i]==1) printf(" 科兴n"); else printf(" 瑞辉n"); } system("pause"); } int chaxunlixiao() { int i; system("cls"); printf("离校原因 出校时间 返校时间 审核状态 审核意见n"); for(i=0;(*p5).yuanyi[i][0]!=' ';i++) {printf("%s %s %s",(*p5).yuanyi[i],(*p5).chuxiaoxhijian[i],(*p5).fanxiaoshijian[i]); if((*p5).shenghezhuangtai[i]==1) printf(" 等待审核n"); else {printf(" 已审核"); if((*p5).shengheyijian[i]==1) printf(" 通过n"); else printf(" 未通过n"); } } system("pause"); } int anleibiechaxun() { int i; menu7(); switch(anjian5()) {case 1: chaxunmeiri();break; case 2: chaxunhesuan();break; case 3: chaxunyimiao();break; case 4: chaxunlixiao();break; case 5: return 0; } return 1; } int anshijianchaxun() { int i,k=0,m=0,n=0; char a[50]; system("cls"); printf("请输入要查询的日期(格式:xxxx年xx月xx日)n"); scanf("%s",a); for(i=0;i<50;i++) { if(strcmp(a,(*p2).riqi[i])==0) {k=1;break;} } if(k==0) printf("该日期每日尚未填报n"); if(k==1) {printf("每日已填报n"); printf("早体温:%.2f ,午体温:%.2f ,晚体温: %.2f n",(*p2).zaotiwen[i],(*p2).zhongtiwen[i],(*p2).wantiwen[i]); printf("咳嗽:");if((*p2).keso[i]==1) printf("是n"); else printf("否n"); printf("发烧:");if((*p2).fashao[i]==1) printf("是n"); else printf("否n"); } for(i=0;i<50;i++) { if(strcmp(a,(*p3).riqi[i])==0) {m=1;break;} } if(m==0) printf("该日期核酸尚未填报n"); if(m==1) {printf("核酸已填报n"); printf("地点:%s n",(*p3).didian[i]); if((*p3).jieguo[i]==1) printf("结果:阳性n"); else printf("结果:阴性n"); } for(i=0;i<50;i++) { if(strcmp(a,(*p4).riqi[i])==0) {n=1;break;} } if(n==0) printf("该日期疫苗尚未填报n"); if(n==1) {printf("疫苗已填报n"); printf("第 %d 针n",(*p4).cisu[i]); printf("地点: %s n",(*p4).didian[i]); printf("种类: ");if((*p4).xinghao[i]==1) printf("科兴n"); else printf("瑞辉n"); } system("pause"); } int xueshen() { int i,j,k; while(1){ menu3(); switch(anjian4()) {case 1: menu4();i=tiaozuan2();if(i==0) continue;if(i==2) return 0; break; case 2: menu5();j=tiaozuan3();if(j==0) continue;break; case 3: menu6();k=tiaozuan4();if(k==0) continue;break; case 4: return 0; } break; } return 1; } int tiaozuan() { int i,k,m; i=anjian3(); if(i==1) {k=zuce();if(k==1) return 0;} if(i==2) {m=denglu();if(m==0) return 0;if(m==1);if(xueshen()==0) return 0;} if(i==3) return 0; return 1; } void menu() { system("cls"); printf(" 欢迎使用疫情防控信息管理系统n"); printf("***************************************************************************n"); printf("1.管理员登陆n"); printf("2.用户登陆n"); printf("3.退出系统n"); printf("***************************************************************************n"); printf("请选择:"); }
通过本次对校园疫情防控系统的程序编写,我很好的复盘了之前学过的自顶向下的程序设计方法,锻炼了一种设身处地思考问题和化繁为简的思想方法。同时对编程的结构化和模块化有了很深的认识,明白一个系统最重要的是它的结构,结构搭建好剩下的就是往里面填充函数。设计过程中出现了很多问题,在一个个处理他们的过程中,我的校验能力有了很大增强。看着代码从零行到几百接近一千行,功能从最初小小的菜单到能有许多功能,这确实是件很有成就感的事。
然而我的程序还有一些不足和提高之处。一个是对于用户密码采用int型限制较大,只能输入纯数字并且数位不够,另一个是由于对c语言中文件的知识掌握较少,所以数据需要自己输入且不能存储。希望通过后续更深入的学习,我能解决这些问题,真正实现一个功能完备的校园防疫管理系统。



