算法与数据结构课程设计--通讯录

合集下载

数据结构课程设计报告---通讯录

数据结构课程设计报告---通讯录

数据结构课程设计报告---通讯录## 一、项目背景随着信息科技的发展,现代社会通讯录的应用越来越普遍,满足了人们信息的获取和管理的需求。

本项目的设计目的在于使用面向对象的程序思想,以面向对象的方式它来实现对通讯录信息的管理,进而提高信息的管理效率,提升信息的可靠性和安全性,最终达到为社会实施科学管理的目的。

## 二、系统需求1. 界面美观、格式明确,有良好的友好提示。

2. 系统稳定性强,能承受短时间的高并发量使用。

3. 提供友好的系统操作界面,对用户操作进行一定的约束,方便用户操作。

4.提供有效的联系人信息管理功能,能够实现增删改查等操作。

5.支持联系人信息备份和恢复,以及密码设置。

6.能够防止任何人未经授权而访问系统,或者磁盘信息的泄露。

此系统的设计主要分为三大部分,即界面层、业务逻辑层和数据存储层。

界面层通过展示信息给用户,实现数据的输入及输出;业务逻辑层主要处理用户请求,实现对数据的操作;数据存储层通过文件存储数据,实现对联系人信息的永久保存。

本项目采用C++语言,以链表数据结构为基础,将用户的联系人存储在链表中,充分利用其动态性,实现联系人的增删改查操作.同时,为了提供更进一步的使用,增加了密码功能,对未授权访问进行防止,以及数据备份和恢复功能。

## 四、功能实现1. 界面设计:首先,根据系统所需要的功能,采用控制台方式,以文字提示形式,配以整齐美观的各项参数和信息,实现各项功能。

2. 加密控制:本系统实现授权登陆加密功能,使系统对未经授权的用户隐藏信息,以确保系统的安全性。

3. 测试功能:功能的测试旨在确保程序的完整性和正确性。

4. 管理功能:本系统实现联系人信息的增删改查操作,在这几项功能的实现过程中,使用链表数据结构,更好的实现程序的功能。

5. 修改密码功能:此功能实现用户可以修改自己的密码,以确保用户自己可以比较安全的使用系统,不会受到他人的侵犯。

6. 加载和存储数据:通过使用文件存储,实现数据的存储和读取,以及备份功能,实现对数据永久保存。

数据结构课程设计(通讯录)

数据结构课程设计(通讯录)

数据结构课程设计(通讯录)
题目描述:
设计一个通讯录程序,实现以下功能:
1. 添加联系人信息
2. 删除联系人信息
3. 修改联系人信息
4. 查找联系人信息
5. 显示所有联系人信息
6. 退出程序
要求:
1. 使用链表作为数据结构存储联系人信息
2. 界面友好,操作简单方便
3. 能够防止重复添加联系人信息
设计思路:
1. 定义一个结构体Contact表示联系人信息,包括姓名、电话、邮箱等成员变量。

2. 定义一个链表结构体List表示联系人链表,包括头结点、
节点数量等成员变量。

3. 实现添加联系人信息函数,首先判断联系人是否存在,如果存在则提示用户,否则分配一个新的节点,并将联系人信息存储在节点中,将新节点插入链表中。

4. 实现删除联系人信息函数,首先判断联系人是否存在,如果不存在则提示用户,否则在链表中删除该节点。

5. 实现修改联系人信息函数,首先判断联系人是否存在,如果不存在则提示用户,否则修改节点中的信息。

6. 实现查找联系人信息函数,遍历链表查找是否有匹配姓名的联系人。

7. 实现显示所有联系人信息函数,遍历链表打印出所有联系人信息。

8. 在main函数中调用上述函数,根据用户输入的指令调用对应的函数,直到用户选择退出程序。

数据结构课程设计(通讯录制作)-参考模板

数据结构课程设计(通讯录制作)-参考模板

一.设计内容(通讯录)本系统应完成一下几方面的功能:1) 输入信息——enter();2) 显示信息———display( );3) 查找以姓名作为关键字———search( );4) 删除信息———delete( );5) 存盘———save ( );6) 装入———load( ) ;设计要求:1) 每条信息至包含:姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2) 作为一个完整的系统,应具有友好的界面和较强的容错能力二.设计思路通过visual c++6.0(用的是C语言)编写一个dos界面的控制台程序,该程序通过链表的操作,文件存储来实现通讯录的基本功能struct address{ /*定义结构*/char name[10]; /*姓名*/char street[50]; /*街道*/char city[10]; /*城市*/char state[15]; /*国家*/char eip[7]; /*邮编*/struct address *next; /*后继指针*/struct address *prior; /*前驱指针*/}链表的插入,删除来实现通讯录里的内容的插入删除当操作完成通过文件件来存储链表的信息,下次打开程序时,读取文件里的内容到内存中,放在链表,然后又可以对链表进行操作;在这里面,文件内容不可以在外部更改,只能通过读取到内存链表中,通过程序进行更改,然后再写入到文件,写入过程会覆盖上次的内容。

struct address *start; /*首结点*/struct address *last; /*尾结点*/struct address *find(char *); /*声明查找函数*/void enter(); /*函数声明*/void search(); /*查找,查找过程中调用find函数*/void save(); /*存盘,将链表信息保存到文件中*/void load(); /*导入,将文件内容导入到内存链表中*/void list(); /*显示当前链表中信息*/void ddelete(struct address **,struct address **);void insert(struct address *i,struct address **start,struct address **last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);三.详细设计1.主界面设计通过switch语句调用各种函数,实现各种操作。

数据结构课程设计报告---通讯录

数据结构课程设计报告---通讯录

数据结构课程设计报告专业:计算机科学与技术年级:课题名称:通讯录小组成员1:小组成员2:小组成员3:一、问题描述设计目的:用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识。

编写一个通讯录管理系统。

以把所学数据结构知识应用到实际软件开发中去。

设计内容:本系统应完成一下几方面的功能:1) 输入信息——enter();2) 显示信息———display( );3) 查找以姓名作为关键字———search( );4) 删除信息———delete( );5) 存盘———save ( );6) 装入———load( ) ;设计要求:1) 每条信息至包含:姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2) 作为一个完整的系统,应具有友好的界面和较强的容错能力3) 上机能正常运行,并写出课程设计报告二、需求分析A,添加:系统将提示用户输入新添加人员信息,输入到文件中,人员信息数据包括姓名(name),街道(street),城市(city),邮编(eip),国家(state).B,删除:首先由用户输入要删除的人员的姓名,然后调用删除函数,删除该人员的所有相关资料.C,显示所有人员信息:该功能将显示已经保存的所有人员的姓名,街道,城市,邮编及国家.D,查询:可由用户输入要查找的人员姓名,然后系统用查找函数查找,接着系统使用相关文件命令输出所查找的人员的全部信息.E,退出系统关闭通讯录管理系统.三、概要设计六个函数的实现:void enter(); 新添纪录void search(); 按姓名查询void display(); 显示void load(); 读取文件void save(); 写入文件void delete(); 删除四、详细设计通讯录管理系统功能说明图:通讯录管理系统数据结构及各模块分析:1.设计类、对象及基本数据类型:创建一个record类,它有五个数据成员:char name[20]; 姓名char street[20]; 街道char city[20]; 城市char eip[20]; 邮编char state[20]; 国家2.包含函数及功能如下:void mainmenu(); 主菜单void searchmenu(); 查找菜单void enter(); 新添纪录void search(); 按姓名查询void display(); 显示所有void load(); 读取文件void save(); 写入文件void delete(); 按姓名删除3.结构体:struct record{char street[20];char name[20];char city[20];char state[20];char eip[20];}student[500];struct slnode{record date;struct slnode *next;struct slnode *prior;};五、调试分析void load()//从文件导入{if((fp=fopen("student","rb"))==NULL) //打开文件进行读的操作{printf("\n\t\t通讯录文件不存在");if ((fp=fopen("student","wb"))==NULL)//打开文件进行读的操作{printf("\n\t\t建立失败");exit(0);}else{printf("\n\t\t通讯录文件已建立");printf("\n\t\t按任意键进入主菜单");getch(); //从键盘接收一个字符}return; //返回主函数的主菜单}exit(0);}fseek(fp,0,2); /*文件位置指针移动到文件末尾*/if (ftell(fp)>0) /*文件不为空*/{rewind(fp); /*文件位置指针移动到文件开始位置*/for (num=0;!feof(fp) && fread(&student[num],sizeof(struct record),1,fp);num++);.......getch();return;}●void mainmenu()//主菜单{char choic;system("cls");printf("\n\t\t***************欢迎进入通讯录系统***************");printf("\n\t\t******************1-新添纪录******************");printf("\n\t\t******************2-查找联系人****************");printf("\n\t\t******************3-删除联系人***************");printf("\n\t\t******************4-保存退出*****************");printf("\n\t\t******************5-不保存退出***************");printf("\n\t\t************************************************"); printf("\n\t\t请选择:");choic=getch();switch (choic){case '1':enter();break;case '2':searchmenu();break;case '3':delet();break;case '4':save();break;case '5':exit(0);default:mainmenu();}}●void searchmenu()//查询菜单{char choic;system("cls");printf("\n\t\t******************* 查询菜单*******************");printf("\n\t\t**************** 1-显示所有********************");printf("\n\t\t**************** 2-按姓名查询******************");printf("\n\t\t**************** 3-返回主菜单******************"); printf("\n\t\t************************************************"); printf("\n\t\t请选择:");choic=getch();switch (choic){case '1':display();break;case '2':search();break;case '3':mainmenu();break;}}void enter()//添加纪录{printf("\n\t\t**************** 请输入学生信息****************\n"); printf("\n\t\t姓名:");scanf("%s",&student[num].name);printf("\n\t\t街道:");scanf("%s",&student[num].street);printf("\n\t\t城市:");scanf("%s",&student[num].city);printf("\n\t\t输入邮编:");scanf("%s",&student[num].eip);printf("\n\t\t国家:");scanf("%s",&student[num].state);num++;listinsert();printf("\n\t\t是否继续添加?(Y/N):");if (getch()=='y')enter();return;}void display()//显示所有{int i;system("cls");if(num!=0){printf("\n\t\t*************** 以下为通讯录所有信息************");for (i=0;i<num;i++){printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t街道:%s",student[i].street);printf("\n\t\t城市:%s",student[i].city);printf("\n\t\t邮编:%s",student[i].eip);printf("\n\t\t国家:%s",student[i].state);printf("\t\t");if (i+1<num){printf("\n\t\t__________________________");// system("pause");}}printf("\n\t\t************************************************"); }elseprintf("\n\t\t通讯录中无任何纪录");printf("\n\t\t按任意键返回主菜单:");getch();return;}void search()//查找联系人{int j=0,a=0;//j用来记录查找.......scanf("%s",name);for(int i=a;i<num;i++,p=p->next)//num用来表示联系人的个数{if(strcmp(name,p->next->)==0)//查找是否有该人,有则输出该点所有信息,并往下查找。

通讯录的制作数据结构课程设计

通讯录的制作数据结构课程设计

通讯录的制作数据结构课程设计一、引言随着互联网和移动设备的普及,通讯录的重要性日益凸显。

通讯录不仅是一个人与人之间联系的桥梁,也是个人和组织之间沟通的纽带。

在数据结构课程设计中,我们将探讨如何制作一个高效、易用且具备良好扩展性的通讯录。

二、通讯录的需求分析在设计通讯录时,我们需要考虑以下需求: 1. 支持添加、删除、修改联系人信息的功能; 2. 支持按姓名、电话号码等属性进行搜索的功能; 3. 支持导入、导出通讯录的功能; 4. 支持多用户共享的功能; 5. 支持通讯录的快速访问和响应;6. 支持对联系人信息进行分类和标记的功能。

三、通讯录的数据结构设计为了满足上述需求,我们需要设计一个合适的数据结构来存储通讯录信息。

一种常见的数据结构是哈希表(Hash Table)。

哈希表可以通过将联系人的属性(如姓名、电话号码)进行哈希运算,将其转换为一个唯一的索引,从而实现快速的插入、搜索和删除操作。

3.1 哈希函数的选择在设计哈希表时,选择合适的哈希函数十分关键。

一个好的哈希函数应具备以下特点: - 均匀性:能够将联系人的属性均匀地映射到哈希表的槽位上,避免出现冲突; - 快速性:计算哈希值的过程应尽量简单、高效; - 低冲突率:尽可能避免多个联系人映射到同一个槽位的情况。

3.2 哈希表的实现我们可以使用数组来表示哈希表的槽位,每个槽位存储一个链表。

链表的节点包含联系人的信息。

当发生冲突时,我们可以使用链表来解决。

3.3 哈希表的性能分析哈希表在理想情况下可以达到常数级的时间复杂度,但在最坏情况下可能会退化为线性时间复杂度。

为了降低冲突率,我们可以使用一些解决冲突的技术,如链地址法、开放地址法等。

四、通讯录的功能实现在通讯录中,我们需要实现添加、删除、修改联系人信息的功能,以及按属性进行搜索等功能。

4.1 添加联系人当用户需要添加一个联系人时,我们首先需要计算联系人的哈希值,并找到对应的槽位。

然后将联系人的信息插入到链表的头部。

数据结构课程设计通讯录管理系统报告

数据结构课程设计通讯录管理系统报告

数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。

本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。

功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。

链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。

在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。

算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。

查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。

删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。

更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。

系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。

总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。

在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。

通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。

数据结构课程设计通讯录的制作

数据结构课程设计通讯录的制作

数据结构课程设计通讯录的制作一、引言二、需求分析1. 功能需求2. 性能需求3. 安全需求三、设计思路1. 数据结构选择2. 界面设计四、系统功能模块设计与实现1. 添加联系人模块2. 删除联系人模块3. 修改联系人模块4. 查询联系人模块五、系统性能测试与优化六、安全性测试与优化七、总结一、引言通讯录是我们日常生活中必不可少的工具之一,它可以帮助我们轻松地管理和查找联系人的信息。

本次课程设计旨在通过数据结构的应用,实现一个简单易用的通讯录管理系统。

二、需求分析1. 功能需求本系统需要实现以下功能:(1)添加联系人:可添加新的联系人信息,包括姓名、电话号码等;(2)删除联系人:可删除已有的联系人信息;(3)修改联系人:可修改已有的联系人信息;(4)查询联系人:可根据姓名或电话号码等关键字查询已有的联系人信息。

2. 性能需求本系统需要满足以下性能需求:(1)快速响应:用户操作时,系统需要快速响应,避免出现卡顿等情况;(2)稳定性:系统需要保持稳定,避免出现崩溃等情况;(3)易用性:系统需要易于使用,用户可以轻松地完成各项操作。

3. 安全需求本系统需要满足以下安全需求:(1)用户身份验证:用户在登录时需要进行身份验证,确保只有授权用户才能使用该系统;(2)数据隐私保护:系统需要对用户的数据进行加密处理,确保用户的隐私得到保护。

三、设计思路1. 数据结构选择本系统采用链表作为主要的数据结构。

链表具有插入、删除等操作效率高的优点,可以很好地满足通讯录管理中添加、删除联系人等操作的需求。

2. 界面设计本系统采用图形界面设计,界面简洁明了,易于操作。

主要界面包括登录界面、主界面和添加/修改联系人界面等。

四、系统功能模块设计与实现1. 添加联系人模块(1)输入联系人信息;(2)将新联系人信息插入链表中。

2. 删除联系人模块(1)输入待删除联系人姓名或电话号码等关键字;(2)查找并删除相应节点。

3. 修改联系人模块(1)输入待修改联系人姓名或电话号码等关键字;(2)查找相应节点;(3)修改节点信息。

数据结构课程设计报告--通讯录的制作

数据结构课程设计报告--通讯录的制作

山东理工大学计算机学院课程设计(数据结构)班级姓名学号指导教师二○一一年一月二十日课程设计任务书及成绩评定课题名称数据结构Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2、设计题目要求:通讯录的制作设计目的:用〈〈数据结构〉〉中的双向链表作数据结构,结合C/C++语言基本知识。

编写一个通讯录管理系统。

以把所学数据结构知识应用到实际软件开发中去。

设计内容:本系统应完成一下几方面的功能:输入信息——enter();显示信息———display( );查找以姓名作为关键字———search( );删除信息———delete( );存盘———save ( );装入———load( ) ;设计要求:1) 每条信息至包含:姓名(NAME )街道(STREET)城市(CITY)邮编(ZIP)国家(STATE)几项。

2) 作为一个完整的系统,应具有友好的界面和较强的容错能力。

3) 上机能正常运行,并写出课程设计报告。

Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一一年一月二十一日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计 (2)第四章详细设计 (5)第五章运行与测试 (16)第六章总结与心得 (22)参考文献 (24)第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统
数据结构课程设计中的通讯录管理系统可以涉及到以下几个方面的知识点:
1. 数据结构:通讯录管理系统中需要使用到的数据结构包括数组、链表、哈希表等。

其中,数组用于存储通讯录中的人员信息,链表用于存储联系人信息,哈希表用于实现快速查找功能。

2. 算法:通讯录管理系统中需要使用到的算法包括查找算法、排序算法、动态规划算法等。

其中,查找算法用于实现快速查找联系人功能,排序算法用于实现通讯录的排序功能,动态规划算法用于实现最长公共子序列问题等。

3. 数据库:通讯录管理系统需要使用到数据库来存储通讯录中的数据。

需要掌握关系型数据库的设计和操作,包括数据表的设计、SQL 语句的编写等。

4. 界面设计:通讯录管理系统需要有友好的用户界面,需要进行界面设计和开发,包括前端技术的使用,如HTML、CSS和JavaScript等。

5. 系统测试:通讯录管理系统需要进行系统测试,包括功能测试、性
能测试等,确保系统能够正常运行并满足用户需求。

通过设计和实现通讯录管理系统,可以锻炼学生对数据结构和算法的理解和应用能力,同时还能提高学生的编程能力和团队合作能力。

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统一、系统需求分析通讯录管理系统的主要目标是提供一个方便、高效的方式来管理联系人信息。

具体需求包括:1、能够添加联系人,包括姓名、电话号码、电子邮件、地址等基本信息。

2、可以对联系人信息进行修改和删除操作。

3、支持按照姓名、电话号码等关键字进行快速查找。

4、能够以列表形式展示所有联系人的信息。

二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储联系人信息。

考虑到联系人信息的多样性和动态性,链表是一个不错的选择。

链表可以方便地进行插入、删除和修改操作,并且能够灵活地调整存储空间。

另外,为了提高查找效率,我们可以结合使用哈希表。

通过将联系人的关键信息(如姓名或电话号码)进行哈希运算,快速定位到对应的联系人节点。

三、系统功能实现1、添加联系人功能当用户选择添加联系人时,系统会提示用户输入联系人的各项信息。

这些信息被封装成一个结构体,并通过链表的插入操作添加到链表中。

同时,将关键信息映射到哈希表中,以便后续快速查找。

2、修改联系人功能用户输入要修改的联系人的关键字,系统通过哈希表快速找到对应的联系人节点。

然后,提示用户输入修改后的信息,并更新链表和哈希表中的数据。

3、删除联系人功能与修改功能类似,通过关键字找到联系人节点,从链表和哈希表中删除相应的节点和信息。

4、查找联系人功能用户输入查找关键字,系统通过哈希表进行快速定位,如果找到匹配的联系人,则显示其详细信息。

5、展示所有联系人功能遍历链表,将所有联系人的信息以列表形式输出到屏幕上。

四、系统界面设计为了提高用户体验,系统设计了简洁直观的界面。

主界面提供了添加、修改、删除、查找和展示所有联系人等功能选项。

用户通过选择相应的选项,进入对应的操作流程。

五、代码实现示例以下是部分关键代码的示例:```c//联系人结构体typedef struct Contact {char name50;char phoneNumber20;char email50;char address100;struct Contact next;} Contact;//哈希表节点结构体typedef struct HashNode {char key50;Contact contact;struct HashNode next;} HashNode;//链表插入联系人void insertContact(Contact head, Contact newContact) {newContact>next = head;head = newContact;}//哈希函数unsigned int hashFunction(const char key) {unsigned int hash = 0;while (key) {hash =(hash << 5) + key++;}return hash % HASH_TABLE_SIZE;}//查找联系人Contact findContact(Contact head, const char key, HashNode hashTable) {unsigned int hashValue = hashFunction(key);HashNode node = hashTablehashValue;while (node) {if (strcmp(node>key, key) == 0) {return node>contact;}node = node>next;}Contact current = head;while (current) {if (strcmp(current>name, key) == 0 ||strcmp(current>phoneNumber, key) == 0) {//更新哈希表HashNode newNode =(HashNode )malloc(sizeof(HashNode));strcpy(newNode>key, key);newNode>contact = current;newNode>next = hashTablehashValue;hashTablehashValue = newNode;return current;}current = current>next;}return NULL;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。

数据结构课程设计 — 通讯录的制作

数据结构课程设计 — 通讯录的制作
创建哈希表——void CreateHash()
查找哈希表中的关键字——void SearchHash()
4.3详细设计
4.3.1定义的所有数据类型
(1)定义通讯录节点结构体
typedef struct{ //每一条电话本记录
NA name;
NA tel;
NA add;
}Record;
(2)定义哈希表节点结构体
4、设计内容……………………………………………………………3
4.1需求分析…………………………………………………………3
4.2总体设计…………………………………………………………4
4.2.1本程序中用到的所有抽象数据类型的定义………………4
4.2.2主程序的流程………………………………………………4
添加新的用户信息
查找并显示给定用户名的记录
查找并显示给定电话号码的记录
显示版本信息并退出通讯录
C.根据选项实际操作
主函数void main()分别调用下面函数并对应输出void printf()
录入内存内容——void getin()
显示用户信息——void ShowInformation()
输入新名片信息——void insert()
if(strcmp(x,y)==0)
return SUCCESS;
else return UNSUCCESS;
}Status NUM_BER; //记录的个数
(4)对姓名的折叠处理
long fold(NA s)
{ //姓名的折叠处理,就是将名字转换成一个数值
char *p; long sum=0; NA ss;
while((H->elem[pp]!=NULL)&&(eq(str,H->elem[pp]->name)==-1))

通讯录的制作数据结构课程设计

通讯录的制作数据结构课程设计

通讯录的制作数据结构课程设计
在通讯录的制作数据结构课程设计中,我们将使用链表作为主要的数据结构来存储联系人的信息。

链表是一种动态数据结构,它可以根据实际需要动态地分配和释放内存,非常适合用来存储不定数量的联系人信息。

首先,我们需要设计一个联系人的结构体,包含姓名、电话号码、邮箱等基本信息。

然后,我们可以使用链表节点来表示每个联系人,每个节点包含一个联系人的信息以及指向下一个节点的指针。

在创建通讯录时,我们将使用一个头节点来表示通讯录的起始位置,该头节点不包含任何联系人信息,只有一个指向第一个联系人节点的指针。

这样,我们可以通过头节点来遍历整个通讯录,并且在需要插入或删除联系人时更加方便。

在通讯录的实现中,我们可以提供一系列的操作函数,例如添加联系人、删除联系人、查找联系人、显示通讯录等。

这些操作函数可以通过遍历链表来实现对联系人的管理。

除了基本的功能,我们还可以扩展通讯录的功能,例如按照姓名首字母进行排序、按照电话号码进行查找等。

这些功能的实现可以通过链表的操作和排序算法来完成。

此外,我们还可以考虑使用其他数据结构来优化通讯录的实现。

例如,可以使用哈希表来加快对联系人的查找速度,或者使用二叉搜索树来实现按照姓名首字母进行排序。

综上所述,通讯录的制作数据结构课程设计中,我们将使用链表作为主要的数据结构,并通过实现一系列的操作函数和扩展功能来实现对联系人的管理和查询。

同时,我们也可以考虑使用其他数据结构来优化通讯录的实现。

这样的设计可以提高通讯录的效率和方便性,使用户能够更加方便地管理和查找自己的联系人信息。

哈希表实现通讯录-数据结构与算法课程设计报告

哈希表实现通讯录-数据结构与算法课程设计报告

合肥学院计算机科学与技术系课程设计报告2009~2010学年第二学期课程数据结构与算法课程设计名称哈希表实现通讯录题目:(哈希表的设计与实现的问题)设计哈希表实现电话号码查询系统。

设计程序完成以下要求:(1)设每个记录有下列数据项:电话号码、用户名、地址;(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;(3)采用再哈希法解决冲突;(4)查找并显示给定电话号码的记录;(5)查找并显示给定用户的记录。

一、问题分析和任务定义此程序需要完成如下要求:设计哈希表实现电话号码查询系统。

实现本程序需要解决以下几个问题:(1)设计结点使该结点包括电话号码、用户名、地址。

(2)利用再哈希法解决冲突。

(3)分别以电话号码和用户名为关键字建立哈希表。

(4)实现查找并显示给定电话号码的记录。

(5)查找并显示给定用户的记录。

本问题的关键和难点在于如何解决散列的问题。

由于结点的个数无法的知,并且如果采用线性探测法散列算法,删除结点会引起“信息丢失”的问题。

所以采用链地址法散列算法。

采用拉链法,当出现同义词冲突时,使用链表结构把同义词链接在一起,即同义词的存储地址不是散列表中其他的空地址。

首先,解决的是定义链表结点,在拉链法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用电话号码和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成.name[8] 、num[11]和address[20]都是char浮点型,输入输出都只能是浮点型的。

采用拉链法,其中的所有同义词构成一个单链表,再由一个表头结点指向这个单链表的第一个结点。

这些表头结点组成一个一维数组,即哈希表。

数组元素的下标对应由散列函数求出的散列地址。

其次,设计散列函数,本程序需要设计两个散列函数才能解决问题,程序需要分别为以电话号码和用户名为关键字建立哈希表。

所以要分别以用户名、号码为关键字建立两个散列函数,对于以号码为关键字的散列函数,是将十一个数字全部相加,然后对20求余。

通讯录——数据结构课程设计

通讯录——数据结构课程设计

通讯录——数据结构课程设计通讯录是一个用于存储和管理联系人信息的工具。

在数据结构课程设计中,我们需要设计一个通讯录系统,使用户能够方便地添加、查找、修改和删除联系人信息。

下面是通讯录系统的标准格式文本,详细介绍了系统的功能和实现方法。

一、系统概述通讯录系统是一个基于数据结构的软件应用程序,用于存储和管理联系人信息。

它提供了一系列功能,包括添加联系人、查找联系人、修改联系人和删除联系人。

二、系统功能1. 添加联系人用户可以通过系统界面输入联系人的姓名、电话号码、电子邮件地址等信息,系统将这些信息存储在数据结构中。

每一个联系人的信息应包括惟一的标识符,以便于后续的查找、修改和删除操作。

2. 查找联系人用户可以通过姓名、电话号码或者电子邮件地址等关键字进行联系人的查找。

系统将根据用户提供的关键字,在数据结构中进行搜索,并返回与之匹配的联系人信息。

3. 修改联系人用户可以选择要修改的联系人,并提供新的姓名、电话号码、电子邮件地址等信息。

系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并更新其信息。

4. 删除联系人用户可以选择要删除的联系人,并确认删除操作。

系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并将其从通讯录中删除。

三、系统实现1. 数据结构选择为了高效地存储和管理联系人信息,我们选择使用链表作为数据结构。

每一个节点表示一个联系人,包含姓名、电话号码、电子邮件地址等信息,以及指向下一个节点的指针。

2. 添加联系人用户输入联系人信息后,系统将创建一个新的节点,并将其插入到链表的末尾。

为了保证联系人信息的惟一性,系统将检查新节点的标识符是否与已有节点的标识符重复。

如果重复,则提示用户重新输入。

3. 查找联系人用户输入关键字后,系统将从链表的头节点开始遍历,逐个比较节点中的姓名、电话号码和电子邮件地址与关键字是否匹配。

如果找到匹配的联系人,系统将返回其信息。

如果遍历完整个链表仍未找到匹配的联系人,则提示用户未找到。

数据结构课程设计-通讯录查询系统的设计与实现

数据结构课程设计-通讯录查询系统的设计与实现

20180902一、需求分析1、问题描述为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的电话与地址。

设计散列表存储,设计并实现通讯录查找系统。

2、基本要求a.每个记录有下列数据项:电话号码、用户名、地址;b.从键盘输入各记录,分别以电话号码为关键字建立散列表;c.采用二次探测再散列法解决冲突;d.查找并显示给定电话号码的记录;e.通讯录信息文件保存。

二、概要设计1.数据结构本程序需要用到两个结构体,分别为通讯录message以及哈希表HxList2.程序模块本程序包含两个模块,一个是实现功能的函数的模块,另一个是主函数模块。

系统子程序及功能设计本系统共有三个子程序,分别是:int Hx(long long key,int data)//哈希函数void BulidHx(HxList &L)//建立通讯录int Search(HxList &L)//查找3.各模块之间的调用关系以及算法设计主函数调用BulidHx以及Search函数。

函数BulidHx调用函数Hx。

三、详细设计1.数据类型定义typedef struct{char *name;char *add;long long phonenumber;}message;typedef struct{message *list;int number;//记录数}HxList;2.系统主要子程序详细设计a. 建立通讯录void BulidHx(HxList &L)//建立通讯录{FILE *f = fopen("E:\\tongxunlu.txt", "w");char buf[20]={0},str[20]={0};long long key;cout<<"输入要建立的记录数:";cin>>L.number;L.number+=1;L.list=new message[L.number];//分配哈希表的存储空间for(int i=0;i<L.number;i++){L.list[i].phonenumber=-1;}L.list[L.number-1].name=NULL;L.list[L.number-1].add=NULL;cout<<"输入记录信息(电话号码用户名地址)"<<endl; for(int i=0;i<L.number-1;i++){cin>>key>>buf>>str;int pose=Hx(key,L.number);//获取理论上的存储位置if(L.list[pose].phonenumber==-1){}else{//用二次探测再散列法解决冲突//1^2 -1^2 2^2 -2^2int di,count=1;xunhuan: if(count%2==0)di=-(count/2)*(count/2);elsedi=((count/2)+1)*((count/2)+1);int site=Hx(key+di,L.number);if(site>=0){if(L.list[site].phonenumber==-1){pose=site;}else{count++;goto xunhuan;}}else{site=L.number-abs(site);if(L.list[site].phonenumber==-1){pose=site;}else{count++;goto xunhuan;}}}L.list[pose].phonenumber=key;fprintf(f,"%lld",key);fprintf(f," ");L.list[pose].name=new char[strlen(buf)+1];strcpy(L.list[pose].name,buf);fprintf(f,"%s",buf);fprintf(f," ");L.list[pose].add=new char[strlen(str)+1];strcpy(L.list[pose].add,str);fprintf(f,"%s",str);fprintf(f,"\n");}}b.查找int Search(HxList &L)//查找{long long key;cout<<"输入要查找记录的关键字(电话号码):";cin>>key;int pose=Hx(key,L.number);//计算理论上的位置if(L.list[pose].phonenumber==key){}else{int count=1,di;//二次探测再散列,查找xunhuan: if(count%2==0){di=-(count/2)*(count/2);}else{di=((count/2)+1)*((count/2)+1);}int site=Hx(key+di,L.number);if(site>=0){if(L.list[site].phonenumber==key){pose=site;}else{count++;if(L.list[site].phonenumber==-1){cout<<"没有找到"<<endl;return -1;//没有找到}goto xunhuan;}}else{site=L.number-abs(site);if(L.list[site].phonenumber==key){pose=site;}else{count++;if(L.list[site].phonenumber==-1){cout<<"没有找到"<<endl;return -1;//没有找到}goto xunhuan;}}}if(L.list[pose].phonenumber==key){cout<<"电话号码\t"<<"用户名\t"<<"地址"<<endl;cout<<L.list[pose].phonenumber<<"\t"<<L.list[pose].name<<"\t"<<L.list[pose].add<< endl;return pose;}}四、测试与分析1.显示主菜单,运行程序可以显示出如下界面。

数据结构课程设计_通讯录查询系统的设计与实现

数据结构课程设计_通讯录查询系统的设计与实现

Word格式通讯录查询系统的设计与实现完美整理一、需求分析1、问题描述为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的电话与地址。

设计散列表存储,设计并实现通讯录查找系统。

2、基本要求a.每个记录有下列数据项:电话号码、用户名、地址;b.从键盘输入各记录,分别以电话号码为关键字建立散列表;c.采用二次探测再散列法解决冲突;d.查找并显示给定电话号码的记录;e.通讯录信息文件保存。

二、概要设计1.数据结构本程序需要用到两个结构体,分别为通讯录 message以及哈希表HxList2.程序模块本程序包含两个模块,一个是实现功能的函数的模块,另一个是主函数模块。

系统子程序及功能设计本系统共有三个子程序,分别是:int Hx(long long key,int data)//哈希函数void BulidHx(HxList &L)//建立通讯录int Search(HxList &L)//查找3.各模块之间的调用关系以及算法设计主函数调用BulidHx以及Search函数。

函数BulidHx调用函数Hx。

三、详细设计1.数据类型定义typedef struct{char *name;char *add;long long phonenumber;}message;typedef struct{message *list;int number;//记录数}HxList;2.系统主要子程序详细设计a. 建立通讯录void BulidHx(HxList &L)//建立通讯录{FILE *f = fopen("E:\\tongxunlu.txt", "w");char buf[20]={0},str[20]={0};long long key;cout<<"输入要建立的记录数:";cin>>L.number;L.number+=1;L.list=new message[L.number];//分配哈希表的存储空间for(int i=0;i<L.number;i++){L.list[i].phonenumber=-1;}L.list[L.number-1].name=NULL;L.list[L.number-1].add=NULL;cout<<"输入记录信息(电话号码用户名地址)"<<endl; for(int i=0;i<L.number-1;i++){cin>>key>>buf>>str;int pose=Hx(key,L.number);//获取理论上的存储位置if(L.list[pose].phonenumber==-1){}else{//用二次探测再散列法解决冲突//1^2 -1^2 2^2 -2^2int di,count=1;xunhuan: if(count%2==0)di=-(count/2)*(count/2);elsedi=((count/2)+1)*((count/2)+1);int site=Hx(key+di,L.number);if(site>=0){if(L.list[site].phonenumber==-1){pose=site;}else{count++;goto xunhuan;}}else{site=L.number-abs(site);if(L.list[site].phonenumber==-1){pose=site;}else{count++;goto xunhuan;}}}L.list[pose].phonenumber=key;fprintf(f,"%lld",key);fprintf(f," ");L.list[pose].name=new char[strlen(buf)+1];strcpy(L.list[pose].name,buf);fprintf(f,"%s",buf);fprintf(f," ");L.list[pose].add=new char[strlen(str)+1];strcpy(L.list[pose].add,str);fprintf(f,"%s",str);fprintf(f,"\n");}}b.查找int Search(HxList &L)//查找{long long key;cout<<"输入要查找记录的关键字(电话号码):";cin>>key;int pose=Hx(key,L.number);//计算理论上的位置if(L.list[pose].phonenumber==key){}else{int count=1,di;//二次探测再散列,查找xunhuan: if(count%2==0){di=-(count/2)*(count/2);}else{di=((count/2)+1)*((count/2)+1);}int site=Hx(key+di,L.number);if(site>=0){if(L.list[site].phonenumber==key){pose=site;}else{count++;if(L.list[site].phonenumber==-1){cout<<"没有找到"<<endl;return -1;//没有找到}goto xunhuan;}}else{site=L.number-abs(site);if(L.list[site].phonenumber==key){pose=site;}else{count++;if(L.list[site].phonenumber==-1){cout<<"没有找到"<<endl;return -1;//没有找到}goto xunhuan;}}}if(L.list[pose].phonenumber==key){cout<<"电话号码\t"<<"用户名\t"<<"地址"<<endl;cout<<L.list[pose].phonenumber<<"\t"<<L.list[pose].name<<"\t"<<L.list [pose].add<<endl;return pose;}}四、测试与分析1.显示主菜单,运行程序可以显示出如下界面。

算法与数据结构设计_通讯录的实现.doc

算法与数据结构设计_通讯录的实现.doc

题目二:通讯录的实现一,课题内容和要求基本要求:实现一个以带表头结点的单链表为存储结构的通讯录,其中通讯录的信息中包括姓名、电话、地址等数据项。

所设计的系统要有简单的DOS界面,方便用户进行操作,显示以下功能:(1)建立通讯录。

(2)插入、删除、修改通讯录记录(3)查询通讯录记录,要求可按姓名和电话号码查询(4)可按姓名或电话号码对讯录进行排序(5)输出通讯录到文本文件中。

提高要求:建立通讯录时,从文本文件中输入通讯录记录,从而建立通讯录。

分配该题目的学生学号:10001111-10001120二、需求分析(1)建立一个类,类中包含添加联系人函数void add_person();删除联系人void add_person();显示所有联系人void show_all();修改信息void alter();查询联系人void select();保存新增加的联系人void save_new();同时,通讯录中包含name姓名address地址number电话号码mail邮箱(2)系统总流程图三,概要设计定义一个结构体,在其中声明结构变量,然后定义字符串,来存放要用到的变量。

然后定义此程序的其他功能模块的原型。

主函数调用各个功能子函数,定义各个功能子函数,通过class person创建一个联系人信息函数。

通过add_person做一个添加的函数,实现联系人信息的录入。

通过del_person做一个删除的函数,实现联系人信息的删除。

通过show_all做一个显示的函数,显示所有联系人的信息。

通过select做一个查询信息的函数,实现查询某联系人的信息。

通过alter做一个修改信息的函数,实现修改某联系人的信息。

在程序中需要输入的内容包括:(1)联系人的录入实现过程:根据提示选择“1”进入添加联系人信息界面,按步骤输入要添加的信息,以“Enter”键结束,然后由系统自动调用信息录入函数,联系人的信息保存在事先定义的文件中。

数据结构课程设计通讯录

数据结构课程设计通讯录

数据结构课程设计通讯录一、课程目标知识目标:1. 理解并掌握通讯录数据结构的基本概念,包括线性表的实现方式及其操作;2. 学会运用数组、链表等常见数据结构存储和检索通讯录信息;3. 掌握排序和查找算法在通讯录中的应用。

技能目标:1. 能够运用所学知识,设计并实现一个简单的通讯录管理系统;2. 掌握使用编程语言(如C/C++/Java等)实现通讯录的基本操作,如增加、删除、修改和查询联系人;3. 学会分析不同数据结构在通讯录管理中的性能特点,选择合适的算法优化系统。

情感态度价值观目标:1. 培养学生对数据结构在解决实际问题中应用的兴趣和认识,激发其学习主动性和积极性;2. 培养学生的团队合作意识,通过小组讨论和协作完成课程设计任务;3. 增强学生的信息素养,使其认识到数据结构在信息管理中的重要性。

课程性质:本课程设计为实践性较强的课程,旨在通过实际操作,让学生将所学的数据结构知识应用于通讯录管理系统中。

学生特点:针对高年级学生,具备一定的编程基础和数据结构理论知识,具备独立思考和解决问题的能力。

教学要求:注重理论与实践相结合,强调动手实践能力,关注学生的个性化发展,培养创新精神和团队合作能力。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高解决实际问题的能力。

二、教学内容1. 通讯录数据结构基础- 线性表的基本概念与实现(教材第3章)- 通讯录数据结构设计原理(教材第4章)2. 通讯录管理系统功能设计- 联系人信息的增加、删除、修改、查询操作(教材第5章)- 排序与查找算法在通讯录中的应用(教材第6章)3. 编程语言与数据结构实现- C/C++/Java等编程语言的基本语法复习(教材第2章)- 使用编程语言实现通讯录数据结构及操作(教材第7章)4. 实践操作与系统优化- 设计并实现一个简单的通讯录管理系统(综合教材第3-7章内容)- 分析不同数据结构在通讯录管理中的性能特点,进行系统优化(教材第8章)5. 课程项目与团队协作- 分组讨论,明确项目需求和分工(教材第9章)- 团队协作完成课程设计,并进行成果展示与评价(教材第10章)教学内容安排与进度:第1周:通讯录数据结构基础,线性表的概念与实现第2周:通讯录管理系统功能设计,编写基本操作接口第3周:编程语言复习,实现通讯录数据结构及操作第4周:实践操作,设计并实现通讯录管理系统第5周:系统性能分析,优化数据结构和算法第6周:课程项目总结,团队协作成果展示与评价三、教学方法1. 讲授法:通过教师讲解,使学生掌握通讯录数据结构的基本概念、原理和实现方法。

数据结构课程设计通讯录

数据结构课程设计通讯录

数据结构课程设计说明书题目:通讯录信息系统的管理院系:专业班级:学号:学生姓名:指导教师:2008 年06 月20 日一、需求分析运用〈〈数据结构〉〉中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。

通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等。

实现以下几方面的功能:1.Add a record,可以向通讯录管理系统中增加新记录;2.Delete a record.可以从通讯录管理系统中删除记录;3.Show all records.显示通讯录的所有信息;4.Search a record.按名字查询信息;5.Quit退出通讯录管理系统。

简介:本程序是通过链表实现的简单通讯录,所实现的此通讯录包含着三个信息,即通讯者的姓名、电话号码和住址。

该程序能够帮助使用者完成一些常用的通讯记录,操作界面简单易懂,使用方便。

如果使用者还需要其他功能只要进行简单的修改就可以实现添加。

因为本人水平有限,该程序在算法的选择方面还不够好,有待于进一步完善。

(1)此程序的几大模块第一个模块:结构体(struct friends):实现通讯录的三个基本组成部分——姓名、电话、地址;第二个模块:添加(add):添加通讯者,实现插入功能;第三个模块:删除(delete):删除某人的信息,如果未找到要修改的某人的信息,则提示通讯录中没有此人的信息,并返回主菜单,实现删除功能。

第四个模块:search( )的功能是:查询某人的信息如果找到了,则显示该人的信息,如果未找到,则显示通讯录中没有此人的信息,并返回主菜单;第五个模块:输出(list):浏览通讯录全体成员,实现整个通信录数据全体输出;第六个模块:退出(exit):退出程序;第七个模块:主函数main( ):根据主菜单的选项调用各函数,并完成相映的功能.第八个模块:Menu( )的功能是:显示英文主菜单;(2)测试1、根据屏幕输出的菜单选择所需要的操作,通常第一次使用应选择1添加;输入完每个通讯者的信息后都可以选择继续还是退出,如果输入任意键,则继续输入,否则输入y,程序就会回到初始界面;2、查找选择2 ,程序提示输入要查找的通讯者的姓名,输入后回车,如果存在,则显示通讯者的信息,如果不存在,程序提示no message;3、删除操作选择 3 ,输入要被删除的通讯者的姓名,输入后按回车,程序将显示要被删除的通讯者的信息,确定删除输入1,取消删除选择0;4、第4项功能,显示所输入的所有通讯者的信息;5、退出选择5二、概要分析1、可排序表的抽象数据类型定义为:ADT Orderablelist{数据对象:D={A[i] | A[i] ∈Integer,i=1,2,…,n, n>=0}数据关系:R={<A[i-1],A[i]>|A[i-1],A[i]∈D,i=1,2,…,n}2、主要函数原型:menu_select(); /*主菜单函数*/add();/*输入记录*/delete();/*按名字删除记录*/search();/*按姓名查找显示记录*/list();/*显示所有记录*/3、调用到的函数:通过switch(表达式){case 常量表达式1:语句1case 常量表达式2:语句2::case 常量表达式n:语句n}调用add()delete()list()display(struct address *info)search()五个函数。

通讯录——数据结构课程设计

通讯录——数据结构课程设计

数据结构课程设计通讯录目录1、课程设计的目的: (1)2、需求分析: (1)1. 要求: (1)2. 详细功能: (1)3、课程设计报告内容: (1)1. 通讯录管理系统调用关系图: (1)2. 设计结构体及函数表: (2)3. 实现主程序和各模块的调用关系: (2)4、详细设计: (3)1. 各个操作的算法实现: (3)2.程序清单:(见附录) (4)5、参考文献: (5)6、部分运行结果界面: (5)1.调试分析: (7)2. 调试中遇到的问题: (7)7、总结: (8)8、附录:(程序) (8)1、课程设计的目的:用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识。

编写一个通讯录管理系统。

以把所学数据结构知识应用到实际软件开发中去。

了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风;2、需求分析:1.要求:(1)设计一个实用的小型通讯录,用双向链表做数据结构,编写一个通讯录管理系统实现通讯录信息的输入、添加、显示、以姓名做关键字进行查找、删除信息等功能。

(2)每条信息至少包含:姓名、街道、城市、邮编、国家等信息。

2.详细功能:A.载入文件load():将磁盘中可能存在的文件载入到内存中。

A.信息输入enter():系统将提示输入新纪录所需信息,信息包含:姓名、街道、城市、邮编、国家。

B.信息删除del():首先提示用户输入要删除的纪录姓名,然后调用删除函数,删除该纪录的相关资料,支持重名选择删除和循环删除。

C.查找search():提示用户输入要查找的姓名,然后系统调用查找函数查找,接着系统使用相关命令输出查到的全部信息。

D.显示全部display():将内存中的纪录内容全部输出,包括未保存到磁盘的记录项。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*******************实践教学*******************兰州理工大学软件学院2012年春季学期算法与数据结构课程设计题目:通讯录专业班级:软件2班姓名:刘正翔学号:11700215指导教师:滕永晨成绩:摘要本课程设计可加深对课堂理论学习的理解,增强动手能力,以培养学生合作的能力,为毕业设计作好实践环节上的准备。

通讯录系统是在学校常见的计算机信息管理系统。

它的主要任务是对学生信息进行管理,如学生信息的输入、查询、修改、增加、删除,迅速准确地完成各种学生信息的统计和查询。

本系统有分7个功能:(1)写入数据(2)读取数据(3)追加数据(4)查找数据(5)备份数据(6)删除数据(7)还原数据。

其主要利用结构类型,指针,数组,函数等C语言知识来实现。

目录摘要 (I)一、算法分析 (1)1.1主函数 (1)1.2写入函数 (1)1.3读取数据 (2)1.4追加数据 (3)1.5查找数据 (3)1.6备份数据 (4)1.7删除数据 (5)1.8还原数据 (6)二、主要流程图 (7)三、程序运行测试 (8)3.1写入数据函数测试 (8)3.2读取数据函数测试 (8)3.3追加数据函数测试 (9)3.4查找数据函数测试 (10)3.5备份数据函数测试 (10)3.6删除数据函数测试 (10)3.7还原数据函数测试 (11)3.8退出程序测试: (11)四、设计总结 (11)参考文献 (12)致谢 (13)附录: (14)一、算法分析整个系统共分为8模块,主函数加7个子函数,从而实现7大功能:写入数据,读取数据,追加数据,查找数据,备份数据,删除数据,还原数据;各个程序的算法分析如下:1.1主函数main():利用for( )和switch( )实现主界面的显示与各选项的连接;流程图如图1.1所示:图1.1主函数流程图1.2写入函数void input1():利用文件的fwrite()语句来实现数据的保存;流程图如图1.2所示:图1.2写入函数流程图1.3读取数据void read1():利用文件的fread()语句来实现数据的读取;流程图如图1.3所示:图1.3 读取数据流程图1.4追加数据void append1():利用fread()来读出文件里的数据,从而确定数据的数量,再在最后一条数据后通过fopen(“文件名”,”ab”)来实现追加;流程图如图1.4所示:图1.4 追加数据流程图1.5查找数据void find1()通过strcmp()==0来实现数据的查找;流程图如图1.5所示:图1.5 查找数据流程图1.6备份数据void backup1():通过将数据复制到另一个文件里的方法来实现备份功能;流程图如图1.6所示:图1.6 备份数据流程图1.7删除数据void delete1():通过将后一行数据覆盖前一行数据的方法来实现删除功能;流程图如图1.7所示:图1.7 删除数据流程图1.8还原数据comeback1():通过将已备份的数据复制到原来的这个文件里的方法来实现还原的功能;流程图如图1.8所示:图1.8 还原数据流程图二、主要流程图系统模式结构图如图2.1所示:图2.1 主要流程图各模块功能的分析:(1)主函数:可让用户选择用系统的哪个功能,从而去连接到相应的子函数;(2)写入数据:让用户输入通讯录里的内容,并将内容保存好;(3)读取数据:显示通讯录里已保存的数据;(4)追加数据:让用户在通讯录原有数据中,再加上新的数据;(5)查找数据:通过用户输入需要找的名字来找到相关资料;(6)备份数据:将已有数据进行备份;(7)删除数据:让用户删除想要删除的资料;(9)还原数据:使通讯录里的数据恢复到备份时的模样。

三、程序运行测试3.1 写入数据函数测试:在主界面输入:1屏幕输出:Be careful!!!Do you sure to input?(y/n):输入:y屏幕输出:Input the name(Input exit return):输入:liang屏幕输出:Input the city:输入:zhuhai屏幕输出:Input the email:输入:liangi@屏幕输出:Input the phone:输入:123456屏幕输出:Input the zip:输入:519055屏幕输出:Input the name(Input exit return):输入:exit回到主界面;3.2读取数据函数测试:在主界面输入:2屏幕输出如图3.1所示:图3.1 读取数据按下任意键回到主函数;3.3追加数据函数测试:在主界面输入:3屏幕输出:Input the name(Input exit return):输入:li屏幕输出:Input the city:输入:zhuhai屏幕输出:Input the email:输入:li@屏幕输出:Input the phone:输入:654321屏幕输出:Input the zip:输入:519055屏幕输出:Input the name(Input exit return):输入:exit回到主界面,输入:2屏幕输出如图3.2所示:图3.2 追加数据显示按任意键回到主函数;在主界面输入:4屏幕输出:Input the name:输入:liang屏幕输出如图3.3所示:图3.3 显示查找数据界面按任意键返回主界面;3.5备份数据函数测试:在主界面输入:5屏幕输出:The backup was done!按任意键返回主界面;3.6删除数据函数测试:在主界面输入:6屏幕输出:Input the name:输入:li屏幕输出:The date was delete.按任意键返回主界面,输入:2屏幕输出如图3.4所示:图3.4 删除数据显示按任意键返回主界面;在主界面输入:7屏幕输出:The comback was done!按任意键返回主界面,输入2屏幕输出如图3.5所示:图3.5 恢复数据显示按任意键返回主界面;3.8退出程序测试:在主界面输入:0屏幕输出如图3.6所示:图3.6 退出程序按任意键退出程序。

四、设计总结通过该课程设计,全面系统的理解了数据结构与算法设计构造的一般原理和基本实现方法。

把死板的课本知识变得生动有趣,激发了学习的积极性。

把学过的数据结构与算法设计的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。

以前对于数据结构与算法的认识是模糊的,概念上的,现在通过自己动手做实验,对数据结构与算法的认识更加深刻。

课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,将不必要的命令去除。

在这次课程设计中,我就是按照实验指导的思想来完成。

加深了理解TC的内部功能及内部实现,培养实践动手能力和程序设计能力的目的参考文献[1].严蔚敏,吴伟民.《数据结构(C语言版)》,清华大学出版社.[2].严蔚敏,吴伟民.《数据结构题集(C语言版)》,清华大学出版社.[3] .《DATA STRUCTURE WITH C++》. William Ford,William Topp .清华大学出版社(影印版).[4].谭浩强.《c语言程序设计》, 清华大学出版社.[5].张铭,刘晓丹译.数据结构与算法分析(Java版) A Practical Introduction to Data Structures and Algorithm Analysis Java Edition Clifford A. Shaffer ,电子工业出版社 2001 年1月.致谢在课程设计的过程中,我得到了老师和同学们的热情帮助。

没有他们的帮助,我就无法顺利完成自己的课题。

在此,我首先要感谢我的指导老师滕永晨老师在这炎炎烈日时不畏辛苦给我们指导修正,并引导我参阅相关的书籍和资料;尤其感谢我的数据结构王连相老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。

最后感谢我的同学们在程序调试的初期给了我很大的帮助,没有他们的帮助我很难发现一些潜在的错误,在此对他们表示感谢。

附录:程序源代码:#include <stdio.h>#define N 50struct address{char name[20];char city[15];char email[20];unsigned long phone;unsigned long zip;}stu[N];void input1(){FILE *fp;int i;char n;printf("Be careful!!!Do you sure to input?(y/n):\7\7\7\n");n=getchar();n=getchar();if(n!='y')return;else{fp=fopen("txl","wb");for(i=0;i<N;i++){printf("Input the name(Input exit return):\n");scanf("%s",stu[i].name);if(strcmp(stu[i].name,"exit")==0)return;else{printf("Input the city:\n");scanf("%s",stu[i].city);printf("Input the email:\n");scanf("%s",stu[i].email);printf("Input the phone:\n");scanf("%ld",&stu[i].phone);printf("Input the zip:\n");scanf("%ld",&stu[i].zip);fwrite(&stu[i],sizeof(struct address),1,fp);}}fclose(fp);}}void read1(){FILE *fp;int i;if((fp=fopen("txl","rb"))==NULL){printf("Can not to open the txl.\n");return;}printf("=================================================================== =============\n");printf(" Name City EmailPhone Zip \n");printf("=================================================================== =============\n");for(i=0;fread(&stu[i],sizeof(struct address),1,fp)!=0&&i<N;i++){printf("%15s%15s%20s%15ld%10ld\n",stu[i].name,stu[i].city,stu[i].email,stu[i].phone,stu[i].zip);}getch();fclose(fp);}void append1(){FILE *fp;int i,sum=0;if((fp=fopen("txl","rb"))==NULL){printf("Can not to open the txl.\n");return;}for(i=0;fread(&stu[i],sizeof(struct address),1,fp)!=0&&i<N;i++)sum+=1;fclose(fp);if((fp=fopen("txl","ab"))==NULL){printf("Can not to open the txl.\n");return;}for(i=sum;i<N;i++){printf("Input the name(Input exit return):\n");scanf("%s",stu[i].name);if(strcmp(stu[i].name,"exit")==0)return;else{printf("Input the city:\n");scanf("%s",stu[i].city);printf("Input the email:\n");scanf("%s",stu[i].email);printf("Inpute the phone:\n");scanf("%ld",&stu[i].phone);printf("Inpute the zip:\n");scanf("%ld",&stu[i].zip);fwrite(&stu[i],sizeof(struct address),1,fp);}}fclose(fp);}void find1(){FILE *fp;int i,j;char s[16];printf("Input the name:\n");scanf("%s",s);if((fp=fopen("txl","rb"))==NULL){printf("Can not to open the txl.\n");return;}for(i=0;fread(&stu[i],sizeof(struct address),1,fp)!=0&&i<N;i++)if(strcmp(stu[i].name,s)==0){printf("=================================================================== =============\n");printf(" Name City Email Phone Zip \n");printf("=============================================================== =================\n");printf("%15s%15s%20s%15ld%10ld",stu[i].name,stu[i].city,stu[i].email,stu[i].phone,stu[i].zip);getch();}fclose(fp);}void backup1(){FILE *fp1,*fp2;int i;if((fp1=fopen("txl","rb"))==NULL){printf("Can not to open the txl.\n");return;}fp2=fopen("txl2","wb");for(i=0;fread(&stu[i],sizeof(struct address),1,fp1)!=0&&i<N;i++) fwrite(&stu[i],sizeof(struct address),1,fp2);fclose(fp1);fclose(fp2);printf("The backup was done!\n");getch();}void delete1(){FILE *fp;int i,j,n=0;char s[16];printf("Input the name:\n");scanf("%s",s);if((fp=fopen("txl","rb"))==NULL){printf("Can not to open the txl.\n");return;}for(i=0;fread(&stu[i],sizeof(struct address),1,fp)!=0&&i<N;i++) {if(strcmp(stu[i].name,s)==0){for(j=i+1;fread(&stu[j],sizeof(structaddress),1,fp)!=0&&j<N;j++){strcpy(stu[j-1].name,stu[j].name);strcpy(stu[j-1].city,stu[j].city);strcpy(stu[j-1].email,stu[j].email);strcpy(stu[j-1].phone,stu[j].phone);strcpy(stu[j-1].zip,stu[j].zip);}}n+=1;}fclose(fp);fp=fopen("txl","wb");for(i=0;i<n-1;i++){fwrite(&stu[i],sizeof(struct address),1,fp);}fclose(fp);printf("The date was delete.");getch();}comeback1(){FILE *fp,*fp1;int i;if((fp1=fopen("txl2","rb"))==NULL){printf("Can not to open the txl.\n");return;}fp=fopen("txl","wb");for(i=0;fread(&stu[i],sizeof(struct address),1,fp1)!=0&&i<N;i++) fwrite(&stu[i],sizeof(struct address),1,fp);fclose(fp1);fclose(fp);printf("The comback was done!\n");getch();}main(){int a;for(;;){printf(" * * * * * * * * * * * * * * * * * * * * * * * * *\n");printf(" * * * * * * * * * * * * * * * * * * * * * * * * *\n");printf(" * * * *\n");printf(" * * * *\n");printf(" * * (1)Input the data * *\n");printf(" * * (2)Read the txl * *\n");printf(" * * (3)Append the data * *\n");printf(" * * (4)Find the data * *\n");printf(" * * (5)Backup the data * *\n");printf(" * * (6)Delete the data * *\n");printf(" * * (7)Comeback the data * *\n");printf(" * * * *\n");printf(" * * * *\n");printf(" * * * * * * * * * * * * * * * * * * * * * * * * *\n");printf(" * * * *\n");printf(" * * (0)Exit * *\n");printf(" * * * *\n");printf(" * * * * * * * * * * * * * * * * * * * * * * * * *\n");printf(" * * * * * * * * * * * * * * * * * * * * * * * * *\n");printf(" % % % % % % % % % % % % % % % % % % %\n");printf(" % %\n");printf(" % This program is make for Wu Feng! %\n");printf(" % %\n");printf(" % % % % % % % % % % % % % % % % % % %\n");printf("Input 0-7:");scanf("%d",&a);switch (a){case 1: input1();break;case 2: read1();break;case 3: append1();break;case 4: find1();break;case 5: backup1();break;case 6: delete1();break;case 7: comeback1();break;case 0:printf("* * * * * * * * * * * * * * * * * * ** *\n");printf("* *\n");printf("* Good bye~~ *\n");printf("* *\n");printf("* * * * * * * * * * * * * * * * * * * * *\n");getch();exit();break;default: printf("The number is not in 0-7!\n");getch();break;}}}。

相关文档
最新文档