第一次作业

 需求分析:

1. 控制生成题目的个数
2. 控制题目中数值(自然数、真分数和真分数分母)的范围
3. 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数
4. 每道题目中出现的运算符个数不超过3个。
5. 程序一次运行生成的题目不能重复,生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下:
     1. 四则运算题目1
     2. 四则运算题目2
6. 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:
    1. 答案1
    2. 答案2
    特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。
7. 程序应能支持一万道题目的生成。
8. 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,并会输出所有题目中重复的题目,输入参数如下:
 统计结果输出到文件Grade.txt,格式如下: 
 Correct: 5 (1, 3, 5, 7, 9)
 Wrong: 5 (2, 4, 6, 8, 10)
 Repeat:2
 RepeatDetail:
 (1)   2,45+32  Repeat 3,32+45                    
 (2)   5,3+(2+1)  Repeat 7,1+2+3

 

功能设计:

1.在控制台输入题目的数量及生成数的范围

2.在文本中记录所有生成的题目

3.在文本中记录每道题对应的正确答案

4.把正确答案和做题者输入的答案进行对比,在文本中计算出正确和错误的题目数量并标记题号

 

设计实现:

Fraction:分数格式的结构体

MathMethod.cs:数学公式方法类,提供对应的计算方法

Fraction Add(Fraction f1, Fraction f2):分数的加法方法

Fraction Sub(Fraction f1, Fraction f2):分数的减法方法

Fraction Mul(Fraction f1, Fraction f2):分数的乘法方法

Fraction Div(Fraction f1, Fraction f2):分数的除法方法

Fraction Simplify(Fraction f):分数的化简方法

// 用最大公约数化简
public static Fraction Simplify(Fraction f)
{           
    int GCD;
    int temp, remain;
    Fraction store=f;
    if (f.deno < f.nume)
    {
        temp = f.deno;
        f.deno = f.nume;
        f.nume = temp;
    }
    while (f.nume != 0)
    {
        remain = f.deno % f.nume;
        f.deno = f.nume;
        f.nume = remain;
    }

    GCD = f.deno;
    store.deno = store.deno/GCD;
    store.nume = store.nume/GCD;
    return store;
}

 

测试运行:

控制台:

Exercises文件:

Answers文件:

Grade文件:

 

个人软件过程:

PSP2.1 Personal Software Process Stages Time Senior Student Time
Planning 计划 5 5
· Estimate 估计这个任务需要多少时间 650 360
Development 开发 300 180
· Analysis 需求分析 (包括学习新技术) 5 5
· Design Spec 生成设计文档 0 0
· Design Review 设计复审 10 10
· Coding Standard 代码规范 5 5
· Design 具体设计 10 20
· Coding 具体编码 300 150
· Code Review 代码复审 30 15
· Test 测试(自我测试,修改代码,提交修改) 30 90
Reporting 报告 30 40
· 测试报告 2 2
· 计算工作量 2 2
· 并提出过程改进计划 3 3

 

代码地址

https://git.coding.net/HangZhe/HomeWork1.git 

 

小结:

最近一些事情真的让我有点忙不过来,导致这次作业我花的时间其实很少,有一些功能没有实现,只是做了简单的两个操作数的整数和分数运算,后续会补齐。学到的东西还是有的,比如使用Split(char a)函数可以把一个字符串以字符a为分界线进行划分,划分的结果是一个字符串数组,每一小段都是一个数组元素,还有就是对C#的文件操作方面应用的更加熟练,对文件的写入要一次完成比较好,后面要加入的括号运算可以先在一个随机的运算数前面生成左括号,然后在这个运算数的后面再取一个随机的数前面加上右括号,对于括号的运算我的思路是使用上学期编译原理的知识转换为逆波兰式,查重应该使用栈来实现。

posted @ 2017-09-24 09:54  杭者  阅读(361)  评论(1编辑  收藏  举报