1、“学生管理系统的设计与实现”综合性实验实验名称:学生管理系统的设计与实现实验类型:综合性实验一、实验目的强化学生对C语言的基本语法和基本编程技能的熟练掌握,并在此基础上,重点培养学生对实际应用问题进行抽象分析的能力和综合运用C语言知识进行具体实现的编程能力。二、实验内容综合应用C语言中讲授的流程控制语句、模块化程序设计方法(函数)和丰富的数据类型(指针、数组、结构体等)完成“学生管理系统”的设计与实现。三、实验环境Windows XP系统,C语言开发环境:Win-TC、Turbo C3.0、VC等。四、实验要求1、总体要求:系统功能齐全,运行结果正确,用户界面友好,使用简单方便。2、系统数据要
2、求:学生信息如下:学号、姓名、年龄、所在系、3门课程名称及成绩、总分、平均分。3、系统功能要求:输入至少10个学生的自然信息(学号、姓名、年龄、所在系、成绩)。计算每个学生的总分、平均分,并输出每个学生的学号,姓名,总分,平均分。根据学生的总分进行排序输出。针对课程不同科目进行排序输出。统计输出每门课程的平均分。实现多种查询功能(例如:根据学号或姓名或所在系等,查询一个或多个学生信息)。对于已输入的学生信息进行储存。能实现学生信息的增、删、改操作。五、实验结果实验完成要求上交全部源程序代码(包括存盘数据)和完整的综合性实验报告(包括系统设计、实验过程中出现问题的分析与修改、代码打印、运行结果拷
3、屏打印)。六、考核形式考查。根据上机出勤、实验报告及完成的程序系统进行评价,分为优、良、中、及格、不及格。#include#includeint n;/*定义全局变量n为学生人数*/struct Studentint num;/*学号*/ char name20;/*姓名*/ int age;/*年龄*/ char xi20;/*所在系*/ float chi;/*语文*/ float mat;/*数学*/ float eng;/*英语*/ float tot;/*总分*/ float ave;/*平均分*/stu30;/*定义了一个学生数组,长度为30个人*/int main()void m
4、enu();/*菜单函数*/printf(有几个学生的成绩:);scanf(%d,&n);menu();return 0;void menu()/*菜单函数*/void input();/*输入*/void output();/*直接输出*/void sort1();/*按总分排序*/void sort2();/*按每科排序*/void aver();/*求每科平均分*/void look();/*查找*/void order();/*增加*/void delet();/*删减*/void change();/*修改*/int k;/*存放选择变量*/printf(nt*n);printf(t
5、1.输入;2.输出;3.用总分排序;4.用单独一科排序;n);printf(t5.每门课平均分;6.查询;7.增;8.删;9.改;10.退出;n);printf(t*n);printf(请选择:);scanf(%d,&k);/*选择所要执行的操作*/while(k!=10)/*当选择不为退出时做*/switch(k)case 1:input();break;case 2:output();break;case 3:sort1();break;case 4:sort2();break;case 5:aver();break;case 6:look();break;case 7:order();b
6、reak;case 8:delet();break;case 9:change();break;default:printf(enter data error!n);scanf(%d,&k);/*循环读入选择*/printf(tttThe program is over!);void input()/*输入函数*/int i;printf( 学号 姓名 年龄 所在系 语文 数学 英语n);for(i=0;in;i+)printf(第%2d个:,i+1);scanf(%d%s%d%s,&stui.num,stui.name,&stui.age,stui.xi);scanf(%f%f%f,&stu
7、i.chi,&stui.mat,&stui.eng);menu();/*调用菜单函数*/void output()/*输出函数*/int i;printf( 学号 姓名 年龄 所在系 语文 数学 英语 总分 平均分n);for(i=0;in;i+)stui.tot=stui.chi+stui.mat+stui.eng;/*把三科的成绩加上,赋值给tot*/stui.ave=stui.tot/3;/*将三科总分除以3,赋值给ave*/printf(第%2d个:,i+1);printf(%d%8s %d%8s ,stui.num,stui.name,stui.age,stui.xi);printf
8、(%5.2f %5.2f %5.2f ,stui.chi,stui.mat,stui.eng);printf(%5.2f %5.2fn,stui.tot,stui.ave);menu();/*调用菜单函数*/void sort1()/*根据总分进行排序*/int i,j;struct Student temp;for(i=0;in;i+)for(j=i+1;jstui.tot) temp=stui;stui=stuj;stuj=temp;printf(按总分排序后:n);printf( 学号 姓名 年龄 所在系 语文 数学 英语 总分 平均分n);for(i=0;in;i+)printf(第%
9、2d名:,i+1);printf(%d%8s %d%8s ,stui.num,stui.name,stui.age,stui.xi);printf(%5.2f %5.2f %5.2f ,stui.chi,stui.mat,stui.eng);printf(%5.2f %5.2fn,stui.tot,stui.ave);menu();/*调用菜单函数*/void sort2()/*针对不同科目进行排序*/int i,j;struct Student temp=stu0;printf(按科目进行排序:n);for(i=0;in;i+)/*按语文从高到低,冒泡排序*/for(j=i+1;jstui.
10、chi) temp=stui;stui=stuj;stuj=temp;printf(n按语文:学号 姓名 语文n);for(i=0;in;i+)printf(第%2d名:,i+1);printf(%d%8s %5.2fn,stui.num,stui.name,stui.chi);for(i=0;in;i+)/*按数学从高到低,冒泡排序*/for(j=i+1;jstui.mat) temp=stui;stui=stuj;stuj=temp;printf(n按数学:学号 姓名 数学n);for(i=0;in;i+)printf(第%2d名:,i+1);printf(%d%8s %5.2fn,stu
11、i.num,stui.name,stui.mat);for(i=0;in;i+)/*按英语从高到低,冒泡排序*/for(j=i+1;jstui.eng) temp=stui;stui=stuj;stuj=temp;printf(n按英语:学号 姓名 英语n);for(i=0;in;i+)/*循环n次*/printf(第%2d名:,i+1);printf(%d%8s %5.2fn,stui.num,stui.name,stui.eng);menu();/*调用菜单函数*/void aver()/*输出各科平均分*/int i;float chi=0,mat=0,eng=0;for(i=0;in;
12、i+)/*累加各科成绩*/chi+=stui.chi;mat+=stui.mat;eng+=stui.eng;chi=chi/n;/*求平均分*/mat=mat/n;eng=eng/n;printf(各科平均分为:n语文 数学 英语n);printf(%5.2f %5.2f %5.2fn,chi,mat,eng);printf(n);menu();/*调用菜单函数*/void look()/*多种查询功能*/int i,k,num;char name20,xi20;printf(请选择查询方式:1.按学号;2.按姓名;3.按所在系;4.退出;n);scanf(%d,&k);while(k!=4
13、)switch(k)case 1:printf(请输入学号:);scanf(%d,&num);/*按学号查找*/printf(学号 姓名 年龄 所在系 语文 数学 英语 总分 平均分n);for(i=0;in;i+)/*在n个人中,挨个寻找*/if(stui.num=num) printf(%d%8s%d%8s,stui.num,stui.name,stui.age,stui.xi);printf(%5.2f %5.2f %5.2f ,stui.chi,stui.mat,stui.eng);printf(%5.2f %5.2fn,stui.tot,stui.ave);printf(n请选择查询
14、方式:1.按学号;2.按姓名;3.按所在系;4.退出;n);break; case 2:printf(请输入姓名:); scanf(%s,name);/*按姓名查找*/ printf(学号 姓名 年龄 所在系 语文 数学 英语 总分 平均分n); for(i=0;in;i+)/*在n个人中,挨个寻找*/if(strcmp(stui.name,name)=0) printf(%d%8s%d%8s,stui.num,stui.name,stui.age,stui.xi); printf(%5.2f %5.2f %5.2f ,stui.chi,stui.mat,stui.eng); printf(%
15、5.2f %5.2fn,stui.tot,stui.ave); printf(n请选择查询方式:1.按学号;2.按姓名;3.按所在系;4.退出;n); break; case 3:printf(请输入所在系:); scanf(%s,xi);/*按所在系查找*/ printf(学号 姓名 年龄 所在系 语文 数学 英语 总分 平均分n); for(i=0;in;i+)/*在n个人中,挨个寻找*/if(strcmp(stui.xi,xi)=0)printf(%d%8s%d%8s ,stui.num,stui.name,stui.age,stui.xi); printf(%5.2f %5.2f %5
16、.2f ,stui.chi,stui.mat,stui.eng); printf(%5.2f %5.2fn,stui.tot,stui.ave);printf(n请选择查询方式:1.按学号;2.按姓名;3.按所在系;4.退出;n);break;default:printf(enter data error!n);scanf(%d,&k);menu();/*调用菜单函数*/void order()/*增添order个学生的信息*/int i,order;printf(需要增加几位学生:);scanf(%d,&order);printf( 学号 姓名 年龄 所在系 语文 数学 英语n);for(i
17、=n;i(n+order);i+)printf(第%2d个:,i+1);scanf(%d%s%d%s,&stui.num,stui.name,&stui.age,stui.xi);scanf(%f%f%f,&stui.chi,&stui.mat,&stui.eng);n+=order;printf(增添成功(如下):n);output();/*调用输出函数,内含菜单函数*/void delet()/*删除k个学生的信息*/int i,j,l,delet,num;printf(要删几个人:);scanf(%d,&delet);/*循环要删的人数*/for(i=0;idelet;i+)printf
18、(学号:);scanf(%d,&num);for(j=0;jn;j+)/*在n个人中,挨个寻找*/if(num=stuj.num)for(l=j;ln;l+)/*找到之后,后面的都往前移一位*/stul=stul+1;n-;printf(删除成功(如下):n);output();/*调用输出函数,内含菜单函数*/void change()/*修改*/int i,num;printf(请输入要修改学生的学号:);scanf(%d,&num);for(i=0;in;i+)/*在n个人中,挨个寻找*/if(stui.num=num)printf(第%2d个:,i+1);printf(%d%8s %d
19、%8s ,stui.num,stui.name,stui.age,stui.xi);printf(%5.2f %5.2f %5.2f ,stui.chi,stui.mat,stui.eng);printf(%5.2f %5.2fn,stui.tot,stui.ave);printf(请改: );scanf(%d%s%d%s,&stui.num,stui.name,&stui.age,stui.xi);scanf(%f%f%f,&stui.chi,&stui.mat,&stui.eng);printf(修改成功(如下):n);output();/*调用输出函数,内含菜单函数*/*为了方便,在input函数中,可将以下信息复制并粘贴到执行窗口2733 * 18 文学院 72.2 95 66.32736 * 20 计算机 86.6 77 63.252713 * 20 体育 96.8 75 70.652726 * 21 外国语 92 74 79.752715 * 19 文学院 82.6 82 77.652732 * 21 体育 97.6 86 67.52721 * 19 生科 78.6 87 77.12705 * 20 外国语 92 91 952711 * 18 生科 85 93 78.452707 * 19 计算机 94.4 97 96*/