软件工程-结对项目作业

个人项目作业

项目合作者:

吴梓华3118005111 吴安冬3118005110

1.Github项目地址

https://github.com/Chi8wah/Calculate

2.实现程序前,预计开发时间

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30
· Estimate · 估计这个任务需要多少时间 30
Development 开发 2000
· Analysis · 需求分析 (包括学习新技术) 60
· Design Spec · 生成设计文档 10
· Design Review · 设计复审 (和同事审核设计文档) 0
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10
· Design · 具体设计 200
· Coding · 具体编码 1760
· Code Review · 代码复审 30
· Test · 测试(自我测试,修改代码,提交修改) 30
Reporting 报告 80
· Test Report · 测试报告 50
· Size Measurement · 计算工作量 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 20
合计 2110

3.思路

语言选择

通过观察原程序及需求,结合我们比较熟悉的语言,最终选择了C语言。

遇到的困难及解决思路

  • 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1− e2的子表达式,那么e1≥ e2

生成题目时检查e1,e2,若发现e1<=e2则重新生成题目

  • 每道题目中出现的运算符个数不超过3个

使用随机数控制运算符数量在1~3个

  • 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件

生成题目后将式子各部分立即传入求答案函数进行检查并计算

4.关键代码

  1. 生成题目
int question(int i,int ran)//生成题目
{
	FILE *fp;
    int get;
    int num,num1,num2,num3,num4;//运算数
    char sig1,sig2,sig3;//符号

    sig1=getSig();
    sig2=getSig();
    sig3=getSig();
    num1=random(ran);
    num2=random(ran);
    num3=random(ran);
    num4=random(ran);
    num=rand()%3+1;

    if(num==1)
    {
     	answers(i,num,num1,num2,num3,num4,sig1,sig2,sig3,ran);
     	fp=fopen("Exercises.txt","a+");
     	fprintf(fp,"题目%d:%d %c %d = \n",i,num1,sig1,num2);
     	fclose(fp);
	}
	if(num==2)
	{
     	answers(i,num,num1,num2,num3,num4,sig1,sig2,sig3,ran);
     	fp=fopen("Exercises.txt","a+");
     	fprintf(fp,"题目%d:%d %c %d %c %d = \n",i,num1,sig1,num2,sig2,num3);
     	fclose(fp);
    }
	if(num==3)
	{
     	answers(i,num,num1,num2,num3,num4,sig1,sig2,sig3,ran);
     	fp=fopen("Exercises.txt","a+");
     	fprintf(fp,"题目%d:%d %c %d %c %d %c %d = \n",i,num1,sig1,num2,sig2,num3,sig3,num4);
     	fclose(fp);
	}
	return 0;
}
  1. 辗转相除法
int gcd(int x,int y)//辗转相除法
{
    if(y==0) return x;
    return gcd(y,x%y);
}
  1. 获取行数
void CountLine(FILE *fp)
{
    int ltr=0,count=0;
    while(!feof(fp))
    {
        ltr=fgetc(fp);
        if(ltr=='\n')
            count++;
    }
    printf("共%d行\n",count);
}

5.测试运行


6.实际花费时间

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
· Estimate · 估计这个任务需要多少时间 30 30
Development 开发 2000 2100
· Analysis · 需求分析 (包括学习新技术) 60 60
· Design Spec · 生成设计文档 10 10
· Design Review · 设计复审 (和同事审核设计文档) 0 0
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
· Design · 具体设计 200 200
· Coding · 具体编码 1760 1860
· Code Review · 代码复审 30 30
· Test · 测试(自我测试,修改代码,提交修改) 30 30
Reporting 报告 80 80
· Test Report · 测试报告 50 50
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 20 20
合计 2110 2210

7.小结

  • 作为结对项目,一定要重视队友之间的沟通,虽然这次疫情原因不能面对面沟通,导致沟通时常出现没有及时回复的情况,但是总的来说还是较为顺利的。
  • 求答案的函数写得太过暴力,导致代码太长,可以进一步优化
  • 文件读写方面有时会出现bug,还需多加思考
  • 对队友的评价:思维活跃,积极沟通,勇于贡献
posted @ 2020-03-30 17:05  Chi8wah  阅读(118)  评论(0编辑  收藏  举报