学生成绩管理系统试验报告.docx

上传人:b****5 文档编号:6634740 上传时间:2023-01-08 格式:DOCX 页数:25 大小:185.49KB
下载 相关 举报
学生成绩管理系统试验报告.docx_第1页
第1页 / 共25页
学生成绩管理系统试验报告.docx_第2页
第2页 / 共25页
学生成绩管理系统试验报告.docx_第3页
第3页 / 共25页
学生成绩管理系统试验报告.docx_第4页
第4页 / 共25页
学生成绩管理系统试验报告.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统试验报告.docx

《学生成绩管理系统试验报告.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统试验报告.docx(25页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统试验报告.docx

学生成绩管理系统试验报告

《高级语言程序设计》综合实验

题目:

学生成绩管理系统

指导老师:

班级:

姓名:

学号:

 

完成时间:

2011年6月15日

 

一实验目的和要求

1.利用所学的三种程序基本结构以及数组、用户自定义函数进行一个小型程序的设计,

进一步理解和掌握C语言的语法以及三种基本程序结构的综合应用。

2.通过程序中涉及到的排序、查找、求和等操作加深对算法、程序设计思路、常用程序设计技巧

二实验环境内容和方法

实验环境:

WindowsXP操作系统VC++6.0编译软件

实验内容:

(一)学生信息和程序功能:

给定的原始数据和程序应实现的功能是该C程序

开发的依据,此实验只处理一个班级学生信息,最多学生数为60人。

1、学生信息的测试数据以ASCII码文件studentf.txt提供。

2、程序功能有:

(1)建立学生信息结构数组、

(2)显示学生信息表

(3)按学号查学生信息和平均分数

(4)计算各门课的平均分数

(二)程序总体设计:

1、数据结构:

依据给定的学生信息和数据类型,结构数组分量必须用结构实现。

结构类型定义为全局标识符

2、模块划分:

依据程序的数据结构和功能,遵照“自顶向下”原则,

采用基于函数的逐步求精法,描述该程序的层次结构。

该程序可按给定的程序功能直接描述模块层次结构。

该程序要求同时保留三种排序状态:

按总分排序,按学号排序,按姓名排序。

因此,必须用指针数组排序。

(三)程序总体框架:

模块层次结构只是确定模块之间的关系和函数原型,

不是程序的执行步骤。

程序总体框架是该程序的总体流程图。

该程序不是顺序执行全部功能,而是在某一时刻有选择地执行一种或多种功能。

因此,选用菜单方式是较佳的方案。

实验方法:

(一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。

(二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。

(三)根据实验内容,编译程序。

三、实验过程描述

(一)学生信息和程序功能:

1、学生信息包含:

学号,姓名,性别,三门课成绩和总分、

平均分(语文,数学,英语,总分,平均分)。

用宏定义成全局变量。

学号,姓名,性别三个信息为char型,其余为int型。

2、插入数据测试数据以ASCII码文件studentf.txt提供

3、程序功能

(1)建立学生信息结构数组(从ASCII码文件studentf.txt读入数据)

(2)显示学生信息表

(3)按学号查学生信息和平均分数

(4)计算各门课的平均分数

四、实验步骤

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1