北京理工大学数据结构课程设计学生信息管理专题报告.docx
《北京理工大学数据结构课程设计学生信息管理专题报告.docx》由会员分享,可在线阅读,更多相关《北京理工大学数据结构课程设计学生信息管理专题报告.docx(29页珍藏版)》请在冰豆网上搜索。
北京理工大学数据结构课程设计学生信息管理专题报告
专题设计(链表)报告
题目:
学生成绩管理系统
小组成员:
专题报告
—————第十组
问题描述
设计一个“学生成绩管理系统”。
主要实现学生信息的录入、添加、修改、删除、排序和查看等基本功能。
设计要求
编写一个学生成绩管理程序。
学生成绩以一个学生一条记录的形式存储,每个学生记录包含的信息有序号、学号、姓名及5门功课的成绩。
具体功能如下:
a.获取学生成绩。
可以从文件中读取成绩,也可直接录入。
查询学生成绩,输入学生学号或姓名等信息后,显示学生在成绩单中的位置及所有信息。
b.添加学生成绩,在学生成绩单的指定位置添加学生成绩信息。
c.修改学生成绩,在学生成绩单中,修改指定学生的成绩信息。
d.删除学生成绩,在学生成绩单中,删除指定学生的成绩信息。
e.保存文件。
当学生成绩单发生添加、修改、删除等变化后,都要对最终结果进行保存。
数据结构
学生成绩可以用单链表存储,方便随时插入和删除学生成绩记录,实现动态管理。
一个学生作为一个结点。
使用链表的基本算法实现学生成绩单的各项管理功能。
设计与实现
成绩信息管理系统具体分为两个模块:
数据类和功能类。
数据类包括学生的姓名、学号及成绩等信息。
通过对学生信息管理系统的功能分析,可以定义出系统的总体功能结构模块图,如上图所示。
当用户运行该系统后可以来进行学生信息信息(录入)插入管理、学生信息修改管理、学生信息删除管理、学生信息显示管理及学生信息显示等操作。
根据功能需求的结果分析,主界面应该由学生信息录入管理、学生信息插入管理、学生信息修改管理、学生信息删除管理、学生信息显示管理和学生信息信息查询管理组成,可以通过输入相应的数字进入相应的功能模块。
在本系统中需要编码实现的主要有学生信息录入、学生成绩信息插入、学生成绩信息查询、学生成绩信息修改、学生成绩信息删除和学生成绩信息输出等6个功能模块,以及学生信息的文件存储与读取功能。
学生成绩信息录入模块:
添加的信息包括姓名、学号及各科成绩。
实际流程为开始→输入学生信息→调用类成员函数采用单链表保存数据→结束。
代码如下:
voidFunction:
:
Add()//录入学生信息函数
{
charname[64];
charno[20];
Classscore;
charchoose;
Student*f1,*p;
f1=Student_First;
while(f1->Next)
f1=f1->Next;
do
{
p=newStudent;
cout<<"请输入您要添加的学生成绩信息:
"<cout<<"请输入学生姓名:
";
cin>>name;
cout<<"请输入学号:
";
cin>>no;
cout<<"请输入计算机成绩:
";
cin>>score.Computer;
cout<<"请输入数学成绩:
";
cin>>score.Math;
cout<<"请输入英语成绩:
";
cin>>score.English;
cout<<"请输入体育成绩:
";
cin>>score.Pe;
cout<<"请输入音乐成绩:
";
cin>>score.Music;
p->Set(name,no,score);
f1->Next=p;
p->Next=NULL;
f1=f1->Next;
cout<<"是否继续输入信息?
(Y\\N)-------";
cin>>choose;
}
while(choose=='y'||choose=='Y');
Save();
Menu();
}
学生成绩信息插入模块:
输入一个存在的学号作为插入位置,在其后插入的信息包括姓名、学号及各科成绩。
流程为开始→输入学生学号→以学号为插入位置,在其后插入信息→调用类成员函数采用单链表保存数据→结束。
代码如下:
voidFunction:
:
Insert()
{
charname[64];
charno[20];
Classscore;
Student*f1,*p;
f1=Student_First;
p=newStudent;
cout<<"请输入学号来确定插入位置:
"<cin>>no;
while(f1)
{if(strcmp(f1->GetNo(),no)==0)
break;
f1=f1->Next;
}
cout<<"请输入学生姓名:
";
cin>>name;
cout<<"请输入学号:
";
cin>>no;
cout<<"请输入计算机成绩:
";
cin>>score.Computer;
cout<<"请输入数学成绩:
";
cin>>score.Math;
cout<<"请输入英语成绩:
";
cin>>score.English;
cout<<"请输入体育成绩:
";
cin>>score.Pe;
cout<<"请输入音乐成绩:
";
cin>>score.Music;
p->Set(name,no,score);
p->Next=f1->Next;
f1->Next=p;
Save();
cout<<"插入成功!
";
Menu();
}
学生成绩信息修改模块:
首先查找与要修改数据相匹配的信息,将相应的信息输出,然后再重新输入新的数据并保存到单链表。
流程为开始→输入学生学号,显示学生信息→修改学生信息→结束。
代码如下:
voidFunction:
:
Modify()//修改学生信息函数
{
charname[64];
charchoose;
Student*temp,*p;
charno[20];
Classscore;
temp=p=Student_First;
cout<<"请输入您要修改的学号:
";cin>>no;
while(temp)
{
if(strcmp(temp->GetNo(),no)==0)
{
cout<<"姓名学号微机数学英语体育音乐\n";
temp->Out();cout<cout<<"请输入姓名:
";
cin>>name;
cout<<"请输入学号:
";
cin>>no;
cout<<"请输入计算机成绩:
";
cin>>score.Computer;
cout<<"请输入数学成绩:
";
cin>>score.Math;
cout<<"请输入英语成绩:
";
cin>>score.English;
cout<<"请输入体育成绩:
";
cin>>score.Pe;
cout<<"请输入音乐成绩:
";
cin>>score.Music;
temp->Set(name,no,score);
break;
}
temp=temp->Next;
}
Save();
cout<<"修改成功!
"<cout<<"1.返回主菜单\n2.继续修改-------";
cin>>choose;
if(choose=='1')Menu();
elseModify();
}
学生成绩信息删除模块:
当选择删除功能时,输入要删除的同学的学号,如果该同学存在,进行删除操作。
代码如下:
voidFunction:
:
Delete()//删除学生信息函数
{
charno[20];
charchoose;
Student*temp,*p;
p=temp=Student_First;
cout<<"输入学号:
";
cin>>no;
while(temp)
{if(strcmp(temp->GetNo(),no)==0)
{
p->Next=p->Next->Next;
deletetemp;
cout<<"删除成功:
\n";
break;
}
p=temp;
temp=temp->Next;
}
Save();
cout<<"1.返回主菜单\n2.继续删除-------";
cin>>choose;
while(choose!
='1'&&choose!
='2')
{cout<<"1.返回主菜单\n2.继续删除-------";
cin>>choose;
}
if(choose=='1')
Menu();
elseif(choose=='2')
Delete();
}
学生成绩信息显示模块:
从单链表表头遍历整个单链表,将所有数据输出。
代码如下:
voidFunction:
:
Show()
{
Student*temp;
charchoose;
inti=1;
temp=Student_First->Next;
if(!
temp)Menu();
else
{
cout<<"姓名学号微机数学英语体育音乐\n";
while(temp!
=NULL)
{
cout<
temp->Out();
temp=temp->Next;
i++;
}
}
cout<<"按任意键返回主菜单。
"<>choose;
Menu();
}
学生成绩信息查询模块:
具体流程为开始→输入要查找的学号→输出对应的学生信息。
代码如下:
voidFunction:
:
Search()
{
charchoose;
chart2[20];
Student*temp=Student_First->Next;
cout<<"请输入您要查询的学号-------";
cin>>t2;
while(temp)
{
if(strcmp(t2,temp->GetNo())==0)break;
temp=temp->Next;
}
cout<<"\n";
cout<<"姓名学号微机数学英语体育音乐\n";
temp->Out();
cout<<"\n1.返回主菜单\n2.继续查询-------";
cin>>choose;
if(choose=='1')Menu();
elseif(choose=='2')Search();
}
文件的读取和存储
读取代码:
voidFunction:
:
Read()//读取学生信息函数
{
Student*p,*p2;
p=Student_First;
ifstreamis("Student.txt",ios:
:
in);
if(!
is)
{
ofstreamos("Student.txt",ios:
:
out);
os.close();
return;
}
while(!
is.eof())
{p2=newStudent;
p2->Infile(is);
p->Next=p2;
p2->Next=NULL;
p=p->Next;
}
}
存储代码:
voidFunction:
:
Save()//保存学生信息函数
{
ofstreamof("Student.txt",ios:
:
out);
Student*p=Student_First->Next;
while(p)
{
p->Ofile(of);
p=p->Next;
}
of.close();
}
测试与结论
测试环境:
硬件环境:
处理器Intel(R)Core(TM)i5-2410MCPU@2.30GHZ2.30GHZ;安装内存:
2.00GB
软件环境:
操作系统:
windows7调试环境:
CFree5.0
运行结果:
1、主界面
2、学生信息录入
3、学生信息插入
4、学生信息修改
5、学生信息显示
6、学生信息查询
7、学生信息删除
总结与思考
在这次专题设计中,我们小组采用了“低耦合、高内聚”的模块化处理方法,将程序主体分为功能类和数据类两部分,程序可读性强,易于查找错误,方便修改。
考虑到实际操作需要,在程序中,本小组还添加了show函数以显示全部学生信息,方便查看。
程序实现了内存和文件中数据的同步储存和修改。
由于小组水平有限,程序仍存在许多不足,如未能对非法输入信息的判别和处理操作以及数据输出后的美观程度仍有欠缺等。
课程总结
在本次课程设计过程中,曾遇到过不少问题,单靠一个小组的努力,很难按时完成该课程设计,在设计过程中,我们查询了大量关于学生信息管理系统的文献及网络资料,一遍又一遍的纠错及修改使我们小组的每个成员在知识和能力上都有了很大提升。
通过这次数据结构课程设计的实验,在解决问题的过程中,充分体会到了数据结构这门课程对于软件设计的重要性,也体会到了数据结构+算法=程序这句话的真正含义,一个实际问题的解决第一步就是要依赖于良好的抽象思维的,将实际问题转化为相应的数据结构,只有这一步做好了,才能采取相应的算法和优化方法解决问题和解决好问题。
附录1
小组成员名单:
周浩天(1120121365)吴旭晨(1120121358)熊威博(1120121359)郝鑫刚()王俊博(1120121355)魏鑫(1120121357)林晟威()
附录2
程序源代码
#include
#include
#include
#include
structClass
{intComputer;
intMath;
intEnglish;
intPe;
intMusic;
};
classStudent
{
public:
Student();
voidOfile(ofstream&of);
voidInfile(ifstream&f);
voidOut();
voidSet(char*name,char*no,Classscore);
char*GetName();
char*GetNo();
Student*Next;
protected:
charName[64];
charNo[20];
ClassScore;
};
Student:
:
Student():
Next(0){}
char*Student:
:
GetName(){returnName;}
char*Student:
:
GetNo(){returnNo;}
voidStudent:
:
Set(char*name,char*no,Classscore)
{
strcpy(Name,name);
strcpy(No,no);
Score=score;
}
voidStudent:
:
Infile(ifstream&f)
{f>>Name>>No>>Score.Computer>>Score.Math>>Score.English>>Score.Pe>>Score.Music;//将数据输入到文件
}
voidStudent:
:
Ofile(ofstream&of)
{of<}
voidStudent:
:
Out()
{
cout<}
classFunction//功能类
{
public:
Function();//构造函数
~Function();//析构函数
voidMenu();//菜单函数
voidAdd();//录入学生信息函数
voidInsert();//插入学生信息函数
voidModify();//修改学生信息函数
voidDelete();//删除学生信息函数
voidShow();//显示学生信息函数
voidSearch();//查询学生信息函数
private:
Student*Student_First;
voidRead();//读取学生信息函数
voidSave();//保存学生信息函数
};
Function:
:
Function()
{
Student_First=newStudent;
Read();
}
Function:
:
~Function()
{
deleteStudent_First;
}
voidFunction:
:
Add()//录入学生信息函数
{
charname[64];
charno[20];
Classscore;
charchoose;
Student*f1,*p;
f1=Student_First;
while(f1->Next)
f1=f1->Next;
do
{
p=newStudent;
cout<<"请输入您要添加的学生成绩信息:
"<cout<<"请输入学生姓名:
";
cin>>name;
cout<<"请输入学号:
";
cin>>no;
cout<<"请输入计算机成绩:
";
cin>>score.Computer;
cout<<"请输入数学成绩:
";
cin>>score.Math;
cout<<"请输入英语成绩:
";
cin>>score.English;
cout<<"请输入体育成绩:
";
cin>>score.Pe;
cout<<"请输入音乐成绩:
";
cin>>score.Music;
p->Set(name,no,score);
f1->Next=p;
p->Next=NULL;
f1=f1->Next;
cout<<"是否继续输入信息?
(Y\\N)-------";
cin>>choose;
}
while(choose=='y'||choose=='Y');
Save();
Menu();
}
voidFunction:
:
Insert()
{
charname[64];
charno[20];
Classscore;
Student*f1,*p;
f1=Student_First;
p=newStudent;
cout<<"请输入学号来确定插入位置:
"<cin>>no;
while(f1)
{if(strcmp(f1->GetNo(),no)==0)
break;
f1=f1->Next;
}
cout<<"请输入学生姓名:
";
cin>>name;
cout<<"请输入学号:
";
cin>>no;
cout<<"请输入计算机成绩:
";
cin>>score.Computer;
cout<<"请输入数学成绩:
";
cin>>score.Math;
cout<<"请输入英语成绩:
";
cin>>score.English;
cout<<"请输入体育成绩:
";
cin>>score.Pe;
cout<<"请输入音乐成绩:
";
cin>>score.Music;
p->Set(name,no,score);
p->Next=f1->Next;
f1->Next=p;
Save();
cout<<"插入成功!
";
Menu();
}
voidFunction:
:
Modify()//修改学生信息函数
{
charname[64];
charchoose;
Student*temp,*p;
charno[20];
Classscore;
temp=p=Student_First;
cout<<"请输入您要修改的学号:
";cin>>no;
while(temp)
{
if(strcmp(temp->GetNo(),no)==0)
{
cout<<"姓名学号微机数学英语体育音乐\n";
temp->Out();cout<cout<<"请输入姓名:
";
cin>>name;
cout<<"请输入学号:
";
cin>>no;
cout<<"请输入计算机成绩:
";
cin>>score.Computer;
cout<<"请输入数学成绩:
";
cin>>score.Math;
cout<<"请输入英语成绩:
";
cin>>score.English;
cout<<"请输入体育成绩:
";
cin>>score.Pe;
cout<<"请输入音乐成绩:
";
cin>>score.Music;
temp->Set(name,no,score);
break;
}
temp=temp->Next;
}
Save();
cout<<"修改成功!
"<cout<<"1.返回主菜单\n2.继续修改-------";
cin>>choose;
if(choose=='1')Menu();
elseModify();
}
voidFunction:
:
Delete()//删除学生信息函数
{
charno[20];
charchoose;
Student*temp,*p;
p=temp=Student_First;
cout<<"输入学号:
";
cin>>no;
while(temp)
{if(strcmp(temp->GetNo(),no)==0)
{
p->Next=p