数据结构课程设计.docx
- 文档编号:8154689
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:41
- 大小:198.42KB
数据结构课程设计.docx
《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(41页珍藏版)》请在冰豆网上搜索。
数据结构课程设计
计算机科学与技术
数据结构
课 程:
课程设计
项目名称:
学生信息管理系统
专业年级:
计算计
姓名:
赵瑞
学号:
指导教师:
2016年1月12日
1、学生信息管理系统....................................................................2
2、停车场管理系统........................................................................21
3、约瑟夫环...................................................................................33
学生信息管理系统
1 问题描述
1.1课题背景
学生信息管理系统,是针对目前学生信息处理工作的实际情况,结合数据技术,设计开发的学生信息管理系统;能够实现创建、添加、插入、排序、查找、修改学生信息等。
学生信息管理系统是典型的信息管理系统,其开发主要包括前端应用程序的开发和后台数据库的建立和维护两个方面。
对前者要求应用功能完备,容易使用,界面友好等;而对后者则要求建立起数据库一致性和完整性强,数据安全性好的数据库。
学生信息管理系统是教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说至关重要,能够为学校的管理者提供充足的学生信息和快捷的查询手段。
1.2需求分析
利用线性链表实现学生成绩管理系统,具体功能:
输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出,并能在屏幕上输出操作前后的结果。
1.2.1功能需求
(1)本系统具有很强的可靠行,可以对录入的学生信息进行效验,对数据进行修改、删除,可以方便管理员的修改与维护。
(2)本系统操作方便、灵活、简单。
操作人员只需录入学生的基本信息和考试成绩的数据。
(3)本系统可高效、快速的查询到学生的基本信息和考试成绩,便于管理员管理工作的开展。
(4)本系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改、添加,另外还考虑到学生考试成绩,针对这些要求设计了学生信息管理系统。
本系统主要包括信息录入、信息维护、信息查询、报表打印、关闭系统这几部分。
其功能主要有:
⒈有关学生信息的录入,包括录入学生基本信息、学生考试成绩等。
⒉学生信息的维护,包括添加修改学生基本信息、考试成绩信息。
⒊学生信息的查询,包括查询学生的个人基本信息、科目考试成绩。
⒋信息的报表打印,包括学生的基本信息的报表打印、考试成绩的报表打印。
1.2.2性能需求
1.写出系统需求分析,并建模。
2.编程实现,界面友好。
3.输出操作前后的结果
2总体设计
2.1系统介绍
1.学生信息管理系统主要涉及到查询等各的功能,需要通过磁盘读写数据,虽然本系统仅实现了简单的功能,但也需要按照系统整体性来设计。
程序可以查询、修改、增添、删除学生信息,并将之保存在磁盘文件中,信息数据不易丢失;
2.为了提高系统的稳定性和可重用性,程序采用子函数调用的形式完成各项功能,并用单向动态链表存储从磁盘文件读取到的信息;
3.屏幕设计:
屏幕作为信息的显示,通过输出格式的控制,界面更简洁、合理!
3代码设计
3.1程序运行结果截图
登陆界面:
主界面:
文件读入学生信息:
添加学生信息:
(链表尾插法)
删除已有学生信息:
按学号查询:
修改学生信息:
已有学生信息排序:
(总分升序排序)
(学号升序排序)
程序的退出:
(提示是否保存文件)
3.2程序源代码
1.头文件
#defineMAX_NUM10
#include
#include
usingnamespacestd;
boolquit=false;
structStuNode{
intnum;
intmath,eng,yuwen;
intsum;
StuNode*nextstu;
};
classSInfo{
StuNode*StuListHead;
public:
SInfo();//构造函数
~SInfo();//析构函数
voidCreatSinfo();//创建学生信息
voidStuInsert(intsnum,intsmath,intseng,intsyuwen);//插入学生信息
voidStuDelete(intsnum);//删除学生信息
StuNode*StuFind(intsnum);//查找学生信息,传入参数学号
voidStuModify(intsnum,intsmath,intseng,intsyuwen);//修改学生信息
voidStuCopy(StuNode*ptemp,StuNode*p);//学生信息拷贝
voidStuSort(charch);
voidStuClassfy();//分类合计
voidStuRead();//从文件读入学生信息
voidStuSave();//保存学生信息到文件
intIsRead();
voidStuQuit();
voidShowInfo();//遍历输出学生信息
};
intSystemdoor()
{
stringusername="zyq",password="password";
stringname,temp;
intnumber=3;
while
(1)
{
cout<<"用户名:
";
cin>>name;
cout<<"密码:
";
cin>>temp;
if(name!
=username||temp!
=password)
{
number--;
if(number>0)
{
cout<<"用户名/密码错误!
你还有"< } else cout<<"用户名/密码错误! "< } else { cout<<"********************密码正确********************"< return1; } } } voidShowMenu() { cout<<"********************************************"< cout<<"******学生信息系统******"< cout<<"******0.安全退出系统******"< cout<<"******1.文件读入学生信息******"< cout<<"******2.录入新的学生信息******"< cout<<"******3.添加新的学生信息******"< cout<<"******4.删除已有学生信息******"< cout<<"******5.查找已有学生信息******"< cout<<"******6.修改已有学生信息******"< cout<<"******7.已有学生信息排序******"< cout<<"******8.分类合计学生信息******"< cout<<"******9.输出所有学生信息******"< cout<<"******10.保存现有学生信息******"< cout<<"\n\t\n\t\t请选择: "; } SInfo: : SInfo()//构造函数 { StuListHead=newStuNode; StuListHead->nextstu=NULL; } SInfo: : ~SInfo()//析构函数 { StuNode*p; while(StuListHead) { p=StuListHead; StuListHead=StuListHead->nextstu; deletep; } StuListHead=NULL; } voidSInfo: : CreatSinfo()//创建学生信息表 { intn; StuNode*p,*s; p=StuListHead; cout<<"请输入学生人数: "; cin>>n; for(inti=1;i<=n;i++) { s=newStuNode; cin>>s->num>>s->math>>s->eng>>s->yuwen; s->sum=s->math+s->eng+s->yuwen; s->nextstu=p->nextstu; p->nextstu=s; p=p->nextstu; } if(p==NULL)//判断学生信息表是否创建成功 { cout<<"创建失败请重新创建! "< CreatSinfo(); } } voidSInfo: : ShowInfo()//遍历输出 { StuNode*p; cout<<"学号"<<'\t'<<"数学"<<'\t'<<"英语"<<'\t'<<"语文"<<'\t'<<"总分"< for(p=StuListHead->nextstu;p! =NULL;p=p->nextstu) { cout< } } voidSInfo: : StuInsert(intsnum,intsmath,intseng,intsyuwen)//插入学生信息(头插法) { StuNode*s,*p; s=newStuNode; s->num=snum; s->math=smath; s->eng=seng; s->yuwen=syuwen; s->sum=s->math+s->eng+s->yuwen; p=StuListHead; s->nextstu=p->nextstu; p->nextstu=s; } voidSInfo: : StuDelete(intsnum) { StuNode*p,*ptemp; p=StuListHead; ptemp=p; while(p->nextstu&&p->num! =snum)//循环终止条件为p->nextstu不为空而且没有找到相应学号的学生 { ptemp=p; p=p->nextstu; } if(p->num==snum) { ptemp->nextstu=p->nextstu; deletep; } else { cout<<"未找到该学生信息! "< } } StuNode*SInfo: : StuFind(intsnum) { StuNode*p; p=StuListHead->nextstu; while(p->nextstu&&p->num! =snum)//循环终止条件为p->nextstu不为空而且没有找到相应学号的学生 { p=p->nextstu; } if(p->num==snum) { returnp; } else { cout<<"未找到该学生信息! "< returnNULL; } } voidSInfo: : StuModify(intsnum,intsmath,intseng,intsyuwen) { StuNode*ItemStu=StuFind(snum);//直接调用查找函数 if(ItemStu! =NULL) { ItemStu->math=smath; ItemStu->num=snum; ItemStu->math=smath; ItemStu->eng=seng; ItemStu->yuwen=syuwen; ItemStu->sum=ItemStu->math+ItemStu->eng+ItemStu->yuwen; } } voidSInfo: : StuCopy(StuNode*ptemp,StuNode*p)//拷贝学生信息(将p的信息拷贝到ptemp中) { if(p==NULL) { cout<<"拷贝目标为空! "< } else { ptemp->num=p->num; ptemp->math=p->math; ptemp->eng=p->eng; ptemp->yuwen=p->yuwen; ptemp->sum=p->sum; //ptemp->nextstu=p->nextstu;//只是信息拷贝,next不能拷贝否则信息丢失 } } voidSInfo: : StuSort(charch)//根据总分排序 { if(ch=='>') { for(StuNode*p=StuListHead->nextstu;p! =NULL;p=p->nextstu) { for(StuNode*q=StuListHead->nextstu;q! =NULL;q=q->nextstu) { if(p->sum>q->sum) { StuNode*ptemp=newStuNode; StuCopy(ptemp,p); StuCopy(p,q); StuCopy(q,ptemp); } } } } elseif(ch=='<') { for(StuNode*p=StuListHead->nextstu;p! =NULL;p=p->nextstu) { for(StuNode*q=StuListHead->nextstu;q! =NULL;q=q->nextstu) { if(p->sum { StuNode*ptemp=newStuNode; StuCopy(ptemp,p); StuCopy(p,q); StuCopy(q,ptemp); } } } } elseif(ch=='o') { for(StuNode*p=StuListHead->nextstu;p! =NULL;p=p->nextstu) { for(StuNode*q=StuListHead->nextstu;q! =NULL;q=q->nextstu) { if(p->num { StuNode*ptemp=newStuNode; StuCopy(ptemp,p); StuCopy(p,q); StuCopy(q,ptemp); } } } } else { cout<<"排序条件出错! "< } } voidSInfo: : StuClassfy()//根据学生总分分类 { intgrade[5]={0}; StuNode*p=StuListHead->nextstu; while(p! =NULL) { if(89 { grade[0]++; } elseif(79 { grade[1]++; } elseif(69 { grade[2]++; } elseif(59 { grade[3]++; } else { grade[4]++; } p=p->nextstu; } cout<<"A"<<'\t'<<"B"<<'\t'<<"C"<<'\t'<<"D"<<'\t'<<"E"< for(inti=0;i<5;i++) { cout< } cout< } voidSInfo: : StuRead()//从文件读入数据 { StuNode*p; p=StuListHead; ifstreamin("StudentList.txt"); if(! in){cout<<"没有学生信息,请先录入学生信息! "< while(! in.eof()) { intnum,math,eng,yuwen,sum; in>>num>>math>>eng>>yuwen>>sum; StuInsert(num,math,eng,yuwen); } } voidSInfo: : StuSave()//保存学生信息 { StuNode*p; p=StuListHead->nextstu; ofstreamout("StudentList.txt"); if(! out){cout<<"不能打开文件! "< while(p! =NULL) { out< p=p->nextstu; } } voidSInfo: : StuQuit()//学生信息写入文件 { charchoice; cout<<"是否保存学生信息: ? (Y/N)"; cin>>choice; if(choice=='y'||choice=='Y') { StuSave(); cout<<"学生信息已保存..."< } } 2.源程序 #include #include"SInfo.h" #include usingnamespacestd; intmain() { Systemdoor(); intx=100,pnum,pmath,peng,pyuwen; StuNode*pfind; SInfostu; cout<<"******************************************"< cout<<"******************************************"< cout<<"************"< cout<<"******欢迎进入学生信息管理系统******"< cout<<"************"< cout<<"******************************************"< cout<<"******************************************"< while(x! =0) { system("pause"); system("cls");//清屏 ShowMenu(); cin>>x; switch(x) { case0: stu.StuQuit(); break; case1: stu.StuRead(); cout<<"读入学生信息表: "< stu.ShowInfo(); break; case2: stu.CreatSinfo(); cout<<"请核对输入学生信息! "< stu.ShowInfo(); break; case3: cout<<"请输入添加学生信息: "; cin>>pnum>>pmath>>peng>>pyuwen; stu.StuInsert(pnum,pmath,peng,pyuwen); cout<<"更新学生信息表..."< stu.ShowInfo(); break; case4: cout<<"请输入要删除学生学号: "; cin>>pnum; stu.StuDelete(pnum); cout<<"更新学生信息表..."< stu.ShowInfo(); break; case5: cout<<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)