#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h> /*屏幕操作函数库*/
#define A " ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄\n"
#define B "┆ 班级 ┆ 姓名 ┆ 编号 ┆ 电话号码 ┆ 家庭住址 ┆\n"
#define FORMAT "┆%-10s┆%-10s┆%-10s┆%-17s┆%-19s┆\n"
#define DATA p->banji,p->name,p->num,p->number,p->address
#define N 200
int F=0; /*是否需要存盘的标志变量*/
typedef struct telebook
{
char banji[10];
char name[10];
char num[4];
char number[15];
char address[20];
}TELEBOOK;
void menu() /*主菜单*/
{
system("cls");
printf("\n\n\n 欢迎进入通讯录菜单管理系统\n\n\n");
printf(" **********************************************************\n");
printf(" * 1.导入记录 2.显示记录 *\n");
printf(" * 3.查找记录 4.修改记录 *\n");
printf(" * 5.离开系统 *\n");
printf(" **********************************************************\n");
printf(" 请输入你所要操作的选项(1—5):\n");
printf("\n\n");
}
void menu_a() /*查找子菜单*/
{
system("cls");
printf("\n\n\n 查找资料\n\n\n");
printf(" *************************************\n");
printf(" * 1.按姓名查找 *\n");
printf(" * 2.按班级查找 *\n");
printf(" * 3.返回 *\n");
printf(" *************************************\n");
printf("\n\n");
}
void printheader() /*输出表头*/
{
printf(A);
printf(B);
printf(A);
}
void printdata(TELEBOOK pt) /*输出结构体中表格中的数据*/
{
TELEBOOK *p;
p=&pt;
printf(FORMAT,DATA);
}
void Wrong() /*输出按键错误信息*/
{
printf("\n\n\n ======>输入有误!按任意键继续!\n");
getchar();
}
void Nofind() /*输出未查找到次记录的信息*/
{
printf("\n\n =========>没有找到记录!\n");
}
/*用于输出选择菜单时候的提示信息并对字符长度进行检验*/
void stringinput(char *t,int l,char *notice)
{
char n[300];
do
{
printf(notice);
scanf("%s",n);
if(strlen(n)>l) printf("\n 您输入的内容过长,请重输!\n");
}
while(strlen(n)>l);
strcpy(t,n);
}
/*用于查找资料时的查找定位函数*/
int Locate(TELEBOOK temp[],int n,char findmess[],char nameorbanji[])
{
int i=0;
if(strcmp(nameorbanji,"name")==0)
{
while(i<n)
{
if(strcmp(temp[i].name,findmess)==0)
return i;
i++;
}
}
else if(strcmp(nameorbanji,"banji")==0)
{
while(i<n)
{
if(strcmp(temp[i].banji,findmess)==0)
return i;
i++;
}
}
return -1;
}
void Save(TELEBOOK temp[],int n) /*保存函数*/
{
FILE *fp;
int i=0;
fp=fopen("c:\\intxt","w");
if(fp==NULL)
{
printf("=====>打开文件失败!\n");
getchar();
return;
}
for(i=0;i<n;i++)
{
if(fwrite(&temp[i],sizeof(TELEBOOK),1,fp)==1) continue;
else break;
}
if(i>0)
{
getchar();
printf("\n\n ============>文件已保存,总共记录为:%d。\n",i);
getchar();
F=0;
}
else
{
system("cls");
printf("\n\n=============>没有可以保存的文件!\n");
getchar();
}
fclose(fp);
}
void Disp(TELEBOOK temp[],int n) /*显示所有保存的记录函数*/
{
int i;
if(n==0) /*没有记录输出信息*/
{
printf("\n ==========>没有记录!\n");
getchar();
return;
}
printf("\n\n");
printheader();
for(i=0;i<n;i++)
{
printdata(temp[i]);
printf(A);
}
getchar();
}
int Add(TELEBOOK temp[],int n) /*增加记录函数*/
{
char ch,num[10];
int i,flag=0;
system("cls");
Disp(temp,n);
while(1)
{
while(1)
{
stringinput(num,10,"请输入数字(按0返回菜单):\n");
flag=0;
if(strcmp(num,"0")==0) return n;
for(i=0;i<n;i++)
{
if(strcmp(temp[i].num,num)==0)
{
flag=1;
break;
}
}
if(flag==1) /*提示用户是否输入正确*/
{
getchar();
printf("=========>您确定你输入的%s正确吗?是否重新输入?(Y/N):",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
continue;
else
return n;
}
else {break;}
}
strcpy(temp[n].num,num);
stringinput(temp[n].name,15,"姓名:");
stringinput(temp[n].banji,10,"班级:");
stringinput(temp[n].number,15,"电话号码:");
stringinput(temp[n].address,20,"家庭住址:");
F=1;
n++;
}
return n;
}
int p=0;
void Serch(TELEBOOK temp[],int n) /*查找记录函数*/
{
int select,i=0;
char serchinput[10];
if(n<=0)
{
system("cls");
printf("\n\n========>没有号码记录!\n");
getchar();
return;
}
system("cls");
menu_a();
printf("\n请选择查找方式\n");
scanf("%d",&select);
if(select==1)
{
stringinput(serchinput,10,"请输入姓名:");
p=Locate(temp,n,serchinput,"name");
if(p!=-1)
{
printheader();
printdata(temp[p]);
printf(A);
printf("按任意键继续!");
getchar();
}
else
{
Nofind();
getchar();
}
}
else if(select==2)
{
stringinput(serchinput,15,"请输入班级:");
p=Locate(temp,n,serchinput,"banji");
if(p!=-1)
{
printheader();
printdata(temp[p]);
printf(A);
printf("按任意键继续!");
getchar();
}
else
{
Nofind();
getchar();
}
}
else
return;
}
void Modify(TELEBOOK temp[],int n) /*修改记录函数*/
{
int select,i=0;
char serchinput[10];
p=0;
system("cls");
if(n<=0)
{
system("cls");
printf("\n\n\n\n==============>没有可以修改的记录!\n\n\n");
getchar();
return;
}
else
{
system("cls");
menu_a();
printf("\n请选择查找方式\n");
scanf("%d",&select);
if(select==1)
{
abc:
stringinput(serchinput,10,"请输入姓名:");
p=Locate(temp,n,serchinput,"name");
if(p!=-1)
{
printheader();
printdata(temp[p]);
printf(A);
printf("\n\n\n\n");
stringinput(temp[p].name,15,"输入新的姓名:");
stringinput(temp[p].number,15,"输入新的号码:");
stringinput(temp[p].address,30,"输入新的地址:");
printf("\n\n\n\n\n===========>修改成功!\n\n\n");
getchar();
Disp(temp,n);
getchar();
F=1;
}
else
{
Nofind();
goto abc;
}
}
else if(select==2)
{
ABC:
stringinput(serchinput,15,"请输入班级:");
p=Locate(temp,n,serchinput,"banji");
if(p!=-1)
{
printheader();
printdata(temp[p]);
printf(A);
stringinput(temp[p].name,15,"输入新的姓名:");
stringinput(temp[p].number,15,"输入新的号码:");
stringinput(temp[p].address,30,"输入新的地址:");
printf("\n\n\n\n\n===========>修改成功!\n\n\n");
getchar();
Disp(temp,n);
getchar();
F=1;
}
else
{
Nofind();
goto ABC;
}
}
}
return;
}
int Del(TELEBOOK temp[],int n)
{
char serchinput[10];
int i,select;
p=0;
if(n<=0)
{
system("cls");
printf("\n\n\n\n==============>没有可以修改的记录!\n\n\n");
getchar();
return n;
}
else
{
system("cls");
menu_a();
printf("\n请选择查找方式\n");
scanf("%d",&select);
if(select==1)
{
abc:
stringinput(serchinput,10,"请输入姓名:");
p=Locate(temp,n,serchinput,"name");
if(p!=-1)
{
printheader();
printdata(temp[p]);
printf(A);
printf("\n\n\n\n");
for(i=p+1;i<n;i++)
{
strcpy(temp[i-1].num,temp[i].num);
strcpy(temp[i-1].name,temp[i].name);
strcpy(temp[i-1].banji,temp[i].banji);
strcpy(temp[i-1].number,temp[i].number);
strcpy(temp[i-1].address,temp[i].address);
}
prin