学生成绩管理系统30.docx
《学生成绩管理系统30.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统30.docx(26页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统30
西安邮电学院
高级语言课程设计报告
题目:
学生成绩管理系统
系部名称
:
电子信息与工程系
专业名称
:
电子科学与技术
班级
:
科技0701
班内序号
:
30
学生姓名
:
杨超
指导教师
:
黄茹
时间
:
2008年6月10日至2008年6月20日
实验题目:
学生成绩管理系统
一、实验目的
1.熟悉c语言的编译连接和运行过程。
2.掌握c语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给它们赋值。
3.掌握if语句及switch语句的运用方法及嵌套应用方法。
4.掌握实现循环结构的三种语句while、do-while.、for的使用。
5.掌握函数的定义方法和调用方法。
6.能够采用模块化思想调试程序。
二.实验内容
1.编写程序并进行调试运行。
2.输入学生资料,并保存于文件。
每个学生包含信息:
学号、姓名、各科成绩信息。
3.对已存入的学生信息进行操作,包括添加一个学生信息、删除某个学生信息、修改某个学生信息以及对学生成绩的排序和对总体成绩的统计。
4.通过输入姓名、学号的方式查询学生信息。
5.最后输出学生信息,供需要时打印。
二、需求分析
1.该程序可用于教师对学生成绩信息的管理和学生对成绩的查询。
2.教师对学生成绩信息的管理包括对信息的存储、添加、修改、排序、统计、删除等操作,以实现对学生成绩的管理。
3.学生对成绩的查询包括对自己成绩的查询和对全部成绩信息的浏览、排序。
4.其中删除信息和修改信息可根据需要对个别学生信息进行适当的删除或修改,以便随时更新学生信息。
5.查询功能可根据需要从若干数据中查询某个学生信息,并且可根据两种不同的方法查询:
按学号查询和按姓名查询。
以满足不同的需要。
四、概要设计
1、方案设计
对系统进行分析,给出结构图
分析:
系统要求实现许多的功能,因此遵循结构化程序设计思想来进行本系统的设计—自顶向下、逐步细化,将系统设计任务分解出许多子功能模块进行设计
结构图如下:
删除模块
退出系统
输出模块
统计模块
查询模块
添加模块
排序模块
输入模块
按总成绩排序v
统计分数段
按学号查寻
按姓名查询
退出系统
2.模块功能说明
对各个模块进行功能的描述
(1).输入模块:
录入需要管理的学生信息并将信息保存于文件中,以方便日后进行打印、读取、更新等操作。
(2).排序模块:
对录入的学生成绩信息按总分由高到低进行排序,以方便老师和学生浏览。
(3).添加模块:
可添加一个或多个学生信息,并将所添加学生信息保存,方便查找。
(4).删除模块:
可对退学或休学的学生信息做删除处理。
(5).查询模块:
可对已建立的学生信息进行查询,并且可根据需要选择按姓名查询或按学号查询。
(6).修改模块:
可根据需要对多个学生信息进行修改,也可随时对个别项进行修改。
(7).统计模块:
用于对学生录入的成绩按分数段进行统计,便于老师掌握学生成绩的总体情况。
(8).输出模块:
将所有学生信息或想要查询的学生信息显示于屏幕,用于打印学生信息或查找某些学生信息。
(9).退出系统:
选择该项,自动退出该系统。
五、详细设计及运行结果
流程图,函数之间相互调用的图示,程序设计及编码,运行结果。
判断i的值
按姓名查询
按学号查询
退出系统
六.调试情况及运行结果
1、
对自己设计进行评价,指出合理和不足之处,提出改进的方案。
第一次编写这么大的一个应用程序,运行出的结果有地方。
程序实现了课程设计的基本要求,完成了输入,输出,添加,修改,删除等功能,但在各个功能中都有需要进一步完善的地方。
从最开始的设计各个模块,到后来的逐步完成各个模块的功能并进行调试,再到进行整体的调试,都出现了许多问题,经过一次次的修改,基本上达到了预期的结果。
但由于时间很短,在选题报告中设想到的好多功能都没有实现。
已有的功能虽已能基本上满足用户的需要,但如果还有更多的功能程序就会更加完美。
如:
在排序时只是按照总分进行排序,没有按照各科成绩进行排序;在统计时也只是按照分数段进行统计,而没有从更多的方面进行统计;在输入分数时如果输入负数没有提示错误等。
这些都是需要改进的地方。
2、在设计过程中的感受。
在这次实践课中,我对于程序设计有了一个全新的认识,从前只是在书本中学习各知识点,练习一些小的程序,而这次课程设计则需要我们把学的知识综合运用起来,进行从设计到运行的实践。
在实践中,不仅巩固了自己的课本知识,更加锻炼了自己的动手能力,也让我更深刻地领悟到了“实践出真理”这个道理。
丰富了我们的经验,为我们将来从事工作,走上社会做了铺垫。
这次实践还让我学会了无论做什么事都应做好总体的规划,并应尽量按照规划来一步一步实现各个部分,这样才不会出一些大的问题,耗费大量的时间和精力。
在每一步中都要细心,不然会因为一些很小的问题比如一个符号或者一个字符而导致整个程序的出错甚至无法运行。
在老师和同学们的帮助下,我顺利的完成了本次课程设计,也让我明白了互帮互助的重要性。
七.参考文献
《C语言程序设计》王曙燕曹锰科学出版社2005年2月
《C语言程序设计》谭浩强清华大学出版社1999年12月
八。
附录:
#include
#include
#include
#include
#defineMAX20
intsum=0;
/*定义结构体*/
structstudent
{
charname[13];
intnum;
intmath;
intenglish;
intsum;
}a[MAX];
/*输入模块*/
voidinput_message()
{
FILE*fp2,*fp;
inti=0,s=3;
clrscr();
printf("\n请输入学生信息:
\n");
for(i=0;i
{
printf("\n第%d个学生\n",i+1);
printf("请输入相应学号:
");
scanf("%d",&a[i].num);
getchar();
printf("请输入学生姓名:
");
gets(a[i].name);
printf("请输入学生高数成绩:
");
scanf("%d",&a[i].math);
getchar();
printf("请输入学生英语成绩:
");
scanf("%d",&a[i].english);
getchar();
a[i].sum=a[i].math+a[i].english;
sum++;
}
fp=fopen("d:
\\student\\student.txt","wt");
if(fp==NULL)
{
printf("不能打开此文件,按任意键退出!
\n");
getch();
exit
(1);
}
for(i=0;i
if(fwrite(&a[i],sizeof(structstudent),1,fp)!
=1)
printf("写文件错误!
\n");
fclose(fp);
fp2=fopen("d:
\\student\\sum.txt","wt");
if(fp2==NULL)
{
printf("不能打开此文件,按任意键退出!
\n");
getch();
exit
(1);
}
fprintf(fp2,"%d",sum);
fclose(fp2);
printf("\n-----信息输入完毕,按任意键返回!
-----\n");
getch();
returnteacher_choice();
}
/*输出模块*/
voidoutput_message()
{
FILE*fp2,*fp;
inti=0;
clrscr();
fp2=fopen("d:
\\student\\sum.txt","rt");
if(fp2==NULL)
{
printf("不能打开此文件,按任意键退出!
\n");
getch();
exit
(1);
}
fscanf(fp2,"%d",&sum);
fclose(fp2);
fp=fopen("d:
\\student\\student.txt","rt");
if(fp==NULL)
{
printf("不能打开此文件,按任意键退出!
\n");
getch();
exit
(1);
}
for(i=0;iif(feof(fp)!
=1)
fread(&a[i],sizeof(structstudent),1,fp);
printf("\n\n\n\n\n*********************************************\n");
printf("学生信息表\n");
printf("\n姓名学号高数英语总分\n");
for(i=0;iprintf("%25s%7d%7d%7d%7d\n",a[i].name,a[i].num,a[i].math,a[i].english,a[i].sum);
printf("\n\n\n-------按任意键返回主菜单!
-------\n");
getch();
returnzhujiemian();
}
/*查询模块*/
voidinquire_message()
{
intchoice;
do
{
clrscr();
printf("\n\n\n\n************>>>>查询成绩信息<<<<************\n\n");
printf("1.按姓名查询\n\n");
printf("2.按学号查询\n\n");
printf("0.退出\n\n\n");
printf("请输入选项:
");
scanf("%d",&choice);
getchar();
switch(choice)
{
case0:
break;
case1:
inquire_name();break;
case2:
inquire_num();break;
}
}while(choice!
=0);
}
/*按姓名查询*/
inquire_name()
{
inti,j=0;
charinq_name[13];
clrscr();
printf("\n\n\n\n\n\n输入要查询的学生姓名:
");
scanf("%s",inq_name);
for(i=0;i{
if(strcmp(a[i].name,inq_name)==0&&a[i].num!
=0)
{
printf("\n\n\n学生信息:
\n\n");
printf("姓名学号高数英语总分\n");
printf("%23s%7d%7d%7d%7d\n",a[i].name,a[i].num,a[i].math,a[i].english,a[i].sum);
}
elsej++;
}
if(j==sum)
printf("\n\n\n\n--------该学生信息不存在\n\n请按任意键返回!
--------\n");
bioskey(0);
}
/*按学号查询*/
inquire_num()
{
inti,num,j=0;
clrscr();
printf("\n\n\n\n\n\n输入要查询的学生学号:
");
scanf("%d",&num);
getchar();
for(i=0;i{
if(a[i].num==num&&a[i].num!
=0)
{
printf("\n\n\n学生信息:
\n\n");
printf("姓名学号高数英语总分\n");
printf("%23s%7d%7d%7d%7d\n",a[i].name,a[i].num,a[i].math,a[i].english,a[i].sum);
}
elsej++;
}
if(j==sum)
printf("\n\n\n\n-------该学生信息不存在\n\n请按任意键返回!
-------\n");
bioskey(0);
}
/*添加学生信息*/
voidinsert_message()
{
FILE*fp2,*fp;
inti=sum,flag=0,t;
charchoice;
clrscr();
fp2=fopen("d:
\\student\\sum.txt","rt");
if(fp2==NULL)
{
printf("不能打开此文件,按任意键退出!
\n");
getch();
exit
(1);
}
fscanf(fp2,"%d",&sum);
fclose(fp2);
fp=fopen("d:
\\student\\student.txt","rt");
if(fp==NULL)
{
printf("不能打开此文件,按任意键退出!
\n");
getch();
exit
(1);
}
fclose(fp);
printf("\n\n\n添加一个新学生信息\n");
printf("\n-------------------------\n");
do
{
a[i].num=++sum;
printf("\n新学生学号:
%d",a[i].num);
printf("\n新学生姓名:
");
gets(a[i].name);
printf("新学生高数成绩:
");
scanf("%d",&a[i].math);
getchar();
printf("新学生英语成绩:
");
scanf("%d",&a[i].english);
getchar();
a[i].sum=a[i].math+a[i].english;
fp2=fopen("d:
\\student\\sum.txt","wt");
fp=fopen("d:
\\student\\student.txt","at");
fwrite(&a[i],sizeof(structstudent),1,fp);
fprintf(fp2,"%d",sum);
fclose(fp);
fclose(fp2);
printf("\n\n继续添加吗?
(Y/N)");
choice=getch();
if(choice=='Y'||choice=='y')
{
flag=1;
printf("继续!
\n\n");
}
elseflag=0;
}while(flag==1);
clrscr();
fp=fopen("d:
\\student\\student.txt","rt");
for(t=0;tif(feof(fp)!
=1)
fread(&a[t],sizeof(structstudent),1,fp);
fclose(fp);
printf("\n\n\n\n\n---------->>>>>添加后的学生信息表<<<<<----------\n");
printf("\n姓名学号高数英语总分\n");
for(t=0;tprintf("%23s%7d%7d%7d%7d\n",a[t].name,a[t].num,a[t].math,a[t].english,a[t].sum);
printf("\n*******按任意键返回主菜单*******\n");
getch();
returnteacher_choice();
}
/*修改信息*/
voidcorrect_message()
{
FILE*fp2,*fp;
inti=0,choice,flag=0;
charcor_name[13];
clrscr();
fp2=fopen("d:
\\student\\sum.txt","rt");
if(fp2==NULL)
{
printf("不能打开此文件,按任意键退出!
\n");
getch();
exit
(1);
}
fscanf(fp2,"%d",&sum);
fclose(fp2);
fp=fopen("d:
\\student\\student.txt","rt");
if(fp==NULL)
{
printf("读文件错误!
\n");
getch();
exit
(1);
}
for(i=0;iif(feof(fp)!
=1)
fread(&a[i],sizeof(structstudent),1,fp);
fclose(fp);
printf("\n\n请输入所要修改的学生的姓名:
");
scanf("%s",cor_name);
getchar();
for(i=0;iif(strcmp(cor_name,a[i].name)==0&&a[i].num!
=0)
{
printf("\n学生信息:
\n");
printf("姓名学号高数英语总分\n");
printf("%23s%7d%7d%7d%7d\n",a[i].name,a[i].num,a[i].math,a[i].english,a[i].sum);
printf("\n您要修改哪一项?
\n");
printf("1.姓名\n");
printf("2.学号\n");
printf("3.高数\n");
printf("4.英语\n");
printf("请输入选项:
");
scanf("%d",&choice);
switch(choice)
{
case1:
printf("修改后的姓名:
");
scanf("%s",a[i].name);break;
case2:
printf("修改后的学号:
");
scanf("%d",&a[i].num);break;
case3:
printf("修改后的高数:
");
scanf("%d",&a[i].math);break;
case4:
printf("修改后的英语:
");
scanf("%d",&a[i].english);break;
}
a[i].sum=a[i].math+a[i].english;
flag=1;
clrscr();
printf("\n\n\n\n\n--------->>>>>修改后的学生信息表<<<<<---------\n\n");
printf("姓名学号高数英语总分\n");
for(i=0;iprintf("%25s%7d%7d%7d%7d\n",a[i].name,a[i].num,a[i].math,a[i].english,a[i].sum);
fopen("d:
\\student\\student.txt","wt");
for(i=0;iif(fwrite(&a[i],sizeof(structstudent),1,fp)!
=1)
printf("写文件错误!
\n");
fclose(fp);
getch();
break;
}
if(flag==0)
{
printf("\n-------该学生信息不存在!
");
printf("\n按任意键返回!
-------");
getch();
returnteacher_choice();
}
}
/*排序学生成绩*/
voidsort_message()
{
FILE*fp2,*fp;
intt=0,i,j,k,m,n,p,h[13];
clrscr();
fp2=fopen("d:
\\student\\sum.txt","rt");
if(fp2==NULL)
{
printf("不能打开此文件,按任意键退出!
\n");
getch();
exit
(1);
}
fscanf(fp2,"%d",&sum);
fclose(fp2);
fp=fopen("d:
\\student\\student.txt","rt");
if(fp==NULL)
{
printf("\n打开文件错误!
\n");
getch();
exit
(1);
}
while(feof(fp)!
=1)
{
fread(&a[t],sizeof(structstudent),1,fp);
if(a[t].num==0)
break;
elset++;
}
fclose(fp);
for(i=0;ifor(j=i+1;jif(a[i].sum{
k=a[i].sum;
a[i].sum=a[j].sum;
a[j].sum=k;
m=a[i].math;
a[i].math=a[j].math;
a[j].math=m;
n=a[i].english;
a[i].english=a[j].english;
a[j].english=n;
strcpy(h,a[i].name);
strcpy(a[i].name,a[j].name);
strcpy(a[j].name,h);
p=a[i].num;
a[i].num=a[j].num;
a[j].num=p;
}
clrscr();
printf("\n\n\n\n\n----------->>>>>排序后的学生信息表<<<<<-----------\n");
printf("\n姓名学号高数英语总分\n");
for(i=0;iprintf("%23s%9d%9d%8d%8d\n",a[i].name,a[i].num,a[i].math,a[i].english,a[i].sum);
printf("\n\n