学生成绩管理系统报告.docx
《学生成绩管理系统报告.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统报告.docx(33页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统报告
成绩:
《C语言案例教学》
课程设计报告
课程名称:
C语言案例教学
实验项目:
学生成绩管理系统
姓名:
专业:
计算机
班级:
12级2班
学号:
计算机科学与技术学院
2012年12月
C程序案例报告
1.功能需求分析
这里提供了一个简单的学生成绩管理系统,能够实现登陆,查询,删除,修改,保存,读入,一系列的功能。
主要功能需求描述如下:
(1)系统登录界面
首先先注册一个账号以及密码,然后进入登陆界面,进行登陆功能。
(2)添加学生成绩信息
用户根据提示输入学生的信息,包括学号.姓名.英语成绩,数学成绩。
(3)显示学生信息
当输入完所有的信息时。
程序会自动显示学生的信息。
(4)查询学生信息
可以分别按学号,姓名对学生的所有信息进行查询。
(5)删除学生信息
首先提示用户输入要进行修改操作的人数,然后依次输入每个学生的学号进行删除。
如果没有找到要修改学生的学号,系统会给出提示,检查输入是否正确。
(6)新增学生信息
首先提示用户输入要修改的人数,然后依次输入这几个学生的个人信息包括(姓名,学号,英语成绩,数学成绩)
(7)显示学生成绩单
系统给两种显示学生信息的方法,一是根据学号显示,一是根据成绩显示。
(8)显示学生成绩的均分,最高低分
显示各科的成绩的平均分最高分,以及总成绩平均分。
以及各科的最高分以及最低分。
(9)文件保存
把学生信息保存的文件里去
(10)退出退出系统
2.总体设计
1.功能模块设计
(1).输入学生信息
在主菜单中调用voidInput(structstudentstu[])函数,输入学生信息。
首先输入
人数,依次输入学号.姓名.英语成绩,数学成绩。
(2).显示学生信息
在主菜单中调用voidOutput(structstudentstu[])函数,显示学生信息。
(3).查询学生信息
在主菜单中调用voidsearch(structstudentstu[])函数,查询学生信息。
包括学好或姓名两种方式。
如果用户输入的学号或姓名所对应的学生信息存在,系统会出现“恭喜!
找到了!
”。
如果用户输入的学号或姓名找不到对应的学生信息的话,则会出现找不到的情况。
(4).删除学生信息
在主菜单中调用voiddel(structstudentstu[])函数,以删除学生信息。
首先需要删除的人数,然后输入要删除的学号,如果没找到这个学生的信息,会出现这样的提示“请查明后再输入,本班无此学生!
!
!
”。
如果查到学生信息,会先显示学生信息,然后删除学生信息。
(5).新增学生学生信息
在主菜单中调用voidinsert(structstudentstu[])函数,来新增学生信息。
首先提示用户输入要修改的人数,然后依次输入这几个学生的个人信息包括(姓名,学号,英语成绩,数学成绩)。
(6).计算学生成绩
(1)在主菜单中调用voidsum(structstudentstu[])函数进行求和功能。
(2)调用voidaver(structstudentstu[])函数进行求平均分的功能。
(7).显示学生成绩单
(1).按学号排名
(2).按名次排名
(1).在主菜单中调用voidsort_num(structstudentstu[])函数按学号排序。
然后调用voidout_sort_num(structstudentstu[])按学号排名输出。
(2).调用voidsort_score(structstudentstu[])函数进行名次排序。
调用voidscore_ord(structstudentstu[])函数来求名次。
调用voidout_sort_score(structstudentstu[])函数按名次排名的输出。
(8).显示学生的均分,以及最高最低分
(1)全班各科成绩平均最高分及总分平均分。
(2)个人的均分
(3)各科的最高最低分
调用voidaver(structstudentstu[])函数求每个人的均分。
调用voidaverage(structstudentstu[])函数求全班各科的平均分及总分的平均分。
调用voidhilo(structstudentstu[])函数求各科最高分最低学生的信息。
(9).文件保存及调出
当用户输入学生信息的时候,文件将自动保存在程序的目录下。
调用voidxianshi(structstudentstu[])函数,把存在文件的学生信息读取出来。
(10).退出
退出系统
2.详细设计与程序实现
(1).预处理
#include
#include
#include
#include
#defineNUM30
intSIZE=0;
inti;
(2).数据结构定义
structstudent/*结构体的声明*/
{
intnum;/*成员名单*/
charname[20];
intscore_eng;
intscore_math;
intsum_d;
floataver_d;
intscore_ord;
}stu[NUM];
(3).函数及变量声明
1.主要函数声明
intmenu_select();
voidopen();
voidenter(structstudent[]);
voidInput(structstudent[]);
voidOutput(structstudent[]);
voidinsert(structstudent[]);
voiddel(structstudent[]);
voidsum(structstudent[]);
voidaver(structstudent[]);
voidsearch(structstudent[]);
voidhilo(structstudent[]);
voidsort_score(structstudent[]);
voidsort_num(structstudent[]);
voidaverage(structstudent[]);
voidout_sort_score(structstudent[]);
voidscore_ord(structstudent[]);
voidout_sort_num(structstudent[]);
voidsave(structstudent[]);
voidxianshi(structstudent[]);
2.系统调用函数
//进入系统调用
voidenter(structstudentstu[])
{
for(;;)
switch(menu_select())
{
case1:
search(stu);
break;
case2:
out_sort_num(stu);
break;
case3:
out_sort_score(stu);
break;
case4:
average(stu);
break;
case5:
hilo(stu);
break;
case6:
insert(stu);
break;
case7:
del(stu);
break;
case8:
xianshi(stu);
case9:
printf("Goodbye!
\n");
exit(0);
}
}
3.菜单选择函数
//菜单选择操作
intmenu_select()
{
chars;
intcn;
printf("\n");
printf("1.按学号和姓名查找学生信息。
\n");
printf("2.按学号排名的成绩单。
\n");
printf("3.按成绩排名的成绩单。
\n");
printf("4.全班各科成绩平均最高分及总分平均分。
\n");
printf("5.查找各科最高最低分学生信息。
\n");
printf("6.新增学生信息。
\n");
printf("7.删除学生信息。
\n");
printf("8.调出文件信息。
\n");
printf("9.拜拜!
");
printf("选择你要进行的操作的序号,1~9:
");
printf("\n");
do
{
s=getchar();
cn=(int)s-48;
}while(cn<0||cn>8);
returncn;
}
4.主函数
intmain()
{
open();
}
5.登录函数
voidopen()
(4)代码实现。
#include
#include
#include
#include
#defineNUM30
intSIZE=0;
inti;
//声明结构体
structstudent/*结构体的声明*/
{
intnum;/*成员名单*/
charname[20];
intscore_eng;
intscore_math;
intsum_d;
floataver_d;
intscore_ord;
}stu[NUM];
/*定义结构体数组和指针*/
//声明函数
intmenu_select();
voidopen();
voidenter(structstudent[]);
voidInput(structstudent[]);
voidOutput(structstudent[]);
voidinsert(structstudent[]);
voiddel(structstudent[]);
voidsum(structstudent[]);
voidaver(structstudent[]);
voidsearch(structstudent[]);
voidhilo(structstudent[]);
voidsort_score(structstudent[]);
voidsort_num(structstudent[]);
voidaverage(structstudent[]);
voidout_sort_score(structstudent[]);
voidscore_ord(structstudent[]);
voidout_sort_num(structstudent[]);
voidsave(structstudent[]);
voidxianshi(structstudent[]);
//主函数
intmain()
{
open();
}
//注册(用户名和密码)
voidopen()
{
intflag=0,m=0,n;
charkey_1[40],key_2[40],key_3[40],or_name[20],name[20];
charchange;
printf("\t\t\t欢迎使用成绩管理系统\n\n\n\n");
printf("\t************************请注册!
************************\n\n");
printf("\t\t请设置用户名:
");
gets(or_name);
printf("\n");
printf("\t\t请设置密码(可以为数字与字母组合):
");
for(i=0;(change=getch())!
='\r';)
{
key_1[i++]=change;
printf("*");
}
key_1[i]='\0';
printf("\n\n");
printf("\t\t验证密码:
");
for(i=0;(change=getch())!
='\r';)
{
key_2[i++]=change;
printf("*");
}
key_2[i]='\0';
printf("\n\n");
if(strcmp(key_1,key_2)==0)
printf("\t*****************恭喜^-^,已注册成功!
******************\n\n\n");
else
{
printf("\t************抱歉,由于密码验证错误,注册失败!
***********\n\n\n");
exit(0);
}
printf("\t************************请登录!
************************\n\n");
do
{
printf("\t\t请输入用户名:
");
gets(name);
printf("\n");
printf("\t\t请输入密码:
");
for(i=0;(change=getch())!
='\r';)
{
key_3[i++]=change;
printf("*");
}
key_3[i]='\0';
printf("\n\n");
if(strcmp(or_name,name)==0&&strcmp(key_1,key_3)==0)
{
printf("\t*****************恭喜^-^,已成功登录!
******************\n\n\n");
Input(stu);
Output(stu);
enter(stu);
break;
}
else
{
printf("\t************对不起~-~,登录失败!
**************\n\n");
n=2-m;
printf("\t********请从新登录!
仅有%d次机会了哟!
!
**********\n\n",n);
m++;
continue;
}
}while(m<2);
printf("\t\t请输入用户名:
");
gets(name);
printf("\n");
printf("\t\t请输入密码:
");
for(i=0;(change=getch())!
='\r';)
{
key_3[i++]=change;
printf("*");
}
key_3[i]='\0';
printf("\n\n");
if(strcmp(or_name,name)==0&&strcmp(key_1,key_3)==0)
{
printf("\t*****************恭喜^-^,已成功登录!
*****************\n\n\n");
Input(stu);
Output(stu);
score_ord(stu);
enter(stu);
}
elseprintf("\t****************对不起~-~,登录失败!
*******************\n");
}
//进入系统调用
voidenter(structstudentstu[])
{
for(;;)
switch(menu_select())
{
case1:
search(stu);
break;
case2:
out_sort_num(stu);
break;
case3:
out_sort_score(stu);
break;
case4:
average(stu);
break;
case5:
hilo(stu);
break;
case6:
insert(stu);
break;
case7:
del(stu);
break;
case8:
xianshi(stu);
case9:
printf("Goodbye!
\n");
exit(0);
}
}
//菜单选择操作
intmenu_select()
{
chars;
intcn;
printf("\n");
printf("1.按学号和姓名查找学生信息。
\n");
printf("2.按学号排名的成绩单。
\n");
printf("3.按成绩排名的成绩单。
\n");
printf("4.全班各科成绩平均最高分及总分平均分。
\n");
printf("5.查找各科最高最低分学生信息。
\n");
printf("6.新增学生信息。
\n");
printf("7.删除学生信息。
\n");
printf("8.调出文件信息。
\n");
printf("9.拜拜!
");
printf("选择你要进行的操作的序号,1~9:
");
printf("\n");
do
{
s=getchar();
cn=(int)s-48;
}while(cn<0||cn>8);
returncn;
}
//输入学生信息
voidInput(structstudentstu[])
{
ints,i;//FILE*fp;
//fp=fopen("e:
\\c语言程序\\v.txt","w");
printf("\t\t\t成绩管理系统\n\n\n");
printf("请输入全班的学生人数:
");
scanf("%d",&SIZE);
printf("\n");
for(i=0;i{
printf("请输入第%d个学生的信息\n",(i+1));
printf("学号:
");
scanf("%d",&stu[i].num);
printf("姓名:
");
s=getchar();
gets(stu[i].name);//fprintf(fp,"%s",i);
printf("英语成绩:
");
scanf("%d",&stu[i].score_eng);//fprintf(fp,"%.2f",i);
printf("数学成绩:
");
scanf("%d",&stu[i].score_math);
}
}
//输出学生信息
voidOutput(structstudentstu[])
{
sum(stu);
aver(stu);inti;FILE*fp;
printf("学生信息如下:
\n");
printf("\t学号\t姓名\t英语\t数学\t总分\t均分\n");
printf("-----------------------------------------------------------------------------\n");
for(i=0;i{printf("\t%d\t%s\t%d\t%d\t%d\t%3.2f\t\n",
stu[i].num,stu[i].name,stu[i].score_eng,stu[i].score_math,
stu[i].sum_d,stu[i].aver_d);}
fp=fopen("e:
\\c语言程序\\l.txt","w");
//fprintf(fp,"学生信息如下:
\n");
//fprintf(fp,"\t学号\t姓名\t英语\t数学\t总分\t均分\n");
//fprintf(fp,"-----------------------------------------------------------------------------\n");
for(i=0;i{fprintf(fp,"%d%s%d%d%d%3.2f\n",
stu[i].num,stu[i].name,stu[i].score_eng,stu[i].score_math,
stu[i].sum_d,stu[i].aver_d);}
fclose(fp);
//printf("\t%d\t%s\t%d\t%d\t%d\t%3.2f\t\n",
//stu[i].num,stu[i].name,stu[i].score_eng,stu[i].score_math,
//stu[i].sum_d,stu[i].aver_d);
}
voidxianshi(structstudentstu[])
{FILE*fp;
fp=fopen("e:
\\c语言程序\\l.txt","r");
//fprintf(fp,"学生信息如下:
\n");
//fprintf(fp,"\t学号\t姓名\t英语\t数学\t总分\t均分\n");
//fprintf(fp,"-----------------------------------------------------------------------------\n");
for(i=0;i{fscanf(fp,"%d%s%d%d%d%f",
&stu[i].num,stu[i].name,&stu[i].score_eng,&stu[i].score_math,
&stu[i].sum_d,&stu[i].aver_d);
printf("%d%s%d%d%d%3.2f\n",
stu[i].num,stu[i].name,stu[i].score_eng,stu[i].score_math,
stu[i].sum_d,stu[i].aver_d);}
}
//求和
voidsum(structstudentstu[])
{
for(i=0;i{
stu[i].sum_d=0;
stu[i].sum_d=stu[i].score_eng+stu[i].score_math;
}
}
//求每个人的平均分
voidaver(structstudentstu[])
{
sum(stu);
for(i=0;i{
stu[i].aver_d=0;