项目 | 内容 |
---|---|
班级博客 | 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 |
- 通过本次项目开发,我发现了很多问题。在项目计划上有个很严重的问题就是由于自身开发经验不够,我们会很难估计自己的开发时间,而且往往估计时间与时间开发时间相差很大,这在真正的项目开发过程中是很可怕的。所以我们一定要尽早树立起时间意识和严格执行项目计划的决心,最重要的是要多训练。