项目 | 内容 |
---|---|
这个作业属于哪个课程 | https://www.cnblogs.com/nwnu-daizh/ |
这个作业的要求在哪里 | https://www.cnblogs.com/nwnu-daizh/p/12416880.html |
作业学习目标 | (1)掌握软件项目个人开发流程;(2)掌握Github发布软件项目的操作方法; |
这个作业在哪些方面帮助我实现学习目标 | (1)对软件项目个人开发流程的实践(2)相关知识的学习 |
项目的Github仓库链接 | https://github.com/wang-zhi-c-it/test1 |
实验内容及步骤:
任务1:陈述学生疫情每日上报子系统使用体验;
- 优点:
- 界面整洁,方便信息填写和收集
- 信息收集完善
- 缺点:
- 该系统为此次疫情所开发,可能由于开发时间短,并没有太多的调试,导致系统由于 填报人数过多进经常导致系统崩溃。
- 没有填报提醒,导致忘记填写
- 提交后无法查看和更改,如果填错没有挽救的办法
任务2:总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你自己心目中的西北师范大学学生疫情每日填报系统。
-
我选择第一类开发。
要求:有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序,支持查询某人在某一天的疫情情况,查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。
-
1. 软件开发背景介绍
2019年12月末,中国武汉发生新型冠状病毒(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.设计需求
- 可供防疫机构,学校等机构对所收集的信息进行相关查询
- 可以查询众多信息中具体到个人的全部信息
- 可以查询具体到那一天的全部录入信息
- 面对众多信息相关机构很多时候只需要查询患病人员的相关信息
-
3.功能实现
-
具体功能:
- 可查询个人的相关信息
- 可查询具体那一天的全部录入信息
- 可查询患病人员的全部信息
-
拓展功能:
- 为了美观和方便的查询采用GUI的设计界面
- 在查询的基础上增加了录入信息,更新信息,删除信息等功能,方便对录入信息进行修改
-
4.设计实现
1.程序设计:
- studentManagement
-是含有main()函数的一个类,该类主要包括可视化页面的整体实现 - studentadd
-是实现添加学生信息的一个类 - query
-是实现查询全部信息的一个类 - studentQuery
-是实现通过学号查询信息的一个类 - time
-是实现通过日期查询信息的一个类 - studenthot
-是实现查询所有患病人员信息的一个类 - studentUpdate
-是实现更新信息的一个类 - studentDelete
-是实现删除信息的一个类
2.数据库设计:
此次数据库我选用了MySql来实现数据库,创建如下表单
-
5.测试运行
运行程序进入主界面
录入信息查询
按学号查询
若没有查询信息则提示没有学生
按时间查询
查询患病人员全部信息
对于患病与未患病的人数生成柱状图
添加新的学生信息,重置后可继续添加
更新学生信息,在未更新数据时点击重置可恢复最初数据
删除学生信息,输入学号会显示你要删除的数据,并提示是否删除
-
6.代码展示
以下是查询全部患病信息并生成柱状图
public class StudentHot extends JPanel implements ActionListener {
Connection con; //与特定数据库的连接(会话)。
Statement sql; //用于执行静态 SQL 语句并返回它所生成结果的对象。
JButton b1,b2;//定义两个按钮
Object[] columns={"编号","姓名","学院","是否发热","是否在武汉","是否在湖北","近期是否到达武汉","近期是否到达湖北",
"是否与武汉人员接触","是否与湖北人员接触","时间"};//字段
Object[][] data=new Object[200][11];
JTable table;
JScrollPane sc;
ChartPanel frame1;
StudentHot(){
try{ //错误处理机制
Class.forName("com.mysql.jdbc.Driver"); //通过 Class.forName为数据库管理系统加载一个JDBC驱动程序。
}
catch(ClassNotFoundException e){} //如果加载驱动失败 控制台抛出异常
try{ //如果加载驱动成功, 调用驱动连接特定数据库
con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/text","root","123");
sql=con.createStatement(); //调取con成员方法获取Statement对象
}
catch(SQLException ee){}//异常处理块
setLayout(new BorderLayout());//布局为边框布局
JPanel p1=new JPanel();//定义一个面板的对象为p1
table = new JTable(data, columns);
table.setPreferredScrollableViewportSize(new Dimension(400, 300));
sc = new JScrollPane(table) {
public Dimension getPreferredSize() {
return new Dimension(1300, 400);//括号内参数,可以根据需要更改
}
};
p1.add(sc);
add(p1,"Center");
setSize(350,300);
setBackground(Color.pink);
b1=new JButton("查询全部");
b2=new JButton("生成柱状图");
//给两个按钮添加监视器
b1.addActionListener(this);
b2.addActionListener(this);
//将两个按钮添加到面板p1
p1.add(b1);
p1.add(b2);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b1){
try{insert();}
catch(SQLException ee){}
}else if(e.getSource()==b2){
JFrame frame=new JFrame("患病情况统计");
frame.setLayout(new GridLayout(2,2,10,10));
frame.add(new BarChart().getChartPanel()); //添加柱形图
frame.setBounds(0, 0, 600, 800);
frame.setVisible(true);
}
}
public void insert() throws SQLException{
int i,j;String num="是";
con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/text","root","123");
ResultSet rs = sql.executeQuery("SELECT* FROM message where hot_message= '"+ num +"'" );
i=0;
j=0;
while(rs.next()){
data[i][j++]=rs.getString("id");
data[i][j++]=rs.getString("name");
data[i][j++]=rs.getString("college");
data[i][j++]=rs.getString("hot_message");
data[i][j++]=rs.getString("where_wuhan");
data[i][j++]=rs.getString("where_hubei");
data[i][j++]=rs.getString("come_wuhan");
data[i][j++]=rs.getString("come_hubei");
data[i][j++]=rs.getString("touch_wuhan");
data[i][j++]=rs.getString("touch_wuhan");
data[i][j]=rs.getString("time");
i++;
j=0;
}
con.close();
}
}
-
7. 总结:
通过本次程序开发,对软件工程这门学科以及PSP个人软件开发过程有了进一步的了解,同时通过此次项目开发也是对自己独立编程的一种实践,也很清晰的认识到自身的编程功力的不足,也通过此次项目学习了新的知识如MySql数据库的使用,GitHub及GitBash的运用。自身能力的不足导致程序的功能也很简单,今后会加以完善。
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际需要的时间(min) |
---|---|---|---|
planning | 计划 | 20 | 30 |
Estimate | 估计这个需要多少时间,并规划大致工作步骤 | 15 | 20 |
Development | 开发 | 800 | 1000 |
Analysis | 需求分析(包括学习新技术) | 60 | 90 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 生成设计文档 | 0 | 0 |
Coding Standard | 代码规范 | 5 | 5 |
Design | 具有设计 | 100 | 120 |
Coding | 具体编码 | 600 | 700 |
Code Review | 代码复审 | 60 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 120 |
SizeMeasurement | 计算工作量 | 5 | 5 |
Postmortem&ProcessImprovementPlan | 事后总结,并提出过程改进计划 | 30 | 30 |
任务三:完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github账号的项目仓库中
仓库连接