结对项目

这个作业属于哪个课程 软件工程2024
这个作业要求在哪里 结对项目
这个作业的目标 1.让学生熟悉一个项目进行的流程;
2.熟悉使用PSP表格记录设计和记录过程;
3.熟悉用git管理项目代码

Github链接:GitHub仓库


姓名:姚佳如

学号:3222004642


姓名:李慧娣

学号:3222004637


一、PSP表格

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

二、效能分析

优化性能:

  • srand((unsigned int)time(NULL)); 这行代码用于初始化随机数生成器。这样的初始化在每次循环中执行,可能会降低性能。将其移出循环可以提高性能。

  • 再循环中的操作比较多,如果可能的话,减少循环次数或优化循环内部的计算。

  • 优化文件写入操作,减少磁盘I/O次数或使用缓冲。

性能分析图如下:


三、设计实现

(一)完成的需求

1.使用 -n 参数控制生成题目的个数

2.使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围

3.生成的题目中计算过程不产生负数,即e1≥ e2

4.生成的题目中如果存在形如e1÷ e2的子表达式,那么其结果应是真分数

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

6.生成的题目存入执行程序的当前目录下的question.txt文件

7.真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2'3/8

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

9.程序应能支持一万道题目的生成

(二)设计

需求分析过后,我们认为项目大概可分为以下四个部分

  • 随机数,随机运算符号的获取

  • 四则运算题目的生成

  • 各四则运算题目的计算

  • 题目以及答案写入文件的操作

针对以上四个部分,我们设计了四个函数: int randomnum(int max)、 char randomchar()、 void writetofile (LinkList headpoint)、 void Awritetofile (LinkList headpoint) (关于题目生成以及计算在main函数中实现)

函数调用关系如下:

四、代码说明

  • 使用特定datatype元素类型。
typedef struct{  /* 元素类型*/
  int onenum;//算式的第一个数
  char fuhao;//算式的符号
  int twonum;//算式的第二个数
  
  int key;//答案(直接存放整数答案或作为真分数的整数部分) 
  char fenhao;//真分数的单引号
  int yushu;//分数的分子
  char chuhao;//分数的除号
  int chushu;//分数的分母
}DataType;
  • 以下为计算部分,包含随机数输入、区分符号、计算、存入datatype元素类型
        /*随机数输入*/
		r_num1 = randomnum(r);
		r_num2 = randomnum(r);
		r_sign = randomchar();
		
		if(r_sign == '-' ){//如果是减法
			if(r_num1 < r_num2){//如果结果为负数,调换算式前后两式的数字,避免结果出现负数
				int temp = r_num1;
				r_num1 = r_num2;
				r_num2 = temp;
			}
			daan.key = r_num1 - r_num2; //将结果存入元素结构,没有的设置为NULL,以下操作同样
			daan.fenhao = NULL;
				daan.yushu = NULL;
				daan.chuhao = NULL;
				daan.chushu = NULL;
		}
		else if(r_sign == '+')//如果是加法
		{
			daan.key = r_num1 + r_num2;
			daan.fenhao = NULL;
				daan.yushu = NULL;
				daan.chuhao = NULL;
				daan.chushu = NULL;
			
		}
		else if(r_sign == '*')//如果是乘法
		{
			daan.key = r_num1 * r_num2;
			daan.fenhao = NULL;
				daan.yushu = NULL;
				daan.chuhao = NULL;
				daan.chushu = NULL;
		}
		else if(r_sign == '/'){//如果是除法
			daan.key = r_num1 % r_num2;
			if(daan.key != 0){//如果结果有真分数,做特殊处理
				daan.key = r_num1 / r_num2;
				daan.fenhao = '\'';
				daan.yushu = r_num1 % r_num2;
				daan.chuhao = '/';
				daan.chushu = r_num2;
			}
		}
	

五、测试运行

测试运行结果如下:

以上结果的文件输出结果如下:

六、项目小结

通过这次结对项目,熟悉了进行合作项目的流程,与独立完成项目不同的是,合作时需要沟通和交流,合理的沟通可以促进项目的进行。曲解和冲突在交流中不可避免时,最重要的是,每个人在合作中保持冷静、客观和换位思考。同时在项目合作中还要做好代码规范、合理分工、积极应对。

posted @ 2024-03-26 01:38  lihuidi  阅读(23)  评论(0编辑  收藏  举报