C++程序设计报告
(一)需求和规格说明
问题描述:小学生测验面向小学 1~2 年级学生,随机选择两个整数和加减法形成
算式要求学生解答。
编程任务:
(1)电脑随机出 10 道题,每题 10 分,程序结束时显示学生得分;
(2)确保算式没有超出 1~2 年级的水平,只允许进行 50 以内的加减法,不允许
两数之和或之差超出 0~50 的范围,负数更是不允许的;
(3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新
输入,如果三次机会结束则输出正确答案;
(4)对于每道题,学生第一次输入正确答案得 10 分,第二次输入正确答案得 7
分,第三次输入正确答案得 5 分,否则不得分;
(5)总 成 绩 90 以 上 显 示 “ SMART ” ,80-90 显 示 “ GOOD ” , 70-80 显 示
“OK”,60-70 显示“PASS”,60 以下“TRYAGAIN
补充功能:
(6)用户登录
(7)输入异常处理
(二)设计
1.设计思想
首先编写了一个 Student 类,除了定义构造函数和析构函数外,我定义了
denglu()函数实现用户的登录,用户根据提示从键盘输入用户名和密码,程序将
用 户 输 入 的 用 户 名 和 密 码 与 user.txt 文 本 中 的 用 户 名 和 密 码 进 行 匹 配 ;
produce_subject()函数生成题目,使用 rand()产生随机数和随机加减号;Input()函
数实现用户输入答案及判断用户输入是否为数字,若用户输入数字则正常运行,
若用户输入非法字符,则提醒用户只能输入数字直至用户输入数字;judge_result()
函数判断用户输入的答案是否与正确答案相同,在此函数中实现三次判断,
total_Grade()函数输出成绩,根据成句,判断应输出的评语并输出。
2. 设计表示
(1) 类:
类名
成员类别
类型
成员名
描述
int
denglu()
用户登录(与文件中用户
名密码比对)
int
produce_subject()
随机生成题目
int
Input()
输入答案(判断输入是否
为数字)
void
judge_result()
判断答案是否与正确答案
相同
成员函数
void
totalGrade()
输出成绩和评语
int
grade
成绩
int
num1
第一个数
int
num2
第二个数
int
result
用户答案
int
true_result
正确答案
Student
成员数据
char
op
加减号
(2) 流程图:
3. 核心算法
首先在 main()主函数中定义一个 Student 类的对象 use,然后调用 use 对象的 denglu()函
数进入登录模块,系统提示用户输入用户名和密码,若输入错误,系统会给出相应提示,若
输入正确,再调用 use 对象的 judge_result()函数,设置一个 for 循环循环 10 次实现十个题目,
在 for 循环中调用 produce_subject()函数随机生成题目,srand()函数设置 rand()产
生随机数时的随机种子,当 srand()的参数值固定的时候,rand()获得的数也是固定的,所以
一般 srand 的参数用 time(NULL),因为系统的时间一直在变,所以 rand()获得的数,也就一
直在变,相当于是随机数了。只要用户或第三方不设置随机种子,那么在默认情况下随机种
子来自系统时钟,由于每次生成的题目都不一样,那就需要用到 srand(time(NULL))。
然后使用 rand()生成随机数和随机加减号。接着在 for 循环中再写一个 for 循环实现三次
判断。最后调用 use 对象的 total_Grade 函数输出用户获得分数和评语。此外程序中还设置
了一个 flag 标志判断是否再次测试。
(三)用户手册
1.输入用户名和密码
2.若登录成功,进入“小学生测试”;若登录失败,有两种情况:一是输入
的用户名不存在,二是输入的密码和用户名不匹配
3.屏幕显示第一题,用户输入答案。若答案正确则提示“回答正确”并提示得分,
进入下一题;若第一次回答错误,提示“回答错误,再试一次,你还有 2 次机
会”,若第二次回答错误,提示“回答错误,再试一次,你还有 1 次机会”,若
第三次回答错误,提示“回答错误,正确答案是**”,总共有三次机会,机会用
完本题结束,屏幕显示下一题。
4.十题回答完毕,显示“考试结束”
5.屏幕自动给出成绩。计分规则:学生第一次输入正确答案得 10 分,第二次输
入正确答案得 7 分,第三次输入正确答案得 5 分,否则不得分。
6.系统提示“再试一次请输入 1,退出请输入 0”,若要再次测试输入 1,若退出
输入 0。
注意:答案必须是数字,若输入其他则会提示“非法字符,请输入数字”。