201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

项目 内容
课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
这个作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12416880.html
我的课程学习目标 1、熟练博客操作
2、掌握软件项目个人开发流程
3、掌握Github发布软件项目的操作方法
这个作业在哪些方面帮助我实现学习目标 1、锻炼了我的动手能力,规范了我书写的代码
2、让我对软件项目个人开发流程有了简单的了解
3、熟悉了用Github发布软件项目的基本操作
项目Github的仓库链接地址 https://github.com/niulimei1/Test1

任务1:陈述学生疫情每日上报子系统使用体验

起初,该系统存在访问人数过多容易崩溃的情况,解决办法就是错开高峰期,当然系统性能之后也有改进,后来,我直接在晚上十二点过了填写,就不会出现系统崩溃的情况了,其次,最开始系统不能保存以前填过的信息,之后有了这个功能,很方便,节省了用户的时间,就是能不能宽限截止填报时间,如果解决了这个问题,相信系统还是很好用的。

##任务2:根据项目开发背景简介对第一类开发要求做出如下分析:

项目背景:

2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。

第一类开发要求:

有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况, 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。

一、需求分析

功能性需求分析

  • 用户需求:
    • 1、录入自己当天疫情信息
    • 2、查询自己某一天的疫情信息
  • 管理员需求:
    • 1、浏览所填报的用户疫情信息
    • 2、查询用户某一天的疫情信息
    • 3、查询某种数据的周统计情况(用柱状图显示统计结果)功能
    • 4、查询某种数据的月统计情况(用柱状图显示统计结果)功能

非功能性需求分析

  • 该系统要同时允许多个用户访问,这对系统性能要求非常高,同时要具有安全性和可维护性。

二、功能设计

基本功能:

  • 浏览功能:
    • 管理员可以浏览所有用户的疫情填报信息
  • 录入功能:
    • 录入的信息包括:对于用户,需要录入用户姓名、联系电话、职位、所在学院、所在班级、当前所在省、是否有疫情疑似症状(是/否)、是否处于隔离期(是/否)、填报时间等信息;由于每个人的联系电话都不一样,所以可由电话号码唯一确定用户,可不用输入学号等信息。要注意的是,用户只能录入自己当天的信息,一旦提交,便无法修改
  • 查询功能:
    • 用户可以通过电话号码,日期来查询自己某一天的信息,管理员通过电话号码,日期可以查询所填报用户的信息,以及各种数据的统计情况主要统计有疫情疑似症状和目前处于隔离期的用户信息这两个重要信息;当然,因为此系统不包含可能泄露身份的重要信息,如果用户知道他人的电话号码,也是可以查询到他人的疫情填报信息的。
  • 显示柱状统计图
    • 柱状图可以将数据直观化,方便查看。

扩展功能

考虑到一些用户由于手误会存在操作错误的情况,所以管理员还应该具有以下功能:
(1)修改用户某一天的疫情信息
(2)删除用户某一天的疫情信息

  • 修改功能:
    • 用户所填报的信息只能由管理员进行修改,如果用户信息填报错误,可以联系管理员对其信息进行修改,管理员输入联系电话、要修改的日期便可以修改。
  • 删除功能:
    • 用户所填报的信息只能由管理员进行删除,如果用户不具有本校学籍,管理员可对其信息进行删除,管理员输入联系电话、要删除的日期便可以删除。

考虑到大家都不能出门,一旦自己有一些普通感冒,去医院未必是最好的选择,为了及时解决这些问题,本系统还应该具有在线问诊功能

  • 在线问诊功能
    • 用户和管理员都可以使用在线问诊功能

三、设计实现

  • 主要的类有四个:包括Users,UsersAdmin,BarChart,BarChart1

  • 各个类负责的功能:

    • Users类负责存储一些用户属性,比如用户姓名、联系电话、职位、所在学院、所在班级、当前所在省、是否有疫情疑似症状(是/否)、是否处于隔离期(是/否)、填报时间等属性。
    • UsersAdmin类负责存放一些菜单以及实现基本功能和扩展功能的方法
    • BarChart  类负责统计随着时间推移,有疑似症状人数柱状图的实现
    • BarChart1类负责统计随着时间推移,被隔离人数柱状图的实现
  • 各个类之间的关系:

    • Users类为UsersAdmin类提供了变量,便可以在UsersAdmin类中的构造相应的方法,而功能的实现正是依靠这些方法,BarChart类和BarChart1类都是用来做柱状图的,两个类可以合并为一个,但是为了清楚,在这就写成了两个类。
  • 函数的设计,以及函数的逻辑关系:由于菜单是直接输出的,故没有设计菜单函数,其他几个函数如下所示:

    • show()//浏览
    • add()//录入
    • query()//查询
    • change()//修改
    • delete()//删除
    • statusMessage()//疑似
    • isolationMessage()//隔离
    • BarChart()//生成图表

四、测试运行

用户录入疫情信息:

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第1张图片

用户查询自己某一天疫情信息:

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第2张图片

退出用户界面这里默认返回首页:

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第3张图片

管理员浏览所填报的用户信息:

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第4张图片
201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第5张图片
201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第6张图片
201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第7张图片

这里假设只填报了4个人从2020.3.1日到2020.3.7日的疫情信息,详细的数据保存在data.txt文件中这里只给出截图如下:

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第8张图片

管理员查看某天某个用户信息:

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第9张图片

管理员修改某天某个用户信息:

修改后会显示出已修改的信息,可以和上图做对比,会发现,是否有疑似症状一栏以及将“否”改为了“是”

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第10张图片

管理员删除某天某个用户信息:

这里是假设在只录入了张二一个人的信息时,执行删除操作,删除后,查询不到张二的信息,默认返回首页

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第11张图片

管理员退出系统这里默认返回首页:

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第12张图片

有疫情疑似症状的用户信息

这里,我收集了4个人,从2020.3.1号到2020.3.7号总共28条数据,用来统计有疫情疑似症状的用户信息和被隔离的用户信息,详细的数据见github中的data.txt文档, 在这里,也统计了人数,但是会有相同人名重复计数的情况,而虽然是相同人名,但是统计日期不一样,所以感觉这个计数功能没有实际意义。

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第13张图片

被隔离用户的信息:

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第14张图片
201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第15张图片
201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第16张图片

查看柱状图:

这里,我收集了10个人,从2020.3.1号到2020.3.14号总共两周的数据统计,详细的数据见github中的data2.txt文档。

201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第17张图片
201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告_第18张图片

在线问诊功能问诊点这里

五、主要代码

	/* 查询某个用户某一天的疫情信息 */
	public static void query() {
		System.out.println("请输入要查询的学生联系电话:");
		String Usersnum = scanner.next();
		System.out.println("请输入要查询的日期:");
		String Usersdate = scanner.next();
		int i;
		for (i = 0; i < num; i++) {
			if (Usersnum.equals(Users[i].getNumber()) && Usersdate.equals(Users[i].getDate())) {
				System.out.println(
						"-----------------------------------------------------------------------------------------");
				System.out.println(
						"姓名             联系电话                      职位              学院         当前所在省      是否有疑似症状      是否处于隔离期                填报日期");
				System.out.println(Users[i].getName() + "\t" + Users[i].getNumber() + "\t" + Users[i].getPosition()
						+ "\t" + Users[i].getXueyuan() + "\t" + Users[i].getProvince() + "\t\t" + Users[i].getStatus()
						+ "\t" + Users[i].getIsolation() + "\t\t" + Users[i].getDate());
				System.out.println(
						"-----------------------------------------------------------------------------------------");
				System.out.println(" ");
				System.out.println(" ");
			}
			else {
				System.out.println("对不起查无此人");
			}
		}

	}

        /* 有疑似症状人员信息 */
	public static void statuMessage() {
		int i, j, num1 = 0;
		System.out.println("-----------------------------------------------------------------------------------------");
		System.out.println(
				"姓名             联系电话                      职位              学院         当前所在省      是否有疑似症状      是否处于隔离期                填报日期");
		System.out.println("-----------------------------------------------------------------------------------------");
		for (i = 0; i < num; i++) {
			if (Users[i].getStatus().equals("是")) {

				System.out.println(Users[i].getName() + "\t" + Users[i].getNumber() + "\t" + Users[i].getPosition()
						+ "\t" + Users[i].getXueyuan() + "\t" + Users[i].getProvince() + "\t\t" + Users[i].getStatus()
						+ "\t" + Users[i].getIsolation() + "\t\t" + Users[i].getDate());
			}
		}
	}

六、总结

程序如何实现软件设计的“模块化”原则?首先我们要知道模块化的含义,在《软件工程导论》中,是这样定义的:模块化就是把程序划分成独立命名而且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,而且可以完成指定的功能满足用户的需求而本系统,包括两个子系统,用户系统和管理员系统这两个系统模块是相互独立的,首先选择自己的身份,用户进入用户系统,执行相应的操作,管理员进入管理员系统,执行相应的操作,由于本系统没有用到数据库知识,所以本系统只能在运行一次时执行相应的操作,如果再次运行,之前录入的信息就会丢失,则需要重新录入,这也是本系统的一个缺陷,有待以后改进升级。

七、PSP

我在需求分析阶段所用的时间最多,主要用在学习新技术上面了,比如如何用java画出柱状图以及如何使用github提交项目等,在具体编码阶段实际预期完成时间和实际完成时间相差最大,因为最开始不知道应该使用哪一种语言来实现,犹豫了好久,最后选择了java,然而我比较熟悉的是C语言,对Java的语法等已经遗忘了,所以花费了大量的时间复习Java。

PSP2.1 任务内容 计划共完成需要的时间(小时)
Planning 计划 150
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 150
Development 开发 140
Analysis 需求分析 (包括学习新技术) 50
Design Spec 生成设计文档 10
Design Review 设计复审 (和同事审核设计文档) 0
Coding Standard 代码规范 (为目前的开发制定合适的规范) 10
Design 具体设计 10
Coding 具体编码 40
Code Review 代码复审 10
Test 测试(自我测试,修改代码,提交修改) 10
Reporting 报告 6
Test Report 测试报告 2
Size Measurement 计算工作量 2
Postmortem & Process Improvement Plan 事后总结 ,并提出过程改进计划 2

八、分享

       我在如何用Java如何生成柱状图以及如何在github上提交项目上面遇到了问题,通过同学的分享以及自己查找资料,找到了解决办法,如有需要,可以点击上面的链接。大量的数据如何获取也是一个难点,可以考虑使用爬虫,我这里使用的测试数据只有几百个,并没有上万条数据,可能系统性能和运行速度也不是很好,这也有待以后学习。

你可能感兴趣的:(201771030115-牛莉梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告)