版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、北京联合大学 实训报告 课程名称: C 语言程序设计课 项目名称: 学籍管理系统 学 院: 自动化学院 专 业 信息处理与智能技术 姓 名: 杜旭亮 陶晓申 付娟 学 号: _ 指导教师: 李论 成 绩: 2011 年 6 月 19 日 目录目录 一、实训题目与要求一、实训题目与要求.- - 2 2 - - 1. 问题提出.- 2 - 2.功能要求 .- 2 - 3.任务分工 .- 2 - 二、设计实训题目功能二、设计实训题目功能.- - 4 4 - - 总体设计 .- 4 - 学籍管理系统实训报告 03,13,23 学员 - 1 - 算法设计 .- 6 - 1 ,分析录入成绩模块算法 .-
2、7 - 2.分析成绩统计的算法 .- 7 - 3.学籍处理 .- 11 - 4.创新功能 .- 15 - 结构体说明 .- 4 - 程序代码设计 .- 19 - 测试与调试 .- 20 - 三个人总结三个人总结.- - 2323 - - 杜旭亮的个人小结 .- 23 - 陶晓申的个人小结 .- 23 - 付娟的个人总结 .- 24 - 四结束语四结束语.- - 2525 - - 附表附表 1.1.程序源码程序源码 .- - 2525 - - 附录附录 2 2 用户使用说明书用户使用说明书.- - 4242 - - 参考文献参考文献.- - 4242 - - 学籍管理系统实训报告 03,13,2
3、3 学员 - 2 - 一、实训题目与要求一、实训题目与要求 1. 问题提出问题提出 为了分析教学成果并进行相应的学籍处理,各学校每到期末都对综合成绩进行 分类统计、上报成绩汇总结果等,这给每位教师和学籍管理人员带来很大的工作量。 使用学籍管理系统可以减少工作者的工作负担。 2.功能要求功能要求 循环显示如图(a)所示的主菜单。 请输入选项编号(04) 请输入选项编号(04) 请输入选项编号(04) 1-录入成绩 1-按学号排序 1-生成并打印补考通知单 2-统计成绩 2-按平均分排序 2生成并打印退学名单 3-处理学籍 3统计各分数段人数 3生成并打印新名单 4-创新功能 4-返回 4-返回
4、0-退出系统 0-退出系统 0-退出系统 (a) (b) (c) 在主菜单中选择 1:录入成绩。假设某班的原始成绩单如下: 学号 姓名 高数 英语 编程 电路 法律 03 zhanghe 89 92 88 79 97 13 wangpei 72 86 94 83 77 23 lifeng 91 84 90 79 83 。 。 。 。 。 。 其中,原始数据的排列时无序的。系统应能够保留原始成绩单。 在主菜单选择 2:进入图(b)子菜单并统计成绩。在此可以计算平均成绩,统计各 分数段人数,按学号排序,按平均分排序。在子菜单选择 1 时,将该班学生的成绩 单按学号生序排列后存放在“按学号排序.tx
5、t.”文件中。在子菜单选择 2 时,将该班 学生的成绩单按平均分降序排序后存放在“按平均分排序.txt”文件中。在子菜单选 择 3 时,统计各分数段人数,并如表 12.1 所示的形式输出。在子菜单选择 4 时,返 学籍管理系统实训报告 03,13,23 学员 - 3 - 回主菜单,选择 0 时,退出系统。 表 12.1:各门课、各分数段人数统计 90 分以上8089 分7079 分6069 分60 分以下 高数 英语 编程 电路 法律 在主菜单选择 3:进入如图(c)所示的子菜单,并处理学籍。为不及格的同学打印 补考通知单时,应在通知单上写明补考的科目,时间,地点(键盘输入) 。为了参加 多门
6、科目补考的学生,应避免时间重复。为 3 门以上不及格的学生打印退学通知单, 通知单上应打明学生的学号,姓名,退学原因(几门课不及格,成绩是多少) 。删除 已退学的学生,将该班中升入高年级的学生信息写入文件“升学名单.txt”中。在子 菜单选择 4,返回主菜单,选择 0,退出系统。 在主菜单选择 4,此功能学生自由发挥,根据本组爱好增加与本题目相关的新功能。 在主菜单选择 0,显示结束信息,退出系统。 3.任务分工任务分工 组长:杜旭亮。 负责小组程序的输入和创新部分,分配任务,使工作衔接有序。将各部分文件 衔接,查找错误,排版论文。 组员:陶晓申 负责小组程序的处理学籍的部分。主要负责绘制流程
7、图,检查流程的连续,可 操作性。 组员:付娟 负责小组程序的成绩统计的部分。完成自己部分的编程,流程图,组织论文的 创作,主要负责论文部分。 学籍管理系统实训报告 03,13,23 学员 - 4 - 二、设计实训题目功能二、设计实训题目功能 .总体设计总体设计 程序通过主模块调用其他函数来实现各种要求实现的功能。 显示主菜单模块通过调用 myprint 函数显示主菜单,提示使用的用户改执行的 操作,实现基本的人机对话。 创建“学生基本信息.txt”文件由调用 scoreInput 函数通过键盘输入学生的信息。 统计学生信息调用函数 scoreStat,并通过子菜单的选择实现功能。 处理学籍功能
8、调用函数 studentStatus,通过子菜单的选择实现处理学籍的功能。 创新功能由调用函数 mynew,自己编写的新功能由这部分实现。 void mainprint(); /*主输出部分*/ void scoreprint(); /*成绩录入*/ void scoreStat(); /*统计成绩*/ void studentStatus(); /*学籍处理*/ void bukao(); /*生成并打印补考通知单*/ void tuixue(); /*生成并打印退学通知单*/ void xinmingdan(); /*生成并打印新名单*/ void sortAnhao(); /*按学号排序
9、*/ void jisuanPingjun(); /*计算平均分并排序*/ void tongjiFenshu(); /*统计分数段*/ void fenxi(); /*分析学生成绩,算出不及格门数*/ void mynew(); /*创新功能*/ void outstudent(); /*输出单个学生信息*/ void outdanke(); /*输出单科成绩*/ void teshutuixue(); /*非考试退学*/ 学籍管理系统实训报告 03,13,23 学员 - 5 - 开始 录入 成绩 统计 成绩 处理 学籍 创新 功能 退出 输入 学号 输入 姓名 输入 成绩 返回 按学 号排
10、 序 按平 均分 排序 统计 分数 段 补考 名单 退学 名单 升学 名单 返回 图 2.1.1:主模块图 (1)菜单的设计 主函数的作用主要是调用 myprint 函数显示主界面,由于菜单比较简单所 以采用 printf 函数将菜单项注意打印在屏幕上,边框则采用 printf 输出|-拼接起 来实现人机对话的第一步. 然后通过读取用户的输入,调用 switch 函数对用户的输入进行进一步的处理, 并使用 do-while 函数实现用户的选择性的重复操作。 我们为用户提供了一个正常的出口,我们采用人机对话的形式,用户选择某一 菜单以后,程序完成对于的功能,然后询问用户是否继续选择,用户即可退出
11、也可 以继续输入,而且主菜单 0 选项也可正常退出 学籍管理系统实训报告 03,13,23 学员 - 6 - 算法设计算法设计 1 ,分析录入成绩模块算法,分析录入成绩模块算法:创建一个文件“学生基本信息.txt” ,并把从 调用 myprint 函数 输入 choose 的 值 Choose=? 2.调用 scoreStat 3.调用 studentStatus () 4.调用 mynew 1.调用 scoreInput 输入 yes_no yes_no=n 或 N 或 y 或 Y yes_no=y 或 Y 假 真 假 真 开始 结束 0 退出 图 2.1.2 总体设计流程 图 学籍管理系统
12、实训报告 03,13,23 学员 - 7 - 键盘输入的数据(学号、姓名、成绩)存放在该文件中;每写入一组记录,文件记 录数增 1。建立录入成绩模块的流程图如下图所示。 采用先输入一组信息,应用 scanf 输入能有效阻止函数判断值的位置占用,采 用 while 利用输入的信息都是非“#“,用“#”作为信息结束的判断语言。如果没 有输入“#” ,则继续,并且 i+。 结束 开始 i+ 结束 打开文件 打开成功? 输入学生学号 输入学生姓名 输入各科成绩 ex1i.num0!=# ex2i=ex2j; ex2j=temp; 结束程序并存档 jn j+ 真 结束循环 假 i+ 图 2.2.1:按学
13、号排序流程图 2.2,按平均成绩排序:先算每个人的平均成绩,存放,调用,双重循环排序;利 用新定义的数组将成绩平均计算,依次排序,将学生成绩按平均成绩按降序排序 。 学籍管理系统实训报告 03,13,23 学员 - 9 - 开始 打开文件 结束 按成绩排 序 读取文件 信息 成绩排序 i=0 i+ in 退出循环 计算平均成绩 真 假 i=0 i+ in-1 真 假 ji 平均 交换位置 真 真 j+ 结束循环 假 结束程序存档 图 2.2.2:按平均成绩排序 2.3,统计各分数段人数并打印:定义二维数组,将各科成绩转化成 5 个空间的成 学籍管理系统实训报告 03,13,23 学员 - 10
14、 - 绩数组,双重循环,将各个成绩段的人数各次相加,得到最后结果;(如下图) 开始 i+ 打开文件 打开成功? 结束 i=0, j=0 j100|li stij0 e+ t=(int)listij/10 in 真 假 j+ 假 真 真 default:a j4+ 9:aj0+ + 8:aj1+ + 7:aj2+ + 6:aj3+ + 10:aj 0+ 打印并结束总循环 图 2.2.3:统计各分数段人数 学籍管理系统实训报告 03,13,23 学员 - 11 - 3.学籍处理学籍处理:此处分三部分和退出功能;打印补考学生名单;退学名单;升学名 单; 3.1,打印补考学生名单:由于不考需要考试场地
15、,时间,而且互相不能重复,所 以将考试科目,时间,地点都定义为二维字符串,方便输入和计算;补考学生要求 是有一到三门科目不及格,所以要先判断,后计算是否补考; 打开文件 打开成功? 结束 开始 输入补考时间和地点 i=0,j=i+1 i4,j5 strcmp(timei,timej)=0 /*学生学号*/ char name18; /*学生姓名*/ float math; /*数学成绩*/ float english; /*英语成绩*/ float cprogram; /*c 程序成绩*/ float circuit; /*电路设计成绩*/ float law; /*法律基础成绩*/ floa
16、t pingjun; /*平均成绩*/ float score5; /*定义五科成绩数组*/ ; 程序代码设计程序代码设计 以补考函数为例讲解:void bukao() int i=0,j=0,count=0,n=0; char time510=,site515=,sbj510=高数 ,英语,c 语言编程,电路设计,法律基础; 定义循环变量 i,j 并将其清 零,定义参数常量 count,n 控制循环次数;定义二维字符串使输入的各科补考情况 能进入循环。 struct student ex3N=0; 定义结构体数组存放学生信息。 FILE *fp=NULL; 定义文件指针指向文件。 syste
17、m(color 2f); 给运行窗口加色。 fp=fopen(d:学生基本信息.txt,r); 打开之前输入的学生信息。 if(fp=NULL) printf(n 打开文件失败!n); return; 如果没有指向,则显示文件无法 打开。 学籍管理系统实训报告 03,13,23 学员 - 22 - printf(n 欢迎进入生成并打印补考通知单系统!n); while(feof(fp)=0) 打开文件将文件中的内容读出。 fscanf(fp,%3d%15s%16s%f%f%f%f%fn, i+; n+; 以数组形式读取文件便于循环。 fclose(fp); 关闭文件。 for(i=0;i5;i
18、+) 依次输入补考时间地点,循环比较, 如果有冲突,重新输入。 printf(n 请输入%s 的补考时间、地点:,sbji); scanf(%s%s, for(i=0;i4;i+) for(j=i+1;j5;j+) while(strcmp(timei,timej)=0 scanf(%s%s, for(i=0;in;i+) 调用学生信息,统计学生不及 格科目数。 for(j=0;j5;j+) if(ex3i.scorej0 printf(n%15s 学生%d 门课不及格,补考科目、时间、地点:,ex3i. name,count); for(j=0;j5;j+) if(ex3i.scorej60
19、) switch(j) 定义二维字符串将科目数组化, 使之循环。找到对应科目,输出学生考试信息,补考信息。 学籍管理系统实训报告 03,13,23 学员 - 23 - case 0:printf(n 高数:%3.1f, 时间%s, 地点%s,ex3i. scorej,timej,sitej);break; case 1:printf(n 英语:%3.1f, 时间%s, 地点%s,ex3i. scorej,timej,sitej);break; case 2:printf(nc 语言编程:%3.1f,时间%s, 地点%s,ex3i. scorej,timej,sitej);break; case
20、 3:printf(n 电路设计:%3.1f, 时间%s, 地点%s,ex3i. scorej,timej,sitej);break; case 4:printf(n 法律基础:%3.1f, 时间%s, 地点%s,ex3i. scorej,timej,sitej);break; 程序结束。 此外,有几个特别的语言需要说明:此外,有几个特别的语言需要说明: do mainprint(); printf( ); choose=getche( ); switch(choose) case1:scoreInput();break; /*成绩录入*/ case2:scoreStat();break; c
21、ase3:studentStatus();break; case4:mynew();break; case0:break; default:printf(n %c 是非法选项!n);break; if(choose=0) break; printf(n 即将进入主菜单,要继续选择吗(Y/N)?n); do yes_no=getche( ); while(yes_no!=Y while(yes_no=y|yes_no=Y); 学籍管理系统实训报告 03,13,23 学员 - 24 - 使用该语句来实现在用户输入选择项后,程序判断后进入对应模块,并相应 的调用模块使用的函数进行运算,并使用 bre
22、ak 在调用完函数后退出 switch 语句。 然后询问用户是否继续操作,使用 do-while 语句来确认用户的输入的合法性, 并使用使用 getch 语句来读取,然后使用外层的 do-while 判断是否退出循环; 而 myprint 函数简单使用了 printf 语句来显现将主菜单打印在屏幕上的功能。 for(i=0;in-1;i+) for(j=i+1;j0) temp=ex2i; ex2i=ex2j; ex2j=temp; 进行排序时,我们需要先将最开始的学生当成学号最小的学生,用后面的学习 生的学号和他的进行对比,如果后面某个学生的学号筱宇第一个学生的学号,将这 个学生的所有性能系
23、和第一个学生对调,那么这个学生的信息就放在了第一位,如 果后面还有这样的情况,将他们的位置对调。循环完后面所有的学生后就确定了第 一位的学生是学号最小的。然后进行第二个排序,也是和后面的所有学生进行对比, 有符合情况的,交换位置。一次进行到倒数第二个,最后一个就不用比较了,他就 是最大的。 而这部分的模式也是按平均分排序的主要模式。 for(j=0;j5;j+) for(i=0;i100|listij0)e+; else t=(int)listij/10; switch(t) case 10:aj0+;break; case 9:aj0+;break; case 8:aj1+;break; c
24、ase 7:aj2+;break; case 6:aj3+;break; default:aj4+;break; 这部分是各科目各分数段人数统计,我们采用单科学生循环模式,aj中 j 所代 表的科目名称,我们只选取 0100 分的人员进行操作,在实际输入的过程中可能会 学籍管理系统实训报告 03,13,23 学员 - 25 - 有输入的错误,我们将不在分数段的人不纳入统计范围,并且报错,除以 10 可以帮 助我们选择相对应的分数段进行人数的相加。 for(i=0;i5;i+) printf(n 请输入%s 的补考时间、地点:,sbji); scanf(%s%s, for(i=0;i4;i+)
25、for(j=i+1;j5;j+) while(strcmp(timei,timej)=0 scanf(%s%s, 补考的考试时间和地点键盘输入,想将所有的补考信息输入,然后进行比较, 依次使每一科的信息都和其他的相对比,选出时间相互冲突的,再次输入,直至所 有的时间都不相冲。 printf(n 请输入要查学的学生的姓名:); scanf(%s, for(i=0;in;i+) if(strcmp(,ch)=0) printf(n 您查询的是学号为%s 的学生,他的成绩如下: ,ex4i.num); printf(n 高数:%-7.1f,英语:%-7.1f,c 语言编程:%-7.
26、1f,电路设 计:%-7.1f,法律基础:%-7.1fn,ex4i.score0,ex4i.score1,ex4i.score2,ex4i. score3,ex4i.score4); break; if(i=n)printf(n 查无此人.n); 查询单个学生信息,输入学生的姓名,查找,如果有符合的学生,将他的信息 输出且结束循环体,如果没有,即自动断出,那么查询所代表的 i=n,这样,我们就 判断出这个学生的信息不存在。 完整程序请参见附录 A 学籍管理系统实训报告 03,13,23 学员 - 26 - 测试与调试测试与调试 测试数据类型测试数据预期结果实测结果 在主菜单中输入 1进入录入同
27、学学籍菜 单 进入录入同学学籍菜 单 合法数据 在创建同学学籍输入 信息 在”d 盘学生基本信 息.txt”文件存入同 学信息 d 盘学生基本信息. txt 文件有同学信息 在主菜单中输入“a”输出“a 为非法选项”输出“a 为非法选项” 非法数据 在每次完成一项是弹 出“是否继续(Y/N)? ”输入 y 没有反应没有反应 图 2.5.1 开始状态 学籍管理系统实训报告 03,13,23 学员 - 27 - 图 2.5.2 输入 1 之后 图 2.5.3 输入 a 之后 学籍管理系统实训报告 03,13,23 学员 - 28 - 三个人总结三个人总结 杜旭亮的个人小结杜旭亮的个人小结 两周的实
28、训结束了,对于这次 C 语言实训,我非常重视,这次实训我们编辑的 程序不再是简单的模块,而是具有一定应用性的学籍管理系统。我们分到这个系统 时认为这个系统程序调用函数少,可能是这次实训中最简单的,但是在实训开始后 我们就发现,调用函数少,但是做的工作却是最多的。 没有过多的说明,没有这方面的经验,我们在刚开始的时候做的非常辛苦,第 一,二天基本没有什么收获。于是我们就进行严格的分工,将大片的信息处理成一 个一个的模块。 在此次编程中,我负责的是开始的输入部分和最后的创新部分,这来那个部分 都是比较简单的,但是如果用之前我的习惯,这段程序不仅繁杂而且可行性不高, 我开始参考其他程序的输入部分,并
29、找到了实用性较高的一个程序模板,并据此编 写自己的程序。 在编辑运行方面,我发现好多知识的欠缺,最后我负责将程序汇总调整的时候, 有许多程序语言需要翻书才能看明白,在调试环节我发现好多错误,有粗心导致的 丢符号,有逻辑小问题,这都导致运行结果不符合要求,常常一整篇程序,就因为 一个小小的错误而得不到实现,在不断的找寻错误解决错误的过程中,锻炼了我的 耐心和毅力,更让我不懈坚持着。 在这里,我还要特别感谢我的指导老师,他总能在我对编程感到迷茫的时候鼓 励我,让我不要着急,慢慢来,总会变好的。每天他都在为学生们服务,非常辛苦, 谢谢! 两周的实训就要结束了,这两周里,我学到了很多东西,c 语言的实
30、训室是束 了,但我的学习不会结束,这次试训让我认识到了我们的生活中的很多东西都应用 了程序,我将继续我的学习,编写有用的程序。 陶晓申的个人小结陶晓申的个人小结 在这两个星期里,我们在老师的带领下进行了 C 语言程序实践.在这之前我们已经 对这门课程学习了一个学期.但是很多东西都只是停留在了解和书面的知识上.虽然老 师会给我们很多的实践机会,.但像这次我们可以合作完成一个完整的程序还是第一次.我 学籍管理系统实训报告 03,13,23 学员 - 29 - 作为其中的参与者.感触颇多. 在这次的实训中,我对 C 语言有了一个更深的了解和认识,也对这个学期学到的知 识得到了巩固.每次运行程序成功,
31、拿下一个模块的时候,就很兴奋.让我对下面的编辑 就更加充满了信心.通过合作,最终把最初学到的理论知识转化为基本技能.虽然只是 很小的一个项目.但每天我们组都来的很早,大家一起学习.取长补短.我们很好的再实 践中增长知识,提高我们的学习热情.尤其是在这次实训中,组长给了我很大的帮助.每 次有问题他都会细心教我.让我弄明白了很多曾经不懂得东西. 在实训中,让我对 C 语言的热情进一步提高.而且让我深刻的认识到.很多时候,往 往是细节决定成败,因为不管程序的语句是有多少,但只要是有一条语句或者语法不正 确,就不能使程序得到所需要的结果 付娟的个人总结付娟的个人总结 为期两周的 C 语言的实训即将结束
32、了,我们组制作的学籍管理系统也及时的完 成。对于这次 C 语言实训,我对此非常重视,因为通过实训不仅仅是对所学知识的 验证,也是对团队合作,处理好同学关系的锻炼,为毕业后更好的融入社会做准备。 这两周的时间,我们组的同学在组长的带领下攻破了一个又一个的难关,才最 终取得了成功。刚拿到这个题的时候,我们就进行了明确的分工,我觉得这一点是 非常重要的,因为一个大的程序,光靠一个人的精力很难完成,而一个团队恰恰解 决了这个问题。不过团队之间的分工必须要明确,用什么样的函数名,定义什么样 的函数,这些都是需要统一的,要不然到了最后整合的时候还是一团散沙。分工好 后各自开始着手干。 在这个小组中我的实力
33、是最弱的对于有些程序的完成总是力不从心,还好我们 组的队员及时的站在了我身后,指导我如何克服难点,和我一起调试程序,这才没 有拖住大家的后腿。也是我个人的原因,马马虎虎,总会犯一些低级的错误,在以 后的编程中我一定积极改进。 通过这次的实训我知道,C 语言这门课程仅仅靠用耳朵听,脑袋记是不够的, 我们需要更多的时间进行上机的训练,这样才能把知识真正的记牢,熟练的掌握。 而且我认识到其实我们生活中的很多程序或许都是由我们的同龄人所编写,也深刻 认识到 C 语言带给我们的便捷。 很感谢我们的指导老师李论在我们出现问题时给我每们的及时指导,让我们少 走了很多弯路,也谢谢其他组员对我的帮助! 学籍管理
34、系统实训报告 03,13,23 学员 - 30 - 四结束语四结束语 这次实训非常的感谢指导李论老师对我们的帮助,还有同学们在我们遇到困难时能及时伸 出援助之手,帮助我们解决问题,在这里我们组谢谢各位帮助过我们的人因为你们的无私帮助 才使我们顺利地完成任务。 附表附表 1.程序源码程序源码 #include #include #include #include #define N 100 struct student char num13; char name18; float math; float english; float cprogram; float circuit; float
35、law; 学籍管理系统实训报告 03,13,23 学员 - 31 - float pingjun; float score5; ; void mainprint(); void scoreprint(); void studentprint(); void scoreInput(); void scoreStat(); void studentStatus(); void bukao(); /*生成并打印补考通知单*/ void tuixue(); /*生成并打印退学通知单*/ void xinmingdan(); /*生成并打印新名单*/ void sortAnhao(); /*按学号排序*
36、/ void jisuanPingjun(); /*计算平均分并排序*/ void tongjiFenshu(); /*统计分数段*/ void fenxi(); /*分析学生成绩,算出不及格门数*/ void mynew(); /*创新功能*/ void outstudent(); void outdanke(); void teshutuixue(); void main() char choose=0,yes_no=0; do system(color 4f); system(cls); mainprint(); printf( ); choose=getche( ); switch(c
37、hoose) case1:scoreInput();break; /*成绩录入*/ 学籍管理系统实训报告 03,13,23 学员 - 32 - case2:scoreStat();break; case3:studentStatus();break; case4:mynew();break; case0:break; default:printf(n %c 是非法选项!n);break; if(choose=0) break; printf(n 即将进入主菜单,要继续选择吗(Y/N)?n); do yes_no=getche( ); while(yes_no!=Y while(yes_no=y
38、|yes_no=Y); void mainprint() printf( |*|n); printf( | 欢迎使用学籍管理系统 |n); printf( |*|n); printf( | 请输入选项编号(04) |n); printf( |-|n); printf( | 1-录入成绩 |n); printf( | 2-统计成绩 |n); printf( | 3-处理学籍 |n); printf( | 4-创新功能 |n); printf( | 0- 退出 |n); printf( |-|n); void scoreInput() int i=0;char yes_no=0; struct s
39、tudent ex1N=0; FILE *fp=NULL; system(color 5f); system(cls); 学籍管理系统实训报告 03,13,23 学员 - 33 - fp=fopen(d:学生基本信息.txt,w); if(fp=NULL) printf(n 打开文件失败!n); return; printf(n 欢迎进入成绩录入系统n); printf(n 请输入第%d 个记录:n,i+1); printf(n 输入学生学号:(用#结束程序); scanf(%s,ex1i.num); printf(n 输入学生姓名:(用#结束程序); scanf(%s,);
40、 printf(n 请依次输入学生的数学、英语、c 编程、电路设计和法律基础的成绩:n); scanf(%f%f%f%f%f, while(ex1i.num0!=# i+; printf(n 请输入第%d 个记录:n,i+1); printf(n 输入学生学号:(用#结束程序); scanf(%s,ex1i.num); printf(n 输入学生姓名:(用#结束程序); scanf(%s,); printf(n 请依次输入学生的数学、英语、c 编程、电路设计和法律基础的成绩:n); scanf(%f%f%f%f%f, fclose(fp); void scoreStat()
41、char choose=0,yes_no=0; system(color 9f); do system(cls); printf(n 欢迎选择成绩统计系统n); /* 学籍管理系统实训报告 03,13,23 学员 - 34 - 显示菜单*/ printf(n |-|); printf(n | 请输入选项编号(04) |); printf(n |-|); printf(n | 1-按学号排序 |); printf(n | 2-按平均分数排序 |); printf(n | 3-统计分数段 |); printf(n | 4-返回 |); printf(n | 0-退出系统 |); printf(n
42、|-|n); choose=getch(); switch(choose) case1:sortAnhao();break; case2:jisuanPingjun();break; case3:tongjiFenshu();break; case4:main(); break; case0:break; default:printf(n %c 是非法选项!n);break; if(choose=0) break; printf(n 要继续选择吗(Y/N)?n); do yes_no=getche(); while(yes_no!=Y while(yes_no=y|yes_no=Y); voi
43、d sortAnhao() int i=0,j=0,n=0; struct student ex2N=0,temp=0; FILE *fp=NULL; system(color 9f); fp=fopen(d:学生基本信息.txt,r); if(fp=NULL) 学籍管理系统实训报告 03,13,23 学员 - 35 - printf(n 打开文件失败!n); return; printf(n 欢迎进入按学号排序系统n); while(feof(fp)=0) fscanf(fp,%3d%15s%16s%f%f%f%f%fn, i+; n+; fclose(fp); for(i=0;in-1;i
44、+) for(j=i+1;j0) temp=ex2i; ex2i=ex2j; ex2j=temp; fp=fopen(d:按学号排序.txt,w); if(fp=NULL) printf(n 打开文件失败!n); return; fprintf(fp,序号 学号 姓名 高数 英语 编程 电路 法律n); for(i=0;in;i+) fprintf(fp,%3d%15s%16s%7.1f%7.1f%7.1f%7.1f%7.1fn,i,ex2i.num,,ex2i.math,ex2i.english,ex 2i.cprogram,ex2i.circuit,ex2i.law);
45、printf(n 文件已保存至 D:按学号排序.txtn); fclose(fp); void jisuanPingjun() int i=0,j=0,n=0; char c=0; struct student ex2N=0,temp=0; FILE *fp=NULL; system(color 9f); fp=fopen(d:学生基本信息.txt,r); if(fp=NULL) printf(n 打开文件失败!n); return; 学籍管理系统实训报告 03,13,23 学员 - 36 - printf(n 欢迎使用按学号排序系统n); while(feof(fp)=0) fscanf(f
46、p,%3d%15s%16s%f%f%f%f%fn, i+; n+; fclose(fp); for(i=0;in;i+) ex2i.pingjun=(ex2i.math+ex2i.english+ex2i.cprogram+ex2i.circuit+ex2i.law)/5; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(ex2i.pingjunex2j.pingjun) temp=ex2i; ex2i=ex2j; ex2j=temp; fp=fopen(d:按平均成绩排序.txt,w); if(fp=NULL) printf(n 打开文件失败!n); return;
47、 fprintf(fp,序号 学号 姓名 高数 英语 编程 电路 法律 平均n); for(i=0;in;i+) fprintf(fp,%3d%15s%16s%7.1f%7.1f%7.1f%7.1f%7.1f%7.1fn,i,ex2i.num,,ex2i.math,ex2i.engli sh,ex2i.cprogram,ex2i.circuit,ex2i.law,ex2i.pingjun); printf(n 文件已保存至 D:按平均成绩排序.txtn); fclose(fp); void tongjiFenshu() int i=0,j=0,t=0,n=0,e=0,a55=
48、0; char yes_no=0; float list55=0; struct student ex2N=0; FILE *fp=NULL; system(color 9f); fp=fopen(d:学生基本信息.txt,r); if(fp=NULL) 学籍管理系统实训报告 03,13,23 学员 - 37 - printf(n 打开文件失败!n); return; printf(n 欢迎进入分数段统计系统!); while(feof(fp)=0) fscanf(fp,%3d%15s%16s%f%f%f%f%fn, i+; n+; fclose(fp); for(j=0;j5;j+) a0j
49、=0; for(j=0;j5;j+) for(i=0;i100|listij0) e+; else t=(int)listij/10; switch(t) case 10:aj0+;break; case 9:aj0+;break; case 8:aj1+;break; case 7:aj2+;break; case 6:aj3+;break; default:aj4+;break; printf(nnnn 各门课、个分数段学生人数); printf(n -); printf(n | 90 分以上 | 8089 分 | 7079 分 | 6069 分 | 60 分以下 ); printf(n
50、-); printf(n 高数 | %3d | %3d | %3d | %3d | %3d ,a0 0,a01,a02,a03,a04); printf(n -); printf(n 英语 | %3d | %3d | %3d | %3d | %3d ,a1 0,a11,a12,a13,a14); printf(n -); printf(n 编程 | %3d | %3d | %3d | %3d | %3d ,a2 学籍管理系统实训报告 03,13,23 学员 - 38 - 0,a21,a22,a23,a24); printf(n -); printf(n 电路 | %3d | %3d | %3d
51、 | %3d | %3d ,a3 0,a31,a32,a33,a34); printf(n -); printf(n 法律 | %3d | %3d | %3d | %3d | %3d ,a4 0,a41,a42,a43,a44); printf(n -); if(e!=0)printf(n 有%d 个错误的成绩,请检查。n,e); void studentStatus() int i=1; char choose=0,yes_no=0; struct student ex3N=0; FILE *fp=NULL; fp=fopen(d:学生基本信息.txt,r); if(fp=NULL) pri
52、ntf(n 打开文件失败!n); return; system(color 2f); do system(cls); printf ( |-|n); printf ( | 请输入选项编号(0-4) |n); printf ( |-|n); printf ( | 1-生成并打印补考通知单 |n); printf ( | 2-生成并打印退学通知单 |n); printf ( | 3-生成并打印新名册 |n); printf ( | 4-返回 |n); printf ( | 0-退出系统 |n); printf ( |-|n); choose=getche(); while(choose!=0 ch
53、oose=getchar(); 学籍管理系统实训报告 03,13,23 学员 - 39 - switch(choose) case 1:bukao(); break; case 2:tuixue(); break; case 3:xinmingdan(); break; case 4:main(); break; case 0:break; if(choose=0) printf(n); printf(感谢您的使用!n); break; printf(n 要继续选择吗(Y/N)?n); do yes_no=getche( ); while(yes_no!=Y while(yes_no=Y |
54、yes_no=y); void bukao() int i=0,j=0,count=0,n=0;char time510=,site515=,sbj510=高数,英语,c 语言编程,电 路设计,法律基础; struct student ex3N=0; FILE *fp=NULL; system(color 2f); fp=fopen(d:学生基本信息.txt,r); if(fp=NULL) printf(n 打开文件失败!n); return; printf(n 欢迎进入生成并打印补考通知单系统!n); while(feof(fp)=0) fscanf(fp,%3d%15s%16s%f%f%f
55、%f%fn, 学籍管理系统实训报告 03,13,23 学员 - 40 - i+; n+; fclose(fp); for(i=0;i5;i+) printf(n 请输入%s 的补考时间、地点:,sbji); scanf(%s%s, for(i=0;i4;i+) for(j=i+1;j5;j+) while(strcmp(timei,timej)=0 scanf(%s%s, for(i=0;in;i+) for(j=0;j5;j+) if(ex3i.scorej0 printf(n%15s 学生%d 门课不及格,补考科目、时间、地点:,,count); for(j=0;j5;j
56、+) if(ex3i.scorej60) switch(j) case 0:printf(n 高数:%3.1f, 时间%s, 地点%s,ex3i.scorej,timej,sitej); break; case 1:printf(n 英语:%3.1f, 时间%s, 地点%s,ex3i.scorej,timej,sitej); break; case 2:printf(nc 语言编程:%3.1f,时间%s, 地点%s,ex3i.scorej,timej,sitej); break; case 3:printf(n 电路设计:%3.1f, 时间%s, 地点%s,ex3i.scorej,timej,
57、sitej); break; case 4:printf(n 法律基础:%3.1f, 时间%s, 地点%s,ex3i.scorej,timej,sitej); break; 学籍管理系统实训报告 03,13,23 学员 - 41 - void tuixue() int i=0,j=0,count=0,n=0,k=0; struct student ex3N=0; FILE *fp=NULL; system(color 2f); fp=fopen(d:学生基本信息.txt,r); if(fp=NULL) printf(n 打开文件失败!n); return; printf(n 进入生成并打印退学
58、通知单系统!n); while(feof(fp)=0) fscanf(fp,%3d%15s%16s%f%f%f%f%fn, i+; n+; fclose(fp); for(i=0;in;i+) count=0; for(j=0;j5;j+) if(ex3i.scorej=4) printf(nn%15s 同学,您本学期共%d 门不及格科目,满足退学标准。请尽快处理n,ex3i. name,count); for(j=0;j5;j+) if(ex3i.scorej60) switch(j) case 0:printf(高数:%-7.1f,ex3i.scorej);break; case 1:pr
59、intf(英语:%-7.1f,ex3i.scorej);break; case 2:printf(c 语言编程:%-7.1f,ex3i.scorej);break; case 3:printf(电路设计:%-7.1f,ex3i.scorej);break; case 4:printf(法律基础:%-7.1f,ex3i.scorej);break; printf(n); for(k=i;kn-1;k+)ex3k=ex3k+1;n-; 学籍管理系统实训报告 03,13,23 学员 - 42 - fp=fopen(d:升学名单.txt,w); if(fp=NULL) printf(n 打开文件失败!
60、n); return; for(i=0;in;i+) fprintf(fp,%3d%15s%16s%7.1f%7.1f%7.1f%7.1f%7.1fn,i,ex3i.num,,ex3i.score0,ex3i.score1, ex3i.score2,ex3i.score3,ex3i.score4); fclose(fp); void xinmingdan() int i=0; struct student ex3N=0; FILE *fp=NULL; system(color 2f); fp=fopen(d:升学名单.txt,r); if(fp=NULL) printf(n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中考物理复习专题1物理学史估测题课件
- 冀少版八年级生物上册第三单元第一节种子萌发的过程课件
- 幼儿印染课件教学课件
- 第四节区域经济联系教案
- 《建筑材料》教案
- 住宅小区电梯安装招标细则须知
- 绵阳市羽毛球馆租赁合同
- 印刷厂操作员聘用协议
- 教育资源共享办法
- 福州市停车场突发事件应急预案
- 《生物化学》本科课件第12章+核酸通论
- 2022小学新课程标准《语文》
- 增强对外话语主动提升国际传播能力PPT高度重视网络对外传播切实提升国际话语主动权PPT课件(带内容)
- 垃圾电厂专用语中英文对照手册
- 第7章模拟电路(杨素行)课件
- 砼试块同条件、标养留置方案
- 一年级上册认字闪卡PPT课件
- 教师说课教学 模板PPT (212)
- (高清版)JGJ340-2015建筑地基检测技术规范
- 农产品市场营销培训(共66页).ppt
- 陕西省建筑工程施工通用表格、控制资料 (全套)
评论
0/150
提交评论