♻️ 资源大小161MB➡️资源下载https://download.csdn.net/download/s1t16/87430296计算机模拟疫情扩散一、项目的目标主要功能人员分工新冠的传染性很强随着一系列防控措施的落实疫情也在不断变化。我们小组的目标就是通过制作一个模拟疫情扩散与防控程序在思考疫情如何扩散的同时加强我们对 C 面向对象的程序设计方法的认识锻炼我们的建模能力、编程能力和自主学习能力。项目的最主要功能是模拟疫情扩散。在开始模拟前用户可以选择两种疫情防控模式分别为默认天数改变防控模式和在模拟过程中防控模式两种防控模式的具体实现如下表。1.1 默认天数改变防控天数小于 15天数小于 25天数大于 25人员流动意向强不戴口罩初始床位 20人员流动意向中戴口罩床位 20人员流动意向弱戴口罩床位 40表 1.11.2 模拟过程自行调整初级防控人员流动意向强不戴口罩床位 20中级防控人员流动意向中戴口罩床位 20高级防控人员流动意向弱戴口罩医院床位增至 40表 1.21.3 人员分工情况构建 person 类实现在模拟过程中自行调整防控模式实现图片背景的设置构建密码系统输入的密码自动变成*利用 EasyX 库实现输入的同时输出输入内容整合修改调试构建 city 类基本参数默认天数改变人员流动意向戴口罩床位等情况循环记录各种状态人数清屏刷新城市对人员分布进行正态分布根据状态用颜色表示人判断新一轮感染改变人身体状况为潜伏期根据状况修改感染时间、床位、健康状况等根据条件判断治愈并修改床位、身体健康等绘制进度条床位剩余一半时为黄色0 时为红色表 1.3项目的主要功能包括调整疫情防控模式判断人的状态为 orig初始shad潜伏期affe已确诊cure已治愈die已死亡循环记录每种状态的的人数并输出疫情现状参数判断疫情是否结束实时更新疫情正态分布判断新一轮感染根据人的状态和床位等参数修改疫情参数用进度条表示模拟进程等等。项目的最主要功能是模拟疫情扩散与防控。二、各个功能模块的详细设计主要分为 3 个模块分别为 person 类、city 类、以及 main 函数。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 中如果 shadaffe0则清屏之后输出疫情结束如果 origshad0在清屏之后输出城市沦陷在 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 中使用 while1无限循环只有输入 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 函数设置图片背景在 input 函数中调用 show_bk()、show_time()、draw_title()、reset_text()、outtextxy 函数和 while 循环以及 if 选择结构来实现将输入的内容实时绘制在画布中最后在 success 函数中通过再次调用 show_bk()、show_time()、draw_title()、reset_text()、outtextxy 函数和城市对象 false_city 的 load()函数实现疫情模拟在模拟完成之后调用 closegraph()函数关闭窗口结束模拟。三、模块实现采用的具体技术Person 类中构建了两个枚举类型的变量人的健康情况 person_condition { orig, shad, affe, cure, die }以及人的年龄分布 person_age { teenager, young_adult, middle_adult, old_adult, s_old_adult }。然后在构造函数中利用 rand 产生随机数使得不同的人分布在不同的年龄段年龄分布参照网上数据。建立功能函数控制 Person 类中的私有成员变量可读可写的权限。City类中使用了EasyX库添加了easyx.hconio.hgraphics.h三个绘图的头文件并使用了该库中的多种函数实现批量的绘图。使用随机数引擎中的normal_distribution实现对人口的正态分布。利用循环和getch()和kbhit()实现对键盘输入的随时接收。不同年龄段的死亡率和防控措施参照现实中的数据。Main中添加了atltime.h使用CTime类来获取系统时间。自己构思算法构建密码系统并利用EasyX库实现输入的同时输出输入内容。利用EasyX库中函数导入图片并设置为背景。四、总体评价及各成员的工作量评估对于初学 C 的我们小组成员该小项目难度适中比较适合我们完成大作业的同时学习理解新知识。具体代码行数为 1092代码量适中。亮点密码系统的构建使用绘图库实现输入的同时输出输入内容界面美观用户体验较为良好模拟过程清晰直观不同身体状况的人易区别并且程序可暂停。收获在初学 C 的一个学期后我们完成了 C 大作业尝试编写一个比较复杂的程序。在近两周的时间里我们同组的同学共同的感受是C 大作业和平时上课所接触的程序是有很大不同的所经受的考验和克服的困难是平时所无法比拟的。好在同组的搭档们精诚合作分工明确有问题共同解决攻克了计算机模拟疫情扩散这个复杂的程序。这使得我们对 C 有了一个更深的了解认识对面向对象程序设计的思想有了更清晰的了解这个学期学的知识也得到巩固。不过我们也认识到自己还有很多的知识没学好基础知识没理清遇到一些小错误就会烦躁不安以后要克服尽量保持一颗良好的心态。五、附录
基于C语言设计的计算机模拟疫情扩散
发布时间:2026/6/3 10:09:16
♻️ 资源大小161MB➡️资源下载https://download.csdn.net/download/s1t16/87430296计算机模拟疫情扩散一、项目的目标主要功能人员分工新冠的传染性很强随着一系列防控措施的落实疫情也在不断变化。我们小组的目标就是通过制作一个模拟疫情扩散与防控程序在思考疫情如何扩散的同时加强我们对 C 面向对象的程序设计方法的认识锻炼我们的建模能力、编程能力和自主学习能力。项目的最主要功能是模拟疫情扩散。在开始模拟前用户可以选择两种疫情防控模式分别为默认天数改变防控模式和在模拟过程中防控模式两种防控模式的具体实现如下表。1.1 默认天数改变防控天数小于 15天数小于 25天数大于 25人员流动意向强不戴口罩初始床位 20人员流动意向中戴口罩床位 20人员流动意向弱戴口罩床位 40表 1.11.2 模拟过程自行调整初级防控人员流动意向强不戴口罩床位 20中级防控人员流动意向中戴口罩床位 20高级防控人员流动意向弱戴口罩医院床位增至 40表 1.21.3 人员分工情况构建 person 类实现在模拟过程中自行调整防控模式实现图片背景的设置构建密码系统输入的密码自动变成*利用 EasyX 库实现输入的同时输出输入内容整合修改调试构建 city 类基本参数默认天数改变人员流动意向戴口罩床位等情况循环记录各种状态人数清屏刷新城市对人员分布进行正态分布根据状态用颜色表示人判断新一轮感染改变人身体状况为潜伏期根据状况修改感染时间、床位、健康状况等根据条件判断治愈并修改床位、身体健康等绘制进度条床位剩余一半时为黄色0 时为红色表 1.3项目的主要功能包括调整疫情防控模式判断人的状态为 orig初始shad潜伏期affe已确诊cure已治愈die已死亡循环记录每种状态的的人数并输出疫情现状参数判断疫情是否结束实时更新疫情正态分布判断新一轮感染根据人的状态和床位等参数修改疫情参数用进度条表示模拟进程等等。项目的最主要功能是模拟疫情扩散与防控。二、各个功能模块的详细设计主要分为 3 个模块分别为 person 类、city 类、以及 main 函数。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 中如果 shadaffe0则清屏之后输出疫情结束如果 origshad0在清屏之后输出城市沦陷在 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 中使用 while1无限循环只有输入 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 函数设置图片背景在 input 函数中调用 show_bk()、show_time()、draw_title()、reset_text()、outtextxy 函数和 while 循环以及 if 选择结构来实现将输入的内容实时绘制在画布中最后在 success 函数中通过再次调用 show_bk()、show_time()、draw_title()、reset_text()、outtextxy 函数和城市对象 false_city 的 load()函数实现疫情模拟在模拟完成之后调用 closegraph()函数关闭窗口结束模拟。三、模块实现采用的具体技术Person 类中构建了两个枚举类型的变量人的健康情况 person_condition { orig, shad, affe, cure, die }以及人的年龄分布 person_age { teenager, young_adult, middle_adult, old_adult, s_old_adult }。然后在构造函数中利用 rand 产生随机数使得不同的人分布在不同的年龄段年龄分布参照网上数据。建立功能函数控制 Person 类中的私有成员变量可读可写的权限。City类中使用了EasyX库添加了easyx.hconio.hgraphics.h三个绘图的头文件并使用了该库中的多种函数实现批量的绘图。使用随机数引擎中的normal_distribution实现对人口的正态分布。利用循环和getch()和kbhit()实现对键盘输入的随时接收。不同年龄段的死亡率和防控措施参照现实中的数据。Main中添加了atltime.h使用CTime类来获取系统时间。自己构思算法构建密码系统并利用EasyX库实现输入的同时输出输入内容。利用EasyX库中函数导入图片并设置为背景。四、总体评价及各成员的工作量评估对于初学 C 的我们小组成员该小项目难度适中比较适合我们完成大作业的同时学习理解新知识。具体代码行数为 1092代码量适中。亮点密码系统的构建使用绘图库实现输入的同时输出输入内容界面美观用户体验较为良好模拟过程清晰直观不同身体状况的人易区别并且程序可暂停。收获在初学 C 的一个学期后我们完成了 C 大作业尝试编写一个比较复杂的程序。在近两周的时间里我们同组的同学共同的感受是C 大作业和平时上课所接触的程序是有很大不同的所经受的考验和克服的困难是平时所无法比拟的。好在同组的搭档们精诚合作分工明确有问题共同解决攻克了计算机模拟疫情扩散这个复杂的程序。这使得我们对 C 有了一个更深的了解认识对面向对象程序设计的思想有了更清晰的了解这个学期学的知识也得到巩固。不过我们也认识到自己还有很多的知识没学好基础知识没理清遇到一些小错误就会烦躁不安以后要克服尽量保持一颗良好的心态。五、附录