zoukankan      html  css  js  c++  java
  • 软件工程-结对项目作业

    个人项目作业

    项目合作者:

    吴梓华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 = 
    ",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 = 
    ",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 = 
    ",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=='
    ')
                count++;
        }
        printf("共%d行
    ",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,还需多加思考
    • 对队友的评价:思维活跃,积极沟通,勇于贡献
  • 相关阅读:
    边工作边刷题:70天一遍leetcode: day 35
    边工作边刷题:70天一遍leetcode: day 36
    边工作边刷题:70天一遍leetcode: day 37-2
    边工作边刷题:70天一遍leetcode: day 37
    边工作边刷题:70天一遍leetcode: day 37-1
    边工作边刷题:70天一遍leetcode: day 38-2
    边工作边刷题:70天一遍leetcode: day 38-1
    边工作边刷题:70天一遍leetcode: day 38
    边工作边刷题:70天一遍leetcode: day 38-2
    边工作边刷题:70天一遍leetcode: day 38-1
  • 原文地址:https://www.cnblogs.com/chi8wah/p/12599690.html
Copyright © 2011-2022 走看看