云南大学软件学院数据结构实验7学生信息管理系统(共22页).doc

上传人:飞****2 文档编号:13740963 上传时间:2022-05-01 格式:DOC 页数:22 大小:277KB
返回 下载 相关 举报
云南大学软件学院数据结构实验7学生信息管理系统(共22页).doc_第1页
第1页 / 共22页
云南大学软件学院数据结构实验7学生信息管理系统(共22页).doc_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《云南大学软件学院数据结构实验7学生信息管理系统(共22页).doc》由会员分享,可在线阅读,更多相关《云南大学软件学院数据结构实验7学生信息管理系统(共22页).doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上云南大学软件学院 数据结构实验报告 (本实验项目方案受“教育部人才培养模式创新实验区(X)”项目资助) 实验难度: A B C 序号学号姓名成绩123指导教师 (签名)学期:2013秋季学期 任课教师: 张德海 实验题目: 学生信息管理系统 小 组 长: 联系电话: 电子邮件: 完成提交时间:2013年 12月17日数据结构实验成绩考核表 评分项目评分指标分值得分实验构思(10%)1. 实验目的明确52. 实验内容理解透彻、对实验所涉及到的知识点分析到位5实验设计(15%)1. 有对基本数据结构的抽象数据类型定义52. 实验方案设计完整,数据结构、算法选择合理 53.

2、算法结构和程序功能模块之间逻辑清晰、有相应的流程图5实验实现(25%)1. 代码编写规范、风格统一、注释清楚易读 52. 程序运行正常,测试结果正确153. 界面友好、易于操作、有较强的容错性5实验报告撰写(10%)1. 内容详实无缺漏,文字流畅、图表清楚52. 实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考5个人工作量(30%)1. 个人完成工作量152. 个人技术水平103. 团队合作精神5实验运作(10%)1. 有一定用户群52. 应用前景分析5综合得分: (满分100分)指导教师: 年 月 日评分项目评分指标分值得分实验构思(10%)1. 实验目的

3、明确52. 实验内容理解透彻、对实验所涉及到的知识点分析到位5实验设计(15%)1. 有对基本数据结构的抽象数据类型定义52. 实验方案设计完整,数据结构、算法选择合理 53.算法结构和程序功能模块之间逻辑清晰、有相应的流程图5实验实现(25%)1. 代码编写规范、风格统一、注释清楚易读 52. 程序运行正常,测试结果正确153. 界面友好、易于操作、有较强的容错性5实验报告撰写(10%)1. 内容详实无缺漏,文字流畅、图表清楚52. 实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考5个人工作量(30%)1. 个人完成工作量152. 个人技术水平103. 团

4、队合作精神5实验运作(10%)1. 有一定用户群52. 应用前景分析5综合得分: (满分100分)指导教师: 年 月 日评分项目评分指标分值得分实验构思(10%)1. 实验目的明确52. 实验内容理解透彻、对实验所涉及到的知识点分析到位5实验设计(15%)1. 有对基本数据结构的抽象数据类型定义52. 实验方案设计完整,数据结构、算法选择合理 53.算法结构和程序功能模块之间逻辑清晰、有相应的流程图5实验实现(25%)1. 代码编写规范、风格统一、注释清楚易读 52. 程序运行正常,测试结果正确153. 界面友好、易于操作、有较强的容错性5实验报告撰写(10%)1. 内容详实无缺漏,文字流畅、

5、图表清楚52. 实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考5个人工作量(30%)1. 个人完成工作量152. 个人技术水平103. 团队合作精神5实验运作(10%)1. 有一定用户群52. 应用前景分析5综合得分: (满分100分)指导教师: 年 月 日一、【实验构思(Conceive)】(10%)设计主要要求分别以电话号码和用户名为关键字建立哈希表,并实现查找功能。所以本设计的核心问题是如何解决散列的问题,由于结点的个数无法确认,并且如果采用线性探测法散列算法,删除结点会引起“信息丢失”的问题。所以采用链地址法散列算法。采用链地址法,当出现同义词冲突

6、时,使用链表结构把同义词链接在一起。 首先,解决的是定义链表结点,在链接地址法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用电话号码和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成。name8 、num11和address20都是char浮点型采用链地址法,其中的所有同义词构成一个单链表,再由一个表头结点指向这个单链表的第一个结点。这些表头结点组成一个一维数组,即哈希表。二、【实验设计(Design)】(20%)设计哈希表实现学生信息管理系统完成以下要求: (1)设每个记录有下列数据项:电话号码、用户名、地址; (2)从键盘输入各记录,分别以电话号码和用户名为关

7、键字建立哈希表; (3)采用再哈希法解决冲突; (4)查找并显示给定电话号码的记录; (5)查找并显示给定用户的记录。 具体思路为: (1)对于以号码为关键字的散列函数,是将十一个数字全部相加,然后对20求余。得到的数作为地址。对于以用户名为关键字的散列函数,是将所有字母的ASCLL码值相加,然后对20求余。 (2)要添加用户信息,即要有实现添加结点的功能函数,所以要设计一个必须包括一个输入结点信息、添加结点的函数; (3)要实现查找函数,则必须包括一个查找结点的函数; 另外还有一个必不可少的就是运行之后要有一个主菜单,即要设计一个主函数(4)最后,程序完成后要对程序进行编译调试,执行后要选择

8、数据进行测试, 三、【实现描述(Implement)】(30%)1 建立节点 struct node char name8,address20; char num11; node * next; ; typedef node* pnode; /可以为一个已有的数据类型声明多个别名 typedef node* mingzi; node *phone; node *nam; node *a; 2 哈希函数的定义 本程序要设计两个hash()函数,分别对应电话号码和用户名。对关键字进行模运算,将运算结果所得的余数作为关键字(或结点)的存储地址,方法如下:以电话号码为关键字建立哈希函数hash(cha

9、r num11)。以用户名为关键字建立哈希函数hash2(char name8)。利用强制类型转换,将用户名的每一个字母的ASCLL码值相加并且除以20后的余数。将计算出来的数作为该结点的地址赋给key2。 void hash(char num11); /以电话号码为关键字建立哈希函数 /哈希函数的主旨是将电话号码的十一位数字全部加起来 int i = 3; key=(int)num2; while(numi!=NULL) key+=(int)numi; i+; key=key%20; /利用强制类型转换,将用户名的每一个字母的ASCLL码值相加并且除以20后的余数 void hash2(ch

10、ar name8); /哈希函数 以用户名为关键字建立哈希函数 int i = 1; key2=(int)name0; while(namei!=NULL) key2+=(int)namei; i+; key2=key2%20; 3 哈希查找 想要实现查找功能,同样需要两个查找函数,无论以用户名还是以电话号码为关键字,首先,都需要利用hash函数来计算出地址。再通过比对,如果是以电话号码为关键字,比较其电话号码是否相同,如果相同则输出该结点的所有信息,如果以用户名为关键字,则比较用户名是否相同,如果相同则输出该结点的所有信息。如果找不到与之对应相同的,则输出“无此记录”。 void find(

11、char num11) ; /在以电话号码为关键字的哈希表中查找用户信息 4 流程图以学号为关键字的hash函数流程图以姓名为关键字的hash函数流程图四、【测试结果(Testing)】(10%) 1、添加记录2、查找记录3、姓名散列4、学号散列5、清空记录五、【实验总结】(10%)卢晨阳 :主要负责:程序算法的设计和程序实现,实验报告的部分撰写经验总结:1、我们定义了两个哈希函数,一个以学号为关键字,另一个以姓名ASCII之和求模之后的值为关键字。第一种是将学号从第二位开始逐一累加并将所得结果对30求模得哈希地址。第二种则是将姓名字符进行强制类型转换之后得ASCII码相加对30求模得哈希地址

12、。2、哈希表问题,在存储位置和关键字之间建立对应关系f,根据对应关系f找到定值K。若结构中存在关键字和定值K相等的记录,必定在f(K)的存储位置上,由此可以省去比较过程,直接找到所查记录。3、。由于长度无法确定,并且如果采用线性探测法散列算法,删除结点会引起“信息丢失”的问题,所以采用链地址法散列算法。采用链地址法,当出现同义词冲突时,可以使用链表结构把同义词链接在一起即同义词的存储地址不是散列表中其他的空地址。毛钰源 :主要负责:程序算法的部分改进和界面设计,部分接口的实现经验总结:1、哈希表的实现,其主要的精妙之处在于,重载了这个运算符,然后在判断哈希表是否为空时,初始化。2、在实验中虽然

13、使用得仍然是倒插入指针头的方法,但其始终保持着在散列的地址第一位。且在此次实验中,主要是要分清nHash与key二者的区别,前者是由后者通过HashKey()函数算出来的,但还是有一定的区别的。3、哈希表其实不难,考验的是我们的学习态度,独立思考问题,和解决问题的能力。把握这次机会大有收获。刘羽 :主要负责:程序部分算法的实现,数据测试和部分实验报告的撰写经验总结:1、在程序的重载的函数里,通过GetAssocAt()函数来判断KEY是滞相等,如果不等,则新关联一个到当前的哈希表内。否则,返回当前值。 2、我们定义有3个域的节点,这三个域分别为学号char num30,姓名char name3

14、0,地址char address30。这种类型的每个节点对应链表中的每个节点,其中电话号码和姓名可分别作关键字实现哈希表的创建。3、“哈希表问题”基本算法老师在课堂上有涉及过,但具体的还要靠自己去钻研。通过本次课程设计对哈希表问题有了一个比较全面的认识和了解。 六、【项目运作描述(Operate)】(10%)在运作部分没有图形界面,只能在DOS下面运行,虽然成本很低,但推广的价值意义不是很大。且此次程序仍然能够满足一些要求,比如哈希表的建立以及解决冲突问题,程序中查找也可以正常实现,是基本达到了实验的要求。七、【代码】(10%)#include #include #define NULL 0

15、unsigned int key; unsigned int key2; int *p; struct node char name8,address20; char num11; node * next; ; typedef node* pnode; typedef node* mingzi; node *phone; node *nam; node *a; void hash(char num11) int i = 3; key=(int)num2; while(numi!=NULL) key+=(int)numi; i+; key=key%20; void hash2(char name

16、8) int i = 1; key2=(int)name0; while(namei!=NULL) key2+=(int)namei; i+; key2=key2%20; printf(ndz=%dn,key2); node* input() node *temp; temp = new node; temp-next=NULL; printf(请输入姓名:); scanf(%s,temp-name); printf(输入地址:); scanf(%s,temp-address); printf(输入学号:); scanf(%s,temp-num); return temp; int apend

17、() node *newphone; node *newname; newphone=input(); newname=newphone; newphone-next=NULL; newname-next=NULL; hash(newphone-num); hash2(newname-name); newphone-next = phonekey-next; phonekey-next=newphone; newname-next = namkey2-next; namkey2-next=newname; return 0; void create() int i; phone=new pno

18、de20; for(i=0;inext=NULL; void create2() int i; nam=new mingzi20; for(i=0;inext=NULL; void list() int i; node *p; for(i=0;inext; while(p) printf(%s_%s_%sn,p-name,p-address,p-num); p=p-next; void list2() int i; node *p; for(i=0;inext; while(p) printf(%s_%s_%sn,p-name,p-address,p-num); p=p-next; void

19、find(char num11) hash(num); node *q=phonekey-next; while(q!= NULL) if(strcmp(num,q-num)=0) break; q=q-next; if(q) printf(%s_%s_%sn,q-name,q-address,q-num); else printf(无此记录n); void find2(char name8) hash2(name); node *q=namkey2-next; while(q!= NULL) if(strcmp(name,q-name)=0) break; q=q-next; if(q) p

20、rintf(%s_%s_%sn,q-name,q-address,q-num); else printf(无此记录n); void menu() /菜单 printf(ttt $哈希表实验$n);printf(ttt 1.添加记录n); printf(ttt 2.查找记录n); printf(ttt 3.姓名散列n); printf(ttt 4.学号散列n); printf(ttt 5.清空记录n); printf(ttt 6.退出系统n); int main() char num11; char name8; create(); create2() ; int sel; while(1) m

21、enu(); scanf(%d,&sel); if(sel=2) printf(7学号查询,8姓名查询n); int b; scanf(%d,&b); if(b=7) printf(请输入学号n); scanf(%s,num); printf(输出查找的信息n); find(num); else printf(请输入姓名n); scanf(%s,name); printf(输出查找的信息n); find2(name); if(sel=3) printf(姓名散列结果n); list2(); if(sel=1) apend(); if(sel=4) printf(学号散列结果n); list(); if(sel=5) printf(列表已清空n); create();create2(); if(sel=6) return 0; return 0; 专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁