实验二 个人项目《西北师范大学学生疫情上报系统》项目报告
项目 | 内容 |
课程班级博客链接 | 课程班级博客链接 |
作业要求 | 作业要求 |
学习目标 | 1.学习和掌握软件项目开发的相关知识。2.掌握GitHub的操作方法 |
这个作业在哪些方面帮助我实现学习目标 | 学习和巩固软件开发相关知识 |
项目Github的仓库链接地址 | 项目Github的仓库链接地址 |
任务1:陈述学生疫情每日上报子系统使用体验;
1.一开始存在信息上报过程稍许冗杂的问题,但是后来就都解决了,记录可以记忆下来,方便快捷。
2.可以再增加一个提醒的功能,防止遗忘。
任务2:总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。
可在以下两类开发要求选择一种完成项目开发任务:
我选择第一类开发要求:
有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况, 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
1. 需求分析
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
2. 功能设计
基本功能
1.支持支持查询某人在某一天的疫情情况。
2.查询某种数据的周/月的疫情统计情况
3.柱状图显示统计结果。
3. 设计实现
- 一共设计了五个类来实现功能,Peo实体类,PeoDao管理数据访问对象,DBUtil类用于连接数据库,PeoManage管理菜单,Main主函数,数据存储使用mysql数据库。
主要函数有增添add,删除del,修改update等对数据进行管理的函数。
mysql中建立相应的数据库epidemicdata,存储疫情信息的表格yiqing。
4. 测试运行
- 主要界面 以及测试功能一,添加疫情信息
5.代码片段
//查询学生信息
public void myList() throws SQLException{
Connection conn =DBUtil.getConn();
System.out.println("************************");
System.out.println("====疫情信息====");
System.out.println("信息如下:");
System.out.println("学号\t姓名\t性别\t学院\t地址\t是否疑似\t是否确诊\t是否与患者接触\t日期");
PeoDao peoDao=new PeoDao();
List list=peoDao.list();
for (Peo peoList:list) { //循环打印出查询结果
System.out.println(peoList.getId()+"\t"+peoList.getName()+"\t"+peoList.getSex()+"\t"
+peoList.getCollege()+"\t"+peoList.getAddress()+"\t"+peoList.getSuspect()+"\t"
+peoList.getConfirm()+"\t"+peoList.getContact()+"\t\t"+peoList.getTime());
}
System.out.println("************************");
}
//查看列表(1所有)
public List list() throws SQLException {
List list=new ArrayList();//线性列表
String sql="select * from yiqing";
try {
conn=DBUtil.getConn();
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();//用于查询
while (rs.next()) {
Peo peo=new Peo();
peo.setId(rs.getString("id"));//取结果集值赋给
peo.setName(rs.getString("name"));
peo.setSex(rs.getString("sex"));
peo.setCollege(rs.getString("college"));
peo.setAddress(rs.getString("address"));
peo.setSuspect(rs.getString("suspect"));
peo.setConfirm(rs.getString("confirm"));
peo.setContact(rs.getString("contact"));
peo.setTime(rs.getString("time"));
list.add(peo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
conn.close();
pstmt.close();
rs.close();
}
return list;
}
public void menu() throws SQLException {
//1.打印菜单
//2.输入菜单
//3.switch菜单选择
int choose;
do {
System.out.println("******************************");
System.out.println("=======欢迎进入疫情信息管理系统=======");
System.out.println("1.新增信息");
System.out.println("2.修改信息");
System.out.println("3.删除信息");
System.out.println("4.查询信息");
System.out.println("5.按时间查");
System.out.println("6.按地址查");
System.out.println("7.查确诊");
System.out.println("8.查疑似");
System.out.println("9.退出该系统");
System.out.println("请选择(1-9):");
Scanner scanner=new Scanner(System.in);
choose=scanner.nextInt();
System.out.println("******************************");
switch (choose) {
case 1:
myAdd(); //菜单选择1,是新增学生
break;
case 2:
myUpdate(); //菜单选择2,是修改学生
break;
case 3:
myDel(); //菜单选择3,是删除学生
break;
case 4:
myList(); //菜单选择4,是查询学生
break;
case 5:
findday();//菜单选择5,按时间
break;
case 6:
findaddress();//菜单选择6,按地址
break;
case 7:
findconfirm();//菜单选择7,查确诊
break;
case 8:
findsuspect();//菜单选择8,查疑似
break;
case 9: //菜单选择9,是退出该系统
System.out.println("您选择了退出系统,确定要退出吗?(y/n)");
Scanner scan=new Scanner(System.in);
String scanExit=scan.next();
if(scanExit.equals("y")){
System.exit(-1);
System.out.println("您已成功退出系统,欢迎您再次使用!");
}
break;
default:
break;
}
} while (choose!=9);
}
//连接数据库
private static String dbUrl="jdbc:mysql://localhost:3306/epidemicdata?characterEncoding=utf-8";
private static String dbUser="root";
private static String dbPassword="123456";
private static String jdbcName="com.mysql.jdbc.Driver";
public static Connection getConn(){
Connection conn = null;
try{
Class.forName(jdbcName);
}
catch(Exception e){}
try{
conn=DriverManager.getConnection(dbUrl,dbUser,dbPassword);
}
catch(SQLException ex){}
return conn;
}
6. 总结
通过创建Peo、PeoManage、DBUtil等类,在不同部分实现不同功能,从而实现“模块化”编程。
7. 展示PSP
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
Planning | 计划 | 10 | 7 |
· Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 8 | 5 |
Development | 开发 | 710 | 950 |
·· Analysis | 需求分析 (包括学习新技术) | 40 | 120 |
· Design Spec | · 生成设计文档 | 30 | 30 |
· Design Review | · 设计复审 (和同事审核设计文档) | 0 | 0 |
· Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 30 |
· Design | 具体设计 | 120 | 180 |
· Coding | 具体编码 | 380 | 470 |
· Code Review | · 代码复审 | 60 | 80 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 40 |
Reporting | 报告 | 50 | 60 |
·· Test Report | · 测试报告 | 20 | 30 |
· Size Measurement | 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结 ,并提出过程改进计划 | 20 | 20 |
- 这个环节中耗时最多的是具体设计和编码的环节,估计时间相差最大的是需求分析(学习新技术)的环节,在准备阶段软件出了很多问题,解决问题花费了很多时间。
任务3:完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中。
我参考了以下文档,完成了任务3。
怎样导入到Github
其中遇到了git Please tell me who you are的问题,
参考以下博文得以解决:
git Please tell me who you are解决
总结:
由于自身的编程能力不足,没能实现柱状图的部分,会在日后的学习中进一步提升编程能力,多记多练,也会向同学老师再多请教。在这次项目中发现了自身的很多不足,但是也学到了很多知识,对之前学过但是没有很好掌握的知识有了进一步的掌握,加深了记忆,也对“模块化”有了更深的理解。