• 实验四:健康打卡


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

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

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

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

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

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

    输入样例:

           健康打卡

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

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

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

    请选择(0~4):1

    请输入职工基本信息:

    *姓名(3个汉字):

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

    *学号(12位数字):

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

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

    *手机号(11位数字):

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

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

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

    代码实现

    1. #include
    2. #include
    3. #include
    4. #include
    5. struct daka{
    6. char num1[20];//日期
    7. char num2[2];//是否到过学校
    8. char num3[2];//现在处于那类地区
    9. char num4[2];//是否为高风险地区返郑
    10. char num5[70];//何时何地返郑等具体情况
    11. char num6[2];//身体健康状况
    12. char num7[2];//是否接种新冠疫苗加强针
    13. char num8[2];//是否密接或患病
    14. char num9[2];//是否被隔离
    15. char num10[2];//是否接到过流行病学调查电话
    16. char num11[70];//其他需要说明的异常情况
    17. struct daka *next;
    18. };
    19. struct student{
    20. char num1[10];//姓名
    21. char num2[50];//专业/部门
    22. char num3[20];//学号
    23. char num4[70];//打卡位置
    24. char num5[20];//证件号码
    25. char num6[12];//手机号
    26. char num7[2];//性别
    27. char num8[70];//家族住址
    28. struct daka head;
    29. struct student *next;
    30. };
    31. void shuruxinxi(struct student *stu){
    32. while(1){
    33. strcpy(stu->head.num1,"");//将日期赋为空串等之后判定使用
    34. printf("请输入职工基本信息:\n");
    35. printf("*姓名(3个汉字):\n");
    36. gets(stu->num1);
    37. printf("*专业/部门(20个汉字):\n");
    38. gets(stu->num2);
    39. printf("*学号(12位数字):\n");
    40. gets(stu->num3);
    41. printf("*打卡位置(省、市、区,30个汉字):\n");
    42. gets(stu->num4);
    43. printf("*证件号码(18位数字):\n");
    44. gets(stu->num5);
    45. printf("*手机号(11位数字):\n");
    46. gets(stu->num6);
    47. printf("*性别(1:男,2:女):\n");
    48. gets(stu->num7);
    49. printf("*家族住址(30个汉字):\n");
    50. gets(stu->num8);
    51. printf("继续输入下一位职工基本信息吗(Y:是,N:否)?\n");
    52. char choice[2];//选择是否输入下一个人的信息
    53. gets(choice);
    54. if(strcmp(choice,"Y")==0){//如果等于Y说明还需要输入下一个人的信息
    55. stu->next=(struct student*)malloc(sizeof(struct student));//为下一个节点分配空间
    56. stu=stu->next;//转向下一个节点
    57. }else{
    58. stu->next=NULL;//下一个节点赋值为NULL
    59. break;
    60. }
    61. }
    62. }
    63. int caidan(){
    64. system("cls");//清屏
    65. printf("\t 健康打卡\n");
    66. printf("-----------------------------------\n");
    67. printf("\t1.录入个人基本信息\n");
    68. printf("\t2.每日健康打卡\n");
    69. printf("\t3.重复健康打卡\n");
    70. printf("\t4.健康打卡查询\n");
    71. printf("\t0.退出系统\n");
    72. printf("-----------------------------------\n");
    73. printf("请选择(0~4):");
    74. int choice;
    75. scanf("%d",&choice);
    76. getchar();
    77. return choice;//以其返回值作为switch语句的条件值
    78. }
    79. void daka(struct student *stu){
    80. printf("请输入学号\n");
    81. char xuehao[20];
    82. gets(xuehao);
    83. while(stu!=NULL&&strcmp(stu->num3,xuehao)!=0){//找到学号与要打卡的人相同的结构体
    84. stu=stu->next;//遍历链表找到目标
    85. }
    86. if(stu==NULL){//如果stu==NULL说明已经遍历整个链表了但是未找到目标
    87. printf("没有该同学的信息,请按任意键返回主菜单进行个人信息录入\n");//进行提示
    88. system("pause");//暂停,因为重新打印菜单会刷屏,防止用户看不到提示信息
    89. }else{//进入此分支说明找到了目标
    90. char riqi[20];
    91. printf("请输入日期(日期格式为yyyy-mm-dd)\n");//输入打卡日期
    92. gets(riqi);
    93. struct daka *p=&stu->head;//定义一个指针指向打卡信息结构体,主要是用来实现一人多次打卡
    94. while(strcmp(p->num1,"")!=0&&strcmp(p->num1,riqi)!=0){//因为我们前面对日期进行赋值为空串所以空串是链表的结尾
    95. p=p->next;
    96. }
    97. if(strcmp(p->num1,riqi)!=0){//说明这是一个新日期对这一个新日期进行打卡
    98. strcpy(p->num1,riqi);
    99. printf("您一日之内是否到过学校(1:是,2:否)\n");
    100. gets(p->num2);
    101. printf("您现在处于以下哪类地区(1:省外,2:省内其他城市,3:郑州市)\n");
    102. gets(p->num3);
    103. printf("本人及共同居住人近十四天以来,是否从中高风险地区返回郑州?(1:是,2:否)\n");
    104. gets(p->num4);
    105. if(strcmp(p->num4,"1")==0){
    106. printf("如有请描述何时、何地返郑等具体情况(30个汉字)\n");
    107. gets(p->num5);
    108. }else{
    109. strcpy(p->num5,"");
    110. }
    111. printf("您当前的身体健康状况(1:无异常症状,2:有发热-大于等于37.3、咳嗽等症状)\n");
    112. gets(p->num6);
    113. printf("您是否已经接种新冠疫苗加强针?(疫苗接种记录可在支付宝健康码页面查询)(1:已接种加强针,2:完成接种,待接种加强针,3:接种部分剂次,4:未接种)\n");
    114. gets(p->num7);
    115. printf("本人及共同居住人现在是否有确诊、无症状感染、密接、次密接人员?(1:确诊人员,2:无症状感染者,3:密切接触人员,4:次密接人员,5:无上述情况)\n");
    116. gets(p->num8);
    117. printf("您现在是否在被隔离(1:否,2:居家隔离(执行七天居家隔离),3:居家隔离(执行三天两检),4:集中隔离)\n");
    118. gets(p->num9);
    119. printf("您一日内是否接到过流行病学调查电话或信息?(1:是,2:否)\n");
    120. gets(p->num10);
    121. printf("您是否有其他需要说明的异常情况(30个汉字)【如果是,请务必详细填写】\n");
    122. gets(p->num11);
    123. p->next=(struct daka*)malloc(sizeof(struct daka));
    124. p=p->next;
    125. strcpy(p->num1,"");
    126. p->next=NULL;
    127. printf("打卡成功,请按回车键返回菜单\n");
    128. system("pause");
    129. }else{//进入此分支说明这个日期已经打过卡了
    130. printf("今日已经打过卡了,请按任意键返回主菜单.\n");
    131. system("pause");
    132. }
    133. }
    134. }
    135. void chongfudaka(struct student *stu){
    136. printf("请输入学号\n");
    137. char xuehao[20];
    138. gets(xuehao);
    139. while(stu!=NULL&&strcmp(stu->num3,xuehao)!=0){//进行学号查找找到对应元素进行重新打卡
    140. stu=stu->next;
    141. }
    142. if(stu==NULL){//说明遍历链表也没有找到目标
    143. printf("没有该同学的信息,请按任意键返回主菜单进行个人信息录入\n");
    144. system("pause");
    145. }else{
    146. char riqi[20];
    147. printf("请输入日期(日期格式为yyyy-mm-dd)\n");
    148. gets(riqi);
    149. struct daka *p=&stu->head;
    150. while(strcmp(p->num1,"")!=0&&strcmp(p->num1,riqi)!=0){//寻找对应的那天
    151. p=p->next;
    152. }
    153. if(strcmp(p->num1,riqi)==0){//说明这是要重新打卡的日期
    154. strcpy(p->num1,riqi);
    155. printf("您一日之内是否到过学校(1:是,2:否)\n");
    156. gets(p->num2);
    157. printf("您现在处于以下哪类地区(1:省外,2:省内其他城市,3:郑州市)\n");
    158. gets(p->num3);
    159. printf("本人及共同居住人近十四天以来,是否从中高风险地区返回郑州?(1:是,2:否)\n");
    160. gets(p->num4);
    161. if(strcmp(p->num4,"1")==0){
    162. printf("如有请描述何时、何地返郑等具体情况(30个汉字)\n");
    163. gets(p->num5);
    164. }else{
    165. strcpy(p->num5,"");
    166. }
    167. printf("您当前的身体健康状况(1:无异常症状,2:有发热-大于等于37.3、咳嗽等症状)\n");
    168. gets(p->num6);
    169. printf("您是否已经接种新冠疫苗加强针?(疫苗接种记录可在支付宝健康码页面查询)(1:已接种加强针,2:完成接种,待接种加强针,3:接种部分剂次,4:未接种)\n");
    170. gets(p->num7);
    171. printf("本人及共同居住人现在是否有确诊、无症状感染、密接、次密接人员?(1:确诊人员,2:无症状感染者,3:密切接触人员,4:次密接人员,5:无上述情况)\n");
    172. gets(p->num8);
    173. printf("您现在是否在被隔离(1:否,2:居家隔离(执行七天居家隔离),3:居家隔离(执行三天两检),4:集中隔离)\n");
    174. gets(p->num9);
    175. printf("您一日内是否接到过流行病学调查电话或信息?(1:是,2:否)\n");
    176. gets(p->num10);
    177. printf("您是否有其他需要说明的异常情况(30个汉字)【如果是,请务必详细填写】\n");
    178. gets(p->num11);
    179. printf("打卡成功,请按回车键返回菜单\n");
    180. system("pause");
    181. }else{//进入此分支说明未找到日期;
    182. printf("未找到打卡记录,无法进行重新打卡,请按任意键返回主菜单进行打卡.\n");
    183. system("pause");
    184. }
    185. }
    186. }
    187. void jilu(struct student *stu){
    188. printf("请输入学号\n");
    189. char xuehao[20];
    190. gets(xuehao);
    191. while(stu!=NULL&&strcmp(stu->num3,xuehao)!=0){//找到目标
    192. stu=stu->next;
    193. }
    194. if(stu==NULL){
    195. printf("没有该同学的信息,请按任意键返回主菜单进行信息录入\n");
    196. system("pause");
    197. }else{
    198. char riqi[20];
    199. printf("请输入日期(日期格式为yyyy-mm-dd)\n");
    200. gets(riqi);
    201. struct daka *p=&stu->head;
    202. while(strcmp(p->num1,"")!=0&&strcmp(p->num1,riqi)!=0){
    203. p=p->next;
    204. }
    205. if(strcmp(p->num1,riqi)==0){//说明这是要查询打卡的日期
    206. strcpy(p->num1,riqi);
    207. printf("您一日之内是否到过学校(1:是,2:否)\n");
    208. puts(p->num2);
    209. printf("您现在处于以下哪类地区(1:省外,2:省内其他城市,3:郑州市)\n");
    210. puts(p->num3);
    211. printf("本人及共同居住人近十四天以来,是否从中高风险地区返回郑州?(1:是,2:否)\n");
    212. puts(p->num4);
    213. if(strcmp(p->num4,"1")==0){
    214. printf("如有请描述何时、何地返郑等具体情况(30个汉字)\n");
    215. puts(p->num5);
    216. }
    217. printf("您当前的身体健康状况(1:无异常症状,2:有发热-大于等于37.3、咳嗽等症状)\n");
    218. puts(p->num6);
    219. printf("您是否已经接种新冠疫苗加强针?(疫苗接种记录可在支付宝健康码页面查询)(1:已接种加强针,2:完成接种,待接种加强针,3:接种部分剂次,4:未接种)\n");
    220. puts(p->num7);
    221. printf("本人及共同居住人现在是否有确诊、无症状感染、密接、次密接人员?(1:确诊人员,2:无症状感染者,3:密切接触人员,4:次密接人员,5:无上述情况)\n");
    222. puts(p->num8);
    223. printf("您现在是否在被隔离(1:否,2:居家隔离(执行七天居家隔离),3:居家隔离(执行三天两检),4:集中隔离)\n");
    224. puts(p->num9);
    225. printf("您一日内是否接到过流行病学调查电话或信息?(1:是,2:否)\n");
    226. puts(p->num10);
    227. printf("您是否有其他需要说明的异常情况(30个汉字)【如果是,请务必详细填写】\n");
    228. puts(p->num11);
    229. printf("请按回车键返回菜单\n");
    230. system("pause");
    231. }else{
    232. printf("未找到打卡记录,请按任意键返回主菜单.\n");
    233. system("pause");
    234. }
    235. }
    236. }
    237. void baocun(struct student *stu){
    238. char f[100]="C:\\Users\\34914\\Desktop\\13213\\1.txt";//此项根据自己电脑文件所在位置进行填写
    239. FILE *fp=fopen(f,"wb");
    240. if(fp==NULL){
    241. printf("保存信息失败\n");
    242. }else{
    243. while(stu!=NULL){
    244. fwrite(stu,sizeof(struct student),1,fp);
    245. struct daka *p=stu->head.next;
    246. while(strcmp(p->num1,"")!=0){
    247. fwrite(p,sizeof(struct daka),1,fp);
    248. p=p->next;
    249. }
    250. stu=stu->next;
    251. }
    252. fclose(fp);
    253. }
    254. }
    255. int main(){
    256. struct student head;
    257. int flag=0;
    258. while(1){
    259. switch(caidan()){
    260. case 1:
    261. shuruxinxi(&head);
    262. break;
    263. case 2:
    264. daka(&head);
    265. break;
    266. case 3:
    267. chongfudaka(&head);
    268. break;
    269. case 4:
    270. jilu(&head);
    271. break;
    272. case 0:
    273. flag=1;
    274. break;
    275. default:
    276. printf("输入不合法,请按任意键重新输入\n");
    277. system("pause");
    278. break;
    279. }
    280. if(flag==1){
    281. break;
    282. }
    283. }
    284. baocun(&head);
    285. return 0;
    286. }

  • 相关阅读:
    3212力扣:统计X和Y频数相等的子矩阵数量
    C++基础知识(十六)--- stack&queue&list
    【解决方法】sudo apt update报无公钥错误
    Android Activity启动模式
    四元数和旋转矩阵两种方式对旋转向量进行更新结果对比
    05 | Harbor的简介下载及安装
    JavaScript的字符串介绍
    机器学习中的二分类问题评价指标之精确率、召回率、F1值通俗理解
    【web自动化测试】Playwright快速入门,5分钟上手
    如何修改springboot项目启动时的默认图标?
  • 原文地址:https://blog.csdn.net/apprentice_eye/article/details/127940711