一、题目:
李刚是一爱折腾的人,当然爱折腾的人均有梦想,他想当中国的盖次呢。可不,现在个人好友信息多了,复杂了,他想制作一个个人通讯录的制作管理软件。刚好这个学期学了数据结构课,所以他准备使用数据结构知识来实现了。并考虑使用双向链表作数据结构。并制定了初步要求:
(1)每个好友信息包含姓名、性别、住址、邮编、几岁、电话、QQ、微信帐号、生日等。
(2)作为一个完整的系统,应具有友好的界面和较强的容错能力。
二、代码显示:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{
char name[20];
char tel[20];
char e_mail[30];
char qq[15];
struct node *next;
}connection;
connection *head;
void input_data(connection *);
void find_data(connection *);
void output_data(connection *);
void delete_data(connection *);
void main(){
head=(connection*)malloc(sizeof(connection));
int chioce;char judge;
head->name[0]='C';
head->next=NULL;
do{
printf(" ||------欢迎使用通讯录------||\n\n ");
printf(" --1. 增加联系人\n\n");
printf(" --2. 删除联系人\n\n");
printf(" --3. 查找联系人\n\n");
printf(" --4. 显示所有联系人\n\n");
printf(" --0. 退出\n\n");
printf(" =- 请输入你的选项:");
scanf("%d",&chioce);
switch(chioce){
case 1:input_data(head);break;
case 2:delete_data(head);break;
case 3:find_data(head);break;
case 4:output_data(head);break;
case 0:break;
default:printf("\n |---输入有误!--|\n");
}
if(chioce==0) break;
printf("\n |---是否继续使用通讯录?(Y/N)--|");
//getchar();
judge=getchar();
system("cls");
}while(judge=='Y'||judge=='y');
}
void input_data(connection *head){
connection *temp,*now;
char judge;int i,chioce;
for(now=head;now->next!=NULL;now=now->next); //now指向链表的最后位置
temp=(connection*)malloc(sizeof(connection));
printf("\n |--姓名:"); //数据输入
for(getchar(),i=0;(temp->name[i]=getchar())!='\n';i++);
temp->name[i]='\0';
printf("\n |--电话:");
for(i=0;(temp->tel[i]=getchar())!='\n';i++);
temp->tel[i]='\0';
printf("\n |--E-mail:");
for(i=0;(temp->e_mail[i]=getchar())!='\n';i++);
temp->e_mail[i]='\0';
printf("\n |--QQ:");
for(i=0;(temp->qq[i]=getchar())!='\n';i++);
temp->qq[i]='\0';
temp->next=NULL;
printf("\n |--是否修改?(Y/N)"); //数据修改
judge=getchar();
if(judge=='Y'||judge=='y'){
printf("\n |--1.修改姓名\n\n");
printf(" |--2.修改电话\n\n");
printf(" |--3.修改E-mail\n\n");
printf(" |--4.修改QQ\n\n");
printf(" |--请输入你的选择:");
scanf("%d",&chioce);
switch(chioce){
case 1:printf("\n |--姓名:");
for(getchar(),i=0;(temp->name[i]=getchar())!='\n';i++);
temp->name[i]='\0';break;
case 2:printf("\n |--电话:");
for(i=0;(temp->tel[i]=getchar())!='\n';i++);
temp->tel[i]='\0';break;
case 3:printf("\n |--E-mail:");
for(i=0;(temp->e_mail[i]=getchar())!='\n';i++);
temp->e_mail[i]='\0';break;
case 4:printf("\n |--QQ:");
for(i=0;(temp->qq[i]=getchar())!='\n';i++);
temp->qq[i]='\0';break;
default:printf("\n |--输入有误!\n");
}
}
else if(judge!='N'&&judge!='n')
printf("\n |--选择有误!\n");
printf("\n |--是否保存?(Y/N)"); //数据保存
if(judge!='Y'&&judge!='y')
getchar();
judge=getchar();
if(judge=='Y'||judge=='y'){
now->next=temp;
if(now->next==temp)
printf("\n |--储存成功!\n");
else
printf("\n |--储存失败!\n");
}
else if(judge!='N'&&judge!='n')
printf("\n |--选择有误!\n");
getchar();
}
void find_data(connection *head){
connection *temp;
int i,chioce,flag=0;char data[30];
printf(" |--1.按姓名查找\n\n");
printf(" |--2.按电话查找\n\n");
printf(" |--3.按E-mail查找\n\n");
printf(" |--4.按QQ查找\n\n");
printf(" |--请输入你的选择:");
scanf("%d",&chioce);
switch(chioce){
case 1:printf("\n |--姓名:");
for(i=0,getchar();(data[i]=getchar())!='\n';i++);
data[i]='\0';
for(temp=head->next;temp!=NULL;temp=temp->next){
if(strcmp(data,temp->name)==0){
printf(" |--姓名:%s ",temp->name);
printf(" |--电话:%s ",temp->tel);
printf(" |--E-mail:%s ",temp->e_mail);
printf(" |--QQ:%s\n",temp->qq);
flag=1;
}
}
if(flag==0)
printf("\n |--未找到相匹配的项!\n");
break;
case 2:printf("\n |--电话:");
for(i=0,getchar();(data[i]=getchar())!='\n';i++);
data[i]='\0';
for(temp=head->next;temp!=NULL;temp=temp->next){
if(strcmp(data,temp->tel)==0){
printf(" |--姓名:%s ",temp->name);
printf(" |--电话:%s ",temp->tel);
printf(" |--E-mail:%s ",temp->e_mail);
printf(" |--QQ:%s\n",temp->qq);
flag=1;
}
}
if(flag==0)
printf("\n |--未找到相匹配的项!\n");
break;
case 3:printf("\n |--E-mail:");
for(i=0,getchar();(data[i]=getchar())!='\n';i++);
data[i]='\0';
for(temp=head->next;temp!=NULL;temp=temp->next){
if(strcmp(data,temp->e_mail)==0){
printf(" |--姓名:%s ",temp->name);
printf(" |--电话:%s ",temp->tel);
printf(" |--E-mail:%s ",temp->e_mail);
printf(" |--QQ:%s\n",temp->qq);
flag=1;
}
}
if(flag==0)
printf("\n |--未找到相匹配的项!\n");
break;
case 4:printf("\n |--QQ:");
for(i=0,getchar();(data[i]=getchar())!='\n';i++);
data[i]='\0';
for(temp=head->next;temp!=NULL;temp=temp->next){
if(strcmp(data,temp->qq)==0){
printf(" |--姓名:%s ",temp->name);
printf(" |--电话:%s ",temp->tel);
printf(" |--E-mail:%s ",temp->e_mail);
printf(" |--QQ:%s\n",temp->qq);
flag=1;
}
}
if(flag==0)
printf("\n |--未找到相匹配的项!\n");
break;
default:printf("\n |--输入有误!\n");
}
}
void output_data(connection *head){
connection *temp;
getchar();
for(temp=head->next;temp!=NULL;temp=temp->next){
printf("\n |--姓名:%s ",temp->name);
printf(" |--电话:%s ",temp->tel);
printf(" |--E-mail:%s ",temp->e_mail);
printf(" |--QQ:%s\n",temp->qq);
}
}
void delete_data(connection *head){
connection *temp,*pre;
int i,chioce,flag=0;char data[30];
printf(" |--1. 按姓名删除\n\n");
printf(" |--2. 按电话删除\n\n");
printf(" |--3. 按E-mail删除\n\n");
printf(" |--4. 按QQ删除\n\n");
printf(" =- 请输入你的选择:");
scanf("%d",&chioce);
switch(chioce){
case 1:printf("\n |--姓名:");
for(i=0,getchar();(data[i]=getchar())!='\n';i++);
data[i]='\0';
for(pre=head,temp=head->next;temp!=NULL;){
if(strcmp(data,temp->name)==0){
pre->next=temp->next;
temp=temp->next;
if(pre->next==temp)
printf("\n |--删除成功!\n");
else
printf("\n |--删除失败!\n");
flag=1;
}
else{
temp=temp->next;
pre=pre->next;
}
}
if(flag==0)
printf("\n |--未找到相匹配的项!\n");
break;
case 2:printf("\n |--电话:");
for(i=0,getchar();(data[i]=getchar())!='\n';i++);
data[i]='\0';
for(pre=head,temp=head->next;temp!=NULL;){
if(strcmp(data,temp->tel)==0){
pre->next=temp->next;
temp=temp->next;
if(pre->next==temp)
printf("\n |--删除成功!\n");
else
printf("\n |--删除失败!\n");
flag=1;
}
else{
temp=temp->next;
pre=pre->next;
}
}
if(flag==0)
printf("\n |--未找到相匹配的项!\n");
break;
case 3:printf("\n |--E-mail:");
for(i=0,getchar();(data[i]=getchar())!='\n';i++);
data[i]='\0';
for(pre=head,temp=head->next;temp!=NULL;){
if(strcmp(data,temp->e_mail)==0){
pre->next=temp->next;
temp=temp->next;
if(pre->next==temp)
printf("\n |--删除成功!\n");
else
printf("\n |--删除失败!\n");
flag=1;
}
else{
temp=temp->next;
pre=pre->next;
}
}
if(flag==0)
printf("\n |--未找到相匹配的项!\n");
break;
case 4:printf("\n |--QQ:");
for(i=0,getchar();(data[i]=getchar())!='\n';i++);
data[i]='\0';
for(pre=head,temp=head->next;temp!=NULL;){
if(strcmp(data,temp->qq)==0){
pre->next=temp->next;
temp=temp->next;
if(pre->next==temp)
printf("\n |--删除成功!\n");
else
printf("\n |--删除失败!\n");
flag=1;
}
else{
temp=temp->next;
pre=pre->next;
}
}
if(flag==0)
printf("\n |--未找到相匹配的项!\n");
break;
default:printf("\n |--输入有误!\n");
}
}
1、主界面
2.新建联系人
3.删除联系人
4.查找联系人
5.显示所有联系人