程序功能:每日健康打卡,个人信息采集。
任务一:针对每位同学,welink进行每日健康信息采集,并追加保存在个人文件“学号。txt”中,请编写程序,完成以下信息采集内容,并保存在该文件中。
0、 填报时间(YYYYMMDD):
20210524
1、 14天内死否离开本市?(y/n)
n
2、 是否有发热、咳嗽等症状?(y/n)
n
3、 最近14天是否到过中高风险地区?(y/n)
n
文件格式如下(假设学号为11111111111),回答n记为“0”,y记为“1”:(红圈内为更新的打卡记录)
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/090481450626119.jpg)
任务二、读取“11111111111.txt”文件中该位同学的每日健康打卡情况,如有答案为y的,则提示采取隔离措施,并给出隔离时间的起止日期。输出格式如下:
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/14686245062612.jpg)
C语言编程 一个健康管理系统
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- qfl_sdu 2021-07-12 10:22关注
定义一个链表和结构体,读文件进行处理就可以了。主体代码如下,只做了一个学生的,你根据你自己的情况调整一下代码就可以了。如有帮助,请帮忙采纳一下,谢谢。
#include <stdio.h> #include <string.h> #include <stdlib.h> //填报信息结构体 struct MsgInfo { //填写时间,也可做成一个结构体,这里直接写了 int year; int mon; int day; // int isLeave14d; //14天内是否离开 int isHot; //是否发热、咳嗽 int isHlvel; //是否到过中高风险地区 struct MsgInfo* next; }; struct Student { char xh[20]; //学号 struct MsgInfo *head; //填报信息列表 }; //读文件,返回文件中的内容 MsgInfo* ReadFile(const char* filename) { FILE* fp; int i = 0; struct MsgInfo* head = 0; struct MsgInfo *t; struct MsgInfo *p; int year; int mon; int day; int isLeave14d; //14天内是否离开 int isHot; //是否发热、咳嗽 int isHlvel; //是否到过中高风险地区 if((fp = fopen(filename,"r")) == 0) { printf("文件打开失败\n"); return 0; } head = (struct MsgInfo*)malloc(sizeof(struct MsgInfo)); head->next = 0; //逐行读取数据 while(!feof(fp)) { fscanf(fp,"%d %d %d %d %d %d\n",&year,&mon,&day,&isLeave14d,&isHot,&isHlvel); if(year < 0) continue; if (i == 0) { head->year = year; head->mon = mon; head->day = day; head->isLeave14d = isLeave14d; head->isHot = isHot; head->isHlvel = isHlvel; p = head; i++; }else { t = (struct MsgInfo*)malloc(sizeof(struct MsgInfo)); t->year = year; t->mon = mon; t->day = day; t->isLeave14d = isLeave14d; t->isHot = isHot; t->isHlvel = isHlvel; t->next = 0; p->next = t; p = t; } } fclose(fp); return head; } //写文件 void AddInfo(const char* xh,struct MsgInfo *st) { char buf[20]={0}; FILE* fp; strcpy(buf,xh); strcat(buf,".txt"); if ((fp=fopen(buf,"a+")) == 0) { printf("文件打开失败\n"); return ; } fprintf(fp,"%d %d %d %d %d %d\n",st->year,st->mon,st->day,st->isLeave14d,st->isHot,st->isHlvel); fclose(fp); } int main() { int nmb = 0; struct Student st; struct MsgInfo* pp = 0,*tt; int days[]={0,31,28,31,30,31,30,31,30,31,30,31,30,31}; char ch; int isDanger = 0; char filename[30]={0}; char xh[20]={0}; int yy,mm,dd; printf("请输入学生的学号:"); scanf("%s",xh); strcpy(filename,xh); strcat(filename,".txt"); st.head = ReadFile(filename); //从文件中读取历史信息 pp = (struct MsgInfo*)malloc(sizeof(struct MsgInfo)); pp->next = 0; printf("录入信息:\n"); printf("请输入填写日期(年 月 日):"); scanf("%d %d %d",&pp->year,&pp->mon,&pp->day); printf("14天内是否离开(y/n)?"); scanf("%c",&ch); if(ch == 'y' || ch == 'Y') pp->isLeave14d = 1; else pp->isLeave14d = 0; getchar(); printf("是否发热、咳嗽(y/n)?"); scanf("%c",&ch); getchar(); if(ch == 'y' || ch == 'Y') pp->isHot = 1; else pp->isHot = 0; printf("是否到过中高风险地区(y/n)?"); scanf("%c",&ch); getchar(); if(ch == 'y' || ch == 'Y') pp->isHlvel = 1; else pp->isHlvel = 0; //插入队列 if(st.head == 0) { st.head = pp; }else { tt = st.head; while(tt->next) tt = tt->next; tt->next = pp; } AddInfo(filename,pp); //写入文件 //查询是否有y项 tt = st.head; while(tt) { if(tt->isHlvel ) { isDanger =1; printf("到过中高风险区\n"); } if(tt->isHot) { isDanger =1; printf("发热、咳嗽\n"); } if(tt->isLeave14d) { isDanger =1; printf("14天内离开过\n"); } if(isDanger) { //计算时间 dd = tt->day + 14; mm = tt->mon; yy = tt->year; if(dd > days[mm]) { mm +=1; if(mm > 12) { yy +=1; mm =1; } dd = dd - days[tt->mon]; } printf("隔离日期%d-%d-%d 至%d-%d-%d\n",tt->year,tt->mon,tt->day,yy,mm,dd); break; } tt=tt->next; } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用
悬赏问题
- ¥15 请把下列每一行代码完整地读懂并注释出来
- ¥15 pycharm运行main文件,显示没有conda环境
- ¥15 易优eyoucms关于二级栏目调用的问题
- ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
- ¥15 为什么eclipse不能再下载了?
- ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
- ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
- ¥15 特定网页无法访问,已排除网页问题
- ¥50 如何将脑的图像投影到颅骨上
- ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境