C语言课程设计-小学生算术四则运算测试系统
帮助小学生学习四则运算的CAI系统的开发

帮助小学生学习四则运算的CAI系统的开发一、实验目的1、实践小型软件的开发过程;2、熟练掌握C语言,提高程序设计能力。
3、养成良好的程序设计习惯,遵从好的程序设计风格。
二、实验内容1、计算机在教育中的作用越来越大。
把计算机用在教育上称为“计算机辅助教学(CAI)”。
编制一个小型软件,帮助小学生学习四则运算。
2、随机产生四则运算表达式,学生然后键入答案,程序接着检查学生输入的答案。
如果答案正确,程序打印出“very good!”,然后给出另一道四则运算题。
如果答案不正确,程序打印出“No. Please try again.”,然后让学生重做这道题,直到答案正确为止。
3、开发CAI环境碰到的问题之一是避免学生的厌倦情绪。
解决该问题的方法是通过改变计算机的对话来吸引学生的注意力。
修改2的程序使新的程序能够为每一个正确的答案和不正确的答案打印出各种注释。
例如:对正确答案的响应为:V ery good!Excellent!Keep up the good work!对不正确答案的响应为:No. Please try again.Wrong. Try once more.No. Keep trying.4、更复杂的计算机辅助教学系统可监视学生在一段期间内的表现。
通常根据学生前一段期间内的表现确定是否开始新问题的学习。
修改3的程序,计算学生回答正确和不正确的次数。
在学生键入了10个答案后,程序计算出学生回答的正确率。
如果正确率低于75%,程序打印出“Please ask your instructor for extra help.”后终止。
三、实验要求1、根据实验内容用C语言编制相应的计算机程序;2、在用C语言编制程序之前,必须进行软件设计,并画出模块结构图和IPO图以及程序流程图。
四、实验步骤1、模块划分(这一步是系统的设计阶段,考虑的问题是该系统划分为多少个模块(函数))(1)模块结构图(2)IPO图(描述每个模块输入/输出数据、处理功能及模块调用的详细情况)2、重要函数的程序流程图(最难实现的、关键的函数,如四则运算表达式随机发生器)3、源程序(程序语言实现阶段,禁止使用goto语句)4、测试数据及结果五、心得体会六、参考文献说明:此文件为实验报告的格式和内容,实验者请将四、五、六中的相关内容补充完整。
linux系统下用C语言实现小学算术运算测试程序

在linux系统下用C语言实现小学算术运算测试程序XX大学软件学院小学算术运算测试程序1、题目与要求我计划编写的题目是:小学算术运算测试程序。
制作一个可供小学数学运算的程序:10 以内加减法,能根据输入题数出题,判断题是否正确,最后计算分数。
并用 make 工程管理器编译,编写 makefile 文件。
2、内容及主要任务小学算术运算测试程序:要求完成 10 以内的加减运算。
能根据用户输入的想要练习的题目数自行出题。
用户输入答案后可以判断正误,并能给出算对及算错的题目数,最后计算出分数。
同时,对于用户算错的题目会发出报警声,提示用户注意,同时给出正确结果。
做完一次测试后用户可决定是否继续进行下一次测试。
3、题目设计意义通过本课题的毕业设计,熟悉了关于 linux 下 C 语言的系统软件程序设计,可以比较深入的了解和掌握 WINSOCK 控件基本属性、方法和事件,理解网络聊天通信的概念,输控制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法。
并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。
随着计算机网络技术的快速发展,人们的交流方式越来越多,传统的通信方式在速度和可靠性方面已经很难满足人们的需要,即时通信系统已成为人们的新宠。
同时,即时通信系统对现代企业也有着重大意义,它为诸企业开拓了网络应用的新领域。
自从它诞生以来,以实时交互、资费低廉等优点,受到广大个人用户的喜爱,已经成为网络生活中不可或缺的一部分。
本着学以致用的原则,本人开发了这套多点聊天系统,以满足网络用户的通讯需求。
该系统具有操作简单、界面友好、功能专一等特点。
本报告就系统的开发过程做了详细的介绍,并对系统的原理、总体设计等方面做了深入细致的讨论。
4、主要内容本程序共分为五个模块:出题模块、答题模块、检查计分模块、评分模块和评价模块;下面分别对这五个模块的算法做一下介绍。
(1)出题模块:一个答题系统自然而然首先就是要有题目且能够根据条件出题;在本模块中,首先设了一个含有 15 个指针的指针数组,指针数组里的每个指针都指向了相应题号的 1 选择题,这样就实现了对题目的储存;然后用 scanf 函数来实现从键盘上输入题号,用 if 语句控制输题的范围;题号不在 1--15 的范围内就提示选题出错;在输入题号的过程中输入相同题号是在所难免的;但是在答题系统中输入相同题号显然没有意义,所以另外设了一个静态一维数组来储存已输过的题号;且数组的第一个元素初始化为 0,然后每输入一个题号就赋给这个数组,同时用 for 语句来使当前的题号一一与储存在一维数组中已输过的题号进行比较,如题号有相同,就提示重答,重答的功能是通过对出题模块函数的递归调用来实现的,如题号没有相同,就通过输入的题号借助指针数组里的指针找到与题号对应的选择题, puts 函数来实现对选择题的输出;用最后用 return 语句将其他模块返回来每道题的小分数返回到主函数中(在主函数中调用出题模块函数)。
c语言课程设计——小学数学出题系统

通信工程C语言强化训练实验报告学号:姓名:提交日期:成绩:评语:教师签字:小学数学出题系统1、强化训练目的a)C语言基本知识的巩固和综合运用。
基本数据类型、基本控制结构、数组、指针、函数、结构体和共用体。
b)C语言高级编程。
链表基本操作、文件的基本操作、图形和声音制作。
c)程序的结构化设计。
d)编辑、设置、编译、调试、执行。
e)C语言结合实际问题的综合设计。
2、设计题目功能为小学生教学服务,能够根据小学生的需要随机抽出两位数的数学运算题,可根据需要进行加减乘除运算。
由学生在电脑上答题,并对其判断正误和记分。
3、设计题目要求两位数四则云算的出题功能答案判断正误功能分数累积功能:4、程序流程图5、主要代码5;0;[1000]={0}[1000]={0};00;("*****************小学数学出题系统*******************\n"); (" 指导老师: \n");(" 完成学生: \n");(" 完成时间:年月日 \n");(" \n\n");("请输入题目数(1-1000)");(k<1>1000){ ("\n超出允许范围\n");("请再次输入题目数\n");("请选择出题方式:0.加法 1.减法 2.乘法 3.除法 4.随机\n");("\n********************开始答题************************\n"); (0<)()%100;()%100;(4)()%4;(00)("\n第题:"1);(""[i]);[i];(11)(a>b)("\n第题:"1); (""[i]);[i];("\n第题:"1); (""[i]);[i];(22)("\n第题:*"1); (""[i]);[i]*b;(33)(00)*b;("\n第题:"1);(""[i]);[i];()%100;(00);()%100;*b;("\n第题:"1);(""[i]);[i];("结果和正确答案:\n");(0<)([i][i])(":正确 \n"1[i]);(":错误 \n"1[i]);100*;("\n总得分(百分制):\n");(<60) ("很遗憾!你的分数不与格,继续努力\n");("恭喜!你的成绩合格\n");("*****************************************************\n");6、运行程序示例第一个图反应执行加法的结果第二个图反应执行减法的结果第三个图反应执行乘法的结果第四个图反应执行除法的结果第五个图反应执行随机的结果7、强化训练心得体会本程序在刚开始调试时有许多错误,出现过不能运行、不能随机出现四则运算、不会输出正确结果、选择乘法却出现减法等等问题。
小学生四则运算测试系统设计说明书

考试
查 看 成 排行榜 个人信息
登 注 分 一 二三 查 查 下查 修 成
录 册 类 级 级级 看 看 载看 改 绩
功 功 练 难 难难 近 试 试排 个 信
能 能 习 度 度度 期 题 题行 人 息
成 记 记榜 成 统
绩录录
绩计
折
线
图
图 3.1 系统结构图
3.2 模块描述
基本模块
目的意义
登 录 / 注 册 用户可以通过用户名和密码登录网站,还没有注册的用户可以点击“点
用户 信息
用户信息 用户信息
小学生
P6 进行考试
试题记录 D2
试题 答案
试题记录表 试题记录
P7 查看成绩
用户 信息
用户信 息
P3 修改信息
用户信息
答案记
录 P4 进行练习
成绩记录 D3 成绩记录表
用户信息
D1 小学生信息 表 用户信息
P2 登录账户
P5 查看成绩
用户信息
图 1.3 底层小学生数据流图
模块
册信息进行修改,查看个人成绩情况,私人订制待扩充。
3.3 功能
登录/注册模块: 用户输入自己的用户名和密码,若还没有账号,用户可以注册账号, 登录之后进入系统主页;若当前用户存在,则验证用户名和密码是否匹配,若不匹配,则提 示“密码错误!”,若匹配,则进入网站主页面。
练习模块:学生登录后,点击主页(选择加减乘除)的开始练习按钮进行分类练习,每 做完一道题,系统都会给出判断,错误系统会给出正确答案。每次显示 5 道题,做完点击换 一组题按钮,没有做题数量限制。此外,练习不计入成绩,练习结束后点击返回主页即可。
P1 登录账户
教师信息
C语言课程设计-小学生算术四则运算测试系统

武汉理工大学华夏学院课程设计报告书课程名称: C语言程序设计题目:小学生算术四则运算测试系统系名:信息工程系专业班级:计算机1102班*名:**学号:***********指导教师:2011年6月24 日课程设计任务书学生姓名:徐立专业班级:计算机1102指导教师:工作单位:信息工程系设计题目:小学生算术四则运算测试系统初始条件:选择结构(if语句),变量的定义,输入.输出函数,产生随机函数,goto语句要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)主要任务:1.为小学生出题(分别进行+、-、*、÷等不同运算)2.学生做题后,进行评阅;3.学生每做一题后,评阅时给出“答题正确,很好”或“答题错误,重做”等字样;4.加、减、乘、除运算功能可以自由选择实现;5.运算数值可以控制在两位(或三位)数的四则运算范围内。
设计报告撰写格式要求:论文需要有以下必须章节:第一章需求分析(包含系统主要完成具体任务、系统模块设计)第二章系统实现(包含开发环境、模块流程图)第三章系统调试与测试第四章结束语(包含总结、心得)附录(源代码)标题编号要统一,例如:第三章编目为:3、3.1 、3.1.1 最多使用三级标题项目编号统一为先是1 然后是(1)再其次是①。
章节一级标题使用2号、黑体加粗、居中对齐,二级标题使用小2,黑体,三级标题使用小3,黑体,正文统一使用小4,宋体。
论文必须要有目录论文装订顺序:封面->任务书->正文->封底时间安排:6月20日上午布置题目、宣讲课程设计要求6月20日下午学生选题、查阅资料和参考资料6月21日---6月23日上午完成课程设计6月23日下午验收学生程序6月24日验收学生报告指导教师签字:年月日系主任签字:年月日目录1.需求分析 (4)1.1系统主要完成具体任务 (4)1.2系统模块设计 (4)1.3模块具体说明 (4)2.系统实现 (5)2.1开发环境 (5)2.2模块流程图 (5)3.系统调试与测试 (6)3.1启用界面 (6)3.2加法界面 (6)3.3减法界面 (7)3.4乘法界面 (7)3.5除法界面 (8)3.6推出界面 (8)4.结束语 (9)5.总结 (9)附件:主要源程序代码 (9)1.需求分析1.1系统主要完成具体任务编写小学算术运算测试系统,要求完成两位数的加,减,乘,除四则预算。
C语言四则运算

机电学部课程设计题目:小学生算术四那么运算测试程序姓名:黄超学号:202112110118班级:计算机科学与技术课程:程序设计方法学任课老师:顾保磊2021年6月28日课程设计任务书及成绩评定目录背景 (1)摘要 (1)功能要求................................................... . (2)设计流程 (3)程序执行 (4)程序 (5)程序 (6)程序 (7)程序 (8)实验结果 (9)实验结果 (10)实验心得…………………………………………....….. .11背景伴随着人类社会的进步,人们的计算工具也在不断的变化,从远古时期的结绳计数,到算筹,算盘,以及近代的机械计算机、计算尺,直至今天我们广泛运用的电子计算机。
计算工具的每一次进步,都导致科学技术发生深入的革命。
人类最初是用手指来作为记数和计算工具的。
在古代,人们还广泛地使用过筹码和结绳来作为记数和计算的工具,其中筹码可能采用石子、木棍、滑片等,每一个可以单独使用也可用工具在其刻上道使用。
我们中华民族的祖先,在公元前5世纪以前开场使用算筹。
利用算筹记数,用笔写下来就是筹算数字,当时这在世界上是非常先进的。
而作为我们的祖先对世界文明的重大奉献——四大创造之一的珠算盘,那么是人类经过设计加工,制造出来的第一种计算工具。
十六世纪以来,随着机械设计和制造程度的进步,同时也为了满足日益复杂的计算要求,许多科学家设计制造了以齿轮为主要构件的机械式计算机。
自从上个世纪四十年代电子计算机的创造,人类计算工具的开展进入了一个新纪元。
计算机以人类技术史上前所未有的高速度开展着,其主要构件由电子管、晶体管、集成电路,一直开展到运用超大规模集成电路。
计算机的计算速度也从每秒几千次算术计算,进步到每秒上万亿次算术计算。
摘要小学生四那么运算,是利用VC++软件编写的一程序,电脑可随机的出10道四那么运算题,每题非常。
答题者输入需要运算的数,其中要求算式面向小学1~2年纪,数的大小不超过50且运算的结果必须在0~50之间,答题者有三次答题时机,在这三次时机之内答出,系统会自动根据答案的正确与否,得出分数,按照相应的分数给出级别,80-90显示“GOOD〞,70-80显示“OK〞,60-70显示“PASS〞,60以下“TRY AGAIN〞功能要求题目:小学生算术四那么运算测试程序面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。
c++课程设计-小学生四则运算练习系统

radioButton1 radioButton2 radioButton3 续表: 控件
Font Text -
属性
值
说明
radioButton4 实现计时功能所用到的控件如表3。
表 3 计时器所用控件
控件 label6
属性 Font Text
值 小三 计时器 宋体,10.5pt 确定,停止 1000
值 宋体,10.5pt;登录 宋体,10.5pt 空 宋体,10.5pt 用户名,密码
说明 字体,字号,文本 字体,字号 用户输入的文本 字体,字号 文本
运算窗口所涉及到的控件如表 2。
表 2 运算窗口所用控件
控件 button1 button2 textBox1 textBox2 textBox3 groupBox1
属性 Font Text Font Text Font Text
值 宋体,10.5pt 确定,关闭 宋体,10.5pt 空 宋体,10.5pt 计算 宋体,10.5pt +、-、*、/、= Button1 Button2 小学生四则运算练 习 根据图片设置 StrethImage 宋体,10.5pt +、-、*、/ -
this->label1->Text=RBtn->Text; (2)将多个事件连接到单个事件处理程序: 在应用程序设计过程中, 可能需要将单个事件处理程序用于多个事件或者说需 要让不同控件的同一事件相应同一个事件处理程序。在窗体上有一组RadioButton 控件,可创建单个Click事件处理程序,并将每个控件的Click事件都绑定到该事件 处理程序上。具体过程如下: 1)配合Ctrl键,用鼠标选中所有要将事件处理程序连接到的RadioButton控件。 2)在【属性】窗口中,单击【事件按钮】,切换到事件操作界面。 3)单击要处理的事件名称Click。 4)在事件名称旁边的值区域中,输入事件处理程序名称Operator_Clicked。然 后双击该事件, 切换到 【代码】 编辑窗口。 将设计的代码添加到该事件处理程序中。 5)若要将该事件绑定到现有事件处理程序,则在事件名称旁边的值区域中单 击下拉按钮, 显示现有事件处理程序列表, 这些事件处理程序与要处理的要处理的 事件的方法签名匹配。 从该列表中选择适当的事件处理程序, 将该事件绑定到现有 的事件处理程序。 (3)实现四则运算的主要代码: 首先定义 3 个 Double 型的变量 a、b 和 c,a 和 b 用于显示随机生成的两个数 据,c 表示用户输入的数据。 Double a,b,c,t; a=System::Convert::ToDouble(textBox1->Text); b=System::Convert::ToDouble(textBox2->Text); c=System::Convert::ToDouble(textBox3->Text); 我们以加法为例,对 if-else 循环结构进行说明。 if(label1->Text=="+") { if(a+b==c) {if(MessageBox::Show(" 回 答 正 确 , 是 否 继 续 ?","Information",MessageBoxButtons::YesNo)==System::Windows::Forms::DialogR esult::Yes) { Random^ r=gcnew Random(System::DateTime::lisecond); textBox1->Text=r->Next(100).ToString(); textBox2->Text=r->Next(100).ToString(); textBox3->Text=""; } else
C语言小学生四则运算考试系统课程设计

C语言小学生四则运算考试系统课程设计代码部分:#include"stdio.h"#include "windows.h"#include<time.h>#include<stdlib.h>#include<conio.h>#define N 3struct stu{int num;char name[12];int score;}em[N],max;void input();void menu_admin();void search();void search_num();void search_name();void cal_score();void sort();void del();int *p;void mune_admin(){int k=0;printf("请根据提示选择:\n");printf("1.查询系统\n");printf("2.删除系统\n");printf("3.排序\n");scanf("%d",&k);switch(k){case 1:search();break;case 2:del();break;case 3:sort();break;}}void input(){int i;printf("请输入你的信息:\n");for(i=0;i<N;i++){printf("请输入学生的学号:\n");scanf("%d",&em[i].num);printf("请输入学生姓名:\n");scanf("%s",&em[i].name);printf("请完成下列题目得出你的成绩:\n");cal_score();em[i].score=*p;getchar();}mune_admin();}void cal_score(){int a[10],b[10],d[10],c[10],num=0,result,score=0;double va1;char fa[5]={'+','-','*','/'};p = &score;srand((unsigned)time(NULL)); // 出10道题10while(1) { d[num]=abs(rand())%4;// 保证出题算法的随机性while(1) // 保证出题成功{c[num]=-1; //保存计算结果a[num]=abs(rand())%100;b[num]=abs(rand())%100;if(d[num]==0) c[num]=a[num]+b[num];else if(d[num]==1) c[num]=a[num]-b[num];else if(d[num]==2) c[num]=a[num]*b[num];else if(d[num]==3){ if(b[num]>0){va1=1.0*a[num]/b[num]; }else { va1=-1; } }if(d[num]<=2){if(c[num]>=0 && c[num]<=100) // 保证计算结果在0-100之间27break;}else{if(a[num]==va1*b[num] && va1>=0){c[num]=va1; break;}}}num++;if(num==10) break;}num=0; //回答41while(1){printf("%d %c %d= ",a[num],fa[d[num]],b[num]);scanf("%d",&result);if(result==c[num]){printf("回答正确!\n");score+=10; }else printf("错误,正确答案: %d\n",c[num]);num++;if(num==10) break;}printf("\n成绩:%d\n",score);}void sort(){int i,j;printf("排序前:\n");for(i=0;i<N;i++){printf("学号\t姓名\t成绩\n");printf("%d\t%s\t%d\n",em[i].num,em[i].name,em[i].score);}for(i=0;i<N;i++){for(j=0;j<N-1;j++){if(em[j].score<em[j+1].score){max=em[j];em[j]=em[j+1];em[j+1]=max;}}}printf("排序后:\n");for(i=0;i<N;i++){printf("学号\t姓名\t成绩\n");printf("%d\t%s\t%d\n",em[i].num,em[i].name,em[i].score);}mune_admin();}void search(){int t=0;printf("请根据提示选择:\n");printf("1.学号查询\n");printf("2.姓名查询\n");printf("请输入你的选择1/2\n");scanf("%d",&t);switch(t){case 1:search_num();break;case 2:search_name();break;}mune_admin();}void search_num(){int num,i;printf("请输入你要查找的学号:");scanf("%d",&num);for(i=0;i<N;i++){if(num==em[i].num){printf("找到此人\n");printf("学号\t姓名\t成绩\n");printf("%d\t%s\t%d\n",em[i].num,em[i].name,em[i].score);break;}if(i==N-1){printf("查无此人\n");}}}void search_name(){char name[12];int i;printf("请输入你要查找的姓名:");scanf("%s",&name);for(i=0;i<N;i++){if(strcmp(em[i].name,name)==0){printf("找到此人\n");printf("学号\t姓名\t成绩\n");printf("%d\t%s\t%d\n",em[i].num,em[i].name,em[i].score);break;}if(i==N-1) {printf("查无此人\n");}}}void del(){int i,k,j,num;char a = '\0';printf("请输入你要删除的学号:");scanf("%d",&num);for(i=0;i<N;i++){if(num==em[i].num){printf("找到此人\n");printf("学号\t姓名\t成绩\n");printf("%d\t%s\t%d\n",em[i].num,em[i].name,em[i].score);printf("确认删除输入1 ,取消删除输入2\n");scanf("%s",&k);if(k==1){/* em[i].num=0;strcpy(em[i].name,a);em[i].score=0;*/for(j=i;j<N-1;j++){em[j].num=em[j+1].num;strcpy(em[j].name,em[j+1].name);em[j].score=em[j+1].score;}}else if(!k==1){break;}}}printf("删除后:\n");printf("学号\t姓名\t成绩\n");printf("%d\t%s\t%d\n",em[i].num,em[i].name,em[i].score);search();}void main(){input();}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#ifndef H_STUDENT_HH#define H_STUDENT_HH#include "stdio.h"#include "string.h"#include "malloc.h"#define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/ #define numsubs 5 /*学科数目*/typedef struct message_student /*结构体定义*/{char number[6];char name[20];char sex[4];float subject[numsubs];float score;float average;int index;}student;extern int numstus; /*学生数目*/extern student *pointer; /*指向结构体数组*/extern int lens;int menu_select(); /*函数声明*/int openfile(student stu[]);int findrecord(student stud[]);int writetotext(student stud[]);void welcome();void display1();void showtable();void sort(student stu[]);void deleterecord(student stu[],int i);void addrecord(student stud[]);void display(student stud[],int n1,int n2);void amendrecord(student stud[]);void count(student stud[]);void sortnum(student stud[]);void sortnum2(student stud[]);void sortname(student stud[]);void sortname2(student stud[]);void sortcount(student stud[]);void sortcount2(student stud[]);void statistic(student stud[]);void display1();#endif//#include "head.h"int menu_select(){char c;printf("\n\n");printf(" | 1. 增加学生记录 5.统计信息 |\n");printf(" | 2. 查询学生记录 6.打开文件 |\n");printf(" | 3. 修改学生记录 7.保存文件 |\n");printf(" | 4. 学生纪录排序 8.显示记录 |\n");printf(" | 0. 退出系统 |\n");printf("\n\n");printf("请选择(0-8):");c=getchar();getchar();return (c-'0');}//#include "head.h"int findrecord(student stud[]) /*查找信息*/{char str[2];int i,num;if(numstus==0){printf("没有可被查找的记录\n");return -1;}else{printf("以何种方式查找?\n1.学号\t2.姓名\t3.名次\n"); gets(str);if(str[0]=='1') /*按学号查找*/{printf("请输入学号:");gets(str);for(i=0;i<=numstus;i++)if(strcmp(str,stud[i].number)==0) {display(stud,i,i);break;}else continue;}else if(str[0]=='2') /*按姓名查找*/ {printf("请输入姓名:");gets(str);for(i=0;i<=numstus;i++)if(strcmp(str,stud[i].name)==0) {display(stud,i,i);break;}else continue;}else if(str[0]=='3') /*按名次查找*/ {printf("请输入名次:");scanf("%d",&num);getchar();for(i=0;i<=numstus;i++)if(num==stud[i].index){display(stud,i,i);break;}else continue;}if(i>numstus){printf("没有查找所要的信息。
\n"); return -1;}return i;}}//#include"head.h"int openfile(student stu[]){int i=0,j;char filename[20],str[2];if(numstus!=0){printf("已经有记录存在,是否保存?(y/n)"); gets(str);if(str[0]=='y'||str[0]=='Y')writetotext(stu);}printf("请输入文件名:");gets(filename);numstus=0;if((fp=fopen(filename,"rb+"))==NULL){printf("无法打开该文件\n");return(-1);}fscanf(fp,"%d",&numstus);fgetc(fp);while(i<numstus){fscanf(fp,"%s",stu[i].number);fscanf(fp,"%s",stu[i].name);fscanf(fp,"%s",stu[i].sex);for(j=0;j<numsubs;j++)fscanf(fp,"%f",&stu[i].subject[j]);fscanf(fp,"%f",&stu[i].score);fscanf(fp,"%f",&stu[i].average);fscanf(fp,"%d",&stu[i].index);i++;}fclose(fp);printf("文件读取成功\n");printf("是否显示纪录?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y')display(stu,0,numstus-1);return(0);}//#include "head.h"void sort(student stud[]){int i,j=0;char str[5];p=stud;if(numstus==0){printf("没有可供查询的记录!");}while(1){for(i=0;;i++){printf(" 请输入查询方式:");printf("(直接输入回车则结束查询操作)\n"); printf("1.按照学号\t");printf("2.按照姓名\t");printf("3.按照名次\n");gets(str);if(strlen(str)==0) break;if(str[0]=='1'){printf("请输入排序次序:\n");printf("1.升序排列\t");printf("2.降序排列\n");gets(str);if(str[0]=='1')sortnum2(p);elsesortnum(p);display(stud,0,numstus-1);}else if(str[0]=='2'){printf("请输入排序次序:\n");printf("1.升序排列\t");printf("2.降序排列\n");gets(str);if(str[0]=='1')sortname2(p);elsesortname(p);display(stud,0,numstus-1);}else if(str[0]=='3'){printf("请输入排序次序:\n");printf("1.升序排列\t");printf("2.降序排列\n");gets(str);if(str[0]=='1')sortcount2(p);elsesortcount(p);display(stud,0,numstus-1);}else printf("请输入1~3");printf("是否退出排序?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y') break;}return;}}void sortnum(student stud[]){int i,j;student temp;student *p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j+1].number,stud[j].number)>0) {temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}void sortnum2(student stud[]){int i,j;student temp;student *p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j].number,stud[j+1].number)>0){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}void sortname(student stud[]){int i,j;student temp;student *p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j+1].name,stud[j].name)>0) {temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}void sortname2(student stud[]){int i,j;student temp;student *p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j].name,stud[j+1].name)>0) {temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}void sortcount(student stud[]){int i,j;student temp;student *p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(stud[j+1].index>stud[j].index){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}void sortcount2(student stud[]){int i,j;student temp;student *p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(stud[j].index>stud[j+1].index){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}//#include"head.h"void statistic(student stud[]) /*新增功能,输出统计信息*/ {int i,j=0,k=0;char c1,str[2];float average[numsubs],sum=0;if(numstus==0)printf("没有可被查找的记录\n");else{while(1){printf("下面将统计考试成绩\n");printf("请选择你要统计哪科的成绩 1.A\t2.B\t3.C\t4.D\t5.E\n");c1=getchar();printf("\t一共有个%d记录\n",numstus); /*总共记录数*/switch(c1){case '1':for(i=0;i<numstus;i++) /*循环输入判断*/{sum+=stud[i].subject[0];if(stud[k].subject[0]>stud[i].subject[0]) k=i;if(stud[j].subject[0]<stud[i].subject[0]) j=i;}average[0]=sum/numstus;printf("\t科目A的最高分:\n"); /*最高分*/printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);printf("\t科目A的最低分是:\n"); /*最低分*/printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);printf("\t科目A的平均分是 %5.2f\n",average[0]); /*平均分*/break;case '2':for(i=0;i<numstus;i++) /*循环输入判断*/{sum+=stud[i].subject[1];if(stud[k].subject[1]>stud[i].subject[1]) k=i;if(stud[j].subject[1]<stud[i].subject[1]) j=i;}average[1]=sum/numstus;printf("\t科目B的最高分:\n"); /*最高分*/printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);printf("\t科目B的最低分是:\n"); /*最低分*/printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);printf("\t科目B的平均分是 %5.2f\n",average[1]); /*平均分*/break;case '3':for(i=0;i<numstus;i++) /*循环输入判断*/{sum+=stud[i].subject[2];if(stud[k].subject[2]>stud[i].subject[2]) k=i;if(stud[j].subject[2]<stud[i].subject[2]) j=i;}average[2]=sum/numstus;printf("\t科目C的最高分:\n"); /*最高分*/printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);printf("\t科目C的最低分是:\n"); /*最低分*/printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);printf("\t科目C的平均分是 %5.2f\n",average[2]); /*平均分*/break;case '4':for(i=0;i<numstus;i++) /*循环输入判断*/{sum+=stud[i].subject[3];if(stud[k].subject[3]>stud[i].subject[3]) k=i;if(stud[j].subject[3]<stud[i].subject[3]) j=i;}average[3]=sum/numstus;printf("\t科目D的最高分:\n"); /*最高分*/printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);printf("\t科目D的最低分是:\n"); /*最低分*/printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);printf("\t科目D的平均分是 %5.2f\n",average[3]); /*平均分*/break;case '5':for(i=0;i<numstus;i++) /*循环输入判断*/{sum+=stud[i].subject[4];if(stud[k].subject[4]>stud[i].subject[4]) k=i;if(stud[j].subject[4]<stud[i].subject[4]) j=i;}average[4]=sum/numstus;printf("\t科目E的最高分:\n"); /*最高分*/printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);printf("\t科目E的最低分是:\n"); /*最低分*/printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);printf("\t科目E的平均分是 %5.2f\n",average[4]); /*平均分*/break;default:printf("输入错误!请输入1~5之间的数\n");}sum=0;getchar();printf("是否继续进行统计?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y') ;else break;}}}int writetotext(student stud[]) /*将所有记录写入文件*/{int i=0,j;FILE *fp;char filename[20];printf("输入文件名称:");gets(filename);fp=fopen(filename,"w");fprintf(fp,"%d\n",numstus);while(i<numstus){fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex);for(j=0;j<numsubs;j++)fprintf(fp,"%f ",stud[i].subject[j]);fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index);i++;}fclose(fp);printf("已成功存储!\n");display(stud,0,numstus-1);numstus=0;return 0;}void welcome(){printf("\t*************************************************************\n"); printf("\t\t\t\t**学生成绩管理系统**\n\t\t\t\t 倾情奉献欢迎使用!\n");printf("\t*************************************************************\n"); }void showtable(){printf("---------------------------------------------------------------------------------------\n");printf("学号\t姓名\t性别\tA\tB\tC\tD\tE\t总分\t平均分\t名次\n");printf("---------------------------------------------------------------------------------------\n");}void display(student stud[],int n1,int n2){int i;showtable(); /*显示表头*/for(i=n1;i<=n2;i++)printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud[i].nu mber,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subj ect[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[ i].index);/*通过循环输出数据*/}void display1(){printf("\t\t本系统由计科二班制作\n\n");printf("\t\t制作人员列表: \n\n");printf("\t\t殷增锋\t\t\t邵超\n");printf("\n\n");getchar();}#include<string.h>void amendrecord(student stud[]){char str[5]; /*供用户输入*/int i=-1,j;if(numstus==0) /*没有记录返回*/printf("没有可供修改的记录!");while(i<0){i=findrecord(stud);if(i>=0){printf("要删除这个学生的信息吗?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y'){deleterecord(stud,i);count(stud);}else{printf("确定要修改这个学生的信息吗?(y/n)"); gets(str);if(str[0]=='y'||str[0]=='Y'){printf("下面请重新输入学生的信息:\n");printf("请输入学号:");gets(stud[i].number);printf("请输入姓名:");gets(stud[i].name);printf("请输入性别(男/女 1/0):");gets(str);if(str[0]=='0')strcpy(stud[i].sex,"女");elsestrcpy(stud[i].sex,"男");stud[i].score=0;printf("请按顺序输入成绩:");for(j=0;j<numsubs;j++){scanf("%f",&stud[i].subject[j]);stud[i].score+=stud[i].subject[j];}getchar();stud[i].average=stud[i].score/numsubs;}count(stud);}display(stud,0,numstus-1);}printf("是否继续进行其他修改?(y/n)\n");gets(str);if(str[0]=='y'||str[0]=='Y')i=-1;else i=1;}}void deleterecord(student stu[],int i) /*删除信息*/ {int j;while(i>=0){for(j=i;j<numstus;j++)stu[j]=stu[j+1];numstus--;printf("删除成功!\n");}}void count(student stud[]){int i,j;for(i=0;i<numstus;i++){stud[i].index=1;for(j=0;j<numstus;j++)if(stud[j].score>stud[i].score)stud[i].index++;}}void addrecord(student stud[]){int i=0,j,num;char str[5];if(numstus!=0){printf("已有记录存在是否覆盖?(y/n)\n");gets(str);if(str[0]=='Y'||str[0]=='y')i=0;else i=numstus;}printf("请输入增加的学生信息条目数:");scanf("%d",&num);if(i==0)numstus=num;else numstus+=num;if(numstus>lens){lens+=50;pointer=(student *)realloc(pointer,lens*LEN);}printf("请输入学生信息:\n");for(;i<numstus;i++){getchar();printf("请输入学号:");gets(pointer[i].number);printf("请输入姓名:");gets(pointer[i].name);printf("请输入性别(男/女 1/0):");gets(pointer[i].sex);if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");else strcpy(pointer[i].sex,"男");printf("请输入各科成绩:(按"语文,数学,英语,历史,政治"的顺序):"); stud[i].score=0;for(j=0;j<numsubs;j++){scanf("%f",&stud[i].subject[j]); /*计算总分*/stud[i].score+=stud[i].subject[j];}stud[i].average=stud[i].score/numsubs; /*计算平均分*/}count(stud); /*附名次*/display(stud,0,numstus-1);getchar();}int numstus;int lens;student *pointer;void main(){int i=1;char str[2];lens=100;pointer=(student *)malloc(lens*LEN); /*分配内存*/numstus=0;welcome(); /*欢迎界面*/while(i>0){i=menu_select(); /*控制菜单*/switch(i){case 1:addrecord(pointer);break; /*增加学生信息*/case 2:findrecord(pointer);break; /*查询学生信息*/case 3:amendrecord(pointer);break; /*修改学生信息*/case 4:sort(pointer);break; /*学生信息排序*/case 5:statistic(pointer);break; /*统计信息*/case 6:openfile(pointer);break; /*打开文件*/case 7:writetotext(pointer);break; /*保存文件*/case 8:display(pointer,0,numstus-1);break; /*显示记录*/ case 0:if(numstus!=0) printf("是否保存当前记录?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y')writetotext(pointer);i=-1;break; /*退出系统*/default:printf("请输入数字0~8:\n");i=1; /*输入错误*/}}printf("\t\t欢迎再次使用本系统。