qq_58101789 2021-07-12 09:44 采纳率: 50%
浏览 496
已结题

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)




 
  • 写回答

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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 创建了问题 7月12日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装