课 程 设 计 报 告
课程名称 C语言课程设计
课题名称 学数学测试系统
专 业
班 级
学 号
姓 名
指导教师
2016年 X 月 X 日
XX学院
课 程 设 计 务 书
课程名称 C语言课程设计
课 题 学数学测试系统
专业班级
学生姓名
学 号
指导老师
审 批
务书达日期 2015 年 12 月 26 日
务完成日期 2016年 01 月 06 日
设计容设计
课题九:学数学测试系统具体容见附录
2.设计求:
1)设计正确方案合理
2)界面友方便
3)程序精炼结构清晰
4)机演示
3.设计报告求:
课程设计报告格式:
1)正文格式:级标题3号黑体二级标题四号宋体加粗正文四号宋体行距22
2)正文容:课题功课题功模块划分功实现程序调试总结附件(程序源代码求程序写出必注释)课程设计报告需5000字左右(含附件)
3)课程设计报告装订序:封面务书目录正文评分程序清单附件
二进度安排
星期日
(17周)
星期
(18周)
星期四
(18周)
星期五
(18周)
星期日
(18周)
14001700
18002100
18002100
18002100
交报告
课时间外安排
附录:
设计课题九:学数学测试系统
问题描述:
系统进行简单数学测试累计成绩包括户注册户登录户删题目测试信息保存等功
二功描述:
1系统采结构体数组数结构应包括:户名户密码测试题目数答题目数
2系统功:
a 户注册:添加新户名户密码
b 户登录:进行数学测试前需进行登录没该户需进行注册
c 题目测试:系统动生成题目(注意题目合理性题目结果负数数0等)户出答案系统动测试正确性时统计成绩
d 信息保存 注册成功题目测试完毕户信息成绩保存文件
e退出系统
3系统说明:执行具体功程序重新显示功菜单系统功限述进行扩充完善题目动生成简单加减运算生成复杂四混合运算时户界面友重输入错误答案需出提示信息
三测试数:
户>3题目数>5
目 录
1 系统需求分析 6
2 概设计 6
3 详细设计 10
4 系统测试 15
5 课程设计总结 18
1 系统需求分析
学生数学测试系统具机出题动评分查答案错题重做等功系统属性:
1 界面设计选择种功
2 系统机出题显示算式含加减四运算
3 练时系统机出题键入答案显示错
4 测试时系统动出题题分统计分
5 题错信息错误出答案
2 概设计
系统功模块图:
学数学测试系统
学生成绩理模块
测试模块
注册登录模块
查结果模块
错题重做模块
21注册登录模块
提示户输入姓名学号果已记录次登录户信息追加储存文件中果没记录创建新文件储存:模块图图示:
注册登录模块
提示输入姓名学号
创建文件记录学生信息
判断否记录
22测试模块
进入开始测试菜单开始计时选择加减四种运算类型总体说测试模块分:加法运算减法运算法运算法运算四部分
四部分功相似选择类型选择题数目(5102050100)然选择难度时开始做题(题目利机函数机出题)然判断正误出正确率错误结果存入文件中备错题重做做题结果存入文件中便查结果
测试模块
加法运算
减法运算
法运算
法运算
23 学生成绩理模块
模块首先次测试学姓名学号成绩存入文件中次测试学信息覆盖前学信息然文件中信息读取结构体中进行排序利结构体排序成绩显示屏幕模块示图:
学生成绩理模块
存入测试学生成绩信息
查排名榜
创建学生成绩信息文件
排列序
24 查结果模块
利测试模块存储结果信息文件进行直接读取期间fgetc函数文件信息读取出图图示:
查结果模块
开存储结果文件
读取文件
25 错题重做模块
测试模块程已错题错题答案分出入文件中直接进行开存储错题文件逐读取错题时利scanf函数输入答题者答案开储存错题答案文件进行核正确答案模块图示:
错题重做模块
读取错题
进行重做
核答案
开错题存储文件
系统流程图:
开始
输入姓名
输入学号
菜单
开
始
测
试
查排名
错题重做
查结果
结束测试
加法
减法
法
法
选择题数
选择难度
测试
退出
返回
保存
3 详细设计
31登录功具体实现:
两函数Savemessage()Judge()两函数中 Savemessage()函数保存学生输入信息输入学生信息保存studentmessagetxtTestResulttxt文件中保存程中先输入结构体中利fwrite(&s[0]sizeof(struct Student)1fp)语句文件studentmessagetxt中写入条记录刚刚输入学生姓名学号
利fprintf(fp1姓名:s\ns[0]name)fprintf(fp1 学号:s\ns[0]num) 文件TestResulttxt中写入刚刚输入学生信息
登录完进入测试界面时开始计时
语句{printf( 请计时输入开始时间(点分)) scanf(dd&hourA&minA)}进行输入计时
然进入测试界面菜单:
32 测试功实现
①选测试类型:
测试功菜单分5中1~4选择类型5返回菜单具体实现选择功
while(choose<1||choose>5) {printf( 超出功范围请重新选择(15))scanf(d&choose)}输入1~5间数switch(choose) { }进行选择应功
图选择1进入
②选题数目:
进行选择题目数目输入测试题目数限制(5102050100)五数句
while(thnum<5||thnum>5&&thnum<10||thnum>10&&thnum<||thnum>20&&thnum<50||thnum>50&&thnum<100||thnum>100)
{printf(超出功范围请重新选择(5102050100))scanf(d&thnum)} 语句实现题目数限制超出范围提示重新输入begain()中调Addition(int number)控制循环语句for(int i0i
if(m2){num110+rand()(n10) 产生两位机数 num1num2
num210+rand()(n10)}
if(m3){num1100+rand()(n100) 产生三位机数 num1num2
num2100+rand()(n100)}
printf( d + d num1num2)
scanf(d&num4)通控制循环次数控制产生题数目
③选难度实现:
利机函数rand()n中n值产生位数机书实现难度控制n10时语句num1rand()n产生位数n100时语句num110+rand()(n10)产生二位数n1000时num1100+rand()(n100)产生三位数
具体语句
printf(请选择难度 ) scanf(d&m)system(cls) 清屏
{ if(m1) n10 if(m2) n100
else if(m3) n1000 }
for(int i0i
if(m2){num110+rand()(n10)
num210+rand()(n10)}
if(m3){num1100+rand()(n100)
num2100+rand()(n100)}}
实现控制难度rand()n产生机数实现机出题功
④动评分实现数储存
系统会输入答案正确答案进行逐较果正确结果记录TestResulttxt中便查结果果错误错误题正确结果记录failedResulttxt中便错题重做错误题正确结果记录rightResulttxt中TestResulttxt中便核错题答案程中系统会动统计正确结果数错误数利averagefloat(count1)float(number)动分数
具体程序
if(num3num4)
{fprintf(fp d + d d d \nnum1num2num4num3)
count1++}
else
{fprintf(fp d + d d d ×\nnum1num2num4num3) fprintf(fp2 d + d \nnum1num2num4num3)
错误题记录failedResulttxt中
fprintf(fp3 d + d d \nnum1num2num3)}}} averagefloat(count1)float(number)
fprintf(fp 正确 d 道错误 d 道正确率:f\n\ncount1count2average)
AA+average*100总分
nu++记录做类型题次数便算均分
⑤减程原理加法样工作界面分
减法法法
法功实现加法样分母零num2n10+rand()(nn10)语句进行实现中rand()(nn10)产生0nn101数n10+rand()(nn10)产生n10n1数例n100时产生1099两位数实现分母零时实现难度控制
33查结果实现
测试程中已结果记录存TestResulttxt中需开文件读取出记录
void ShowResult()显示测试结果函数
{FILE *fp
if((fpfopen(TestResulttxtr))NULL) exit(0)}
char ch chfgetc(fp) 文件开头字符
while(chEOF) 文件没尾时直循环
{ putchar(ch) 输出字符
chfgetc(fp)}
fclose(fp)} 函数直接读取查结果
34 排名实现
程中次做题情况学生信息记录文件nrecordtxt中然nrecordtxt中条条记录读取结构体中泡法进行排序直接结构体中读取排序成绩具体程序:
void sort() 实现排序
{FILE *fp5
int ijm
s[0]avscoreAnu
fp5fopen(nrecordtxta+)
fprintf(fp5s s f\ns[0]names[0]nums[0]avscore)刚刚做测试记录文件nrecordtxt中
fclose(fp5)
fp5fopen(nrecordtxtrb)
for(i0feof(fp5)i++)
{fscanf(fp5s sf\ns[i]names[i]num&s[i]avscore)} fclose(fp5) mi
struct Student temp
for(i0i
strcpy(tempnums[j]num)
tempavscores[j]avscore
strcpy(s[j]names[j+1]name)
strcpy(s[j]nums[j+1]num)
s[j]avscores[j+1]avscore
strcpy(s[j+1]nametempname)
strcpy(s[j+1]numtempnum)
s[j+1]avscoretempavscore}}
输出排名结果
printf******************************************************\n)
printf( 查排名(排序结果高低)\n)
printf( 姓名 学号 分数\n)
for(i0i
35错题重做
测试程中已错题错题答案分存入failedResulttxt rightResulttxt文件中直接进行开存储错题文件逐读取错题时利scanf函数输入答题者答案开储存错题答案文件进行核正确答案具体程序:
void rework() 错题重做
{int a
char ch
FILE *fp2*fp3
if((fp2fopen(failedResulttxta+))NULL)
{printf(开文件失败\n)
exit(0)}
if((fp3fopen(rightResulttxta+))NULL)
{printf(开文件失败\n)
exit(0)}
printf(********************错题重做***************************************\n)
while(feof(fp2))
{chfgetc(fp2)printf(cch)读取failedResulttxt中错题
if(ch'')
scanf(d&a)} 输入答案
fp2fopen(failedResulttxtw)清空前数
fclose(fp2)
printf(朋友请查正确答案\n)
while(feof(fp3))
{ chfgetc(fp3)printf(cch)}读取rightResulttxt中错题答案
fclose(fp3)fp3fopen(rightResulttxtw)清空
fclose(fp3)}
36结束测试
选择菜单结束功时系统提示输入结束时间输入系统动生成时间然系统学生信息记录学生学号命名文件中具体实现程
void FileCopy()文件复制函数保存测试结果然文件名重复
{FILE *in*out
strcat(s[0]numtxt)字符串txt连接字符串student[0]num学号文件名缀txt文件中保存工程目录
if((infopen(TestResulttxtr))NULL)
{ infopen(TestResulttxtw+)
printf(文件记录已新建\n)}
if((outfopen(s[0]numw))NULL)开文件学号txt 文件(030txt)w方式写方式
{ printf(开文件失败\n)
exit(0)}
while(feof(in))文件TestResulttxt没结束时循环
fputc(fgetc(in)out)逐字符写入
fclose(in)
fclose(out)}
void TestOver()程序测试完毕函数
{printf(\n\n测试完毕测试结果保存 s 中\n\ns[0]num) 输出测试结果记录提示}
4 系统测试
41注册登录模块
42测试模块
①选测试类型
②选题数目
③选难度实现
43 查学生成绩模块
44 错题重做模块
45 测试时出现错误分析总结
程序设计结构化模块化函数间相互调实现系统功调试带定方便 调试程中出现问题中文件结构体间转换困难段时间影响错题重做排名等功实现
问题:程序中次文件读写文件记录信息次出现读出记录文件中出现乱码
解决方法认真学反复研究文件读写函数fprintffscanffreadfwritefgetc反复调试中终解决问题
问题二学生信息均记录文件中文件直接排序需转换结构体中进行排序整排序程带相困难出现转换结构体中乱码现象
解决方法首先检查文件否信息记录确认数fscanf fread进行反复更换程中反复运行查结构体否输出终实现文件结构体间数传递实现排序功
问题三:错题重做定困难样错题记录读出重新做产生定困难
解决方法:采文件记录错题错题答案fgetc函数实现读出记录错题实现错题重做功
外调试程中遇相问题整体结构设计功实现
5 课程设计总结
次课程设计实验进入学学C语言结果次考验动手发现问题解决问题发现许足时没掌握知识实践中暴漏断思考查阅书籍网查资料机运行解决部分问题稍微问题相信学中定解决计算机应生活中说处作二十世纪学说掌握程序开发技术十分重C语言常见功强种高级语言做C语言课程设计十分必 仅巩固C语言程序设计课程学容掌握设计基方法强化机动手力
次课程设计编写学数学测试系统具机出题动评分动排名查正确答案错题重做等功系统功强程序编写难度相编程中知识片空白通书网络慢慢知道点
通次课程设计更加深刻体会c语言程序编写程严谨细致做事耐心懂理实际相结合重理知识远远够学理知识实践相结合起理中出结真正社会服务提高实际动手力独立思考力课程设计程中收获知识提高力时学生哲理懂样制定计划样实现计划掌握执行程中样克服心理良情绪生活学程中定会课程设计精神带生活中生活更加
谢谢田老师天时间指导
计算机科学技术系课程设计评分表
课程名称: C语言程序设计
项 目
评 价
设计方案合理性创造性
设计调试结果
设计说明书质量
答辩陈述回答问题情况
课程设计周表现情况
综合成绩
教师签名:
日 期: 20160110
附录:
源程序
#include
#include
#include
#include
float A0
int nu0
int hourAhourBminAminB
struct Student
{ char name[21] 姓名
char num[10] 学号
float avscore}s[50] 结构体数组存储学生信息初定50改
**
void Savemessage() 保存学生输入信息函数
{
FILE *fp*fp1定义文件指针判断文件开否 a方式开文件尾写数
if((fpfopen(studentmessagetxtwb+))NULL)开文件studentmessagetxt
{ printf(开文件失败\n)
exit(0)}
if((fp1fopen(TestResulttxta))NULL)开文件TestResulttxt
{ printf(开文件失败\n)
exit(0)}
printf( 输入姓名:) 学生输入信息
scanf(ss[0]name)
printf( 输入学号:)
scanf(s&s[0]num)
fwrite(&s[0]sizeof(struct Student)1fp)文件studentmessagetxt中写入条记录刚刚输入学生信息
fprintf(fp1 姓名:s\ns[0]name)文件TestResulttxt中写入刚刚输入学生信息
fprintf(fp1 学号:s\ns[0]num)
fclose(fp)关闭文件studentmessagetxt
fclose(fp1)
system(cls) 清屏
}
void Judge()判断函数
{int i0
FILE *fp 文件指针判断文件开否 r读开方式
printf(\n\n\n)
printf( *************************学数学测试系统********************\n)
printf( **\n)
printf( **\n)
printf( *************************************************************\n)
printf( *注 册*\n)
printf( **\n)
printf( *输入姓名*\n)
printf( **\n)
printf( *输入学号*\n)
printf( **\n\n\n)
if((fpfopen(studentmessagetxtr))NULL) 判断文件开否 a方式开文件尾写数开文件studentmessagetxt
{ fpfopen(studentmessagetxtw+) 果没studentmessagetxt文件新建文件w+开方式新建文件
printf(文件记录已新建\n)}
while(feof(fp))判断否文件尾
{fread(&s[i]sizeof(struct Student)1fp)行行文件中读出学生信息保存结构体数组student[]中
fscanf(fp\n) 读取换行符
i++ i变量保存学生记录数
if(i50) 数满时50满时数组标0开始i29时
{printf(数已满已法测试\n)
fclose(fp)
exit(0)}}}
**
void Addition(int number) 加法运算函数number题目数形参
{
FILE *fp*fp2*fp3
if((fpfopen(TestResulttxta))NULL)
{ printf(开文件失败\n)
exit(0)}
if((fp2fopen(failedResulttxta))NULL)
{printf(开文件失败\n)
exit(0)}
if((fp3fopen(rightResulttxta))NULL)
{printf(开文件失败\n)
exit(0)}
int num1num2num3num4mncount10count20
float average00 正确率变量注意float类型
srand(time(0)) 初始化机数果没语句次运行程序时机数样
fprintf(fp 加法测试:\n) 文件写入
fprintf(fp 加数 + 加数 结果 正确结果 否正确\n)文件写入
{
printf( *************************************************************\n)*选择难度*
printf( * 请选择难度*\n)
printf( * 1简 单 *\n)
printf( * 2 般 *\n)
printf( * 3困 难 *\n)
printf( **\n\n\n)
printf(请选择难度 ) scanf(d&m)system(cls) 清屏
{ if(m1) n10 *m值转化应n值机函数出现位2位3位*
if(m2) n100
else if(m3) n1000 }
printf( \n **************************************************************************\n\n)
for(int i0i
{num1rand()n num2rand()n } 产生位机数num1num2
if(m2)
{num110+rand()(n10) 产生两位机数 num1num2
num210+rand()(n10)}
if(m3)
{num1100+rand()(n100) 产生三位机数 num1num2
num2100+rand()(n100)}
num3num1+num2 num3保存正确结果
printf( d + d num1num2)终端屏幕输出题目
scanf(d&num4)输入计算结果
if(num3num4)正确结果计算结果较正确话
{fprintf(fp d + d d d √\nnum1num2num4num3)结果记录TestResulttxt中
count1++}变量count1记录正确题目数
else错误话num1num2时
{fprintf(fp d + d d d ×\nnum1num2num4num3)结果记录TestResulttxt中
fprintf(fp2 d + d \nnum1num2num4num3)错误题记录failedResulttxt中
fprintf(fp3 d + d d \nnum1num2num3)}}}错误题正确结果记录failedResulttxt中
averagefloat(count1)float(number)计算正确率注意int整型转换float类型
fprintf(fp 正确 d 道错误 d 道正确率:f\n\ncount1count2average)
AA+average*100
nu++
fclose(fp)
fclose(fp3)
fclose(fp2)}
**
void Subtracter(int number) 减法运算函数注释加法样
{
FILE *fp*fp2*fp3
if((fpfopen(TestResulttxta))NULL)
{printf(开文件失败\n)
exit(0)}
if((fp2fopen(failedResulttxta))NULL)
{printf(开文件失败\n)
exit(0)}
if((fp3fopen(rightResulttxta))NULL)
{printf(开文件失败\n)
exit(0)}
int num1num2num3num4count10nmcount20
float average00
srand(time(0))
fprintf(fp 减法测试:\n)
fprintf(fp 减数 减数 结果 正确结果 否正确\n)
printf( *************************************************************\n)*选择难度*
printf( * 请选择难度*\n)
printf( * 1简 单 *\n)
printf( * 2 般 *\n)
printf( * 3困 难 *\n)
printf( **\n\n\n)
printf(请选择 ) scanf(d&m)system(cls) 清屏
{if(m1) n10
if(m2) n100
else if(m3) n1000 }
printf( \n **************************************************************************\n\n)
for(int i0i
{num1rand()n num2rand()n } 产生位机数num1num2
if(m2)
{num110+rand()(n10) 产生两位机数 num1num2
num210+rand()(n10)}
if(m3)
{num1100+rand()(n100) 产生三位机数 num1num2
num2100+rand()(n100)}
num3num1num2
printf( d d num1num2)
scanf(d&num4)
if(num3num4)
{fprintf(fp d d d d √ \nnum1num2num4num3)
count1++}
else
{fprintf(fp d d d d ×\nnum1num2num4num3)
count2++
fprintf(fp2 d d \nnum1num2num4num3)
fprintf(fp3 d d d \nnum1num2num3)}}
averagefloat(count1)float(number)
fprintf(fp 正确 d 道错误 d 道正确率:f\n\ncount1count2average)
AA+average*100
nu++
fclose(fp)fclose(fp2)
fclose(fp3)
}
**
void Multiplication(int number)法运算函数注释加法样
{
FILE *fp*fp2*fp3
if((fpfopen(TestResulttxta))NULL)
{printf(开文件失败\n)
exit(0)}
if((fp2fopen(failedResulttxta))NULL)
{printf(开文件失败\n)
exit(0)}
if((fp3fopen(rightResulttxta))NULL)
{printf(开文件失败\n)
exit(0)}
int num1num2num3num4mncount10count20
float average00
srand(time(0))
fprintf(fp 法测试:\n)
fprintf(fp 数 * 数 结果 正确结果 否正确\n)
{ printf( *************************************************************\n)*选择难度*
printf( * 请选择难度*\n)
printf( * 1简 单 *\n)
printf( * 2 般 *\n)
printf( * 3困 难 *\n)
printf( **\n\n\n)
printf(请选择 )}
scanf(d&m)
system(cls) 清屏
{if(m1) n10
if(m2) n100
else if(m3) n1000 }
printf( \n **************************************************************************\n\n)
for(int i0i
{num1rand()n num2rand()n }
if(m2)
{num110+rand()(n10)
num210+rand()(n10)}
if(m3)
{num1100+rand()(n100)
num2100+rand()(n100)}
num3num1*num2
printf( d * d num1num2)
scanf(d&num4)
if(num3num4)
{fprintf(fp d * d d d √\nnum1num2num4num3)
count1++}
else
{fprintf(fp d * d d d ×\nnum1num2num4num3)
count2++
fprintf(fp2 d * d \nnum1num2num4num3)
fprintf(fp3 d * d d \nnum1num2num3)}}
averagefloat(count1)float(number)
fprintf(fp 正确 d 道错误 d 道正确率:f\n\ncount1count2average)
AA+average*100
nu++
fclose(fp)
fclose(fp2)
fclose(fp3)
}
**
void Division(int number) 加法运算函数注释样
{FILE *fp*fp2*fp3
if((fpfopen(TestResulttxta))NULL)
{printf(开文件失败\n)
exit(0)}
if((fp2fopen(failedResulttxta))NULL)
{printf(开文件失败\n)
exit(0)}
if((fp3fopen(rightResulttxta))NULL)
{printf(开文件失败\n)
exit(0)}
int num1num2mncount10count20
float num3num4average 正确率变量注意float类型
srand(time(0)) 初始化机数果没语句次运行程序时机数样
fprintf(fp 加法测试:\n) 文件写入
fprintf(fp 数数数结果 正确结果 否正确\n)文件写入
{ printf( *************************************************************\n)*选择难度*
printf( * 请选择难度*\n)
printf( * 1简 单 *\n)
printf( * 2 般 *\n)
printf( * 3困 难 *\n)
printf( **\n\n\n)
printf(请选择:)
scanf(d&m)system(cls) 清屏
{if(m1) n10
if(m2) n100
else if(m3) n1000 }
printf( \n **************************************************************************\n\n)
printf( 请保留保留数点位 \n)
for(int i0i
num1rand()n
if(m2)
num110+rand()(n10)
if(m3)
num1100+rand()(n100)
num2n10+rand()(nn10) 产生等零机数num3
num3(float)(num1)(float)(num2) num3保存正确结果
printf( d d num1num2)终端屏幕输出题目
scanf(f&num4)输入计算结果
num3(int)(num3*10)100 实现保留数点位
if(num3num4) 正确结果计算结果较正确话
{fprintf(fp d d 1f 1f √\nnum1num2num4num3)文件中写入
count1++ 变量count1记录正确题目数
}
else 错误话num1num2时
{fprintf(fp d d 1f 1f ×\nnum1num2num4num3)
count2++变量count2记录错误题目数
fprintf(fp2 d d \nnum1num2)
fprintf(fp3 d d 1f \nnum1num2num3)}}}
averagefloat(count1)float(number)计算正确率注意int整型转换float类型
fprintf(fp 正确 d 道错误 d 道正确率:f\n\ncount1count2average)
AA+average*100
nu++
fclose(fp)
fclose(fp2)
fclose(fp3)
}
**
void rework() 错题重做
{int a
char ch
FILE *fp2*fp3
if((fp2fopen(failedResulttxta+))NULL)
{printf(开文件失败\n)
exit(0)}
if((fp3fopen(rightResulttxta+))NULL)
{printf(开文件失败\n)
exit(0)}
printf(********************错题重做***************************************\n)
while(feof(fp2))
{chfgetc(fp2)printf(cch)读取failedResulttxt中错题
if(ch'')
scanf(d&a)} 输入答案
fp2fopen(failedResulttxtw)清空前数
fclose(fp2)
printf(朋友请查正确答案\n)
while(feof(fp3))
{ chfgetc(fp3)printf(cch)}读取rightResulttxt中错题答案
fclose(fp3)fp3fopen(rightResulttxtw)清空
fclose(fp3)}
void sort() 实现排序
{FILE *fp5
int ijm
s[0]avscoreAnu
fp5fopen(nrecordtxta+)
fprintf(fp5s s f\ns[0]names[0]nums[0]avscore)刚刚做测试记录文件nrecordtxt中
fclose(fp5)
fp5fopen(nrecordtxtrb)
for(i0feof(fp5)i++)
{fscanf(fp5s s f\ns[i]names[i]num&s[i]avscore)}文件nrecordtxt记录存结构体struct Student中
fclose(fp5)
实现排序
mi
struct Student temp
for(i0i
for(j0j
strcpy(tempnames[j]name) 利时结构变量temp实现数组元素交换
strcpy(tempnums[j]num)
tempavscores[j]avscore
strcpy(s[j]names[j+1]name)
strcpy(s[j]nums[j+1]num)
s[j]avscores[j+1]avscore
strcpy(s[j+1]nametempname)
strcpy(s[j+1]numtempnum)
s[j+1]avscoretempavscore
}
n0意味着没交换排序已完成
}
输出排名结果
printf( ****************************************************************\n)
printf( 查排名(排序结果高低)\n)
printf( 姓名 学号 分数\n)
for(i0i
**
void TestOver()程序测试完毕函数
{
printf(\n\n测试完毕测试结果保存 s 中\n\ns[0]num) 输出测试结果记录提示
}
void ShowResult()显示测试结果函数
{
FILE *fp
if((fpfopen(TestResulttxtr))NULL)
{ printf(开文件失败\n)
exit(0)}
char ch
chfgetc(fp)文件开头字符
while(chEOF)文件没尾时直循环
{ putchar(ch)输出字符
chfgetc(fp)}
fclose(fp)
}
void FileCopy()文件复制函数保存测试结果然文件名重复
{
FILE *in*out
strcat(s[0]numtxt)字符串txt连接字符串student[0]num学号文件名缀txt文件中保存工程目录
if((infopen(TestResulttxtr))NULL)
{ infopen(TestResulttxtw+)
printf(文件记录已新建\n)
}
if((outfopen(s[0]numw))NULL)开文件学号txt 文件(03071361txt)w方式写方式
{ printf(开文件失败\n)
exit(0)
}
while(feof(in))文件TestResulttxt没结束时循环
fputc(fgetc(in)out)逐字符写入
fclose(in)
fclose(out)}
**
void ChooseFunc()
void begain()
{printf(\n\n\n)
printf( \n)
printf( *************************************************************\n)
printf( *1加法测试*\n)
printf( *2减法测试*\n)
printf( *3法测试*\n)
printf( *4法测试*\n)
printf( *5返回菜单*\n)
printf( **\n\n\n)
int choosethnum bool judgefalse
printf( 选择功:)
scanf(d&choose)
while(choose<1||choose>5)列功时循环
{
printf( 超出功范围请重新选择(15))
scanf(d&choose)
}
switch(choose)switch语句选择执行功
{
case 1执行功1
system(cls) 清屏
printf(\n\n\n)
printf( 加法测试:输入测试题目数(5102050100):&thnum)
scanf(d&thnum)
while(thnum<5||thnum>5&&thnum<10||thnum>10&&thnum<20||thnum>20&&thnum<50||thnum>50&&thnum<100||thnum>100)列功时循环
{ printf(超出功范围请重新选择(5102050100))
scanf(d&thnum)}
system(cls) 清屏
Addition(thnum)调加法运算函数
begain()
break
case 2
system(cls) 清屏
printf(\n\n\n)
printf( 减法测试:输入测试题目数(5102050100)&thnum)
scanf(d&thnum)
while(thnum<5||thnum>5&&thnum<10||thnum>10&&thnum<20||thnum>20&&thnum<50||thnum>50&&thnum<100||thnum>100)列功时循环
{ printf(超出功范围请重新选择(5102050100))
scanf(d&thnum)}
system(cls) 清屏
Subtracter(thnum)
begain()
break
case 3
system(cls) 清屏
printf(\n\n\n)
printf( 法测试:输入测试题目数(5102050100)&thnum)
scanf(d&thnum)
while(thnum<5||thnum>5&&thnum<10||thnum>10&&thnum<20||thnum>20&&thnum<50||thnum>50&&thnum<100||thnum>100)列功时循环
{ printf(超出功范围请重新选择(5102050100))
scanf(d&thnum)}
system(cls) 清屏
printf(\n\n\n)
Multiplication(thnum)
begain()
break
case 4
system(cls) 清屏
printf(\n\n\n)
printf( 法测试:输入测试题目数(5102050100)&thnum)
scanf(d&thnum)
while(thnum<5||thnum>5&&thnum<10||thnum>10&&thnum<20||thnum>20&&thnum<50||thnum>50&&thnum<100||thnum>100)列功时循环
{ printf(超出功范围请重新选择(5102050100))
scanf(d&thnum)}
system(cls) 清屏
printf(\n\n\n)
Division(thnum)begain()
break
case 5
system(cls) 清屏
ChooseFunc()
break}}
**
void ChooseFunc()功选择函数
{
printf(\n\n\n)
printf( *************************************************************\n)
printf( *1开始测试*\n)
printf( *2查结果*\n)
printf( *3查排名*\n)
printf( *4错题重做*\n)
printf( *5结束测试 *\n)
printf( **\n\n\n)
int choosetime
printf( 选择功:)
scanf(d&choose)
while(choose<1||choose>5)列功时循环
{
printf( 超出功范围请重新选择(15))
scanf(d&choose)
}
switch(choose)switch语句选择执行功
{
case 1功1
system(cls)
printf( *************************************************************\n)
{printf( 请计时输入开始时间(点分)) 开始时间
scanf(dd&hourA&minA)
system(cls) }
显示时间
*gettime(&tim)printf(\n开始时间:02d02d02d\ntimti_hourtimti_mintimti_sec)*
begain()
break
case 2功2
system(cls)
printf(\n\n)
ShowResult()调函数输出测试结果
ChooseFunc()
break
case 3功2
system(cls)
printf(\n\n)
sort()调函数输出测试结果
ChooseFunc()
break
case 4功4
system(cls) 清屏
printf(\n\n)
rework()调函数输出测试结果
ChooseFunc()
break
case 5功5
system(cls) 清屏
printf(\n\n)
{ printf(请输入结束时间:点分) 结束时间
scanf(dd&hourB&minB)
time(hourBhourA)*60+(minBminA)
printf( **\n)
printf( *朋友答题时*\n)
printf( * d分钟 *\n time) }
FileCopy()调函数复制测试结果
TestOver()
break}}
**
***********************************************************************************************************************************
void main()
{
FILE *fp*fp2*fp3
fpfopen(TestResulttxtw) 写方式开文件果文件存清空什结束程序时复制测试结果
fp2fopen(failedResulttxtw)清空前数
fclose(fp2)
fp3fopen(rightResulttxtw)清空
fclose(fp3)
Judge() 调函数
Savemessage() 调函数
ChooseFunc() 调函数
}
湖nna工程学院
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档