结对项目
结对项目
姓名 | 学号 | 项目地址 |
---|---|---|
卢铭 | 3122007933 | https://gitee.com/lipaya/paired-projects |
陈翼 | 3122006207 |
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13137 |
这个作业的目标 | 通过实践项目开发,初步了解合作开发的流程 |
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 35 | 40 |
Estimate | 估计这个任务需要多少时间 | 400 | 450 |
Development | 开发 | 300 | 330 |
Analysis | 需求分析 (包括学习新技术) | 60 | 60 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 | 10 | 10 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 30 |
Design | 具体设计 | 30 | 25 |
Coding | 具体编码 | 240 | 270 |
Code Review | 代码复审 | 20 | 20 |
Test | 测试(自我测试,修改代码,提交修改) | 40 | 40 |
Reporting | 报告 | 30 | 30 |
Test Repor | 测试报告 | 30 | 30 |
Size Measurement | 计算工作量 | 20 | 20 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 1340 | 1415 |
性能分析
在改进程序性能上花费了多少时间大约10分钟。
消耗最大函数:
如图。
设计
2个类:
- 分数类
- 表达式的类
3个函数:
- 化简分数的函数
- 读练习题,检查答案是否正确的函数
- 生成练习题和答案的函数
还有一个主函数,用来接受程序参数并调用相关功能。
代码说明
接下来展示主函数,主函数体现了程序的逻辑。
int main(int argc,char const* argv[]) {
if( argc < 3){
cout << "Using:main -e Exercises.txt -a Answers.txt -r 10 -n 100\n";
cout << "Byebye~\n";
return 0;
}
int num, limit=10;
int op = 0;
string output, outputAnswer;
for (int i = 1; i < argc-1; i++)
{
if (strcmp(argv[i], "-n") == 0)
{
num = stoi(argv[i + 1]); //题目个数
//cout << num << endl;
i++; continue;
}
else if (strcmp(argv[i], "-r") == 0)
{
limit = stoi(argv[i + 1]); //限定结果大小
//cout << limit << endl;
i++; continue;
}
else if (strcmp(argv[i], "-e") == 0)
{
output = argv[i + 1]; //输出题目文件
//cout << output << endl;
op = 1;
i++; continue;
}
else if (strcmp(argv[i], "-a") == 0)
{
outputAnswer = argv[i + 1]; //输出题目答案文件
//cout << outputAnswer << endl;
op = 1;
i++; continue;
}
}
clock_t time_start, time_end;
time_start = clock();
if (op)readCheck(output, outputAnswer);
else {
writeIn(num, limit);//写入
}
time_end = clock();
double time = (double)(time_end - time_start) / CLOCKS_PER_SEC;
cout << "count time:" << time * 1000 << "ms" << endl;
return 0;
}
思路:
这段代码是一个命令行程序的主函数
main
。它通过命令行参数解析用户输入的指令来执行相应的功能:
- 检查命令行参数数量:
- 如果参数数量小于3,程序输出使用说明,并返回 0,表示正常退出。
- 解析命令行参数:
- 通过循环遍历命令行参数,每次检查当前参数和下一个参数的组合,以判断用户指定了哪些选项。
- 如果当前参数是
-n
,则下一个参数是题目个数,使用stoi()
函数将其转换为整数,并将其赋值给num
变量。- 如果当前参数是
-r
,则下一个参数是结果大小限制,同样转换为整数并赋值给limit
变量。- 如果当前参数是
-e
,则下一个参数是输出题目文件名,将其赋值给output
变量,同时设置op
为 1,表示执行的是读取检查练习题的操作。- 如果当前参数是
-a
,则下一个参数是输出答案文件名,将其赋值给outputAnswer
变量,并同样设置op
为 1。- 记录程序运行时间:
- 在解析完所有参数后,记录程序开始运行的时间,使用
clock()
函数获取当前时钟时间,存储在time_start
变量中。- 如果
op
变量为真(即执行读取操作),则调用readCheck()
函数读取并检查题目和答案。- 否则,调用
writeIn()
函数,写入题目。- 再次调用
clock()
函数记录程序结束时的时钟时间,存储在time_end
变量中。- 计算程序运行时间:
- 计算程序运行时间,将结束时间减去开始时间,得到程序运行的时钟周期数,除以
CLOCKS_PER_SEC
得到秒数。- 将运行时间乘以 1000,得到以毫秒为单位的运行时间,输出到控制台。
- 返回 0:
- 返回 0 表示程序正常退出。
这段代码的核心逻辑是根据命令行参数来执行不同的操作,并记录程序的运行时间。
测试运行
命令行输入 四则运算.exe -n 100000 -r 100
即生成一百道题目,每个表达式表示数的范围是1-100。
生成的文件:
图一
图二
项目小结
在我们的结对项目中,我们成功开发了一个命令行工具,用于生成和检查数学练习题和答案。项目的成功得益于以下因素:
成功因素:
-
明确目标和任务分工: 我们在项目开始时明确了目标,并合理分工,确保高效协作。
-
良好沟通和合作: 我们保持了密切的沟通,及时解决问题,确保了项目顺利进行。
-
灵活应对变化: 我们能够灵活调整计划,应对需求变更和技术挑战。
教训和收获:
- 时间规划不足: 我们在项目开始时未充分评估任务复杂性,导致了一些进度延误。
- 技术难题: 在实现项目时,往往会出现某些知识技术不会使用,我们一边学新知识技术一边实践应用。
结对感受和建议:
我们合作融洽,共同克服困难,取得了不错的成绩。建议未来结对合作时要保持良好沟通,相互支持和尊重,共同学习和成长。通过这次合作,我们收获了宝贵的经验,也建立了深厚的合作关系。