数据结构通讯录管理系统链表的实现
- 格式:doc
- 大小:601.50 KB
- 文档页数:22
c语⾔实现通讯录管理系统(⽤链表实现)题⽬:通讯录(通过链表实现)设计并实现⼀个简易的通讯录软件,管理个⼈通讯记录。
⼀条通讯记录可包括:姓名、⼯作单位、⼿机、住宅电话、E-Mail、家庭住址等(可⾃⾏增删,但不可过少)。
该系统应实现以下基本功能:(1)增加新的通讯记录。
(2)删除已有的通讯记录。
(3)修改已有的通讯记录。
(4)浏览全部或指定(如指定姓名、⼯作单位等)的通讯记录。
(5)合理组织排列各项功能,界⾯可使⽤键盘操作。
(6)以⽂件的形式存储数据。
说明:⼤⼀时的c语⾔课设,⽤链表实现⼀个通讯录管理系统,为了美观好看,花了很多时间调整齐度,记录⼀下⼤⼀时的作业。
其主要功能是对通讯录可输⼊,显⽰,插⼊,删除,最难是可保存,这个学⽂件的时候不怎么会。
内容我⾃⼰弄了7个,名字,性别,⼯作单位,⼿机,住宅电话,E-Mail,家庭住址(其他太多其实都是⼀样的,就懒得加了)。
主要运⽤到对指针中的链表的功能和使⽤要⽐较扎实,分部列写就可以了。
实现图⽚:附上代码:1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 typedef struct student5 {6char name[20];//名字7char wm[20];//性别8char work[100];//⼯作单位9char stel[20];//⼿机10char htel[20];//住宅号码11char mail[20];//E-Mail12char home[100];//家庭住址13struct student *next;14 }stu;15 stu *head;//头指针16void screen()//主菜单17 {18 printf("\n=======================================================\n");19 printf(" 欢迎来到通讯录管理系统\n\n");20 printf(" 1.输⼊数据 2.显⽰数据\n");21 printf(" 3.插⼊数据 4.删除数据\n");22 printf(" 5.查看数据 6.修改数据\n");23 printf(" 7.保存数据 8.返回主菜单\n");24 printf("\n~~~~~~输~~~~~~⼊~~~~~~9~~~~~~退~~~~~~出~~~~~~程~~~~~~序\n");25 }26void input()//输⼊数据27 {28int ans;//判断是否继续输⼊29 stu *p1,*p2;30 p1=(stu *)malloc(sizeof(stu));//申请内存来⽤31if(p1!=NULL)32 {33 printf("========输⼊数据========\n");34 head=p1;35while(1)36 {37 printf("名字:");38 scanf("%s",&p1->name);39 printf("性别:");40 scanf("%s",&p1->wm);41 printf("⼯作单位:");42 scanf("%s",&p1->work);43 printf("⼿机:");44 scanf("%s",&p1->stel);45 printf("住宅号码:");46 scanf("%s",&p1->htel);47 printf("E-Mail:");48 scanf("%s",&p1->mail);49 printf("家庭地址:");50 scanf("%s",&p1->home);51 printf("===================================\n");52 p2=p1;53 p1=(stu *)malloc(sizeof(stu));//申请下⼀个要⽤的空间54if(p1!=NULL)55 p2->next=p1;56 printf("请选择是否继续输⼊:1.继续 2.退出\n请选择:");//⽤户选择57 scanf("%d",&ans);58if(ans==1)//继续59continue;60else//退出61 {62 printf("========输⼊完毕========\n");63 p2->next=NULL;64free(p1);//将申请的的⽆⽤内存释放65break;66 }67 }68 }69 }70void look(stu *p1)//显⽰数据71 {72 printf("========显⽰数据========\n");73while(p1!=NULL)74 {75 printf("名字:%s\n",p1->name);76 printf("性别:%s\t",p1->wm);77 printf("⼯作单位:%s\t",p1->work);78 printf("⼿机:%s\t",p1->stel);79 printf("住宅号码:%s\t",p1->htel);80 printf("E-Mail:%s\t",p1->mail);81 printf("家庭住址:%s\n",p1->home);82 printf("=====================================\n");83 p1=p1->next;84 }85 printf("========显⽰完毕========\n");86 }87void insert()//插⼊数据88 {89int ans;//选择插⼊位置90char name[20];//插⼊者的名字91 printf("========插⼊数据========\n");92 stu *p1,*p2,*p3;93 p1=head;94 p3=(stu *)malloc(sizeof(stu));//申请内存95 p3->next=NULL;96 printf("请输⼊插⼊者的数据:\n");97 printf("名字:");98 scanf("%s",&p3->name);99 printf("性别:");100 scanf("%s",&p3->wm);101 printf("⼯作单位:");102 scanf("%s",&p3->work);103 printf("⼿机:");104 scanf("%s",&p3->stel);105 printf("住宅号码:");106 scanf("%s",&p3->htel);107 printf("E-Mail:");108 scanf("%s",&p3->mail);109 printf("家庭地址:");110 scanf("%s",&p3->home);111 printf("请选择插⼊位置:1.⾸位置插⼊ 2.尾部插⼊ 3.插到某⼈前⾯\n请选择:");112 scanf("%d",&ans);113switch(ans)114 {115case1://放到头指针116 p3->next=p1;117 head=p3;118break;119case2://放到尾部120while(p1->next!=NULL)121 p1=p1->next;122 p1->next=p3;123break;124case3://放到某⼈前⾯125 printf("请输⼊插到谁前⾯名字:");126 scanf("%s",name);127while(strcmp(name,p1->name)!=0)128 {129 p2=p1;130 p1=p1->next;131 }132 p2->next=p3;133 p3->next=p1;134break;135 }136 printf("========插⼊成功========\n");137 }138void deleted()//删除数据139 {140 stu *p1,*p2;141char name[20];//删除者名字142 printf("========删除数据========\n");143 printf("请输⼊要删除者的名字:");144 scanf("%s",name);145 p1=head;146if(head==NULL)//通讯录已经没数据了147 {148 printf("通讯录⾥什么也没有了。
浙江大学城市学院实验报告课程名称数据结构实验项目名称实验三线性表的应用---通讯录管理系统的设计与实现实验成绩指导老师(签名)日期一.实验目的和要求1、掌握线性结构数据问题的应用方法;2、掌握线性表的顺序存储结构及链表结构的综合应用与实现;3、了解一般信息系统的设计方式方法;二.实验内容1、设计并实现日常生活中通讯录的管理系统。
该系统需3位同学一组,按模块分工协作完成,系统具体功能基本需求描述如下:①输入数据建立通讯录表:在系统使用前先需要创建通讯录,可以一次输入(或文件导入)多个成员的通讯录信息,建立通讯录。
要求此表为顺序(如列表list)存储结构。
②查看所有通讯录信息:显示通讯录表中所有成员的通讯录信息。
③查询通讯录中满足要求的信息:可以根据不同方式查询,如按姓名查询、按姓氏查询、按编号查询等。
④新增通讯录信息:每次可添加一个新成员的通讯录信息。
⑤修改通讯录信息:修改通讯录中已有成员的信息。
⑥删除通讯录成员:删除通讯录表中已有的成员,但需要把删除的成员信息放到另一张被删成员表(回收站)中,以便错误操作后允许恢复。
该被删成员表要求采用单链表存储。
⑦恢复被删成员信息:一旦发现误删,则可以在被删成员表(回收站)中找到该成员,重新加入到通讯录表中。
系统实现要求:①通讯录表必须使用顺序(列表list)存储结构,被删成员表(回收站)必须使用单链表存储结构。
②通讯录信息至少包括:编号、姓名、电话1、电话2、邮箱、......等,其他可自行设置。
②用菜单方式选择相应功能,且各功能的有关实现通过调用各函数来实现。
③给出系统数据类型的定义、存储结构定义以及各个函数之间的调用关系。
④实验内容中设置的功能要求必须实现,此外可自行增加合适的功能,可作为额外的实验成绩进行加分:例如:●通讯录和被删成员数据可用文件保存,程序运行时可从文件读入相应数据,程序结束时可写入文件保存。
●通讯录分组,可自行考虑把通讯录成员进行分组,如同学组、亲戚组、同事组等。
《数据结构》课程设计报告书题目:通讯录管理系统系别:计算机科学与应用系学号:学生姓名:指导教师:完成日期:2012年5月28日1 问题描述(1)题目内容:通讯录管理。
(2)基本要求:利用单链表实现通讯录的建立、通讯者的插入、通讯者的删除、通讯者的查询以及通讯录的输出。
(3)设计目的:通过本次课程设计,了解通讯录的一些基本功能。
掌握利用单链表进行插入,查找,用关键字建立单链表。
2 需求分析经过本次的课程设计,我认为通讯录主要实现的功能如下:(1)添加信息:一个通讯录应该有其基本的添加功能。
在程序设计时,我通过一个具有添加功能的函数,实现了个人信息的添加,如:姓名,性别,电话号码,QQ号码,地址。
(2)删除信息:当你不需要某个联系人的信息时,可以直接将该人的信息删除。
(3)查找:一个通讯录应该具有令一基本功能就是查找,本设计时可以按联系人为关键字查找的,只要你输入要查找人的姓名或手机号码或QQ号码就可出来相应的个人信息。
(4)输出:一个通讯录应该具有输出所有联系人的功能,本设计按照次序可以从头到尾把通讯录中的所有联系人都输出,供自己查看。
(5)退出:当你做完你要做的事情之后,就可以退出该程序。
3 总体设计3.1 算法的定义LinkList Creat_LinkList()创建空单链表void Insert_LinkList(LinkList H)建立通讯录,录入联系人的信息,可以把联系人的姓名,性别,手机号,QQ号,地址录入系统。
void Locate_LinkList(LinkList H)按照联系人的姓名,手机号码,QQ号码查找通讯录中联系人的信息。
void Delete_LinkList(LinkList H)按照联系人的姓名,手机号码,QQ号码删除联系人的所有信息。
void print_LinkList(LinkList H)输出通讯录中的所有联系人的信息供使用者查看。
3.2 系统流程图图3-1通讯录管理功能图3.3 详细程序设计1)定义数据结构typedef struct Node //定义数据结构{char name[20];//姓名char sex[4]; //性别char tel[11];//电话号码char qq[13]; //qq号码char ad[100];//地址Node *next;//存放后继元素的地址}LNode,*LinkList;2)创建一个空的单链表LinkList Creat_LinkList(){//创建空单链表,入口参数无LinkList H;H=new LNode;if(H)//确认创建头结点创建是否成功,若成功,修改单链表头结点的指针域为0表空表{H->next=NULL;}return H;}3)向通讯录中插入联系人void Insert_LinkList(LinkList H){LinkList p;p=new LNode;if(!p){cout<<"不能插入!"<<endl;}cout<<"请输入你要插入的联系人信息:"<<endl;cout<<"姓名:"<<endl;cin>>p->name;cout<<"性别:"<<endl;cin>>p->sex;cout<<"手机号码:"<<endl;cin>>p->tel;cout<<"QQ号码:"<<endl;cin>>p->qq;cout<<"地址:"<<endl;cin>>p->ad;p->next=H->next;H->next=p;cout<<"插入成功"<<endl;}4)查询通讯录中某个联系人的信息void Locate_LinkList(LinkList H){int x;LinkList p=H->next;cout<<"你要通过哪种方式查询?"<<endl;cout<<"1.通过联系人姓名查询"<<endl;cout<<"2.通过联系人手机号码查询"<<endl;cout<<"3.通过联系人QQ号码查询"<<endl;cin>>x;char str[30];if(x==1){cout<<"请输入你要查询的联系人的姓名:";cin>>str;while(p && strcmp(p->name,str)!=0){p=p->next;}}if(x==2){cout<<"请输入你要查询的联系人的手机号码:";cin>>str;while(p&&strcmp(p->tel,str)!=0){p=p->next;}}if(x==3){cout<<"请输入你要查询的联系人的QQ号码:";cin>>str;while(p&&strcmp(p->qq,str)!=0){p=p->next;}}if(p==NULL){cout<<"没有找到你要查找的联系人的信息!"<<endl;}else{cout<<"你要找的联系人的信息为:"<<endl;cout<<"姓名:"<<p->name<<endl;cout<<"性别:"<<p->sex<<endl;cout<<"手机号:"<<p->tel<<endl;cout<<"QQ号码"<<p->qq<<endl;cout<<"地址"<<p->ad<<endl;}}5)删除通讯录中某个联系人的信息void Delete_LinkList(LinkList H){if(H->next==NULL){cout<<"通讯录为空,不能删除"<<endl;}else{int x;char str[30];LinkList p,q;p=H->next;cout<<"请输入你要删除的方式:"<<endl;cout<<"1.按照联系人的姓名删除"<<endl;cout<<"2.按照联系人的手机号码删除"<<endl;cout<<"3.按照联系人的QQ号码删除"<<endl;cin>>x;q=H;if(x==1){cout<<"请输入你要删除的联系人的姓名:"<<endl;cin>>str;while(strcmp(p->name,str)!=0){q=p;p=p->next;}}if(x==2){cout<<"请输入你要删除的联系人的手机号码:"<<endl;cin>>str;while(strcmp(p->tel,str)!=0){q=p;p=p->next;}}if(x==3){cout<<"请输入你要删除的联系人的QQ号码:"<<endl;cin>>str;while(strcmp(p->qq,str)!=0){q=p;p=p->next;}}if(p==NULL){cout<<"没有你要删除的联系人的记录"<<endl;}else{q->next=p->next;p->next=NULL;free(p);cout<<"该联系人已删除"<<endl;}}}6)输出所有联系人void print_LinkList(LinkList H){if(H->next==NULL){cout<<"通讯录为空"<<endl;}else{LinkList p;p=H->next;while(p!=NULL){cout<<"性别:"<<p->sex<<endl;cout<<"手机号:"<<p->tel<<endl;cout<<"QQ号码:"<<p->qq<<endl;cout<<"地址:"<<p->ad<<endl;p=p->next;}}}7)主函数void main(){int a;LinkList List;List=Creat_LinkList();do{cout<<"*****欢迎进入通讯录管理*****"<<endl;cout<<"*****添加联系人请按1*****"<<endl;cout<<"*****查找联系人请按2*****"<<endl;cout<<"*****删除联系人请按3*****"<<endl;cout<<"*****输出所有联系人请按4*****"<<endl;cout<<"*****退出请按0*****"<<endl;cout<<"请输入你的选择:"<<endl;cin>>a;switch(a){case 0:break;case 1:Insert_LinkList(List);break;case 2:Locate_LinkList(List);break;case 3:Delete_LinkList(List);break;case 4:print_LinkList(List);break;}cout<<"操作完毕,请再次选择!"<<endl;}while(a!=0);}3.4 测试运行程序,看到主界面。
数据结构——通讯录实验报告
《数据结构课程设计》实验报告
编号实验一实验项目名称通讯录管理
班学姓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、设计体会和收获
五、评阅意见:。
#i n c l u d e<s t d i o.h>#include <malloc.h>#include <stdlib.h>#include <string.h>struct txl{char n[10];char name[10];char sex [10];char tele[12];char address[100];struct txl *next;};typedef struct txl TXL;typedef struct txl * link;enum result {exit_ok};void menu_select()//主菜单{printf(" 欢迎进入通讯录管理系统\n");printf("********************************\n");printf(" 1.联系人添加\n");printf(" 2.联系人删除\n");printf(" 3.联系人修改\n");printf(" 4.联系人查找\n");printf(" 5.联系人总览\n");printf(" 0.退出通讯录管理系统\n");printf("********************************\n");}void is_malloc_ok(link *new_node){if((*new_node) == NULL){printf("Malloc error!");exit(-1);}}void create_link(link *head){(*head) = (link)malloc(sizeof(TXL));is_malloc_ok(head);(*head)->next = NULL;}void create_new_node(link *new_node){int i;*new_node = (link)malloc(sizeof(TXL));is_malloc_ok(new_node);printf("请输入编号:\n");scanf("%s",&(*new_node)->n);printf("请输入姓名:\n");scanf("%s",&(*new_node)->name);printf("请输入性别:\n");scanf("%s",&(*new_node)->sex);printf("请输入联系电话:\n");scanf("%s",&(*new_node)->tele);printf("请输入家庭地址:\n");scanf("%s",&(*new_node)->address);printf("联系人添加成功!\n");}insert_new_node(link *new_node,link *head){(*new_node)->next = (*head)->next;(*head)->next = (*new_node);}void add_new_node(link *head){link new_node;create_new_node(&new_node);insert_new_node(&new_node,head);}void display(link *head){int i = 1;link p = NULL;if((*head)->next == NULL){printf("通讯录为空!\n");return;}else{p = (*head)->next;while(p != NULL){printf("第%d个联系人的信息如下:\n",i);printf("序号:%s\n",p->n);printf("姓名:%s\n",p->name);printf("性别:%s\n",p->sex);printf("联系电话:%s\n",p->tele);printf("家庭地址:%s\n\n\n",p->address);p = p->next;i++;}}}void find(link *head){char n1[10],name1[10],tele1[12],address1[100];int i;link xz = (*head)->next;printf("1.按编号查询\n");printf("2.按姓名查询\n");printf("3.按联系电话查询\n");printf("请输入您想选择的查询方式:\n");scanf("%d",&i);if(i == 1){printf("请输入您想查询的编号:\n");scanf("%s",n1);if(xz == NULL){printf("通讯录为空!\n");return;}while(xz !=NULL){if(strcmp(xz->n,n1) == 0){printf("您想查询的联系人的信息如下:\n");printf("编号:%s\n",xz->n);printf("姓名:%s\n",xz->name);printf("性别:%s\n",xz->sex);printf("联系电话:%s\n",xz->tele);printf("家庭地址:%s\n",xz->address);return;}elsexz = xz->next;}printf("通讯录中无此人!\n");}if(i == 2){printf("请输入您想查询的姓名:\n");scanf("%s",name1);if(xz == NULL){printf("通讯录为空!\n");return;}while(xz != NULL){if(strcmp(xz->name,name1) == 0){printf("您想查询的联系人的信息如下:\n");printf("编号:%s\n",xz->n);printf("姓名:%s\n",xz->name);printf("性别:%s\n",xz->sex);printf("联系电话:%s\n",xz->tele);printf("家庭地址:%s\n",xz->address);return;}elsexz = xz->next;}printf("通讯录中无此人!\n");return;}if(i == 3){printf("请输入您想查询的联系电话:\n");scanf("%s",tele1);if(xz == NULL){printf("通讯录为空!\n");return;}while(xz != NULL){if(strcmp(xz->tele,tele1) == 0){printf("您想查询的联系人的信息如下:\n");printf("编号:%s\n",xz->n);printf("姓名:%s\n",xz->name);printf("性别:%s\n",xz->sex);printf("联系电话:%s\n",xz->tele);printf("家庭地址:%s\n",xz->address);return;}elsexz = xz->next;}printf("通讯录中无此人!\n");return;}}void change(link *head){int a;link p = (*head)->next;char name1[10];char tele1[12];char address1[100];printf("请输入您想修改的联系人信息:\n");printf("1.姓名\n");printf("2.联系电话:\n");printf("3.家庭地址:\n");scanf("%d",&a);if(a == 1){printf("请输入原姓名:\n");scanf("%s",name1);while( p != NULL){if((strcmp(p->name,name1)) == 0){printf("请输入新的姓名:\n");scanf("%s",&p->name);printf("联系人修改成功!\n");return;}elsep = p->next;}printf("通讯录中没有此人!\n");return;}if(a == 2){printf("请输入原联系电话:\n");scanf("%s",tele1);while(p != NULL){if((strcmp(p->tele,tele1)) == 0){printf("请输入新的联系电话:\n");scanf("%s",&p->tele);printf("联系人修改成功!\n");return;}elsep = p->next;}printf("通讯录中没有此人!\n");}if(a == 3){printf("请输入原家庭地址:\n");scanf("%s",address1);while(p != NULL){if((strcmp(p->address,address1)) == 0){printf("请输入新的家庭地址:\n");scanf("%s",&p->address);printf("联系人修改成功!\n");return;}elsep = p->next;}printf("通讯录中没有此人!\n");}}void delete(link *head){link p1 = (*head);link p2 = (*head)->next;char name1[10];printf("请输入您要删除的联系人姓名:\n");scanf("%s",name1);if((*head)->next = NULL){printf("通讯录为空!\n");return;}while((strcmp(p2->name,name1) != 0)&&p2->next !=NULL) {p1 = p2;p2 = p2->next;}if(p2->next == NULL ){if(strcmp(p2->name,name1) == 0){p1->next = NULL;printf("该联系人已删除!\n");free(p2);}else{printf("通讯录中无此人!\n");}}else{p1->next = p2->next;free(p2);}}void exit_link(){printf("************************\n");printf(" 再见!\n");exit(exit_ok);}void switch_function(link *head){int num;scanf("%d",&num);switch(num){case 1:add_new_node(head); break;case 2:delete(head);break;case 3:change(head);break;case 4:find(head);break;case 5:display(head);break;case 0:exit_link();break;default:printf("该功能不存在,请重新输入!");break;}}int main(){link head = NULL;link new_node = NULL;create_link(&head);menu_select();while(1){printf("请输入您想要的功能:\n");switch_function(&head);}return 0;}。
一、通讯录管理系统1.题目要求通讯录一般包括通讯者的编号、姓名、性别、电话及地址等信息,设计一个通讯录要求实现通讯者的插入、查询、删除、更新、排序操作。
struct node{char num[5]; //编号char name[8]; //姓名char sex; //性别char tel[8]; //电话char address[100]; //地址};2.应用程序功能开始运行时界面如下:通讯录链表建立界面如下:通讯录链表插入界面如下:通讯录链表查询界面如下:按编号查询界面如下:按姓名查询编号如下:通讯录链表删除界面如下:通讯录链表输出界面如下:3.输入数据类型、格式和内容限制输入数据类型为字符型,但在输入过程中不可包含空格,如输入地址过程中不可出现空格!4.主要算法模块描述流程图:5.源程序代码#include<stdio.h>#include "iostream"int flag1=0;#include "string.h"#include "stdlib.h"#include "windows.h"using namespace std;typedef struct { //通讯录结点类型char num[5]; //编号char name[9]; //姓名char sex[3]; //性别char phone[13]; //电话char addr[31]; //地址} DataType;typedef struct node { //结点类型定义DataType data; //结点数据域struct node *next; //结点指针域} ListNode;typedef ListNode *LinkList;LinkList head;ListNode *p;LinkList CreateList(void);void InsertNode(LinkList head,ListNode *p);ListNode *ListFind(LinkList head);void DelNode(LinkList head);void PrintList(LinkList head);/*******尾插法建立带头结点的通讯录链表算法*******/LinkList CreateList(void){LinkList head=(ListNode *)malloc(sizeof(ListNode)); //申请头结点ListNode *p,*rear;char flag='y'; //int flag=0; //结束标志置0rear=head; //尾指针初始指向头结点while (flag=='y'){p=(ListNode *)malloc(sizeof(ListNode)); //申新结点printf("编号(4) 姓名(8) 性别电话(11) 地址(31)\n");printf("-----------------------------------------------\n");printf("\n添加的编号:\n");cin>>p->data.num;printf("\n添加的姓名:\n");cin>>p->;printf("\n性别:\n");cin>>p->data.sex;printf("\n电话:\n");cin>>p->data.phone;printf("\n地址:\n");cin>>p->data.addr;rear->next=p; //新结点连接到尾结点之后rear=p; //尾指针指向新结点printf("继续建表?(y/n):");cin>>flag;rear->next=NULL; //终端结点指针置空return head; //返回链表头指针}/*********在通讯录链表head中插入结点************/void InsertNode(LinkList head,ListNode *p){ListNode *p1,*p2;p1=head;p2=p1->next;while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0){p1=p2; //p1指向刚访问过的结点p2=p2->next; //p2指向表的下一个结点}p1->next=p; //插入p所指向的结点p->next=p2; //连接表中剩余的结点}/**********有序通讯录链表的查找****************/ListNode *ListFind(LinkList head){ListNode *p;char num[5];char name[9];char pp;printf("==================\n");printf(" a. 按编号查询\n");printf(" b. 按姓名查询\n");printf("==================\n");printf(" 请选择:");p=head->next;cin>>pp;if (pp=='a'||pp=='A'){printf("请输入要查找者的编号:");cin>>num;while (p&&strcmp(p->data.num,num)<0) p=p->next;if ((p==NULL)||strcmp(p->data.num,num)>0) p=NULL; //没有查到要查找的通讯信息}if (pp=='b'||pp=='B'){printf(" 请输入要查找者的姓名:");cin>>name;while(p&&strcmp(p->,name)!=0) p=p->next;}return p;}/********通讯录链表上的结点删除*****************/void DelNode(LinkList head){char cho;ListNode *p,*q;p=ListFind(head); //调用查找函数if (p==NULL){printf("没有查到要删除的通讯者!\n");return;}else if(p!=NULL){printf("真的要删除该结点吗?(y/n)");cin>>cho;if (cho=='y'||cho=='Y'){q=head;while ((q!=NULL)&&(q->next!=p)) q=q->next;q->next=p->next; //删除结点free(p); //释放被删结点空间printf("删除成功!\n");}}}/********通讯录链表的输出函数**********/void PrintList(LinkList head){ListNode *p;p=head->next;printf("编号姓名性别联系电话地址\n");printf("--------------------------------------------------------------------------------\n");while (p!=NULL){printf("%s,%s,%s,%s,%s\n",p->data.num,p->,p->data.sex,p->data.phone,p->data.a ddr);printf("---------------------------------------------------------------------------------\n");p=p->next; //后移一个结点}}void main(){int choice,j=1;while(j){printf("\n\n\n\n\n");printf("\t\t\t\t通信录链表\n");printf("\n\t\t\t******************************");printf("\n\t\t\t* 1--- 通信录链表建立*");printf("\n\t\t\t* 2--- 通信录链表插入*");printf("\n\t\t\t* 3--- 通信录链表查询*");printf("\n\t\t\t* 4--- 通信录链表删除*");printf("\n\t\t\t* 5--- 通信录链表输出*");printf("\n\t\t\t* 0--- 退出管理系统*");printf("\n\t\t\t******************************");printf("\n\t\t\t请选择菜单号(0--5):");cin>>choice;getchar();switch(choice){case 1:{printf("**********************************\n");printf("* 通讯录链表的建立*\n");printf("**********************************\n");head=CreateList( );flag1=1;system("cls");break;}case 2:{if(flag1!=1) {printf("请先建立表!");Sleep(1500); system("cls");}printf("**********************************\n");printf("* 通讯者信息的添加*\n");printf("**********************************\n");printf("编号(4) 姓名(8) 性别(3) 电话(11) 地址(31)\n");printf("************************************* \n");p=(ListNode *)malloc(sizeof(ListNode)); //申请新结点printf("\n添加的编号:\n");cin>>p->data.num;printf("\n添加的姓名:\n");cin>>p->;printf("\n性别:\n");cin>>p->data.sex;printf("\n电话:\n");cin>>p->data.phone;printf("\n地址:\n");cin>>p->data.addr;InsertNode(head,p);system("cls");break;}case 3:{if(flag1!=1) {printf("请先建立表!");Sleep(1500);system("cls");}else{printf("***********************************\n");printf("* 通讯录信息的查询*\n");printf("***********************************\n");p=ListFind(head);if (p!=NULL){printf("编号姓名性别联系电话地址\n");printf("--------------------------------------------------\n");printf("%s,%s,%s,%s,%s\n",p->data.num,p->,p->data.sex,p->data.phone,p->data.a ddr);printf("---------------------------------------------------\n");}else printf("没有查到要查询的通讯者!\n");}break;}case 4:{if(flag1!=1) {printf("请先建立表!"); Sleep(1500);}else{printf("***********************************\n");printf("* 通讯录信息的删除*\n");printf("***********************************\n");DelNode(head); //删除结点}break;}case 5:{if(flag1!=1) {printf("请先建立表!"); Sleep(1500);}else{printf("************************************\n");printf("* 通讯录链表的输出*\n");printf("************************************\n");PrintList(head);}break;}case 0:j=0;system("cls");break;default:printf("\t\t\n 输入有错,请重新输入!\n");Sleep(1500);system("cls");break;}}}。
数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。
本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。
功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。
链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。
在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。
算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。
查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。
删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。
更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。
系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。
总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。
在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。
通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。
实验报告实验名称单链表通讯录一、实验目的1.熟练掌握线性表的类型定义方法、存储方法及其基本运算(元素的插入、删除等)的实现方法,培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计的能力。
二、实验内容1.用带头结点的单链表作存储结构,实现通讯录单链表的建立、查询、修改、排序、合并、统计、结点的查找、移动以及通讯录链表的输出功能。
三、实验要求设计要求:为了实现通讯录管理的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。
主控菜单设计要求:菜单内容程序运行后,给出9个菜单项的内容和输入提示:1.创建通讯录链表;2.将姓名为Name的好友的手机号改为MTel;3.输出通讯录;4.插入姓名为Name、手机号为MTel的好友信息,将链表中姓名≤Name的结点放到该结点的前面,将姓名>Name的结点放到该结点后面5.将通讯录按照好友姓名进行非递减排序;6.将两个按姓名非递减排序的通讯录合并为一个,姓名相同且手机号相同的好友记录在结果中只保留一个;7.统计籍贯是“大连”的好友人数;8.将通讯录中倒数第k个结点之后的所有结点移到头结点后面(保持结点间的先后顺序);9.将通讯录的正中间位置结点之后的全部结点倒置;0.退出管理系统请选择0—9:菜单设计要求:使用数字0—9来选择菜单项,其它输入则不起作用。
四、实验概要设计1)功能框图五. 使用说明1.运行环境:VC6.02.首先选择主控菜单中的操作1,即建表,然后进行其它操作.六.实验截图(见下页)七实验体会附源程序代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#define Newsp (TxlList *)malloc(sizeof(struct TxlList))typedef struct TxlList{char Name[16]; //姓名char MTel[11]; //手机号char Tel[9]; //固定电话char EMail[16]; //邮箱地址char BornAddr[20]; //籍贯(值域:"北京"、"上海"、"大连"等等,只写城市名称)char BroadN[50]; //博客名struct TxlList *next; //指针域}TxlList, *TxlLink;void Lbuild1(TxlLink &T){//创建文件FILE *fp;TxlLink q;q=Newsp;q=T;int NUM;char filename[20];printf("\n*请输入要创建的通讯录名:\n");gets(filename);if ((fp=fopen(filename, "wb"))==NULL) { /*以写方式在当前目录打开(新建)文件*/printf("can't open file!!!\n");exit(0); //如果文件无法打开,关闭已经打开的其它文件,结束程序。
数据结构通讯录管理系统报告数据结构通讯录管理系统报告⒈系统介绍⑴目的和背景本通讯录管理系统旨在提供一个便捷的方式来管理个人联系人信息。
用户可以使用该系统添加、编辑和删除联系人信息,并实现相关功能,如搜索、排序等。
⑵功能概述本系统主要包含以下功能:●添加联系人:用户可以输入联系人的姓名、方式号码、电子邮件等信息来添加新的联系人。
●编辑联系人:用户可以对已存在的联系人进行信息的修改或更新。
●删除联系人:用户可以选择删除指定联系人以删除其相关信息。
●搜索联系人:用户可以根据姓名或方式号码进行联系人的快速搜索。
●排序联系人:用户可以对联系人按照姓名或方式号码等属性进行升序或降序排列。
●显示联系人:用户可以查看已存储的所有联系人信息。
⑶系统架构本系统基于数据结构的链表实现,通过使用链表结构来存储所有的联系人信息。
每个联系人都是链表的一个节点,包含姓名、方式号码等属性,以及指向下一个联系人的指针。
⒉系统设计⑴数据结构设计本系统使用链表来存储联系人信息。
链表的每个节点包含以下数据项:●姓名:联系人的姓名,类型为字符串。
●方式号码:联系人的方式号码,类型为字符串。
●电子联系人的电子邮件地质,类型为字符串。
●下一个节点的指针:指向下一个联系人节点的指针,类型为链表节点指针。
⑵系统模块设计本系统包含以下模块:●菜单模块:显示主菜单和相应的选项,接受用户输入并调用其他模块执行相应的操作。
●添加模块:添加新的联系人信息,包括姓名、方式号码、电子邮件等。
●编辑模块:修改已存在联系人的信息,如姓名、方式号码、电子邮件等。
●删除模块:删除指定联系人的信息。
●搜索模块:根据指定的姓名或方式号码搜索联系人信息。
●排序模块:按照姓名或方式号码等属性对联系人信息进行排序。
●显示模块:显示当前存储的所有联系人信息。
⒊系统实现⑴编程语言和工具本系统使用C++编程语言实现,使用了链表和相关的指针操作来实现联系人管理功能。
⑵算法设计●添加联系人:通过创建新的链表节点并将其插入到链表末尾来实现联系人的添加功能。
数据结构课程设计通讯录管理系统一、系统需求分析通讯录管理系统的主要目标是提供一个方便、高效的方式来管理联系人信息。
具体需求包括: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;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。
链表实现c语⾔通讯录管理系统,C++链表实现通讯录管理系统⽤数据结构⾥⾯线性结构的链表实现,供⼤家参考,具体内容如下⽂件操作未写有登录操作,复制源码需要更改登录模块的密码⽂件存放位置使⽤VS2017编译器需要保留开头:#define _CRT_SECURE_NO_WARNINGS#define _CRT_SECURE_NO_WARNINGS#include "iostream"#include "cstdio"#include "fstream"#include "stdlib.h"#include "String"#include "iomanip"#include "windows.h"#define LEN 100using namespace std;using std::cin;using std::cout;using std::endl;using std::ifstream;using std::ofstream;using std::ios;using std::cerr;using std::string;using std::setw;typedef struct LNode {char num[10];char name[20];char telNum[12];char qq[10];struct LNode *next;}LNode,*LinkList;int n = 0;LinkList SearchName(LinkList L);//按姓名查找LinkList SearchNum(LinkList L);//按学号查找void DelLNode(LinkList &L,LinkList p);//删除p结点void PrintLNode(LinkList p);//打印结点void PrintList(LinkList L);//打印表/*----------------系统函数----------------*/void CreateLinkList(LinkList &L);//创建链表void DelName(LinkList &L);//按姓名删除通讯录成员void DelNum(LinkList &L);//按学号删除通讯录成员void saveRecord(LinkList L);//存储信息void loadRecord(LinkList &L);//加载信息/*--------------------------------------*/void Secret();void fun();void ver();void yanshi(char *p);void clear();void header();void menu() {LinkList L=NULL;int select;do {system("cls");printf("\t\t\t Welcome to the address book information management system!\n\n\n"); printf("\t\t\t\t***************************************************\n");printf("\t\t\t\t * │1.InitList 2.Add Message │ *\n");printf("\t\t\t\t * │ │ *\n");printf("\t\t\t\t * │3.Search Message 4.Save File │ *\n");printf("\t\t\t\t * │ │ *\n");printf("\t\t\t\t * │5.Sort Static 6.Load Message │ *\n");printf("\t\t\t\t * │ │ *\n");printf("\t\t\t\t * │7.Display Message 8.Delete Message│ *\n");printf("\t\t\t\t***************************************************\n");cout << endl;yanshi((char *)"\t\tPlease choose the mode of operation(1~8):\n");/* cout << "\t\tPlease choose the mode of operation(1~8):" << endl;*/cin >> select;switch (select) {case 8:cout << "Please select the deletion method:\n1.Delete by student number 2.Delete by name\n" << endl; int x;cin >> x;switch (x) {case 1:DelNum(L);break;case 2:DelName(L);break;}case 6:loadRecord(L);break;case 5:break;case 4:saveRecord(L);break;case 3:clear();cout << "Please select a search method:\n1.Find by student number 2.Find by name\n" << endl;int a;cin >> a;switch (a) {{LinkList aa = SearchNum(L); header();PrintLNode(aa);cout << "\n\n\n成功!" << endl; system("pause");menu();}break;case 2:clear();{LinkList b = SearchName(L); header();PrintLNode(b);cout << "\n\n\n成功!" << endl; system("pause");menu();break;}}break;case 1:InitList(L);break;case 9:break;case 7:PrintList(L);break;case 2:CreateLinkList(L);cout << endl << endl << endl;cout << "The programe is over!" << endl << endl << endl; Sleep(2000);exit(0);break;}} while (select != 8);}int main() {fun();ver();//版本信息Secret();//密码登录menu();return 0;}//初始化表void InitList(LinkList & L){L = new LNode;//申请头结点L->next= NULL;}//插⼊⼀条信息void InsertLNode(LinkList & L, LNode *s){s->next = L->next;L->next = s;}//按姓名查找LinkList SearchName(LinkList L){char name[20];cout << "请输⼊要查找的姓名:" << endl;while (p) {//如果找到,退出循环,返回pif (strcmp(p->name, name) == 0) break;elsep = p->next;}return p;}//按学号查找LinkList SearchNum(LinkList L){char num[10];cout << "请输⼊要查找的学号:" << endl; cin >> num;LinkList p = L->next;while (p) {//如果找到,退出循环,返回pif (strcmp(p->num, num) == 0) break;elsep = p->next;}return p;}//删除节点void DelLNode(LinkList &L,LinkList p) {LinkList s=NULL, q;q = L->next;//将s指向p前⾯的⼀个结点while (q&&q!=p) {}s->next = q->next;delete q;}//打印⼀条信息void PrintLNode(LinkList p){printf("%15s", p->num);printf("%15s", p->name);printf("%15s", p->telNum);printf("%15s\n",p->qq);}//打印通讯录void PrintList(LinkList L){clear();header();LinkList p = L->next;while (p) {PrintLNode(p);p = p->next;}system("pause");}//添加信息void CreateLinkList(LinkList & L) {char ans = 'y';n = 0;while (ans=='y'||ans=='Y') { system("cls");LNode *p = new LNode;cout << "请输⼊姓名:" << endl;cin >> p->name;cout << "请输⼊电话号码:" << endl;cin >> p->telNum;cout << "请输⼊QQ号:" << endl;cin >> p->qq;InsertLNode(L,p);n++;cout<getchar();ans=getchar();}system("pause");}//按姓名删除void DelName(LinkList &L){char name[20];LinkList p;cout << "请输⼊要删除的学⽣姓名:" << endl; cin >> name;p = SearchName(L);if (p) {DelLNode(L,p);}system("pause");}//按学号删除void DelNum(LinkList & L){char num[20];LinkList p;p = SearchName(L);if (p) {DelLNode(L, p);}system("pause");}//存储信息void saveRecord(LinkList L){FILE *fp=NULL;int count = 0;if ((fp=(fopen("student.dat","wb")))==NULL) { cout << "Can't open this file!" << endl;Sleep(3000);}LinkList q = L->next;while (q) {fwrite(q, sizeof(LNode), 1, fp);count ++;q = q->next;}fclose(fp);cout << "Save the file successfully!" << endl; getchar();}//加载信息void loadRecord(LinkList & L){FILE *fp=NULL;int count = 0;if ((fp=(fopen("student.dat", "rb"))) == NULL) { cout << "Can't open this file!" << endl;LinkList p=NULL;while(1){p = new LNode;if (fread(p, sizeof(LNode), 1, fp) > 0) {InsertLNode(L,p);count++;}else {break;}}fclose(fp);cout << endl << endl << "Load "<Sleep(2200);}//控制台样式void fun() {system("color 2a");system("title 学⽣通讯录信息管理系统");}//版本信息void ver(){yanshi((char*)"\t \3\3\3\3\3\3\3欢迎使⽤通讯录信息管理系统\3\3\3\3\3\3\3\n\n\n\n"); cout << "\t 学⽣通讯录信息管理系统\n\n\n\n\n";cout << "\t\t version 1.0\n\n\n\n\n";cout << "\t\t xxxxxxxxx 某某某\n\n\n\n\n";cout << "\t\t Loading......\n\n" << endl;Sleep(3000);system("cls");}//延时输出while (1) {if (*p != 0)cout << *p++;elsebreak;Sleep(50);}}//清屏void clear(){system("cls");}//表头void header(){printf("%15s%15s%15s%15s\n","学号","姓名","电话","QQ");}/*--------------------------------登录模块----------------------------------*//*--------------------------------登录模块----------------------------------*//*--------------------------------登录模块----------------------------------*/struct UsrInfo//⽤户名的账户和密码信息{char UsrName[20];char Psword[20];};/*注意我的⽂件中⽤户名是⼀⾏,密码是⼀样。
数据结构-链表(⼆)-通讯录-C++实现通讯录的元素是⼈,所以需要新建⼀个Person类作为链表每个Node的元素。
并且为了正常输出,Person还需要⾍重载⼀些运算符,包括输出<<,判等==main函数⾥也要写⼀些辅助函数来获取信息。
链表本⾝实现部分不需要修改太多,把原来的的int型元素改为Person类型即可代码如下//Person.h#pragma once#include<iostream>#include<string>using namespace std;class Person{friend ostream& operator<<(ostream& out,Person &p){out << "Name: "<<<<"---" <<"Pnone number: "<< p.phone << endl;return out;}public:Person(string na, int num);Person();~Person();bool operator ==(Person &p){if ((this->name == ) && (this->phone == p.phone)){return true;}else{return false;}}string name="张三";int phone=0;private:};//Person.cpp#include"Person.h"Person::Person(string na, int num):name(na),phone(num){}Person::Person(){}Person::~Person(){}//Node.h#pragma onceusing namespace std;#include<iostream>#include"Person.h"class Node{public:Node(Person a);Node();~Node();Person person;Node* next;private:};//Node.cpp#include"Node.h"Node::Node(Person a):person(a){}Node::Node(){}Node::~Node(){}//List.h#pragma once#include<iostream>using namespace std;#include"Node.h"#define __debug__#ifdef __debug__#endifclass List{public:List();//~List();//bool get_add_head(Node* e);//在头节点后⾯插⼊bool get_add_tail(Node* e);//在尾节点后⾯插⼊void get_traverse();//遍历int get_length();//获取长度bool get_empty();//判空void get_clear();//清空线性表int get_ele_num(Node* p);//获取与传⼊参数值相同的链表中元素的序号 bool get_i_ele(int e, Node* value);//获指定位序的元素void get_delete(int location);//删除某位置元素bool get_add(int location, Node* e);//添加在某位置元素bool get_pre(Node* e, Node* pre);//获取前驱bool get_post(Node* e, Node* pos);//获取后继private:Node* node;//头节点int length;};//List.cpp#include"List.h"List::List(){length = 0;node = new Node;node->="zhangsan";node->person.phone = 0;node->next = NULL;}List::~List(){get_clear();delete node;node = NULL;}bool List::get_add_head(Node* e){Node* c_node = new Node;c_node=node->next;Node* new_node = new Node;if (new_node == NULL){return false;}new_node->person = e->person;new_node->next = c_node;node->next = new_node;length++;#ifdef __debug__cout << node->next->person << endl;#endifreturn true;}bool List::get_add_tail(Node* e){Node* c_node = new Node;c_node = node;while (c_node->next!=NULL){c_node = c_node->next;}Node* new_node = new Node;if (new_node == NULL){return false;}new_node->person = e->person;new_node->next = NULL;c_node->next = new_node;length++;#ifdef __debug__cout << c_node->next->person << endl;#endifreturn true;}void List::get_traverse(){Node* c_node = new Node;c_node = node->next;while (c_node != NULL){cout << c_node->person << endl;c_node = c_node->next;}}//遍历int List::get_length(){return length;}//获取长度bool List::get_empty(){return length == 0 ? true : false;}void List::get_clear(){Node* c_node = new Node;c_node = node;while(c_node->next != NULL){Node* new_node = new Node;new_node=c_node->next;delete c_node;//清除指向的内容c_node = new_node;}length = 0;node->next = NULL;//易错,勿忘!}//清空线性表int List::get_ele_num(Node* p)//获取元素的位序{Node* c_node = new Node;c_node=node;int count = 1;while (c_node->next != NULL){c_node = c_node->next;if (c_node->person == p->person){return count;}else{count++;}}return -1;}bool List::get_i_ele(int e, Node* value){if (e <1 || e > length){cout << "Invalid num!" << endl;return false;}Node* c_node = new Node;c_node = node;for (int i = 0; i <e; i++){c_node = c_node->next;}value->person = c_node->person;#ifdef __debug__cout << c_node->person << endl;#endifreturn true;}//获指定位序元素的值//void List::get_delete(int location){if (location<1 || location>length ){cout << "invalid num!!" << endl;}else{Node* c_node = new Node;c_node = node;Node* c_node_before = new Node;for (int i = 0; i < location; i++)//遍历到了location对应的位置,与增加元素有所不同,需要注意! {c_node_before = c_node;c_node = c_node->next;}c_node_before->next = c_node->next;length--;}}//某位置删除元素//bool List::get_add(int location, Node* e){if (location<1 || location>length){cout << "Invalid num!" << endl;return false;}else{Node* c_node = new Node;c_node=node;for (int i = 0; i < (location-1); i++){c_node = c_node->next;}//此时是遍历到了(location-1)那个元素的位置,然后在其后⾯插⼊新元素则是第location个元素。
一、问题描述设计一个计算机程序,实现通讯录管理。
1.设计一个含有6个菜单项的主控菜单,这6个菜单项的内容和输入提示如下:1 通讯录链表的建立2 通讯者结点的插入3 通讯者结点的查询4 通讯者结点的删除5 通讯录链表的输出0 退出管理系统请选择0~5:2.使用数字0~5来选择菜单项,其它输入则不起作用。
#include<stdio.h>#include<stdlib.h>#include<string.h>struct detail{char name[20]; //定义了姓名为char型数组char address[20]; //定义了地址为char型数组char zip[20]; //定义了邮编为char型数组char telephone[20];};typedef struct detail elemtype;typedef struct node{ elemtype data;struct node *next;}node,*Link;void Initlist(){ Link L;L=(Link)malloc(sizeof(node));L->next=NULL;printf("初始化成功!");}void print(Link p){ printf("-------------------------\n");printf("姓名:%s\n",p->);printf("地址:%s\n",p->data.address);printf("邮编:%s\n",p->data.zip);printf("电话:%s\n",p->data.telephone);printf("-------------------------\n");}void Print(Link p){while(p->next!=NULL){p=p->next;print(p)}printf("输出完毕!\n");}Link Create(Link L){Link r;//定义链表的尾指针,比较节省内存空间int flag=1;r=L; //尾指针指向了头指针Link s;elemtype x;while(flag) //当为真时,不断循环{if(flag==1){s=(node *)malloc(sizeof(node));//建立新结点,为新结点分配存储空间s->next=NULL;printf("请输入成员信息!\n");printf("输入姓名:\n");scanf("%s",);printf("输入地址:\n");scanf("%s",x.address);printf("输入邮编:\n");scanf("%s",x.zip);printf("输入电话:\n");scanf("%s",x.telephone);s->data=x; //把x存入s结点的数据域r->next=s; //修改头插法s->next=L->next;L->next=s;r=s; //修改指针,完成插入操作}else printf("\n 指令不正确! \n");printf("继续加载信息请按'1',否则按'0': \n");scanf("%d",&flag);}return L;void Insert(Link L){ Link p,r;r=L;while(r->next){r=r->next;}p=(Link)malloc(sizeof(node));printf("请输入成员信息!\n");printf("输入姓名:\n");scanf("%s",p->);printf("输入地址:\n");scanf("%s",p->data.address);printf("输入邮编:\n");scanf("%s",p->data.zip);printf("输入电话:\n");scanf("%s",p->data.telephone);p->next=NULL;r->next=p;p=r;printf("插入成功!\n");}void Searchx(Link L)//按姓名查找{Link p=NULL;p=L->next;elemtype x;printf("请输入姓名:");scanf("%s",);while(p!=NULL){if(strcmp(p->,)==0){printf("找到了要查找的姓名\n");printf("打印如下!\n");print(p);p=p->next;}else p=p->next;}if(p==NULL){printf(" \n 查找完毕\n");}void Searchd(Link L)//DIANHUA{Link p=NULL;p=L->next;elemtype x;printf("请输入电话:");scanf("%s",x.telephone);while(p!=NULL){if(strcmp(p->data.telephone,x.telephone)==0)//看输入的信息是否与表里信息匹配{printf("找到了\n");printf("打印如下!\n");print(p);p=p->next;}else p=p->next;}if(p==NULL){printf(" \n 查找完毕\n");}}void Search(Link L){int i,flag=1;printf("\n---------------------------------------------------\n");printf("\n---------- 选择查找条件----------------\n");printf("\n---------- 1.按姓名 2.按电话0.退出----------\n");printf("\n---------------------------------------------------\n");while(flag){ printf("请选择操作0~2: \n");scanf("%d",&i);switch(i){case 1:Searchx(L); break;case 2:Searchd(L);break;case 0:flag=0; break;default:printf("输入错误,请选择操作:\n");}}}int Delete(Link L){Link p=L->next;Link p1=L;char name[10];printf("请输入要删除的姓名:");scanf("%s",name);while(p!=NULL){if(strcmp(name,p->)==0){printf("找到了删除的姓名\n");p1->next=p->next;free(p);printf("删除成功!\n");printf("打印删除后的通讯录全体成员!\n");Print(L);break;}p=p->next;p1=p1->next;}return 1;}void main(){int i;Initlist();node L;printf("\n---------------------------------------------------\n");printf("\n---------- 通讯录系统----------------\n"); printf("\n---------------------------------------------------\n");printf("\n---------- 1 创建 2 插入----------------\n"); printf("\n---------- 3 查找 4 删除----------------\n"); printf("\n---------- 5 打印0 退出----------------\n"); printf("\n---------------------------------------------------\n");while(1){ printf("------------------------------------------\n");printf("1.创建2.插入3.查找4.删除5.打印0.退出\n");printf("------------------------------------------\n");printf("请选择操作0~5:");scanf("%d",&i);switch(i){case 1:printf("Create(L)\n");Create(&L); break;case 2:printf("Insert(L)\n"); Insert(&L); break;case 3:printf("Search(L)\n");Search(&L); break;case 4:printf("Delete(L)\n");Delete(&L); break;case 5:printf("Print(L)\n"); Print(&L); break;case 0:exit(1); break;default:printf("输入错误,请选择操作:\n");}}}。
实验课程名称数据结构课程设计
专业班级 10级计科(1)班
学生姓名
学号 ***********
指导教师冯韵老师
2012至2013学年第一学期 2012年9月2日
《通讯录管理链表的实现》实验报告2012至2013学年第一学期
第一章概述
本课程设计的目的
本课程设计可加深对课堂理论学习的理解,增强动手能力,以培养学生合作的能力,为毕业设计作好实践环节上的准备。
通讯录系统是在学校常见的计算机信息管理系统。
它的主要任务是对个人信息进行管理,如学生信息的输入、查询、修改、增加、删除,迅速准确地完成各种学生信息的统计和查询。
通讯录管理系统是每一个用户管理通讯录的不可缺少的一个管理信息系统,它的内容对于用户的管理者来说是至关重要的,所以通讯录管理系统应该能够为每一个用户的管理者提供充足的信息和快捷的查询手段大大的方便用户合理的管理通讯录。
随着科学技术的不断提高,计算机科学日渐成熟,网上通讯工具的迅速发展其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对通讯录进行管理,具有着手工管理所无法比拟的优点如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高通讯录管理的效率,也是用户理财的科学化、正规化管理,与先进科学技术接轨的重要条件。
因此开发这样一套管理软件成为很有必要的事情对于我们即将计算机专业毕业的学员来说也是一次将计算机应用于现实管理的一次很有意义的实践活动。
开发的意义
计算机已经成为我们学习和工作的得力助手使用其可方便的管理
通讯录今天计算机的价格已经十分低廉性能却有了长足的进步。
它已经被应用于许多领域。
现在我国的通讯录管理水平还停留在纸介质的基础上这样的机制已经不能适应时代的发展因为它浪费了许多人力和物力在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。
我作为一个计算机应用专业的毕业生希望可以在这方面有所贡献。
改革的总设计师邓小平同志说过“科学技术是第一生产力”我希望能用我所学的知识编制出一个实用的程序来帮助用户进行财务管理。
开发这一系统的好处大约有以下几点:
第一、可以存储大量的通讯录信息安全、高效
第二、只需一档案录入员即可操作系统节省人力
第三、可以迅速查到所需通讯录信息。
为将来用户上网做好准备跟据2003年中国电信的调查报告显示我国的上网人数已达到1870万互联网已经十分普及况且现在网上通讯已经出现本系统为用户将来的上网作了先期工作。
开发环境及实现技术
开发环境硬件系统奔腾100以上CPU、64M以上内存、1G以上硬盘、光驱。
软件系统Windows 9x或更高版本、Visual Basic 6.0中文版。
微软公司的Visual Basic 6.0是Windows应用程序开发工具使目前最为广泛的、易学易用的面向对象的开发工具。
Visual Basic提供了大量的控件这些控件可用于设计界面和实现各种功能减少了编程人员的工作量也简化了界面设计过程从而有效的提高了应用程序的运行效率和可靠
}
}
第五章运行与测试1.通讯录链表的建立
2、通讯录结点的插入
3.通讯录结点的查询
4.通讯录结点的删除
5.通讯录链表的输出
6.退出管理系统
实验完成情况:完成基本完成未完成。