项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12416880.html |
课程学习目标 | 从个人开发项目中熟悉软件工程这门课程,并学会在Github上发布源码 |
本作业在哪些方面帮助我实现学习目标 | 熟悉软件开发的基本流程,更加了解软件工程这门课程在软件开发中起到的作用 |
项目Github的仓库链接地址 | https://github.com/whhcxsj/SE |
任务1:陈述学生疫情每日上报子系统使用体验;
刚开始使用这个系统时,我记忆犹新,我进了差不多两个小时,还是没进去,内心是奔溃的。由于访问者太多,系统崩了。后来,系统是可以进去了,但是每次都要重新选择信息,而这个信息跟之前的一模一样,却要再次选择,感觉太繁琐了。后来,这个系统进行了改进,不需要在重新选择一遍了,这点还是做的很好的,及时改进了系统的缺陷。但是该系统还是有吐槽的地方的,比如自己填完信息后不会提示已经提交,而是直接返回了系统界面,让人很困惑自己是否提及偶爱,此外,有时候经常忘记提交,希望开发者可以写一个提醒功能。不过,在这么短的时间内开发出这样一款系统,是值得肯定的。
任务2:总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。
一、需求分析
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
二、功能设计
第一类开发要求:
有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况, 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
第二类开发要求:
1. 系统可采集学生疫情有效信息;
2. 系统支持用户在线使用;
3. 每日只可填报一次,提交后无法修改,每日十点疫情信息填报截止;
4. 各学院指定负责人登录系统,可查看本学院学生填报的汇总数据,可点击查看学生联系方式、班主任联系方式,学院负责人核实本院所有学生数据后,将数据提交给学校防控办;
5. 学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有学生填报汇总数据清单,通过【导出】可获取疫情数据的EXCEL文件。
本次我选择了第一类开发
基本功能
(1)支持用户对疫情上报信息的填写功能;
(2)支持查询某人在某一天的疫情情况。
(3)查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
(4)学生及教职工对系统登录功能;
扩展功能
(1)由于本次系统是自己编写,是作为开发者,故添加了管理员功能。
(2)管理员可根据不同的时间段,地区等进行组合查询。
(3)管理员可添加、删除和修改用户相关的信息。
三、设计实现
1、本次设计包含两张表,一张是存储管理员的账号和密码,另一张是存储用户的相关信息。数据库设计如下:
管理员信息设计:其中1,2分别表示管理员和普通用户。
用户表设计:
用户表中的数据表示,用户表中的数据顺序参考西北师范大学疫情上报系统:
本次设计用到的包:
其中:
(1)com.cn.controller表示控制层,将所有功能串在一起,展示了该系统的所有功能。
(2)com.cn.data表示管理员对用户数据进行相关操作,增删查改等操作。
(3)com.cn.login表示登陆页面,包含账号密码,查找信息信息等操作的提示。
(4)com.cn.user表示存储管理员和用户的账号和密码。
(5)com.connect.jdbc表示数据库与MySQL的连接。
(6)com.connect.test表示测试数据库与MySQL是否连接,以及测试用户登陆界面、管理员界面、已经增删改查等功能。
2、本次设计的重要函数:
封装User类:
提供四个构造方法:
User()
User(String uname,String upass)
User(String uname,String upass,int type)
User(int id,String uname,String upass)
(1)managerServer():管理员运行操作函数。
(2)Userdata():用户类。
四、测试运行
驱动加载成功,数据库连接成功:
管理员操作界面:
查询信息:
修改信息:
删除信息:
柱状图显示疑似人数、确诊人数以及感染人数:
五、代码展示
package com.cn.controller;
import com.cn.user.User;
import com.cn.data.Userdata_Imp;
import com.cn.login.login;
public class Control {
public static void main(String[] args) {
while (true) {
// 给用户展示登陆页面
User user = login.indexlogin();
Userdata_Imp Userdata_Imp = new Userdata_Imp();
int type = Userdata_Imp.login(user);
switch (type) {
case -1:
System.out.println("输入有误,请重新输入!");
break;
case 1:
// System.out.println("恭喜管理员登陆成功");
managerServer();
break;
case 2:
System.out.println("恭喜用户登陆成功");
userServer();
break;
default:
break;
}
}
}
private static void managerServer() {
// TODO Auto-generated method stub
Userdata_Imp userdata_Imp = new Userdata_Imp();
while (true) {
// 展示管理员菜单视图
int item = login.managerlogin();
boolean flag;
switch (item) {
case 1:// 添加信息
User user = login.addMenuView();
flag = userdata_Imp.insert(user);
System.out.println(flag ? "add sucess" : "add fail");
break;
case 2:// 删除信息
String uname = login.deleteMenuView();
flag = userdata_Imp.delete(uname);
System.out.println(flag ? "delete sucess" : "delete fail");
break;
case 3:// 查看信息
String uname1 = login.selectMenuView();
User selectUser = userdata_Imp.select(uname1);
login.printUser(selectUser);
System.out.println(flag ? "select sucess" : "select fail");
break;
case 4:// 退出
System.exit(-1);
break;
default:
break;
}
}
}
}
六、总结
对于本次的项目设计,我有很多地方还很不完善。刚开始看到题目的时候感觉佷触,因为自己的编程实在是差。后面通过将项目模块化,设计了6个包,上面的内容已经提到。模块化设计把一个的复杂的项目划分为若干个简单的、功能单一的程序模块,这使得我们更容易理解项目,更加方便我们进行管理,有利于程序的设计和调试。
七、展示PSP
PSP | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 30 | 35 |
Development | 开发 | 1000 | 1254 |
Analysis | 需求分析 (包括学习新技术) | 70 | 60 |
Design Spec | 生成设计文档 | 40 | 40 |
Design Review | 设计复审 (和同事审核设计文档) | 0 | 0 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 25 |
Design | 具体设计 | 300 | 359 |
Coding | 具体编码 | 360 | 350 |
Code Review | 代码复审 | 50 | 40 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 45 |
Reporting | 报告 | 70 | 80 |
Test Report | 测试报告 | 30 | 40 |
Size Measurement | 计算工作量 | 30 | 30 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 40 | 30 |
这个环节重要的是让自己看到自己的估计和实际消耗时间,哪个环节耗时最多,哪个环节估计和实践相差巨大?为什么?(5分)
由于编程能力较弱,主要是代码耗费了大量时间。
经验分享:
以往类似的项目都是通过合作完成,这是一次个人项目,也是自己一个人独立完成。在完成的过程中遇到了很多困难,比如在数据库的连接上就出了问题,后来通过查资料得以解决。很多问题都是在出错,找资料中完成。由于编程能力较弱,在写代码的时候遇到了很多问题,再加上对java的很多知识点得遗忘,使得完成本次项目耗费了大量时间。PSP中的时间规划,基本上都是比预计时间延长了很多。通过本次项目得完成,我深刻得认识到要多动手,遇到难题要迎难而上。平时要多做,多动手,通过时间来掌握知识。
任务三:完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中。