学生成绩管理系统课程设计.docx
《学生成绩管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统课程设计.docx(18页珍藏版)》请在冰点文库上搜索。
学生成绩管理系统课程设计
C语言实验报告
题目:
学生成绩管理系统
院系名称
电子工程学院
专业名称
电子信息工程
班级
学号
学生姓名
指导教师
时间
2010年6月7日至2010年6月18日
三、需求分析
可以实现学生成绩数据的录入,保存,浏览,查找,添加,删除,排序,使学生成绩信息一目了然。
三、课程设计目的
加深对C语言课程所学知识的理解,进一步巩固C语言语法规则。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力,使学生通过系统分析、系统设计、编程调试、,写实验报告等环节,初步掌握软件系统设计的方法和步骤,训练灵活运用程序设计语言进行软件开发的能力,提高分析问题和解决问题的能力,提高程序设计水平,培养必要的工程实践动手能力。
四、程序内容
数据的录入,数据存储、数据读写,数据添加,数据删除,数据查询,数据统计,数据排序数据打印.
五、详细设计及运行结果
1
1输入信息模块:
函数名为shuru,。
②显示模块:
函数名为xianshi,分别打印出输入所有学生的:
代号,姓名以及三科成绩。
③查询模块:
函数名为chaxun,输入学生的代号,显示学生信息。
④添加信息模块:
函数名为tianjia,输入学生信息,插入信息后,显示添加信息后的学生数量。
⑤删除模块:
函数名为shanchu,。
输入要删除的学生代号,删除信息后显示学生数量。
排序模块:
函数名为paixu,按学生代号进行排序。
⑧.保存文件:
函数名为baocun。
将学生信息保存到指定位置.
⑨:
从文件读取信息:
函数名为duru,从保存的文件中读入学生信息.
⑩main函数:
调用以上各功能模块,实现程序功能。
六、调试情况,设计技巧及体会
调试情况:
心得体会:
通过这次课程设计,我对C语言有了更深刻的了解,增强了程序的编写能力,巩固了专业知识,对程序的模块化观念也又模糊逐渐变的清晰了。
在程序的运行与调试过程中出现了很多错误,通过反复地复习课本上的相关知识,不停地修改与调试,我终于完成了这段程序。
在调试过程中,我认识到了C语言的灵活性与严谨性,同一个功能可以由不同的语句来实现,但编写程序时要特别注意细节方面的问题,因为一个小小的疏忽就能导致整个程序不能运行。
当然我也认识到了自己的薄弱之处,如对链表相关知识的欠缺,文件运用的不熟练,在以后的学习中我要集中精力、端正态度,争取把知识学得更扎实、更全面。
八、附录:
源代码
#include
#include
#include
#defineNsizeof(structmengtu)
#include
intn,k;
structmengtu
{intdaihao;
charmingzi[10];
intneili;
intdaofa;
intbufa;
structmengtu*next;};
structmengtu*creat(void)
{structmengtu*p1,*p2,*head;
n=0;
p1=p2=(structmengtu*)malloc(N);
system("cls");
printf("请输入资料,输0退出!
\n");
while
(1)
{if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(structmengtu*)malloc(N);
printf("请输入代号:
");
scanf("%d",&p1->daihao);
if(p1->daihao==0)
break;
printf("请输入名字:
");
scanf("%s",&p1->mingzi);
printf("请输入内力成绩:
");
scanf("%d",&p1->neili);
printf("请输入刀法成绩:
");
scanf("%d",&p1->daofa);
printf("请输入步法成绩:
");
scanf("%d",&p1->bufa);
n++;}
p2->next=NULL;
printf("输入的学生数为:
%d个!
\n",n);
printf("按任意键返回主菜单...");
getchar();
return(head);}
baocun(structmengtu*p1)
{FILE*fp;
chardizhi[20];
system("cls");
printf("请输入文件路径及文件名:
");
scanf("%s",dizhi);
if((fp=fopen(dizhi,"w+"))==NULL)
{printf("不能打开文件!
\n");
return0;}
while(p1!
=NULL)
{fprintf(fp,"%d\t%s\t%d\t%d\t%d\t\n",p1->daihao,p1->mingzi,p1->neili,p1->daofa,p1->bufa);
p1=p1->next;}
fclose(fp);
printf("文件已经保存!
\n");
fflush(stdin);
printf("按任意键返回主菜单...");
getchar();
return0;}
duru(structmengtu*head)
{structmengtu*p1,*p2;
chardizhi[10];
FILE*fp;
system("cls");
printf("请输入文件路径及文件名:
");
scanf("%s",dizhi);
if((fp=fopen(dizhi,"r+"))==NULL)
{printf("不能打开文件!
\n");
return0;}
printf("-----------------------------------------\n");
printf("|代号\t\t|名字\t\t|内力\t|刀法\t|步法\t|\n");
printf("-----------------------------------------\n");
p1=(structmengtu*)malloc(N);
p2=(structmengtu*)malloc(N);
fscanf(fp,"%d%s%d%d%d",&p1->daihao,p1->mingzi,&p1->neili,&p1->daofa,&p1->bufa);
printf("|%d\t|%s\t|%d\t|%d\t|%d\t|\n",p1->daihao,p1->mingzi,p1->neili,p1->daofa,p1->bufa);
head=NULL;
while(!
feof(fp))
{n++;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(structmengtu*)malloc(N);
fscanf(fp,"%d%s%d%d%d\n",&p1->daihao,p1->mingzi,&p1->neili,&p1->daofa,&p1->bufa);
printf("|%d\t|%s\t|%d\t|%d\t|%d\t|\n",p1->daihao,p1->mingzi,p1->neili,p1->daofa,p1->bufa);}
p2->next=p1;
p1->next=NULL;
n++;
printf("-----------------------------------------\n");
fclose(fp);
fflush(stdin);
printf("成功读取%d个学生信息!
\n",n);
printf("按任意键返回主菜单...");
getchar();
return(head);}
shanchu(structmengtu*head)
{structmengtu*p1,*p2;
intdaihao;
system("cls");
printf("输入要删除学徒的代号:
");
scanf("%d",&daihao);
getchar();
p1=head;
while(daihao!
=p1->daihao&&p1->next!
=NULL)
{p2=p1;
p1=p1->next;}
if(daihao==p1->daihao)
{if(p1==head)
head=p1->next;
else
p2->next=p1->next;
printf("已删除:
%d\n",daihao);
n=n-1;}
else
printf("%d不存在!
\n",daihao);
printf("现在数为:
%d个!
\n",n);
fflush(stdin);
printf("按任意键返回主菜单...");
getchar();
return(head);}
tianjia(structmengtu*head,structmengtu*stu)
{structmengtu*p0,*p1;
stu=(structmengtu*)malloc(N);
system("cls");
printf("\n输入要增加的学徒的资料!
\n");
printf("请输入代号:
");scanf("%d",&stu->daihao);
printf("输入名字:
");scanf("%s",stu->mingzi);
printf("请输入内力成绩:
");scanf("%d",&stu->neili);
printf("请输入刀法成绩:
");scanf("%d",&stu->daofa);
printf("请输入步法成绩:
");scanf("%d",&stu->bufa);
p1=head;p0=stu;
if(p1->next==NULL)
{p1->next=p0;
p0->next=NULL;}
else
{while(p1->next!
=NULL)
{p1=p1->next;}
p1->next=p0;
p0->next=NULL;}
n++;
printf(",添加完成!
现在门徒数为:
%d个!
\n",n);
fflush(stdin);
printf("按任意键返回主菜单...");
getchar();
return(head);}
voidxianshi(structmengtu*head)
{structmengtu*p;
system("cls");
printf("-----------------------------------------\n");
printf("|代号\t\t|名字\t\t|内力\t|刀法\t|步法\t|\n");
printf("-----------------------------------------\n");
p=head;
while(p!
=NULL)
{printf("|%d\t|%s\t|%d\t|%d\t|%d\t|\n",p->daihao,p->mingzi,p->neili,p->daofa,p->bufa);
printf("-----------------------------------------\n");
p=p->next;}
fflush(stdin);
printf("按任意键返回主菜单...");getchar();}
chaxun(structmengtu*head)
{intdaihao;
structmengtu*p1;
system("cls");
printf("输入要查询的门徒的代号:
");
scanf("%d",&daihao);
while(daihao!
=0)
{p1=head;
while(daihao!
=p1->daihao&&p1->next!
=NULL)
p1=p1->next;
if(daihao==p1->daihao)
{printf("-----------------------------------------\n");
printf("|代号\t\t|名字\t\t|内力\t|刀法\t|步法\t|\n");
printf("-----------------------------------------\n");
printf("|%d\t|%s\t|%d\t|%d\t|%d\t|\n",p1->daihao,p1->mingzi,p1->neili,p1->daofa,p1->bufa);
printf("-----------------------------------------\n");}
elseprintf("%d门徒不存在!
\n",daihao);
printf("输入要查询的门徒的代号:
");
scanf("%d",&daihao);}
fflush(stdin);
printf("按任意键返回主菜单...");
getchar();}
tongji(structmengtu*head)
{intsum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0;
structmengtu*p;
inty=0,i=0;
p=head;
system("cls");
printf("---------------------------------------------------------\n");
printf("|代号\t\t|名字\t\t|内力\t|刀法\t|步法\t|总分\t|平均分\t|\n");
printf("---------------------------------------------------------\n");
while(p!
=NULL)
{sum1=p->neili+p->daofa+p->bufa;
ave1=sum1/3;
printf("|%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%d\t|\n",p->daihao,p->mingzi,p->neili,p->daofa,p->bufa,sum1,ave1);
printf("---------------------------------------------------------\n");
p=p->next;}
fflush(stdin);
printf("按任意键返回主菜单...");getchar();
return(head);}
paixu(structmengtu*head)
{structmengtu*p,*max;
inti,j;intfen;chart[10];
max=p=head;
for(i=1;i{for(j=i+1;j<=n;j++)
{max=p;
p=p->next;
if(max->daihao>p->daihao)
{k=max->daihao;
max->daihao=p->daihao;
p->daihao=k;
strcpy(t,max->mingzi);
strcpy(max->mingzi,p->mingzi);
strcpy(p->mingzi,t);
fen=max->neili;
max->neili=p->neili;
p->neili=fen;
fen=max->neili;
max->daofa=p->daofa;
p->daofa=fen;
fen=max->bufa;
max->bufa=p->bufa;
p->bufa=fen;}}
max=head;
p=head;}
fflush(stdin);
system("cls");
printf("排序已经完成...\n");
printf("按任意键返回主菜单...");getchar();
return(head);}
intmenu(k)
{inti;
system("cls");
printf("\t\t\t吕氏刀门学徒成绩管理系统\n");
printf("\t\t\t作者:
lpf学号:
05091044\n");
for(i=0;i<80;i++)
printf("*");
printf("*1输入学徒的资料\t\t*2从文件调入资料\t\t*3查询学徒的成绩\n");
printf("*4删除学徒的资料\t\t*5追加学徒的资料\t\t*6显示学徒的成绩\n");
printf("*7统计学徒的成绩\t\t*8保存输入的资料\t\t*9对成绩进行排序\n");
for(i=0;i<80;i++)printf("*");
printf("欢迎进入吕氏刀门管理系统,请选择您所要的操作(选择(0)退出):
");scanf("%d",&k);
return(k);}
charpassword[10]="900118";
main()
{structmengtu*head=0,*stu=0;
chars[10];intflag=0;intn=3;
do
{printf("请您输入刀门密令:
\n");
scanf("%s",s);
if(!
strcmp(s,password))
{system("cls");
printf("恭喜你成功登陆吕氏门徒成绩管理系统\n\n\n");
fflush(stdin);printf("按任意键继续...");getchar();
flag=1;break;}
else
{printf("密令错误!
请重新输入:
\n");
n--;}}
while(n>0);
if(!
flag)
{printf("输入次数已到...\n");
exit(0);}
while
(1)
{k=menu(k);
switch(k)
{case1:
head=creat();break;
case2:
head=duru(head);break;
case3:
head=chaxun(head);break;
case4:
head=shanchu(head);break;
case5:
head=tianjia(head,stu);break;
case6:
xianshi(head);break;
case7:
tongji(head);break;
case8:
baocun(head);break;
case9:
head=paixu(head);break;
case0:
exit(0);
default:
printf("输入错误,请重试!
\n");}}}