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

合集下载

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

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

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

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

## 二、系统需求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. 支持添加、删除、修改联系人信息的功能; 2. 支持按姓名、电话号码等属性进行搜索的功能; 3. 支持导入、导出通讯录的功能; 4. 支持多用户共享的功能; 5. 支持通讯录的快速访问和响应;6. 支持对联系人信息进行分类和标记的功能。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

数据结构课程设计通讯录的制作一、引言二、需求分析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)修改节点信息。

数据结构课程设计-通信录的制作(附录中有全部代码)

数据结构课程设计-通信录的制作(附录中有全部代码)

课程设计任务书专业名称:计算机科学与技术(软件工程)课程名称:数据结构课程设计设计题目:通讯录的制作起止时间:2013年6月24日至2013年7月12日问题描述编写一个通讯录管理系统。

基本要求1)每条信息至少包含:姓名(name)、街道(street)、城市(city)、邮编(eip)、国家(state)这几项;2)作为一个完整的系统,应具有友好的界面和较强的容错能力;3) 利用链表作为存储结构4) 上机能正常运行通信录的制作1概要设计该程序主要是解决用链表实现通讯录,并通过通讯录实现存取,显示,插入、删除记录等问题,首先进行数据的录入,包括编号、姓名、性别、电话号和地址;其次是显示之前所录入的信息,并通过编号或姓名进行查询;第三是实现插入功能;第四是实现删除功能;之后是删除记录退出程序。

系统主要由五个函数组成:第一个函数是主函数主要功能主函数(main()函数)是通过一个多分支语句(switch(i)语句)实现的。

,第二个函数主要的功能输入通讯录的信息包括编号、姓名、性别等,第三个函数通过编号或姓名查询所有信息。

第四个函数将新的信息插入到系统中。

第五个函数通过编号或姓名对所对应的通讯录信息进行删除。

系统主要由四个模块组成:●输入模块:输入通讯录的信息包括编号、姓名、性别等。

●查询模块:通过编号或姓名查询所有信息。

●插入模块:将新的信息插入到系统中。

●删除模块:通过编号或姓名对所对应的通讯录信息进行删除。

图1模块图2详细设计关键代码解析:主函数int main(){Pointer Head=NULL;int i;do{printf("-------------通讯录系统--------------\n");printf("\n");printf("1.插入联系人信息\n");printf("2.查找联系人信息\n");printf("3.修改联系人信息\n");printf("4.删除联系人信息\n");printf("5.显示联系人信息\n");printf("6.退出\n");scanf("%d",&i);switch(i){case 1:Insert(&Head);break;case 2:Search(Head);break;case 3:Update(Head);break;case 4:Delete(&Head);break;case 5:Show(Head);break;case 6:break;default:printf("输入错误!请重新输入!");break;}}while(i!=6);return 0;}void Insert(Pointer *Head){char in_name[10];Pointer p,q,r;printf("请输入姓名:");scanf("%s",in_name);p=q=*Head;while(p!=NULL){q=p;p=p->next;}r=(Pointer)malloc(sizeof(Link));r->next=NULL;if(r==NULL){printf("分配空间失败!");return;}if(q==NULL)*Head=r;else{q->next=r;}strcpy(r->name,in_name);printf("请输入街道:");scanf("%s",r->street);printf("请输入城市:");scanf("%s",r->city);printf("请输入邮编:");scanf("%s",r->eip);printf("请输入国家:");scanf("%s",r->state);}void Search(Pointer Head){int flag=1;char in_name[10];Pointer p;printf("请输入要查询的姓名:");scanf("%s",in_name);p=Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){p=p->next;}else{printf("街道:%s\n",p->street);printf("城市:%s\n",p->city);printf("邮编:%s\n",p->eip);printf("国家:%s\n",p->state);flag=0;}}if(flag)printf("没有查询到!");}void Update(Pointer Head){int flag=1;char in_name[10];Pointer p;printf("请输入要修改的姓名:");scanf("%s",in_name);p=Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){p=p->next;}else{printf("请输入街道:");scanf("%s",p->street);printf("请输入城市:");scanf("%s",p->city);printf("请输入邮编:");scanf("%s",p->eip);printf("请输入国家:");scanf("%s",p->state);flag=0;}if(flag){printf("没有找到要修改的记录!");}}}void Delete(Pointer *Head){int flag=1;char in_name[10];Pointer p,q;printf("请输入要删除的姓名:");scanf("%s",in_name);p=q=*Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){q=p;p=p->next;}else{if(p==*Head){*Head=p->next;free(p);}else{q->next=p->next;free(p);}flag=0;}}}void Show(Pointer Head){Pointer p;p=Head;while(p!=NULL){printf("姓名:%-10s",p->name);printf("街道:%-10s",p->street);printf("城市:%-10s",p->city);printf("邮编:%-10s",p->eip);printf("国家:%-10s",p->state);p=p->next;}}3调试报告在编辑完成一个C语言源程序并最终在计算机上看到程序的运行结果要经过以下几个步骤:上机输入与编辑源程序文件;编译源程序文件;与库函数连接;运行可执行文件。

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

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

山东理工大学计算机学院课程设计(数据结构)班级姓名学号指导教师二○一一年一月二十日课程设计任务书及成绩评定课题名称数据结构Ⅰ、题目的目的和要求: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.数据的持久化存储二、系统设计1. 数据结构设计为了实现学生通讯录管理系统的功能,我们需要设计以下数据结构:•学生信息结构体包括学号、姓名、性别、年龄等字段•通讯录信息结构体包括联系人姓名、电话号码、邮箱等字段2. 算法设计2.1 添加学生信息当用户选择添加学生信息时,系统会要求用户输入学号、姓名、性别、年龄等信息,然后将这些信息存储在学生信息的数据结构中。

void addStudentInfo() {// 读取用户输入的学生信息// 将学生信息存储在学生信息结构体中}2.2 修改通讯录信息用户可以根据联系人姓名查找通讯录信息,并进行修改操作,比如修改电话号码、邮箱等内容。

void modifyContactInfo() {// 根据联系人姓名查找通讯录信息// 用户进行修改操作}2.3 删除通讯录信息用户可以根据联系人姓名删除通讯录信息。

void deleteContactInfo() {// 根据联系人姓名删除通讯录信息}3. 数据存储设计为了持久化存储数据,我们可以选择使用文件存储或数据库存储。

在本系统中,我们选择文件存储的方式,数据以文本的形式存储在文件中。

三、系统实现通过以上设计,我们可以开始实现学生通讯录管理系统。

在实现过程中,我们需要注意保证数据结构的正确性和数据操作的合法性,从而确保系统的稳定性和可靠性。

四、总结通过本次数据结构课程设计,我们深入了解了学生通讯录管理系统的实现原理和功能设计。

在接下来的学习中,我们将继续努力提升自己的编程能力,不断完善系统的功能和性能,为实现更多复杂系统打下坚实的基础。

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

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

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

具体需求包括: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;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。

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

数据结构课程设计通讯录
的制作
Modified by JEEP on December 26th, 2020.
软件学院
课程设计报告书
课程名称数据结构课程设计
设计题目通讯录的制作
专业班级软件工程XXXX
学号 XXXXXXXX
姓名 X X X
指导教师X X X
2012 年 01 月
目录
1、设计时间 (3)
2、设计目的 (3)
3、设计任务 (3)
4、设计内容 (3)
需求分析 (3)
总体设计 (4)
4.2.1本程序中用到的所有抽象数据类型的定义 (4)
4.2.2主程序的流程 (4)
详细设计 (6)
4.3.1定义的所有数据类型 (6)
4.3.2主函数 (11)
4.3.3函数的调用关系图 (12)
测试与分析 (13)
4.4.1测试 (13)
4.4.2分析 (19)
附录 (19)
5、总结与展望 (28)
参考文献 (29)
”4.4.2
m=n%HASHSIZE; ame); pp=p;
while(H->elem[pp]!=NULL)
{ pp=collision(p,c);
if(pp<0)
{ printf("createHash1第%d记录无法解决冲突",i+1);
n",HASHSIZE,H->count);
}
void SearchHash1(HashTable* H,int c)
{ el); pp=p;
while(H->elem[pp]!=NULL)
{ pp=collision(p,c);
if(pp<0)
{ printf("第%d记录无法解决冲突",i+1); n",HASHSIZE,H->count);
}
void SearchHash2(HashTable* H,int c)
{ ame);
printf("请输入第%d个记录的电话号码:\n",i+1);
scanf("%s",a[i].tel);
printf("请输入第%d个记录的地址:\n",i+1);
scanf("%s",a[i].add); ame);
for(i=0;i<NUM_BER;i++)
{ if(strcmp(a[i].name,a[NUM_BER].name)==0)。

相关文档
最新文档