《c语言实验报告(学生学籍管理系统).doc》由会员分享,可在线阅读,更多相关《c语言实验报告(学生学籍管理系统).doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学生学籍管理系统一、实验要求:一个班级有若干名学生(不超过10名),共有三门课程,分别是语文、数学、英语,要求编写一个成绩的管理系统,每个学生要求有学号、姓名、性别、三门课的成绩以及平均成绩,要实现从键盘上输入学号(必须为数字)、姓名、性别、三门课程的成绩,并求每一位学生的平均成绩(即每一行的平均值)、每一位学生的最高分(每一行的最大值),求每一门课程的平均分(即每一列的平均值)、每一门课的最高分(即每一列的最大值),并输出全部结果。根据学生的平均成绩进行排序,对语文、数学、英语成绩进行排序,并输出排序结果,排序必须使用冒泡排序法。并且具有如下的菜单:学生学籍管理系统*MENU*1、Enter
2、 new data2、Browse all 3、Search by num 4、Order by average5、Exit*用户可以根据菜单来选择操作,菜单的含义如下:1、Enter new data 输入新数据2、Browse al 浏览所有数据3、Search by num 根据学号查询学生信息4、Order by average 根据平均成绩排序5、Exit 退出系统实验步骤:二、实验目的1、了解和熟悉Visual C+软件编程开发环境2、熟练掌握结构化程序设计的步骤和模块化设计方法3、熟练掌握C语言数据类型,熟记字符型数据和整形数据的定义和使用4、熟练掌握用while语句、dowhi
3、le语句和for语句实现循环结构程序设计的方法5、掌握一维数组、二维数组的定义、赋值和输入输出的方法6、掌握与数组有关的算法(特别是排序算法,熟练掌握冒泡排序法)7、熟悉函数的定义、声明方法及全局变量和局部变量的概念与用法,掌握函数的调用方法8、掌握结构体类型变量的定义和使用及结构体类型数组的概念和应用三、实验步骤1、分析设计题目:根据题目要求,可以使用结构体数组来存储学生的信息,包括学号、姓名、性别、各科成绩、平均成绩五个成员,分别使用字符数组、整型数组、浮点型变量来表示。在主函数之外,分别编写菜单函数menu()、输入函数enter()、浏览函数browse()、查找函数search()、
4、排序函数order()等函数,通过主函数调用menu来实现。2、实验流程图:3、实验模块:输入模块、浏览模块、查找模块、排序模块、退出系统4、程序的调试与测试:所谓程序调试是指对程序的查错与排错。在编写完一个源程序之后,不要立即进行编译,而应对程序进行全面的人工检查一遍,检查无误后,可以开始进行程序调试。由编译系统进行检查、发现错误,根据编译系统提示的错误类型和警告及出现的位置,我们可以定位到错误地点进行修改,然后再编译,如此反复进行,直至不再出现错误位置,最后才进行程序的连接于运行。调试完以后,下一步就是对程序进行测试,运行程序,向程序中输入数据,根据输出结果是否正确(是否符合自己的想法)来
5、判断程序是否正确,如果不正确或不符合自己的目的,就需要对程序进行修改。然后再调试,再测试,直至结果无误或符合要求后,测试才算结束,此时,程序才算是满足题目要求的正确程序。5、运行结果:(1)运行结果界面如下:(2)选择1号菜单,输入10名同学信息,运行结果如下:(3)选择2号菜单,浏览所有信息,运行结果如下:(4)选择3号菜单,按学号查找学生信息,例如查找学号为03的同德信息,输入格式如下:(5)查询学号为03的同学的信息运行结果如下:(6)选择4号菜单,进入学生成绩排序功能菜单,运行结果如下:(7)选择1号功能菜单,按每位学生的平均成绩从小到大排序,运行结果如下:(8)选择2号功能菜单,按语
6、文成绩从小到大排序,运行结果如下:(9)选择3号功能菜单,按数学成绩从小到大排序,运行结果如下:(10)选择4号功能菜单,按英语成绩从小到大排序,运行结果如下:(11)选择5号功能菜单,返回主菜单,运行结果如下:(12)选择5号菜单,退出系统,按任意键结束程序,运行结果如下:四、实验体会通过完成这个综合的设计实例,从中我熟悉了Visual C+开发环境,熟练掌握了在Visual C+软件环境下编写和调试程序。通过对程序的调试,我从学到了许多知识,根据编译时系统提供的错误提示,我能很快地找到错误并排除这些错误,是程序能正确运行。通过这个环节的不断练习,我积累了丰富的经验,为以后编程和调试程序奠定
7、了基础。通过运行程序,对程序不断改动,仔细观察和分析所出现的情况,锻炼了我对立思考的能力,而且增强了我对C语言应用这门课程的兴趣。五、源程序#include #include#include#define N 100#define M 3typedef struct student char num11;char name20;char sex3;int scoreM;float ave;int Max_course;STU;STU stuN,stu_ChineseN,stu_MathN,stu_EnglishN;int MaxM;float ave_Chinese;float ave_Mat
8、h;float ave_English;int n;void no_input(int i,int n)int j,k,w1;dow1=0;printf(NO.:);scanf(%s,&stui.num);for(j=0;stui.numj!=0;j+)if(stui.numj9)puts(Input error! Only be made up of (0-9).Please reinput!n);w1=1;break;if(w1!=1)for(k=0;kn;k+)if(k!=i&strcmp(stuk.num,stui.num)=0)puts(This record is exist.Pl
9、ease reinput!n);w1=1;break;while(w1=1);void input(int i)int j,sum;no_input(i,i);printf(name:);scanf(%s,&stui.name);printf(sex:);scanf(%s,&stui.sex);for(j=0;jM;j+)printf(score %d:,j+1);scanf(%d,&stui.scorej);for(sum=0,j=0;jM;j+)sum+=stui.scorej;stui.ave=sum*1.0/M;void menu();void enter();int i,j,f;sy
10、stem(CLS);printf(How many students(0-%d)?:,N);scanf(%d,&n);printf(nEnter data nownn);for(i=0;in;i+)printf(nInput %dth student record.n,i+1);input(i);for(i=0;in;i+)stui.Max_course=stui.score0;for(j=1;jM;j+)if(stui.Max_coursestui.scorej)stui.Max_course=stui.scorej;for(i=0;in;i+)stu_ChineseN,stu_MathN,
11、stu_EnglishN中*/stu_Chinesei=stui;stu_Mathi=stui;stu_Englishi=stui;printf(please enter 0n);doscanf(%d,&f);if(f=0)menu();break;else printf(repeat :);while(f!=0);void printf_one(int i)int j;printf(%3s :%3s,stui.num,stui.name);for(j=0;jM;j+)printf(%10d,stui.scorej);printf(%10.2f,stui.ave);printf(%9dn,st
12、ui.Max_course);void browse() int i,j,f,k=0;system(CLS);for(i=0;in;i+)k=k+stui.score0;ave_Chinese=(k*1.0)/n;k=0;for(i=0;in;i+)k=k+stui.score1;ave_Math=(k*1.0)/n;k=0;for(i=0;in;i+)k=k+stui.score2;ave_English=(k*1.0)/n;Max0=stu0.score0;for(i=1;in;i+)if(Max0stui.score0)Max0=stui.score0;Max1=stu0.score1;
13、for(i=1;in;i+)if(Max1stui.score1)Max1=stui.score1;Max2=stu0.score2;for(i=1;in;i+)if(Max2stui.score2)Max2=stui.score2;puts(n-);printf(n NO : name Chinese Math English average Max_coursen);for(i=0;in;i+)if(i!=0)&(i%10=0)printf(nnPass any key to continue.);getchar();puts(nn);printf_one(i);puts(n-);prin
14、tf( ave_Chinese ave_Math ave_Englishn);printf(%10.2f%10.2f%10.2fn,ave_Chinese,ave_Math,ave_English);puts(n-);printf( Max_Chinese Max_Math Max_Englishn);printf(%10d%10d%10dn,Max0,Max1,Max2);puts(n-);printf(ntThere are %d record.n,n);puts(n-);printf(“please enter0n);doscanf(%d,&f);if(f=0)menu();break;
15、else printf(repeat enter:);while(f!=0);void search()int i,k,f;struct student s;k=-1;system(CLS);printf(nnEnter name that you wang to search! num:);scanf(%s,&s.num);printf(n NO :name Chinese Math English average Max_coursen);for (i=0;in;i+)if(strcmp(s.num,stui.num)=0)k=i; printf_one(k);break;if(k=-1)
16、printf(nnNO exist!);printf(please enter0n);doscanf(%d,&f);if(f=0)menu();break;else printf(repeat enter:);while(f!=0);void order_ave();void order_Chinese();void order_Math();void order_English();void order()int i,j,f,m,w1;struct student s;system(CLS);dosystem(CLS);puts(ttt学 生 成 绩 排 序nn);puts(t*ORDER*
17、n);puts(ttt1.对每一位学生的平均成绩排序n);puts(ttt2.对语文课成绩排序n);puts(ttt3.对数学课成绩排序n);puts(ttt4.对英语课成绩排序n);puts(ttt5.返回主菜单n);puts(t*n);printf(Choice your number(1-5): bb);scanf(%d,&m);if(m5)w1=1;printf(your choice is not between 1 and 5,Please input again:);getchar();else w1=0;while(w1=1);switch(m) /*选择功能*/case 1:
18、order_ave();break;case 2:order_Chinese();break;case 3:order_Math();break;case 4:order_English();break;case 5:menu();printf(The ordered data is:n);browse();void order_ave()int i,j,f;struct student s;system(CLS);for(i=0;in;i+)for(j=i;jstuj.ave)s=stui;stui=stuj;stuj=s;puts(n-);printf(每位学生的平均成绩从小到大的排序结果
19、n);printf( NO : name average n);for(i=0;in;i+)printf(%3s :%3s %11fn,stui.num,stui.name,stui.ave);puts(n-);printf(返回上一级请按数字0n);doscanf(%d,&f);if(f=0)order();break;else printf(输入有误,请重新输入:);while(f!=0);void order_Chinese()int i,j,f;struct student s;system(CLS);for(i=0;in;i+)for(j=i;jstu_Chinesej.score0
20、)s=stu_Chinesei;stu_Chinesei=stu_Chinesej;stu_Chinesej=s;puts(n-);printf(语文成绩从小到大的排序结果n);printf( NO : name Chinese n);for(i=0;in;i+)printf(%3s :%5s %6dn,stu_Chinesei.num,stu_Chinesei.name,stu_Chinesei.score0);puts(n-);printf(返回上一级请按数字0n);doscanf(%d,&f);if(f=0)order();break;else printf(输入有误,请重新输入:);w
21、hile(f!=0);void order_Math()int i,j,f;struct student s;system(CLS);for(i=0;in;i+)for(j=i;jstu_Mathj.score1)s=stu_Mathi;stu_Mathi=stu_Mathj;stu_Mathj=s;puts(n-);printf(数学成绩从小到大的排序结果n);printf( NO : name Math n);for(i=0;in;i+)printf(%3s :%5s %6dn,stu_Mathi.num,stu_Mathi.name,stu_Mathi.score1);puts(n-);
22、printf(返回上一级请按数字0n);doscanf(%d,&f);if(f=0)order();break;else printf(输入有误,请重新输入:);while(f!=0);void order_English()/*对英语成绩从小到大进行冒泡排序法*/int i,j,f;struct student s;system(CLS); for(i=0;in;i+)for(j=i;jstu_Englishj.score2)s=stu_Englishi;stu_Englishi=stu_Englishj;stu_Englishj=s;puts(n-);printf(英语成绩从小到大的排序结
23、果n);printf( NO : name English n);for(i=0;in;i+)printf(%3s :%5s %6dn,stu_Englishi.num,stu_Englishi.name,stu_Englishi.score2);puts(n-);printf(返回上一级请按数字0n);doscanf(%d,&f);if(f=0)order();break;else printf(输入有误,请重新输入:);while(f!=0);void menu()int n,w1;dosystem(CLS);puts(ttt学 生 学 籍 管 理 系 统nn);puts(t*MENU*n
24、);puts(ttt1.Enter new datan);puts(ttt2.Browse alln);puts(ttt3.Search by numn);puts(ttt4.Order by averagen);puts(ttt5.Exitn);puts(t*n);printf(Choice your number(1-5): bb);scanf(%d,&n);if(n5)w1=1;printf(your choice is not between 1 and 5,Please input again:);getchar();else w1=0;while(w1=1);switch(n) case 1:enter();break;case 2:browse();break;case 3:search();break;case 4:order();break;case 5:exit(0);void main()menu();