实验四:健康打卡

您所在的位置:网站首页 为什么完美校园健康打卡提交时出现一个黑条 实验四:健康打卡

实验四:健康打卡

2024-07-02 13:17| 来源: 网络整理| 查看: 265

编写程序模拟实现防疫每日“健康打卡”。

健康打卡需要每天填报以下信息:

日期:年(4位整数)、月(2位整数)、日(2位整数),打卡时可自动取PC机、手机上的当天日期和时间。姓名(3个汉字)专业/部门(20个汉字)学号(12位数字,如202200000011,注意不能定义成int整型数)打卡位置:省、市、区(30个汉字)。(手机打卡时可自动取手机上的定位位置)证件号码(18位数字,注意不能定义成int整型数)手机号(11位数字,注意不能定义成int整型数)性别(1:男,2:女)家族住址(30个汉字)您一日内是否到过学校(1:是,2:否)您现在处于以下哪类地区(1:省外,2:省内其它地市,3:郑州市)本人及共同居住人近14天以来,是否从中高风险地区返回郑州?(1:是,2:否)如有请描述何时、何地返郑等具体情况(30个汉字):该项在第(12)项为“1”时填写您当前的身体健康状况(1:无异常症状,2:有发热-大于等于37.3、咳嗽等症状)您是否已经接种新冠疫苗加强针?(疫苗接种记录可在支付宝健康码页面查询)(1:已接种加强针,2:完成接种,待接种加强针,3:接种部分剂次,4:未接种)本人及共同居住人现在是否有确诊、无症状感染、密接、次密接人员?(1:确诊人员,2:无症状感染者,3:密切接触人员,4:次密接人员,5:无上述情况)您现在是否在被隔离(1:否,2:居家隔离(执行七天居家隔离),3:居家隔离(执行三天两检),4:集中隔离)您一日内是否接到过流行病学调查电话或信息?(1:是,2:否)您是否有其他需要说明的异常情况(30个汉字)【如果是,请务必详细填写】

以上填报信息中的第(2)~(9)项是个人基本信息;第(13)项是当其前一项为特定情况时才需要填报的信息。

要求实现以下四个功能的设计:

录入个人基本信息每日健康打卡。能够实现一人多日连续打卡、一日多人连续打卡,但是每人每日只能打卡一次。重复健康打卡。能够对一人某日重新打卡。查询打卡信息。能够按照学号、日期查询其打卡信息。

输入样例:

       健康打卡

-----------------------------------

录入个人基本信息每日健康打卡重复健康打卡查询打卡信息 退出系统

-----------------------------------

请选择(0~4):1

请输入职工基本信息:

*姓名(3个汉字):

*专业/部门(20个汉字):

*学号(12位数字):

*打卡位置(省、市、区,30个汉字):

*证件号码(18位数字):

*手机号(11位数字):

*性别(1:男,2:女):

*家族住址(30个汉字):

继续输入下一位职工基本信息吗(Y:是,N:否)?

代码实现

#include #include #include #include struct daka{ char num1[20];//日期 char num2[2];//是否到过学校 char num3[2];//现在处于那类地区 char num4[2];//是否为高风险地区返郑 char num5[70];//何时何地返郑等具体情况 char num6[2];//身体健康状况 char num7[2];//是否接种新冠疫苗加强针 char num8[2];//是否密接或患病 char num9[2];//是否被隔离 char num10[2];//是否接到过流行病学调查电话 char num11[70];//其他需要说明的异常情况 struct daka *next; }; struct student{ char num1[10];//姓名 char num2[50];//专业/部门 char num3[20];//学号 char num4[70];//打卡位置 char num5[20];//证件号码 char num6[12];//手机号 char num7[2];//性别 char num8[70];//家族住址 struct daka head; struct student *next; }; void shuruxinxi(struct student *stu){ while(1){ strcpy(stu->head.num1,"");//将日期赋为空串等之后判定使用 printf("请输入职工基本信息:\n"); printf("*姓名(3个汉字):\n"); gets(stu->num1); printf("*专业/部门(20个汉字):\n"); gets(stu->num2); printf("*学号(12位数字):\n"); gets(stu->num3); printf("*打卡位置(省、市、区,30个汉字):\n"); gets(stu->num4); printf("*证件号码(18位数字):\n"); gets(stu->num5); printf("*手机号(11位数字):\n"); gets(stu->num6); printf("*性别(1:男,2:女):\n"); gets(stu->num7); printf("*家族住址(30个汉字):\n"); gets(stu->num8); printf("继续输入下一位职工基本信息吗(Y:是,N:否)?\n"); char choice[2];//选择是否输入下一个人的信息 gets(choice); if(strcmp(choice,"Y")==0){//如果等于Y说明还需要输入下一个人的信息 stu->next=(struct student*)malloc(sizeof(struct student));//为下一个节点分配空间 stu=stu->next;//转向下一个节点 }else{ stu->next=NULL;//下一个节点赋值为NULL break; } } } int caidan(){ system("cls");//清屏 printf("\t 健康打卡\n"); printf("-----------------------------------\n"); printf("\t1.录入个人基本信息\n"); printf("\t2.每日健康打卡\n"); printf("\t3.重复健康打卡\n"); printf("\t4.健康打卡查询\n"); printf("\t0.退出系统\n"); printf("-----------------------------------\n"); printf("请选择(0~4):"); int choice; scanf("%d",&choice); getchar(); return choice;//以其返回值作为switch语句的条件值 } void daka(struct student *stu){ printf("请输入学号\n"); char xuehao[20]; gets(xuehao); while(stu!=NULL&&strcmp(stu->num3,xuehao)!=0){//找到学号与要打卡的人相同的结构体 stu=stu->next;//遍历链表找到目标 } if(stu==NULL){//如果stu==NULL说明已经遍历整个链表了但是未找到目标 printf("没有该同学的信息,请按任意键返回主菜单进行个人信息录入\n");//进行提示 system("pause");//暂停,因为重新打印菜单会刷屏,防止用户看不到提示信息 }else{//进入此分支说明找到了目标 char riqi[20]; printf("请输入日期(日期格式为yyyy-mm-dd)\n");//输入打卡日期 gets(riqi); struct daka *p=&stu->head;//定义一个指针指向打卡信息结构体,主要是用来实现一人多次打卡 while(strcmp(p->num1,"")!=0&&strcmp(p->num1,riqi)!=0){//因为我们前面对日期进行赋值为空串所以空串是链表的结尾 p=p->next; } if(strcmp(p->num1,riqi)!=0){//说明这是一个新日期对这一个新日期进行打卡 strcpy(p->num1,riqi); printf("您一日之内是否到过学校(1:是,2:否)\n"); gets(p->num2); printf("您现在处于以下哪类地区(1:省外,2:省内其他城市,3:郑州市)\n"); gets(p->num3); printf("本人及共同居住人近十四天以来,是否从中高风险地区返回郑州?(1:是,2:否)\n"); gets(p->num4); if(strcmp(p->num4,"1")==0){ printf("如有请描述何时、何地返郑等具体情况(30个汉字)\n"); gets(p->num5); }else{ strcpy(p->num5,""); } printf("您当前的身体健康状况(1:无异常症状,2:有发热-大于等于37.3、咳嗽等症状)\n"); gets(p->num6); printf("您是否已经接种新冠疫苗加强针?(疫苗接种记录可在支付宝健康码页面查询)(1:已接种加强针,2:完成接种,待接种加强针,3:接种部分剂次,4:未接种)\n"); gets(p->num7); printf("本人及共同居住人现在是否有确诊、无症状感染、密接、次密接人员?(1:确诊人员,2:无症状感染者,3:密切接触人员,4:次密接人员,5:无上述情况)\n"); gets(p->num8); printf("您现在是否在被隔离(1:否,2:居家隔离(执行七天居家隔离),3:居家隔离(执行三天两检),4:集中隔离)\n"); gets(p->num9); printf("您一日内是否接到过流行病学调查电话或信息?(1:是,2:否)\n"); gets(p->num10); printf("您是否有其他需要说明的异常情况(30个汉字)【如果是,请务必详细填写】\n"); gets(p->num11); p->next=(struct daka*)malloc(sizeof(struct daka)); p=p->next; strcpy(p->num1,""); p->next=NULL; printf("打卡成功,请按回车键返回菜单\n"); system("pause"); }else{//进入此分支说明这个日期已经打过卡了 printf("今日已经打过卡了,请按任意键返回主菜单.\n"); system("pause"); } } } void chongfudaka(struct student *stu){ printf("请输入学号\n"); char xuehao[20]; gets(xuehao); while(stu!=NULL&&strcmp(stu->num3,xuehao)!=0){//进行学号查找找到对应元素进行重新打卡 stu=stu->next; } if(stu==NULL){//说明遍历链表也没有找到目标 printf("没有该同学的信息,请按任意键返回主菜单进行个人信息录入\n"); system("pause"); }else{ char riqi[20]; printf("请输入日期(日期格式为yyyy-mm-dd)\n"); gets(riqi); struct daka *p=&stu->head; while(strcmp(p->num1,"")!=0&&strcmp(p->num1,riqi)!=0){//寻找对应的那天 p=p->next; } if(strcmp(p->num1,riqi)==0){//说明这是要重新打卡的日期 strcpy(p->num1,riqi); printf("您一日之内是否到过学校(1:是,2:否)\n"); gets(p->num2); printf("您现在处于以下哪类地区(1:省外,2:省内其他城市,3:郑州市)\n"); gets(p->num3); printf("本人及共同居住人近十四天以来,是否从中高风险地区返回郑州?(1:是,2:否)\n"); gets(p->num4); if(strcmp(p->num4,"1")==0){ printf("如有请描述何时、何地返郑等具体情况(30个汉字)\n"); gets(p->num5); }else{ strcpy(p->num5,""); } printf("您当前的身体健康状况(1:无异常症状,2:有发热-大于等于37.3、咳嗽等症状)\n"); gets(p->num6); printf("您是否已经接种新冠疫苗加强针?(疫苗接种记录可在支付宝健康码页面查询)(1:已接种加强针,2:完成接种,待接种加强针,3:接种部分剂次,4:未接种)\n"); gets(p->num7); printf("本人及共同居住人现在是否有确诊、无症状感染、密接、次密接人员?(1:确诊人员,2:无症状感染者,3:密切接触人员,4:次密接人员,5:无上述情况)\n"); gets(p->num8); printf("您现在是否在被隔离(1:否,2:居家隔离(执行七天居家隔离),3:居家隔离(执行三天两检),4:集中隔离)\n"); gets(p->num9); printf("您一日内是否接到过流行病学调查电话或信息?(1:是,2:否)\n"); gets(p->num10); printf("您是否有其他需要说明的异常情况(30个汉字)【如果是,请务必详细填写】\n"); gets(p->num11); printf("打卡成功,请按回车键返回菜单\n"); system("pause"); }else{//进入此分支说明未找到日期; printf("未找到打卡记录,无法进行重新打卡,请按任意键返回主菜单进行打卡.\n"); system("pause"); } } } void jilu(struct student *stu){ printf("请输入学号\n"); char xuehao[20]; gets(xuehao); while(stu!=NULL&&strcmp(stu->num3,xuehao)!=0){//找到目标 stu=stu->next; } if(stu==NULL){ printf("没有该同学的信息,请按任意键返回主菜单进行信息录入\n"); system("pause"); }else{ char riqi[20]; printf("请输入日期(日期格式为yyyy-mm-dd)\n"); gets(riqi); struct daka *p=&stu->head; while(strcmp(p->num1,"")!=0&&strcmp(p->num1,riqi)!=0){ p=p->next; } if(strcmp(p->num1,riqi)==0){//说明这是要查询打卡的日期 strcpy(p->num1,riqi); printf("您一日之内是否到过学校(1:是,2:否)\n"); puts(p->num2); printf("您现在处于以下哪类地区(1:省外,2:省内其他城市,3:郑州市)\n"); puts(p->num3); printf("本人及共同居住人近十四天以来,是否从中高风险地区返回郑州?(1:是,2:否)\n"); puts(p->num4); if(strcmp(p->num4,"1")==0){ printf("如有请描述何时、何地返郑等具体情况(30个汉字)\n"); puts(p->num5); } printf("您当前的身体健康状况(1:无异常症状,2:有发热-大于等于37.3、咳嗽等症状)\n"); puts(p->num6); printf("您是否已经接种新冠疫苗加强针?(疫苗接种记录可在支付宝健康码页面查询)(1:已接种加强针,2:完成接种,待接种加强针,3:接种部分剂次,4:未接种)\n"); puts(p->num7); printf("本人及共同居住人现在是否有确诊、无症状感染、密接、次密接人员?(1:确诊人员,2:无症状感染者,3:密切接触人员,4:次密接人员,5:无上述情况)\n"); puts(p->num8); printf("您现在是否在被隔离(1:否,2:居家隔离(执行七天居家隔离),3:居家隔离(执行三天两检),4:集中隔离)\n"); puts(p->num9); printf("您一日内是否接到过流行病学调查电话或信息?(1:是,2:否)\n"); puts(p->num10); printf("您是否有其他需要说明的异常情况(30个汉字)【如果是,请务必详细填写】\n"); puts(p->num11); printf("请按回车键返回菜单\n"); system("pause"); }else{ printf("未找到打卡记录,请按任意键返回主菜单.\n"); system("pause"); } } } void baocun(struct student *stu){ char f[100]="C:\\Users\\34914\\Desktop\\13213\\1.txt";//此项根据自己电脑文件所在位置进行填写 FILE *fp=fopen(f,"wb"); if(fp==NULL){ printf("保存信息失败\n"); }else{ while(stu!=NULL){ fwrite(stu,sizeof(struct student),1,fp); struct daka *p=stu->head.next; while(strcmp(p->num1,"")!=0){ fwrite(p,sizeof(struct daka),1,fp); p=p->next; } stu=stu->next; } fclose(fp); } } int main(){ struct student head; int flag=0; while(1){ switch(caidan()){ case 1: shuruxinxi(&head); break; case 2: daka(&head); break; case 3: chongfudaka(&head); break; case 4: jilu(&head); break; case 0: flag=1; break; default: printf("输入不合法,请按任意键重新输入\n"); system("pause"); break; } if(flag==1){ break; } } baocun(&head); return 0; }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3