201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

项目 内容
课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12416880.html
课程学习目标 (1)掌握软件项目个人开发流程;(2)掌握Github发布软件项目的操作方法。
实现目标 (1)熟悉了PSP2.1的流程;(2)运用工程思想开发软件系统;(3)使用GitHub上传并管理代码。
项目GitHub的仓库链接地址 https://github.com/hbc110/hbc110.github.io

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


  1. 需求分析:

      文件中保存了防疫信息,设计此系统目的就是为了查询信息,与其说是疫情上报系统,倒不如说是疫情查询系统,它的目的就在于查询,按某一天,某周,或者某月来使得数据可视化。

      使用python3编写代码,利用其中的json导出随机生成的文件,利用matplotlib模块画柱状图。

  2. 功能设计:

    • 基本功能

      1.实现按人,按周,按月的查找;

      2.统计数据画出柱状图。

    • 扩展功能

      1.由于疫情信息寻找难度较大,可以编码实现,并存储在文件中。

  3. 设计实现:

      由于代码是用python3编写的,系统功能图如下:

    201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

    主要函数图如下:

    201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

    showPerson函数:主要实现按编号,按姓名查找,由于逻辑较简单,用逻辑语句完成;

    showWeek函数:下辖五个子函数,分别实现数据在列表,字典中的查找,并画出柱状图;

    showMonth函数:与showWeek函数如出一辙,只是数据的处理方式中改动了相关数字而已;

      另外在程序中还用随机函数随机生成疫情信息(但是没有科学性),由于python程序的运行特点,将其写在了主函数中,并保存到.json文件中,但数据的操作还是在程序中不断地生成列表,然后组成一个庞大的数据列表,虽然将文件输出到了文件,但是数据查询操作还是编码实现的,数据操作都是在列表中完成的,其中没有用数据库的主要原因是python生成的.json文件导入数据库时有错,就直接用python擅长的操作进行了统计处理。

  4. 测试运行:

    • 按人物查询:

      按编号查询:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

      按姓名查询:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

    • 按周查询:

      查询全部周:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

      按职务查询:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

      按性别查询:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

      按省份查询:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

      按学院查询:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

    • 按月查询:

      查询全部月:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

      按职务查询:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

      按性别查询:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

      按省份查询:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

      按学院查询:

      201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

  5. 代码片段:

      全部代码已上传至GItHUb:
    201771030101-程保华 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

      以下是随机生成疫情数据并写入.json文件的代码:

    
    list_id = []
    
    list_Xing = ['赵','钱','孙','李','周','吴','郑','王','冯','陈','褚','卫','蒋','沈','韩','杨','朱','秦','尤','许','何','吕','施','张'
    ,'孔','曹','严','华','金','魏','陶','姜']
    list_Ming = ['零','一','二','三','四','五','六','七','八','九','十']
    list_personName= []
    
    list_Sex = ['M','W']
    list_personSex= []
    
    list_Work = ['T','S']
    list_personWork= []
    
    list_Address = ['北京市','天津市','重庆市','上海市','中国香港','中国澳门','中国*','*自治区','青海省','宁夏回族自治区','**自治区','吉林省','山西省','贵州省','福建省','江苏省','江西省','安徽省','湖南省','内蒙古自治区','海南省','云南省','河南省','河北省','广西壮族自治区','辽宁省','山东省','陕西省','黑龙江省','浙江省','四川省','甘肃省','广东省','湖北省']
    list_personAddress = []
    
    list_XueYuan = ['文学院','历史文化学院','教育学院','心理学院','马克思主义学院','社会发展与公共管理学院','法学院','经济学院','商学院','外国语学院','音乐学院','舞蹈学院','美术学院','体育学院','数学与统计学院','计算机科学与工程学院','物理与电子工程学院','化学与化工学院','生命科学学院','地理与环境科学学院','教育技术学院','传媒学院','旅游学院','国际文化交流学院','敦煌学院','哲学学院']
    list_personXueYuan = []
    
    list_TF = ['是','否']
    list_personGoWH = []
    
    ‘’‘确诊’‘’
    list_numbers = [0,1]
    list_personQZ = []
    
    list_finished = []
    
    for i in range(1,2001):
        list_id =list_id  + [i]
    
    for i in range(2000):
        name = random.choice(list_Xing)+random.choice(list_Ming)+random.choice(list_Ming)
        list_personName.append(name)
    
    for i in range(2000):
        sex = random.choice(list_Sex)
        list_personSex.append(sex)
    
    for i in range(2000):
        work = random.choice(list_Work)
        list_personWork.append(work)
    
    for i in range(2000):
        address = random.choice(list_Address)
        list_personAddress.append(address)
    
    for i in range(2000):
        xueyuan = random.choice(list_XueYuan)
        list_personXueYuan.append(xueyuan)
    
    for i in range(2000):
        gowh = random.choice(list_TF)
        list_personGoWH.append(gowh)
    
    for i in range(2000):
        list_personQZ.append([])
        for j in range(100):
            num = random.choice(list_numbers)
            list_personQZ[i].append(num)
    
    for i in range(len(list_personName)):
        tuple_temp = (list_id[i],list_personName[i],list_personSex[i],list_personWork[i],list_personAddress[i],list_personXueYuan[i],list_personGoWH[i],list_personQZ[i])
        list_finished.append(tuple_temp)
    
    
    
    filename = "numbers.json"
    with open(filename, 'w') as file_obj:
        json.dump(list_finished, file_obj)
    
    
  6. 总结:

  本次实验耗时比较长,但其中穿插了PSP过程,使得软件系统得到了有效的管理,主要是由于程序实现模块化主要是将程序段实现的功能放到一个函数中,使得测试维护和运行的效率大大的提高,在设计PSP过程与最终完成项目时比,实际花的时间比计划总是要多,这也充分反映了我个人的水平,主要还是做的太少,希望能在今后的软件工程课程的学习中得到较大的提升。

  1. 个人PSP:

PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 30 50
Estimate 估计这个任务需要多长时间 1500 1685
Development 开发 1200 1500
Analysis 需求分析(包括学习新技术) 30 50
Design Spec 生成设计文档 60 60
Design Review 设计复审(和同事审核设计文档) 20 30
Coding Standard 代码规范(为目前的开发指定合适的规范) 30 50
Design 具体设计 40 80
Coding 具体编码 1000 1200
Code Review 代码复审 5 10
Test 测试(自我测试,修改代码,提交修改) 20 20
Reporting 报告 300 185
Test Report 测试报告 170 120
Size Measurement 计算工作量 10 5
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 120 60