上海某高校线上期末题-核酸检测系统C++实现

该博客介绍了一个使用C++编写的核酸检测系统,详细阐述了系统的功能实现,包括排队登记、检测核酸、查看排队情况等。系统中人员代码由楼栋号、房间号和人员序号组成,核酸检测管号根据单检和混检区分。博客还提供了操作指南和状态管理规则,以及如何验证登记和检测结果的正确性。
摘要由CSDN通过智能技术生成

上海某高校线上期末题-核酸检测系统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状态下的人的信息。
分析可得,所作操作即所得结果均符合题目要求,程序鲁棒性良好。只是没有针对异常输入的提示语,但如果是不符合规范的输入,不会对程序产生影响。

项目课程考核报告

附在项目源码中(只给出与此题相关部分)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值