项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
这个作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12416880.html |
我的课程学习目标 | (1)学习掌握软件项目开发流程(2)根据PSP合理规划项目各项所用时间(3)掌握GitHub代码仓库发布软件项目 |
这个作业在哪些方面帮助我实现学习目标 | 软件项目的开发以及GitHub的使用 |
项目GitHub的仓库链接地址 | https://github.com/ajingya/select-project |
任务1:陈述学生疫情每日上报子系统使用体验:
- 我校在疫情发生后较短的时间内开发出了采集师生信息的疫情上报系统,在如此短的时间内能开发出这样的系统已经非常不错了。首先,前一天填写数据后第二天进入系统,系统会保存之前的填写信息,如果没有需要修改的信息就可以直接提交了,这是使用方便的地方。但是由于时间紧张,该系统在使用过程中还有些许的不方便,在第一天进行填报的时候,就出现了上万人同时在线进行填报时,系统崩溃,之后进行了改进,系统可以支持多人同时在线。其次,在信息填报完成后点击提交按钮会弹出一个空白的页面,这一步很让人迷惑。然后,若是有填报提醒功能就太好了。
任务2.总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。
项目实施过程:
1.项目开发背景
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
参考文献:
1.中国抗击新型冠状病毒:进展和影响[EB/OL].(2020-02-01)/[2020-03-04]. http://cn.chinadaily.com.cn/a/202002/01/WS5e358d1fa3107bb6b579c92b.html
2.需求分析:
(1)有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息。
(2)设计一个命令行程序, 支持查询某人在某一天的疫情情况,
(3)查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
3.功能设计
- 第一类开发要求: (我选择第一类开发要求)
- 有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况,查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
- 第二类开发要求:
- 系统可采集学生疫情有效信息;
- 系统支持用户在线使用;
- 每日只可填报一次,提交后无法修改,每日十点疫情信息填报截止;
- 各学院指定负责人登录系统,可查看本学院学生填报的汇总数据,可点击查看学生联系方式、班主任联系方式,学院负责人核实本院所有学生数据后,将数据提交给学校防控办;
- 学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有学生填报汇总数据清单,通过【导出】可获取疫情数据的EXCEL文件。
(1)基本功能:
- 存储师生的疫情情况
- 查询某人的疫情情况
- 柱状图显示查询结果
(2)扩展功能
- 不同身份的用户使用不同的功能
- 管理员登录需要密码可进行查询等操作
- 普通用户可进行填报信息
- 管理员登录时查询可按照不同的字段进行查询
4.设计实现
-
数据存储
选择数据库进行大量数据的存储,在数据库中新建一个表“疫情防控统计表”,该表中含有11个列(学院、所在班级、学号、姓名、目前所在省、目前所在市、是否确认被感染、是否疑似病例、是否与疫区人员接触过、是否今日返校、以及填报日期)
-
代码编写
- 虽然要求是用命令行方式实现,但考虑使用效果,选择java用GUI界面实现,创建了6个类来实现不同的界面功能
- 多次用到PreparedStatement函数,本来选择了statement函数,但查阅后发现PreparedStatement会防止SQL注入,更加安全,所以选择了PreparedStatement。
- 由于需要连接数据库所以导入了jdbc4.jar包
- 虽然要求是用命令行方式实现,但考虑使用效果,选择java用GUI界面实现,创建了6个类来实现不同的界面功能
5.测试运行
-
基本功能
- 实现对所有填报数据进行查询
- 按姓名查找
- 按填报日期查询
- 若按姓名或者填报日期查找,输入信息不正确后弹出错误提示框,可在查询条件处重新录入查询字段,进行查询
- 生成是否感染的柱状图
- 实现对所有填报数据进行查询
-
扩展功能
可按其他字段进行查找- 按学院查找
- 按班级查找
- 按学号查找
- 按目前所在省查找
- 按目前所在市查找
- 可进行功能选择,查询功能是具有管理员权限的人员通过密码可以登录,普通用户只可填报信息
由于填报功能还没有完整的开发出来,所以此处没有展示 - 进入查询功能后,要求用户使用账号密码登录
若密码输入错误则登录失败
- 成功登录进入后跳入管理员功能选择界面
- 按学院查找
6.关键代码
//文字使用ACSII码
public main() {
setTitle("u529fu80fdu9009u62e9");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 325, 177);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
//选择查询按钮将进入管理员模式,需要登录
JButton button = new JButton("u67e5u8be2");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new login();//创建一个新的类,展示登录界面
dispose();//跳入下一个页面时,退出当前页面
}
});
button.setBounds(101, 36, 93, 23);
contentPane.add(button);
JButton button_1 = new JButton("u586bu62a5");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//new insert();
//选择填报按钮可以进入一般用户模式进行信息填写,开发未果,后期继续开发
}
});
button_1.setBounds(101, 82, 93, 23);
contentPane.add(button_1);
}
//数据库连接代码
private static final String URL="jdbc:sqlserver://localhost:1433;DatabaseName=简单疫情打卡查询";
private static final String USERNAME="sa";
private static final String PASSWORD="zxcvbnm123";
- main()函数中主要设计了两个按钮,将按钮接到动态时间监听器接口ActionListener(),监听器监听到动作发生后会跳转到新建的类;用了与swing顶层容器相关联的ContentPane内容面板上。
7.总结:程序如何实现软件设计的“模块化”原则及项目小结
- 程序如何实现模块化原则:
在软件编程中,谁也不希望因为修改了一个功能导致其他的功能发生故障。而避免出现这一问题的方法便是程序的“模块化”原则。在设计时可分为不同的模块,降低类的复杂度,一个类只负责一项职责,使得在后期修改某一功能时不改动其他功能,提高系统的可维护性。在我的软件设计中也基本遵循了软件设计的“模块化”原则,将查询与填报功能分为两个类来实现,因为我的填报功能还不是很完善,所以暂时不能使用,但是这并不影响我的查询功能的使用。在查询功能中也分为了很多个模块,其中一个模块功能出现问题,但不影响其他功能的使用。
此次项目实施过程中,由于自身编程能力不足,在编程方面有较大困难,但是在不断的回顾之前所学知识与学习新技术后能勉强写出代码,完成要求。因此,只有在不断的实践中才能提升自身能力。 - 项目小结:在此次项目设计中,首先有一个填报功能还没有实现,会在之后继续开发。其次,项目要求要存储20万条数据,由于没有找到足够的数据所以只用了少量数据来测试软件的运行情况,但是在数据库中存储20万条数据,在读取运行时速度肯定会下降。其中遵循安全软件生命周期,在函数的选择上尽量选用安全的函数实现。在后面的项目开发中,我会不断积累经验,不断进步。
8.PSP展示
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间() |
---|---|---|---|
Planning | 计划 | 15 | 20 |
·Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 30 | 25 |
Development | 开发 | 1200 | 1440 |
·· Analysis | 需求分析 (包括学习新技术) | 60 | 80 |
·Design Spec | 生成设计文档 | 30 | 30 |
·Design Review | 设计复审 (和同事审核设计文档) | 0 | 0 |
·Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
·Design | 具体设计 | 300 | 360 |
·Coding | 具体编码 | 600 | 1000 |
·Code Review | 代码复审 | 60 | 180 |
·Test | 测试(自我测试,修改代码,提交修改) | 60 | 180 |
Reporting | 报告 | 60 | 100 |
··Test Report | 测试报告 | 50 | 40 |
·Size Measurement | 计算工作量 | 5 | 5 |
·Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 8 | 20 |
- 在此次项目实施中,通过psp时间规划与实际实施,我发现了自己的短板所在,本来因为自己编程能力不足,所以计划的开发时间较长,但还是没有在计划时间内完成,甚至超出了很多,这也是在为我自己之前没有学好买单。在具体设计过程中,因为逻辑不是很清晰,所以一次又一次推倒自己的设计,这部分也花费了很长时间。在今后的在项目设计过程中,我会不断学习,不断进步,争取弥补自己的不足之处。
任务3:完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中
已将项目源码提交到GitHub,并使用了commit功能