# 计算机模拟疫情扩散
# 一、项目的目标,主要功能,人员分工
新冠的传染性很强,随着一系列防控措施的落实,疫情也在不断变化。我们小组的目标就是通过制作一个模拟疫情扩散与防控程序,在思考疫情如何扩散的同时,加强我们对 C++ 面向对象的程序设计方法的认识,锻炼我们的建模能力、编程能力和自主学习能力。
项目的最主要功能是模拟疫情扩散。在开始模拟前,用户可以选择两种疫情防控模式,分别为默认天数改变防控模式和在模拟过程中防控模式,两种防控模式的具体实现如下表。
## 1.1 默认天数改变防控
| 天数小于 15 | 天数小于 25 | 天数大于 25 |
| ------------------------------------- | ------------------------------- | ------------------------------- |
| 人员流动意向强,不戴口罩,初始床位 20 | 人员流动意向中,戴口罩,床位 20 | 人员流动意向弱,戴口罩,床位 40 |
表 1.1
## 1.2 模拟过程自行调整
| 初级防控 | 人员流动意向强,不戴口罩,床位 20 |
| -------- | --------------------------------------- |
| 中级防控 | 人员流动意向中,戴口罩,床位 20 |
| 高级防控 | 人员流动意向弱,戴口罩,医院床位增至 40 |
表 1.2
## 1.3 人员分工情况
| | 构建 person 类;实现在模拟过程中自行调整防控模式;实现图片背景的设置;构建密码系统,输入的密码自动变成*;利用 EasyX 库实现输入的同时输出输入内容;整合修改调试 |
| - | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | 构建 city 类基本参数;默认天数改变人员流动意向,戴口罩,床位等情况;循环记录各种状态人数 |
| | 清屏,刷新城市;对人员分布进行正态分布;根据状态用颜色表示人;判断新一轮感染,改变人身体状况为潜伏期 |
| | 根据状况修改感染时间、床位、健康状况等;根据条件判断治愈并修改床位、身体健康等;绘制进度条,床位剩余一半时为黄色,0 时为红色 |
表 1.3
项目的主要功能包括调整疫情防控模式,判断人的状态为 orig(初始),shad(潜伏期),affe(已确诊),cure(已治愈),die(已死亡),循环记录每种状态的的人数并输出疫情现状参数,判断疫情是否结束,实时更新疫情,正态分布,判断新一轮感染,根据人的状态和床位等参数修改疫情参数,用进度条表示模拟进程等等。项目的最主要功能是模拟疫情扩散与防控。
# 二、各个功能模块的详细设计
主要分为 3 个模块,分别为 person 类、city 类、以及 main 函数。
![](https://www.writebug.com/myres/static/uploads/2022/6/26/8ba4cc819e961554dbf063afb25b9e58.writebug)
## 2.1 Person 类:
首先枚举人的健康情况 person_condition { orig, shad, affe, cure, die }以及人的年龄分布 person_age { teenager, young_adult, middle_adult, old_adult, s_old_adult };然后在构造函数的函数体中使用 srand 函数产生 1-10000 的随机数,并用 if 选择结构确定各年龄段的人数为 25%、20%、25%、20%、10%;然后通过 change 系列的函数分别实现设置人是否在医院、是否戴口罩、改变人的身体健康状况、将未感染者感染成潜伏期;通过 set_poisition 函数设置 x,y 的坐标,并通过 show 函数返回 x,y 的坐标;通过 set_if_underhospital 和 cur_if_underhospital 函数来可写以及可读人在是否在医院;通过 set_mask 和 cur_mask 函数来可写和可读戴口罩情况;通过 cur_body_conditon 函数返回人的身体健康情况;将每个人的初始感染情况均设置为 orig。
## 2.2 City 类:(包括 Person 类的头文件)
首先设置输出屏幕的长为 1080,宽为 720,总人口为 3000。在 dist 函数内应用 abs 和 pow 函数来返回两点间的距离;定义 bool 类型的 chance 函数,使用 srand 函数,实现由 x 概率发生的功能;在 day_change_info 函数内部通过 if 选择结构默认天数变化时人员流动意向和戴口罩的情况;在 record 函数,通过 for 循环和 switch 分支结构来记录各个阶段的人数;在 output_words 函数中,通过_stprintf_s 和 outtextxy 输出天数、确诊、治愈、死亡人数、城市人数和医院剩余床位数,通过 if 选择结构输出人员流动意向及防控等级和戴口罩情况;在判断疫情是否结束的 bool 类型的函数 over 中,如果 shad+affe=0,则清屏之后输出疫情结束,如果 orig+shad=0,在清屏之后输出城市沦陷;在 set_index 函数中,通过 for 循环设置数组 Person[i]的元素编号;在 first_affe 函数,通过 for 循环改变人员 person_condition;来对 original_count 人进行初始感染;通过 refresh_city 函数对各类健康情况人数赋值为 0;在 first_move 函数中通过 for 循环、if 选择结构和 do while 循环实现人员的初始移动;在 move 函数中,使用 for 循环、if 选择结构和 do while 循环和 rand 函数来确保每个人只能在原先位置的附近 6 个坐标内移动,从而实现正态分布;在 print_hospital 函数中,运用 setlinecolor 函数和 if 选择结构打印出进度条;在 new_broad 函数中,对于是否戴口罩以及目前的感染情况等进行判断,从而实现新一轮的传播;在 print_person 函数中,首先通过 cleardevice 函数清空之前的操作,然后通过 if 选择结构和 switch 分支结构将各类人员打印出来;在 add_affe_time 函数,通过自增更新感染时间;在 into_hospital 函数中,通过 if 结构判断是否满足条件来更新医院治疗人数使满足条件的人进入医院治疗;通过 change_affe 函数使感染时间达 8 天的 shad 转化为 affe;通过 change_die 和 change_cure 函数判断是否死亡和治愈,并更新各类型的人数;通过返回值为 bool 类型的 check_pos 函数来检查坐标是否在 720*720 的城市里;通过 reset 函数重置各个参数;在疫情模拟主函数 load 中,使用 while(1)无限循环,只有输入 0 时才 break 退出循环,利用 cleardevice 清屏,利用 if 选择结构和 outtextxy 输出各类信息;在 day_load 函数中,调用 cleardevice()、reset()、set_index()、first_affe()、first_move()和 outtextxy 默认天数来自行更改等级;在 control_load 函数中,除调用 day_load 函数中的各函数之外,还使用_getch()实现输入 W 键提升防控等级,按其他键暂停的功能。
## 2.3 main 主函数:
首先建立一个 City 类的对象 false_city 作为城市,然后通过 set_graph 函数设置窗口大小 背景颜色;然后通过 for 循环和 if 选择结构,调用 input()、show_bk()、show_time()、draw_title()等函数来确保有三次输入密码的机会,三次都输入错误后,显示“您输入错误已三次,无权使用该程序,程序将自动退出。”和“正在退出···”。在 reset_text 函数中,调用 settextcolor 和 settextstyle 函数来重新设置字体颜色和格式;在 show_time 函数中调用 outtextxy 和_stprintf_s 函数在指定位置输出 WHU 和日期;在 draw_title 函数中调用 reset_text、settextstyle 和 outtextxy 函数绘画出标题“计算机模拟疫情扩散”;通过 set_graph 函数设置窗口大小和背景颜色;在 show_bk 函数中,通过 loadimage 和 putimage �
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:设计报告word+开题答辩PPT+项目源码 项目的主要功能包括调整疫情防控模式,判断人的状态为 orig(初始),shad(潜伏期),affe(已确诊),cure(已治愈),die(已死亡),循环记录每种状态的的人数并输出疫情现状参数,判断疫情是否结束,实时更新疫情,正态分布,判断新一轮感染,根据人的状态和床位等参数修改疫情参数,用进度条表示模拟进程等等。项目的最主要功能是模拟疫情扩散与防控。 详细介绍参考:https://blog.csdn.net/newlw/article/details/125474090
资源推荐
资源详情
资源评论
收起资源包目录
通过C语言实现计算机模拟疫情扩散.zip (47个子文件)
设计报告.docx 4.2MB
.vs
C++大作业
v15
Browse.VC.db 49.75MB
ipch
AutoPCH
97e5d4aba9818745
CITY.ipch 99.19MB
2026396081cc856
CITY.ipch 75.88MB
eaf4c328721eb884
PERSON.ipch 29.38MB
695b3e2e47029e71
MAIN.ipch 99.19MB
ce38ba8f1da4c308
FUNCTION.ipch 99.25MB
a55891cdffc37471
MAIN.ipch 99.19MB
b00690cfce7298d7
PERSON.ipch 29.38MB
d3e3284b62425d45
CITY.ipch 99.19MB
C++大作业.sln 1KB
C++大作业
C++大作业.rc 3KB
city.cpp 14KB
C++大作业.vcxproj.filters 2KB
logo.jpg 360B
C++大作业.vcxproj.user 162B
resource.h 517B
main.cpp 3KB
C++大作业.vcxproj 6KB
樱花.jpg 2.22MB
city.h 2KB
Debug
C++大作业.tlog
CL.write.1.tlog 2KB
CL.read.1.tlog 89KB
rc.write.1.tlog 178B
rc.read.1.tlog 3KB
C++大作业.lastbuildstate 221B
CL.command.1.tlog 1KB
link.write.1.tlog 514B
link.command.1.tlog 2KB
rc.command.1.tlog 250B
link.read.1.tlog 4KB
city.obj 521KB
main.obj 498KB
vc141.idb 683KB
C++大作业.log 435B
function.obj 2KB
vc141.pdb 772KB
C++大作业.res 2.22MB
person.h 2KB
计算机模拟疫情扩散 开题报告答辩.pptx 3.06MB
UML.jpg 425KB
LICENSE 9KB
.gitignore 350B
README.md 11KB
Debug
C++大作业.pdb 2.26MB
C++大作业.exe 2.9MB
C++大作业.ilk 4.04MB
共 47 条
- 1
资源评论
- 鹄鹄2023-03-21这个资源对我启发很大,受益匪浅,学到了很多,谢谢分享~
shejizuopin
- 粉丝: 9592
- 资源: 1288
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 自动驾驶定位系列教程十:闭环修正.pdf
- HM2333-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- Python实现插入排序算法(源代码)
- 123.cpp
- HM2319-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- modbus4j-3.0.4.jar
- 蒙特·卡罗实验、使用蒙特·卡罗方法计算圆周率近似值.docx
- HM2319A-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- JAVA SpringBoot 集成华为云OBS,多镜像配置settings
- 一个文件共享系统,包括前端文件展示系统和后台管理系统,基于SpringBoot + MyBatis实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功