数据结构实验一通讯录

合集下载

数据结构上机实验报告-通讯录

数据结构上机实验报告-通讯录

数据结构上机实验报告通讯录陈冠豪20102105010101015二O一O年5月26号实验目的通讯录内容有:姓名、通讯地址、电话号码。

要求:(1)建立通信录(2)插入一个人员信息。

(3)删除指定的人员信息。

(4)按姓名项的字母顺序递增排列;(5)能查找通讯录中某人的信息;实现代码://////////By Lea////////////// ////////2010210501//////////// //用链式存储结构的通讯录//By Lea.(2010210501)#include <stdio.h>#include <string.h>#include <stdlib.h>//#include "system.h"#define maxsize 100/*通讯信息的结构类型定义*/typedef struct{char num[10];char name[10];char phone[12];char addres[12];}DataType;struct persons{ char num[10];char name[10];char phone[12];char addres[12];}psn[maxsize];typedef struct node{DataType data;struct node *next;}ListNode,*LinkList;void InsertList(LinkList head){LinkList p;p=(LinkList)malloc(sizeof(ListNode));p->next=NULL;printf("\nInput the new node\n");printf("number:\n");gets(p->data.num);printf("name:\n");gets(p->);printf("phone:\n");gets(p->data.phone);printf("addres:\n");gets(p->data.addres);p->next=head->next;head->next=p;}/*查询函数:可以按编号或姓名在链表中查找出对应的记录。

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

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

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

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

## 二、系统需求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.删除联系人:可以根据姓名或电话号码删除通讯录中的联系人。

为了实现上述功能,我们可以使用链表来实现通讯录的存储,每个节点表示一个联系人。

每个节点包含姓名、电话号码、邮箱地址等信息,并且有指向下一个节点的指针。

为了提高查找联系人的效率,我们还可以使用哈希表来实现联系人的快速查找。

哈希表采用键值对的方式存储数据,通讯录中的联系人可以以姓名为键,联系人节点为值存储在哈希表中。

结果实验的最终结果是一个完善的通讯录管理系统,能够实现创建通讯录、添加联系人、查找联系人、修改联系人和删除联系人等功能。

在实现过程中,我们遵循了以下步骤:1.首先,我们设计了联系人节点的数据结构,包括姓名、电话号码、邮箱地址等字段,并定义了节点的操作方法。

2.接着,我们设计了通讯录的数据结构,使用链表来存储联系人节点,并实现了通用的链表操作方法,如插入节点、删除节点等。

3.然后,我们设计了哈希表的数据结构,使用哈希函数将联系人节点存储在哈希表中,并实现了查找联系人的快速算法。

数据结构——通讯录实验报告

数据结构——通讯录实验报告

数据结构——通讯录实验报告
《数据结构课程设计》实验报告
编号实验一实验项目名称通讯录管理
班学姓08计科(1)班学时数 6 指导教师冯韵 5 黄媛级号名
成实验日期 2010年9月7日绩
一、实验目的:使用有关单链表的操作来实现通讯录信息系统的管理二、内容与设计思想:(设计思想、主要数据结构、主要代码结构、主要代码段分析) 设计思想:利用单链表的建立、查询、插入、删除、输出实现通讯录管理。

主要数据结构:单链表的建立、查询、插入、删除。

主要代码结构和分析:
void main( )主函数
for循环实现菜单循环。

int menu_select( ) 菜单选择函数
首先输出菜单选项,将输入的选项赋给sn,用sn判断输入值是否合理。

利用for循环实现重复选择,利用switch调用建立、查询、插入、删除和输出函数。

LinkList CreateList(void)建立带头结点链表
首先利用malloc申请头结点,置结束标志为0.通过0、1选择来结束建表。

三、调试过程(测试数据设计与测试结果分析) 四、总结
1、设计中遇到的问题及解决过程
2、设计中产生的错误及原因分析
3、设计体会和收获
五、评阅意见:。

数据结构实验报告之通讯录的实现

数据结构实验报告之通讯录的实现

数据结构实验报告之通讯录的实现一、实验题目利用线性表实现一个通讯录管理,通信录的数据格式如下:struct DataType{int ID; //编号char name[10]; //姓名char ch; //性别char phone[13]; //电话char addr[31]; //地址};要求:∙实现通讯录的建立、增加、删除、修改、查询等功能∙能够实现简单的菜单交互,即可以根据用户输入的命令,选择不同的操作。

∙能够保存每次更新的数据(选作)∙能够进行通讯录分类,比如班级类、好友类、黑名单等等(选作)∙编写测试main()函数测试线性表的正确性二、实验目的1、熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法。

2、掌握线性表的操作的实现方法。

3、运用线性表解决实际问题。

三、实验内容通过编写一个C++程序完成一个简易的通讯录管理系统,能够实现建立,增加,删除,修改,查找,浏览,输出,菜单等基本功能。

管理系统中每个元素含有成员的ID、姓名、性别、电话、地址等信息。

程序是使用链表的功能,通过一些算法简单的实现。

四、算法思路与主要代码1. 通信录管理结构:建立,增加,删除,修改,查找,浏览,菜单。

2.建立通讯录构造函数,建立头节点PHONEBOOK::PHONEBOOK(){first = new DataType;first->next = first->prior = first;first->ID = 0;}头插法,添加联系人1:在堆中建立新结点2:将 a[i]写入到新结点的数据域3:修改新结点的指针域4:修改头结点的指针域,将新结点加入链表中即 1:Node <T> * s=new Node <T> 2:s->data=a[i] 3:s->next=front->next; 4:front->next=s代码实现void PHONEBOOK::Insert(){DataType *data = new DataType;data->next = first->next;data->prior = first;first->next = data;data->next->prior = data;m++;data->ID = m;3.查找联系人按姓名查找查找是指用户输入要查找的联系人的姓名,系统该函数内找到该联系人,返回该联系人数据域的指针,在主函数中输出该联系人的全部信息。

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

数据结构实验报告
实验名称:实验一——线性表
学生姓名:大学霸
班级: xxxxxxxxxx
班内序号: xx
学号: xxxxxxxxxx
日期: 2012年11月1日
1.实验要求
实验目的:
1.学习指针,模板类,异常处理的使用;
2.掌握线性表的操作实现方法;
3.培养使用线性表解决实际问题的能力。

实验内容:
利用线性表实现一个通讯录管理,通信录的数据格式如下:struct DataType
{
int ID; 程序分析
编程完成通讯录的一般性管理工作如通讯录中记录的增加、修改、查找、删除、输出等功能。

每个记录包含姓名、电话号码、住址等个人基本信息。

用《数据结构》中的链表做数据结构结合c 语言基本知识编写一个通讯录管理系统。

本程序为使用方便,几乎不用特殊的命令,只需按提示输入即可,适合更多的用户使用。

对于建立通讯录管理系统,则需了解并掌握数据结构与算法的设计方法,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。

存储结构
存储结构:带头结点和尾结点的单链表
front
关键算法分析
本实验从整体上分为七大模块:(1)输入联系人信息;
(2)添加联系人信息;(3)查找联系人信息;(4)查看联系人信息;
(5
)删除
联系人信息;(6)修改联系人信息;(7)退出通讯录管理。

通讯录系统图
通讯录的建立
伪代码:
1.在堆中申请新的结点;
2.新节点的数据域为a[i];
3.将新节点加入到链表中;
4.修改尾指针;
5.全部结点插入后需要将终结结点的指针域设为空。

C++实现:
ContactBook::ContactBook(DataType a[],int n)找不到返回空指针。

C++实现:
程序运行结果
主函数流程图:
测试截图:1.建立通讯簿
2.添加新用户
3.查找用户
4.删除用户
5.查看所有用户
6.修改已有用户
7.退出通讯簿管理系统
4. 总结
通过这次的数据结构上机试验,让我回顾了有关线性表这一章的知识,学会使用线性表解决实际问题,让我有了更深的认识和了解,能灵活的使用,同时也发现了自己的不足,有些地方理解还不够深刻,出现了不少问题
调试时问题主要出在内存错误上,有时指针悬挂,有时尾指针指向错误,这些都需要一步步耐心的调试才能发现,以后编程我会注意改正这些
依照实验要求,在不同操作时加入了异常处理,比如要查找,删除,
修改用户时,如果输入的ID不存在,系统会报错并终止操作,提高了系统的操作性
这次设计的通讯簿管理系统还有些可以改进的地方,比如加入文件流后可以将每次输入的信息保存在后台的一个文件里,每次使用时读取这个文件内的信息,实现了保存每次更新的数据。

我对于文件流的使用还不是很熟悉,所以没来及加入这项功能;还有在查询这一块,只实现了按编号查询,还未加入按姓名查找。

附:所有源程序
#include<iostream>
using namespace std;
立我的通讯簿 "<<endl;
cout<<" 2.添加通讯簿的成员 "<<endl;
cout<<" 3.查找通讯簿的成员 "<<endl;
cout<<" 4.删除通讯簿的成员 "<<endl;
cout<<" 5.查看我的通讯簿 "<<endl;
cout<<" 6.修改通讯簿的成员 "<<endl;
cout<<" 0.退出通讯簿管理系统 "<<endl;
cout<<"-------------------------------"<<endl;
cout<<" 请选择:";
cin>>choose;
switch(choose)
{
case 1:
cout<<endl<<" 通讯簿建立成功"<<endl<<endl;
break;
case 2:
DataType x;
cout<<"请输入新用户的ID、姓名、性别(m/f)、手机号、住址"<<endl;
cin>>>>>>>>>>;
(x);
cout<<" 新用户添加成功!"<<endl<<endl;
break;
case 3:
int search;
cout<<" 请输入要查找用户的ID:";
cin>>search;
if(search)){
cout<<" 查找到的信息如下:"<<endl;
cout<<"-------------------------------"<<endl;
cout<<(search)->ID<<" "<<(search)->name<<" "<<(search)->ch<<" "<<(search)->phone<<"
"<<(search)->addr;
cout<<endl;
cout<<"-------------------------------"<<endl;
}
else
cout<<" 该用户不存在!"<<endl;
cout<<endl;
break;
case 4:
int del;
cout<<" 请输入要删除用户的ID: ";
cin>>del;
if(del)){
cout<<"-------------------------------"<<endl;
cout<<(del)->ID<<" "<<(del)->name<<" "<<(del)->ch<<" "<<(del)->phone<<" "<<
(del)->addr;
cout<<endl;
cout<<"-------------------------------"<<endl;
cout<<" 确定删除该用户(y/n): ";
char IsDel;
cin>>IsDel;
if(IsDel=='y')
(del);
else
cout<<" 取消删除!"<<endl;;
cout<<endl;}
else
cout<<" 用户不存在!"<<endl<<endl;
break;
case 5:
();
break;
case 6:
int mod;
cout<<" 请输入要修改用户的ID: ";
cin>>mod;
if(mod)){
DataType x;
cout<<"请输入修改后的ID、姓名、性别(m/f)、手机号、住址"<<endl;
cin>>>>>>>>>>;
(x,mod);
cout<<" 修改成功!"<<endl<<endl;;
}
else
cout<<" 该用户不存在!"<<endl<<endl;
break;
case 0:
cout<<" 退出成功!"<<endl;
break;
default:
cout<<" 输入有误!"<<endl<<endl;
};
}while(choose!=0);
}
实验报告总字数要求不少于1000字。

相关文档
最新文档