C语言课程设计报告学生成绩管理系统Word格式.docx
- 文档编号:5799248
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:18
- 大小:486.65KB
C语言课程设计报告学生成绩管理系统Word格式.docx
《C语言课程设计报告学生成绩管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告学生成绩管理系统Word格式.docx(18页珍藏版)》请在冰点文库上搜索。
一、实验目的
通过实验把C语言中的顺序结构、选择结构、循环结构、数组、函数等主要知识点进行综合应用,加深学生对编程算法思想的理解,进一步提高学生的编程能力。
二、设备与环境
硬件:
多媒体计算机
软件:
Windows系列操作系统、C语言编译系统
三、实验内容
主要功能:
可以实现对任意学生数量的学生成绩进行统计,然后对每个学生的成绩进行求和,求平均分,并可依据总分和平均分对学生成绩进行排序。
还可以根据学生的姓名或者学号对学生信息进行查询。
为了方便统计,还可以计算出每个科目的最高分和最低分。
学生成绩管理系统
1.录入学生成绩。
2.计算每个同学的总分、平均分。
3.排序。
(1)按总分排序
(2)按平均分排序
4.查找信息。
5.统计各课程的最高分、最低分
6.打印成绩表。
7.退出
四、实验结果及分析
主函数:
定义变量和字符数组用来存储数据,利用变量来接受用户需要统计的学生人数、科目总数、科目名称。
结果如图所示:
使用清屏函数清屏便于浏览,并利用函数调用菜单。
菜单函数
利用指针数组对菜单选项进行保存。
结果如图所示:
定义函数readdat来接受用户输入的数据。
通过利用数组地址传送的方式和指针来实现数据的存储。
2.计算每个同学的总分和平均分。
函数caculate通过地址传送和指针来接收数据。
利用for循环来完成每行数据的求和和平均值的计算(利用指针来实现对数据的调用),并把计算完的数据存储在每行的末尾。
最后再调用函数输出计算后的结果。
3.
排序。
当选择排序之后会出现二级子菜单。
然后选择所需要按照的关键字进行排序。
二级菜单通过switch语句来实现,利用交换排序法来对数据进行降序排序(满足交换条件的数据调用exchange函数来交换整行数据)。
然后在调用输出函数来输出排序后的数据。
(可以通过学生的学号或者姓名对学生信息进行查找)
利用for循环和字符串比较函数对输入信息和数组内的信息进行比较,通过if语句进行判断,输出查找到的学生的成绩信息。
5.统计各课程的最高分和最低分。
利用for循环和if条件句对成绩数组中的成绩进行判断,将每一列的最大值存储在列的末尾,然后调用writedat函数输出学生成绩表。
调用writedat函数将学生所有成绩输出。
1.退出程序。
五、实验程序(完整的程序代码)
#include<
stdio.h>
stdlib.h>
string.h>
#defineSN52//最多学生人数+课程最高分,最低分
#defineCN53//最多课程门数+总分+平均分
/*函数声明*/
charmenu();
voidreaddat(charnum[][20],charname[][20],float(*ps)[CN],intsn,intcn);
voidcaculate(charkemu[][20],charnum[][20],charname[][20],float(*ps)[CN],intsn,intcn);
voidwritedat(charkemu[][20],charnum[][20],charname[][20],floatscore[][CN],intsn,intcn);
voidsort(charkemu[][20],charnum[][20],charname[][20],floatscore[][CN],intsn,intcn,intm);
voidexchange(charnum[][20],charname[][20],floatscore[][CN],inti,intj,intk,intcn);
voidsearch(charkemu[][20],charnum[][20],charname[][20],floatscore[][CN],intsn,intcn);
voidtongji(charkemu[][20],charnum[][20],charname[][20],floatscore[][CN],intsn,intcn);
/*主函数*/
voidmain()
{
intsn,cn,i,m;
//定义变量
/*定义字符数组存储表头,学号,姓名*/
charkemu[CN+2][20]={"
学号"
"
姓名"
},ch,ch1,ch2,num[SN][20],name[SN][20];
floatscore[SN][CN];
//存储成绩
printf("
请输入学生人数:
(<
%d)\n"
SN-2);
scanf("
%d"
&
sn);
请输入课程门数:
CN-3);
cn);
请输入课程名称:
\n"
);
for(i=2;
i<
cn+2;
i++)
%s"
kemu[i]);
strcpy(kemu[i],"
总分"
strcpy(kemu[i+1],"
平均分"
//在科目后面加上总分和平均分
strcpy(num[sn],"
"
strcpy(num[sn+1],"
//将计算最高分最低分列的学号列赋空格,防止乱码输出
strcpy(name[sn],"
最高分"
strcpy(name[sn+1],"
最低分"
//为最后两行添加表头
getchar();
//接收缓存区的回车,防止输入时出错
system("
cls"
);
while
(1)
{
ch=menu();
switch(ch)
{
case'
1'
:
readdat(num,name,score,sn,cn);
printf("
break;
2'
caculate(kemu,num,name,score,sn,cn);
printf("
break;
3'
system("
//清屏,方便后续浏览
aaa:
printf("
1.按照总分排序\t2.按照平均分排序\t0.返回上一级菜单\n\n请输入你的选择:
ch1=getchar();
switch(ch1)
{
case'
m=0;
sort(kemu,num,name,score,sn,cn,m);
break;
m=1;
0'
break;
default:
输入错误!
"
getchar();
gotoaaa;
}
4'
search(kemu,num,name,score,sn,cn);
5'
tongji(kemu,num,name,score,sn,cn);
6'
writedat(kemu,num,name,score,sn+2,cn+2);
程序结束!
exit
(1);
default:
}
}
}
/*主菜单*/
charmenu()
/*利用指针数组来存储菜单*/
char*str1[]={"
学生成绩管理系统"
1.录入学生成绩"
2.计算每个同学的总分、平均分"
3.排序"
4.查找信息"
5.统计各课程的最高分、最低分"
6.打印成绩表"
0.退出"
};
charch;
inti;
\n\n"
for(i=0;
8;
i++)
puts(str1[i]);
\n请输入你的选择:
%c"
ch);
returnch;
/*录入学生成绩*/
voidreaddat(charnum[][20],charname[][20],float(*ps)[CN],intsn,intcn)
inti,j;
请输入%d个学生的学号:
sn);
sn;
num[i]);
请输入%d个学生的姓名:
name[i]);
请输入%d个学生的%d门课的成绩:
sn,cn);
for(j=0;
j<
cn;
j++)
scanf("
%f"
ps[i]+j);
}
/*计算每个同学的总分和平均分*/
voidcaculate(charkemu[][20],charnum[][20],charname[][20],float(*ps)[CN],intsn,intcn)
*(*(ps+i)+cn)=0;
*(*(ps+i)+cn)+=*(*(ps+i)+j);
*(*(ps+i)+(cn+1))=*(*(ps+i)+cn)/cn;
writedat(kemu,num,name,ps,sn,cn+2);
/*输出所有信息*/
voidwritedat(charkemu[][20],charnum[][20],charname[][20],floatscore[][CN],intsn,intcn)
\n所有学生的信息为:
%s\t"
kemu[i]);
printf("
%.1f\t"
score[i][j]);
/*按照总分,平均分排序的函数*/
voidsort(charkemu[][20],charnum[][20],charname[][20],floatscore[][CN],intsn,intcn,intm)
inti,j,k;
k=i;
for(j=i+1;
if(score[i][cn+m]<
score[j][cn+m])
k=j;
if(k!
=i)
exchange(num,name,score,i,j,k,cn);
writedat(kemu,num,name,score,sn,cn+2);
}
/*交换学号,姓名,成绩的函数*/
voidexchange(charnum[][20],charname[][20],floatscore[][CN],inti,intj,intk,intcn)
charstr[20];
floatt;
/*交换学号*/
strcpy(str,num[i]);
strcpy(num[i],num[k]);
strcpy(num[k],str);
/*交换姓名*/
strcpy(str,name[i]);
strcpy(name[i],name[k]);
strcpy(name[k],str);
/*交换成绩*/
for(j=0;
t=score[i][j];
score[i][j]=score[k][j];
score[k][j]=t;
/*按姓名或学号查找*/
voidsearch(charkemu[][20],charnum[][20],charname[][20],floatscore[][CN],intsn,intcn)
charp[20];
请输入要查找的学生姓名或学号:
gets(p);
if(strcmp(name[i],p)==0||strcmp(num[i],p)==0)
所找学生信息为:
for(j=0;
cn+4;
kemu[j]);
%s\t%s\t"
num[i],name[i]);
if(i>
=sn)
该学生不存在!
/*统计各课程的最高分、最低分*/
voidtongji(charkemu[][20],charnum[][20],charname[][20],floatscore[][CN],intsn,intcn)
j++)
score[sn][j]=score[0][j];
score[sn+1][j]=score[0][j];
for(i=0;
if(score[i][j]>
score[sn][j])score[sn][j]=score[i][j];
if(score[i][j]<
score[sn+1][j])score[sn+1][j]=score[i][j];
writedat(kemu,num,name,score,sn+2,cn+2);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 学生 成绩管理系统