c语言实验报告学生学籍管理系统.docx
- 文档编号:3872197
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:24
- 大小:580.82KB
c语言实验报告学生学籍管理系统.docx
《c语言实验报告学生学籍管理系统.docx》由会员分享,可在线阅读,更多相关《c语言实验报告学生学籍管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
c语言实验报告学生学籍管理系统
实验报告
学
生
学
籍
管
理
系
统
专业:
信息管理与信息系统
班级:
学号:
姓名:
学生学籍管理系统
一、实验要求:
一个班级有若干名学生(不超过10名),共有三门课程,分别是语文、数学、英语,要求编写一个成绩的管理系统,每个学生要求有学号、姓名、性别、三门课的成绩以及平均成绩,要实现从键盘上输入学号(必须为数字)、姓名、性别、三门课程的成绩,并求每一位学生的平均成绩(即每一行的平均值)、每一位学生的最高分(每一行的最大值),求每一门课程的平均分(即每一列的平均值)、每一门课的最高分(即每一列的最大值),并输出全部结果。
根据学生的平均成绩进行排序,对语文、数学、英语成绩进行排序,并输出排序结果,排序必须使用冒泡排序法。
并且具有如下的菜单:
学生学籍管理系统
***********************MENU***********************
1、Enternewdata
2、Browseall
3、Searchbynum
4、Orderbyaverage
5、Exit
***************************************************
用户可以根据菜单来选择操作,菜单的含义如下:
1、Enternewdata输入新数据
2、Browseal浏览所有数据
3、Searchbynum根据学号查询学生信息
4、Orderbyaverage根据平均成绩排序
5、Exit退出系统实验步骤:
二、实验目的
1、了解和熟悉VisualC++软件编程开发环境
2、熟练掌握结构化程序设计的步骤和模块化设计方法
3、熟练掌握C语言数据类型,熟记字符型数据和整形数据的定义和使用
4、熟练掌握用while语句、do…while语句和for语句实现循环结构程序设计的方法
5、掌握一维数组、二维数组的定义、赋值和输入输出的方法
6、掌握与数组有关的算法(特别是排序算法,熟练掌握冒泡排序法)
7、熟悉函数的定义、声明方法及全局变量和局部变量的概念与用法,掌握函数的调用方法
8、掌握结构体类型变量的定义和使用及结构体类型数组的概念和应用
三、实验步骤
1、分析设计题目:
根据题目要求,可以使用结构体数组来存储学生的信息,包括学号、姓名、性别、各科成绩、平均成绩五个成员,分别使用字符数组、整型数组、浮点型变量来表示。
在主函数之外,分别编写菜单函数menu()、输入函数enter()、浏览函数browse()、查找函数search()、排序函数order()等函数,通过主函数调用menu来实现。
2、实验流程图:
3、实验模块:
输入模块、浏览模块、查找模块、排序模块、退出系统
4、程序的调试与测试:
所谓程序调试是指对程序的查错与排错。
在编写完一个源程序之后,不要立即进行编译,而应对程序进行全面的人工检查一遍,检查无误后,可以开始进行程序调试。
由编译系统进行检查、发现错误,根据编译系统提示的错误类型和警告及出现的位置,我们可以定位到错误地点进行修改,然后再编译,如此反复进行,直至不再出现错误位置,最后才进行程序的连接于运行。
调试完以后,下一步就是对程序进行测试,运行程序,向程序中输入数据,根据输出结果是否正确(是否符合自己的想法)来判断程序是否正确,如果不正确或不符合自己的目的,就需要对程序进行修改。
然后再调试,再测试,直至结果无误或符合要求后,测试才算结束,此时,程序才算是满足题目要求的正确程序。
5、运行结果:
(1)运行结果界面如下:
(2)选择1号菜单,输入10名同学信息,运行结果如下:
(3)选择2号菜单,浏览所有信息,运行结果如下:
(4)选择3号菜单,按学号查找学生信息,例如查找学号为03的同德信息,输入格式如下:
(5)查询学号为03的同学的信息运行结果如下:
(6)选择4号菜单,进入学生成绩排序功能菜单,运行结果如下:
(7)选择1号功能菜单,按每位学生的平均成绩从小到大排序,运行结果如下:
(8)选择2号功能菜单,按语文成绩从小到大排序,运行结果如下:
(9)选择3号功能菜单,按数学成绩从小到大排序,运行结果如下:
(10)选择4号功能菜单,按英语成绩从小到大排序,运行结果如下:
(11)选择5号功能菜单,返回主菜单,运行结果如下:
(12)选择5号菜单,退出系统,按任意键结束程序,运行结果如下:
四、实验体会
通过完成这个综合的设计实例,从中我熟悉了VisualC++开发环境,熟练掌握了在VisualC++软件环境下编写和调试程序。
通过对程序的调试,我从学到了许多知识,根据编译时系统提供的错误提示,我能很快地找到错误并排除这些错误,是程序能正确运行。
通过这个环节的不断练习,我积累了丰富的经验,为以后编程和调试程序奠定了基础。
通过运行程序,对程序不断改动,仔细观察和分析所出现的情况,锻炼了我对立思考的能力,而且增强了我对C语言应用这门课程的兴趣。
五、源程序
#include
#include
#include
#defineN100
#defineM3
typedefstructstudent/*定义学生结构体*/
{
charnum[11];
charname[20];
charsex[3];
intscore[M];
floatave;
intMax_course;
}STU;
STUstu[N],stu_Chinese[N],stu_Math[N],stu_English[N];
intMax[M];
floatave_Chinese;
floatave_Math;
floatave_English;
intn;/*实际存储的学生个数*/
voidno_input(inti,intn)/*i表示第i个的学生信息,n表示比较到第n个学生*/
{
intj,k,w1;
do
{
w1=0;
printf("NO.:
");
scanf("%s",&stu[i].num);
for(j=0;stu[i].num[j]!
='\0';j++)/*学号输入函数,作了严格规定*/
if(stu[i].num[j]<'0'||stu[i].num[j]>'9')/*判断学号是否为数字*/
{
puts("Inputerror!
Onlybemadeupof(0-9).Pleasereinput!
\n");
w1=1;
break;
}
if(w1!
=1)
for(k=0;k if(k! =i&&strcmp(stu[k].num,stu[i].num)==0) { puts("Thisrecordisexist.Pleasereinput! \n"); w1=1; break; } }while(w1==1); } voidinput(inti)/*输入一个记录函数*/ { intj,sum; no_input(i,i);/*调用学号输入函数*/ printf("name: "); scanf("%s",&stu[i].name); printf("sex: "); scanf("%s",&stu[i].sex); for(j=0;j { printf("score%d: ",j+1); scanf("%d",&stu[i].score[j]); } for(sum=0,j=0;j sum+=stu[i].score[j]; stu[i].ave=sum*1.0/M;/*每一行的平均值,即每位同学的三门课总的平均分*/ } voidmenu();/*函数声明*/ voidenter()/*输入模块*/ { inti,j,f; system("CLS");/*清屏*/ printf("Howmanystudents(0-%d)? : ",N);/*要输入的记录个数*/ scanf("%d",&n); printf("\nEnterdatanow\n\n"); for(i=0;i { printf("\nInput%dthstudentrecord.\n",i+1); input(i);/*调用输入函数*/ } for(i=0;i { stu[i].Max_course=stu[i].score[0]; for(j=1;j { if(stu[i].Max_course stu[i].Max_course=stu[i].score[j]; } } for(i=0;i { stu_Chinese[i]=stu[i]; stu_Math[i]=stu[i]; stu_English[i]=stu[i]; } printf("返回主菜单请按数字0\n"); do { scanf("%d",&f); if(f==0) { menu(); break; } elseprintf("输入有误,请重新输入: "); }while(f! =0); } voidprintf_one(inti)/*显示一个记录函数*/ { intj; printf("%3s: %3s",stu[i].num,stu[i].name); for(j=0;j printf("%10d",stu[i].score[j]); printf("%10.2f",stu[i].ave); printf("%9d\n",stu[i].Max_course); } voidbrowse()/*浏览模块*/ { inti,j,f,k=0; system("CLS");/*清屏*/ for(i=0;i { k=k+stu[i].score[0]; ave_Chinese=(k*1.0)/n; } k=0; for(i=0;i { k=k+stu[i].score[1]; ave_Math=(k*1.0)/n; } k=0; for(i=0;i { k=k+stu[i].score[2]; ave_English=(k*1.0)/n; } Max[0]=stu[0].score[0];/*第一列的最大值,即语文成绩最高分*/ for(i=1;i { if(Max[0] Max[0]=stu[i].score[0]; } Max[1]=stu[0].score[1];/*第二列的最大值,即数学成绩最高分*/ for(i=1;i { if(Max[1] Max[1]=stu[i].score[1]; } Max[2]=stu[0].score[2];/*第三列的最大值,即英语成绩最高分*/ for(i=1;i { if(Max[2] Max[2]=stu[i].score[2]; } puts("\n--------------------------------------------------------------------"); printf("\nNO: nameChineseMathEnglishaverageMax_course\n"); for(i=0;i { if((i! =0)&&(i%10==0))/*目的是分屏显示*/ { printf("\n\nPassanykeytocontinue..."); getchar(); puts("\n\n"); } printf_one(i);/*调用显示一个记录函数*/ } puts("\n-------------------------------------------------------------------"); printf("ave_Chineseave_Mathave_English\n"); printf("%10.2f%10.2f%10.2f\n",ave_Chinese,ave_Math,ave_English);/*显示语文、数学、英语平均成绩*/ puts("\n-------------------------------------------------------------------"); printf("Max_ChineseMax_MathMax_English\n"); printf("%10d%10d%10d\n",Max[0],Max[1],Max[2]);/*显示语文、数学、英语成绩*/ puts("\n-------------------------------------------------------------------"); printf("\n\tThereare%drecord.\n",n); puts("\n-------------------------------------------------------------------"); printf("返回主菜单请按数字0\n"); do { scanf("%d",&f); if(f==0) { menu(); break; } elseprintf("输入有误,请重新输入: "); }while(f! =0); } voidsearch()/*查找模块*/ { inti,k,f; structstudents; k=-1; system("CLS");/*清屏*/ printf("\n\nEnternamethatyouwangtosearch! num: "); scanf("%s",&s.num);/*输入要查找的学生的学号*/ printf("\nNO: nameChineseMathEnglishaverageMax_course\n"); for(i=0;i if(strcmp(s.num,stu[i].num)==0) { k=i;/*找到要查找的学生记录*/ printf_one(k);/*调用显示一个记录函数*/ break; } if(k==-1) { printf("\n\nNOexist! "); } printf("返回主菜单请按数字0\n"); do { scanf("%d",&f); if(f==0) { menu(); break; } elseprintf("输入有误,请重新输入: "); }while(f! =0); } /*函数声明*/ voidorder_ave(); voidorder_Chinese(); voidorder_Math(); voidorder_English(); voidorder()/*排序模块*/ { inti,j,f,m,w1; structstudents; system("CLS"); do { system("CLS"); puts("\t\t\t学生成绩排序\n\n"); puts("\t*************************ORDER*************************\n"); puts("\t\t\t1.对每一位学生的平均成绩排序\n"); puts("\t\t\t2.对语文课成绩排序\n"); puts("\t\t\t3.对数学课成绩排序\n"); puts("\t\t\t4.对英语课成绩排序\n"); puts("\t\t\t5.返回主菜单\n"); puts("\t******************************************************\n"); printf("Choiceyournumber(1-5): []\b\b"); scanf("%d",&m); if(m<0||m>5) { w1=1; printf("yourchoiceisnotbetween1and5,Pleaseinputagain: "); getchar(); } elsew1=0; }while(w1==1); switch(m)/*选择功能*/ { case1: order_ave();break; case2: order_Chinese();break; case3: order_Math();break; case4: order_English();break; case5: menu();; } printf("Theordereddatais: \n"); browse(); } voidorder_ave()/*对平均成绩从小到大进行冒泡排序法*/ { inti,j,f; structstudents; system("CLS"); for(i=0;i { for(j=i;j { if(stu[i].ave>stu[j].ave) { s=stu[i]; stu[i]=stu[j]; stu[j]=s; } } } puts("\n-------------------------------------------------------------------"); printf("每位学生的平均成绩从小到大的排序结果\n"); printf("NO: nameaverage\n"); for(i=0;i printf("%3s: %3s%11f\n",stu[i].num,stu[i].name,stu[i].ave); puts("\n-------------------------------------------------------------------"); printf("返回上一级请按数字0\n"); do { scanf("%d",&f); if(f==0) { order(); break; } elseprintf("输入有误,请重新输入: "); }while(f! =0); } voidorder_Chinese()/*对语文成绩从小到大进行冒泡排序法*/ { inti,j,f; structstudents; system("CLS"); for(i=0;i { for(j=i;j { if(stu_Chinese[i].score[0]>stu_Chinese[j].score[0]) { s=stu_Chinese[i]; stu_Chinese[i]=stu_Chinese[j]; stu_Chinese[j]=s; } } } puts("\n-------------------------------------------------------------------"); printf("语文成绩从小到大的排序结果\n"); printf("NO: nameChinese\n"); for(i=0;i printf("%3s: %5s%6d\n",stu_Chinese[i].num,stu_Chinese[i].name,stu_Chinese[i].score[0]); puts("\n-------------------------------------------------------------------"); printf("返回上一级请按数字0\n"); do { scanf("%d",&f); if(f==0) { order(); break; } elseprintf("输入有误,请重新输入: "); }while(f! =0); } voidorder_Math()/*对数学成绩从小到大进行冒泡排序法*/ { inti,j,f; structstudents; system("CLS"); for(i=0;i { for(j=i;j { if(stu_Math[i].score[1]>stu_Math[j].score[1]) { s=stu_Math[i]; stu_Math[i]=stu_Math[j]; stu_Math[j]=s; } } } puts("\n-------------------------------------------------------------------"); printf("数学成绩从小到大的排序结果\n"); printf("NO: nameMath\n"); for(i=0;i printf("%3s: %5s%6d\n",stu_Math[i].num,stu_Math[i].name,stu_Math[i].score[1]); puts("\n------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验 报告 学生 学籍 管理 系统