一道C语言链表通讯录的题

用链表建立通讯录。通讯录内容有:姓名、通讯地址、电话号码。要求:(1)通讯录是按姓名项的字母顺序排列的;(2)能查找通讯录中某人的信息;... 用链表建立通讯录。通讯录内容有:姓名、通讯地址、电话号码。
要求:(1)通讯录是按姓名项的字母顺序排列的;
(2)能查找通讯录中某人的信息;
展开
 我来答
丁香花e2
2009-06-18
知道答主
回答量:11
采纳率:0%
帮助的人:13.5万
展开全部
#include <stdio.h>
#include<iostream.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#define null 0 ;
struct record
{
char name[20];
char phone[20];
char adress[40];
char postcode[10];
char e_mail[30];
}student[30];
struct LinkList
{
struct record US;
struct LinkList *next;
}a;
struct LinkList *head=null;
int num=0;
FILE *fp;
int menu_select();
int adduser();
int list();
int search();
int display();
int add();
int listbyname();
int dele();
int save();
int exit();
void main()
{
system("cls");
for(;;)
{
switch(menu_select())
{
case 0:
adduser();
break;
case 1:
list();
break;
case 2:
search();
break;
case 3:
display();
break;
case 4:
add();
break;
case 5:
listbyname();
break;
case 6:
dele();
break;
case 7:
save();
break;
case 8:
exit(0);
}
}
}
menu_select()
{
int s;
int a;
cout<<"*_* 按任意键进入菜单! *_* "<<endl;
getch();
system("cls");
cout<<"\t\t********************MENU*********************\n"<<endl;
cout<<"\t\t 0. 输入记录"<<endl;
cout<<"\t\t 1. 显示记录 "<<endl;
cout<<"\t\t 2. 按姓名查找"<<endl;
cout<<"\t\t 3. 按电话号码查找"<<endl;
cout<<"\t\t 4. 增加用户"<<endl;
cout<<"\t\t 5. 按姓名排序"<<endl;
cout<<"\t\t 6. 删除记录"<<endl;
cout<<"\t\t 7. 记录保存文件"<<endl;
cout<<"\t\t 8. Quit"<<endl;
cout<<"\t\t***********************************************"<<endl;
do{
cout<<"\n 输入你的选择(0~8):";
cin>>s;
a=s;
}
while (a<0||a>8);
return a;
}
adduser()
{
cout<<"\n\t\t**************** 请输入用户信息 ****************"<<endl;
cout<<"\n\t\t输入姓名:";
cin>>student[num].name;
cout<<"\n\t\t输入电话号码:";
cin>>student[num].phone;
cout<<"\n\t\t输入地址:";
cin>>student[num].adress;
cout<<"\n\t\t输入邮编:";
cin>>student[num].postcode;
cout<<"\n\t\t输入e-mail:";
cin>>student[num].e_mail;
num++;
cout<<"\n\t\t是否继续添加?(Y/N):";
char z;
cin>>z;
if((z=='y')||(z=='Y'))
adduser();
return(0);
}
list()
{
int i;
system("cls");
if(num!=0)
{
cout<<"\n\t\t*************** 以下为通讯录所有信息************";
for(i=0;i<num;i++)
{
cout<<"\n\t\t姓名:"<<student[i].name;
cout<<"\n\t\t电话: "<<student[i].phone;
cout<<"\n\t\t地址: "<<student[i].adress;
cout<<"\n\t\t邮编: "<<student[i].postcode;
cout<<"\n\t\te-mail:"<<student[i].e_mail;
cout<<"\t\t";
if(i+1<num)
{
cout<<"\n\t\t__________________________";
system("pause");
}
}
cout<<"\n\t\t************************************************";
}
else
cout<<"\n\t\t通讯录中无任何纪录";
cout<<"\n\t\t按任意键返回主菜单:";
getch();
return(0);
}
search()
{
int mark=0;
int i;
int a=0;
cout<<"\n\t\t***************** 按姓名查找 *******************";
char name[20];
cout<<"\n\t\t请输入姓名:";
cin>>name;
for(i=a;i<num;i++)
{
if(strcmp(student[i].name,name)==0)
{
cout<<"\n\t\t************* 以下是您查找的用户信息 ***********";
cout<<"\n\t\t姓名: "<<student[i].name;
cout<<"\n\t\t电话: "<<student[i].phone;
cout<<"\n\t\t地址: "<<student[i].adress;
cout<<"\n\t\te-mail:"<<student[i].e_mail;
cout<<"\n\t\t************************************************";
mark++;
if((i+1)<num)
{
cout<<"\n\t\t是否继续查找相同名字的用户信息:(y/n)";
char y;cin>>y;
if((y=='y')||(y=='Y'))
{
a=i;
continue;
}
else
return(0);
}
else
{
cout<<"\n\t\t按任意键返回主菜单";
getch();
return(0);
}
}
}
if(mark==0)
{
cout<<"\n\t\t没有相同姓名的用户纪录";
cout<<"\n\t\t按任意键返回主菜单";
getch();
return(0);
}

}
display()
{
int mark=0;
int i;
int a=0;
cout<<"\n\t\t****************** 按电话查找 ******************";
char phone[10];
cout<<"\n\t\t请输入电话号码:";
cin>>phone;
for(i=0;i<num;i++)
{
if(strcmp(student[i].phone,phone)==0)
{
cout<<"\n\t\t************** 以下是您查找的用户信息 **********";
cout<<"\n\t\t姓名: "<<student[i].name;
cout<<"\n\t\t电话: "<<student[i].phone;
cout<<"\n\t\t地址: "<<student[i].adress;
cout<<"\n\t\te-mail:"<<student[i].e_mail;
cout<<"\n\t\t************************************************";
cout<<"\n\t\t按任意键返回主菜单:";
mark++;
getch();
return(0);
}
}
if(mark==0)
{
cout<<"\n\t\t没有改用户的信息";
cout<<"\n\t\t按任意键返回主菜单";
getch();
return(0);
}
return(0);
}
add()
{
int i;
if((fp=fopen("student.bin","wb"))==NULL)
{
cout<<"\n\t\t文件打开失败";
}
for (i=0;i<num;i++)
{
if (fwrite(&student[i],sizeof(struct record),1,fp)!=1)
{
cout<<"\n\t\t写入文件错误!\n";
}
cout<<"\n\t\t**************** 请输入用户信息 ****************"<<endl;
cout<<"\n\t\t输入姓名:";
cin>>student[num].name;
cout<<"\n\t\t输入电话号码:";
cin>>student[num].phone;
cout<<"\n\t\t输入地址:";
cin>>student[num].adress;
cout<<"\n\t\t输入邮编:";
cin>>student[num].postcode;
cout<<"\n\t\t输入e-mail:";
cin>>student[num].e_mail;
num++;
cout<<"\n\t\t是否继续添加?(Y/N):";
if(getch()=='y')
adduser();
return(0);
}
fclose(fp);
cout<<"\n\t\t通讯录文件已保存";
cout<<"\n\t\t按任意键退出程序\n\t\t";
exit(0);
return(0);
}
void deletebyphone()
{
int i,j;
int deletemark=0;
char phone[20];
cout<<"\n\t\t请输入要删除用户电话号码:";
cin>>phone;
if(num==0)
{
cout<<"\n\t\t对不起,文件中无任何纪录";
cout<<"\n\t\t按任意键返回主菜单";
getch();
return;
}
for (i=0;i<num;i++)
{
if(strcmp(student[i].phone,phone)==NULL)
{
cout<<"\n\t\t以下是您要删除的用户纪录:";
cout<<"\n\t\t姓名: "<<student[i].name;
cout<<"\n\t\t电话: "<<student[i].phone;
cout<<"\n\t\t地址: "<<student[i].adress;
cout<<"\n\t\te-mail:"<<student[i].e_mail;
cout<<"\n\t\t是否删除?(y/n)";
char u;cin>>u;
if((u=='y')||(u=='Y'))
{
for(j=i;j<num-1;j++)
student[j]=student[j+1];
num--;
deletemark++;
cout<<"\n\t\t删除成功";
cout<<"\n\t\t是否继续删除?(y/n)";
char v;cin>>v;
if((v=='y')||(v=='Y'))
deletebyphone();
return;
}
else
return;
}
continue;
}
if(deletemark==0)
{
cout<<"\n\t\t没有该用户的纪录";
cout<<"\n\t\t是否继续删除?(y/n)";
char m;cin>>m;
if((m=='y')||(m=='Y'))
deletebyphone();
return;
}
}
void deletebyname()
{
int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name[20];
cout<<"\n\t\t请输入要删除用户姓名:";
cin>>name;
for(i=a;i<num;i++)
{
if(strcmp(student[i].name,name)==NULL)
{
cout<<"\n\t\t以下是您要删除的用户纪录:";
findmark++;
cout<<"\n\t\t________________________________";
cout<<"\n\t\t姓名: "<<student[i].name;
cout<<"\n\t\t电话: "<<student[i].phone;
cout<<"\n\t\t地址: "<<student[i].adress;
cout<<"\n\t\te-mail:"<<student[i].e_mail;
cout<<"\n\t\t________________________________";
cout<<"\n\t\t是否删除?(y/n)";
char n;cin>>n;
if((n=='y')||(n=='Y'))
{
for(j=i;j<num-1;j++)
student[j]=student[j+1];
num--;
deletemark++;
cout<<"\n\t\t删除成功";
if((i+1)<num)
{
cout<<"\n\t\t是否继续删除相同姓名的用户信息?(y/n)";
char l;cin>>l;
if((l=='y')||(l=='Y'))
{
a=i;
continue;
}
}
cout<<"\n\t\t是否继续删除?(y/n)";
char o;cin>>o;
if((o=='y')||(o=='Y'))
deletebyname();
return;
}
if((i+1)<num)
{
cout<<"\n\t\t是否继续删除相同姓名的用户信息?(y/n)";
char p;cin>>p;
if((p=='y')||(p=='Y'))
{
a=i;
continue;
}
}
}
else
continue;
}
if((deletemark==0)&&(findmark==0))
{
cout<<"\n\t\t没有该用户的纪录";
cout<<"\n\t\t是否继续删除?(y/n)";
char q;cin>>q;
if((q=='y')||(q=='Y'))
deletebyphone();
return;
return;
}
else if(findmark!=0)
{
cout<<"\n\t\t没有重名信息";
cout<<"\n\t\t没有该用户的纪录";
cout<<"\n\t\t是否继续删除?(y/n)";
char r;cin>>r;
if((r=='y')||(r=='Y'))
deletebyphone();
return;
return;
}
}
dele()
{
int choic;
cout<<"\n\t\t1-按电话号码删除 2-按姓名删除";
cout<<"\n\t\t请选择:";
cin>>choic;
switch (choic)
{
case 1:
deletebyphone();
break;
case 2:
deletebyname();
break;
}
return(0);
}
listbyname()
{
int i,j;
struct record tmp;
for(i=1;i<num;i++)
{
if(strcmp(student[i].name,student[i-1].name)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while ((strcmp(tmp.name,student[j].name)<0&&j>=0));
student[j+1]=tmp;
}
}
cout<<"\n\t\t排序成功,是否显示?(y/n)";
char x;cin>>x;
if((x=='y')||(x=='Y'))
list();
return(0);
}
save()
{
int j;
FILE*fp;
fp=fopen("student.txt","w");
if (fp==NULL)
cout<<"不能打开文件.";
if(num!=0)
{
for(j=0;j<num;j++)
{
fwrite(student,sizeof(student),1,fp);
}
}
cout<<"保存成功!";
fclose(fp);
return(0);
}
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机原理由运算器、控制器、存储器、输入输出设备构成,单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程;单片机的应用:节能控制;智能语音设备;报警控制;医疗设备。 单片机原理及应用 本书详细地介绍了MC... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式