单链表的应用-学生信息管理系统报告源代码.docx

上传人:小飞机 文档编号:2101026 上传时间:2023-01-10 格式:DOCX 页数:52 大小:336.97KB
返回 下载 相关 举报
单链表的应用-学生信息管理系统报告源代码.docx_第1页
第1页 / 共52页
单链表的应用-学生信息管理系统报告源代码.docx_第2页
第2页 / 共52页
单链表的应用-学生信息管理系统报告源代码.docx_第3页
第3页 / 共52页
单链表的应用-学生信息管理系统报告源代码.docx_第4页
第4页 / 共52页
单链表的应用-学生信息管理系统报告源代码.docx_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《单链表的应用-学生信息管理系统报告源代码.docx》由会员分享,可在线阅读,更多相关《单链表的应用-学生信息管理系统报告源代码.docx(52页珍藏版)》请在三一办公上搜索。

1、数据结构之单链表的应用西安交通大学城市学院2012数据结构课程设计报告单链表的应用曹春计算机科学与技术计算机001 西安交通大学城市学院数据结构课程设计报告书题目:学生信息管理系统的开发与设计专业:计算机科学与技术专业班级: 计算机001学号: 10030038姓名: 曹春指导教师: 吕雅荣开始日期:2012年6月02日完成日期:2012年6月10日总目录1 序言52 问题的分析和总体设计5 2.1 问题分析52.2 总体设计53 项目介绍53.1 具体实现方法63.2 ADT流程图 64 模块图64.1 登录模块74.2 录入学生信息模块74.3 插入学生信息模块84.4 删除学生信息模块8

2、4.5 修改学生信息模块84.6 查找学生信息模块84.7 学生简历输入模块84.8 退出模块95 模块划分、数据测试95.1 登录模块95.2 录入学生信息模块165.3 插入学生信息模块175.4 删除学生信息模块195.5 修改学生信息模块225.6 查找学生信息模块235.7 学生简历输入模块275.8 退出模块286 性能要求297 遇到的问题及解决方法308 总结和体会309 源代码311. 序言随着大二学习的知识的增多,数据结构和算法也逐渐接触,为了能够将课堂上的知识应用到实际,并在实际中加以深入特此以单链表的知识来创建学生信息管理系统。面对庞大的信息量需要有学生信息管理系统来提

3、高学生管理工作的效率。通过这样的系统可以做到信息的规范化管理、科学性统计和查询、修改、增加、删除等,从而减少管理方面的工作量。本系统主要应用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是计算学生各种信息进行日常管理,如查询、修改、增加、删除,另外还考虑到了学生选课、针对这些要求设计了学生信息管理系统。由于自己水平有限,其中还有很多东西不完善比如说,没有用到文件指针保存等等,而且由于时间有限自己想加入的功能,都未能添加,还请谅解!编者:曹春2.问题的分析和总体设计2.1问题的分析通过创建单链表,并运用其链式存储结构实现对学生管理系统的学生简历的添加、和更新(

4、增、删、改、查)操作,从而进一步了解单链表的基本操作。2.2总体设计新建立单链表,再通过c+语言实现对单链表的基本操作(增、删、改、查)并通过在编写过程中,对各个单链表的模块功能进行完善,以实现其功能更加稳定和全面!3.项目简介3.1. 具体实现方法通过c语言和c+语言实现单链表的创建和单链表功能函数的编写和完善!3.2. ADT流程图ADT sqlist数据对象:D=xuehao,xingming,xingbie,banji,phohe,address|均为字符串类型char xuehao10;char xingming 10;char xingbie5;char banji10;char

5、phohe10;char address10;数据关系:R=|ai,ai+1D,i=1,2,3,4,5.基本运算:init_sqlist(sqlist *&head)/初始化单链表,即构造一个表头节点fuzhi_wencha(sqlist *&head,int n)/尾插法赋值charu(sqlist *&head,char tem)/插入新的学生信息shanchu_sqlist(sqlist *&head)/删除已有学生信息xiugai_sqlist(sqlist *&head)/修改已有学生信息chazhao_xh(sqlist *&head,char tem)/按学号查找学生信息chaz

6、hao_xm(sqlist *&head,char tem)/按姓名查找学生信息display_sqlist(sqlist *&head)/显示所有学生的简历信息4.模块图4.1.登入模块登陆界面模块录入学生信息模块输出学生简历模块退出程序模块查找学生学信息模块修改学生信息模块插入学生信息模块删除学生信息模块4.2.录入信息管理模块录入学生信息学号电话家庭住址班级性别姓名4.3.插入学生信息模块插入学生信息学号电话家庭住址班级性别姓名4.4.删除学生信息模块删除学生信息按学号删除4.5.修改学生信息模块修改学生信息学号电话家庭住址班级性别姓名4.7.输出学生简历信息模块输出学生信息学号电话家庭

7、住址班级性别姓名4.8.退出模块退出程序谢谢使用!5.模块划分和数据测设5.1登录模块v 实现后的效果:v 代码设计:(主函数+菜单函数实现)主函数代码:int main()sqlist *student;/声明为一个单链表类型的指针menu(student);return 0;菜单函数代码:void menu(sqlist *&student)a:system(cls);system(color 1e);coutendlendlendl 3春3春3单3链3表3 =endl =33333333333333333=endl =1. 录入学生信息 =endl =2. 插入学生信息(按学号) =en

8、dl =3. 删除学生信息(按学号) =endl =4. 修改学生信息(按学号) =endl =5. 查找学生信息(按学号/姓名)=endl =6. 学生简历(全部学生) =endl =7. 退出程序 =endl =endl=endlendlendl;cout请选择:an;switch(n)case 1:system(color 2e);init_sqlist(student);cout单链表初始化成功!endl;coutl;fuzhi_wencha(student,l);coutendl尾插法录入学生信息成功!endl;system(pause);goto a;break;case 2:sy

9、stem(color 3e);cout请输入要插入的新生的简历的学生学号:tem;charu(student,tem);coutendl插入操作执行完毕!endl;system(pause);goto a;break;case 3:system(color 4e);if(sqlist_empty(student)/删除之前要先检查该单链表是否为空!cout该单链表中没有录入任何学生的的信息!endl;elseshanchu_sqlist(student);coutendl删除学生执行完毕!endl;system(pause);goto a;break;case 4:system(color 5

10、e);xiugai_sqlist(student);coutendl修改学生信息执行完毕!endlendl;system(pause);goto a;break;case 5:system(color 6e);b:sqlist *p;system(cls);cout444查4找4学4生4信4息444endl -endlendl1.按学号查找-endlendl2.按姓名查找-endlendl -endlendl2 2 2 2 2 2 2 2 2 2 2endl请选择:am;if(m=1)cout请输入要输出的学生简历的学生学号:tem;p=chazhao_xh(student,tem);if(p

11、)cout姓名为xingming的学生信息如下:endl;cout-xingming的学生简历-endlendl 1.学号: xuehaoendl 2.姓名: xingmingendl 3.性别: xingbieendl 4.班级: banjiendl 5.班级: phoheendl 6.家庭住址: addressendl;coutendl查找信息执行完毕!endl;else cout该学生系统中没有学号为tem的学生信息aaaaendl;system(pause);goto a;break;else if(m=2)cout请输入要输出的学生简历的学生姓名:tem1;q=chazhao_xm(

12、student,tem1);if(q)cout姓名为xingming的学生信息如下:endl;cout-xingming的学生简历-endlendl 1.学号: xuehaoendl 2.姓名: xingmingendl 3.性别: xingbieendl 4.班级: banjiendl 5.班级: phoheendl 6.家庭住址: addressendl;coutendl查找信息执行完毕!endl;else cout该学生系统中没有姓名为tem1的学生信息aaaendl;system(pause);goto a;break;elsecout选择有误!请重新选择!aaaaaaendl;sys

13、tem(pause);goto b;case 6:system(color 2b);if(sqlist_empty(student)coutendl该单链为空,即没有学生endl;elsedisplay_sqlist(student);cout该学生信息管理系统中共录入sqlist_length(student)个学生学生信息!endl;coutendl输出学生简历信息完毕!endl;system(pause);goto a;break;case 7:cout谢谢使用!endl;exit(0);break;default : coutendl选择有误,请重新选择!aaaaaaaendl;v 登

14、陆模块数据模块测试:n 测试各种常规选项:u 跳转到录入学生信息界面u 跳转到退出程序界面n 测试登陆界面越界:(比如选择10时,会显示)5.2录入学生信息模块v 代码设计(调用尾插法函数录入学生信息)尾插法代码:void fuzhi_wencha(sqlist *&head,int n)sqlist *s,*r;int i;r=head;for(i=0;in;i+)s=(sqlist *)malloc(sizeof(sqlist);/新建节点的空间申请c:system(cls);cout请输入第i+1个学生的学号:s-xuehao;if(chazhao_sqlist(head,s-xueha

15、o)=NULL)cout请输入第i+1个学生的姓名:endl;elsecout该系统中已存在此学号!请输入不同的学号!aaaaaas-xingming;cout请输入第i+1个学生的性别:s-xingbie;cout请输入第i+1个学生的电话:s-phohe;cout请输入第i+1个学生的班级:s-banji;cout请输入第i+1个学生的住址:s-address;s-next=NULL;/即将一个个数据域不为空值,指针域为空的结点一一插入到线性表的最后一个结点上r-next=s;r=s;/r指针前进,永远指向最后一个结点/插入一个节点成功coutendlendl;cout-endl;syst

16、em(pause);cout成功插入数据元素!next!=NULL)p=p-next;system(color 1c);cout请输入要插入的学生的学号:s-xuehao;cout请输入要插入的学生的姓名:s-xingming;cout请输入要插入的学生的性别:s-xingbie;cout请输入要插入的学生的电话:s-phohe;cout请输入要插入的学生的班级:s-banji;cout请输入要插入的学生的住址:s-address;s-next=NULL;p-next=s;elsecout该系统已经存在学号为tem的学生!请插入正确的学号!next;char tem10;cout请输入要删除的

17、学生的学号:tem;while(strcmp(p-xuehao,tem)!=0&p-next!=NULL)r=p;/r前进p=p-next;/p前进/只能检查第一个结点到n-1个结点的中是否有满足条件的学生,不能判断终端节点的学生是否满足条件if(strcmp(p-xuehao,tem)!=0)/检查终端节点是否为要删除的学生cout该学生信息管理中没有学号为tem的学生!next=p-next;free(p);p=r-next;v 测试删除模块n 测试常规删除:n 测试异常删除(如删除没有的学生例如3)5.5修改学生信息模块v 代码设计(调用修改函数)void xiugai_sqlist(s

18、qlist *&head)char tem10;sqlist *p=head-next;cout请输入被修改的学生的学号tem;while(p!=NULL&strcmp(p-xuehao,tem)!=0)/注意:条件换个顺序都会出问题的.p=p-next;if(p=NULL)cout该学生系统中没有学号为tem的学生endl;elsecout请输入新学号p-xuehao;cout请输入新的姓名:p-xingming;cout请输入新的性别:p-xingbie;cout请输入新的电话:p-phohe;cout请输入新的班级:p-banji;cout请输入新的住址:p-address;v 测试修改

19、模块:n 测试常规修改n 测试异常修改(比如修该不存在的学生信息如:2)5.6查找学生信息模块v 代码设计:(按学号,按姓名两种方式查找)sqlist* chazhao_sqlist(sqlist *&head,char tem)sqlist *p=head-next;while(p!=NULL&strcmp(p-xuehao,tem)!=0)/换个顺序就出问题.p=p-next;if(p!=NULL)return p;elsereturn p;v 测试查找模块:n 测试常规查找u 测试按学号查找u 测试按姓名查找:n 测试异常查找:(查找不存在的学生的信息)u 查找学号不存在的学生说明:当查

20、找的信息不存在时,就会报错!u 查找姓名不存在的学生说明:当查找的信息不存在时,就会报错!5.7学生简历输入模块v 代码设计(调用输入函数)void display_sqlist(sqlist *&head)sqlist *p=head-next;while(p!=NULL)cout姓名为xingming的学生简历如下:endlendl;cout-xingming的学生简历-endlendl 1.学号: xuehaoendl 2.姓名: xingmingendl 3.性别: xingbieendl 4.班级: banjiendl 5.电话: phoheendl 6.家庭住址: addresse

21、ndl-endlendlnext;v 检测学生简历输出模块n 测试常规输出(即系统中有学生的信息时) n 检测异常输入(即系统中无学生的信息时)5.8退出模块v 代码设计(exit(0)case 7:cout谢谢使用!endl;exit(0);break;6.性能要求6.1选择信息时,确保选择项不越界 6.2录入信息时,确保录入的学号不重复6.3插入信息时,确保插入的学号不存在6.4删除信息时,确保删除的学号已存在6.5修改信息时,确保修改的学号已存在6.6查找信息时,确保录入的学号或姓名已存在7.遇到的问题及解决方法6.1遇到的问题: 问题:刚刚开始编程序时,对于学号为char字符串类型时的

22、在、增删改查不知道如何判断解决方法:通过老师,和c语言程序设计等书籍了解到了字符串处理函数strcmp的作用并加以应用 问题:对于删除时的判断条件总是存在问题,比如,删除不了第一个结点,和最后一个结点等。解决方法:反复调试,理清思路。不断地修改从而变得完美!8.总结和体会 通过,这次的学生信息管理系统的设计过程,使我懂得,课堂上的知识,必须要通过实践练习才能够掌握,在练习中,对于具体问题,具体分析。在不断地编写过程中,自己也受益良多。在一遍一遍的调试过程中,自己感觉对计算机的处理方法越来越清晰(譬如:在逻辑表达式:“表达式1&表达式2”中,只要“表达式1”不满足逻辑,计算机不去判断“表达式2”

23、的真值)老师和同学也给了自己很大的帮助!自己也渐渐习惯了,一名程序员的编写习惯!总的来讲,受益良多!9.源代码#include#include#include#includeusing namespace std;/typedef struct nodechar xuehao30;char xingming 30;char xingbie5;char banji30;char phohe15;char address30;struct node *next;sqlist;/int sqlist_length(sqlist *&head)int num=0;sqlist *p=head-next

24、;while(p!=NULL)num+;p=p-next;return num;/int sqlist_empty(sqlist *&head)return (head-next=NULL);/void display_sqlist(sqlist *&head)sqlist *p=head-next;while(p!=NULL)cout姓名为xingming的学生简历如下:endlendl;cout-xingming的学生简历-endlendl 1.学号: xuehaoendl 2.姓名: xingmingendl 3.性别: xingbieendl 4.班级: banjiendl 5.电话:

25、 phoheendl 6.家庭住址: addressendl-endlendlnext;/sqlist* chazhao_xm(sqlist *&head,char tem)sqlist *p=head-next;while(p!=NULL&strcmp(p-xingming,tem)!=0)/换个顺序就出问题.p=p-next;if(p!=NULL)return p;elsereturn p;/sqlist* chazhao_xh(sqlist *&head,char tem)sqlist *p=head-next;while(p!=NULL&strcmp(p-xuehao,tem)!=0)

26、/换个顺序就出问题.p=p-next;if(p!=NULL)return p;elsereturn p;/void xiugai_sqlist(sqlist *&head)char tem10;sqlist *p=head-next;cout请输入被修改的学生的学号tem;while(p!=NULL&strcmp(p-xuehao,tem)!=0)/注意:条件换个顺序都会出问题的.p=p-next;if(p=NULL)cout该学生系统中没有学号为tem的学生endl;elsecout请输入新学号p-xuehao;cout请输入新的姓名:p-xingming;cout请输入新的性别:p-xin

27、gbie;cout请输入新的电话:p-phohe;cout请输入新的班级:p-banji;cout请输入新的住址:p-address;/void shanchu_sqlist(sqlist *&head)sqlist *p,*r;r=head;p=head-next;char tem10;cout请输入要删除的学生的学号:tem;while(strcmp(p-xuehao,tem)!=0&p-next!=NULL)r=p;/r前进p=p-next;/p前进/只能检查第一个结点到n-1个结点的中是否有满足条件的学生,不能判断终端节点的学生是否满足条件if(strcmp(p-xuehao,tem)!=0)/检查终端节点是否为要删除的学生cout该学生信息管理中没有学号为tem的学生!aaaaaanext=p-next;free(p);p=r-next;/void charu(sqlist *&head,char tem)sqlist *p,*s;s=(sqlist *)malloc(sizeof(sqlist);p=head;if(chazhao_xh(head,tem)=NULL)/验证学生管理系统是否已存在该生学号

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号