您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > c语言实验报告(学生学籍管理系统)
实验报告学生学籍管理系统专业:信息管理与信息系统班级:学号:姓名:学生学籍管理系统一、实验要求:一个班级有若干名学生(不超过10名),共有三门课程,分别是语文、数学、英语,要求编写一个成绩的管理系统,每个学生要求有学号、姓名、性别、三门课的成绩以及平均成绩,要实现从键盘上输入学号(必须为数字)、姓名、性别、三门课程的成绩,并求每一位学生的平均成绩(即每一行的平均值)、每一位学生的最高分(每一行的最大值),求每一门课程的平均分(即每一列的平均值)、每一门课的最高分(即每一列的最大值),并输出全部结果。根据学生的平均成绩进行排序,对语文、数学、英语成绩进行排序,并输出排序结果,排序必须使用冒泡排序法。并且具有如下的菜单:学生学籍管理系统***********************MENU***********************1、Enternewdata2、Browseall3、Searchbynum4、Orderbyaverage5、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、实验流程图:选择操作选择1输出操作界面选择2选择3选择4选择5否否否否否是是是是是输入数据浏览数据查找学生按学号排序退出系统开始结束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语言应用这门课程的兴趣。五、源程序#includestdio.h/*头文件*/#includestring.h#includestdlib.h#defineN100#defineM3typedefstructstudent/*定义学生结构体*/{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;kn;k++)/*比较到第n个学生*/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;jM;j++){printf(score%d:,j+1);scanf(%d,&stu[i].score[j]);}for(sum=0,j=0;jM;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;in;i++){printf(\nInput%dthstudentrecord.\n,i+1);input(i);/*调用输入函数*/}for(i=0;in;i++)/*求每一行的最大值,即求每一位学生的三门课中的最高分*/{stu[i].Max_course=stu[i].score[0];for(j=1;jM;j++){if(stu[i].Max_coursestu[i].score[j])stu[i].Max_course=stu[i].score[j];}}for(i=0;in;i++)/*把输入的信息分别复制到stu_Chinese[N],stu_Math[N],stu_English[N]中*/{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;jM;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;in;i++)/*求第一列的平均值,即求语文平均成绩*/{k=k+stu[i].score[0];ave_Chinese=(k*1.0)/n;}k=0;for(i=0;in;i++)/*求第二列的平均值,即求数学平均成绩*/{k=k+stu[i].score[1];ave_Math=(k*1.0)/n;}k=0;for(i=0;in;i++)/*求第三列的平均值,即求英语平均成绩*/{k=k+stu[i].score[2];ave_English=(k*1.0)/n;}Max[0]=stu[0].score[0];/*第一列的最大值,即语文成绩最高分*/for(i=1;in;i++){if(Max[0]stu[i].score[0])Max[0]=stu[i].score[0];}Max[1]=stu[0].score[1];/*第二列的最大值,即数学成绩最高分*/for(i=1;in;i++){if(Max[1]stu[i].score[1])Max[1]=stu[i].score[1];}Max[2]=stu[0].score[2];/*第三列的最大值,即英语成绩最高分*/for(i=1;in;i++){if(Max[2]stu[i].score[2])Max[2]=stu[i].score[2];}puts(\n--------------------------------------------------------------------);printf(\nNO:nameChineseMathEnglishaverageMax_course\n);for(i=0;in;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---------------
本文标题:c语言实验报告(学生学籍管理系统)
链接地址:https://www.777doc.com/doc-3675822 .html