目 录
课程设计目的
---------------------------------------------------------------------------------------4 课程设计要求
---------------------------------------------------------------------------------------4 课程设计容
---------------------------------------------------------------------------------------4
一、系统结构--------------------------------------------------------------5 1.1 算术练习程序要求
---------------------------------------------------------------------------------5
1.2 程序系统结构---------------------------------------------------------5 二、程序设计说明----------------------------------------------------------6 2.1程序描述--------------------------------------------------------------6 2.2功能 -----------------------------------------------------------------6 2.3性能------------------------------------------------------------------6 2.4输入项 ---------------------------------------------------------------7 2.5输出项 ---------------------------------------------------------------7 三、各模式简述------------------------------------------------------------7 3.1主函数----------------------------------------------------------------7 3.2练习模式--------------------------------------------------------------8 3.3测试模式--------------------------------------------------------------9 3.4设置模式--------------------------------------------------------------11 A难度设置--------------------------------------------------------------12 B类型设置--------------------------------------------------------------14 C题数设置--------------------------------------------------------------15 3.5查分模式--------------------------------------------------------------15 3.6
写
入
文
件
----------------------------------------------------------------------------------------------16 3.7
读
取
文
件
-----------------------------------------------------------------------------------------------17 3.8
Word资料
时间模块
.
-----------------------------------------------------------------------------------------------17 课程设计心得与体会
------------------------------------------------------------------------------17 附录1 参考文献
---------------------------------------------------------------------------------17 附录2 程序清单
--------------------------------------------------------------------------------17
课程设计目的
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言》课程后进行的一次全面的综合练习。本课程设计的目的和任务:
1. 巩固和加深学生对C语言课程的基本知识的理解和掌握; 2. 掌握C语言编程和程序调试的基本技能; 3. 利用C语言进行基本的软件设计; 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力。
课程设计要求
1. 分析课程设计题目的要求; 2. 写出详细设计说明;
Word资料
.
3. 编写程序代码,调试程序使其能正确运行;
4. 设计完成的软件要便于操作和使用,有整齐、美观的使用界面; 5. 设计完成后提交课程设计报告和源代码文件的电子文档。
课程设计容
1. 2. 3.
在指导书提供的课程设计题目中选则了算术练习; 用户提供的主操作界面应该方便用户的操作。 最后提交的课程设计成果包括:
1) 算术练习打印稿; 2) 算术练习电子稿; 3) 源程序算术练习文件; 4) 可执行程序算术练习文件。
一、系统结构
1.1 算术练习程序要求
运行软件,进入选择菜单,显示选项,有五个选项。如图
算术练习 1. 练习 2. 测验 3. 设置 4. 查看 练习模式:每答完一题,会显示是否正确,错误的话会显示正确答
Word资料
.
案,并且询问是否要继续。若选择N则结束,并显示总答题数,正确答题数,及正确率。
测验模式:题数为设置中的设定值(可以调节),答题全部结束时可以看到正确结果 和本次测验的成绩,并将其写入文件。 设置:1.可以选择难度,有低难度,一般难度,高难度,自定义难度(可以调节);2.可以选择是加减乘除或随机的那种运算;3.可以设定随机数值的大小(可以调节)(设置完成之后自动保存到文件)。 查看:可以查看历史最高的测试成绩及上次的成绩,还有各种设定(从文件中读取)。 1.2 程序系统结构
主菜单 练习 测验 设置 查看 退出 设置难度 运算类型 简单 一般 高难度 加 减 乘 除 混合
Word资料
.
二、程序设计说明
2.1程序描述
本程序的主要功能为人们进行简单的加减乘除运算提供练习和测试的小程序。并且本程序会自动记录下测验的成绩,方便使用者查询自己的成绩,以便提高成绩。
2.2功能
该程序的功能:练习模式中会随机出一道加减乘除运算的数学题,然后要求使用者输入一个-999-1000之的整型数(注意:本程序的除法结果为整数,输入时请省略小数)。如果正确,会输出正确的提示,反之,会出现错误的提示。之后会提问是否继续。测验模式中与联系模式大致相同,只是题数为设定的道题,测试完只后会告诉你答对几题,正确率为多少。
2.3性能
本程序的输入和输出为整形,围为-999-1000。小巧灵活,响应速度较快。
2.4输入项
本程序的输入项有以下三种,一是输入提问的答案,类型为整型数字字符。二是输入选择项,类型也为整型数字字符,围为。三为询问是否继续时的按键,类型为任意的字符。输入媒体为键盘和文件。输入数据的来源为使用者的输入和以前保存在文件的信息,安全保密条件为任意。
2.5输出项
输出项为各类提示和说明,一般用字符串的方式输出,个别用其他方式输出。不一一列举。
三、各模式简述
Word资料
.
3.1主函数 3.11程序描述
主函数写的是主菜单,四个主要的子函数分别写的是练习、测验、设置和查看成绩的功能。
并且一些常用的重要的功能也写成了子函数,如读取、写入文件等。
3.12功能
能够输出主菜单,供用户选择。
3.13输入项
输入所要选择的菜单项目。
3.14输出项
输出主菜单列表。
3.15算法
switch等选择结构语句。
3.16 流程逻辑
Word资料
.
开始 主菜单 输入 switch选择 练习模块 测试模块 设置模块 查分模块 退出 返回
图一 主菜单
3.2练习模式 3.21程序描述
算术练习
3.22功能
每答完一题,会显示是否正确,错误的话会显示正确答案,并且询问是否要继续。若选择N则结束,并显示总答题数,正确答题数,及正确率。
Word资料
.
3.23输入项
输入显示的题目的答案。
3.24输出项
判断输入的答案是否正确,若正确则输出总的题数和做对的题数,并询问是否继续答题;
若输入的答案不正确,则先输出正确答案再输出总的题数和做对的题数,并询问是否继续答题。
3.25算法
选择结构语句,循环结构语句,rand( )随机数。
3.26流程逻辑
Word资料
.
开始 显示问题 输入答案 Y 判断是否正确 N 输出正确 输出错误 Y 判断是否继续 N 返回函数
图二:练习模式
3.3测试模式 3.31程序描述
题数为设置中的设定值(可以调节),答题全部结束时可以看到正确结果 和本次测验的成绩,并将其写入文件。
3.32功能
Word资料
.
能够输出题目,并提供准确的准确率。
3.33输入项
输入显示的题目的答案。
3.34输出项
判断答案是否正确,并在答完所有题目后输出作对题目的道数,并计算准确率。
3.35算法
选择结构语句,循环结构语句。
3.36流程逻辑
Word资料
.
开始 题数为零 Y 是否大于设置题数 返回函数 显示题目 N 输入答案 Y 判断是否正确 N 提示正确 提示错误 题数加一
图三 测试模式
3.4设置模式 3.41程序描述
1.可以选择难度,有低难度,一般难度,高难度,自定义难度(可以调节); 2.可以选择是加减乘除或随机的那种运算;
3.可以设定随机数值的大小(可以调节)(设置完成之后自动保存到文件)。
Word资料
.
3.42功能
位数:设置参加运算数的位数(1 ~ 3位)。 运算符:加法,减法,乘法,除法,随即运算。
3.43输入项
结果。
3.44输出项
判断是否正确,输出答对题数和准确率。
3.45算法 3.46流程逻辑
开始 输入 Switch选择 设置难度 设置类型 设置题数 返回 保存入文件 保存入文件 保存入文件 返回 返回 返回
图四:设置模式
A难度设置
Word资料
.
a.功能
设置题目的难易程度,分低难度(数字围为1-9)、中等难度(数字围为1-99)、高难度(数字围为1-999)和自定义难度。 b.输入项
输入想选择的对应编号数字。 c.输出项 返回主菜单。 d.算法 选择结构。 e.流程逻辑
Word资料
.
开始 输入 低难度(中等难度(高难度(自定义难度返回上一层数字范围为1-9) 数字范围为1-99) 返回 数字范围为1-999)
B类型设置 a.功能
设置加减乘除或随机五种选择。 b.输入项
输入相应数字编号。 c.输出项
Word资料
.
返回主菜单。 d.算法 选择结构。 e.流程逻辑
开始 输入 加法 减法 乘法 除法 随机 结束
C题数设置
Word资料
.
a.功能
设置每次做题的量。 b.输入项
输入相应数字编号。 c.输出项 返回主菜单。 d.算法 选择结构。 e.流程逻辑
3.5查分模式 3.51程序描述
此函数进行对测验成绩的记录,并将测验的结果显示在终端。 3.52功能 查看成绩。
Word资料
开始 输入 设置难度 设置类型 设置题数 返回 结束 .
3.53输入项 无。 3.54输出项
用printf()输出,在屏幕上显示结果
3.6写入文件
文件1:设置(随即数位数及运算)记录文件;每次可读取上一次的设置。
文件2:测验成绩(成绩,测验日期,测验时间)记录文件。
文件3:测验题数记录文件,每次测验如无设置自动读取上一次设置。
3.7读取文件
每次程序运行时可自动读取上一次的设置,如第一次运行或设置文件被删除则会提示用户要求设置。
3.8时间模块
开始 产生当前时间保存到结构体中 结束 课程设计心得与体会
通过两周的课程设计,让我对C语言有了更进一步的了解,以往不清楚的部分也通过实践有了更深的了解。这是我第一次尝试编写比较大的程序,在很多方面依然存在着不足。 尤其在文件的存储和结构体模块,大大加强了我对概念和小细节的理解和把握。
同时也让我知道的编程的艰辛,以后的路任重而道远。总之,这次课程设计让我收益非浅。对我将来的学习很有帮助。
Word资料
.
附录1
参考文献
[1]谭浩强. C程序设计 北京:清华大学出版社 [2]谭浩强. C程序设计题解与上机指导 北京:清华大学出版社 [3]林小茶 C程序设计实训 北京:清华大学出版社 [4]C语言课程设计 北京:电子工业出版社
附录2
程序清单 #include\"stdio.h\" #include\"stdlib.h\" #include\"time.h\"
#define GLN \"最近得分:%d\\n最高分:%d\\n难度系数:%d\\n运算类型:%d\\n是否随机:%d\\n测试题数:%d\" FILE *fp; //定义文件型指针变量 struct baocun {
int num; //测试题数 int score; //最近一次的得分 int highscore; //历史最高得分
Word资料
.
int ndk; //难度系数 int type; //加减乘除类型 int type1; //是否随机 };
struct baocun xinxi; int tishu1,tishu2;
/////////////////////////////////////////////////////////////////////// //下列为申明函数
void chongzhi(); //重置(把所有值变成默认值) void tc(); //退出 void sp(); //分割符号 void f0(); //主界面 void f1(); //练习模块
void f2(); //测验模块 void f3(); //设置模块 void f4(); //查分模块 void read(); //读取文件 void write(); //写入文件 //int num,ndk=10,type=1,type1=1;
////////////////////////////////////////////////////////////////////////////
Word资料
.
main() { }
/////////////////////////////////////////////////////////////////// void f0() //主菜单 {
char ch; read(); f0();
lp: int n;
printf(\"\\n\\n\\n\"); sp();
printf(\"\\n\\\ 主 菜 单\\n\\n\"); printf(\"\\\\ 1.练习\\n\\n\"); printf(\"\\\\ 2.测试\\n\\n\"); printf(\"\\\\ 3.设置\\n\\n\"); printf(\"\\\\ 4.查看\\n\\n\"); printf(\"\\\\ 0.退出\\n\"); sp();
printf(\"\\n\ 请输入数字选择(0-4):\"); scanf(\"%d\switch(n)
Word资料
.
}
{ }
ch=getchar(); goto lp;
case 0:tc();break; case 1:f1();break; case 2:f2();break; case 3:f3();break; case 4:f4();break;
default:printf(\"\ 选择错误!\");
/////////////////////////////////////////////////////////////////// void f1() //练习模式 {
srand( time(NULL) ); //以时间做种子初始化随机数发生器 tishu1=0; tishu2=0; int x1,x2,x3,x4; char b1,ch; printf(\"\\n\");
do {
Word资料
.
sp();
tishu1=tishu1+1; //总题数 if(xinxi.type1==1) xinxi.type=rand()%4+1;
x1=rand()%xinxi.ndk+1; //随机数 x2=rand()%xinxi.ndk+1; //随机数 printf(\"\\n\ %d. %d\switch(xinxi.type) { }
printf(\"%d=\
scanf(\"%d\ //x3为输入case 1:printf(\"+\");x4=x1+x2;break; //x4为正确答案 case 2:printf(\"-\");x4=x1-x2;break; case 3:printf(\"*\");x4=x1*x2;break; case 4:printf(\"/\");x4=x1/x2;break;
答案
if(x3==x4) {
printf(\"\\n\\n\ (*^_^*)恭喜你,你做对了!\\n\\n\\n\\n\"); tishu2=tishu2+1; //答对题数 }
Word资料
.
else {
printf(\"\\n\\n\ (!-_-!)你做错了!\\n\\\\\\正确答案
为%d\\n\ }
//////////////////////////////////////////////////////////////// void f2() //测验模式 {
char ch; }
printf(\"\\\\\\共做%d道,做对%d道\\n\ch=getchar();
printf(\"\\n\ 请问是否继续?(按y继续,按n返回主菜单)\"); scanf(\"%s\printf(\"\\n\"); }
while(b1!='n'); //当变量bl不等于n时执行
int j,x1,x2,x3,x4,zql; //zql:正确率
srand( time(NULL) ); tishu2=0; printf(\"\\n\");
for(j=1;j<=xinxi.num;j++)
Word资料
.
{ sp();
if(xinxi.type1==1) xinxi.type=rand()%4+1; x1=rand()%xinxi.ndk+1; x2=rand()%xinxi.ndk+1; printf(\"\\n\ %d. %d\switch(xinxi.type) { }
printf(\"%d=\scanf(\"%d\if(x3==x4) {
printf(\"\\\\\\(*^_^*)你做对了!\\n\\n\"); tishu2=tishu2+1; } else
case 1:printf(\"+\");x4=x1+x2;break; case 2:printf(\"-\");x4=x1-x2;break; case 3:printf(\"*\");x4=x1*x2;break; case 4:printf(\"/\");x4=x1/x2;break;
Word资料
.
printf(\"\\\\\\(!-_-!)你做错了!\\n\\\\\\正确答案
为%d\\n\\n\ }
///////////////////////////////////////////////////////////////////// void f3() //设置模式 { int n; void f31(); void f32(); void f33(); printf(\"\\n\\n\\n\"); sp();
printf(\"\\n\\\\设 置\\n\\n\"); ch=getchar(); } sp();
zql=tishu2*100/xinxi.num;
printf(\"\\\ 您做对%d道,正确率为%d%%\\n\xinxi.score=zql;
if(xinxi.score>xinxi.highscore) xinxi.highscore=xinxi.score; write();
Word资料
.
}
printf(\"\\\\1.设置难度\\n\\n\"); printf(\"\\\\2.设置运算类型\\n\\n\"); printf(\"\\\\3.设置测验题数\\n\\n\"); printf(\"\\\\4.恢复默认值\\n\\n\"); printf(\"\\\\0.返回主菜单\\n\\n\"); sp();
printf(\"\\n\ 请选择(0-4):\"); scanf(\"%d\switch(n) {
case 0:return;break; case 1:f31();break; case 2:f32();break; case 3:f33();break;
case 4:chongzhi();write();break;
default:printf(\"选择错误!\");exit(2); //如果错误就返回
}
///////////////////////////////////////////////////////////////////// void f31() //设置中的难度设置 {
void f311();
Word资料
.
int n;
printf(\"\\n\\n\\n\"); sp();
printf(\"\\n\\\\设 置 难 度\\n\\n\"); printf(\"\\\\1.低难度(数字围为1-9)\\n\\n\"); printf(\"\\\\2.中等难度(数字围为1-99)\\n\\n\"); printf(\"\\\\3.高难度(数字围为1-999)\\n\\n\"); printf(\"\\\\4.自定义难度\\n\\n\"); printf(\"\\\\0.返回上一层\\n\\n\"); sp();
printf(\"\\n\ 请选择(0-4):\"); scanf(\"%d\switch(n) {
case 0:f3();break; case 1:xinxi.ndk=9;break; case 2:xinxi.ndk=99;break; case 3:xinxi.ndk=999;break;
case 4:f311();break; //设置难度系数
xinxi.ndk }
default:printf(\"选择错误!\");exit(3);
Word资料
.
}
write();
/////////////////////////////////////////////////////////////////////// void f311() //设置自定义难度 { sp();
printf(\"\\n\\\\自 定 义 难 度\\n\\n\"); do {
printf(\"\\n\\n\\n\ 请输入随机数的最大值(请输入1-65535的整
数):\"); }
/////////////////////////////////////////////////////////////////////// void f32() //设置中的类型设置 { int n;
printf(\"\\n\\n\\n\"); scanf(\"%d\
if(xinxi.ndk<1 || xinxi.ndk>65535)
printf(\"\\n\\n\\n\ 警告:输入的随机数最大值超过给定围\\n\\n\"); }
while(xinxi.ndk<1 || xinxi.ndk>65535);
Word资料
.
sp();
printf(\"\\n\\\ 设 置 运 算 类 型\\n\\n\"); printf(\"\\\\1.加法(+)\\n\\n\"); printf(\"\\\\2.减法(-)\\n\\n\"); printf(\"\\\\3.乘法(*)\\n\\n\"); printf(\"\\\\4.除法(/)\\n\\n\"); printf(\"\\\\5.随机运算\\n\\n\"); printf(\"\\\\0.返回上一层\\n\\n\"); sp();
printf(\"\\n\ 请选择(0-5):\"); scanf(\"%d\ switch(n) { case 0:f3();break;
case 1:xinxi.type=1;xinxi.type1=0;break; 算类型为+
case 2:xinxi.type=2;xinxi.type1=0;break; 算类型为-
case 3:xinxi.type=3;xinxi.type1=0;break; 算类型为*
case 4:xinxi.type=4;xinxi.type1=0;break; 算类型为/
Word资料
//设置运
//设置运
//设置运
//设置运
.
}
}
case 5:xinxi.type1=1;break; //设置运算类型为随机 default:printf(\"选择错误!\");exit(1);
write();
////////////////////////////////////////////////////////////////////////
void f33() //设置测验题数 {
void f331(); int n;
printf(\"\\n\\n\\n\"); sp();
printf(\"\\n\\\ 设 置 测 验 题 数\\n\\n\"); printf(\"\\\\1.10题\\n\\n\"); printf(\"\\\\2.20题\\n\\n\"); printf(\"\\\\3.30题\\n\\n\"); printf(\"\\\\4.自定义题数\\n\\n\"); printf(\"\\\\0.返回上一层\\n\\n\"); sp();
printf(\"\\n\ 请选择(0-4):\"); scanf(\"%d\
Word资料
.
}
switch(n) { } write();
case 0:f3();break;
case 1:xinxi.num=10;break; case 2:xinxi.num=20;break; case 3:xinxi.num=30;break; case 4:f331();break;
default:printf(\"选择错误!\");exit(1);
////////////////////////////////////////////////////////////////////////
void f331() //设置自定义测试题数 { sp();
printf(\"\\n\\\\ 自 定 义 测 试 题 数\\n\\n\"); do {
printf(\"\\n\\n\\n\ 请输入测试题数(请输入1-100的整数):\"); scanf(\"%d\
if(xinxi.num<1 || xinxi.num>100) //如果输入的题数小于1
Word资料
.
或 大于100 }
////////////////////////////////////////////////////////////////////////
void f4() //查看成绩的子函数 {
char d[50]; //输入50个字符 struct tm *p; //一个指针一个变量 size_t h=50; time_t k;
k=time(NULL); //记录系统当前时间 char ch; printf(\"\\n\"); sp();
printf(\"\\n\\\\查 看\\n\\n\"); printf(\"\ 当前设置为:\\n\\n\");
printf(\"\\\ 测试题数为%d题\\n\\n\printf(\"\\\ 随机最大数值为%d\\n\\n\printf(\"\\n\\n\\n\ 警告:输入题数超过给定围\\n\\n\"); }
while(xinxi.num<1 || xinxi.num>100); write();
Word资料
.
printf(\"\\\ 算法类型为\"); if(xinxi.type1==1) printf(\"随机运算\\n\\n\"); else { }
if(xinxi.score==-1)
printf(\"\\\ 没有进行过任何测试,无成绩\\n\\n\"); else {
printf(\"\\\ 上次得分为%d\\n\\n\
printf(\"\\\ 历史最高得分为%d\\n\\n\}
printf(\"\\当前时间\\n\"); if(xinxi.type==1) printf(\"加法运算\\n\\n\"); if(xinxi.type==2) printf(\"减法运算\\n\\n\"); if(xinxi.type==3) printf(\"乘法运算\\n\\n\"); if(xinxi.type==4) printf(\"除法运算\\n\\n\");
Word资料
.
}
p=localtime( &k); strftime(d,h,\"%Y\
printf(\"\\\ 年份:%s\\n\strftime(d,h,\"%x\
printf(\"\\\ 日期:%s\\n\strftime(d,h,\"%X\
printf(\"\\\ 时间:%s\\n\
printf(\"\\n\\n\\n\\n\\n\\\ 按回车键返回主菜单\"); ch=getchar(); ch=getchar(); sp();
///////////////////////////////////////////////////////////////////////// void sp() {
printf(\" \");
printf(\"===================================
=========================\\n\"); }
//////////////////////////////////////////////////////////////////////////
Word资料
.
/*void pb() { }*/
//////////////////////////////////////////////////////////////////////////
void read() //读取文件 {
if((fp=fopen(\"c:\\\\成绩记录.ini\ //注意文件名必须与前相同 {
printf(\"\\\提示:这是您第一次使用本软件吧,\\n\\\没有历史printf(\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\");
成绩记录,设置为默认值\\n\");
chongzhi(); write(); return; }
fscanf(fp,GLN,&xinxi.score,&xinxi.highscore,&xinxi.ndk,&xinxi
.type,&xinxi.type1,&xinxi.num); //输入列表 }
Word资料
fclose(fp); //关闭文件
.
/////////////////////////////////////////////////////////////////////////
void write() //写入文件 {
if((fp=fopen(\"c:\\\\成绩记录.ini\ //注意文件名
必须与前相同 (检查打开文件操作是否出错) { }
fprintf(fp,GLN,xinxi.score,xinxi.highscore,xinxi.ndk,xinxi.type,xprintf(\"\\\\不能写入文件\\n\"); return;
inxi.type1,xinxi.num); //输出列表 }
///////////////////////////////////////////////////////////////////////////
void chongzhi() //重置 默认值 {
xinxi.type=1; xinxi.type1=0; xinxi.score=-1; xinxi.highscore=0; fclose(fp);
Word资料
.
}
xinxi.ndk=10; xinxi.num=10;
////////////////////////////////////////////////////////////////////////////
void tc() //退出 { char ch; sp();
printf(\"\\n\\n\\n\");
printf(\" ┌───┼┘┐├─┐ ┐╭┬├──┐╭──┐┌
╮╭┌──┼┐┌───┬┐\\n\");
printf(\" │───│┐┐┌─┐─┤││╯┐│┌──┼┐│ ││\\n\");
printf(\" │┌─┐┼╯│├─┤┌│││┌│││ ││├───┼┤\\n\");
printf(\" │└─┘╰┘│├─┤│││┘╯─┘│││╯└──┼╯│ ││\\n\");
printf(\" ┌│└╮┐╮│┴┬┤╰│┌│─╮┐╮├──┤╰
││ ╰─┼╮├───┼┤\\n\");
printf(\" ╰╰──┘┘╰└╯┘╰┘╰╰──┘┘└──╯─
╯└└──╯┘└ ┘╯\\n\\n\\n\");
Word资料
┐│├──┐├
│╮│ │╯
│┐
.
}
do {
printf(\"\\ 请问你是否真的要退出?(y/n)\\n\\n\"); printf(\"\\ 请输入y或n:\"); scanf(\"%s\if(ch=='n' || ch=='N') return; else
if(ch=='y' || ch=='Y') exit(3); }
while(ch!='n' || ch=='N');
Word资料
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务