#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Person
{
char name[50]; /*姓名*/
char classes[15];/*班级*/
int score; /*学号*/
char sex[5]; /*性别*/
int age; /*年龄*/
char num[15]; /*号码*/
char adds[20]; /*住址*/
} Info[50000],*q;
FILE* fin;
//登录函数,无输入输出,显示程序名称,作者,版本等信息
void logon()
{
printf("\n\n\n\t\t\t 通讯录管理系统\n\n");
printf("\t\t\t 版本号:1.0\n\n");
printf("\n\n\n\n\n\t\t\t 2018年4月20日\n\n");
printf("\t\t\t 计153-2 张峰\n");
system("pause");
}
//功能选择目录,输入字符C,选择相应操作
int menu_select()
{
char c;
do
{
system("cls");
printf("\t\t *****通讯录***** \n");
printf("\t\t┌───────┐\n");
printf("\t\t│ 1. 添加记录 │\n");
printf("\t\t│ 2. 删除记录 │\n");
printf("\t\t│ 3. 查询记录 │\n");
printf("\t\t│ 0. 退出程序 │\n");
printf("\t\t└───────┘\n");
printf("\t\t请您选择(0-3):");
c=getchar();
}
while(c<'0'||c>'4');
return(c-'0');
}
//添加纪录,输入联系人信息,输出添加完成
void Input()
{
if((fin=fopen("document.txt","a+"))==NULL)
{
printf("打开失败\n");
exit(-1);
}
int cnt=0;
q=&Info[cnt];
printf("\t班级:");
scanf("\t%s",q->classes);
printf("\t姓名:");
scanf("\t%s",q->name);
printf("\t学号:");
scanf("\t%d",&q->score);
printf("\t性别:");
scanf("\t%s",q->sex);
printf("\t年龄:");
scanf("\t%d",&q->age);
printf("\t电话号码:");
scanf("\t%s",q->num);
printf("\t住址:");
scanf("\t%s",q->adds);
int i=0;
fprintf(fin,"%s %s %d %s %d %s %s\n",Info[i].classes,
Info[i].name,Info[i].score,Info[i].sex,
Info[i].age,Info[i].num,Info[i].adds);
printf("\t添加完成。\n");
fclose(fin);
system("pause");
}
//删除记录,输入要删除的人的姓名,输出已删除该联系人
void Delete()
{
if((fin=fopen("document.txt","r"))==NULL)
{
printf("打开失败\n");
exit(-1);
}
char name[10]; //先查找 删除
int cnt=0;
while(fscanf(fin,"%s %s %d %s %d %s %s",Info[cnt].classes,
Info[cnt].name,&Info[cnt].score,Info[cnt].sex,
&Info[cnt].age,Info[cnt].num,Info[cnt].adds)!=EOF)cnt++;
if (cnt == 0)
{
printf("通讯录空\n");
return;
}
fclose(fin);
if((fin=fopen("document.txt","w"))==NULL)
{
printf("打开失败\n");
exit(-1);
}
printf("请输入想删除记录中的名字: \n");
scanf("%s",name);
int i=0,j;
while ((strcmp(Info[i].name,name)!=0 )&& i<cnt)i++;
if (strcmp(name,Info[i].name)==0) //删除信息
{
for(j=0;j<cnt;j++)
if(i==j)continue;
else fprintf(fin,"%s %s %d %s %d %s %s\n",Info[j].classes,
Info[j].name,Info[j].score,Info[j].sex,
Info[j].age,Info[j].num,Info[j].adds);
}
else
{
printf("不存在该好友!\n");
return;
}
printf("信息已删除!\n");
fclose(fin);
}
//查询记录,输入要查询联系人的姓名,或姓氏首字母,输出该联系人信息
void Query()
{
if((fin=fopen("document.txt","r"))==NULL)
{
printf("打开失败\n");
exit(-1);
}
int m = 0;
printf("\t\n请选择查询方式:\n");
printf("\t┌──────┐\n");
printf("\t│1------姓名 │\n");
printf("\t│2------姓氏 │\n");
printf("\t│3------返回 │\n");
printf("\t└──────┘\n");
printf("请选择:");
scanf("%d",&m);
while(m!=1&&m!=2)
{
printf("输入错误,请重新选择:");
scanf("%d",&m);
}
if(m == 1)
{
char name[50];
int cnt=0;
while(fscanf(fin,"%s %s %d %s %d %s %s",Info[cnt].classes,
Info[cnt].name,&Info[cnt].score,Info[cnt].sex,
&Info[cnt].age,Info[cnt].num,Info[cnt].adds)!=EOF)cnt++;
if(cnt==0) // 如果是一个空链表;
{
printf("通讯录空!\n");
return;
}
printf("\t请输入想查询的姓名:");
scanf("%s",name);
int i=0;
for(i=0;i<cnt;i++) //循环遍历链表中的节点,找出此时最小的节点
{
if(strcmp(Info[i].name,name)==0) //比较输入的姓名
{
printf("班级\t姓名\t学号\t性别\t年龄\t号码\t住址\n");
printf("%s\t%s\t%d\t%s\t%d\t%s\t%s\n",Info[i].classes,Info[i].name,Info[i].score,Info[i].sex,Info[i].age,Info[i].num,Info[i].adds);
break;
}
}
if(i==cnt) printf("\t不存在此联系人\n");
}
if(m==2)
{
char name[50];
int cnt=0;
while(fscanf(fin,"%s %s %d %s %d %s %s",Info[cnt].classes,
Info[cnt].name,&Info[cnt].score,Info[cnt].sex,
&Info[cnt].age,Info[cnt].num,Info[cnt].adds)!=EOF)cnt++;
if(cnt==0) // 如果是一个空链表;
{
printf("通讯录空!\n");
return;
}
printf("\t请输入想查询的姓名:");
scanf("%s",name);
int i=0;
for(i=0;i<cnt;i++) //循环遍历链表中的节点,找出此时最小的节点
{
if(Info[i].name[0]==name[0]) //比较输入的姓名
{
printf("班级\t姓名\t学号\t性别\t年龄\t号码\t住址\n");
printf("%s\t%s\t%d\t%s\t%d\t%s\t%s\n",Info[i].classes,Info[i].name,Info[i].score,Info[i].sex,Info[i].age,Info[i].num,Info[i].adds);
break;
}
}
if(i==cnt) printf("\t不存在此联系人\n");
}
fclose(fin);
}
int main()
{
logon();
for(;;)
{
switch(menu_select())
{
case 1:
printf("\n\t添加记录到通讯录\n");
Input();
break;
case 2:
printf("\n\t从通讯录中删除记录\n");
Delete();
printf("\t");
system("pause");
break;
case 3:
printf("\n\t在通讯录中查找记录\n");
Query();
printf("\t");
system("pause");
break;
case 0:
printf("\n\t\t谢谢使用,再见!\n");
printf("\n\t\t");
system("pause");
exit(0);
}
}
return 0;
}