学生成绩管理系统实验报告.docx
《学生成绩管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统实验报告
C语言集中上机实习报告
院系:
光电工程学院
班级:
02111507
姓名:
指导教师:
谢竞博
题 目:
学生成绩管理系统
2016年12月8日完成
实验报告的正文有七部分,分别是:
•题目名称:
•设计思路:
包括总体设计和每个模块的算法
•最初程序代码:
•调试过程(写明调试过程中出现的所有语法错误和逻辑错误,这是评定成绩的主要依据)
•最终程序代码:
•测试结果:
(截图)
•心得体会:
下面以一个简单的题目为例:
一、题目:
学生成绩管理系统
二、思路:
先定义学生人数和学号和学生姓名和各科成绩变量,再调用函数,最后再输出,系统基本完善。
三、最初程序代码:
#include
#include
#include
#defineNUMOFSTU10/*定义学生人数*/
#defineNUMOFCOURSE2/*定义考试科目*/
structstudent
{
intnumber;/*每个学生的学号*/
charname[10];/*每个学生的姓名*/
intscore[NUMOFCOURSE];/*每个学生M门功课的成绩*/
floatsum;/*每个学生的总成绩*/
floataverage;/*每个学生的平均成绩*/
};
typedefstructstudentSTU;
voidPrintScore(STUpt[],intn);
voidInputStudent(STUpt[],intn);
voidTotal(STUpt[],intn);
voidSort(STUpt[],intn);
intSearchByNumber(STUpt[],intn,intnumber_to_search);
intSearchByName(STUpt[],intn,charname_to_search[]);
charMenu(void);
四、调试过程:
出现的提示如下:
1.执行cl.exe时出错.
执行结果:
经过对整个程序的排错,发现在过程中,缺少一个结束语。
将输出那行改正为:
在后面添加}
结果正确。
2.H:
\C语言\学生成绩管理系统.cpp(135):
errorC2143:
syntaxerror:
missing';'before'{'
执行cl.exe时出错.
执行结果:
经过排查,发现在if(pt[j].sum>pt[k].sum)
k=j;
(k!
=i)
{
temp=pt[k];
pt[k]=pt[i];自定义变量时,缺少if条件语句,结果导致整个自定义变量发生改变
在k=j;
(k!
=i)前面添加if条件语句
结果正确
3.调试过程中,在使用按姓名查询时,出现
经排查,发现在intSearchByNumber(STUpt[],intn,intnumber_to_search)
{
inti;
for(i=0;iif(pt[i].number==number_to_search)
returni;
returni;
}返回按姓名查询时,返回值确定错误,误将返回-1写成i导致返回值全部为查询方式
将i改为-1之后,调试正常
五、最终程序为:
#include
#include
#include
#defineNUMOFSTU10/*定义学生人数*/
#defineNUMOFCOURSE2/*定义考试科目*/
structstudent
{
intnumber;/*每个学生的学号*/
charname[10];/*每个学生的姓名*/
intscore[NUMOFCOURSE];/*每个学生M门功课的成绩*/
floatsum;/*每个学生的总成绩*/
floataverage;/*每个学生的平均成绩*/
};
typedefstructstudentSTU;
voidPrintScore(STUpt[],intn);
voidInputStudent(STUpt[],intn);
voidTotal(STUpt[],intn);
voidSort(STUpt[],intn);
intSearchByNumber(STUpt[],intn,intnumber_to_search);
intSearchByName(STUpt[],intn,charname_to_search[]);
charMenu(void);
/*函数功能:
打印学生的信息,此子程序即可以打印全部学生成绩的信息,
也可以打印个别几个学生的信息
函数参数:
结构体数组的指针pt,表示要打印的学生的起始地址
整型参数n,表示要打印n个学生成绩
函数返回值:
无
*/
voidPrintScore(STUpt[],intn)
{
inti,j;
charstring[100]={'\0'},temp[NUMOFCOURSE];
strcat(string,"Number");/*建立表头*/
strcat(string,"Name");
for(i=1;i<=NUMOFCOURSE;i++)
{
strcat(string,"Score");
itoa(i,temp,10);
strcat(string,temp);
strcat(string,"");
}
strcat(string,"sum");
strcat(string,"average");
printf("%s",string);/*打印表头*/
for(i=0;i{/*打印n个学生的信息*/
printf("\nNo.%3d%8s",pt[i].number,pt[i].name);
for(j=0;jprintf("%7d",pt[i].score[j]);
printf("%8.2f%8.2f\n",pt[i].sum,pt[i].average);
}
}
/*函数功能:
从键盘获得学生的信息子程序
函数参数:
结构体数组的指针pt,表示要输入的学生信息头
整型变量n,表示要输入的元素的个数
函数返回值:
无
*/
voidInputStudent(STUpt[],intn)
{
inti,j;
for(i=0;i{
printf("\n输入学号:
");
scanf("%d",&pt[i].number);
printf("\n输入名字:
");
scanf("%s",pt[i].name);
for(j=0;j{
if(j)
{
printf("\n输入高数分数score2:
");
}
else{
printf("\n输入英语分数score1:
");
}
scanf("%d",&pt[i].score[j]);
}
}
}
/*函数功能:
计算每个学生的M门功课的总成绩和平均成绩子模块
函数参数:
结构体数组的指针pt,表示要输入的学生信息头
整型变量n,表示要处理的元素的个数
函数返回值:
无
*/
voidTotal(STUpt[],intn)
{
inti,j;
for(i=0;i{
pt[i].sum=0;
for(j=0;jpt[i].sum=pt[i].sum+pt[i].score[j];
pt[i].average=pt[i].sum/NUMOFCOURSE;
}
}
/*函数功能:
用选择法按总成绩由高到低排序
函数参数:
结构体数组的指针pt,表示要输入的学生信息头
整型变量n,表示要处理的元素的个数
函数返回值:
无
*/
voidSort(STUpt[],intn)
{
inti,j,k;
STUtemp;
for(i=0;i{
k=i;
for(j=i;jif(pt[j].sum>pt[k].sum)
k=j;
if(k!
=i)
{
temp=pt[k];
pt[k]=pt[i];
pt[i]=temp;
}
}
}
/*函数功能:
用顺序查找法按学号查找
函数参数:
结构体数组首地址pt,
整型变量n,表示数组长度,
整型变量number_to_search,表示要查找的学号
函数返回值:
如果找到学号,则返回对应下标,否则返回-1
*/
intSearchByNumber(STUpt[],intn,intnumber_to_search)
{
inti;
for(i=0;iif(pt[i].number==number_to_search)
returni;
return-1;
}
/*函数功能:
用顺序查找法按学号查找
函数参数:
结构体数组首地址pt,
整型变量n,表示数组长度,
字符数组首地址,name_to_search, 用来指向要查找的姓名
函数返回值:
如果找到姓名,则返回对应下标,否则返回-1
*/
intSearchByName(STUpt[],intn,charname_to_search[])
{
inti;
for(i=0;iif(strcmp(pt[i].name,name_to_search)==0)
returni;
return-1;
}
/*函数功能:
查找并显示查找结果子模块,可按姓名和学号分别查找,
找到,显示该元素的信息,如果没查到,也有相应的提示
函数参数:
结构体数组的指针pt,表示要输入的学生信息头
整型变量n,表示要处理的元素的个数
函数返回值:
无
*/
voidFind(STUstu[],intn)
{
intnumber,k,choose;
charname[25];
do
{
printf("请选择:
1-按学号查询,2-按姓名查询:
");
scanf("%d",&choose);
}while(!
(choose==1||choose==2));
if(choose=