数据结构报告 学生成绩管理系统.docx

上传人:b****5 文档编号:28824250 上传时间:2023-07-20 格式:DOCX 页数:20 大小:172.20KB
下载 相关 举报
数据结构报告 学生成绩管理系统.docx_第1页
第1页 / 共20页
数据结构报告 学生成绩管理系统.docx_第2页
第2页 / 共20页
数据结构报告 学生成绩管理系统.docx_第3页
第3页 / 共20页
数据结构报告 学生成绩管理系统.docx_第4页
第4页 / 共20页
数据结构报告 学生成绩管理系统.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数据结构报告 学生成绩管理系统.docx

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

数据结构报告 学生成绩管理系统.docx

数据结构报告学生成绩管理系统

数据结构报告学生成绩管理系统

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语言方面的编程技术,它们都对我们进一步学习计算机方面的知识建立的坚实的基础,为我们今后的发展也提供了很多有用的地

方,虽然很显然的是这些知识不是很好学,有难度,但是这也是真正

考验我们的时候,对于数据结构我们不仅要在平时的课堂上认真学

习,在课后也应该多加练习增强我们的动手能力而不仅仅只是局限对

书本知识的学习上,对于这次课程设计,我们也深深的感受到编程序

一定要认真,不能马虎、大意,要综合各个方面的知识来编写程序而

不仅仅只是课本,要海纳百川,多吸收同学们的意见,多和同学老师

们探讨,这样才能真正完成一份好的课程设计。

教师评语:

指导老师:

日期:

年月日

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

当前位置:首页 > 初中教育 > 其它课程

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

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