数据结构课程设计-学生管理系统链表.doc_第1页
数据结构课程设计-学生管理系统链表.doc_第2页
数据结构课程设计-学生管理系统链表.doc_第3页
数据结构课程设计-学生管理系统链表.doc_第4页
数据结构课程设计-学生管理系统链表.doc_第5页
免费预览已结束,剩余12页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京建筑工程学院 电信学院 计算机专业 数据结构课程设计任务书、题目:学生信息管理系统、设计内容及要求: 内容:完成简单的学生信息管理系统要求:(1) 学生信息包括:学号、姓名、平时成绩、期末考试成绩;(2) 用单链表存放学生信息;(3) 实现简单的菜单调用;(4) 程序的功能包括:学生信息链表的建立;学生信息的插入;学生信息的查询;学生信息的修改;学生信息的删除;学生信息的输出。编写算法,编码实现基本要求。3.设计时间:6 月27 日7 月1 号目 录一、 需求分析- 3 二、 概要设计-4 三、 详细设计-6 四、 调试分析- 14 五、 用户使用说明- 14 六、 测试结果- 17 七、 附录(略)- 17 一 需求分析分析课程设计任务书,本次数据结构课程设计的任务是利用数据结构中所学的相关知识编程设计实现一个学生信息管理系统,使该系统可以方便的查询学生的各项信息和方便管理。根据任务书中的第五条要求,为来使用者方便使用。需给出输入、插入、查询、修改、显示等功能。根据上面的需求分析,画出程序的功能模块图大致如下:系统设计流程图主页面建立链表查询显示信息退出修改插入按学号按姓名改姓名改学号改平时成绩改期末成绩不修改 退出二、 概要设计根据上面所述的需求分析,结合我们学过的数据结构知识,要想在计算机中储存学生的信息,可以使用顺序存储和链式存储两种数据类型下面给出本程序用到抽象数据类型定义:adt list数据对象:d=ai|aielemset,i=1,2,,n,n0 数据关系:r1=|ai-1,aid,i=2,n基本操作p:initlist(&l);操作结果:构造一个空的线性表l。destrolist(&l);初始条件:线性表l已存在。操作结果:销毁线性表l。clearlist(l);初始条件:线性表l已存在。操作结果:将l重置为空。listempty(l);初始条件:线性表已存在。操作结果:若l为空表,则返回ture,否则返回false。listlength(l);初始条件:线性表l已存在。操作结果:返回l中数据元素的个数。getelem(l,i,&e);初始条件:线性表l已存在,1ilistlength(l)。操作结果:用e返回中第i个数据元素的值。locateelem(l,e,compare());初始条件:线性表l已存在,compare()是数据元素判定函数。操作结果:返回中第1个与满足关系的数据元素的位序。若这样的数据元素不存在,则返回值为0。priorelem(l,cur_e,&pre_e)初始条件:线性表l已存在。操作结果:若cur_e是l的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义。nextelem(l,cur_e,&next_e)初始条件:线性表l已存在。操作结果:若cur_e是l的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无定义。listinsert(&l,i,e)初始条件:线性表l已存在,1ilistlength(l)+1。操作结果:在l中第i个位置之前插入新的数据元素e,l的长度加1。listdelete(&l,i,&e)初始条件:线性表l已存在且非空,1ilistlength(l)。操作结果:删除l的第i个数据元素,并用e返回其值,l的长度减1。listtraverse(l,visit())初始条件:线性表l已存在。操作结果:依次对l的每一个数据元素调用函数visit()。一旦visit()失败,则操作失败。adt list除了上述定义的一些基本操作外,为了实现任务书中的相应功能,还要设计如下一些函数:void createlist(sequenlist*p1)void printlist(sequenlist *head)void insert(sequenlist *l,int i)sequenlist *findlist(sequenlist *l)void devise(sequenlist *l)void change(sequenlist *l)void delnode(sequenlist *l)函数调用程序:mainprintlistfindlistchangedelnodecreatelistdevise三、 详细设计使用单向链表指针,能够管理简单的学生信息,是一个设计较为人性化的操作系统。首先,建立学生的信息库。然后根据提示,选择“录入学生信息的个数,依次录入”。若选择继续操作,则会出现菜单栏,可以选择进行学生信息的插入,查询,修改,删除,显示等操作和系统的退出。否则,退出操作程序。根据上面的概要设计,首先要写出数据存储结构的类型定义。系统由头文件名,一个结构体,八个自定义函数和一个主函数构成1系统的总体结构定义如下:1)头文件名:#include #include /包含字符串的比较函数strcmp#include#define len sizeof(struct student)2)结构体:typedef struct student char num8;/*学号*/ char name9;/*姓名*/ float g;/*平时成绩*/ float s;/*期末成绩*/ struct student *next;sequenlist;3)八个自定义函数:int menu()/提供菜单选项,供用户选择各个功能模块void createlist(sequenlist*p1) /建立学生的信息库void printlist(sequenlist *head) /显示所有学生信息void insert(sequenlist *l,int i) /插入学生信息sequenlist *findlist(sequenlist *l) /查询学生信息void devise(sequenlist *l)/修改学生信息子函数void change(sequenlist *l)/修改学生信息void delnode(sequenlist *l) /删除学生信息4)主函数:void main()/将各函数组合成一个有机的整体,实现各个函数的调用sequenlist *p1,*p;int i; while(1) switch(menu_select() case 1: printf(*n); printf( 学生信息线性表的建立 n); printf(*n); p1=(sequenlist *)malloc(len); createlist(p1); break case 2: printf(*n); printf(添加学生信息n); printf(*n); printf(请输入要插入的位置:n); scanf(%d,&i); printf(i=%dn,i); printf(请输入要插入学生的信息n); insert(p1,i); break; case 3: printf(*n); printf(查询学生信息n); printf(*n); p=findlist(p1); if(p!=null) printf(您要查的学生为:n学号 姓名 平时成绩 期末成绩n); printf(-n); printf(%s,%s,%f,%fn,p-num,p-name,p-g,p-s);printf(-n); else printf(没有您要查询的学生信息!); break;case 4: printf(*n); printf(修改学生信息n); printf(*n); change(p1); break; case 5: printf(*n); printf(删除学生信息n); printf(*n); delnode(p1); break;case 6: printf(*n); printf(输出所有学生信息n); printf(*n); printlist(p1); break;case 0:printf(退出!n);getchar();return;2各功能模块的设计1)结构体模块:struct student,存储学生多方面的信息,是单向链表的建立和各个函数的运行的基本元素2)菜单模块:int menu_select ()函数,用大量的字符拼图组合,输出形成一个美观实用的菜单表格目录,运用case语句,提示用户输入的数字是否有误,若错误,则显示“输入错误,请重选0 - 6”,再次输入,最后把输入数值返回给主函数。int menu_select()int sn;printf(n 学生信息管理系统n);printf(=n);printf( 1.学生信息线性表的建立n);printf( 2.插 入 学 生 信 息n);printf( 3.查 询 学 生 信 息n);printf( 4.修 改 学 生 信 息n);printf( 5.删 除 学 生 信 息n);printf( 6.输 出 所有学生信息n);printf( 0.退 出 管 理 系 统n);printf(=n);printf(请选择0-6:n);for(;)scanf(%d,&sn);if (sn6) printf(nt输入错误,重选0-6n);else break;return sn;3)信息库的建立模块:void createlist(sequenlist*p1)函数,运用循环结构和二级指针和一级指针之间的地址值和数据值的相互赋予,新的存储空间的开辟和释放,协助完成了单链表的学生信息的存储。void createlist(sequenlist*p1)/ 信息库的建立int n,i,j=0;sequenlist *p2;printf(有几位学生?请输入:n);scanf(%d,&n);printf(以下请输入这%d位学生的信息:n,n);for(i=1;inum,p2-name,&p2-g,&p2-s); p1-next=p2; p1=p2;p1-next=null;4)学生信息的插入模块:void insert(sequenlist *l,int i)函数,新建指针变量*s,将新的学生信息插入单向链表中,形成新的学生信息数据库。void insert(sequenlist *l,int i) sequenlist * p=l,*s;int j=1;while(p&jnext; +j;s=(sequenlist *)malloc(len);scanf(%s %s %f %f,s-num,s-name,&s-g,&s-s);s-next=p-next;p-next=s;5)学生信息的查询模块:sequenlist *findlist(sequenlist *l)函数,用if等条件语句,实现“1.按学号查询;2.按姓名查询”两种查询方式,接着运用while循环,核对有无该生信息,既而显示该生的所有信息或显示“无该生信息!”等。sequenlist *findlist(sequenlist *l) /学生信息的查询sequenlist *p=l-next;char num8;char name9;int xz;printf(=n);printf(1、按学号查询n);printf(2、按姓名查询n);printf(=n);printf( 请选择: );scanf(%d,&xz);if (xz=1) printf(请输入要查找学生的学号:); scanf(%s,num); while(p!=null&strcmp(p-num,num)!=0)p=p-next; if(p=null)printf(没有要找的学生n);return(null); else return(p); else if (xz=2) printf(请输入要查找学生的姓名:); scanf(%s,name); while(p!=null&strcmp(p-name,name)!=0)p=p-next; if(p=null)printf(没有要找的学生n); return(null); else return(p);6)学生信息的删除模块:void delnode(sequenlist *l)函数,用了对学号查询方式和核对有无该生信息,既而删除该生的所有信息或者显示“没有要删除的信息!”等。void delnode(sequenlist *l)char num8;sequenlist * p1,*p2,*head;printf(请输入要删除的结点numn);scanf(%s,num);p1=l-next;head=l-next;while(strcmp(p1-num,num)!=0&p1-next!=null)p2=p1;p1=p1-next;if(strcmp(p1-num,num)=0)if(p1=head)l-next=p1-next;else p2-next=p1-next;free(p1);printf(信息已删除n);else printf(没有要删除的信息!n);7)学生信息的修改模块:void change(sequenlist *l) 函数,用学号对该学生是否存在进行查找,如存在进入子函数void devise(sequenlist *l),运用switch(choice) case选择要修改的项,如学号、姓名、平时成绩、期末成绩等,如不需修改,则选择0退出修改子函数。如没找到学生,则输出“无学生记录!”void devise(sequenlist *l) sequenlist *head,*p;head=l-next; int choice; choice = -1; do printf(请选择您要修改的学生的信息内容:n); printf(+-+n); printf(| 姓名 请按 1 |n); printf(| 学号 请按 2 |n); printf(| 平时成绩 请按 3 |n); printf(| 期末成绩 请按 4 |n); printf(| 取消 请按 0 |n); printf(+-+n); printf(请输入您的选择:); scanf(%d, &choice); switch(choice) case 0: return; case 1: printf(请输入新姓名:); scanf(%s, p-name); break; case 2: printf(请输入新学号:); scanf(%s, p-num); break; case 3: printf(请输入新平时成绩:); scanf(%f, &p-g); break; case 4: printf(请输入新期末成绩 :); scanf(%f,&p-s); break; default: printf(n无效选项!); break; printf(修改成功!n) ;while(choice != 0);void change(sequenlist *l) sequenlist *p;p = l-next; char num; if(p = null) printf(无学生记录!n); return; printf(请输入您要修改的学生的学号:); scanf(%s, &num); if(p-num)devise(p);return;8)所有学生信息的显示模块:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论