项目 | 内容 |
---|---|
课程班级博客 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
作业要求 | https://www.cnblogs.com/nwnu-daizh/p/12416880.html |
课程学习目标 | (1)学习软件项目的个人开发流程(2)掌握GitHub的操作方法 |
本次在哪些方面帮助我实现学习目标 | 软件开发流程的方面和运用学习工具的方面 |
项目的Github仓库链接 | https://github.com/1171849616/test |
任务1:陈述学生疫情每日上报子系统使用体验
我觉得这个学生疫情每日上报子系统还行吧,一开始每次都要填写是挺麻烦的,后来改进了,可以记录前一天的内容,第二天可以在前一天的基础上修改或直接提交,变得方便许多。但是仍有不足,没有定时提醒的功能,很容易使人忘记填写。
任务2:总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。
1.需求分析:
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
2.功能设计
在以下两类开发要求选择一种完成项目开发任务:
第一类开发要求:
有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况, 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
第二类开发要求:
1. 系统可采集学生疫情有效信息;
2. 系统支持用户在线使用;
3. 每日只可填报一次,提交后无法修改,每日十点疫情信息填报截止;
4. 各学院指定负责人登录系统,可查看本学院学生填报的汇总数据,可点击查看学生联系方式、班主任联系方式,学院负责人核实本院所有学生数据后,将数据提交给学校防控办;
5. 学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有学生填报汇总数据清单,通过【导出】可获取疫情数据的EXCEL文件。
这里我选择了第一类开发
其基本功能有:1.支持查询某人在某一天的疫情情况
2.查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果
(具体可以查找以下信息:1.是否发热,2.是否为留校学生,3.是否在湖北,4.是否与湖北疫区人员接触,5.是否在武汉,6.是否与武汉疫区人员接触,7.今天从外地返校)
3.设计实现
Card类:
实现了对疫情信息中变量的定义
(包括名字,学号,是否发热,是否为留校学生,是否在湖北,是否与湖北疫区人员接触,是否在武汉,是否与武汉疫区人员接触,今天从外地返校)
主程序Cardtest:
1)该类中有实现各种功能的函数
(包括1.列出防疫信息,2.按时间查询,3.按姓名查询,4.按学号查询,5.按姓名,日期进行准确查询,6.按防疫信息查询,7.退出系统)
2)导入一个txt的数据文件,进行操作
3)导入jar包,调用java swing的方法,可实现生成柱状图 (参考自此博客)
4.测试运行
主界面:
可以导出可运行的jar文件,通过命令行可以运行
1.列出防疫信息
2.按时间查询
3.按姓名查询
4.按学号查询
5.按姓名,日期进行准确查询
6.按防疫信息查询
这里面的7个选择都是同一种原理,就以是否发烧为例演示。
7.退出
程序退出。
5.核心代码
// 导入疫情信息
cardlist = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
File file = new File("E:\疫情.txt");
int k;
String p, q;
try {
FileInputStream fis = new FileInputStream(file);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
String temp = null;
while ((temp = in.readLine()) != null) {
Scanner linescanner = new Scanner(temp);
linescanner.useDelimiter(" ");
String name = linescanner.next();
String id = linescanner.next();
String a = linescanner.next();
String b = linescanner.next();
String c = linescanner.next();
String d = linescanner.next();
String e = linescanner.next();
String f = linescanner.next();
String g = linescanner.next();
String time = linescanner.nextLine();
Card card = new Card();
card.setName(name);
card.setId(id);
card.setA(a);
card.setB(b);
card.setC(c);
card.setD(d);
card.setE(e);
card.setF(f);
card.setG(g);
card.setTime(time);
cardlist.add(card);
x = cardlist.size();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("信息文件找不到");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("信息文件读取错误");
e.printStackTrace();
}
// 系统主菜单
private static void show() {
// TODO 自动生成的方法存根
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.退出");
}
// 疫情信息
private static void title() {
// TODO 自动生成的方法存根
System.out.println("姓名 学号 有无发热 是否为留校学生 是否在湖北 是否与湖北疫区人员接触 是否在武汉 是否与武汉疫区人员接触 是否今天从外地返校 时间");
}
//疫情信息中变量定义
public class Card implements Comparable<Card> {
private String name;
private String id;
private String a, b, c, d, e, f, g;
private String time;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
public String getD() {
return d;
}
public void setD(String d) {
this.d = d;
}
public String getE() {
return e;
}
public void setE(String e) {
this.e = e;
}
public String getF() {
return f;
}
public void setF(String f) {
this.f = f;
}
public String getG() {
return g;
}
public void setG(String g) {
this.g = g;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String toString() {
return name + " " + id + " " + a + " " + b + " " + c + " " + d + " " + e + " " + f + " " + g + " "
+ time + "
";
}
@Override
public int compareTo(Card c) {
// TODO 自动生成的方法存根
return this.name.compareTo(c.getName());
}}
任务3:完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中。
已导入,具体方法参考了这篇博客
6.总结
我的程序分成两类(Cardtest类、Card类)来实现模块化原则。
7.展示PSP
PSP | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 6 |
Development | 开发 | 625 | 830 |
· Analysis | 需求分析 (包括学习新技术) | 15 | 10 |
· Design Spec | · 生成设计文档 | 5 | 5 |
· Design Review | · 设计复审 (和同事审核设计文档) | 0 | 0 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 5 | 5 |
· Design | · 具体设计 | 30 | 30 |
· Coding | · 具体编码 | 480 | 600 |
· Code Review | · 代码复审 | 60 | 120 |
· Test | · 测试(自我测试,修改代码,提交修改) | 30 | 60 |
Reporting | 报告 | 30 | 60 |
· Test Report | · 测试报告 | 5 | 5 |
· Size Measurement | · 计算工作量 | 5 | 5 |
· Postmortem & Process Improvement Plan | · 事后总结,并提出过程改进计划 | 5 | 5 |
总结:本来想连接数据库来做项目的,结果最近电脑大清理,不小心把Microsoft visual C++都删了,mysql都用不上了(┬_┬),只能退而求其次用txt代替数据文件来做了。