C++课设利用单向链表实现简单的学生信息管理.docx
- 文档编号:3893488
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:22
- 大小:459.90KB
C++课设利用单向链表实现简单的学生信息管理.docx
《C++课设利用单向链表实现简单的学生信息管理.docx》由会员分享,可在线阅读,更多相关《C++课设利用单向链表实现简单的学生信息管理.docx(22页珍藏版)》请在冰豆网上搜索。
C++课设利用单向链表实现简单的学生信息管理
河北工业大学计算机软件技术基础(VC)课程设计报告
学院__管理学院_班级_管理C084_姓名__齐琪__学号__******__
成绩______
一、题目:
07.利用单向链表实现简单的学生信息管理(A)
二、设计思路
1、总体设计
1)程序的功能
使用单向链表指针,能够管理简单的学生信息,是一个设计较为人性化的操作系统。
首先,建立学生的信息库。
然后根据提示,选择“按1继续,按2退出”。
若选择继续操作,则会出现菜单栏,可以选择进行学生信息的插入,查询,删除,显示等操作和系统的退出。
操作完毕后,再次选择“按1继续,按2退出”……
否则,退出操作程序。
2)系统的总体结构
系统由头文件名,一个结构体,七个自定义函数和一个主函数构成。
头文件名:
#include
#include
(1)函数,课本的P123
#include
结构体:
structstudent
{
doublenum;
charname[20];
intscore;
student*next;//准备建立单链表,存储学生信息
};
七个自定义函数:
intmenu()//提供菜单选项,供用户选择各个功能模块
voidcreat(student)//建立学生的信息库
voidaddlist(student)//插入学生信息
voidfindlist(student)//查询学生信息
voiddellist(student)//删除学生信息
voidshowlist(student)//显示所有学生信息
voidout()//退出系统
主函数:
voidmain()//将各函数组合成一个有机的整体,实现各个函数的调用
2、各功能模块的设计
1)结构体模块:
structstudent,存储学生多方面的信息,是单向链表的建立和各个函数的运行的基本元素
2)菜单模块:
intmenu()函数,用大量的字符拼图组合,输出形成一个美观实用的菜单表格目录,运用if,else语句,提示用户输入的数字是否有误,若错误,则显示“输入错误,请重选0-4”,再次输入,最后把输入数值返回给主函数。
3)信息库的建立模块:
voidcreat(student**a)函数,运用二级指针和一级指针之间的地址值和数据值的相互赋予,新的存储空间的开辟和释放,协助完成了单链表的学生信息的存储。
4)学生信息的插入模块:
voidaddlist(student**a)函数,新建指针变量,将新的学生信息插入单向链表中,形成新的学生信息数据库。
5)学生信息的查询模块:
voidfindlist(student*a)函数,用if等条件语句,实现“1.按学号查询;2.按姓名查询”两种查询方式,接着运用while循环,核对有无该生信息,既而显示该生的所有信息或显示“无该生信息!
”等。
6)学生信息的删除模块:
voiddellist(student**a)函数,同样用了学号和姓名两种查询方式和核对有无该生信息,既而删除该生的所有信息或者显示“无该生信息!
”等。
7)所有学生信息的显示模块:
voidshowlist(student*a)函数,运用while循环,输出每个学生的所有信息。
8)系统的退出模块:
voidout()函数,运用return空值结束程序。
9)主函数模块:
voidmain(),运用switch,case实现因菜单函数intmenu()的不同的返回值而调用不同的功能函数,又用loop循环体简洁、直观的实现操作的循环进行。
3、设计中的主要困难及解决方案
1)困难1:
链表指针和多级指针及内存空间的开辟和释放等在程序中的多次运用,易出现很多漏洞,造成混乱而无法运行。
解决方案:
运用排除法,经过好几天的各个方面的排除,最后将问题彻底的清理。
2)困难2:
不知道怎样将菜单表格化,那样更直观。
解决方案:
使用大量的字符拼图组合,输出形成一个美观实用的菜单表格目录。
4、所设计的程序最终完成的功能
创建学生信息库
输入学生人数:
2
输入学生信息:
087267qiqi99
087268mushuai99
选择继续,输入:
1
输入:
5
输入错误,重新输入
选择显示所有学生信息,输入:
4
选择继续,输入:
1
选择退出系统,输入:
0
退出,输入:
2
三、程序清单
#include
#include
(1)函数,课本的P123
#include
structstudent
{
doublenum;
charname[20];
intscore;
student*next;
};
intmenu()
{
intn;
cout<<"\n";
cout<<"\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout<<"\t┃┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┃\n";
cout<<"\t┃┠学┨┠生┨┠信┨┠息┨┠管┨┠理┨┠系┨┠统┨┃\n";
cout<<"\t┃┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┃\n";
cout<<"\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
cout<<"\t┃1.插入学生信息┃\n";
cout<<"\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
cout<<"\t┃2.查询学生信息┃\n";
cout<<"\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
cout<<"\t┃3.删除学生信息┃\n";
cout<<"\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
cout<<"\t┃4.显示所有学生信息┃\n";
cout<<"\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
cout<<"\t┃0.退出系统┃\n";
cout<<"\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
cout<<"\t┃请选择0-4┃\n";
cout<<"\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
cout<<"\t┃¤ ╭⌒╮╭⌒╮┃\n";
cout<<"\t┃╱◥██◣╭╭⌒╮ 好好学习天天向上┃\n";
cout<<"\t┃︱田︱田田|╰---------------------------------- ┃\n";
cout<<"\t┃╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬┃\n";
cout<<"\t┃┃\n";
cout<<"\t┃程序设计:
管理C084齐琪┃\n";
cout<<"\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";//导航菜单
for(;;)
{
cin>>n;
if(n<0||n>4)
cout<<"\n输入错误,重选0-4:
\n";//超出输入范围
else
break;//跳出循环体
}
returnn;
}
voidcreat(student**a)//creat函数的定义,建立学生信息库
{
intn=0;
inti=0;
*a=NULL;
student*b;
cout<<"学生人数,请输入:
\n";
cin>>n;
cout< for(i=1;i<=n;i++) { b=newstudent;//分配内存空间 if(b==NULL) { cout<<"内存空间用完,退出! \n"; exit (1); } cout<<"请输入第"< (以空格隔开)\n"; cin>>b->num>>b->name>>b->score; cout< b->next=NULL;//建立链表 if(*a==NULL) *a=b; else { student*p=*a; while(p->next! =NULL) p=p->next; p->next=b;//新建结点 } } cout<<"储存完毕! \n"; //deleteb;//释放内存空间 } voidaddlist(student**a)//addlist函数的定义,插入学生信息 { student*b; b=newstudent;//分配内存空间 if(b==NULL) { cout<<"内存空间用完,退出! \n"; exit (1); } cout<<"请输入学生的学号,姓名,分数: (以空格隔开)\n"; cin>>b->num>>b->name>>b->score; b->next=NULL;//建立链表 if(*a==NULL) *a=b; else { student*p=*a;//新建指针变量 while(p->next! =NULL) p=p->next; p->next=b; } cout<<"插入完毕! \n"; //deleteb;//释放内存空间 } voidfindlist(student*a)//findlist函数的定义,查询学生信息 { intnum1; charname1[20]; inti=0,n; cout<<"===========================\n"; cout<<"1、按学号查询\n"; cout<<"2、按姓名查询\n"; cout<<"===========================\n"; cout<<"请选择: \n"; cin>>n; if(n==1) { cout<<"请输入要查找学生的学号: \n"; cin>>num1; while(a! =NULL) { if(num1==a->num)//核对学生信息 { cout< break; } else a=a->next; } if(a==NULL) cout<<"无该生信息! \n"; } elseif(n==2) { cout<<"请输入要查找学生的姓名: \n"; cin>>name1; while(a! =NULL) { if(strcmp(name1,a->name)==0)//核对学生信息 { cout< break; } else a=a->next; } if(a==NULL) cout<<"无该生信息! \n"; } } voiddellist(student**a)//dellist函数的定义,删除学生信息 { intnum1; charname1[20]; inti=0,n; student*cp=*a; student*ap=NULL; cout<<"===========================\n"; cout<<"1、按学号删除\n"; cout<<"2、按姓名删除\n"; cout<<"===========================\n"; cout<<"请选择: \n"; cin>>n; if(n==1) { cout<<"请输入要删除学生的学号: \n"; cin>>num1; if(cp==NULL) { cout<<"信息库为空,不能删除! \n"; return;//退出 } while(cp! =NULL) { i++;//节点数目增加 if(num1==cp->num)//核对学生信息 break; ap=cp; cp=cp->next; } if(cp==NULL) { cout<<"无该生信息! \n"; return;//退出 } if(i==1) *a=cp->next; else ap->next=cp->next; deletecp; cout<<"已经删除成功! \n"; } elseif(n==2) { cout<<"请输入要查找学生的姓名: \n"; cin>>name1; if(cp==NULL) { cout<<"信息库为空,不能删除! \n"; return;//退出 } while(cp! =NULL) { i++;//结点数目增加 if(strcmp(name1,cp->name)==0) break; ap=cp; cp=cp->next; } if(cp==NULL) { cout<<"无该生信息! "; return;//退出 } if(i==1) *a=cp->next; else ap->next=cp->next; deletecp; cout<<"已经删除成功! \n"; } } voidshowlist(student*a)//showlist函数的定义,显示所有学生信息 { if(a==NULL) cout<<"无信息,请先存储! \n"; while(a! =NULL) { cout< a=a->next; cout< } } voidout()//out函数的定义,退出系统 { cout<<"再见! "< return; } voidmain() { intc; student*a; a=NULL; cout<<"**************************************\n"; cout<<"学生信息库的建立\n"; cout<<"**************************************\n"; creat(&a); cout<<"\n按1继续,按2退出: \n"; cin>>c; if(c==1) gotoloop;//继续操作 else cout<<"再见! \n"; exit (1);//退出系统 loop: switch(menu())//建立循环体 { case1: cout<<"**************************************\n"; cout<<"插入学生信息\n"; cout<<"**************************************\n"; addlist(&a); break; case2: cout<<"**************************************\n"; cout<<"查询学生信息\n"; cout<<"**************************************\n"; findlist(a); break; case3: cout<<"**************************************\n"; cout<<"删除学生信息\n"; cout<<"**************************************\n"; dellist(&a); break; case4: cout<<"**************************************\n"; cout<<"显示所有学生信息\n"; cout<<"**************************************\n"; showlist(a); break; case0: cout<<"**************************************\n"; cout<<"退出系统\n"; cout<<"**************************************\n"; out(); break; } cout<<"\n按1继续,按2退出: \n"< cin>>c; if(c==1) gotoloop;//继续操作 else cout<<"再见! \n"; exit (1);//退出系统 } 四、对该设计题目有何更完善的方案 1、经过几天的编程、修改,较好地完成了课程设计。 但对于创新要求,经过多次的探索、尝试,但没有成功。 2、对课题提出更完善的方案: 应该介入“返回”和“修改学生信息”等功能模块,来实现返回上一级操作和修改学生的信息等更完善更人性化的操作。 五、收获及心得体会 1、通过本次的课程设计,我对于指针的运用,内存空间的开辟与释放,循环体及条件结构等的使用更为熟练,对于Vc的领域有了进一步的探究。 2、收获和心得体会: 经过好几天的奋战,我发现了之前学习Vc中的很多漏洞,学会了用它的语言和逻辑去考虑它,深化了对学习的态度。 我更深切地明白,任何事情的完成,都是一个任重道远的过程。 应以积极的态度,坚持不懈的追求,向着高处,向着远方。 日期: 2009年6月19日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 利用 单向 实现 简单 学生 信息管理
![提示](https://static.bdocx.com/images/bang_tan.gif)