C语言课程设计综合题目.docx
《C语言课程设计综合题目.docx》由会员分享,可在线阅读,更多相关《C语言课程设计综合题目.docx(20页珍藏版)》请在冰豆网上搜索。
C语言课程设计综合题目
3.综合设计题目
3.1题目
一、问题描述:
对一个有N个学生的班级,每个学生有M门课程。
该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。
二、功能要求:
1.本系统采用一个结构体数组,每个数据的结构应当包括:
学号、姓名、M门课程名称。
2.本系统显示这样的菜单:
请选择系统功能项:
a、成绩录入
b、成绩显示
c、成绩保存
d、成绩排序
e、成绩修改(要求先输入密码)
f、成绩统计
(1)显示每门课程成绩最高的学生的基本信息
(2)显示每门课程的平均成绩
(3)显示超过某门课程平均成绩的学生人数
g、退出系统
3.执行一个具体的功能之后,程序将重新显示菜单。
4.将学生成绩保存到文件中。
3.2成员及分工
组员
模块
高浠瑞
主函数的编译、画图和截屏,整理word文档
郁万涛
调试程序并完善课题内容
袁如意
子函数:
input(成绩录入)和output(成绩显示)的编译、画图和截屏
石若颖
子函数:
save(成绩保存)和rank(成绩排序)的编译、画图和截屏
刘瑞君
子函数:
change(成绩修改、要求先输入密码)的编译、画图和截屏
霍万新
子函数:
stat(成绩统计)包括
(1)显示每门课程成绩最高的学生的基本信息
(2)显示每门课程的平均成绩
(3)显示超过某门课程平均成绩的学生人数,共3个画图和截屏
3.3程序的主要功能实现基本的成绩管理,如成绩录入、成绩显示、成绩保存、成绩排序、成绩修改、成绩统计、退出系统(分别使用了input()、output()、save()、rank()、change()、stat()等函数),执行一个具体的功能之后,程序将重新显示菜单,将学生成绩保存到文件中。
图3.1主函数流程图
3.4各函数的功能
图3.6子函数change()的流程图
图3.7显示每门课程成绩最高的学生的基本信息
图3.8显示每门课程的平均成绩
图3.9显示超过某门课程平均成绩的学生人数
3.5源程序
#include
#include
#include
#defineN10/*学生人数*/
#defineM4/*课程数*/
#definePASS890508/*修改密码*/
voidinput();/*成绩输入*/
voidoutput();/*成绩显示*/
voidsave();/*成绩保存*/
voidrank();/*成绩排序*/
voidchange();/*成绩修改*/
voidstat();/*成绩统计*/
voiderrorinput();/*出错输出*/
structstudent/*成绩数据结构体*/
{
charname[10];
intnum;
floatscore[M];
doublesum;
}
stud[N];
charsubject_name[N][10];
intmain()
{
charx;
while
(1)
{
system("cls");
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf("&&&班级成绩管理系统&&&\n");
printf("&&&&&&\n");
printf("&&&§A§[成绩录入]&&&\n");
printf("&&&&&&\n");
printf("&&&§B§[成绩显示]&&&\n");
printf("&&&&&&\n");
printf("&&&§C§[成绩保存]&&&\n");
printf("&&&&&&\n");
printf("&&&§D§[成绩排序]&&&\n");
printf("&&&&&&\n");
printf("&&&§E§[成绩修改(需要密码)]&&&\n");
printf("&&&&&&\n");
printf("&&&§F§[成绩统计]&&&\n");
printf("&&&&&&\n");
printf("&&&§G§[退出系统]&&&\n");
printf("&&&&&&\n");
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf("输入你的选择:
");
scanf("%c",&x);
switch(x)
{
case'a':
case'A':
input();
break;
case'b':
case'B':
output();
break;
case'c':
case'C':
save();
break;
case'd':
case'D':
rank();
break;
case'e':
case'E':
change();
break;
case'f':
case'F':
stat();
break;
case'g':
case'G':
return0;
default:
errorinput();
break;
}
getchar();
}
return0;
}
voidinput()/*成绩输入*/
{
inti,j;
printf("请输入科目名称:
\n");
for(i=0;i{
printf("科目%d:
",i+1);
scanf("%s",subject_name[i]);
}
for(i=0;i{
printf("学生%d:
\n",i+1);
printf("姓名:
");
scanf("%s",&stud[i].name);
printf("学号:
");
scanf("%d",&stud[i].num);
for(j=0;j{
printf("%s成绩:
",subject_name[j]);
scanf("%f",&stud[i].score[j]);
}
printf("\n");
}
}
voidoutput()/*成绩显示*/
{
inti,j;
system("cls");
printf("姓名学号");
for(i=0;i<=M;i++)
printf("%s",subject_name[i]);/*在一行里面输出科目名称,相互之间有间隔。
作为其下列表的目录。
*/
printf("\n");
for(i=0;i{
printf("%1s\t%1d\t",stud[i].name,stud[i].num);
for(j=0;jprintf("%5.1f\t",stud[i].score[j]);
printf("\n");
}
printf("!
输入任意键返回!
\n");
getchar();
}
voidsave()/*成绩保存*/
{
FILE*fp;
inti,j;
if((fp=fopen("data.txt","w"))==NULL)/*文件打开*/
{
printf("Fileopenerror!
\n");
return;
}
for(i=0;ifprintf(fp,"%s",subject_name[i]);
fprintf(fp,"\n");
for(i=0;i{
fprintf(fp,"%5s%5d",stud[i].name,stud[i].num);
for(j=0;j{
fprintf(fp,"%6.1f",stud[i].score[j]);
}
fprintf(fp,"\n");
}
if(fclose(fp))/*文件关闭*/
{
printf("Cannotclosethefile!
\n");
return;
}
printf("Filesavesucceed!
\n");
getchar();
return;
}
voidrank()/*成绩排序*/
{
voidswap(int*px,int*py);
int*a;
a=newint[N];
inti,j;
doubletot;
system("cls");
for(i=0;i{
a[i]=i;
for(j=0,tot=0;jtot=tot+stud[i].score[j];
stud[i].sum=tot;
}
for(i=0;ifor(j=0;jif(stud[a[j]].sumswap(&a[j],&a[j+1]);
}
printf("学号姓名总分\n");
for(i=0;iprintf("%d\t%s\t%.1f\n",stud[a[i]].num,stud[a[i]].name,stud[a[i]].sum);
delete[]a;
printf("!
输入任意键退出!
\n");
getchar();
}
voidswap(int*px,int*py)
{
intt;
t=*px;
*px=*py;
*py=t;
}
voidchange()/*成绩修改*/
{
charch[10],flag='Y';
intnum;
inti,j;
printf("请输入密码:
");//检查密码
scanf("%s",ch);
if(strcmp(ch,"890508")!
=0)
{
printf("密码错误!
(按任意键返回)\n");
getchar();
return;
}
while(flag=='Y'||flag=='y')//修改成绩
{
printf("输入要修改成绩的学生学号:
");//按学号搜索
scanf("%d",&num);
for(i=0;iif(num==stud[i].num)
break;
if(i==N)
{
if(num==0)
return;
else
{
printf("没有找到学生,请重新输入!
(输入0退出)\n");
continue;
}
}
printf("请输入新的各科成绩:
\n");//修改成绩
for(j=0;j{
printf("%s:
",subject_name[j]);
scanf("%f",&stud[i].score[j]);
}
printf("是否继续修改(Y/N)?
");
scanf("%s",&flag);
}
}
voidstat()/*成绩统计*/
{
voidstate_high();
voidstate_ave();
voidstate_num();
charchoice;
system("cls");
printf("&&&================================================&&&\n");
printf("&&&选择菜单&&&\n");
printf("&&&A.显示每门课程成绩最高的学生的基本信息&&&\n");
printf("&&&B.显示每门课程的平均成绩&&&\n");
printf("&&&C.显示超过某门课程平均成绩的学生人数&&&\n");
printf("&&&D.返回&&&\n");
printf("&&&================================================&&&\n");
scanf("%s",&choice);
switch(choice)
{
case'A':
case'a':
state_high();
break;
case'B':
case'b':
state_ave();
break;
case'C':
case'c':
state_num();
break;
case'D':
case'd':
break;
default:
errorinput();stat();
break;
}
printf("按任意键返回主菜单\n");
getchar();
}
voidstate_high()/*输出各科最高分的基本信息*/
{
inti,j,high;
system("cls");
for(j=0;j{
for(i=0,high=0;i最高分的stu[high]*/
{
if(stud[i].score[j]>stud[high].score[j])
high=i;
}
printf("%s最高分:
",subject_name[j]);
printf("%s\t学号%d\t\n",stud[high].name,stud[high].num);
}
printf("\n");
}
voidstate_ave()/*每门课程平均成绩*/
{
inti,j;
floatsum,ave;
system("cls");
for(j=0;j{
for(i=0,sum=0;i{
sum+=stud[i].score[j];
}
ave=sum/N;
printf("%s平均成绩:
%.1f\n",subject_name[j],ave);
}
printf("\n");
}
voidstate_num()/*每门课程超过平均成绩的学生人数*/
{
inti,j,n;
floatsum,ave;
system("cls");
for(j=0;j{
for(i=0,sum=0;i{
sum=sum+stud[i].score[j];
}
ave=sum/N;
for(i=0,n=0;i{
if(stud[i].score[j]>ave)
n++;
}
printf("%s超过平均分的人数为:
%d\t\n",subject_name[j],n);
}
printf("\n");
}
voiderrorinput()/*出错输出*/
{
system("cls");
printf("无效的输入,请重新输入!
\n");
}
3.6程序运行结果
图3.10主函数运行图
图3.11成绩显示结果
图3.12保存结果
图3.13成绩排序结果
图3.14输入错误密码
图3.15输入密码并修改
图3.16显示每门课程成绩最高的学生的基本信息
图3.17成绩统计界面
图3.18显示每门课程的平均成绩
图3.19显示超过某门课程平均成绩的学生人数
图3.20输入界面
图3.21退出系统
参考书目
1.谭浩强编著,C程序设计,清华大学出版社,1991年7月
2.陈朔鹰等编著,C语言程序设计基础教程,兵器工业出版社,1994年9月
3.姜仲秋等主编,C语言程序设计,南开大学出版社,1998年1月