最新数据结构课程设计基于C语言的学生成绩管理系统.docx
《最新数据结构课程设计基于C语言的学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《最新数据结构课程设计基于C语言的学生成绩管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
最新数据结构课程设计基于C语言的学生成绩管理系统
摘要
数据结构是计算机程序设计的重要理论技术基础,要求学生编写的程序结构清楚和正确易读,符合软件工程的规范,培养我们的数据抽象能力。
本系统全称为实验课成绩管理系统,主要包括插入,删除,排序,更新,查找等六个模块,整个程序是采用c语言进行编写的,在这次程序设计中,本人所负责的主要时排序模块。
不仅可以完成对学生学号的排序,还可以根据总分对学生信息进行排序。
本文主要介绍了该系统的需求分析,概要设计,详细设计,以及测试分析等部分,重点介绍了本人所设计模块的详细设计以及测试分析。
关键词:
成绩管理系统,C语言,数据结构
目录
1需求分析1
1.1数据需求分析1
1.2功能需求分析1
2概要设计2
2.1系统模块划分2
2.2系统模块结构图2
3详细设计3
3.1创建学生信息表3
3.2结构类型定义3
3.3函数调用4
3.4排序5
3.5输出学生信息表6
4测试分析7
总结9
参考文献10
1需求分析
当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境.计算机的最大好处在于利用它能够进行信息管理.使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性.尤其对于复杂的信息管理,计算机能够充分发挥它的优越性.
学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段,对学生来说可以轻松的查阅自己在校的成绩。
1.1数据需求分析
本系统的主要数据信息有学生实验课成绩信息表。
学生信息表包括:
学号,姓名,实验成绩,平时成绩,总成绩等。
1.2功能需求分析
本系统主要实现对学生实验课成绩信息进行管理,需要实现以下几个方面的管理功能:
(1)学生管理:
学生信息的添加、删除、修改、查询、排序。
(2)打印输出:
学生实验课成绩信息。
2概要设计
2.1系统模块划分
数据结构的研究内容:
数据的逻辑结构,数据的存储结构,数据的操作。
线性表是一种典型的线性数据结构,它可以采用链式结构与顺序存储结构来存储。
本课程设计采用的是顺序存储结构,并上施加了一些操作:
插入,删除,查找,排序,修改等。
(1)主界面模块提供实验课成绩管理系统的主菜单界面,供用户选择与执
行各项管理工作。
(2)查询模块用于用户根据学号进行成绩的查询。
(3)录入模块用于将用户的基本信息存储到数据库。
(4)删除模块用于根据学号删除用户的基本信息。
(5)插入模块用于将用户的基本信息插入到记录中。
(6)排序模块用于根据用户的要求进行排序。
本学生所负责的模块是完成记录的排序与输出,不仅可以自动对学号进行排序还可以对总成绩进行排序。
2.2系统模块结构图
根据系统功能设计,对应的系统模块结构图如图1所示。
图1系统模块结构图
3详细设计
3.1创建学生信息表
创建顺序表,也就是如何对一个顺序存储的线性表进行数据的录入。
即,对已经定义好的线性表进行数据的附值。
思想:
本课程能够提示用户输入相应的信息,并能够自动进行运算,将数据保存到文件中,并进行输出。
相关代码:
/*构建学生信息库*/
studentcreatedatabase()
{
intn,i;
printf("\n\nPleaseInputStudents'Sum:
\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("Di%dGeXueShengDeJiBenXinXi:
\n",i);
printf("PleaseInputNo:
\n");
scanf("%d",&List.data[i-1].xuehao);
printf("PleaseInputName:
\n");
scanf("%s",List.data[i-1].name);
printf("PleaseInputpingshichengji:
\n");
scanf("%d",&List.data[i-1].pingshi);
printf("PleaseInputshiyanchengji:
\n");
scanf("%d",&List.data[i-1].shiyan);
List.len=n;
}
}
3.2结构类型定义
要想让计算机对数据进行处理,首先要将数据存储到计算机。
为此,必须先定义数据的存储类型。
由于本课题采用的顺序存储结构,结构类型定义如下:
typedefstruct/*结构类型的定义*/
{
intxuehao;
charname[N];
intshiyan,pingshi,zhong;
}stu;
typedefstructLnode//顺序表类型的定义
{
studata[M];
intlen;
}student;
staticstudentList;//定义顺序表
staticFILE*fp;//定义文件型指针变量
3.3函数调用
main()
{
clrscr();
Welcome();
clrscr();
ZhuJieMian();
getch();
}
其实在主函数中并没有使用太多的调用,而是使用了一个函数专门实现其它函数的调用,这样可以使程序更加清晰,可移植性强。
该函数如下:
ZhuJieMian()
{intt,i,no,ldata,lname;
printf("\n\n\n");
printf("************************************\n\n");
printf("PleaseChooseTheNumberYouLike!
\n\n");
printf("\n");
printf("Switch()\n");
printf("\n");
printf("1Input\n");
printf("\n");
printf("2Shanchu\n");
printf("\n");
printf("3Charu\n");
printf("\n");
printf("4Update\n");
printf("\n");
printf("5Search\n");
printf("\n");
printf("6Sort\n");
printf("\n");
printf("7End\n");
scanf("%d",&t);
if(t==6)
{clrscr();
printf("\n");
printf("*********ShuJuPaixu*********\n\n");
Sort();
getch();
clrscr();
ZhuJieMian();
}
if(t==7)
{clrscr();
printf("\n\n\n");
printf("*********SeeYou!
*********\n\n");
}
getch();
exit(0);
}
3.4排序
思想:
本程序主用运用冒泡法对记录进行排序,其中用两种排序方法,一种是根据学号进行排序,另一种是根据总分成绩进行排序。
Sort()/*排序*/
{inti,j,flag,No;
stux;
printf("1anxuehaopaixu2anzhongfenpaixu\n");
printf("InputTheNumberWhichBeSorted:
\n");
scanf("%d",&No);
if(No==1)//根据学号进行排序
{for(i=1;i<=List.len-1;i++)
{
flag=0;
for(j=0;jif(List.data[j+1].xuehao{flag=1;
x=List.data[j+1];
List.data[j+1]=List.data[j];
List.data[j]=x;
}
if(flag==0)
break;
}
}
if(No==2)//根据总分成绩进行排序
{for(i=1;i<=List.len-1;i++)
{flag=0;
for(j=0;jif(List.data[j+1].zhong{
flag=1;
x=List.data[j+1];
List.data[j+1]=List.data[j];
List.data[j]=x;
}
if(flag==0)
break;
}
}
}
3.5输出学生信息表
思想:
该程序能够将保存到相应文件中的记录输出,该文件有指针fp指向。
Save()
{
inti;
if((fp=fopen("shuju.txt","a"))!
=NULL)
{printf("No\t\t");
printf("Name\t\t");
printf("pingshichengji\t");
printf("shiyanchengji\t");
printf("zhongchengji\n");
for(i=1;i<=List.len;i++)
{printf("%d\t\t",List.data[i-1].xuehao);
printf("%s\t\t",List.data[i-1].name);
printf("%d\t\t",List.data[i-1].pingshi);
printf("%d\t\t",List.data[i-1].shiyan);
List.data[i-1].zhong=(List.data[i-1].pingshi+List.data[i-1].shiyan)/2;
printf("%d\t\t",List.data[i-1].zhong);
fprintf(fp,"%d\t\t%s\t\t%d\t\t%d\t\t%d\n",List.data[i-1].xuehao,
List.data[i-1].name,List.data[i-1].pingshi,List.data[i-1].shiyan,
List.data[i-1].zhong);
printf("\n");
}
}
fclose(fp);
}
4测试分析
运行程序成功,出现欢迎界面,按任意键,将会出现主菜单的界面,界面如图2所示:
图2主界面
选择1,对数据进行录入,此时输入三个记录,并由系统自动进行输出,界面如2图所示。
图3录入信息界面
按任意键返回到主界面,选择5,实现对录入的数据进行排序的功能,所出现的界面图4所示:
图4数据排序界面
此时有两种排序方法,选择1,将对学号进行排序,选择2,就可以将记录按照总分从小到大进行排序了,所得到的界面分别如下:
图5按学号排序模块
图6按总分排序模块
总结
在这次课程设计中,本人做的主要是排序功能,包括对学生按照学号进行排序,同时还可以根据总分进行排序。
学生信息主要包括:
学号、姓名、平时成绩、实验成绩等。
运用了冒泡法来编写算法,加深了我对该算法的理解。
同时,我还了解了编写算法的基本流程。
通过本次课程设计,我第一次体会到了编写程序的艰辛,但是,当我费了好大劲将程序运行出来的时候,我才真正体会到了快乐的滋味。
在编写过程中我对数据结构的基本编程方法也有了更加深层的理解,虽然只是短短的一个星期,但这已经足够了。
这一个星期过得真的很充实。
但看到自己所编写的程序能够运行的时候,感到很有成就感。
我现在对于我所学习的课程有了更加深刻的认识,对数据结构也更加感兴趣了。
感谢学校给我们提供了这个平台,让我们能够把理论运用到实践中去。
同时,我还要感谢老师,在这次课程设计中老师也对我们提供了很大的帮助。
参考文献
[1]曹衍龙等.C语言实例解析精粹(第二版).北京:
人民邮电出版社,2007.8.
[2]谭浩强.C程序设计(第三版).北京:
清华大学出版社,2005.7.
[3]张磊等.C语言程序设计教程.北京:
中国铁道出版社,2007.8.
[4]严蔚敏,吴伟民等.数据结构(C语言版).北京:
清华大学出版社,1997.4.
[5]余苏宁等.C++课程设计.北京:
高等教育出版社,2004.1.
[6]黄梯云.管理信息系统(修订版)[M].北京:
高等教育出版社,2000年.