C语言课程设计综合题目.docx

上传人:b****4 文档编号:3816878 上传时间:2022-11-25 格式:DOCX 页数:20 大小:250.65KB
下载 相关 举报
C语言课程设计综合题目.docx_第1页
第1页 / 共20页
C语言课程设计综合题目.docx_第2页
第2页 / 共20页
C语言课程设计综合题目.docx_第3页
第3页 / 共20页
C语言课程设计综合题目.docx_第4页
第4页 / 共20页
C语言课程设计综合题目.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言课程设计综合题目.docx

《C语言课程设计综合题目.docx》由会员分享,可在线阅读,更多相关《C语言课程设计综合题目.docx(20页珍藏版)》请在冰豆网上搜索。

C语言课程设计综合题目.docx

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;j

printf("%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;i

fprintf(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;j

tot=tot+stud[i].score[j];

stud[i].sum=tot;

}

for(i=0;i

for(j=0;j

if(stud[a[j]].sum

swap(&a[j],&a[j+1]);

}

printf("学号姓名总分\n");

for(i=0;i

printf("%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;i

if(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月

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

当前位置:首页 > 总结汇报 > 实习总结

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

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