#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 100
#define KeyType ElemType
typedef struct
{
char name[20];//姓名
char Number[20];//号码
char QQ[20];//qq
char Email[20];//邮件
char gender[20];
}ElemType;
typedef struct
{
ElemType *R; //表基址
int length; //表长
} SSTable;
int Search_Seq(SSTable ST,KeyType key)//若成功返回其位置信息,否则返回 0
{
int i;
i=ST.length;
ST.R[0]=key;
while(strcmp(ST.R[i].name,key.name)&&i>=1)//strcmp()比较字符串相等返回0
{
i--;
}
return i;
}
SSTable Creat_Seq(SSTable ST) //创建空电话簿
{
ST.R=(ElemType *)malloc(sizeof(ElemType)*(MAXSIZE+1));
ST.length=0;
printf("//电话薄创建成功\n");
return ST;
}
SSTable Insert_Seq(SSTable ST,KeyType key) //向表中插入一个新朋友的电话
{
int i;
ST.length++;
ST.R[ST.length]=key;
printf("//联系人插入成功\n");
return ST;
}
SSTable Delete_Seq(SSTable ST,KeyType key)//从表中删除一个人的电话
{
int j;
int i=Search_Seq(ST,key);//if(i<1||i>ST.length)printf("删除失败\n");
if(i==0){printf("删除失败,电话薄中无此人\n");return ST;}
for(j=i;j<=ST.length;j++)
{
ST.R[j]=ST.R[j+1];
}
ST.length--;
printf("//联系人已删除\n");
return ST;
}
SSTable Modify_Seq(SSTable ST,KeyType key) //修改表中某个朋友的信息
{
int select;
int i=Search_Seq(ST,key);
if(i==0){printf("修改失败,电话薄中无此人\n");return ST;}
while(select!=0)
{
printf("请输入所要修改的信息:\n");
printf("****修改姓名 输入1****\n");
printf("****修改电话 输入2****\n");
printf("****修改qq 输入3****\n");
printf("****修改邮箱 输入4****\n");
printf("****修改性别 输入5****\n");
printf("****结束修改 输入0****\n");
printf("****请选择;");
scanf("%d",&select);
switch(select)
{
case 1:
getchar();
printf("请输入修改后的姓名;\n");
scanf("%s",&ST.R[i].name);
break;
case 2:
getchar();
printf("请输入修改后的电话号码;\n");
scanf("%s",&ST.R[i].Number);
break;
case 3:
getchar();
printf("请输入修改后的qq\n");
scanf("%s",&ST.R[i].QQ);
break;
case 4:
getchar();
printf("请输入修改后的邮箱;\n");
scanf("%s",&ST.R[i].Email);
break;
case 5:
getchar();
printf("请输入修改后的性别;\n");
scanf("%s",&ST.R[i].gender);
break;
default:
break;
}
}
printf("//信息已修改\n");
return ST;
}
SSTable Print_Seq(SSTable ST) //打印表中每个朋友的信息
{
int i=0;
printf("电话薄:\n");
for(i=1;i<=ST.length;i++)
{
printf("姓名: %s 性别: %s 号码: %s QQ: %s 邮箱: %s\n",ST.R[i].name,ST.R[i].gender,ST.R[i].Number,ST.R[i].QQ,ST.R[i].Email);
fflush(stdin);
}
printf("\n");
}
void chaxun(SSTable ST,KeyType key)
{
int i=Search_Seq(ST,key);
if(i==0)printf("查询失败,电话薄中无此人\n");
else printf("姓名: %s 性别: %s 号码: %s QQ: %s 邮箱: %s\n",ST.R[i].name,ST.R[i].gender,ST.R[i].Number,ST.R[i].QQ,ST.R[i].Email);
}
SSTable Sort_Seq(SSTable ST)
{
int i=0,max=0,j=0;
ElemType t;
for(i=1;i<ST.length;i++)
{
max=i;
for(j=i+1;j<=ST.length;j++)
// {
if(strcmp(ST.R[j].name,ST.R[max].name)==-1)max=j;
// }
if(max!=i)
{
t=ST.R[max];
ST.R[max]=ST.R[i];
ST.R[i]=t;
}
}
printf("//电话薄排序已完成\n");
return ST;
}
void OperateMenu()
{
printf("***输入1 插入新朋友的信息***\n");
printf("***输入2 删除某人的信息*****\n");
printf("***输入3 修改某人的信息*****\n");
printf("***输入4 打印电话簿*********\n");
printf("***输入5 查询某人信息*******\n");
printf("***输入6 对电话簿进行排序***\n");
}
int main()
{
KeyType key;
SSTable ST;ElemType e;
ST=Creat_Seq(ST);
int select1;
int select;
printf("是否要批量输入信息?\n");
printf("是 请输入1\n");
printf("否 请输入2\n");
scanf("%d",&select1);
if(select1==1)
{
printf("请输入所要记录的联系人数量\n");
scanf("%d",&ST.length);
for(int i=1;i<=ST.length;i++)
{
getchar();
printf("请输入第%d条联系人的信息\n",i);
printf("姓名:\n");
scanf("%s",&ST.R[i].name);
printf("性别:\n");
getchar();
scanf("%s",&ST.R[i].gender);
printf("电话号码:\n");
getchar();
scanf("%s",&ST.R[i].Number);
printf("QQ:\n");
getchar();
scanf("%s",&ST.R[i].QQ);
printf("邮箱:\n");
getchar();
scanf("%s",&ST.R[i].Email);
}
printf("//批量信息输入完成\n");
}
while(1)
{
OperateMenu();
printf("请选择:\n");
scanf("%d",&select);
switch(select)
{
case 1:
getchar();
printf("请输入要插入的联系人信息\n");
printf("姓名:\n");
scanf("%s",&key.name);
getchar();
printf("电话号码:\n");
scanf("%s",&key.Number);
getchar();
printf("性别:\n");
scanf("%s",&key.gender);
getchar();
printf("QQ:\n");
scanf("%s",&key.QQ);
getchar();
printf("邮箱:\n");
scanf("%s",&key.Email);
getchar();
ST=Insert_Seq(ST,key);