数据结构报告 学生成绩管理系统.docx
《数据结构报告 学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构报告 学生成绩管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
数据结构报告学生成绩管理系统
数据结构报告学生成绩管理系统
2009-6-27
学生成绩管理系统的设计和使用
数据结构是计算机专业的教学计划中的核心课程之一,数据结
构在计算机科学中是一门综合性的专业基础课。
“数据结构”的研究
不仅涉及到计算机硬件(特别是编码理论、存储装置和存取方法等)的
研究范围,而且和计算机软件的研究有着更密切的关系,无论是编译
程序还是操作系统,都涉及到数据元素在存储器中的分配问题。
在研
究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更
为方便。
因此,可以认为“数据结构”是介于数学、计算机硬件和计
算机软件三者之间的一门核心课程。
在计算机科学中,“数据结构”
不仅是一般程序设计(特别是非数值计算的程序设计)的基础,而且是
设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型
应用程序的重要基础。
通过对学生管理的系统的学习和设计,了解对指针、串、排序各种
函数的调用以及C++程序设计的应用。
并通过指针、串、排序和函数来实
现学生成绩管理的程序设计。
对于学生成绩管理系统的具体要求:
通过程序的设计能够比较准确
的实现对学生成绩的输入、修改、查询、删除、输出、求平均成绩。
通过学生成绩管理系统课程设计,进一步掌握管理信息系统的理论和
方法,培养和锻炼开发管理信息系统的能力。
为今后信息系统开发打
下良好的基础。
:
VC++语言
本程序通过指针、串、排序为主体来实现,主要包括一个主程序
和八个子程序,其中八个子程序主要分别实现程序的输入、显示、排
序、查找、删除、插入和清空成绩的输出及求总成绩。
程序运行,刚
开始出现一个主界面供使用者选择所要进行的功能。
然后选择所要进
行的功能:
1:
增加成绩功能:
即完成对成绩的输入,通过调用用于添加数据的
子函数inputs来实现对所有学生成绩的输入。
2:
显示成绩功能:
显示出你说输入的所有学生的成绩列表。
并且在
最后输出它们的总成绩。
3:
排序成绩功能:
通过冒泡排序的方法对学生的总成绩进行排序。
4:
查找成绩功能:
通过输入姓名调用查找函数来实现对某些学生成
绩的查询。
5:
删除成绩功能:
调用删除函数通过姓名删除该同学的成绩。
6:
插入成绩功能:
当需要再次输入一部分同学的成绩时,调用插入
函数来实现对一些新同学成绩的输入。
7:
清空成绩功能:
把以前输入的所有学生的成绩清空成空的,可以
实现对学生成绩的重新输入。
8:
求总成绩功能:
实现对所输入的所有同学的成绩进行求总。
最后退出系统功能:
退出系统
main()
Inputs()
a=1a=8
输出成绩stud:
:
inserta=2
a=6插入学生成
绩
if(headswitch(a)Error==NULL
if(head)
Error==NULL
)
a=3
a=7
完成排序a=5
a=4
stud:
:
find)
stus.clearstus.del)
if(head
==NULL输入姓名
)
清空链表
输入姓名
Error输出成绩列
表删除学生
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
structstudent
{
charname[10];///姓名charid[10];///学号floatYnum;///语文分数floatSnum;///数学分数floatEnum;///英语分数floatnumber;///总分student*next;
};
///////////-------定义类-----------------------////////////
classstud
{
student*p1,*p2,*head;
public:
~stud()/////----析构函数------------------------{
while(head)
{
p1=head->next;
deletehead;
head=p1;
}
}
///------------成员函数------------
voidoutput(student*head);//输出学生成绩
student*input(student*head);//增加学生记录
student*del(student*head,char*p);//删除记录student*find(student*head,char*p,int&n);//查找学生记录(可查找多个同名数据)
student*stat(student*head);//排序统计学生总分
friendvoidtotal(student*head);//统计学生总分student*insert(student*head);//按学生总分插入记录
student*clear(student*head);//删除当前表
voidInputs(student*p);//用于添加数据的子函数
};//----------------------------------------------------
////---------用于添加数据的子函数-------///////
voidstud:
:
Inputs(student*p)
{
cout<<cin>>p->name>>p->id;
cin>>p->Ynum;
while(cin.fail())
{cerr<<"您的输入有误,请重新输入"<cin.clear();
cin.sync();
cin>>p->Ynum;
}
cin>>p->Snum;
while(cin.fail())
{cerr<<"您的输入有误,请重新输入"<cin.sync();
cin.clear();
cin>>p->Snum;
}
cin>>p->Enum;
while(cin.fail())
{cerr<<"您的输入有误,请重新输入"<cin.clear();
cin.sync();
cin>>p->Enum;
}
total(p);//计算出总分
}
////////-----输出学生成绩-----------------/////////////////////
voidstud:
:
output(student*head)
{p1=head;
while(p1!
=NULL)
{
cout<name<<id<Ynum
<Snum<<Enum<number<p1=p1->next;
}
}
/////////------------插入学生成绩记录--------////////////////
student*stud:
:
insert(student*head){
p1=newstudent;
Inputs(p1);//调用子函数增加数据
p2=head;
student*p3=NULL;
while((p2->numbernumber)&&p2->next!
=NULL)
{p3=p2;
p2=p2->next;
}
if(p2->number>p1->number)
{p1->next=p2;
if(p3==NULL)//若当前值是最小的
returnp1;
p3->next=p1;
returnhead;
}
else
{p2->next=p1;
p1->next=NULL;
returnhead;
}
}
//////----------清空数据------------/////////////
student*stud:
:
clear(student*head){
while(head)
{p1=head->next;
deletehead;
head=p1;
}
returnhead;
}
//////////-----------排序统计函数-----------/////////////////
student*stud:
:
stat(student*head)
{
p2=head;
p1=p2->next;
while(p2->next)//冒泡泡法,呵呵`~~~
{
if(p2->number>p1->number)
{//把头指针指向当前比较小的节点
p2->next=p1->next;
p1->next=head;
head=p1;
//把用于比较的两个指针复位
//p2=head;
p1=p2->next;
}
else
{//指向下一个节点
p2=p2->next;
p1=p2->next;
}//-------------------------------------------
}
cout<<"当前表以按学生总分排序成功"<returnhead;
}
/////-----------删除记录-----------//////////////////////
student*stud:
:
del(student*head,char*p)
{
p1=head;
p2=NULL;
while(strcmp(p1->name,p)&&p1->next!
=NULL)
{p2=p1;
p1=p1->next;
}
if(!
strcmp(p1->name,p))
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
cout<<"删除成功,OK"<deletep1;
}
else
cout<<"没找到姓名"<
returnhead;
}
///////----------统计总分---------------///////////////
voidtotal(student*p)
{p->number=p->Ynum+p->Snum+p->Enum;
}
///////-------------查找函数----------///////////////////
student*stud:
:
find(student*head,char*p,int&n){
p2=head;
while(strcmp(p2->name,p)!
=0&&p2->next!
=NULL)
p2=p2->next;
if(0==strcmp(p2->name,p))
{
cout<name<<id<Ynum
<Snum<<Enum<number<n++;
returnp2;
}
else
if(n==0)
{
system("cls");
cout<<"对不起,没有您要查找的学生数据"<}
returnNULL;
}
///////----------------增加学生记录-----------////////////////////////////
student*stud:
:
input(student*head)
{p1=newstudent;
p2=head;
Inputs(p1);//调用子函数增加数据
if(head==NULL)
{
head=p1;
p1->next=NULL;
returnhead;
}
while(p2->next!
=NULL)
p2=p2->next;
p2->next=p1;
p1->next=NULL;
returnhead;
}
//-----------输出错误-----------//////////
voiderror()
{
cout<<"错误,这还是一张空表,请输入数据"<getch();
}
///////////////////------------main函数--------//////////////////-----------
intmain()
{
studstus;
student*head=NULL;
student*pd;//临时指针,用于查找函数
charchoice;//用于存放用户的选择项
charname[10];//查找,删除记录的key
while
(1)
{system("cls");
cout<<"***************计算机四班(24020704)李达2402070414*************"<cout<<"****************学生成绩管理系统
*************"<cout<<"**********
******"<cout<<"****************1.增加学生成绩****************"<cout<<"****************2.显示学生成绩****************"<cout<<"****************3.排序统计成绩****************"<cout<<"****************4.查找学生成绩****************"<cout<<"****************5.删除学生成绩****************"<cout<<"****************6.插入学生成绩****************"<cout<<"****************7.清空所有数据****************"<cout<<"****************8.安全退出系统****************"<cout<<"请输入您的选择(0--8):
";cout<intn=0;//计数器,用于在查找时计算有没有同名学生
cin>>choice;
fflush(stdin);
if(choice=='8')//安全退出
{cout<<"谢谢使用,再见"<exit(0);
}
switch(choice)
{
case'1':
head=stus.input(head);
break;
case'2':
if(head==NULL)
{
error();
break;
}
cout<<<!
!
"<stus.output(head);
getch();
break;
case'3':
if(head==NULL)
{
error();
break;
}
head=stus.stat(head);
getch();
break;
case'4':
if(head==NULL)
{
error();//调用函数输出错误信息
break;
}
cout<<"请输入想要查找的学生姓名"<<","<<"本系统可以查找重复姓名学生"<cin>>name;
pd=head;
cout<<<!
!
"<while(pd)//循环调用函数,用于输出多个的同名学生成绩
{
pd=stus.find(pd,name,n);
if(pd==NULL)
break;
pd=pd->next;//指针指向当前以找到的下一个节点,用于查找多个同名学生
}
getch();
break;
case'5':
if(head==NULL)
{
error();
break;
}
cout<<"请输入想要删除学生姓名"<cin>>name;
head=stus.del(head,name);
getch();
break;
case'6':
if(head==NULL)
{
error();
break;
}
head=stus.stat(head);
head=stus.insert(head);
break;
case'7':
if(head==NULL)
{
error();
break;
}
head=stus.clear(head);
cout<<"删除表成功~"<getch();
break;
default:
cout<<"对不起,您的输入有误,请重新输入。
\n";
getch();
break;
}
}
getch();
return0;
}
接下来的截图是删除lihu再插入jiangyong后的学生列表且已经按总
分顺序排序
一学期对于《数据结构》的学习,让我们学到了很多理论知识,
了解了c语言方面的编程技术,它们都对我们进一步学习计算机方面的知识建立的坚实的基础,为我们今后的发展也提供了很多有用的地
方,虽然很显然的是这些知识不是很好学,有难度,但是这也是真正
考验我们的时候,对于数据结构我们不仅要在平时的课堂上认真学
习,在课后也应该多加练习增强我们的动手能力而不仅仅只是局限对
书本知识的学习上,对于这次课程设计,我们也深深的感受到编程序
一定要认真,不能马虎、大意,要综合各个方面的知识来编写程序而
不仅仅只是课本,要海纳百川,多吸收同学们的意见,多和同学老师
们探讨,这样才能真正完成一份好的课程设计。
教师评语:
指导老师:
日期:
年月日