201771030111-刘维 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

项目 内容
班级博客 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
作业链接 https://www.cnblogs.com/nwnu-daizh/p/12416880.html
学习目标 了解并掌握软件工程的相关知识及其应用
作业目标 掌握软件项目个人开发流程
Github链接 https://github.com/Summer-Sy/Studys-space

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

1.需求分析

  • 有一个保存了2000名师生100天的数据文件
  • 命令行程序
  • 实现基本的查询功能
  • 统计数据可视化

2.功能设计(基本功能)

  • 根据ID查询某人在某一天的疫情信息
  • 按照名字查询某人在某一天的疫情信息
  • 查询某种数据的周月统计情况,并有柱状图显示

3.设计实现

  • 数据部分

数据使用mysql数据库存储,建立如下两张表保存信息,信息内容通过编写程序随机生成自动导入
basic表(保存了2000名师生的基本信息,设计工号、姓名、性别、职业和电话五个字段)

data表(保存了2月1日-3月1日的所有疫情信息,设计日期、工号、是否确诊、是否疑似、是否接触病例五个字段)

  • 程序部分
    由于是命令行程序,所以我选择用c语言实现,主要设计了下面两个函数:
    • main():主界面和查询逻辑
    • draw():用统计数据画图(在命令行里纯靠计算画图)

4.测试运行

  • 按照ID查找某人在某天的疫情信息
  • 按照姓名查找某人在某天的疫情信息
  • 查询某天的统计信息(柱状图)

5.关键代码


/*  绘图函数 
    在命令行内画柱状图实际上就是自上而下计算每一行应该出现的' '和'#"然后一行一行在指定的位置输出相应的字符
    很笨的办法,当然,也是我唯一想到能在命令行里显示柱状图的方法
*/
int* draw(int* stati,int count)    //stati指向要构成柱状图的数组,count存放数据个数
{
    int * pLimit = getLimit(stati,count);        //调用getLimit函数,计算数据最大值及最小值(实际上为-1)
    int min = pLimit[0]-1;
    int max = pLimit[1];
    printf("
");
    puts("^");
    printf("|
");

    for(int i=max+1;i>-100;i=i-100)            
    {
        if(i<=0)
        {
            printf("+");
            for(int j=0;j<15*count;j++)        //画横坐标
                printf("-");
            puts(">");
        }
        else
        {
            if(i>0)
            {
                printf("|");                    //画纵坐标
                for(int j=0;j<count;j++)        //画坐标内数据,#符占位
                {
                    if(stati[j]>=i)
                            printf("     ####     ");
                    else if(stati[j]+99 >= i-1)
                            printf("     %d      ",stati[j]);
                    else
                            printf("              ");
                }

                printf(" 
");
            }
        }
    }
    printf("
");
    printf("    确诊病例      疑似病例      接触病例");

}

6.总结

在本次项目过程中,我将主界面的函数、画图的函数和部分计算的函数分块编写,让软件层次比较分明,不至于很凌乱。我也在软件项目开发过程中发现了诸多问题,究其原因都是自身基础不够扎实,我也会在后面的学习生活中加强练习。

7.PSP展示

PSP 内容 计划共完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 20 10
· Estimate · 估计这个任务需要多少时间,并规划大致工作步骤 20 10
Development 开发 1268 1738
· Analysis · 需求分析 (包括学习新技术) 10 8
· Design Spec · 生成设计文档 8 10
· Design Review · 设计复审 (和同事审核设计文档) 0 0
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 40
· Design · 具体设计 100 120
· Coding · 具体编码 1000 1200
· Code Review · 代码复审 0 0
· Test · 测试(自我测试,修改代码,提交修改) 120 360
Reporting 报告 40 60
· Test Report · 测试报告 10 30
· Size Measurement · 计算工作量 10 20
· Postmortem & Process Improvement Plan · 事后总结 ,并提出过程改进计划 20 10
  • 通过本次项目开发,我发现了很多问题。在项目计划上有个很严重的问题就是由于自身开发经验不够,我们会很难估计自己的开发时间,而且往往估计时间与时间开发时间相差很大,这在真正的项目开发过程中是很可怕的。所以我们一定要尽早树立起时间意识和严格执行项目计划的决心,最重要的是要多训练。
原文地址:https://www.cnblogs.com/Summer-Sy/p/12520421.html