> # ♻️ 资源
> **大小:** 161MB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010757**](https://www.yuque.com/sxbn/ks/100010757)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87430296**](https://download.csdn.net/download/s1t16/87430296)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 计算机模拟疫情扩散
# 一、项目的目标,主要功能,人员分工
新冠的传染性很强,随着一系列防控措施的落实,疫情也在不断变化。我们小组的目标就是通过制作一个模拟疫情扩散与防控程序,在思考疫情如何扩散的同时,加强我们对 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://cdn.nlark.com/yuque/0/2024/png/2469055/1715387999668-3f4d8375-6071-4529-8c36-7dc4fbee20ea.png#averageHue=%23f9e6cd&from=url&id=gZTIx&originHeight=1078&originWidth=1300&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
## 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 函数中,调用 s
神仙别闹
- 粉丝: 4215
- 资源: 7516
最新资源
- html+css+js网页设计 美食 美食天下2个页面(里面包含php和mysql)
- API For Docker 一个基于多种编程语言开源免费不限制提供生活常用,出行服务,开发工具,金融服务,通讯服务和公益大数据的平台.zip
- 基于uniapp智能小程序商城源码(小程序毕业设计完整源码+LW).zip
- BasicOCR是一个致力于解决自然场景文字识别算法研究的项目 该项目由长城数字大数据应用技术研究院佟派AI团队发起和维护 .zip
- 毕设-java-swing-学生选课成绩信息管理系统(ER图文档+视频+源码)7.zip
- Bonree Ants流式大数据处理引擎.zip
- 基于小程序的超市购物系统代码源码(小程序毕业设计完整源码+LW).zip
- 毕设-java-swing-图书管管理系统(视频+源码)5.zip
- 基于模糊滑模控制器Fuzzy-SMC的永磁同步电机FOC 1.转速环采用Fuzzy-SMC控制器; 2.控制器参数使用PSO算法进行在线寻优,降低调参难度; 3.提供算法对应的参考文献和仿真模型
- 基于小程序的高校就业招聘系统的设计与实现源码(小程序毕业设计完整源码+LW).zip
- C#毕业设计-基于ASP.NET的图书管理系统源码+数据库(高分毕设)
- CCF-大数据精准营销中搜狗用户画像挖掘.zip
- 基于小程序的公考学习平台的设计与实现源码(小程序毕业设计完整源码+LW).zip
- ibm 磁带带库驱动程序
- 游泳溺水识别数据集,对25729张图片进行PACICAL VOC XML格式的标注,溺水平均识别率在89.9%
- 激光熔覆传热传质,浓度场,可观察不同元素分布已经扩散情况 程序中包含固体传热,层流等模块
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈