链表——通讯录管理系统

合集下载

c语言实现通讯录管理系统(用链表实现)

c语言实现通讯录管理系统(用链表实现)

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("通讯录⾥什么也没有了。

c语言通讯录管理系统课程设计

c语言通讯录管理系统课程设计

c语言通讯录管理系统课程设计一、课程目标知识目标:1. 理解C语言中数据结构的基本概念,掌握通讯录管理系统中链表的应用;2. 掌握C语言中文件操作的基本方法,实现对通讯录信息的存储和读取;3. 学会使用C语言编程解决实际问题,具备分析和设计简单通讯录管理系统的能力。

技能目标:1. 能够运用所学知识,设计并实现一个具备增加、删除、修改和查询功能的通讯录管理系统;2. 能够运用链表数据结构,实现通讯录信息的动态管理;3. 能够编写清晰的C语言代码,养成良好的编程习惯。

情感态度价值观目标:1. 培养学生的团队合作精神,提高沟通与协作能力;2. 激发学生对计算机编程的兴趣,培养自主学习和解决问题的能力;3. 引导学生认识到编程在解决实际问题中的应用价值,增强其学习责任感。

课程性质:本课程为实践性较强的课程,结合C语言编程知识,让学生通过实际操作,掌握通讯录管理系统的设计与实现。

学生特点:学生在本年级已具备一定的C语言基础,对数据结构有一定了解,但实际编程能力有待提高。

教学要求:教师需结合学生特点,采用任务驱动法,引导学生主动参与课堂,通过实践操作,提高学生的编程能力和解决实际问题的能力。

同时,注重培养学生的团队合作精神和自主学习能力。

在教学过程中,关注学生的情感态度价值观的培养,使其在学习过程中形成积极向上的心态。

二、教学内容1. 数据结构基础:复习C语言中的结构体和指针,引入链表的概念及其在通讯录管理系统中的应用。

- 教材章节:第三章 数据结构,第5节 链表。

- 内容安排:讲解链表的创建、插入、删除等基本操作。

2. 文件操作:介绍C语言中文件读写的基本方法,使学生能够将通讯录信息保存在文件中。

- 教材章节:第五章 文件,第2节 文件的读写。

- 内容安排:讲解fopen、fprintf、fscanf、fclose等文件操作函数的使用。

3. 通讯录管理系统功能设计:- 教材章节:实践项目——通讯录管理系统。

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

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

《数据结构》课程设计报告书题目:通讯录管理系统系别: 计算机科学与应用系学号:学生姓名:指导教师:完成日期: 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 测试运行程序,瞧到主界面。

南航 C语言课程设计 通讯录管理系统 链表实现

南航 C语言课程设计 通讯录管理系统 链表实现
3、处理了其他细节,降低误操作的可能性。如创建链表时判断链表是否为空并给 出提示,防止用户误操作(即将插入记录与创建电话簿两种功能严格区分,这能有效避免 未释放空间的产生)。又如,对于删除同名记录还判断是否同名但信息不同的情况,允许 用户自行决定是否删除。优化了用户界面的友好程度。
4、编程时尽量采用效率最高的链表算法。提交的源程序中(非报告中的程序)部 分函数代码后增添了多种效果等同的代码(注释掉了),报告中最终保留的所有涉及链表 操作的算法大多已实现遍历一次即可达成目的(时间复杂度 O(n))。
0
031220732 HQ C 语言课程设计报告
1、摘要
报告将详细描述“电话簿管理系统”的 C 语言实现方案,程序代码将以 C 语言形式 给出。报告将包括程序总体设计的介绍以及各子函数功能的说明,同时也包括在做课程设 计过程中的心得体会,最终将给出典型数据与测试流程。
2、题目描述与解决方案
2-1.题目描述
2、对于错误的数据,设计了相应的修改程序,主动提示可能需要修改的成员与当 前内容,并允许用户对某一字段进行修改(而不需要重新输入整条记录)。设计了 _Modify()函数实现上述功能。
3、设计了二级菜单用于实现上述功能的调用,同时设计了一些琐碎的小功能,如 改变软件背景与文字颜色的功能和“关 于”程序和彩蛋小游戏。设计了 ExtraFunction()实现上述功能(恢复数 据功能也在该函数内完成)。
图 1-二级菜Biblioteka 效果图3-4.已知的不足1、代码冗长,维护起来不如最精简版本容易。(可削减所有附加功能以解决) 2、输入输出细节处理过多,影响程序可读性。(可适当减少处理) 3、某些代码效率不高,如查错功能在数据规模极大时会极大拖累运行效率。 4、采用了批处理命令,只适合 WINDOWS 平台、DOS 平台,可移植性一般。 5、采用了在 C++中被认为是不安全的标准库函数,如 scanf 等。

链表实现通讯录

链表实现通讯录

#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 操作。

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

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

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

c语言双链表通讯录

c语言双链表通讯录

c语言双链表通讯录题目三:通讯录系统1.实验目的和意义:利用c语言编写通讯录系统,使我们更加熟练的掌握c语言及软件开发的基本步骤,进一步理解并掌握结构体和双链表的使用,初步掌握文件的调用。

该课题设计对学生来说是对这一学期有关c语言学习的一个评估,是将c语言应用于生活中,提高学生的动手能力。

该课题有利于让学生将课本上学习的零散的知识融会贯通、综合运用、强化知识体2.实验内容:1、当启动通讯录管理系统时读取通讯录文件2、进入主功能菜单3、创建联系人列表并保存修改后的通讯录4、删除创建的联系人并保存修改后的通讯录5、打印出保存后的通讯录当未创建通讯录时提示用户创建新的通讯录6、根据用户输入的联系人的首字母查找符合条件的联系人7、退出通讯录管理系统3.小组成员分工:小组讨论算法:全体成员编写程序:樊义,高杰林,曹仲生调试程序:陈伟杰漏洞修复及报告设计:陈伟杰4.设计要点:建立结构体并创建链表,添加删除节点,字符串的匹配。

设计功能选择函数,5.源程序:#include "stdio.h"#include "stdlib.h"#include "string.h"typedef struct message{char name[30];char number[20];char email[30];char adress[100];char qq[120];struct message *proir;struct message *next;} mess;mess *head=NULL;mess *p[100];int man=0;/////////////////////////////////////////////////////////////////// /////////// char menu();void add();void del();char del_menu();void del_name();void del_adress();void del_number();void del_email();void del_qq();void find();char find_menu();void find_name();void find_adress();void find_number();void find_email();void find_qq();void print();char print_menu();void print_time();void print_word();void file_save();/////////////////////////////////////////////////////////////////// ///////// //////////////////////////////////主函数int main(){FILE *fp=fopen("1.txt","r+");if(fp==NULL)printf("通讯录为空!!\n");else{fseek(fp,0,2);if(ftell(fp)==0)printf("通讯录为空!\n");else{mess *p2,*tmp;rewind(fp);head=(mess *)malloc(sizeof(mess));head->next=NULL;p[0]=head;while(feof(fp)==0){p2=(mess *)malloc(sizeof(mess));fscanf(fp,"%s%s%s%s%s",p2->name,p2->adress,p2->numb er,p2->email,p2->qq);tmp=head;while(tmp->next!=NULL)tmp=tmp->next;tmp->next=p2;p2->next=NULL;p2->proir=tmp;man++;p[man]=p2;p[man+1]=NULL;}man--;p2->proir->next=NULL;printf("数据读取完毕!\n");int flag=fclose(fp);if(flag!=0){printf("关闭文件失败!");return 0;} }}start:char i;i=menu();switch(i){case '1':add();break;case '2':del();break;case '3':find();break;case '4':print();break;case '5':file_save();return 0;case '6':return 0;}goto start;}/////////////////////////////////////////////////////////////////// /////////////////////////////////////// //////主菜单char menu(){char i;printf("---------------功能菜单---------------\n");printf(" | 1.录入信息\t 2.删除信息|\n");printf(" | 3.查找信息\t 4.显示信息|\n");printf(" | 5.保存并退出 6.退出\t |\n");printf("--------------------------------------\n");while(1){printf("请输入功能编号:");scanf("%s",&i);if('0'<i&&i<'7')< p="">return i;elseprintf("无效指令!");}}/////////////////////////////////////////////////////////////////// /////////////////////////////////////// //////录入函数void add(){mess *p1;p1=(mess *)malloc(sizeof(mess));printf("请输入姓名:\n");scanf("%s",&p1->name);printf("请输入地址:\n");scanf("%s",&p1->adress);printf("请输入手机号码:\n"); scanf("%s",&p1->number);printf("请输入邮箱:\n");scanf("%s",&p1->email);printf("请输入qq号码:\n");scanf("%s",&p1->qq);if(head==NULL){head=(mess *)malloc(sizeof(mess)); head->next=p1;p1->next=NULL;p1->proir=head;p[0]=head;man++;p[man]=p1;p[man+1]=NULL;}else{mess *p2=head->next;while(p2->next!=NULL)p2=p2->next;p2->next=p1;p1->next=NULL;p1->proir=p2;man++;p[man]=p1;p[man+1]=NULL;}printf("添加成功!通讯录内现有%d个联系人\n是否继续录入信息........",man);char ch;done:scanf("%s",&ch);if(ch=='n');else if(ch=='y') add();else {printf("无效指令!请重新输入:");goto done;}}/////////////////////////////////////////////////////////////////// /////////////////////////////////////// ///删除函数void del(){char i=del_menu();switch(i){case '1':del_name();break;case '2':del_adress();break;case '3':del_number();break;case '4':del_email();break;case '5':del_qq();break;case '6':break;}}////////////////////char del_menu(){char i;printf("---------------删除菜单---------------\n"); printf(" | 1.按姓名删除\n | 2.按地址删除\n"); printf(" | 3.按手机号码删除\n | 4.按邮箱删除\n"); printf(" | 5.按qq号删除\n | 6.返回主菜单\n"); printf("--------------------------------------\n"); while(1){printf("请输入功能编号:");scanf("%s",&i);if('0'<i&&i<'7')< p="">return i;elseprintf("无效指令!");}}///////////////////void del_name(){if(man==0)printf("通讯录为空!\n\n");else{char ch[30];int i=1;mess *p1=head->next;printf("请输入被删用户的姓名:\n");scanf("%s",ch);while(p1!=NULL){if(strcmp(p1->name,ch)==0){while(p[i]!=p1)i++;while(p[i]!=NULL){p[i]=p[i+1];i++;}p1->proir->next=p1->next;if(p1->next!=NULL)p1->next->proir=p1->proir;printf("此用户信息已删除!");printf("是否继续删除........");man--;char tmp;done: scanf("%s",&tmp);if(tmp=='n')break;else if(tmp=='y') {del();break;}else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next;}if(p1==NULL){printf("查无此人!\n");printf("是否继续删除........");char tmp;a: scanf("%s",&tmp);if(tmp=='n');else if(tmp=='y') del();else {printf("无效指令!请重新输入:");goto a;}}}}/////////////////////void del_adress(){if(man==0)printf("通讯录为空!\n\n");else{char ch[30];int i=1;mess *p1=head->next;printf("请输入被删用户的地址:\n"); scanf("%s",ch);while(p1!=NULL){if(strcmp(p1->adress,ch)==0) {while(p[i]!=p1)i++;while(p[i]!=NULL){p[i]=p[i+1];i++;}p1->proir->next=p1->next;if(p1->next!=NULL)p1->next->proir=p1->proir; printf("此用户信息已删除!");printf("是否继续删除........");man--;char tmp;done: scanf("%s",&tmp);if(tmp=='n')break;else if(tmp=='y') {del();break;}else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next;}if(p1==NULL){printf("查无此人!\n");printf("是否继续删除........");char tmp;a: scanf("%s",&tmp);if(tmp=='n');else if(tmp=='y') del();else {printf("无效指令!请重新输入:");goto a;}}}}/////////////////////////////void del_number(){if(man==0)printf("通讯录为空!\n\n");else{char ch[30];int i=1;mess *p1=head->next;printf("请输入被删用户的电话号码:\n");scanf("%s",ch);while(p1!=NULL){if(strcmp(p1->number,ch)==0){while(p[i]!=p1)i++;while(p[i]!=NULL){p[i]=p[i+1];i++;}p1->proir->next=p1->next;if(p1->next!=NULL)p1->next->proir=p1->proir;printf("此用户信息已删除!");printf("是否继续删除........");man--;char tmp;done: scanf("%s",&tmp);if(tmp=='n')break;else if(tmp=='y') {del();break;}else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next;}if(p1==NULL){printf("查无此人!\n");printf("是否继续删除........");char tmp;a: scanf("%s",&tmp);if(tmp=='n');else if(tmp=='y') del();else {printf("无效指令!请重新输入:");goto a;}}}}/////////////////////void del_email(){if(man==0)printf("通讯录为空!\n\n");else{char ch[30];int i=1;mess *p1=head->next;printf("请输入被删用户的邮箱:\n"); scanf("%s",ch);while(p1!=NULL){if(strcmp(p1->email,ch)==0) {while(p[i]!=p1)i++;while(p[i]!=NULL){p[i]=p[i+1];i++;}p1->proir->next=p1->next;if(p1->next!=NULL)p1->next->proir=p1->proir; printf("此用户信息已删除!");printf("是否继续删除........");</i&&i<'7')<></i&&i<'7')<>。

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

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

数据结构课程设计通讯录管理系统
数据结构课程设计中的通讯录管理系统可以涉及到以下几个方面的知识点:
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;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。

链表实现c语言通讯录管理系统,C++链表实现通讯录管理系统

链表实现c语言通讯录管理系统,C++链表实现通讯录管理系统

链表实现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++实现

数据结构-链表(二)-通讯录-C++实现

数据结构-链表(⼆)-通讯录-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.链表应用:输入功能。基于用户键盘输入,创建学生个人通讯信息链表,要求对用户输入 的个人信息进行有效性检查。
2.链表应用:输出功能。在上面设计的基础上,设计链表输出函数。 3.链表应用:查找功能。在上面设计的基础上,设计链表查找函数。要求可以根据 1)学号 查找、2)姓名查找、3)手机查找、4)性别查找、以及 5)生日范围查找等。然后,在显示器上 输出查找到的学生信息。 4.链表应用:插入功能。在上面设计的基础上,设计节点插入函数; 5.链表应用:删除功能。在上面设计的基础上,基于查找函数,设计节点删除函数,要求能 够根据查找的结果删除相应的节点。然后,在显示器上显示删除后的链表内容。 6.链表应用:排序功能。在上面设计的基础上,设计链表排序函数。要求可以根据 1)学号 排序、2)姓名排序、3)性别排序、4)手机排序、以及 5)生日排序等。然后,在显示器上,输 出排序后的通讯录。 7.链表应用:保存功能。在上面设计的基础上,设计链表保存到外部文件的函数; 8.链表应用:创建功能。在上面设计的基础上,设计基于外部文件创建链表的函数。

通讯录管理系统

通讯录管理系统

通讯录管理系统1分析有哪些功能,要实现什么。

设计完成一个通讯录管理系统,能够利用这个系统方便地管理同学的个人信息。

可以增加、删除、调入、保存、显示等功能。

要求多人配合完成,相互协调好头文件,外部变量,数组类型结构等。

要求有三人合作完成。

2首先确定数据结构:比如说通讯录管理系统,采用链表的方式来保存数据,而链表的每一个结点就是一个人的信息,对于每一结点人采用结构体组成,每个结点包括三个成员,姓名、电话、指针,这样就可以把所有人的结点串起来了。

对应于要实现的功能,这种结构的动作会是什么样呢?初始化,即链表设置为空;增加,找到链表的尾巴后,可以增加一个人的信息;删除,找到某人的结点,把它删除了;保存,可以把内存中的链表按指定的名字保存;调入,清除内存中链表,然后把文件中的内容调入进来;显示,显示内存链表中的数据。

(想改变什么内容,就把内容的地址传过去,这点不能动摇)注意确定链表的结构非常重要。

一般在主程序中有两种方式保存链表的头。

第一种是定义一个头结点,然后把头结点的地址传过去,这样在子函数中可以很方便地使用p->name等操作了;第二种是定义一个头指针,然后把头指针的地址传过去,这样注意传递的时候是传的二级指针,在形参定义的时候要注意,另外,在子函数中的使用应该是(*p)->name,这样才行,在出子函数之前,要确定一下(*p)里放的内容是头打针内容,这样返回主函数是放心的。

第二种方式定义有一点麻烦,也可以直接传递头指针的内容,然后每次在可能修改头打针的函数中返回的时候把头再返回回来给主函数的头指针也可以。

(注明在本程序中就是这样用的)3程序的格式(1)建立头文件HEAD.C。

包括以下内容:包括的系统库函数都写进来。

#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>节点的数据结构写进来。

C++链表通讯录完美版

C++链表通讯录完美版

C++语言课程设计学号:*********姓名:楚归羽指导老师:张目录一、程序功能 (2)二、题目分析 (2)三、设计中遇到的问题及解决方法 (2)四、感想与心得 (2)五、程序说明 (2)六、函数调用关系及主要算法的实现 (8)七、数据测试 (8)一、程序功能程序采用单向链表类结构实现实现通讯录多个纪录的管理工作。

1、提示输入个字段,一次输入一个人的数据2、输入待删除记录的姓名,显示其所有信息,让用户确认是否删除3、按顺序显示所有记录,每显示10条记录暂停,按Enter继续4、输入姓名,显示其所有信息5、用户输入姓名,系统显示该姓名下所有信息,同时显示子菜单,用户按子菜单提示进行修改6、从实现建立的正文文件中批量导入数据。

程序运行时,用户需输入正文文件名7、将库表中数据写入一个正文文件中。

程序运行时,用户需输入正文文件名8、首先显示当前排序关键字,然后提示是否需要改变。

系统默认按姓名排序,可在按办公室电话排序之间切换9、退出系统二、题目分析程序采用单向链表类结构实现,每个结点代表一个通讯记录。

链表类实现通讯录多个纪录的管理工作。

三、设计中遇到的问题及解决方法初次接触课程设计,刚刚拿到题目,实在是茫然无头绪,于是反复研究了题目,仔细复习了链表部分的知识点,加上和同学的讨论,终于是有了一个大概的思路。

刚开始着手编写的时候问题不断,幸好经过练习册上的指示,搭好了基本的框架,可是链表部分仍然是出了很大的问题,经过自己的反复实验与不断努力终于编译成功。

后面的文本文件的读入与写入则是另一个难题,因为这一块练习的不是很多,只在课本上看到了一些皮毛,在编译与调试时也遇到了很大问题。

最后通过看书上的例题并在与同学交流探讨中解决了这些问题。

四、感想与心得C++作为一门必修课程,学习的过程实在是痛苦的,尤其是在编程的时候,因为总是会出现各种各样的错误。

只有通过反复的调试,通过无数次的排错,才能编写出正确的程序,更多的时候,一个很小的很无聊错误就能导致长时间的迷惑。

数据结构大作业报告_C语言通讯录系统_链表

数据结构大作业报告_C语言通讯录系统_链表
遇到的问题及心得体会之孙海亮
我遇到的问题和处理方法: 我负责的删除模块要实现两个删除功能:1.姓名 2.关系(1.家人 2.
朋友 3.同学 4.同事 5.其他分组)看似复杂其实实现过程很简单。 1.我所需要处理的就是查找所需要删除的结点所以会遇到重名现象 在关系删除中必须把同一分组的信息全部查到并删除,但刚开始时我 想的是判断是否满足 p->next==NULL 若不满足继续查找、删除直到 p->next 为空,但将条件放进程序无法跳出没有实现重名的删除,只 是基本的逐个删除,是我的能力有限。最难的问题也没得到基本解决。 2.找到了我所需要的结点所考虑的是怎么样删除,不能够像以前用 strcpy 将空赋给原结点,显然是错误的。在链表中我的判断条件是 if(!strcmp(p->name,z))当 z 与 p->name 相等时这就利用到了链表的删 除方式用 q->next=p->next 绕过了所要删除的结点 q 结点信息被系统 回收,继续利用 q 结点 p=p->next 后移直到 p->next==NULL,break 跳出 了循环结束遍历。 3.在关系删除里删除方法与姓名相同唯一的问题是我们不可能让用 户去输入关系而是去选择,所以我先声明了一个 char x【30】,在全 局中用 a1[],a2[],a3[],a4[],a5[]存放了关系的字符,建立 switch 选择关 系,按照选择将所存放的字符用 strcpy 函数复制到 x【】中,同上遍 历每个结点进行顺序查找完成关系删除
遇到的问题及心得体会之宋浩
通过此次作业我不仅加深了 c 语言中的链表的运用,同时和数据结构 中链表的运算相结合,从产生问题到解决,真正意义上的掌握了单链 表的查找、修改增加。有问题,自己实在解决不了,问别人,而自己 也要搞懂它。我的程序虽不是最好的,但都是自己努力的结果,这让 我对编程更加有自信了。 遇到的问题及解决方法 对于链表的查找,没有什么问题,链表的循环要用 while,对比是否 一样用(!strcmp(head->name,x))。我碰到的问题比较多的是在链表的修 改,第一,对输入的数据查询时,此链表至少是两个节点,只有一个 也不必找了。然后一个一个节点找,如果找不到就 p=p->next,这句 话当时是放在判断找到后的 if(!strcmp(p->name,z))的,但是当找除第 一个节点时出现了死循环,后来把它拿出来单独成一个 if 句子,问题 又来了。第二,找到后输出,但是我要只找一次,于是我在那加了一

数据结构 链表的应用 通讯录管理

数据结构 链表的应用 通讯录管理

数据结构链表的应用通讯录管理实验要求:一、设计一个含有多个菜单项的程序,菜单项内容如下:1通讯录链表的建立2通讯录链表的插入3通讯录链表的查询4通讯录链表的删除5通讯录链表的输出0退出管理系统要求只能用0-5来选择菜单项,其他的输入无效二、分别实现多个菜单项的功能,要求每个功能在操作时都有确认提示三、编写一个程序实现整个通讯录管理系统,把主菜单的生成和各菜单项功能的实现作为子程序或者函数或者过程来实现。

四、要求关键语句必须要写注释。

#include "stdio.h"#include "string.h"#include "stdlib.h"typedef struct abc{ //通讯录结点类型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;//函数说明int menu_select();LinkList CreateList(void);void InsertNode(LinkList head,ListNode *p);ListNode *ListFind(LinkList head);void DelNode(LinkList head);void PrintList(LinkList head);//主函数void main(){for( ; ; ){switch(menu_select( ) ){case 1:printf("**********************************\n");printf("* 通讯录链表的建立*\n");printf("**********************************\n");head=CreateList( );break;case 2:printf("**********************************\n");printf("* 通讯者信息的添加*\n");printf("**********************************\n");printf("编号(4) 姓名(8) 性别(3) 电话(11) 地址(31)\n"); printf("************************************* \n");p=(ListNode *)malloc(sizeof(ListNode)); //申请新结点scanf("%s%s%s%s%s",p->data.num,p->,p->data.sex, p->data.phone,p->data.addr);InsertNode(head,p);break;case 3: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.addr);printf("---------------------------------------------------\n");}elseprintf("没有查到要查询的通讯者!\n");break;case 4:printf("***********************************\n");printf("* 通讯录信息的删除*\n");printf("***********************************\n");DelNode(head); //删除结点break;case 5:printf("************************************\n"); printf("* 通讯录链表的输出*\n");printf("************************************\n"); PrintList(head);break;case 0:printf("\t 再见!\n");return;}}}int menu_select( ){int sn;printf(" 通讯录管理系统\n");printf("===================\n");printf(" 1.通讯链表的建立\n");printf(" 2.通讯者结点的插入\n");printf(" 3.通讯者结点的查询\n");printf(" 4.通讯者结点的删除\n");printf(" 5.通讯录链表的输出\n");printf(" 0.退出管理系统\n");printf("==========================\n");printf(" 请选择0-5:");for( ;; ){scanf("%d",&sn);if (sn<0||sn>5)printf("\n\t输入错误,重选0-5:");elsebreak;}return sn;}LinkList CreateList(void){ //尾插法建立带头结点的通讯录链表算法LinkList head=(ListNode *)malloc(sizeof(ListNode)); //申请头结点ListNode *p,*rear;int flag=0; //结束标志置0rear=head; //尾指针初始指向头结点while (flag==0){p=(ListNode *)malloc(sizeof(ListNode)); //申新结点printf("编号(4) 姓名(8) 性别电话(11) 地址(31)\n");printf("--------------------------------------------------------------------------------------\n"); scanf("%s%s%s%s%s",p->data.num,p->,p->data.sex,p->data.phone,p->data.addr);rear->next=p; //新结点连接到尾结点之后rear=p; //尾指针指向新结点printf("结束建表吗?(1/0):");scanf("%d",&flag);}rear->next=NULL; //终端结点指针置空return 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];int xz;printf("==================\n");printf(" 1. 按编号查询\n");printf(" 2. 按姓名查询\n");printf("==================\n");printf(" 请选择:");p=head->next; //假定通讯录表带头结点scanf("%d",&xz);if (xz==1) {printf("请输入要查找者的编号:");scanf("%s",num);while (p&&strcmp(p->data.num,num)<0)p=p->next;if ((p==NULL)||strcmp(p->data.num,num)>0) p=NULL; //没有查到要查找的通讯}elseif (xz==2) {printf(" 请输入要查找者的姓名:"); scanf("%s",name);while(p&&strcmp(p->,name)!=0) p=p->next;}return p;}void DelNode(LinkList head){char jx;ListNode *p,*q;p=ListFind(head); //调用查找函数if (p==NULL) {printf("没有查到要删除的通讯者!\n"); return;}printf("真的要删除该结点吗?(y/n):"); scanf("%c",&jx);if (jx=='y'||jx=='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.addr);printf("---------------------------------------------------------------------------------\n"); p=p->next; //后移一个结点}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
p=new Node;
cin>>p->Date.num>>p->>>p->Date.sex>>p->Date.Phone>>p->Date.addr;
InsertNode(head,p);
break;
}
case 3:
{
cout<<"** 通讯者信息添加 **"<<endl;
cout<<"********************"<<endl;
cout<<"编号(4), 姓名(8) ,性别(3) ,电话(11) ,地址(31)"<<endl;
cout<<"********************"<<endl;
while(p!=null)
{
cout<<p->Date.num<<" "<<p-><<" "<<p->Date.sex<<" "<<p->Date.Phone<<" "<<p->Date.addr<<endl;
p=p->next;
}
cout<<"**************************"<<endl;
return head; //返回头指针,便于后面的操作
}
/*******头结点处插入结点函数******/
void InsertNode(LinkList head,Node *p)
{
Node *p1,*p2;
p1=head;
p2=p1->next;
cout<<" 5-通讯链表的输出!"<<endl;
cout<<" 0-退出管理系统!"<<endl;
cout<<"************************"<<endl;
cout<<endl;
cout<<"请选择 0~5"<<endl;
for(;;)
{
cin>>n;
cout<<"******************************************"<<endl;
cout<<" 1-通讯链表的建立!"<<endl;
cout<<" 2-通讯者结点的插入!"<<endl;
cout<<" 3-通讯者结点的查询!"<<endl;
cout<<" 4-通讯者结点的删除!"<<endl;
cout<<"** 通讯录信息删除 **"<<endl;
cout<<"**********************"<<endl;
DelNode(head);
break;
}
case 5:
{
cout<<"**********************"<<endl;
cout<<"输入:性别,姓名,编号,电话,地址"<<endl;
cout<<"***********************"<<endl;
cin>>p->Date.sex>>p->>>p->Date.num>>p->Date.Phone>>p->Date.addr;
cout<<"** 通讯链表的建立 **"<<endl;
cout<<"**************************"<<endl;
head=ist();
break;
}
case 2:
{
cout<<"*********************"<<endl;
{
cout<<"编号,姓名,性别,联系电话,联系地址"<<endl;
cout<<"*******************"<<endl;
cout<<p->Date.num<<" "<<p-><<" "<<p->Date.sex<<" "<<p->Date.Phone<<" "<<p->Date.addr<<endl;
rear->next=p; //新节点连接到尾节点之后
rear=p; //尾指针指向新的结点
cout<<"建表结束吗?(Y/N)"<<endl;
cin>>flag;
}
rear->next=null; //尾结点置空
};
typedef Node *LinkList;
/*****主菜单函数******/
int menu_select()
{
int n;
cout<<"******************************************"<<endl;
cout<<"\t欢迎登录通讯录管理系统!"<<endl;
char num[5]; //编号
char Phone[13]; //联系电话
char addr[31]; //联系地址
};
/*****定义链表结点的结构******/
struct Node
{
People Date; //结点的数据域
Node *next; //结点的指针域
cin>>n;
if(n='Y'||n=='y')
{
q=head;
while(q!=null&&q->next!=p)
q=p->next;
q->next=p->next;
delete p;
cout<<"该通讯者成功删除!"<<endl;
cout<<"************************"<<endl;
cout<<"** 通讯信息查询 **"<<endl;
cout<<"************************"<<endl;
p=FindNode(head);
if(p!=null)
}
}
}
#include<iostream>
#include<cstring>
#define null 0
using namespace std;
/******联系人的信息******/
struct People
{
char sex[5]; //性别
char name[9]; //姓名
if(n<0||n>5)
cout<<"输入错误,请重新输入0~5"<<endl;
else
break;
}
return n;
}
/****尾插法创建链表的函数****/
LinkList CreatList()
{
Node *p,*rear,*head;
p1->next=p;
p->next=p2;
}
/*******通讯录链表的查询*********/
LinkList FindNode(Node *head)
{
Node *p;
char name[9];
char num[5];
int n;
cout<<"******************"<<endl;
}
/***********主函数main**************/
void main()
{
Node *head,*p;
for(;;)
{
switch(menu_select())
{
case 1:
{
cout<<"*************************"<<endl;
相关文档
最新文档