ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:465.25KB ,
资源ID:28415093      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28415093.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告附源代码学生管理系统.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计报告附源代码学生管理系统.docx

1、数据结构课程设计报告附源代码学生管理系统课程设计报告(一)一报告题目:学生管理系统二实验目的:1.熟悉线性链表,掌握线性链表的基本操作;2.练习求线性表中指定结点元素及修改指定结点的元素、求指定结点的前驱/后继元素、删除指定结点的元素、在指点节点位置插入元素等。3.通过文件保存和读取文件来提升文件操作的能力;4.C语言编程能力的提升训练。三实验环境:C语言编程,VC+6.0编程工具实现。四软件系统结构1.总体架构/层次:2.各功能的实现流程图:函数1:录入功能实现流程图函数4:删除功能实现流程图函数2:查找功能实现流程图函数3:删除功能实现流程图函数5:显示功能实现流程图函数6:文件装入功能实

2、现流程图函数7:文件保存功能实现流程图函数8:退出菜单功能实现流程图五软件功能设计:本软件是要编写一个学生管理系统,一个学生有很多相关数据,包括学号、姓名、性别、年龄、家庭住址、练习电话,因此我们利用线性链表的知识来编写程序,这是因为线性链表有很多优良的特点,因此该程序是对线性链表的应用练习。本软件利用线性链表的特点,结合文件相关函数的运用,它能够实现以下功能:1.用结点的数据域存放学生的学号、姓名、性别、年龄、家庭住址、练习电话;2.利用结点的指针域访问某个结点的前驱或者后继;3.录入新学生信息并按非降序插入到链表中;4.查找给定学号的结点学生信息;5.删除给定学号的结点学生信息;6.修改给

3、定学号的结点学生信息;7.显示全部结点的学生信息;8.将链表中的学生信息全部存入文件;9.将已存在的学生信息文件中的学生信息按学号非降序插入到当前链表中;六.源程序代码:#include#include#include#include#define NAMELEN 15#define ADDRLEN 10#define TELLEN 15#define OVERFLOW 0#define ERROR 0#define FALSE 0#define OK 1#define TRUE 1struct stud long num; char nameNAMELEN+1; char sex; int

4、age; char AddrADDRLEN+1; long rxsj; char lxfsTELLEN+1;typedef stud ElemType;/链表结点元素为结构体FILE *fp;typedef struct LNode ElemType data; LNode *next; *LinkList;/typedef LNode *;int InitList(LinkList &L) /操作结果:构造一个空的线性表L L=(LinkList )malloc(sizeof(LinkList);/产生头结点,并使L指向头结点 if(!L)/存储分配失败 exit(OVERFLOW); L-

5、next=NULL;/ 指针域为空 return OK; int ListTraverse(LinkList L,void(*vi)(ElemType)/条件:线性表已存在 /操作结果:一次对L的每个数据元素调用函数vi()。一旦vi()失败,则操作失败 LinkList p=L-next; while(p) vi(p-data); p=p-next; printf(n); return OK;void InsertAscend(LinkList L,ElemType e) /按学号非降序插入 LinkList q=L,p=L-next; while(p&e.nump-data.num) q=

6、p; p=p-next; q-next=(LinkList)malloc(sizeof(LNode);/插在q后 q-next-data=e; q-next-next=p;void ReadIn(stud &e)/由键盘输入结点信息 int a=1; printf(学号:); scanf(%ld,&e.num); printf(姓名(=%d个字符):,NAMELEN); scanf(%s,e.name);while(a) printf(性别(m:男 f:女):); scanf(%s,&e.sex); if(e.sex!=m&e.sex!=f)printf(格式不对,重输入:); else if

7、(e.sex=m|e.sex=f)a=0; ; printf(年龄:); scanf(%d,&e.age); printf(家庭住址(next; if(q&q-data.numnum) break; else if(q&q-data.num=num) return TRUE; else p=q; return FALSE; int DeleteElem(LinkList L,long num) /删除表中学号为num的元素,并返回TURE;如无此元素,则返回FALSE LinkList p,q; if(FindFromNum(L,num,p,q)/找到此结点,且q指向该结点,p指向该结点的前驱

8、 p-next=q-next; free(q); return TRUE; else return FALSE; void Modify(ElemType &e) char s50; printf( 学号 姓名 性别年龄 家庭住址入学时间 联系方式n); Print(e); printf(请输入新信息,不需要修改的直接按enter键保持原信息:nn); printf(请输入学号: n); gets(s); if(strlen(s) e.num=atol(s); printf(请输入姓名(=%d个字符):n,NAMELEN); gets(s); if(strlen(s) strcpy(e.nam

9、e,s); printf(请输入年龄:n); gets(s); if(strlen(s) e.age=atoi(s); printf(请输入性别(m:男 f:女):n); gets(s); if(strlen(s) e.sex=s0; printf(请输入家庭住址(data); printf(nn); printf(完成查找?Y/N n); scanf(%s,&s); if(s=Y|s=y)i=0; break; case 3: i=1; while(i) printf(请输入要删除学生的学号:); scanf(%ld,&num); getchar(); if(!FindFromNum(T,n

10、um,p,q) printf(无此学生不用删除n); printf(删除完毕?Y/N n); scanf(%s,&s); if(s=Y|s=y)i=0; else DeleteElem(T,num); printf(已删除!n); printf(删除完毕?Y/N n); scanf(%s,&s); if(s=Y|s=y)i=0; printf(nn); break; case 4:i=1; while(i) printf(请输入要修改的学生的学号:); scanf(%ld,&num); getchar(); if(!FindFromNum(T,num,p,q) printf(没有这个学生,不用

11、修改nn); printf(修改完毕?Y/N n); scanf(%s,&s); system(cls); if(s=Y|s=y)i=0; else system(cls); Modify(q-data); printf(修改完毕?Y/N n); scanf(%s,&s); system(cls); if(s=Y|s=y)i=0; printf(nn); break; case 5:if(T-next=NULL)printf(无记录!); elseprintf(学号 姓名 性别 年龄 家庭住址 入学时间 联系方式n); ListTraverse(T,Print); break; case 6:

12、 printf(请输入文件名:); scanf(%s,filename); getchar(); if(fopen(filename,rb)=NULL) printf(打开文件失败!n); else while(ReadFromFile(e) InsertAscend(T,e); printf(装入成功!n); fclose(fp); break; case 7: printf(请输入文件名:); scanf(%s, filename); getchar(); if(fp=fopen(filename,wb)=NULL) printf(打开文件失败!nn); else ListTraverse

13、(T,WriteToFile); printf(存入成功!n); fclose(fp); break; case 8: printf(确定退出吗?Y/N n); scanf(%s,&s); if(s=Y|s=y)t=0; else if(s=N|s=n)void main(); break; default: system(CLS); printf(没有这个功能,请重新选择!); printf(nn); void main(); 六实验结果与分析:1.录入功能:该功能实现良好,操作也较简单,程序运行时每一步都会有提示,如“请输入入学时间(格式如200709)”、“请输入性别(m:男 f:女)”

14、等,所以实现很方便。如果要改进,可以设置录入学生个数控制。以下是一些截图:2.查找功能:该功能实现良好,只需输入学号即可查找学生信息,但是只能利用学号查询,这是本功能的不足之处,也是改进的地方,可以增加利用姓名、家庭地址、电话号码查找等,运行时如图示:3.删除功能:该功能分为两步,第一步:查找;第二步:删除。因此结果也就有两种,一种:没有要删除的记录,提示“没有记录,不用删除”;另一种就是删除掉查找到的学生的所有信息并提示“删除成功”。该功能实现良好,但是也有改进的地方,比如:不能利用姓名来删除,可以实现无论是输入学号还是姓名,查找到后软件先显示该学生记录,由用户确认删除后再删除,这点还没有做

15、到,有待改进。下图为截图:4.修改功能:该功能比较完善,先要输入你要修改的学生的学号,查找到后输入信息等待用户确认,而且提示你不用修改的项可以按enter键保留,需要修改的则输入新数据即可,所以操作方便;若没查找到则提示你 “没有这个学生,不用修改”。然后会提示你继续修改还是返回,只需做出“Y/N”的选择即可。若选Y则退出,选择N则继续输入学号修改直至修改完成。自我觉得这个功能蛮不错的了,设计的还可以,至于改进的地方嘛,暂时还没想到。以下是运行时的截图:5.显示功能:显示功能相对前几个功能实现起来简单,所以没花费多大功夫来编写,但是为了视觉感受更好,或者说美观,显示时学号、姓名、性别、年龄、入

16、学时间、家庭住址和联系电话的显示间隔得恰当。我觉得这个功能改进的地方不多,如要改进也就是一些细节,没有更多算法或者方法的改进。以下是该功能运行时的软件截图:6.装入功能:本功能是对打开文件的应用,功能实现良好,操作时在链表不为空的前提下输入文件名,若存在该文件,则将文件中的学生信息按照学生学号非降序插入到当前链表中;若是没有该命名的文件或者文件打不开,则输出“打开文件失败”。本功能的最大缺点是只能在当前链表不是空表的情况下(即有学生信息时)才能把文件中学生信息按学号非降序插入到链表中;如果链表为空则不能,程序会结束。所以该功能需要改进,那就是使当前链表为空的时候也能直接从文件中读出数据,放入链

17、表中。以下分别是上述两种情况下的运行截图: 7.保存功能:该功能实现良好,保存没有任何问题。操作时也是先输入文件名,如果能打开/创建文件,则进行保存并输出“保存成功”;相反,如果打不开文件或者创建文件失败,则输出“打开文件失败”。具体功能运行时的图样如下:8.退出功能:该功能实现完善,改进空间不大。操作时,只要在提示确定是否退出时选择Y或N即可,Y即退出;N则返回主菜单;具体运行时截图如下:八实验总结该程序设计大概花费我大约4周的时间,设计过程中遇到了很多棘手的问题,但是通过上网查资料,上图书馆看书、查阅资料等途径这些问题全部解决了。虽然该程序不是完美的,但是它能充分实现课程设计要求的功能,所

18、以个人认为还是不错的。首先,通过该次课程设计,我对线性表有了更深入的认识,对线性链表的操作有了更熟练的掌握,包括对线性链表的创建、链表中删除结点、插入结点、链表元素按非降序排序、求结点前驱、求结点后继等。此外,对于C语言编程,之前文件操作相关部分一直是我的薄弱环节,这次课程设计是对C语言中文件操作的一次复习和应用,个人感觉现在对文件的操作能力有所提升。除此之外,该次课程设计由于时间相对充裕,所以我对软件中细节比如界面美观度、操作的方便程度还是多花了些功夫,虽然说不是全部功能都界面良好、操作方便,但至少部分是这样的。其次,完成该课程设计的过程也是一个让我坚定专心致志做事的信念的过程,同时也是一个

19、不断发现错误、纠正错误的过程。正是这样的一个过程,也才使我明白到底相关知识怎么用才对,同样可以达到目标的算法那种更简洁,实现更快。在整个过程中有时候感觉找不出错误,很着急甚至于很失望,但是毕竟还得做出来,所以就得锻炼自己静下心来,慢慢思考。每当一个新的思路出现,或者查到新的算法的时候感觉很值得,努力的结果得到回报。所以我一直用一位成功人士的语录“专注使我们更成功!”来激励自己。第三,通过自己看书,到网上搜索相关资料,到图书馆查资料等都能够提升个人学习的能力。对此,我深有感触,不懂的问题就得问,问同学,问老师,或者自己去查,但不能蒙混过关,需要用到的自己没学过的知识也得查。关于程序中修改功能我问

20、过同学、老师,后来老师的解答使我一下明白了自己的错误之处,所以询问和查找是非常重要的。通过询问、查找、浏览、学习就能掌握额外的知识,使其完全变为自己所拥有的知识,这样在以后的学习和人生道路上也就很轻松地运用了。当然,此次课设也暴露了我自己在编程方面的诸多不足之处。大概有以下一些方面。1出现错误时不从根源处找错误,比如起初在我设计过程中,运行删除功能后查找时就死循环,我一直在查找函数部分找错误,其实是链表初始化的时候就有些不完善,导致了删除后再查找时的错误。2对文件的运用还需练习,文件部分的操作容易出错。比如,运行保存文件功能时,系统提示我不能保持文件,空间不足,后面发现真正原因是打开文件方式不对。3缺乏改进的新思路,在以后的学习中还得继续改进。最后,对该次课设还有一点小建议,那就是希望能在最后进行小组讨论学习,将每个人的课设进行互相交换修改意见,学习别人的新算法或新思路。老师也可以给出指导。 (报告完)

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

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