程序功能:每日健康打卡,个人信息采集。
任务一:针对每位同学,welink进行每日健康信息采集,并追加保存在个人文件“学号。txt”中,请编写程序,完成以下信息采集内容,并保存在该文件中。
0、 填报时间(YYYYMMDD):
20210524
1、 14天内死否离开本市?(y/n)
n
2、 是否有发热、咳嗽等症状?(y/n)
n
3、 最近14天是否到过中高风险地区?(y/n)
n
文件格式如下(假设学号为11111111111),回答n记为“0”,y记为“1”:(红圈内为更新的打卡记录)

任务二、读取“11111111111.txt”文件中该位同学的每日健康打卡情况,如有答案为y的,则提示采取隔离措施,并给出隔离时间的起止日期。输出格式如下:

定义一个链表和结构体,读文件进行处理就可以了。主体代码如下,只做了一个学生的,你根据你自己的情况调整一下代码就可以了。如有帮助,请帮忙采纳一下,谢谢。
#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;
}
参考一下:https://blog.csdn.net/weixin_33001305/article/details/117119557
如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢