实验二《西北师范大学学生疫情上报系统》项目报告
项目 | 内容 |
---|---|
课程班级博客 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
作业要求 | https://www.cnblogs.com/nwnu-daizh/p/12416880.html |
课程学习目标 | (1)学习软件项目的个人开发流程(2)掌握GitHub的操作方法 |
本次在哪些方面帮助我实现学习目标 | 软件开发流程的方面和运用学习工具的方面 |
项目的Github仓库链接 | xxx |
实验内容
1 需求分析
2019年12月以来,湖北省武汉市持续开展流感及相关疾病监测,发现多起病毒性肺炎病例,均诊断为病毒性肺炎/肺部感染,并造成了大规模的疫情。后经研究发现,这次的病毒性肺炎疫情是由2019新型冠状病毒(2019-nCoV)引起的。为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施:2020年1月23日10时起对武汉“封城”,全国31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
此次疫情中,许多互联网企业相继投入到了疫情的防控工作当中,开发了很多与防疫相关的软件,为政府的防疫工作减少了许多的麻烦,有效地降低了疫情在某些生活方面的传播可能。这也放映出了软件产品对于遏制疫情发展起到了重要的作用。同时,虽然已经有很多的软件产品已经投入到了疫情的遏制工作当中,但是这个量还是远远不够的,需求仍然很大,并且仍然有很多领域未涉及到,需要我们不断地探索。
参考文献:
中国抗击新型冠状病毒:进展和影响[EB/OL]. (2020-02-01)/[2020-03-04].http://cn.chinadaily.com.cn/a/202002/01/WS5e358d1fa3107bb6b579c92b.html
2 功能设计
这里我需要再看一下题目:
二选一:
第一类开发要求:
有一个数据文件,保存了 100天 2000个 教职工/学生的所有防疫信息,请设计一个命令行程序,支持查询某人在某一天的疫情情况,查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
第二类开发要求:- 系统可采集学生疫情有效信息;
- 系统支持用户在线使用;
- 每日只可填报一次,提交后无法修改,每日十点疫情信息填报截止;
- 各学院指定负责人登录系统,可查看本学院学生填报的汇总数据,可点击查看学生联系方式、班主任联系方式,学院负责人核实本院所有学生数据后,将数据提交给学校防控办;
- 学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有学生填报汇总数据清单,通过【导出】可获取疫情数据的EXCEL文件。
这里我选择第一个要求进行开发。
从这里可以分析出,第一个要求的客户对象应该是管理人员,需要我们达到以下功能:
- 基本功能
- 支持查询某人在某一天的疫情情况
- 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果(这里因为使用的是命令行,所以我应该只会实现统计个数的功能)
可以存储以下信息:学号;与本人相关的防疫信息a.有无发热,b.是否为留校学生,c.是否为湖北籍,d.是否与武汉疫区人员接触,e.是否与湖北疫区人员接触,f.是否在武汉,g.是否在湖北,h.今天从外地返校
-扩展功能
-既然是疫情上报系统,并且是面向管理人员的,那么肯定要有相应的管理功能。
-因此,我在里面添加了更新人员信息,删除人员信息和增加人员信息的功能。3 设计实现
应用了两个类实现相关功能,利用MySQL存放数据:
Anti对象:
(1)在Anti对象里定义了学生/教职工的编号id、学号/职工号name、疫情信息situation、登记时间date。生成了构造方法和toString()方法;以及getting()和setting()方法,但后两种在程序里没用到(方便日后的扩展)。
(2)之所以我没有用到姓名,是因为一个学校里,可能会有一些重名的学生或教职工,那么就会导致查询的不便利。另外,教职工的职工号和学生的学号构成方式不同,是很不错的区分方式,可以减少软件开发的工作量。
主程序TestFly:
TestFly类中有实现各种功能的函数,包括 1.列出防疫信息,2.按时间查询,3.按防疫信息查询,4.按姓名查询,5.删除人员信息,6.更新人员信息 ,7.添加人员信息, 8.退出系统。
MySQL数据库:
(1)运用数据库安全的存放相关的数据
(2)数据库名字是Fly,数据表是plane;在getcon()函数中注册驱动、获取连接
表的设计结构:
- 主要函数
- listMessage():临时存放人员信息
- showMessage():展示人员信息
- showNum():计算数据个数
- selectDate():以时间进行筛选的函数
- selectSituation():以人员情况进行筛选的函数
- selectAntiNum():以教职工编号/学生学号进行筛选的函数
- deleteFly():删除人员信息函数
- updateFly():更新人员信息函数
- creatAnti():添加人员信息函数
测试运行
主界面:
列出所有的防疫信息:
支持查询某人在某一天的疫情情况:
查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果:
命令行里无法用柱状图,这里我只对个数进行统计(分别可以以时间和人员信息为标准,进行筛选计算)。
以人员信息为标准,进行查询(这里以有无发热为例,统计人数):
以时间进行查询:
删除人员信息:
更新人员信息:
添加人员信息:
5 代码片段(核心)
、、、
//注册驱动,获取连接
public static Connection getCon() throws Exception{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/fly", "root", "19981228");
return con;
}
//创建初始信息,插入信息
public static void creatAnti(String name,String situation, String situation1, String situation2, String situation3, String situation4, String situation5, String situation6, String situation7,String date) throws Exception{
getCon();
String sql = "insert into anti values (null,?,?,?,?,?,?,?,?,?,?)";
ps = con.prepareStatement(sql);
ps.setString(1, name);
ps.setString(2, situation);
ps.setString(3, situation1);
ps.setString(4, situation2);
ps.setString(5, situation3);
ps.setString(6, situation4);
ps.setString(7, situation5);
ps.setString(8, situation6);
ps.setString(9, situation7);
ps.setString(10, date);
ps.executeUpdate();
ps.close();
con.close();
selectAntiNum(name);
}
//系统主菜单
public static void show(){
System.out.println("请选择操作:(1.列出防疫信息,2.按时间查询,3.按防疫信息查询,4.按姓名查询,5.删除人员信息,6.更新人员信息 ,7.添加人员信息, 8.退出系统)");
}
//获取结果集合输出
public static void showMessage(Set<Anti> set){
System.out.println("\n********************************版权所有:wyq***********************************\n");
if(set.size() == 0){
System.out.println("未匹配到任何数据!");
System.out.println("\n********************************版权所有:wyq***********************************\n");
return;
}
System.out.println("Anti\t\t姓名\t\t有无发热\t\t是否为留校学生/是否为湖北籍/是否与武汉疫区人员接触/是否与湖北疫区人员接触/是否在武汉\t是否在湖北\t是否今天从外地返校 时间");
for( Anti value : set){
System.out.println(value);
}
System.out.println("\n********************************版权所有:wyq***********************************\n");
}
//获取此数据的人数
public static void showNum(Set<Anti> set){
int x=0;
for( Anti value : set){
x++;
System.out.println(value);
}
System.out.println("\n***数据统计***\n");
System.out.println("共有"+x+"人");
System.out.println("\n***数据统计***\n");
}
//列出防疫信息
public static Set<Anti> listMessage() throws Exception{
getCon();
String sql = "select * from anti";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
Set<Anti> set = new HashSet<>();
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String situation = rs.getString("situation");
String situation1 = rs.getString("situation1");
String situation2 = rs.getString("situation2");
String situation3 = rs.getString("situation3");
String situation4 = rs.getString("situation4");
String situation5 = rs.getString("situation5");
String situation6 = rs.getString("situation6");
String situation7 = rs.getString("situation7");
String dateTime = rs.getString("date");
Anti anti = new Anti(id, name, situation, situation1, situation2, situation3, situation4, situation5, situation6, situation7,dateTime);
set.add(anti);
}
ps.close();
con.close();
return set;
}
、、、