新冠疫情学生管理系统的设计实现
问题背景:新型冠状病毒(Covid-19)引发了全球大流行疫情。疫情扩散对全球航空、旅游、体育、能源、金融市场等方面造成巨大影响。该传染病的变异性和传染性极强,且具有14天的潜伏期,详细掌握人员的流动、住所、接种疫苗及联系方式等信息对疫情控制显得尤为重要。所以,十分有必要在校园内设计一套功能丰富的学生疫情信息管理系统。
系统概述:
1)数据的处理可采用结构体数组(或链表),数据的存储要求使用文件读写的知识。
2)个人信息中应至少包括姓名、学号、联系方式、寝室号、入校日期、14日内途径地(数组)、是否接种过疫苗、3日内的体温记录。
功能概述:
1)文件读入功能——可以从jichu.dat文件中读入至少2名同学的人员信息,作为系统的基础数据。
2)数据输入、存储功能——可随时录入新的学生信息,具有输入提示;并将全部信息存入student.dat文件中。
3)查找和修改功能——可根据学号、姓名查询人员信息,并可以修改联系方式、寝室号等信息。将变动后的人员信息同步到student.dat文件中。
4)筛选功能——假设某地为风险地区,筛出14日内有此地途径史的学生,同时筛出此学生“同寝室其他人”的姓名/寝室号(人员列表中至少包含3个寝室,毎寝室至少4人),将以上人员信息输出到guanzhu.dat文件中。

设计思路,代码和流程图。
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 技术专家团-小桥流水 2022-11-15 12:50关注
定义结构体数组,然后就是数组的遍历和文件的读写操作
文件读写用FILE,代码:#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> //姓名、学号、联系方式、寝室号、入校日期、14日内途径地 typedef struct _data { char name[20]; char id[20]; char phone[12]; char roomid[10]; char date[14]; char adr[10][30]; int n; }Stuinfo; const char* file_jc = "jichu.dat"; const char* file_all = "student.dat"; const char* file_gz = "guanzhu.dat"; //1 读文件 void ReadFile(const char* file, Stuinfo stu[], int* n) { int i = 0; FILE* fp = fopen(file, "rb"); if (fp == 0) { printf("%s打开失败\n", file); return; } //读取文件 while (!feof(fp)) { stu[i].name[0] = 0; stu[i].id[0] = 0; stu[i].phone[0] = 0; stu[i].roomid[0] = 0; stu[i].date[0] = 0; stu[i].adr[0][0] = 0; stu[i].n = 0; if (fread(&stu[i], sizeof(Stuinfo),1, fp)) i++; } *n = i; fclose(fp); } //写文件student.dat void WriteFile(const char* file, Stuinfo stu[], int n) { FILE* fp = fopen(file, "wb"); int i; for (i = 0; i < n; i++) { fwrite(&stu[i], sizeof(Stuinfo), 1, fp); } fclose(fp); } //2 输入和保存 void Input(Stuinfo stu[], int *n) { Stuinfo s; int op; char ch; while (1) { printf("请输入姓名:"); scanf("%s", s.name); printf("请输入学号:"); scanf("%s", s.id); printf("请输入联系方式:"); scanf("%s", s.phone); printf("请输入寝室号:"); scanf("%s", s.roomid); printf("请输入入校日期:"); scanf("%s", s.date); printf("请输入14日内途径地,以空格分隔,回车结束:"); s.n = 0; while (1) { scanf("%s", s.adr[s.n]); s.n += 1; ch = getchar(); if (ch == '\n') break; } stu[*n] = s; (*n) = (*n) + 1; printf("是否继续输入(1.继续 0.退出):"); scanf("%d", &op); if (op == 0) break; } //写入文件 WriteFile(file_all,stu, *n); } //3 查找和修改 void SearchAndMod(Stuinfo stu[], int n) { int i, op; char tmp[30] = { 0 }; printf("1.通过学号查找\n"); printf("2.通过姓名查找\n"); printf("请选择:"); scanf("%d", &op); scanf("%s", tmp); for (i = 0; i < n; i++) { if ((op == 1 && strcmp(stu[i].id, tmp) == 0) || (op == 2 && strcmp(stu[i].name, tmp) == 0)) { printf("%s %s %s %s\n",stu[i].id,stu[i].name,stu[i].phone,stu[i].roomid); //显示学号、姓名、联系方式和宿舍号 printf("是否修改信息(1.修改 2.不修改\n):"); scanf("%d", &op); if (op == 1) { printf("请输入联系方式:"); scanf("%s", stu[i].phone); //这里只修改了联系方式和宿舍号,其它信息没有修改 printf("请输入寝室号:"); scanf("%s", stu[i].roomid); //更新文件 WriteFile(file_all, stu, n); } return; } } printf("查无此人\n"); } //4 筛选 void Select(Stuinfo stu[], int n) { int i, j, k; char adr[30] = { 0 }; FILE* fp; int flag = 0; fp = fopen(file_gz, "w"); printf("请输入风险区名称:"); scanf("%s", adr); for (i = 0; i < n; i++) { for (j = 0; j < stu[i].n; j++) { if (strcmp(adr, stu[i].adr[j]) == 0) { flag = 1; //将改寝室的所有人员信息都筛选出来 for (k = 0; k < n; k++) { if (strcmp(stu[i].roomid, stu[k].roomid) == 0) { fprintf(fp,"%s %s\n", stu[k].name, stu[k].roomid); //写入姓名和宿舍号 } } } } } fclose(fp); if (flag == 1) printf("人员信息也写入%s\n", file_gz); else printf("没有途径该风险区的学生\n"); } int main() { int op; Stuinfo stu[1000]; int n = 0; //学生人数 while (1) { printf("1.读取基础信息\n"); printf("2.输入学生信息并保存\n"); printf("3.查找并修改\n"); printf("4.筛选\n"); printf("0.退出\n"); printf("请选择:"); scanf("%d", &op); switch (op) { case 0: return 0; case 1: ReadFile(file_jc, stu, &n); break; case 2: Input(stu, &n); break; case 3: SearchAndMod(stu, n); break; case 4: Select(stu, n); break; } } }
(1)读取基础数据
(2)输入并保存
(3)查找及修改
(4)筛选
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录