1、 1 课程设计报告课程设计报告 题目:题目:算术题测试程序算术题测试程序 学生姓名:学生姓名: 学学 号号:_ 班班 级:级: _ 指导教师:指导教师:_ _ _ 年年 月月 日日 2 一、需求分析说明 1、 设计目的 (1) 掌握栈的存储结构。 (2) 掌握栈基本操作的实现。 (3) 能引用栈解决相关的实际问题。 2、程序最终需要完成的具体功能 (1) 能随机出题,题数由用户输入确定,算术题包括加减乘除四则运算,表 达式项数应不限,可以包含括号; (2) 需要进行表达式的合法性验证; (3) 用户交互输入答案; (4) 计算机核对用户答案; (5) 能对用户的测试评分; (6) 实现多用户系
2、统,并对用户的用户名和得分保存到文件,此功能选作。 3、 设计要求 (1)要求用面向对象程序设计思想实现; (2)系统具有一定的容错性; (3)要求具有较好的交互性。 二、总体设计 1、该程序大致由两大部分构成。第一部分为界面部分,用来实现简单的人机交 互,控制程序的整体进程;第二部分为功能实现部分,用来实现各个功能模 块。 2、框图说明 三、详细设计 菜单界面 用户输入 题数由程 序产生随 机算式 程序对 表达式 合法性 检验 用户交 互输入 答案 计算机 核对用 户答案 程 序 保 存 用 户 信 息 到 文件 程序对 用户的 测试评 分 3 1、随机出题,题数由用户输入确定,算术题包括加
3、减乘除四则运算,表达式项 数不限,可以包含括号 设计一个表达式类 class ss,该类中包含了表达式(字符串型)产生函数 string randomExcs()、操作数获取函数 char getOd(bool preIsDiv)以及运算 符获取函数 char getOp(bool innerIsZero),其中表达式产生函数又用到了随 机数产生函数 rand()以实现随机产生的表达式项数不固定,括号是否出现以及 括号位置随机的功能。该功能用来实现待用户输入题数之后,程序立即随机产生 对应数量的表达式供用户测试。 2、表达式的合法性验证 此功能包含在上述表达式类当中,该类中包含的操作数和运算符
4、获取函数 char getOd(bool preIsDiv)、char getOp(bool innerIsZero)中分别用到了两 个 bool 型参数 bool preIsDiv 和 bool innerIsZero,当获取操作数时必须检验 该数之前是否有除号,当获取运算符时必须检验该符号之后是否是 0,另外该类 之外还定义了一个函数 double fune(string st)用来检验括号内的结果是否为 0。该功能用来保证随机出现的表达式必须是合法的。 3、用户交互输入答案 该功能在测试函数 void ceshi()部分实现,该函数当中定义了一个 double 型变量 double yo
5、uresult 当表达式显示在屏幕上等待用户输入答案时,用户便 可输入自己的答案(youresult)进行测试。 4、计算机核对用户答案 该功能也在测试函数 void ceshi()得到实现,该函数中定义了一个 double 型变量 double result 当用户输入答案(youresult)后,程序立即判断用户的 答案 (youresult) 是否等于表达式的正确结果 result。 如果相等则显示 “正确” , 否则显示“计算错误! ”并显示正确值。 5、对用户的测试评分 该功能仍依靠测试函数 void ceshi()实现,函数中定义一个计数变量 float num,并赋初值 0,每当
6、用户答对一道题便自加 1,最后循环结束时用 num 除以总 题数乘上 100 便得到用户的最终得分。测试结束后,系统会提示是否继续进行测 试,如果想继续输入题数就输入 y,否则输入 n 退出程序。 四、实现部分 class ss /表达式类的定义以及各成员函数的实现 public: string randomExcs(); char getOp(bool innerIsZero); char getOd(bool preIsDiv); ; 4 string ss:randomExcs() int n=(1+rand()%4)*2+1; string expression(n, ); int left,right; if(nn; for(int i=1;iyouresult; if (s.calc(result,p) if(youresult=result) cout“正确!“endl; num+; else cout“错误!正确答案为:“res