C语言编程 一个健康管理系统

  程序功能:每日健康打卡,个人信息采集。

任务一:针对每位同学,welink进行每日健康信息采集,并追加保存在个人文件“学号。txt”中,请编写程序,完成以下信息采集内容,并保存在该文件中。

0、 填报时间(YYYYMMDD):

20210524

114天内死否离开本市?(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)




 

定义一个链表和结构体,读文件进行处理就可以了。主体代码如下,只做了一个学生的,你根据你自己的情况调整一下代码就可以了。如有帮助,请帮忙采纳一下,谢谢。

#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

如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢