上海某高校线上期末题-核酸检测系统C++实现
注意:本博客只是以学习交流和记录学习内容为主,分享自己的一些见解和思路,如有不当之处,请告知。
试题内容
考核要求
项目文件地址
在github上开源
项目说明文档 README.md(源码中也有此文件)
核酸检测系统
主要功能实现
(a)排队登记.(文件)
(b)检测核酸.(文件)
(1)排队登记
(2)检测核酸
(3)查看排队情况
(4)等级检测结果
(5)各类人员查询
(6)个人查询
(7)构造全员信息表
(8)显示全员信息表
功能测试及细节说明
一些注意事项:
1.运行后请严格按照选项前的标号输入,不得输入奇怪的输入,以免程序出现未知错误。
2.一定先输入7选项,构造全员信息大表。
3.所设计的核酸检测系统中人员代码是有固定范围的。
题目要求如下:人员代码是一个8位(xxxyyyyz)的数字,其中xxx表示楼栋号(000到999);yyyy表示房间号,例如:0801、1801等;z代表一个房间中人员序号(1~9)。
但考虑到实际情况,楼栋数没有那么多,楼层也没有那么高,每家每户的人也没有那么多,实际上前三位楼栋号范围为(001到060),即从1号楼到60号楼。之后四位的前两位表示楼层号,范围为01到12,即十二层楼。再之后的两位表示某一层楼的房间数,这里范围规定为01到04。最后一位表示房间人数,规定范围为1到到4.这样的八位数字表示一个人的人员代码。
4.核酸检测如果是单检,则分配的单检管号首位是1,后面四位是范围0000到9999,按检测顺序流水号分配如果溢出则无效。核酸检测如果是混检,则分配的混检管号首位是0,后面四位是0000到9999,十个人拥有相同的核酸检测管号。同样溢出则无效。
5.人员信息类Person_Information的私有成员变量除了核酸检测管号(string类型)外,还有状态1 s1, 状态2 s2。s1包括Undetected、In_Line、Wait_for_upload_result三种状态,这三种状态依次递进,优先级依次上升。即如果未对某人员做任何操作,则第一个状态s1是默认的Undetected。如果之后他进行了排队,那么状态更新为In_Line,如果再检测核酸则更新为Wait_for_upload_result。如果之后再进行排队程序会覆盖掉之前的状态,变为In_Line,s1的其他状态的覆盖同理。
对于状态s2,包括Negative、Diagnosis、Suspicious、Contact、Sub_Contact共五种状态。对于确诊和阴性这两种情况,均比其他状态的优先级高,可以覆盖其他三种状态,而这两种状态之间可以相互覆盖,这样也是合理的。如果一个人确诊,那么他之前的所有状态都能被推翻,而如果核酸检测又是阴性的话,那么也能覆盖他确诊的状态。剩余三种状态,Suspicous可以覆盖Contact、Negative、Sub_Contact,Contact能覆盖Negative、Sub_Contact,Sub_Contact只能覆盖Negative。这些都是根据实际情况考虑的优先级覆盖关系。
运行指导:
1.打开首先运行程序或打开对应的.exe文件显示出核酸检测系统。
2.先输入数字7,按下enter.构建全员信息大表。
3.然后输入a,按下enter.再输入b,按下enter。
4.此时可以再按下8,查看全员大表状态,会发现第一列是人员代码,按一定顺序排列,第二列是核酸试管号,如果此人还未排队做检测,那么此时他的第二个状态是初始状态null,表示没有核酸管号分配给他。第三列和第四列都是表征人员的状态,此处状态的分类和相互之间的覆盖关系详见注意事项5
5.可以在此时看一下项目从文件里读取的到底是怎样的数据。打开line_up.in,此时读入了18个做混管人的排队,19个做单管人的排队。再打开nucleic_acid_test.in文件,发现检测11个人做混检核酸,检测12个人做单管核酸。注意此时做混检的人数不是10的整数倍,但仍会做出相应的核酸检测,状态修改为Wait_for_upload_result,如果之后还有人排队,比如再来9个人排队,这9个人会和卡面剩下的1人仍然拥有同一个混检试管号,这是通过核酸检测系统类里的私有成员变量实现的。如果混检管数未满采取登记结果操作,不建议这样操作,程序不会将这些人的状态登记,只有后续排满10人才可登记。如果实在需要更改在这种状态下登记,建议采用通过人员代码的方式进行登记,可以选择c选项。
6.验证是否登记成功。
如果输入的试管号不合法,不会进行登记,只有输入正确的试管号,才能找到,并进行相应的登记。
登记混管确诊:
选择4,按下enter;
输入00000,按下enter,即产生的第一个混检试管编号;
输入Diagnosis,按下enter会将这些混管的人员代码相应的状态改为Suspicious
选择5,按下enter;
再选择3,按下enter,展示出Suspicious状态下的人的信息。
选择4,按下enter;
输入10004,按下enter,即登记第五个单检管;他的人员代码从文件中不难看出是05801012
输入Diagnosis,按下enter;
选择5,按下enter;
再选择2,按下enter,展示出Diagnosis状态下的人的信息。
选择5,按下enter;
再选择4,按下enter,展示出Contact状态下的人的信息。
选择5,按下enter;
再选择5,按下enter,展示出Sub_Contact状态下的人的信息。
分析可得,所作操作即所得结果均符合题目要求,程序鲁棒性良好。只是没有针对异常输入的提示语,但如果是不符合规范的输入,不会对程序产生影响。
项目课程考核报告
附在项目源码中(只给出与此题相关部分)