📄 tongxunlu.cpp
字号:
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
#include<string.h>
struct Tong
{
char name[20];
long telnumber;
char email[20];
char relation[20];
Tong* next;
};
Tong* head;
int n;
/*输入新的纪录*/
void input()
{
Tong *in, *in_end, *i;
char ch='y';
char e[20];
int q=0;
in=in_end=i=new Tong;
head=in;
n=0;
while(ch=='y'||ch=='Y')
{
if(head->next==NULL)
head->next=in;
else
in_end->next=in;
in_end=in;
in=new Tong;
printf("\n请输入以下信息。\n\n");
printf("姓名:");
scanf("%s",&in_end->name);
printf("电话:");
scanf("%d",&in_end->telnumber);
printf( "Email:" );
n2: scanf("%s",&in_end->email);
n1: strcpy (e,in_end->email);
if(e[0]=='_') // email以不能是下划线'_',斜杠'\'或'/',点号'.'开头
{
printf("\n Email以不能以_开头,请重新输入:");
scanf("%s",&in_end->email);
goto n1;
}
else if (e[0]=='/')
{
printf("\n Email以不能以/开头,请重新输入:");
scanf("%s",&in_end->email);
goto n1;
}
else if (e[0]=='.')
{
printf("\n Email以不能以.开头,请重新输入:");
scanf("%s",&in_end->email);
goto n1;
}
for(int j=0;j<20;j++)
{
if(e[j]=='@')
{
q=1;
break;
}
}
if(q==1)
goto n3;
else if(q==0)
{
printf("\nEmail无@,请重新输入!\n");
goto n2;
}
n3:
printf( "关系(Relative, Friend, Workmate或Classmate):") ;
scanf("%s",&in_end->relation);
getchar();
in_end->next=in;
in_end=in_end->next;
in_end->next=NULL;
printf("是否还要输入:(y/n)");
scanf("%c", &ch);
n++;
i=head;
}
printf("输入通讯记录%d个!\n",n);
return;
}
/*显示所有记录*/
void xianshi(Tong* x_head)
{
Tong* x_end;
x_end=x_head;
printf("****************************************\n");
printf("*姓名 电话 Email 关系 *\n");
printf("****************************************\n");
printf("%s\t%d\t%s\t%s\t",x_end->name,x_end->telnumber,x_end->email,x_end->relation);
printf("\r\n");
while(1)
{
x_end=x_end->next;
if (x_end==NULL)
break;
else if (x_end->telnumber<0)
break;
printf("%s\t%d\t%s\t%s\t",x_end->name,x_end->telnumber,x_end->email,x_end->relation);
printf("\r\n");
}
cout<<"请按回车继续!"<<endl;
getchar();
getchar();
return;
}
/*从文件读入记录*/
Tong *loadfile(Tong *head)
{
Tong* l_end,*l,*pf,*pb;
FILE *fp;
int m=0;
n=0;
fp=fopen("Phonebook.txt","r+");
printf("******************************\n");
printf("*姓名 电话 Email 关系 *\n");
printf("******************************\n");
while(!feof(fp))
{
m++;
l_end=new Tong;
fscanf(fp,"%s%d%s%s",l_end->name,&l_end->telnumber,l_end->email,&l_end->relation);
if(l_end->telnumber<0)
{
l->next=NULL;
//fclose(fp);
return(head);
}
printf("%s\t%d\t%s\t%s\t\n",l_end->name,l_end->telnumber,l_end->email,l_end->relation);
n=n+1;
if(n==1)
{
head=l_end;
l=l_end;
}
else
l->next=l_end;
l=l_end;
}
l->next=NULL;
fclose(fp);
n=m;
return (head);
}
/*保存文件*/
void savefile()
{
Tong *s_end;
FILE *fp;
s_end=head;
fp=fopen("Phonebook.txt","wt+");
printf("******************************\n");
printf("*姓名 电话 Email 关系 *\n");
printf("******************************\n");
while(1)
{
fprintf(fp,"%s\t%d\t%s\t%s\n",s_end->name,s_end->telnumber,s_end->email,s_end->relation);
s_end=s_end->next;
if (s_end==NULL)
break;
else if (s_end->telnumber<0)
break;
}
fclose(fp);
printf("记录已保存到Phonebook.txt文件中!\n");
return;
}
/*删除*/
void delet()
{
Tong *d_end, *d;
char delname[20];
int del,de=0;
d_end=head->next;
printf( "请输您想删除的记录的姓名:");
scanf("%s",delname);
del=strcmp(head->name,delname);
if(del==0)
{
d=head;
head=head->next;
delete d;
cout << "姓名为"<< delname <<"的记录删除成功!"<<endl;
return;
}
d=head;
while(1)
{
del=strcmp(d_end->name,delname);
if(del==0)
if(d_end->next==NULL)
{
d->next=NULL;
delete d_end;
cout << "姓名为"<< delname <<"的记录删除成功!"<<endl;
return;
}
else
{
d->next=d_end->next;
delete d_end;
cout << "姓名为"<< delname <<"的记录删除成功!"<<endl;
return;
}
d=d_end;
d_end=d_end->next;
if(d_end==NULL)
break;
}
cout << "姓名为" << delname <<"的记录不存在!"<<endl;
cout<<"请按回车继续!"<<endl;
getchar();
getchar();
}
/*查询*/
void select(Tong *s_head)
{
Tong *s_end;
s_end=s_head;
char selname[20];
int sel;
printf( "请输您想查找的姓名:");
scanf("%s",selname);
while(1)
{
sel=strcmp(s_end->name,selname);
if(sel==0)
{
cout << endl << "您查找的通讯记录如下:" <<endl;
cout << "姓名:" << s_end->name << endl;
cout << "电话:" << s_end->telnumber << endl;
cout << "Email:" << s_end->email << endl;
cout << "关系:" << s_end->relation << endl;
break;
}
else
s_end=s_end->next;
if (s_end==NULL)
{
printf("您要查询的纪录不存在!\n");
break;
}
}
}
/*修改*/
void xiugai()
{
int xiu,p;
char xiuname[20];
Tong *xiu_end;
xiu_end=head;
if(head==NULL)
{
printf("通讯记录为空,请先建立记录!\n\n");
cout<<"请按回车继续!"<<endl;
getchar();
getchar();
return;
}
printf("请输入要修改的通讯记录的姓名:");
scanf("%s",xiuname);
while(xiu_end!=NULL)
{
xiu=strcmp(xiu_end->name,xiuname);
if(xiu==0)
{
cout << "原记录如下:";
cout << "姓名:" << xiu_end->name << endl;
cout << "电话:" << xiu_end->telnumber << endl;
cout << "Email:" << xiu_end->email << endl;
cout << "关系:" << xiu_end->relation << endl;
cout <<endl<<endl<<endl;
printf("修改姓名按1\n");
printf("修改电话按2\n");
printf("修改Email按3\n");
printf("修改关系按4\n");
printf("退出按0\n");
printf("请选择需要修改的信息:");
scanf("%d",&p);
switch(p)
{
case 0:
break;
case 1:
printf("\n请输入新的姓名:");
scanf("%s",xiu_end->name);
break;
case 2:
printf("\n请输入新的电话:");
scanf("%d",&xiu_end->telnumber);
break;
case 3:
printf("\n请输入新的Email:");
scanf("%s",xiu_end->email);
break;
case 4:
printf("\n请输入新的关系:");
scanf("%s",xiu_end->relation);
break;
default:
cout << endl <<"Sorry,您输入错误,请重新输入";
}
return;
}
xiu_end=xiu_end->next;
}
printf("\n要修改的记录不存在!\n");
}
/*排序*/
Tong* paixu(Tong *head)
{
Tong *p,*max;
int i,j,k,pai;
char t[20];
if(head==NULL)
{
printf("\n没有通讯资料,请先建立\n");
return (head);
}
p=max=head;
printf("按总评分排序如下!\n");
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p;
p=p->next;
pai=strcmp(max->name,p->name);
if(pai>0)
{
strcpy(t,max->name);
strcpy(max->name,p->name);
strcpy(p->name,t);
/*交换前后结点中的姓名,使得姓名大者移到后面的结点中*/
k=max->telnumber;
max->telnumber=p->telnumber;
p->telnumber=k;
/*交换前后结点中的电话,使之与姓名相匹配*/
strcpy(t,max->email);
strcpy(max->email,p->email);
strcpy(p->email,t);
/*交换前后结点中的email,使之与姓名相匹配*/
strcpy(t,max->relation);
strcpy(max->relation,p->relation);
strcpy(p->relation,t);
/*交换前后结点中的关系,使之与姓名相匹配*/
}
}
max=head;
p=head;/*重新使max,p指向链表头*/
}
xianshi(head);
return (0);/*打印值排序后的链表内容*/
}
void guanxi()
{
Tong *g_end;
int gx,g,num=0;
g_end=head;
printf("请选择按什么关系输入(1为Relative,2为Friend,3为Workmate,4为Classmate):");
scanf("%d",&g);
switch(g)
{
case 1:
{
printf("******************************\n");
printf("*姓名 电话 Email 关系 *\n");
printf("******************************\n");
while(1)
{
if (g_end==NULL)
{
if (num==0)
{
printf("您要查询的关系无记录!\n");
break;
}
else
printf("共%d条记录 \n",num);
break;
}
gx=strcmp(g_end->relation,"relative");
if(gx==0)
{
printf("%s\t%d\t%s\t%s\t\n",g_end->name,g_end->telnumber,g_end->email,g_end->relation);
g_end=g_end->next;
num++;
}
else
g_end=g_end->next;
}
break;
}
case 2:
{
printf("******************************\n");
printf("*姓名 电话 Email 关系 *\n");
printf("******************************\n");
while(1)
{
if (g_end==NULL)
{
if (num==0)
{
printf("您要查询的关系无记录!\n");
break;
}
else
printf("共%d条记录 \n",num);
break;
}
gx=strcmp(g_end->relation,"friend");
if(gx==0)
{
printf("%s\t%d\t%s\t%s\t\n",g_end->name,g_end->telnumber,g_end->email,g_end->relation);
g_end=g_end->next;
num++;
}
else
g_end=g_end->next;
}
break;
}
case 3:
{
printf("******************************\n");
printf("*姓名 电话 Email 关系 *\n");
printf("******************************\n");
while(1)
{
if (g_end==NULL)
{
if (num==0)
{
printf("您要查询的关系无记录!\n");
break;
}
else
printf("共%d条记录 \n",num);
break;
}
gx=strcmp(g_end->relation,"workmate");
if(gx==0)
{
printf("%s\t%d\t%s\t%s\t\n",g_end->name,g_end->telnumber,g_end->email,g_end->relation);
g_end=g_end->next;
num++;
}
else
g_end=g_end->next;
}
break;
}
case 4:
{
printf("******************************\n");
printf("*姓名 电话 Email 关系 *\n");
printf("******************************\n");
while(1)
{
if (g_end==NULL)
{
if (num==0)
{
printf("您要查询的关系无记录!\n");
break;
}
else
printf("共%d条记录 \n",num);
break;
}
gx=strcmp(g_end->relation,"classmate");
if(gx==0)
{
printf("%s\t%d\t%s\t%s\t\n",g_end->name,g_end->telnumber,g_end->email,g_end->relation);
g_end=g_end->next;
num++;
}
else
g_end=g_end->next;
}
break;
}
}
}
void main()
{
int q;
int k=0;
for (;;)
{
printf("----------------------------------\n");
printf("\t新建记录: 1\n");
printf("\t从文件调入记录: 2\n");
printf("\t显示数据: 3\n");
printf("\t删除记录: 4\n");
printf("\t查询记录: 5\n");
printf("\t修改记录: 6\n");
printf("\t排序(按姓名): 7\n");
printf("\t保存记录: 8\n");
printf("\t按关系显示: 9\n");
printf("\t退出: 0\n");
printf("----------------------------------\n");
printf("请输入你想进行的操作:");
scanf("%d", &q);
switch(q)
{
case 0:
exit(0);
break;
case 1:
input();
printf("\n\n\n");
break;
case 2:
head=loadfile(head);
printf("\n\n\n");
break;
case 3:
xianshi(head);
printf("\n\n\n");
break;
case 4:
delet();
printf("\n\n\n");
break;
case 5:
select(head);
printf("\n\n\n");
break;
case 6:
xiugai();
printf("\n\n\n");
break;
case 7:
paixu(head);
printf("\n\n\n");
break;
case 8:
savefile();
printf("\n\n\n");
break;
case 9:
guanxi();
printf("\n\n\n");
break;
default:
printf("\n您输入错误,请重新输入\n");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -