C/C++校园疫情填报管理系统[2023-01-31]

C/C++校园疫情填报管理系统[2023-01-31]

一、数据导入
系统的预设数据文件统一存放在软件项目的data目录中。文件中,#开头的一行文字为注释(相当于C语言的/* */)。

  1. 学生数据导入
    从本地文件系统中读取学生信息。文件名为students.txt,文件格式如下(每行一名同学信息,各字段空格分隔)
#学号 姓名 学院 班级 宿舍
202000704000 张三 计算机学院 计201 南区6-101
  1. 风险地区导入
    从本地文件系统中读取国家划定的风险区域。文件名为riskregion.txt,文件格式如下
#[日期]
#风险区域

[2022-11-21]
广西区-桂林市-象山区
广西区-桂林市-七星区

[2022-11-20]
广西区-桂林市-象山区
广西区-桂林市-七星区
  1. 疫情填报表导入
    从本地文件系统中读取用户预设的问卷。问卷名为questionnare.txt,问卷格式如下。注意,对于多次填报的个别题目为选做内容
#[题干]
#题型(填空/单选/多选)@填报次数(once/many),填入的最大字符数(如果是填空题)
#选项(如果有的话。每行一个)

[学号]
填空@once,10

[日期(yyyy-mm-dd)]
填空@once,10

[健康码颜色]
单选@once
绿色
黄色
红色

[返校交通方式]
单选@once
火车/动车/高铁
飞机
自驾
其它

[车次]
填空@once,20

[风险类型]
单选@once
无
途径高风险地区
居住在高风险地区
密接高危人群

[返校途径城市(包括家和学校所在城市,城市间用空格分隔)]
填空@once,1000

# 全体同学,返校后需要多次核酸检测(根据防疫政策要求,3天2检或5天3检等)
[核算检测的日期及结果,录入格式为yyyy-mm-dd:-/+(-表示阴性,+表示阳性)]
填空@many,20
  1. 疫情管控措施表导入(选做)
    从本地文件系统中读取管控措施选项。文件名为plan.txt,格式如下
#[题干]
#题型:填空/单选/多选,填入的最大字符数(如果是填空题)
#选项(如果有的话。每行一个)

# 红、黄码的同学,以及核酸阳性的同学,需要疫情管控
[管控措施]
单选
就地隔离
校内集中隔离
校外集中隔离
居家隔离

[隔离地点]
填空,200

二、功能需求
整体流程:导入数据->填报疫情->查看、统计结果。

  1. 正确读取导入的文件,并用恰当的数据结构存储。
  2. 疫情申报数据及管控数据,及时存储进自定义的文件中。需要多次填报的题目,例如核酸检测结果,提供额外的填报入口。
  3. 根据姓名,查看单个同学的填报信息。
  4. 查看途径某城市的学生列表信息。
  5. 查看黄码/红码,以及核酸阳性的学生信息。
  6. 统计各个隔离地点的学生信息。
  7. 对于红码和核酸阳性的学生,建立他们所途经的城市图


一、程序结构
建议采用经典的三层架构(3-tier architecture)来实现,将整个业务应用划分为:界面层(User Interface Layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data Access Layer)。

在构建多目录/多文件的项目工程时,目录名、文件名应体现出相应的层次。可供参考的项目目录组织如下,各同学根据自己的设计进行改动。

Project: EpidemicReport
|----ui                界面的交互
|    |----menu.cpp          菜单定义及显示
|    |----epiDetail.cpp     单个疫情数据的详细显示定义
|    |----epiList.cpp       多个疫情数据的列表显示定义
|    |----city.cpp          城市图的显示定义
|    |----layout.cpp        整个界面的规划(菜单、显示区、输入区)
|    |---- ……             ……
|----business           业务逻辑的实现
|    |----report.cpp        疫情填报
|    |----statics.cpp       统计处理
|    |----load.cpp          配置数据载入
|    |----search.cpp        查找功能
|    |---- ……             ……
|----model              模型 (如果操作简单,可以并入business中)
|    |----student.cpp       学生模型的操作(数据处理)
|    |----epidemic.cpp      疫情信息的操作(数据处理)
|    |---- ……             ……
|----dataStructure       数据结构的操作
|    |----sequenceList.cpp   顺序表
|    |----linkedList.cpp     链表
|    |----queue.cpp         队列
|    |----tree.cpp          二叉树/红黑树等
|    |----hash.cpp          散列表
|    |----graph.cpp         图
|    |----serialize.cpp     将数据结构序列化到文件中(保存到文件)
|----utils               各种工具库
|    |----memoryLib.cpp      内存管理库:实现内存的分配、释放、
|    |                         内存池、智能指针等
|    |----fileLib.cpp        文件的操作:文件的打开、关闭、读写等
|    |----keyboard.cpp       键盘的操作:数据的读入
|    |----display.cpp        显示器的输出控制:清屏、定位等 
|----headers            头文件的定义
|    |----business.h         业务功能的操作(函数)声明
|    |----ui.h               视图定义及操作声明
|    |----dataStructure.h     数据结构的模型定义及操作接口声明
|    |----utils.h            工具库的操作声明
|    |----model.h            (业务)模型的类型定义与操作声明

有能力的同学,也可以采用MVC等更新的架构模式来设计程序。此方式虽然可以更加优雅地实现功能,但涉及较多的函数指针应用,因此仅供自信自学能力强的同学参考。

二、界面设计(可选)
整个程序,无论输入输出什么信息,最好有统一的风格。参考的界面布局如下。可以调用系统的cls等命令进行清屏;可以设定好屏幕输出的缓冲区,要输出的数据、菜单等信息先写入缓冲区,再一起输出。

内容展示区

菜单显示区
输入区

三、关键技术、函数提示

  1. 通用数据结构的实现,可采用数据元素的无类型定义来实现。
    例如,顺序表可以定义为:

无类型数据元素的赋值操作,可用memcpy()函数实现。

/* 从存储区 src 复制 n 个字节到存储区 dest */
void *memcpy(void *dest, const void *src, size_t n); 

查找时,可以通过函数指针来个性化查找字段。例如,按学生的学号来查找,可如下实现:

  1. 文本文件的读取及字符串处理
/* 在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置 */
char *strchr(const char *str, int c) ;

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值