当前位置: 首页 > news >正文

基于C++实现(控制台)小学算数自测系统

小学算数自测系统

1 引言

1.1 编制目的

本报告详细完成对小学算术自测系统的整体设计,达到指导开发的目的,同时实现和测试人员及用户的沟通。

本报告面向详细设计人员、开发人员、测试人员及最终用户而编写,是了解系统的导航。

1.2 词汇表

词汇名称

词汇含义

备注

comTest

综合测试

modifyPin

修改密码

manage

管理学生信息

1.3 参考资料

《C 语言大学教程(第八版)》

2 系统开发环境

操作系统:WindowsXP

集成开发工具:DevC++,CLion

编译环境:TDM-GCC4.9.264-bitRelease,MinGW

3 系统设计思路

为了实现学生的增删查改操作,我们将学生的信息定义为结构体并采用链表来进行储存,而对于老师这个结构体,由于我们知道老师的数目有限,所以我们采用结构体数组的方式来储存老师的数据。

为了实现登陆和注册功能,以此进一步实现对数据的保护,我们将学生和老师信息储存在文件当中,利用文件的存储和读取来更新和获得学生和老师的信息。

为了实现随机出题功能,我们调用了随机数来对这个部分进行实现。

为了更贴合小学生的算术现状,我们设置了错题本,利用每个学生的专属文件来对学生的错题进行存储,以便于学生复习和从小养成错题集习惯。

为了便于老师查看成绩,我们使用链表的排序实现了排行榜的功能,但考虑到对学生自身的保护,只有老师可以查看排行榜。

为了实现老师与学生的及时沟通和信息反馈,我们设置了评价模块,老师可以对学生进行评价,学生可在自己的端口查看老师对自己的评价。

为了最大化实现代码重用,我们前期进行了很多的讨论,将各个功能模块进行分析并将其拆分成小函数,以此来实现代码重用的功能。

为了获得更好的用户体验,我们自动处理了用户的不合法出入,防止出现大量的输入错误提示信息。

系统设计具体思路:

系统分为老师和学生两个端,均可实现登录,文件存取的功能,且均有一个主菜单。

学生主菜单可以选择基础测试,综合测试,游戏模式,小测,查看错题,查看成绩及评价和修改密码。每种测试类型对应专门的出题函数。测试错题或游戏记录保存到文件

老师菜单可以选择学生管理,排名查询和修改密码。在学生管理中可以选择增加,删除,查询和修改学生信息,给学生留评语。

如图 3-1 所示为系统设计思路图。

项目关键性技术:数组、指针、函数、结构体、单向链表

4 系统公用代码设计

4.1 登录函数:

4.1.1 功能描述

该功能目的在于保护用户的信息以及设置改系统的针对性,用户进入改系统以后,需要选择角色,如果老师选择了学生,或者学生选择了老师,会分别在输入了错误的账号密码和错误的密钥以后回到最初界面,学生只能进行登陆,老师可以进行登陆,也可以在输入密钥正确以后进行注册。为了避免老师学生角色选择,以及后期的选择错误,选择了在 login 函数里调用自己的方法,使其回到最初的界面。

流程图如图 4-1 所示:

4.1.2 函数方法描述 login 函数

返回值

方法名

功能

参数说明

int

login

实现用户登录和注册并用返回值说明是学生还是老师

无参数,返回值为 1,表示学生,返回值为 0,表示老师

4.1.2.1password 函数

返回值

方法名

功能

参数说明

char*

password

实现密码的隐形输入,每输入一个字符都用*代替,并实现了退格功能

无参数,返回表示密码的字符串

4.2 异常处理

4.2.1 功能说明

对用户输入的异常数据(包括数据类型错误,长度不符合,输入的数据范围不正确)进行处理

4.2.2 设计说明

如果用户输入的数据与系统要求的数据类型不符合,提示错误信息,并让用户重新输入。

如果用户输入的是字符串,会进行字符串长度的判断,如果字符串长度不在数据规范的范围内,将提示错误信息,并让用户重新输入。

如果输入的是数字,判断数字范围,如果数字不再规定的范围内,将会提示错误信息,并让用户重新输入。

5 功能模块设计

5.1 数据读取存储模块

5.1.1 功能说明

该部分实现对于学生、老师信息的保存和读取。保存时,将现有的学生和老师的结构体内容写到文件当中,读取时,则从文件中将老师,和学生的信息读取到结构体当中。

5.1.2 函数、方法设计
5.1.2.1readStudentFile 函数

该函数的功能:实现创建链表,从文件中将学生信息读取到链表当中的功能。

返回值

方法名

功能

参数说明

void

readStudentFile

创建链表,从文件中将学生信息读取到链表当中

将链表头指针付给 headStudent,以用于整个项目中的链表遍历

5.1.2.2readTeacherFile 函数

该函数的功能:实现从文件中将老师信息读取到文件当中的功能。

返回值

方法名

功能

参数说明

void

readTeacherFile

从文件中将老师信息读取到结构体数组当中

5.1.2.3saveStudentFile 函数

该函数的功能:实现从链表中的学生信息写到文件中的功能。

返回值

方法名

功能

参数说明

void

saveStudentFile

从链表中的学生信息写到文件中

用 headStudent,进行链表遍历来输出学生信息

5.1.2.4saveTeacherFile 函数

该函数的功能:实现从结构体数组中的老师信息写到文件中的功能。

返回值

方法名

功能

参数说明

void

saveTeacherFile

从链表中的老师信息写到文件中

遍历结构体数组 teachers 来输出学生信息

5.1.3 相关数据表

数据名称

headStudent

teachers

数据类型

structstudent*

structteacher[]

数据说明

用来记录学生链表的头指针

用于储存老师信息

5.2 加法自测模块

5.2.1 功能说明

用户首先选择自测模块,选择好了以后将进行难度选择,并进行题量的自定义,在做题过程中,如果正确,将会提示正确并进入下一题,如果错误会显示正确答案,并提醒用户是否要保存到错题集当中,在用户输入指令后进入下一题。

当答题结束时,会跳出结束界面,展示正确率和评价。

5.2.2 函数、方法设计
5.2.2.1plus 函数

该函数的功能:实现加法自测功能。

返回值

方法名

功能

参数说明

void

plus

实现难度选择、自定义题量,并调用 plusDemo 函数产生题目,对题目进行正误判断

plus、minus、multiply、divide 函数流程图如图 5-1 所示:

5.2.2.2plusDemo 函数

该函数的功能:产生加法运算式并判断答案是否正确,返回一个整数值说明正误

返回值

方法名

功能

参数说明

int

plusDemo

产生加法运算式并判断答案是否正确,返回一个整数值说明正误

由一个整形参数表示难易程度

plusDemo 函数流程图如图 5-2 所示:

5.2.2.3solution 函数

该函数的功能:对 plusDemo 函数的返回值进行处理,如果返回值表示正确,则输出提示答案正确,反之提示答案错误,输出正确答案,并提示用户将其保存到错题本中

返回值

方法名

功能

参数说明

void

solution

对答案正误判断的结果进行处理

接受 result 参数,为 1 表示正确,为 0 表示错误

solution 函数流程如图 5-3 所示:

5.2.2.4judge 函数

该函数的功能:对测试的成绩进行评价,用参数正确率,总题数和正确题数来进行判断,对于不同的正确率,输出不同的评价。

返回值

方法名

功能

参数说明

void

judge

对测试的成绩输出评价

需要一个小数来行的数据表示正确率,两个整形数据分别表示题目总量和正确的题目数量

5.2.3 相关数据表

数据名称

difficulty

number

answer

difficulty

数据类型

int

int

int/double

int

数据说明

用户输入整数:1 表示选择易,2 表示选择中,3 表示选择难

用户输入正整数自定义题量

用户输入答案

plusDemo 参数:1 表示易,2 表示中,3 表示难

数据名称

correct

num

right

Result

数据类型

double

int

int

int

数据说明

表示正确率

表示该次测试的题目总量

表示该次测试当中正确的题目数量

1 表示正确,0 表示错误

5.3 减法自测模块

5.3.1 功能说明

用户首先选择自测模块,选择好了以后将进行难度选择,并进行题量的自定义,在做题过程中,如果正确,将会提示正确并进入下一题,如果错误会显示正确答案,并提醒用户是否要保存到错题集当中,在用户输入指令后进入下一题。

当答题结束时,会跳出结束界面,展示正确率和评价。

5.3.2 函数、方法设计
5.3.2.1minus 函数

该函数的功能:实现减法自测功能。

返回值

方法名

功能

参数说明

void

minus

实现难度选择、自定义题量,并调用 minusDemo 函数产生题目,对题目进行正误判断

5.3.2.2minusDemo 函数

该函数的功能:产生减法运算式并判断答案是否正确,返回一个整数值说明正误

返回值

方法名

功能

参数说明

int

miusDemo

产生减法运算式并判断答案是否正确,返回一个整数值说明正误

由一个整形参数表示难易程度

minusDemo 函数流程图如图 5-2 所示:

5.3.2.3solution 函数

该函数的功能:对 minusDemo 函数的返回值进行处理,如果返回值表示正确,则输出提示答案正确,反之提示答案错误,输出正确答案,并提示用户将其保存到错题本中

返回值

方法名

功能

参数说明

void

solution

对答案正误判断的结果进行处理

接受 result 参数,为 1 表示正确,为 0 表示错误

solution 函数流程如图 5-3 所示。

5.3.2.4judge 函数

该函数的功能:对测试的成绩进行评价,用参数正确率,总题数和正确题数来进行判断,对于不同的正确率,输出不同的评价。

返回值

方法名

功能

参数说明

void

judge

对测试的成绩输出评价

需要一个小数来行的数据表示正确率,两个整形数据分别表示题目总量和正确的题目数量

5.3.3 相关数据表

数据名称

difficulty

number

answer

difficulty

数据类型

int

int

int/double

int

数据说明

用户输入整数:1 表示选择易,2 表示选择中,3 表示选择难

用户输入正整数自定义题量

用户输入答案

minusDemo 参数:1 表示易,2 表示中,3 表示难

数据名称

correct

num

right

Result

数据类型

double

int

int

int

数据说明

表示正确率

表示该次测试的题目总量

表示该次测试当中正确的题目数量

1 表示正确,0 表示错误

5.4 乘法自测模块

5.4.1 功能说明

用户首先选择自测模块,选择好了以后将进行难度选择,并进行题量的自定义,在做题过程中,如果正确,将会提示正确并进入下一题,如果错误会显示正确答案,并提醒用户是否要保存到错题集当中,在用户输入指令后进入下一题。

当答题结束时,会跳出结束界面,展示正确率和评价。

5.4.2 函数、方法设计
5.4.2.1multiply 函数

该函数的功能:实现乘法自测功能。

返回值

方法名

功能

参数说明

void

multiply

实现难度选择、自定义题量,并调用 multiplyDemo 函数产生题目,对题目进行正误判断

5.4.2.2multiplyDemo 函数

该函数的功能:函数接受用户输入的困难度参数后,生成对应难度的乘法题目,打印给用户,用户输入答案后,判断正误,并给出返回值传到 divide 函数中。

返回值

方法名

功能

参数说明

int

multiplyDemo

产生乘法运算式并判断答案是否正确,返回一个整数值说明正误

由一个整形参数表示难易程度

multiplyDemo 函数流程图如图 5-2 所示:

5.4.3 相关数据表

数据名称

difficulty

number

answer

difficulty

multiplyDemo 返回值

数据类型

int

int

int/double

int

int

数据说明

用户输入整数:1 表示选择易,2 表示选择中,3 表示选择难

用户输入正整数自定义题量

用户输入答案

multiplyDemo 参数:1 表示易,2 表示中,3 表示难

1 表示正确,0 表示错误

5.4.3.1solution 函数

该函数的功能:对 multiplyDemo 函数的返回值进行处理,如果返回值表示正确,则输出提示答案正确,反之提示答案错误,输出正确答案,并提示用户将其保存到错题本中

返回值

方法名

功能

参数说明

void

solution

对答案正误判断的结果进行处理

接受 result 参数,为 1 表示正确,为 0 表示错误

solution 函数流程如图 5-3 所示。

5.4.3.2judge 函数

该函数的功能:对测试的成绩进行评价,用参数正确率,总题数和正确题数来进行判断,对于不同的正确率,输出不同的评价。

返回值

方法名

功能

参数说明

void

judge

对测试的成绩输出评价

需要一个小数来行的数据表示正确率,两个整形数据分别表示题目总量和正确的题目数量

5.4.4 相关数据表

数据名称

difficulty

number

answer

difficulty

数据类型

int

int

int/double

int

数据说明

用户输入整数:1 表示选择易,2 表示选择中,3 表示选择难

用户输入正整数自定义题量

用户输入答案

multiplyDemo 参数:1 表示易,2 表示中,3 表示难(小数),4 表示难(分数)

数据名称

correct

num

right

Result

数据类型

double

int

int

int

数据说明

表示正确率

表示该次测试的题目总量

表示该次测试当中正确的题目数量

1 表示正确,0 表示错误

5.5 除法自测模块

5.5.1 功能说明

用户首先选择自测模块,选择好了以后将进行难度选择,并进行题量的自定义,在做题过程中,如果正确,将会提示正确并进入下一题,如果错误会显示正确答案,并提醒用户是否要保存到错题集当中,在用户输入指令后进入下一题。

当答题结束时,会跳出结束界面,展示正确率和评价。

5.5.2 函数、方法设计
5.5.2.1divide 函数

该函数的功能:实现除法自测功能。

返回值

方法名

功能

参数说明

void

divide

实现难度选择、自定义题量,并调用 divideDemo 函数产生题目,对题目进行正误判断

5.5.2.2divideDemo 函数

该函数的功能:函数接受用户输入的困难度参数后,生成对应难度的乘法题目,打印给用户,用户输入答案后,判断正误,并给出返回值传到 divide 函数中。

返回值

方法名

功能

参数说明

int

divideDemo

产生除法运算式并判断答案是否正确,返回一个整数值说明正误

由一个整形参数表示难易程度

divideDemo 函数流程图如图 5-2 所示:

5.5.3 相关数据表

数据名称

difficulty

number

answer

difficulty

divideDemo 返回值

数据类型

int

int

int/double

int

int

数据说明

用户输入整数:1 表示选择易,2 表示选择中,3 表示选择难

用户输入正整数自定义题量

用户输入答案

divideDemo 参数:1 表示易,2 表示中,3 表示难

1 表示正确,0 表示错误

5.5.3.1solution 函数

该函数的功能:对 divideDemo 函数的返回值进行处理,如果返回值表示正确,则输出提示答案正确,反之提示答案错误,输出正确答案,并提示用户将其保存到错题本中

返回值

方法名

功能

参数说明

void

solution

对答案正误判断的结果进行处理

接受 result 参数,为 1 表示正确,为 0 表示错误

solution 函数流程如图 5-3 所示。

5.5.3.2judge 函数

该函数的功能:对测试的成绩进行评价,用参数正确率,总题数和正确题数来进行判断,对于不同的正确率,输出不同的评价。

返回值

方法名

功能

参数说明

void

judge

对测试的成绩输出评价

需要一个小数来行的数据表示正确率,两个整形数据分别表示题目总量和正确的题目数量

5.5.4 相关数据表

数据名称

difficulty

number

answer

difficulty

数据类型

int

int

int/double

int

数据说明

用户输入整数:1 表示选择易,2 表示选择中,3 表示选择难

用户输入正整数自定义题量

用户输入答案

divideDemo 参数:1 表示易,2 表示中,3 表示难(小数).4 表示难(分数)

数据名称

correct

num

right

Result

数据类型

double

int

int

int

数据说明

表示正确率

表示该次测试的题目总量

表示该次测试当中正确的题目数量

1 表示正确,0 表示错误

5.6 学生菜单模块

5.6.1 功能说明

用户以学生身份登录后可以通过此菜单模块使用各项功能操作。主菜单由 menuS 函数打印,读入 1 调用 menuS_base 函数打印基础测试菜单,进行加减乘除或返回操作,读入 2 进行综合自测,读入 3 进入游戏模式,读入 4 调用 menuS_inquiry 函数,打印查询菜单,查看各种个人信息,。

5.6.2 函数、方法设计

menuS,menuS_base,menuS_inquiry 函数的流程图 5-6 如图所示

5.6.2.1menuS 函数

该函数的功能:显示给学生选择各项功能的菜单。读入用户的选择序号,调用对应的函数。

返回值

方法名

功能

参数说明

void

menuS

显示学生功能菜单

5.6.2.2 相关数据表

数据名称

choice

数据类型

int

数据说明

用户输入整数:1 表示基础测试,2 表示综合测试,3 表示游戏模式,4 表示小测,5 表示查询,0 表示退出系统。

5.6.2.3menuS_base 函数

该函数的功能:显示给学生选择基础测试功能的菜单。读入用户的选择序号,调用对应的函数,读入 1 进行加法自测,读入 2 进行减法自测,读入 3 进行乘法自测,读入 4 进行除法自测,读入 0 返回主菜单。

返回值

方法名

功能

参数说明

void

menuS_base

显示学生基础测试功能菜单

5.6.2.4 相关数据表

数据名称

choice

数据类型

int

数据说明

用户输入整数:1 表示加法自测,2 表示减法测试,3 表示乘法自测,4 表示除法自测,0 表示返回主菜单。

5.6.2.5menuS_inquiry 函数

该函数的功能:显示给学生选择查询功能的菜单。读入用户的选择序号,调用对应的函数

5.6.2.6

返回值

方法名

功能

参数说明

void

menuS_inquiry

显示学生查询功能菜单

5.6.3 相关数据表

数据名称

choice

数据类型

int

数据说明

用户输入整数:1 表示查看错题集,2 表示查看成绩记录,3 表示查看老师评语 0 表示返回主菜单。

5.7 老师菜单模块

5.7.1 功能说明

用户以老师身份登录后可以通过此菜单模块使用各项功能操作

5.7.2 函数、方法设计

menuT,menuT_manage 函数的流程图 5-7 如图所示

5.7.2.1menuT 函数

该函数的功能:显示给老师选择功能的菜单。读入用户的选择序号,调用对应的函数

5.7.2.2

返回值

方法名

功能

参数说明

void

menuT

显示老师功能菜单

5.7.2.3 相关数据表

数据名称

choice

数据类型

int

数据说明

用户输入整数:1 表示查看学生排名,2 表示管理学生信息,3 表示添加评语,4 表示修改密码,0 表示退出系统。

5.7.2.4menuT_manage 函数

该函数的功能:显示给老师选择管理学生信息功能的菜单。读入用户的选择序号,调用对应的函数

5.7.2.5

返回值

方法名

功能

参数说明

void

menuT_manage

显示老师管理学生信息功能菜单

5.7.2.6 相关数据表

数据名称

choice

数据类型

int

数据说明

用户输入整数:1 表示添加学生,2 表示移除学生,3 表示修改学生信息,4 查询学生信息,0 表示返回主菜单。

5.7.2.7addStudent 函数

该函数的功能:老师选择添加注册学生到班级文件。

进入函数,老师输入想要添加的学生 id,若该 id 对应的学生已经存在,则给出提示信息,等待用户下一步指令,添加学生成功后,提醒用户继续添加或者返回上级菜单,最终退出函数。

返回值

方法名

功能

参数说明

pHead

addStudent

老师添加学生进入班级名单,该学生可以登录使用系统

pHead

addStudent 函数流程图如图 5-8 所示

5.7.2.8 相关数据表

数据名称

id

fp

pHead

数据类型

char[]

FILE*

Structstudent*

数据说明

老师通过新增学生 id,将学生加入班级名单,同时在链表中用来记录该学生信息的结构体链表节点

用于指向班级名单对应的文件

结构体头指针,用来遍历使用学生链表

5.7.2.9deleteStudent 函数

该函数的功能:老师选择移除注销学生。进入函数,老师输入想要移除的学生 id,若该 id 对应的学生不存在,则给出提示信息,等待用户下一步指令,移除学生成功后,提醒用户继续添加或者返回上级菜单,最终退出函数。

返回值

方法名

功能

参数说明

pHead

deleteStudent

老师删除班级名单内的某个学生

pHead

deleteStudent 函数流程图如图 5-9 所示

5.7.2.10 相关数据表

数据名称

id

fp

pHead

数据类型

char[]

FILE*

Structstudent*

数据说明

老师通过输入学生 id,将该学生移除班级名单,同时在链表中该学生的结构体链表节点被删除,该学生不能再使用本系统

用于指向班级名单对应的文件

结构体头指针,用来遍历使用学生链表

5.7.2.11modifyStudent 函数

该函数的功能:老师选择修改某个学生的信息。进入函数,老师输入想要修改的学生 id,若该 id 对应的学生不存在,则给出提示信息,等待用户下一步指令,让用户输入要修改的具体信息,确认是否修改,修改成功后,提醒用户继续修改或者返回上级菜单,最终退出函数。

返回值

方法名

功能

参数说明

pHead

modifyStudent

老师修改某个学生的基本信息

pHead

modifyStudent 函数流程图如图 5-10 所示

5.7.2.12 相关数据表

数据名称

id

fp

pHead

数据类型

char[]

FILE*

Structstudent*

数据说明

老师通过输入学生 id,从而修改该学生的基本信息。

用于指向班级名单对应的文件

结构体头指针,用来遍历使用学生链表

5.7.2.13checkStudent 函数

该函数的功能:老师选择查询具体学生的信息。进入函数,老师输入想要查看信息的学生 id,若该 id 对应的学生不存在,则给出提示信息,等待用户下一步指令,查看学生成功后,提醒用户继续添加或者返回上级菜单,最终退出函数。

返回值

方法名

功能

参数说明

pHead

checkStudent

老师查询某个学生的基本信息

pHead

checkStudent 函数流程图如图 5-11 所示

5.7.2.14 相关数据表

数据名称

id

fp

pHead

数据类型

char[]

FILE*

Structstudent*

数据说明

老师通过输入学生 id,从而查看该学生的基本信息。

用于指向班级名单对应的文件

结构体头指针,用来遍历使用学生链表

5.8 成绩查询

5.8.1 功能说明

该部分分为学生查询自己成绩与老师查询排名后的学生成绩两个部分。

该系统主要面向学生与老师,而成绩对学生与老师都有着重要的意义,学生可以通过成绩调整自己的学习,老师可以通过查看学生成绩来调整教学,因此需要一个成绩查询的功能。

学生登录后,可以选择查看自己的成绩,系统将该学生的信息打印出来即可。

老师登录后,可以选择查看排名及成绩,系统先将学生成绩进行排序,然后按顺序输出学生的名次,姓名,学号及成绩

5.8.2 函数设计

实现该功能模块主要涉及学生查看自己成绩函数与老师查看学生成绩及排名函数,如图 5-12 所示

5.8.2.1 学生查看自己成绩功能:学生登录后,实现学生查看自己的成绩的功能。

返回值

方法名

功能

参数说明

void

viewGrade

学生查看自己的成绩

该函数不接收参数

5.8.2.2 老师查看学生成绩及排名功能:老师登录后,实现老师查看学生成绩及排名的功能。

返回值

函数名

功能

参数说明

void

rank

老师查看学生成绩及排名

该函数不接收参数

5.8.2.3 数组排序函数功能:实现对数组排序

返回值

函数名

功能

参数说明

void

sortForArray

实现对数组排序

doublea[]待排序的数组,intn 这个数组的元素个数

5.8.2.4 统计学生人数函数功能:实现统计链表中学生总人数

返回值

函数名

功能

参数说明

Int 型变量,代表学生总数

sumOfStu

统计链表中学生总人数

该函数不接收参数

5.8.2.5 打印学生信息函数功能:实现根据分数打印该分数学生的信息功能

返回值

函数名

功能

参数说明

void

printNameAndId

根据分数打印该分数学生的信息,如姓名,学号,成绩等

doublen,n 代表分数

5.8.3 相关数据表

数据名称

scores

testGrade

SumNumberForStu

数据类型

double[]

double

int

数据说明

学生成绩数组

小测平均成绩

学生的总人数

数据名称

chioce

数据类型

int

数据说明

用户输入选择,为 1 时退出该功能

5.9 学生评价

5.9.1 功能说明

该部分分为学生查看老师对自己的评价与老师对学生评价两个部分。

该系统主要面向学生与老师,而评价对学生有较大的意义,学生可以通过老师对自己的评价调整自己的学习,因此需要一个评价的功能。

学生登录后,可以选择查看老师对自己的评价,系统将该学生的老师对他的评价打印出来即可。

老师登录后,可以选择对某位同学评价,评价完后系统将保存评价

5.9.2 函数、方法设计

实现该功能模块涉及老师评价函数与学生查看老师评价函数,如图 5-13 所示

5.9.2.1 老师评价功能:允许老师对指定学生进行评价。

返回值

函数名

功能

参数说明

void

evaluate

允许老师对指定学生进行评价

该函数不接收参数

5.9.2.2 学生查看评价功能:允许学生查看老师对自己的评价。

返回值

函数名

功能

参数说明

void

evaluation

允许学生查看评价

该函数不接收参数

5.9.3 相关数据表

数据名称

review

comment

数据类型

char[]

char[]

数据说明

存储老师新的评价

学生结构体中老师的评价

5.10 休息模块

5.10.1 功能说明

该功能主要面向学生,劳逸结合有助于提高学生的效率,而学生一般不知道自己学习了的时间,因此需要一提醒学生休息的功能。

学生进入加减乘除练习模块后,加减乘除各模块分别都在开始时创建一个新的线程来计时,每隔一定的时间,提醒学生休息,并显示学生累计学习时间。

5.10.2 函数设计

实现该功能模块涉及计时函数与多线程的使用,计时函数完成时,系统提示休息,如图 5-14 所示

5.10.2.1 计时函数该函数的功能:根据参数值确定计时时间并每隔一定时间提醒学生休息。

返回值

函数名

功能

参数说明

void*

timer

根据参数值确定计时时间并每隔一定时间提醒学生休息

void*a,a 所指的值为计时时间

5.10.3 相关数据表

数据名称

startTime

endTime

n

数据类型

double

double

int*

数据说明

记录开始时挂钟时间

记录结束时挂钟时间

n 所指向的数为计时时间

5.11 错题集

5.11.1 功能说明

该功能主要面向学生,学生再次做自己做过得错题会很大程度提高学生的学习效率,因此需要保存学生错题的功能并允许学生查看自己的错题的功能。

当学生允许保存错题时,保存错题功能将学生的错题题干与答案均保存到该学生的错题本中去。

当学生登录后,选择查看错题功能,系统将读取该学生的错题本并将所有错题打印出来。

5.11.2 函数设计

实现该功能模块涉及错题保存函数,查看错题函数,如图 5-15 所示

5.11.2.1 保存错题该函数的功能:保存错题到该学生的错题本上。

返回值

函数名

功能

参数说明

void

addMistake

保存错题到该学生的错题本上

charx[20]该参数为学生做错的题目与答案

5.11.2.2 查看错题该函数的功能:学生可以查看他的错题。

返回值

函数名

功能

参数说明

void

printMistake

学生可以查看他的所有错题

该函数不接收参数

5.11.3 相关数据表

数据名称

strOfMistake

mistakeFileName

fout

fin

strings

size

数据类型

char*

char*

FILE*

FILE*

char[][]

int

数据说明

学生做错的题目

该学生错题本文件的地址

该学生文件指针

该学生文件指针

储存该学生的所有错题

统计错题量

5.12 综合自测模块

5.12.1 功能说明

学生首先选择综合自测模式,提示输入自定义题量,若输入为正整数,则调用出题函数 comTestdemo 按题量出题,否则提示重新输入。在做题过程中,如果正确,将会提示正确并进入下一题,如果错误会显示正确答案,并提醒用户是否要保存到错题集当中,在用户输入指令后进入下一题。

当答题结束时,会跳出结束界面,调用 judge 函数展示正确率和评价。

5.12.2 函数、方法设计

comTest 函数

该函数的功能:学生进行综合自测,并选择是否保存错题,是将结果更新至学生错题文件中并返回菜单,否则直接返回菜单。。

返回值

方法名

功能

参数说明

void

comTest

学生进行综合自测,将结果更新至学生信息

(void)无形参

comTestDemo 函数

该函数的功能:综合测试的出题函数

返回值

方法名

功能

参数说明

int

comTestDemo

综合自测的出题函数

(intpart,intdifficulty,)part,diffculty 为两个随机数,随机决定测试部分和难度。part 为 1-5,diffculty 为 1-3

comTest,comTestDemo 函数流程图如图 5-16 所示:

5.11.3.1 相关数据表

数据名称

flag

number

difficulty

part

数据类型

int

int

int

int

数据说明

0 代表错误,1 代表正确

学生输入定义的题量

作为 1-3 的随机数标记出题难度

作为 1-5 的随机数编辑测试的部分

5.13 游戏模块

5.13.1 功能说明

学生首先选择游戏模式,然后选择无尽模式或闯关模式,无尽模式系统循环出题,直到答错一道题后失败,打印游戏结果,错题信息并选择保存到错题本。游戏成绩若超过历史记录,则更新记录。

5.13.2 函数、方法设计

game 函数

该函数的功能:学生进行算数游戏,分为无尽模式和闯关模式。

返回值

方法名

功能

参数说明

void

game

学生进行算数游戏,分为无尽模式和闯关模式

Void(无参数)

game 函数流程图如图 5-17 所示:

5.13.2.1 数据表

数据名称

gameNume

gameLevel

gameNum

flag

数据类型

int

int

int

int

数据说明

学生在无尽模式中最高答题数

闯过的关卡数

出错为止正确的题目数

记录题目正误,0-错,1-对

5.14 小测模块

5.14.1 功能说明

学生选择的小测模块,调用 comTestDemo 函数出 20 题,全部作答后给出评价请选择是否保存错题,最后将小测成绩上传。

5.14.2 函数、方法设计
test 函数

test 函数流程图如图 5-18 所示:

该函数的功能:学生进行加减乘除综合小测,小测成绩作为排名依据。

返回值

方法名

功能

参数说明

void

test

学生进行加减乘除综合小测,小测成绩作为排名依据。

(Student*p)为学生所在链表的头指针

5.14.3 相关数据表

数据名称

starTime

endTime

flag

数据类型

double

double

int

数据说明

小测开始时的时间

计算结束的时间

记录题目正误,0-错,1-对

6 数据结构设计

6.1 功能说明

学生结构体储存学生相关基本信息及成绩等,采用链表实现对学生的增删查改

老师结构体则主要储存老师基本信息。

6.2 数据表设计

6.2.1 表名:学生结构体数据表

字段名

函数型

可为空

默认

注释

name

Char[]

不可

“”

id

Char[]

不可

“”

pin

Char[]

不可

“”

plusCorrect

double

0

加法自测正确率

plusNum

int

0

加法自测做题数

minusCorrect

double

0

minusNum

int

0

multiplyCorrect

double

0

multiplyNum

int

0

divideCorrect

double

0

divideNum

int

0

testGrade

double

0

小测平均成绩

testNum

int

0

已做小测次数

mistakeFileName

Char[]

“”

错题本文件名

mistakeNum

int

0

错题数

gameLevel

int

不可

1

游戏闯关模式当前关卡

gameNum

int

0

游戏无尽模式当前最大题量

grade

int[]

0

历史成绩

comment

char[]

“”

老师评价

next

structstudent*

NULL

具体代码实现如下:

typedef struct student {char name[20];char id[10];char pin[20];double plusCorrect;int  plusNum;double  minusCorrect;int  minusNum;double  multiplyCorrect;int   multiplyNum;double divideCorrect;int   divideNum;double  testGrade;int   testNum;char mistakeFileName[70];int   mistakeNum;int    gameLevel;int    gameNum;int   grade[20];char  comment[70];struct student*  next;
} St,*PSt;

表名:老师结构体数据表

字段名

函数型

可为空

默认

注释

name

Char[]

不可

“”

id

Char[]

不可

“”

pin

Char[]

不可

“”

老师结构体代码实现如下:

typedef struct teacher {char name[20];char id[10];char pin[20];
} Te;

http://www.xdnf.cn/news/985501.html

相关文章:

  • ateⅹⅰt()的用法
  • DD3118完整版参数规格书|DD3118 3.0读卡器控制方案|DD3118高速3.0读卡器芯片
  • 【数据采集+人形机器人】使用 Apple Vision Pro 对宇树(Unitree)G1 和 H1 人形机器人进行全身的遥操作控制
  • RAG 处理流程
  • Linux内核学习资料-deepseek
  • AIGC 基础篇 Python基础 05 元组,集合与字典
  • 45. Jump Game II
  • OPenCV CUDA模块图形变换----构建透视变换映射表函数buildWarpPerspectiveMaps()
  • AUTOSAR实战教程--DoIP_03_ 代码分析与调用栈观测(ISOLAR版)
  • 详解多模态
  • 项目制造型企业如何实现高效管理?从金属工具制造说起
  • 【LeetCode 热题 100】只出现一次的数字 / 多数元素 / 颜色分类 / 寻找重复数
  • 建造者模式(Builder Pattern)
  • 设计模式-组合模式
  • Ubuntu20.04更新Cmake版本
  • 找到字符串中所有字母异位词
  • 使用 PyTorch 和 TensorBoard 实时可视化模型训练
  • SpringBoot学习day1-SpringBoot的简介与搭建
  • Phthon3 学习记录-0611
  • Windows 删除文件出现错误代码0x80070570:文件或目录损坏且无法读取
  • 第五章网络管理
  • vibe coding 2025工具全景图
  • 构建高效开发节奏:我的IDEA休息提醒插件实践
  • fastadmin自动保存格式datetime
  • JavaEE-SpringBoot
  • 基于SpringBoot实现的课程答疑系统设计与实现【源码+文档】
  • 【MySQL数据库 | 第四篇】 数据类型+DDL表操作1
  • 从零开始了解数据采集技术篇(2)——如何提高数据采集的精度与速度
  • ALIGN_COMMA_ENABLE参数
  • 贪心选择 (Greedy Choice)