#include <stdio.h>
#define data a[i].no,a[i].name,a[i].phone,a[i].address
//函数声明 -----------------------------------------
void menu();//菜单
void menu_go(int n);//主菜单的实现
void add();//通讯信息录入
void show();//通讯信息显示
void del();//通讯信息删除
void modify();//通讯信息修改
void lookup_menu();//通讯信息查询菜单
void lookup_menu_go(int n);//通讯信息查询菜单的实现
void lookup_no();//按编号查询
void lookup_no();//按姓名查询
void lookup_no();//按手机号码查询
void insert();//通讯信息插入
void order();//通讯信息排序
//结构体 -------------------------------------------
struct list
{
char no[20];//编号
char name[20];//姓名
char phone[30];//电话号码
char address[50];//地址
};
struct list a[100];
//--------------------------------------------------
//函数定义------------------------------------------
//主函数
void main()
{
int n = 1;
while(n)
{
menu();
printf("请输入想要执行的功能:");
scanf("%d",&n);
menu_go(n);
}
}
//菜单
void menu()
{
system("cls");
printf("通讯录管理系统\n");
printf("1.通讯信息录入\n");
printf("2.通讯信息显示\n");
printf("3.通讯信息删除\n");
printf("4.通讯信息修改\n");
printf("5.通讯信息查询\n");
printf("6.通讯信息插入\n");
printf("7.通讯信息排序\n");
printf("0.退出程序\n");
}
//主菜单的实现
void menu_go(int n)
{
if(n == 0)
{
return;
}
else
{
switch (n)
{
case 1:add();break;
case 2:show();printf("按任意键继续");getch();break;
case 3:del();break;
case 4:modify();break;
case 5:lookup();break;
case 6:insert();break;
case 7:order();break;
default:break;
}
}
}
//通讯信息录入
void add()
{
int i, m = 0;
char ch[4] = "y";
FILE* fp;
if ((fp = fopen("data.txt", "a+")) == NULL)
{
printf("文件不存在\n");
return;
}
while (!feof(fp))
{
fscanf(fp,"%s %s %s %s",&a[m].no,&a[m].name,&a[m].phone,&a[m].address);
m++;
}
while(strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
printf("请输入联系人信息:\n");
printf("编号:");
scanf("%s", &a[m].no);
printf("姓名:");
scanf("%s", &a[m].name);
printf("手机号码:");
scanf("%s", &a[m].phone);
printf("地址:");
scanf("%s", &a[m].address);
fprintf(fp,"\n%s %s %s %s",&a[m].no,&a[m].name,&a[m].phone,&a[m].address);
printf("姓名为%s的通讯信息保存成功,是否继续添加(y/n):", a[m].name);
m++;
scanf("%s",&ch);
}
fclose(fp);
}
//通讯信息显示
void show()
{
FILE* fp;
int i, m = 0;
if ((fp = fopen("data.txt", "r")) == NULL)
{
printf("文件不存在\n");
return;
}
while (!feof(fp))
{
fscanf(fp,"%s %s %s %s",&a[m].no,&a[m].name,&a[m].phone,&a[m].address);
m++;
}
fclose(fp);
printf("通讯信息:\n");
for (i = 0; i < m; i++)
{
printf("编号:%s 姓名:%s 手机号码:%s 地址:%s\n", data);
}
}
//通讯信息删除
void del()
{
show();
FILE* fp;
int i, j, m = 0;
char name[20];
int k = 1;
char ch[2];
if ((fp = fopen("data.txt", "r")) == NULL)
{
printf("文件不存在");
return;
}
while (!feof(fp))
{
fscanf(fp,"%s %s %s %s",&a[m].no,&a[m].name,&a[m].phone,&a[m].address);
m++;
}
fclose(fp);
if (m == 0)
{
printf("文件中无通讯信息\n");
return;
}
printf("输入要删除的联系人的姓名:");
scanf("%s", &name);
for (i = 0; i < m; i++)
if (!strcmp(a[i].name,name))
{
printf("查找成功,确认是否删除(y/n):");
scanf("%s", &ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
for (j = i + 1; j < m; j++)
a[j - 1] = a[j];
m--;
if ((fp = fopen("data.txt", "w+")) == NULL)
{
printf("文件不存在\n");
return;
}
for (j = 0; j < m; j++)
{
if (fprintf(fp,"\n%s %s %s %s",&a[j].no,&a[j].name,&a[j].phone,&a[j].address) == EOF)
{
printf("写入文件失败,删除失败!");
}
}
fclose(fp);
printf("删除成功,按任意键继续");
getch();
}
else
{
fclose(fp);
printf("取消成功,按任意键继续");
getch();
}
break;
}
if (i == m)
{
printf("查无此人,按任意键继续\n");
getch();
}
}
//通讯信息修改
void modify()
{
show();
FILE* fp;
int i, j, m = 0;
char name[20];
int k = 1;
char ch[2];
if ((fp = fopen("data.txt", "r")) == NULL)
{
printf("文件不存在");
return;
}
while (!feof(fp))
{
fscanf(fp,"%s %s %s %s",&a[m].no,&a[m].name,&a[m].phone,&a[m].address);
m++;
}
fclose(fp);
if (m == 0)
{
printf("文件中无通讯信息\n");
return;
}
printf("输入要修改的联系人的姓名:");
scanf("%s", &name);
for (i = 0; i < m; i++)
if (!strcmp(a[i].name,name))
{
printf("查找成功,确认是否修改(y/n):");
scanf("%s", &ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
if ((fp = fopen("data.txt", "w+")) == NULL)
{
printf("文件打开失败");
getch();
return;
}
printf("修改他的信息为:\n");
printf("编号:");
scanf("%s", &a[i].no);
printf("姓名:");
scanf("%s", &a[i].name);
printf("手机号码:");
scanf("%s", &a[i].phone);
printf("住址:");
scanf("%s", &a[i].address);
for (j = 0; j < m; j++)
{
if (fprintf(fp,"\n%s %s %s %s",&a[j].no,&a[j].name,&a[j].phone,&a[j].address) == EOF)
{
printf("写入文件失败,删除失败!");
}
}
fclose(fp);
printf("修改成功,按任意键继续");
getch();
}
else
{
fclose(fp);
printf("取消成功,按任意键继续");
getch();
}
break;
}
if (i == m)
{
printf("查无此人,按任意键继续\n");
getch();
}
fclose(fp);
}
//通讯信息查询
void lookup()
{
int n;
n = 1;
while(n)
{
lookup_menu();
printf("输入要执行的功能:");
scanf("%d",&n);
lookup_menu_go(n);
}
}
//查询菜单
void lookup_menu()
{
printf("\n");
printf("1.按编号查询\n");
printf("2.按姓名查询\n");
printf("3.按手机号码查询\n");
printf("0.退出\n");
}
//查询菜单的实现
void lookup_menu_go(int n)
{
if(n == 0)
{
return;
}
switch (n)
{
case 1:lookup_no();break;
case 2:lookup_name();break;
case 3:lookup_phone();break;
default:break;
}
}
//实现查询的具体函数--------------------
//按编号查询
void lookup_no()
{
FILE* fp;
int i, m = 0;
char no[20];
if ((fp = fopen("data.txt", "r")) == NULL)
{
fclose(fp);
printf("文件不存在\n");
return;
}
while (!feof(fp))
{
fscanf(fp,"%s %s %s %s",&a[m].no,&a[m].name,&a[m].phone,&a[m].address);
m++;
}
fclose(fp);
if (m == 0)
{
printf("文件中无通讯信息\n");
return;
}
printf("请输入联系人的编号:");
scanf("%s", &no);
for (i = 0; i < m; i++)
if (!strcmp(a[i].no, no))
{
printf("查询成功,该联系人通讯信息:\n");
printf("编号:%s 姓名:%s 手机号码:%s 地址:%s\n", data);
printf("按任意键继续\n");
getch();
break;
}
if (i == m)
{
printf("查无此人,按任意键继续\n");
getch();
}
fclose(fp);
}
//按姓名查询
void lookup_name()
{
FILE* fp;
int i, m = 0;
char name[20];
if ((fp = fopen("data.txt", "r")) == NULL)
{
fclose(fp);
printf("文件不存在\n");
return;
}
while (!feof(fp))
{
fscanf(fp,"%s %s %s %s",&a[m].no,&a[m].name,&a[m].phone,&a[m].address);
m++;
}
fclose(fp);
if (m == 0)
{
printf("文件中无通讯信息\n");
return;
}
printf("请输入联系人的姓名:");
scanf("%s", &name);
for (i = 0; i < m; i++)
if (!strcmp(a[i].name, name))
{
printf("查询成功,该联系人通讯信息:\n");
printf("编号:%s 姓名:%s 手机号码:%s 地址:%s\n", data);
printf("按任意键继续\n");
getch();
break;
}
if (i == m)
{
printf("查无此人,按任意键继续\n");
getch();
}
fclose(fp);
}
//按手机号查询
void lookup_phone()
{
FILE* fp;
int i, m = 0;
char phone[30];
if ((fp = fopen("data.txt", "r")) == NULL)
{
fclose(fp);
printf("文件不存在!\n");
return;
}
while (!feof(fp))
{
fscanf(fp,"%s %s %s %s",&a[m].no,&a[m].name,&a[m].phone,&a[m].address);
m++;
}
fclose(fp);
if (m == 0)
{
printf("文件中无通讯信息\n");
return;
}
printf("请输入联系人的手机号:");
scanf("%s", &phone);
for (i = 0; i < m; i++)
if (!strcmp(a[i].phone, phone))\
{
printf("查询成功,该联系人通讯信息:\n");
printf("编号:%s 姓名:%s 手机号码:%s 地址:%s\n", data);
printf("按任意键继续\n");
getch();
break;
}
if (i == m)
{
printf("查无此人,按任意键继续\n");
getch();
}
fclose(fp);
}
//--------------------------------------
//通讯信息插入
void insert()
{
FILE* fp;
int i, j, k, m = 0;
char name[20];
if ((fp = fopen("data.txt", "r")) == NULL)
{
printf("文件不存在\n");
return;
}
while (!feof(fp))
{
fscanf(fp,"%s %s %s %s",&a[m].no,&a[m].name,&a[m].phone,&a[m].address);
m++;
}
fclose(fp);
if (m == 0)
{
printf("文件中无通讯信息\n");
return;
}
printf("请输入插入在哪个的通讯人之后(输入姓名):");
scanf("%s", &name);
for (i = 0; i < m; i++)
if (!strcmp(a[i].name, name))
break;
if (m == i)
{
printf("查无此人");
fclose(fp);
return;
}
for (j = m - 1; j > i; j--)
a[j + 1] = a[j];
printf("请输入要插入的通讯录信息:\n");
printf("编号:");
scanf("%s", &a[i + 1].no);
printf("姓名:");
scanf("%s", &a[i + 1].name);
printf("电话号码:");
scanf("%s", &a[i + 1].phone);
printf("地址:");
scanf("%s", &a[i + 1].address);
if ((fp = fopen("data.txt", "w+")) == NULL)
{
printf("文件无法打开");
return;
}
for (k = 0; k <= m; k++)
if (fprintf(fp,"\n%s %s %s %s",&a[k].no,&a[k].name,&a[k].phone,&a[k].address) == EOF)
{
printf("保存失败,插入失败,按任意键继续");
getch();
}
fclose(fp);
}
//通讯信息排序
void order()
{
FILE* fp;
struct list l;
int i = 0, j = 0, m = 0;
if ((fp = fopen("data.txt", "r")) == NULL)
{
printf("文件不存在\n");
return;
}
while (!feof(fp))
{
fscanf(fp,"%s %s %s %s",&a[m].no,&a[m].name,&a[m].phone,&a[m].address);
m++;
}
fclose(fp);
if (m == 0)
{
printf("文件中无通讯信息\n");
return;
}
for (i = 0; i < m - 1; i++)
for (j = i + 1; j < m; j++)
if (atoi(a[i].no) > atoi(a[j].no))
{
l = a[i];
a[i] = a[j];
a[j] = l;
}
if ((fp = fopen("data.txt", "w+")) == NULL)
{
printf("文件不存在\n");
return;
}
for (i = 0; i < m; i++)
if (fprintf(fp,"\n%s %s %s %s",&a[i].no,&a[i].name,&a[i].phone,&a[i].address) == EOF)
{
printf("保存文件失败,排序失败\n");
}
fclose(fp);
printf("\n排序成功,排序后的通讯信息为:\n");
show();
printf("按任意键继续");
getch();
}
|