学生成绩管理系统课程报告.docx

上传人:b****6 文档编号:8226028 上传时间:2023-01-30 格式:DOCX 页数:18 大小:89.18KB
下载 相关 举报
学生成绩管理系统课程报告.docx_第1页
第1页 / 共18页
学生成绩管理系统课程报告.docx_第2页
第2页 / 共18页
学生成绩管理系统课程报告.docx_第3页
第3页 / 共18页
学生成绩管理系统课程报告.docx_第4页
第4页 / 共18页
学生成绩管理系统课程报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统课程报告.docx

《学生成绩管理系统课程报告.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统课程报告.docx(18页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统课程报告.docx

学生成绩管理系统课程报告

一、实验目的

本课程设计为学生提供了一个既动手又动脑,自学,查资料,独立实践的机会。

将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解。

 

二、实践内容

在熟练掌握C语言的基本知识:

数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。

进一步掌握各种函数的应用,以及文件的读写操作等。

 

三、需求分析

1、根据学生成绩管理的需要,建立一个“学生成绩管理系统”,以方便对成绩的各项管理操作。

开发目的如下:

①文件的保存和输出;②能对成绩进行录入;③能计算每个学生的平均成绩;④能根据学生的姓名来查询该学生的成绩;⑤能删除该学生的记录;⑥能根据每个学生的平均成绩来他们进行排序等。

2、程序执行的命令包括

(1)定义结构体、保存文件和输出文件;

(2)读入各个成绩;(3)插入学生信息;(4)按照平均分从大到小排序;(5)以姓名为关键字删除指定信息;(6)主函数;(7)结束

四、概要设计

为实现上述程序功能,据学生成绩表特点,决定选用数组和结构体这种数据结构来作为组成成绩数据库的基本框架

1、定义结构体

structstudent_type

{

charname[8];

charnum[11];

charcla[20];

intscore[3];//int类型的成绩数组

doubleave;//平均分

};

//定义结构体类型的学生数组

student_typestud[SIZE];

student_typetemp;

2、本实验程序包括六个模块

(1)主程序模块:

intmain(){

定义变量;

接受命令;

处理命令;

退出(return0);

}

(2)保存文件

(3)文件输出

(4)读(输)入各个成绩

(5)插入学生信息

(6)按照平均分从大到小排序

(7)以姓名为关键字删除指定信息

3、各模块之间的调用关系如下:

Main()函数

 

 

4、函数原型清单

1)主菜单

voidmain();

2)保存文件:

voidsave()

3)输出文件:

voiddisplay()

4)输入函数:

voidread()

5)增加函数:

voidInsert()

6)排序函数:

voidSort()/*按平均分高到低排序*/

7):

删除函数:

voidDelete()/*按学生姓名删除*/

五、运行环境

硬件:

cpu、内存、主板、显卡、键盘、显示器、等等

软件:

windowsXPVisualc++6.0应用软件

六、开发工具和编程语言:

开发工具:

viscualc++6.0

编程语言:

c语言

七、详细设计

1、文件的保存

voidsave()

{

FILE*fp;

inti;

//如果打开不成功

if((fp=fopen("score.txt","wb"))==NULL)

{

printf("Thefilecan'topen!

\n");

return;

}

//以结构体形式保存到文件之中

for(i=0;i

if(fwrite(&stud[i],sizeof(structstudent_type),1,fp)!

=1)

{

printf("filewriteerror!

");

return;

}

fclose(fp);//关闭文件流

//显示文件保存成功

printf("\n\nThefilesavesuccess.\n\n");

}

2、文件的输出

voiddisplay()

{

FILE*fp;

inti;

//打开所保存的文件

fp=fopen("score.txt","rb");

printf("Now,readthefile...\n");

printf("*****************WelcometoTheScoreManageSystem****************\n");

printf("NameNo.Classscore1score2score3ave\n");

printf("*******************************************************************\n");

for(i=0;i

{

fread(&stud[i],sizeof(student_type),1,fp);

printf("%-10s%10s%10s%8d%8d%8d%10.2f\n",stud[i].name,stud[i].num,stud[i].cla,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);

}

fclose(fp);//关闭文件

}

3、输入学生信息

voidread()

{

inti;

doublesum[SIZE]={0};//总分数组初始化

for(i=0;i

{

printf("EnterName,No.,Class,score1,score2andscore3:

\n");

scanf("%s%s%s%d%d%d",stud[i].name,stud[i].num,stud[i].cla,&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);

sum[i]=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];//求总分

stud[i].ave=sum[i]/3;//求平均成绩

}

}

4、增加学生信息

voidInsert()

{

inti,t,n;

FILE*fp,*fp1;

printf("PleaseEntertheInformationyouInsert:

\n");

printf("Name,StudentID,class,score1,score2,score3:

\n");

//输入的变量临时存储在temp中

scanf("%s%s%s%d%d%d",temp.name,temp.num,temp.cla,&temp.score[0],&temp.score[1],&temp.score[2]);

temp.ave=(temp.score[0]+temp.score[1]+temp.score[2])/3.0;

if((fp=fopen("sortScore.txt","r"))==NULL)//打开排序后的文件

{

printf("Thefilecan'tepen.\n\n");

exit(0);

}

//输出原始数据

printf("\n\nTheoriginalscoreis:

\n");

printf("NameNo.Classscore1score2score3ave\n");

printf("*******************************************************************\n");

for(i=0;i

{

printf("%-10s%10s%10s%8d%8d%8d%10.2f\n",stud[i].name,stud[i].num,

stud[i].cla,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);

}

//从最后一个开始判断,是否大于,因为要插入,最后要向后移动一个位置

n=i;

for(t=0;stud[t].ave>temp.ave&&t

//找到不大于的位置

printf("Now:

\n");

fp1=fopen("InsertScore.txt","w");

for(i=0;i

{

fwrite(&stud[i],sizeof(structstudent_type),1,fp1);

printf("%-10s%10s%10s%8d%8d%8d%10.2f\n",stud[i].name,stud[i].num,

stud[i].cla,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);

}

//输出要插入的信息

fwrite(&temp,sizeof(structstudent_type),1,fp1);

printf("%-10s%10s%10s%8d%8d%8d%10.2f\n",temp.name,temp.num,

temp.cla,temp.score[0],temp.score[1],temp.score[2],temp.ave);

//输出原来剩余一部分信息

for(i=t;i

{

fwrite(&stud[i],sizeof(structstudent_type),1,fp1);

printf("%-10s%10s%10s%8d%8d%8d%10.2f\n",stud[i].name,stud[i].num,

stud[i].cla,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);

}

printf("\n");

//关闭文件流

fclose(fp1);

fclose(fp);

}

5、学生成绩的排序

voidSort()

{

FILE*fp1,*fp2;

inti,j;

//打开原来存储信息的文件

if((fp1=fopen("score.txt","rb"))==NULL)

{

printf("Thefilecan'tepen.\n\n");

exit(0);

}

//建立一个存储排序后的信息的文件

if((fp2=fopen("sortScore.txt","wb"))==NULL)

{

printf("Thefilewriteerror.\n");

exit(0);

}

for(i=0;i

if(fread(&stud[i],sizeof(structstudent_type),1,fp1)!

=1)

{

printf("filereaderror.");

exit(0);

}

//循环遍历比较

for(i=0;i

{

for(j=i+1;j

{

//交换排序

if(stud[i].ave

{

temp=stud[i];

stud[i]=stud[j];

stud[j]=temp;

}

fwrite(&stud[i],sizeof(structstudent_type),1,fp2);

}

}

fclose(fp1);

fclose(fp2);

//直接输出排序后的文件

FILE*fp;

fp=fopen("sortScore.txt","rb");

printf("\n\nAftersort,thescoreis:

\n");

printf("NameNo.Classscore1score2score3ave\n");

printf("*******************************************************************\n");

for(i=0;i

{

printf("%-10s%10s%10s%8d%8d%8d%10.2f\n",stud[i].name,stud[i].num,

stud[i].cla,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);

}

fclose(fp);

}

6、删除学生信息(按姓名)

voidDelete()

{

FILE*fp;

inti,j,n,flag;

charname[10];

//打开添加后的文件

if((fp=fopen("InsertScore.txt","rb"))==NULL)

{

printf("Thefilecan'tepen.\n\n");

exit(0);

}

//输出原始信息

printf("\n\nTheoriginalscoreis:

\n");

printf("NameNo.Classscore1score2score3ave\n");

printf("*******************************************************************\n");

for(i=0;fread(&stud[i],sizeof(structstudent_type),1,fp)!

=0;i++)

{

printf("%-10s%10s%10s%8d%8d%8d%10.2f\n",stud[i].name,stud[i].num,

stud[i].cla,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);

}

fclose(fp);

n=i;

//输入要删除的姓名

printf("\nEnterthenameyoudelete:

");

scanf("%s",name);

for(flag=1,i=0;flag&&i

{

if(strcmp(name,stud[i].name)==0)

{

//如果找到该位置,将后面的依次向前移动一个位置

for(j=i;j

{

strcpy(stud[j].name,stud[j+1].name);

strcpy(stud[j].cla,stud[j+1].cla);

strcpy(stud[j].num,stud[j+1].num);

stud[j].ave=stud[j+1].ave;

stud[j].score[0]=stud[j+1].score[0];

stud[j].score[1]=stud[j+1].score[1];

stud[j].score[2]=stud[j+1].score[2];

}

flag=0;

}

}

if(!

flag)

n=n-1;

else

printf("\nCan'tfound!

\n");

//输出删除后的信息

printf("Now,thesocreare:

\n");

if((fp=fopen("AfterDelete.txt","wb"))==NULL)

{

printf("Can'topenfile!

\n");

exit(0);

}

for(i=0;i

fwrite(&stud[i],sizeof(structstudent_type),1,fp);

fclose(fp);

fp=fopen("AfterDelete.txt","r");

for(i=0;fread(&stud[i],sizeof(structstudent_type),1,fp)!

=0;i++)

{

printf("%-10s%10s%10s%8d%8d%8d%10.2f\n",stud[i].name,stud[i].num,

stud[i].cla,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);

}

printf("\n");

fclose(fp);

}

7、主函数和菜单

voidmain()

{

intchoice;

printf("\t~~WelcometothescoreManageSystem~~\n");

printf("Enteryouchoice:

\n");

printf("1,Add2,sort3,Insert4,Delete0exit\n");

scanf("%d",&choice);

while(choice!

=0)

{

switch(choice)

{

case1:

read();save();display();break;

case2:

system("cls");Sort();break;

case3:

system("cls");Insert();break;

case4:

system("cls");Delete();break;

default:

printf("Entererror.");

break;

}

printf("Enteryouchoice:

\n");

printf("1,Add2,sort3,Insert4,Delete0exit\n");

scanf("%d",&choice);

}

}

八、调试分析

1.最初编译程序时是想把全部程序输完一起调试,可一运行竟有一百多个错误,于是选择了单个程序慢慢调试

2.在写输入函数input()时,费我了三天时间,一直没办法把曾输入的信息保存在文件里,每次运行程序都要重新输入信息,与所做的程序不符,后来经过请教别人,另编译了一个程序建立文件,终于可以把每次的信息保留在文件里了!

3.在写输出函数output()是,显示出的结果总是乱码,一步一步检查程序,才发现原来是自己忽略了文件信息已以全局变量形式显示,可自己在编程时仍从文件中读取,导致输出结果是乱码。

4.有些功能不能实现,但通过F10调试,自己的分析和请教别人,终于程序可以实现简单的功能了。

九、测试结果

 

1、输入学生信息

 

2、增加学生信息

 

 

3、学生成绩排序

 

 

4、删除学生信息

 

十参考文献

[1]谭浩强《C程序设计》第三版北京清华大学出版社

[2]边肇祺,《模式识别》(第二版),北京:

清华大学出版社,1988,25~35

[5]丁华伟《C语言程序设计系统》第三版北京清华大学出版社

[4]严蔚敏《数据结构》C语言版北京清华大学出版社

 

课程设计总结

通过C课程设计的实验课使我了解到了一个程序的开发过程,虽然规模不大,但是为我以后的编程学习打下了基础。

在整个编程过程中,我体会到了编程的辛苦,特别是当一个程序无法运行而又无计可施时,那种难受实在无法用语言表达,但当为一个程序而绞尽脑汁,在自己的努力和同学的帮助下最终运行成功时的那种喜悦感也是溢于言表的,最重要的是我从这次实验课中发现了自己的不足,知识掌握的不牢固,以及这门课知识的广泛。

良好的习惯的养成,需要我坚强的毅力和持久的耐力,同别人的交流也能很快提过自己的编程技能,编程高手是在一天天的难受和惊喜中磨练而成的,向更高的方向前进,这是我的兴趣和梦想,也同时要感激徐老师对我们的关心和帮助,对于他的教学很满意,把每个知识都给我们讲的很细,并让我们学以致用,更告诉我们一定要打好C语言的基础,它是学习各种软件的基础,希望老师能给我更多的题让我去运行,在大学要给我一点小小的压力,只有我们练的多了,自然而然的就会了!

像这样的大型的程序就比较有挑战性,如果有多一点的时间,我们会编出更完美的程序,在平常能给我们一些这样的程序,我们会很感兴趣的,在编程序中我从别的同学那里还了解到密码的设置及修改,让我对程序产生了极大的兴趣,有这个程序设计的机会,让我对它有所了解,以后我还会去编这样或更高层次的程序,为我的梦想而奋斗!

总之,这次试验让我了解到编写一个程序的难度,充分的说明了我对知识了解的不完善,对很多的程序结构模糊不清,以致在这次编写程序是漏洞百出,花了好长的时间才把程序改完整,等于又把书本知识看了一遍,但这同时巩固了我的C语言的基础,为我以后的编程生涯打下很好的基础!

但程序中还会有一些我没考虑到的缺点,我以后会继续改进,使我的程序更加完善,也使我得到进一步的提高。

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

当前位置:首页 > 解决方案 > 商业计划

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

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