C++链表通讯录完美版

合集下载

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

通讯录链表

通讯录链表

#include <stdio.h>#include <stdlib.h>#include<string.h>struct node{ char name[20];char tel[12];char add[50];char qq[12];char num[15];struct node * next;};void new_record();void listall();void search();void revise();void Delete();void save();void get();struct node *head, *cur, *newp;void main(){head=(struct node *)malloc(sizeof(struct node));head->next=NULL;head=NULL;get();char a;printf("@欢迎使用通讯录@\n");printf("=======>1 进入通讯录\n");printf("=======>0 退出\n");scanf("%d",&a);while(a){printf("*********************通讯录**********************\n");printf("=======>1 添加新的数据\n");printf("=======>2 显示所有信息\n");printf("=======>3 查找信息\n");printf("=======>4 修改信息\n");printf("=======>5 删除信息\n");printf("=======>6 保存\n");printf("=======>0 退出\n");scanf("%d",&a);switch(a){case 1:{new_record();break;}case 2:{listall();break;}case 3:{search();break;}case 4:{revise();break;}case 5:{Delete();break;}case 6:{save();break;}case 0:{printf("**********谢谢使用,再见**********\n");break;}}}}void new_record(void){newp=(struct node * )malloc(sizeof(struct node));/* 开辟新结点*/newp->next=NULL;if(head==NULL) /* 原来为空表*/ head=newp;else{cur=head; /* 原来已有结点*/while(cur->next!=NULL)cur=cur->next;cur->next=newp;}cur=newp; /* 使cur指向新结点*/ getchar();printf("*****************添加新的通讯录****************\n");printf("输入姓名:"); /* 以下输入新结点数据*/gets(cur->name);printf("输入学号:");gets(cur->num);printf("输入电话:");gets(cur->tel);printf("输入QQ:");gets(cur->qq);printf("输入家庭住址:");gets(cur->add);cur->next=NULL; /* 新结点不再指向其它结点*/}void listall(void){int i=0;if(head==NULL){printf("通讯录为空\n");return;}cur=head; /* 使cur指向第一个结点*/do{printf("\n%d\n",++i); /*记录输出的个数*/printf("姓名: %s\n",cur->name); /*依次输出数据*/printf("学号: %s\n",cur->num);printf("电话: %s\n",cur->tel);printf("QQ: %s\n",cur->qq);printf("家庭住址: %s\n",cur->add);cur=cur->next;}while (cur!=NULL); /* 打印完最后一个结点不再打印*/}void search(void){char name[20];char num[15];char a;printf("**************请选择查找方式****************\n======>1.按姓名查找\n======>2.按学号查找\n"); /*选择查找方式*/scanf("%d",&a);if(a==1){printf("请输入要查找的名字\n"); /*按姓名查找*/scanf("%s",&name);cur=head;int i=0;int j=0;while(cur){if(strcmp(name,cur->name)==0) /*比较改结点是否有待查找的数据*/{j=1;printf("\n%d\n",++i); /*有显示出数据*/printf("姓名:%s\n",cur->name);printf("学号:%s\n",cur->num);printf("电话:%s\n",cur->tel);printf("QQ:%s\n",cur->qq);printf("地址:%s\n",cur->add);}cur=cur->next;}if(j==0) /*通讯录中无待查找的数据*/ printf("@没有查找的姓名@\n");printf("@搜送完毕@\n");}else if(a==2){printf("请输入要查找的学号\n"); /*按学号查找*/scanf("%s",&num);cur=head;int i=0;int j=0;while(cur){if(strcmp(num,cur->num)==0){j=1;printf("\n%d\n",++i);printf("姓名:%s\n",cur->name);printf("学号:%s\n",cur->num);printf("电话:%s\n",cur->tel);printf("QQ:%s\n",cur->qq);printf("地址:%s\n",cur->add);}cur=cur->next;}if(j==0)printf("没有查找的学号\n");printf("搜送完毕\n");}elseprintf("输入错误,请重新输入\n");}void revise(void){char name[20];int j=0;int i=1;printf("请输入要修改人的姓名\n");scanf("%s",&name); /*按姓名查找要修改的结点*/cur=head;while(cur){if(strcmp(name,cur->name)==0){j=1; /*先输出所有的信息,便于与要修改的地方对照*/printf("姓名:%s\n",cur->name);printf("学号:%s\n",cur->num);printf("电话:%s\n",cur->tel);printf("QQ:%s\n",cur->qq);printf("地址:%s\n",cur->add);printf("请输入要修改的信息\n");while(i){printf("1.修改学号\n2.修改电话\n3.修改QQ\n4.修改地址\n0.修改完成或退出修改\n");scanf("%d",&i);switch(i){ /*修改时一一对照*/case 1:{printf("原学号:%s\n",cur->num);printf("请输入修改的学号:");scanf("%s",cur->num);printf("修改完成\n");break;}case 2:{printf("原电话:%s\n",cur->tel);printf("请输入修改的电话:");scanf("%s",cur->tel);printf("修改完成\n");break;}case 3:{printf("原QQ:%s\n",cur->qq);printf("请输入修改的QQ:");scanf("%s",cur->qq);printf("修改完成\n");break;}case 4:{printf("原地址:%s\n",cur->add);printf("请输入修改的地址:");scanf("%s",cur->add);printf("修改完成\n");break;}case 0:break;default:printf("输入错误,请重新输入");}}}cur=cur->next; /*查找下一个结点是否有要修改的信息*/ }if (j==0)printf("无要修改的对象\n");}void Delete(void){struct node *p;char name[20];int i=1;cur=head;printf("输入要删除人的姓名\n"); /*按姓名查找要删除的结点*/scanf("%s",&name);if(strcmp(name,head->name)==0) /*判断是不是第一个结点就是要删除的*/ {head=head->next;i=0;printf("删除完成\n");}else{cur=head->next;while(i){if(strcmp(name,cur->name)==0) /*找到了要删除的结点*/{newp=head;while(i){if(newp->next==cur) /*找要删除结点的指针*/{newp->next=cur->next; /*略去该结点,删除完成*/i=0;printf("删除完成\n");break;}elsenewp=newp->next;}}elsecur=cur->next;}}if(i)printf("无要删除的姓名\n");}void save(){FILE *fp;fp=fopen("通讯录.txt","w+");while(head){fprintf(fp,"姓名:%s\t",head->name);fprintf(fp,"学号:%s\t",head->num);fprintf(fp,"电话:%s\t",head->tel);fprintf(fp,"QQ:%s\t",head->qq);fprintf(fp,"地址:%s\t",head->add);fprintf(fp,"\n");head=head->next;}fclose(fp);printf("保存完毕。

用c语言编写一个通讯录代码详解

用c语言编写一个通讯录代码详解

⽤c语⾔编写⼀个通讯录代码详解⽬录实现通讯录的思路如下:总结实现通讯录的思路如下:1.程序运⾏起来时⽤户⾸先要看到菜单栏选项并且对应菜单栏所给出的选项做出选择,这⾥我们简单设计⼀个Menu()函数可以让⽤户看见可选项⽬;2.⽤户可选的范围应该是1~7,为了避免⽤户做出超出范围的选择我们可以⽤switch语句来判断⽤户的选择若⽤户输⼊的数字⾮法还可以让⽤户继续选择,⽽继续选择这个动作需要⽤到while语句,⽤户对通讯录的不断操作也需要⽤到while语句;3.⽤户选择不同的选项,程序就要调⽤对应的函数来实现其功能并且我们对switch语句进⾏优化,如果直接对输⼊的数字进⾏判断的话我们还需要对照直接设计的菜单栏选项对捕捉到的⽤户选择做出判断需要不是参考菜单栏,为了解决这个问题,我们⽤枚举的⽅法来提⾼代码的可读性;enum menu{ADD = 1,SHOW,MODIFIES,FIND,DELETE,SORT,EXITS,};4.接下来我们对通讯录的功能⼀⼀实现,不难想到要对通讯录中的联系⼈信息进⾏操作就必须要有存放联系⼈信息的载体,⽽每个联系⼈信息则⼜包含姓名,年龄,性别,电话号码,地址这些信息,所以我们⾸先⾃定义⼀个message类型,然后创建⼀个message数组来存放联系⼈信息,数组的⼤⼩由我们⾃⾏设定最好⽤#define来设定num的⼤⼩可以做到⼀改全改。

#define num 100typedef struct s{int age;char name[10];char number[20];char sex[5];char adress[20];}message;5.添加联系⼈功能:要想添加联系⼈就得对保存所有联系⼈信息的数组进⾏操作并且还要知道把新建的联系⼈信息存⼊数组的第⼏个元素中,所以这个AddMessage函数应该接收这两个参数,考虑到要统计通讯录中联系⼈的个数并且在添加联系⼈成功后该个数应该++,所以在创建联系⼈数组的同时应该同时定义⼀个变量来告诉⼀些功能函数通讯录中联系⼈的个数并且在addMessage这个函数中还需要对这个变量的值进⾏+1操作所以我们应该向这个函数传⼊该变量的地址达到修改变量值的⽬的。

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')<>。

C通讯录

C通讯录

通讯录#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct{//定义链表数据类型c har num[5]; //编号char name[8]; //姓名char sex[10]; //性别char tel[8]; //电话char address[100]; //地址}datatype;typedef struct node{//储存结构为链表datatype data;struct node * next;}listnode;typedef listnode * linklist;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(){linklist head;//接受返回的链表listnode *p;//接受返回的节点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) 性别(10) 电话(11) 地址(30)**\n");printf(" ***********************************************\n");p=(listnode *)malloc(sizeof(listnode));scanf("%s%s%s%s%s",p->data.num,p->,p->data.sex,p->data.tel,p->data.address);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.tel,p->data.address);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(" \n");printf(" 通讯录管理系统\n");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 \n\n");for(; ;){scanf("%d",&sn);if(sn<0||sn>5)printf("\t输入错误\n");elsebreak;}return sn;}linklist createlist(void){linklist head=(listnode *)malloc(sizeof(listnode));//建立头节点listnode *p,*rear;//p为要创建的节点指针,rear为在链表上移动的指针int flag=1;rear=head;while(flag==1){p=(listnode *)malloc(sizeof(listnode));printf(" 编号(5) 姓名(8) 性别(10) 电话(8) 地址(100) \n");printf(" --------------------------------------------\n");scanf("%s%s%s%s%s",p->data.num,p->,p->data.sex ,p->data.tel,p->data.address);//数据输入rear->next=p;rear=p;printf(" 继续建表吗?(1.是/0.不):");scanf("%d",&flag);}if(flag==1)printf("创建成功!\n");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=p2->next;}p1->next=p;p->next=p2;printf("插入成功!\n");}listnode * listfind(linklist head){listnode * p;char num[5];char name[8];int xz;printf("--------------------\n");printf(" 1.编号查询\n");printf(" 2.姓名查询\n");printf("--------------------\n");printf("请选择: \n");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){int jx;listnode *p,*q;p=listfind(head);if(p==NULL){printf("没有要删除的通讯者!:\n");return;}printf ("真的要删除该结点吗?(1.是/0.不):");scanf("%d",&jx);if (jx==1){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.tel ,p->data.address);printf(" ------------------------------\n");p=p->next;}}。

链表实现通讯录

链表实现通讯录

#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、通讯录设计设计一个班级同学的通讯录,要求如下:✓通讯录中每个同学的信息包含以下内容:学号(id)、姓名(name)、电话号码(tel)。

如果需要更多其他信息,请自行添加。

✓程序主菜单包含以下几个功能:(1)添加记录:通过键盘输入信息,添加一条通讯录记录。

(2)删除记录:通过键盘输入学号,删除该学号的记录。

(3)输出记录:输出通讯录全部记录。

(4)按姓名查找:通过键盘输入姓名,输出该同学的所有信息。

(5)保存记录:把通讯录中所有的记录保存到文件中。

(6)清空记录:删除通讯录中的全部记录,并删除文件。

(7)退出提示:✓程序启动时应判断是否存在记录文件,如果存在,则读取每条记录到链表中。

✓用户选择并完成主菜单某功能后,除了退出程序,应该返回主菜单。

✓添加一条记录时,插入到链表的尾部。

✓查找、删除记录时,如果该记录不存在,则应该输出不存在的提示。

✓添加记录、删除记录时不需要写文件。

✓保存记录时,用覆盖写文件的方法。

(或者先删除原文件,再保存全部记录信息)✓各个功能模块写成函数,由主函数调用。

选做:✓主菜单增加一个排序功能选项,可以按照学号从小到大进行排序。

排序方法可以用冒泡排序或者插入排序。

#include<stdio.h>#include<malloc.h>#include<string.h>#include<stdlib.h>#include<string.h>FILE *fp; //文件指针typedef struct lnode{int id;char name[10];int tel;struct lnode *next;}stud;void Inside(stud *&s,int ID,char *NAME,int TEL); bool Delete(stud *&s,int ID);void Output(stud *s);bool Sereachname(stud *&s,char *NAME); void Memory(stud * s);void Write(stud * s);void Empty(stud *&s);void Ini(stud *&s);void Start(stud *s);int main(){int n,ID,TEL;char NAME[10];stud *s;Ini(s);Start(s);printf("*****************************1.添加记录\t2.删除记录*****************************\n");printf("*****************************3.输出记录\t4.按姓名查找***************************\n");printf("*****************************5.保存记录\t6.清空记录*****************************\n");printf("*****************************7.退出\t***************************************\n");while(~scanf("%d",&n)){if(n>=1&&n<=6){switch(n){case 1:{printf("输入学号、姓名、电话\n");scanf("%d%s%d",&ID,&NAME,&TEL);Inside(s,ID,NAME,TEL);break;}case 2:{printf("请输入“学号”\n");scanf("%d",&ID);Delete(s,ID);break;}case 3:{Output(s);break;}case 4:{printf("请输入“姓名”\n");scanf("%s",&NAME);Sereachname(s,NAME);break;}case 5:{Memory(s);printf("保存成功\n");break;}case 6:{Empty(s);break;}}}if(n==7){printf("***********谢谢使用************\n");break;}printf("*****************************1.添加记录\t2.删除记录*****************************\n");printf("*****************************3.输出记录\t4.按姓名查找***************************\n");printf("*****************************5.保存记录\t6.清空记录*****************************\n");printf("*****************************7.退出\t***************************************\n");}return 0;}void Ini(stud *&s){s=(stud *)malloc(sizeof(stud));s->next=NULL;}void Inside(stud * &s,int ID,char *NAME,int TEL) //输入记录{stud *r,*t=s;while(t->next!=NULL){t=t->next;}r=(stud *)malloc(sizeof(stud));r->id=ID;strcpy(r->name,NAME);r->tel=TEL;r->next=NULL;t->next=(stud *)malloc(sizeof(stud));t->next=r;}bool Delete(stud * &s,int ID) //删除记录{stud *r=s,*q,*pre=s;r=r->next;while(r!=NULL && r->id!=ID) {pre=pre->next;r=r->next;}if(r==NULL){printf("该记录不存在\n"); return false;}else{q=pre->next;pre->next=q->next;free(q);printf("删除成功\n");return true;}void Output(stud *s) //输出记录{if(s!=NULL)s=s->next;if(s!=NULL){while(s!=NULL){ printf("学号\t姓名\t电话\n");printf("%d\t",s->id);printf("%s\t",s->name);printf("%d\n",s->tel);s=s->next;}}else{printf("该通讯录为空\n");}bool Sereachname(stud *&s,char *NAME) //按名字查找{stud *p,*pre=s;p=s->next;while(p!=NULL&&(strcmp(p->name,NAME))){pre=pre->next;p=p->next;}if(p==NULL){printf("该学生不存在\n");return false;}else{printf("学号\t姓名\t电话\n");printf("%d\t",p->id);printf("%s\t",p->name);printf("%d\n",p->tel);return true;}}void Memory(stud * s) //{fp=fopen("d:\\in.txt","w"); //数据保存到文件中if(s!=NULL)s=s->next;while(s!=NULL){fprintf(fp,"%d\t%s\t%d\n",s->id,s->name,s->tel);//写入文件s=s->next;}fclose(fp);}void Empty(stud * &s) //清空记录{stud *p=s,*q=s;p=p->next;if(p!=NULL)q=p->next;while(q!=NULL){free(p);p=q;q=p->next;}free(p);s->next=NULL;printf("该通讯录已空\n");}void Start(stud *s) // 初始化和载入文件中数据{system("color 09"); //屏幕、字体颜色char NAME[10];int ID,TEL;fp=fopen("d:\\in.txt","a"); //从文件中加载数据,如果没有该文件则新建fclose(fp);fp=fopen("d:\\in.txt","r");while(fscanf(fp,"%d%s%d",&ID,NAME,&TEL)!=EOF) //从文件中读入数据Inside(s,ID,NAME,TEL);fclose(fp);}宁波工程学院计科12-1。

通讯录的制作c语言

通讯录的制作c语言

通讯录的制作1. 介绍通讯录是一种管理联系人信息的工具,能够存储和查找联系人的姓名、电话号码、邮箱等信息。

在现代社会中,通讯录已经成为人们日常生活中必备的工具之一。

本文将介绍如何使用C语言编写一个简单的通讯录程序。

2. 功能需求通讯录程序应该具备以下功能: - 添加联系人:用户可以输入联系人的姓名、电话号码和邮箱,将其添加到通讯录中。

- 删除联系人:用户可以根据姓名或电话号码删除已存在的联系人。

- 修改联系人信息:用户可以根据姓名或电话号码修改已存在联系人的信息。

- 查找联系人:用户可以根据姓名或电话号码查找已存在的联系人,并显示其详细信息。

- 显示所有联系人:用户可以显示通讯录中所有联系人的列表。

3. 数据结构设计为了实现上述功能,我们需要设计合适的数据结构来存储联系人信息。

在C语言中,可以使用结构体来表示一个联系人。

typedef struct {char name[50];char phone[20];char email[50];} Contact;以上代码定义了一个名为Contact的结构体,包含了三个字段:姓名、电话号码和邮箱。

每个字段都使用字符数组来表示。

同时,我们需要定义一个数据结构来存储多个联系人,可以使用数组或链表。

在本文中,我们将使用数组来实现通讯录。

#define MAX_CONTACTS 100Contact contacts[MAX_CONTACTS];int numContacts = 0;以上代码定义了一个名为contacts的数组,用于存储所有联系人的信息。

numContacts变量用于记录当前通讯录中联系人的数量。

4. 功能实现4.1 添加联系人添加联系人功能允许用户输入联系人的姓名、电话号码和邮箱,并将其添加到通讯录中。

void addContact() {if (numContacts >= MAX_CONTACTS) {printf("通讯录已满,无法添加更多联系人。

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

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

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

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

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

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

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

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

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

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

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

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

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

但是,这也让我学到了还能多,尤其是面对错误坚韧不拔的意志和不达目的绝不低头的毅力,这一点对科研工作想来也是相当重要的。

五、程序说明/*通讯录管理系统||Copyright:010910236 丁志伟*/#include <iostream.h>#include <string.h>#include <stdlib.h>#include <ctype.h>#include <iomanip.h>#include <fstream.h>/*------------------------分割线||节点类的定义--------------------------------------------*/class node{char Name[15];int OfficePhone;int HomePhone;char MobilePhone[15];char Email[20];node *next;public:node(char *n="a",int o=0,int h=0,char *m="b",char *e="c",node *ne=NULL)//初始化{if(n)strcpy(Name,n);if(m)strcpy(MobilePhone,m);if(e)strcpy(Email,e);next=ne;OfficePhone=o;HomePhone=h;}void show() //显示节点数据{cout<<setw(10)<<Name<<setw(11)<<OfficePhone<<"(O)"<<setw(11)<<HomePhone<<"(H)"<<setw(14)<<Mobile Phone<<"(M)"<<setw(11)<<Email<<endl;}void setName(char *s) //重置Name{strcpy(Name,s);}void setOfficePhone(int x) //重置officephone{OfficePhone=x;}void setHomePhone(int x) //重置homephone{HomePhone=x;}void setMobilePhone(char *s) //重置mobilephone{strcpy(MobilePhone,s);}void setEmail(char *s) //重置Emailail{strcpy(Email,s);}friend class addr;friend istream& operator>>(istream &,node *); //>>的重载};/*------------------------分割线||链表创建--------------------------------------------*/class addr{node *head;node *tail;int t;public:addr(node *h=NULL,node *ta=NULL,int tag=1){head=h;tail=ta;t=tag;}void addtail(node *p)//--------------------------------------------------------------添加到尾部{tail->next=p;tail=p;}void addsort(node *p)//--------------------------------------------------------------按序添加{node *p1,*p2;p1=head;p2=head;if(t==1)//姓名插入{if (head==NULL){head=p;tail=head;}else if (strcmp(p->Name,head->Name)==-1){p->next=head;head=p;}else if(strcmp(p->Name,tail->Name)>=0) {tail->next=p;tail=p;}else{while (strcmp(p2->Name,p->Name)==-1)//<{p1=p2;p2=p2->next;}p->next=p2;p1->next=p;}}if (t==2)//电话插入{if (head==NULL){head=p;tail=head;}else if (p->OfficePhone<=head->OfficePhone){p->next=head;head=p;}else if(p->OfficePhone>=tail->OfficePhone) {tail->next=p;tail=p;}else{while (p->OfficePhone>=p2->OfficePhone)//p2.OfficePhone<p.OfficePhone{p1=p2;p2=p2->next;}p->next=p2;p1->next=p;}}}/*------------------------分割线---------------------------------------------------------*/void sort() //-----------------------------------------------------------------排序{addr s2;s2.settag(t);node *p=head;while(p){node *p1=new node;node *p2;strcpy(p1->Name,p->Name);strcpy(p1->MobilePhone,p->MobilePhone);strcpy(p1->Email,p->Email);p1->OfficePhone=p->OfficePhone;p1->HomePhone=p->HomePhone;s2.addsort(p1);p2=p;p=p->next;delete p2;}s2.DisplayAll();head=s2.head;s2.head=NULL;tail=s2.tail;s2.tail=NULL;}node *lookup(char *na) //--------------------------------------------------------查找{node *p1;p1=head;while (p1){if (strcmp(p1->Name,na)==0) break;else p1=p1->next;}return(p1);}int Delete(char *na) //----------------------------------------------------------删除{node *p1,*p2;p1=lookup(na);if(p1=lookup(na)){p1->show();cout<<"Sure to Delete? [Y//N]"<<endl;char s;cin>>s;if(s=='Y'||s=='y'){if (strcmp(head->Name,na)==0){p1=head;head=head->next;delete p1;return 1;}else{p1=head;p2=head->next;while (strcmp(p2->Name,na)!=0 && p2->next!=NULL){p1=p2;p2=p2->next;}if (p2&&strcmp(p2->Name,na)==0){p1->next=p2->next;delete p2;return 1;}}}}else cout<<"No Record"<<endl;system("pause");return 0;}void DisplayAll() //-----------------------------------------------3 显示全部节点{node *p1=head;int k=0;system("cls");if(p1==NULL) cout<<"No Record"<<endl;while (p1){k++;p1->show();p1=p1->next;if(k%10==0){system("pause");system("cls");}}}void settag(int tag){t=tag;} //重置tagint gettag(){return(t);} //取tagnode *gethead(){return head;} //取headvoid creatlist(char *fileName) //----------------------------------------------文件读>>重载{ifstream in(fileName);if(!in){cout<<"wrong Name"<<endl;}else{ int n;in>>n;for(int i=1;i<=n;i++){node *s=new node;in>>s;addsort(s);}}in.close();}void writelist(char *fileName) //------------------------------------------------------文件写{ofstream out(fileName);if (head){node *p1=head;while (p1!=tail){out<<setw(10)<<p1->Name<<setw(11)<<p1->OfficePhone<<"(O)"<<setw(11)<<p1->HomePhone<<"(H)"<<setw( 14)<<p1->MobilePhone<<"(M)"<<setw(11)<<p1->Email<<endl;p1=p1->next;}out<<setw(10)<<tail->Name<<setw(11)<<tail->OfficePhone<<"(O)"<<setw(11)<<tail->HomePhone<<"(H)"<<setw(14 )<<tail->MobilePhone<<"(M)"<<setw(11)<<tail->Email<<endl;out.close();}}~addr(){node *p1=head;while(head){p1=head;head=head->next;delete p1;;}}};/*------------------------分割线---------------------------------------------------------*/istream& operator>>(istream &in,node *s) //>>的重载{in>>s->Name>>s->OfficePhone>>s->HomePhone>>s->MobilePhone>>s->Email;return in;}addr s1;void add(void)//--------------------------------------------------------------1 添加{node *s=new node;cin>>s;s1.addsort(s);}void del()//-------------------------------------------------------------------2 删除{char Name[15];s1.Delete(Name);cout<<"Success!"<<endl; system("pause");}void find()//------------------------------------------------------------------4 查找{char Name[15];node *p;cin>>Name;p=s1.lookup(Name);if(p)p->show();else cout<<"Sorry,no record!"<<endl;}void modify()//--------------------------------------------------------------------5 修改{char Name[15];node *p;char *ss[5]={"1.Modify Name","2.Modify OfficePhone","3.Modify HomePhone","4.Modify MobilePhone","5.Modify Email"};cin>>Name;p=s1.lookup(Name);if(p){p->show();cout<<"Input your choice:"<<endl;for (int j=0;j<5;j++)cout<<ss[j]<<endl;int i;cout<<"Choice_<1~5>:";cin>>i;switch (i){case 1:char sn[15];cout<<"Input the new Name:";cin>>sn;p->setName(sn);p->show();if (s1.gettag()==1)s1.sort();break;case 2:int so;cout<<"Input the new OfficePhone number:";cin>>so;p->setOfficePhone(so);p->show();if (s1.gettag()==2)s1.sort();break;case 3:int sh;cout<<"Input the new HomePhone number:";cin>>sh;p->setHomePhone(sh);p->show();break;case 4:char sm[15];cout<<"Input the new MobilePhone number:";p->setMobilePhone(sm);p->show();break;case 5:char se[20];cout<<"Input the new Email:";cin>>se;p->setEmail(se);p->show();break;}}else cout<<"Sorry,no record!"<<endl;}void addtxt()//--------------------------------------------------------------6 批量写入{char Name[15];cin>>Name;s1.creatlist(Name);cout<<"Success!"<<endl; system("pause");}void writetxt()//--------------------------------------------------------------7 批量写出{char Name[15];cin>>Name;s1.writelist(Name);cout<<"Success!"<<endl; system("pause");}void sort()//--------------------------------------------------------------8 排序{int k=s1.gettag();char ss;if(k==1){cout<<"Now it is sorted by Name."<<endl<<"Change to sort by OfficePhone numben? [Y//N]"<<endl;cin>>ss;if (ss=='Y'||ss=='y') {s1.settag(2);s1.sort();}}if(k==2){cout<<"Now it is sorted by OfficePhone nember."<<endl<<"Change to sort by Name? [Y//N]"<<endl;cin>>ss;if (ss=='Y'||ss=='y') {s1.settag(1);s1.sort();}}}void quit()//--------------------------------------------------------------9 退出{s1.writelist("data1.txt");s1.writelistbin();cout<<"Thanks For using Address list Manger System."<<endl;system("pause");exit(0);}/*------------------------分割线||菜单定义&&主程序---------------------------------------------------------*/int menu(){char *m[9]={"1.Add Record","2.Delete Record","3.Display All Record","4.Query by Name","5.Modify Record","6.Add from a Text File","7.Write to a Text File","8.Sort","9.Qiut"};int i;char c;do{system("cls"); //清屏cout<<"Welcome TO Address list Manger System"<<endl<<endl<<"====================================="<<endl;for (i=0;i<9;i++) cout<<m[i]<<endl;cout<<"Chioce_(1_8,9):";cin>>c;}while (c<'0'||c>'9');return(c-'0');}void main(){s1.creatlist("data.dat");for(;;){switch(menu()){case 1:cout<<"Please Input: \n<Name> <OfficePhone> <HomePhone> <MobilePhone> <Email>"<<endl;add(); cout<<"Success!"<<endl; system("pause");break;case 2:cout<<"Please Input the Name you'd delete:"<<endl;del();break;case 3:if(s1.gethead()) s1.DisplayAll();else cout<<"No record!"<<endl;system("pause");break;case 4:cout<<"Please Iput the Name you'd find:"<<endl;find();system("pause");break;case 5:cout<<"Please Input the Name you'd change:"<<endl;modify();system("pause");break;case 6:cout<<"Please input the text's Name:";addtxt();break;case 7:cout<<"Please input the text's Name:";writetxt();break;case 8:sort();system("pause");break;case 9:quit();}}}七、数据测试1、输入:1输出:Please Input:<Name> <OfficePhone> <HomePhone> <MobilePhone> <Email> 输入:a 3 3 3 a输出:Success!输入:1输出:Please Input:<Name> <OfficePhone> <HomePhone> <MobilePhone> <Email> 输入:b 1 1 1 b输出:Success!输入:1输出:Please Input:<Name> <OfficePhone> <HomePhone> <MobilePhone> <Email> 输入:c 2 2 2 c输出:Success!2、输入:2输出:Please Input the Name you'd delete:输入:c输出:c 2(O)2(H)2(M) cSure to Delete?[Y//N]输入:Y输出:Completed!输入:2输出:Please Input the Name you'd delete:输入:q输出:No Record!输出:Completed!3、输入:3输出:a 3(O) 3(H) 3(M) ab 1(O) 1(H) 1(M) bc 2(O) 2(H) 2(M) c4、输入:4输出:Please Input the Name you'd find:输入:a输出:a 3(O) 3(H) 3(M) a 输入:4输出:Please Input the Name you'd find:输入:q输出:Sorry,no record!5、输入:5输出:Please Input the Name you'd change:输入:b输出: b 1(O) 1(H) 1(M) b Input your chioce:1、Modify Name2、Modify OfficePhone3、Modify HomePhone4、Modify MobilePhone5、Modify EmailChioce_(1~5):输入:1输出:Input the new name:输入:a1输出: a 3(O) 3(H) 3(M) a a1 1(O) 1(H) 1(M) bc 2(O) 2(H) 2(M) c输入:5输出:Please Input the Name you'd change:输入:a1输出:a1 1(O) 1(H) 1(M) b Input your chioce:1、Modify Name2、Modify OfficePhone3、Modify HomePhone4、Modify MobilePhone5、Modify EmailChioce_(1~5):输入:2输出:Input the new OfficePhone number:输入:4输出:a1 4(O) 1(H) 1(M) b 输入:5输出:Please Input the Name you'd change:输入:a1输出:a1 4(O) 1(H) 1(M) b Input your chioce:6、Modify Name7、Modify OfficePhone8、Modify HomePhone9、Modify MobilePhone10、Modify EmailChioce_(1~5):输入:3输出:Input the new HomePhone number:输入:4输出:a1 4(O) 4(H) 1(M) b 输入:5输出:Please Input the Name you'd change:输入:a1输出:a1 4(O) 1(H) 1(M) b Input your chioce:1、Modify Name2、Modify OfficePhone3、Modify HomePhone4、Modify MobilePhone5、Modify EmailChioce_(1~5):输入:4输出:Input the new HomePhone number:输入:4输出:a1 4(O) 4(H) 4(M) b 输入:5输出:Please Input the Name you'd change:输入:a1输出:a1 4(O) 1(H) 1(M) b Input your chioce:1、Modify Name2、Modify OfficePhone3、Modify HomePhone4、Modify MobilePhone5、Modify EmailChioce_(1~5):输入:5输出:Input the new HomePhone number:输入:a1输出:a1 4(O) 4(H) 1(M) a1 6、输入:6输出:Please input the text's name:输入:data.txt输出:Success!7、输入:7输出:Please input the text's name:输入:data_1.txt输出:Success!8、输入:8输出:Now it is sorted by Name.Change to sort by OfficePhone numben? [Y//N]输入:y输出:c 2(O) 2(H) 2(M) ca 3(O) 3(H) 3(M) aa1 4(O) 4(H) 4(M) a1 输入:8输出:Now it is sorted by OfficePhone nember.Change to sort by Name? [Y//N]输入:y输出:a 3(O) 3(H) 3(M) a a1 4(O) 4(H) 4(M) a1c 2(O) 2(H) 2(M) c9、输入:9输出:Thanks For using Address list Manger System.C++语言课程设计Copyright:010910236丁志伟第15页。

相关文档
最新文档