题目:学生成绩管理系统
学号:
专业:
姓名:
指导教师:
完成日期:2010年7月8日
一、目标
1.进一步掌握和利用C语言进行程设计的能力;
2、进一步理解和运用结构化程设计的思想和方法;
3、初步掌握开发一个小型实用系统的基本方法;
4、学会调试一个较长程序的基本方法;
5、学会利用流程图或N-S图表示算法;
6、掌握书写程设计开发文档的能力(书写课程设计报告);
二、内容及功能
1、每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩。
2、输入功能:可以一次完成无数条记录的输入。
3、输出功能:完成全部学生记录的显示。
4、查找功能:完成按姓名查找学生记录,并显示。
5、排序功能:按学生平均成绩进行排序。
6、有一个清晰美观界面来调用各个功能
三、各功能模块的算法处理流程及相关说明
整个系统除了主函数外,另外还有4个函数,实现四大功能:输入功能、输出功能、查找功能、排序功能。各个函数的详细设计说明分别如下:
1主函数int main()
主要实现“功能选择”的界面,利用switch()语句实现各函数的调用,系统根据输入的数字选项来调用相应的函数。在这个界面里有显示系统的四大功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,按回车键回到主界面。流程如图3.1:
2、输入函数void input(struct student *p)
主要实现对学生信息的输入,利用do while 语句实现对多个学生信息的输入,用字符y/n来判断是否继续输入下一个学生的信息。如果输入字符y,则继续输入学生的信息;如果输入字符n,则退出输入界面回到主界面。流程如图3.2:
3、输出函数void shuchu(struct student *p)
主要实现对学生信息的输出,首先利用flag==0来判断是否存储有学生信息,如果没有,则输出“无学生成绩,请先录入学生信息“;如果已存在学生信息,则从主界面进入输出界面,显示出所有学生的相关信息。按回车键可返回主界面。流程如图3.3:
4、排序函数void aveg(struct student *p)
主要实现对学生成绩的排序,首先利用flag==0来判断电脑中是否存储有学生信息,如果没有,则输出“无学生成绩,请先录入学生信息“;如果有,则按照选择排序的方法按平均分由高到低对所有学生信息进行排序,然后输出排序后所有学生的信息。按回车键可返回主界面。流程如图3.4:
5、查找函数void find(struct student *p)
主要实现对学生信息的查找,利用for循环和strcmp函数来实现查找功能,利用j>=flag 来判断是否找到该学生的信息。如果该学生信息已找到,则输出该学生的相关信息;如果未找到,则输出"未找到该学生纪录,请核对后重新查找!"。按回车键可返回主界面。流程如图3.5:
图3.1
图3.2
图3.3
图3.4
图3.5
四、程序源代码
#include
#include
#include
#define N 100 /*定义符号常量,代表学生人数最大值*/
int flag=0; /*全局变量,用于记录数组的当前位置*/
struct student /*定义结构体类型,代表学生信息*/
{
char name[9]; /*学生姓名*/
char number[10]; /*学生学号*/
float score[3]; /*一个学生三门课的成绩*/
float ave; /*求平均分*/
};
void input(struct student *p); /*定义输入学生信息函数*/
void shuchu(struct student *p); /*定义输出函数*/
void aveg(struct student *p); /*定义按平均分排序函数*/
void find(struct student *p); /*定义查找函数*/
/*********************系统界面************************/
void main()
{
char bianhao; /*定义局部变量,用于记录用户选择的功能编号*/ struct student stu[N]; /*定义结构体数组,用于记录学生信息*/
do /*利用循环显示界面*/
{
system("cls"); /*清屏函数*/
printf("\n\n\n");
printf("\t\t *************************************\n");
printf("\t\t * 学生成绩管理系统 *\n");
printf("\t\t * *\n");
printf("\t\t * *\n");
printf("\t\t * 1.输入学生信息 *\n");
printf("\t\t * 2.输出学生信息 *\n");
printf("\t\t * 3.按平均分排序 *\n");
printf("\t\t * 4.查找学生信息 *\n");
printf("\t\t * 5.退出 *\n");
printf("\t\t * *\n");
printf("\t\t * *\n");
printf("\t\t *************************************\n");
printf("\t\t请输入功能选择编号(1-5):");
fflush(stdin); /*清空输入缓冲区*/
scanf("%c",&bianhao); /*接受用户选择的功能编号*/
switch(bianhao) /*输入不同功能编号调用相应函数来完成功能*/
{
case'1':
input(stu);break; /*调用输入学生信息函数,参数为学生信息数组名*/ case'2':
shuchu(stu);break; /*调用输出函数*/
case'3':
aveg(stu); break; /*调用按平均分排序函数,参数是数组名*/
case'4':
find(stu); break; /*调用按学号查找学生信息函数*/
}
}while(bianhao!='5'); /*判断是否退出*/
printf("\n\n\t\t ---------------谢谢使用----------------\n\n");
}
/**************************输入函数************************/
void input(struct student *p) /*定义输入学生信息函数*/
{
char ch; /*用于接收用户指令*/
do /*利用循环,由用户控制输入学生成绩*/
{
system("cls");
printf("\n输入第%d个学生的信息:\n输入学号:",flag+1);
scanf("%s",p[flag].number);
printf("\n输入姓名:");
scanf("%s",p[flag].name);
printf("\n输入数学成绩:");
scanf("%f",&p[flag].score[0]);
printf("\n输入英语成绩:");
scanf("%f",&p[flag].score[1]);
printf("\n输入C语言成绩:");
scanf("%f",&p[flag].score[2]);
p[flag].ave=(p[flag].score[0]+p[flag].score[1]+p[flag].score[2])/3;
printf("总分为:%.1f\n",p[flag].score[0]+p[flag].score[1]+p[flag].score[2]); printf("平均分为:%.1f",p[flag].ave);
flag++; /*记录当前输入的学生资料的个数*/
printf("\n是否继续输入(y/n)\n");
fflush(stdin); /*清空输入缓冲区*/
ch=getchar();
}while(ch=='y'||ch=='Y'); /*判断用户指令,是否继续输入*/
}
/*********************输出函数**********************/
void shuchu(struct student *p) /*输出学生信息*/
{
int i ; /*定义循环变量i,j*/
if(flag==0) /*判断数组中学生成绩是否存在*/
printf("无学生成绩,请先录入学生信息\n");
else
{
printf("\t学号\t姓名\t数学\t英语\tC语言\t总分\t平均分\n");
for(i=0;i printf("\t%-6s\t%-4s\t%-6.1f\t%-6.1f\t%2.1f\t%4.1f\t%4.1f\n",p[i].number,p[i].n ame, p[i].score[0],p[i].score[1],p[i].score[2],p[i].score[0]+p[i].score[1]+p[i].scor e[2],p[i].ave); } printf("\n回车键返回主程序\n"); fflush(stdin); /*清空输入缓冲区*/ getchar(); } /********************排序函数************************/ void aveg(struct student *p) /*定义按平均分排序函数*/ { int i,j,k; /*定义循环变量i,j,最小数位置k*/ struct student t; /*定义交换临时变量*/ if(flag==0) /*判断数组中学生成绩是否存在*/ printf("无学生成绩,请先录入学生信息\n"); else { for(i=0;i { k=i; for(j=i+1;j if((p[k].score[0]+p[k].score[1]+p[k].score[2])/3<(p[j].score[0] +p[j].score[1]+p[j].score[2])/3) k=j; if(k!=i) /*如果最小数不是比较数列中第一个,对调*/ { t=p[k]; p[k]=p[i]; p[i]=t; } } printf("\n按平均分排序:\n\n"); printf("\t学号\t姓名\t数学\t英语\tC语言\t总分\t平均分\t名次\n"); for(j=0;j printf("\t%-6s\t%-4s\t%-6.1f\t%-6.1f\t%2.1f\t%4.1f\t%4.1f\t%-5d\n",p[j].number, p[j].name,p[j].score[0],p[j].score[1],p[j].score[2], p[j].score[0]+p[j].score[1]+p[j].score[2],p[j].ave,j+1); } printf("\n回车键返回主程序\n"); fflush(stdin); /*清空输入缓冲区*/ getchar(); } /************************查找函数*************************/ void find(struct student *p) /*定义查找函数*/ { int j; char number[10]; /*用于接收用户输入的学生学号*/ system("cls"); /*清屏函数*/ printf("\n请输入学号:\n"); scanf("%s",number); for(j=0;j if(strcmp(number,p[j].number)==0) { printf("\n\t学号\t姓名\t数学\t英语\tC语言\t总分\t平均分\t名次\n"); p[j].ave=(p[j].score[0]+p[j].score[1]+p[j].score[2])/3; printf("\t%-4s\t%-6s\t%-6.1f\t%-6.1f\t%-8.1f%-6.1f\t%.1f\t%d\n",p[j].number,p[j ].name, p[j].score[0],p[j].score[1],p[j].score[2],p[j].score[0]+p[j].score[1]+p[j].scor e[2],p[j].ave,j+1); break; } } if(j>=flag) /*如果没找到,会从循环条件退出*/ printf("\n未找到该学生纪录,请核对后重新查找!\n"); fflush(stdin); /*清空输入缓冲区*/ printf("\n回车键返回上一功能菜单\n"); getchar(); } 五、心得体会 学习这门课程后,我有许多的心得与体会。下面我就来谈一谈我上这门课后所得的收获。 经过一个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。 通过这次课程设计我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。 上这门课后,我还明白了,一个软件有很多模块,每个模块又会有许多功能。当你在准备开发一个软件的时候,你首先想到的就是要完整的把这件事做完,不要做的半途而废,那样的话你干脆就不要打"开发"这个两个字的主意了,更谈不上什么是开发,在开发之前还要想想我是否有能力完成这个事情,是否需要他人的帮助,说通俗一点就是看你有没有底气,如果你不具备以上的一些基本要求的话就最好自己做一些小控件多锻炼自己的动手能力以提升自己的技术,不要急于进行"开发",那样没多大好处,因为你的底气就不足,怎么做事,更谈不上进行IT行业中的"软件开发"。 在开发软件的时候,首先的第一个任务就是你准备开发的这个软件的整个框架图,这一步应多征求组内成员的意见,最后设计出这个软件的大体框架,做到心中有数.接下来的任务是和组内成员一起讨论我们所想开发的这个软件是否能完成,是否和我们现实中的物理模型相同。 六、参考书目: 谭浩强《C程序设计》(第二版)清华大学出版社 1999.12 谭浩强《C程序设计题解和上机指导》(第二版) 2000.9 杨路明《C语言程序设计教程》(第2版)北京邮电大学出版社 2005.12