#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义通讯录记录的结构
typedef struct information
{
char name[20]; //姓名
char tel[20]; //电话
char addr[30]; //住址
}com;
com *info;//指向通讯录连续存储空间首地址的指针
int count=0;//通讯录条目的计数器
void input();//输入函数,增加一条记录
void display();//打印通讯录
void menu();//菜单显示
int find();//查询
void main()
{
char choice[10];//选择字符串保存用户输入更具有兼容性
system("color 80");
while(1)//建议不要使用for(;;)形式的循环
{
system("cls");//清屏
menu();
printf("\t\t请选择: ");
scanf("%s",choice);//定义成数组以后choice已经是地址了
if(strcmp(choice,"1")==0)
input();
else if(strcmp(choice,"2")==0)
find();
else if(strcmp(choice,"5")==0)
display();
else if(strcmp(choice,"6")==0)
exit(0);
printf("请按回车键继续!\n");
getchar();
getchar(); //getchar()有吃掉回车符的作用,所以写两个
}
}
void input()//输入函数,增加一条记录
{
info=(com *)realloc(info,(count+1)*sizeof(com));//分配一条记录的内存空间
printf("input you name:");
scanf("%s",(info+count)->name);
printf("input you tel:");
scanf("%s",(info+count)->tel);
printf("input you addr:");
scanf("%s",(info+count)->addr);
count++; //计数器计数
}
void display()//打印通讯录
{
int i;
com *temp=info;
for(i=0;i<count;i++)
{
printf("%s\t%s\t%s\n",temp->name,temp->tel,temp->addr);
temp++;
}
temp=NULL;
}
void menu()//菜单显示
{
printf("\n\n");
printf("\t/*********************************************************/");
printf("\t\t\t\t\t欢迎使用通讯录系统\n\n");
printf("\t\t\t1.输入(新增记录)\n");
printf("\t\t\t2.查询(查询记录)\n");
printf("\t\t\t3.修改(修改记录)\n");
printf("\t\t\t4.删除(删除记录)\n");
printf("\t\t\t5.显示(打印记录)\n");
printf("\t\t\t6.退出\n");
}
int find()//查询 info[i]==*info(info+i);
{
char cmpname[20]={0};
int i;
printf("请输入您要查询的姓名:");
scanf("%s",cmpname);
for(i=0;i<=count;i++)
{
if(strcmp(info[i].name,cmpname)==0)
break;
}
if(i==count)
{
printf("没有符合要求的记录。");
return -1;
}
else
{
printf("%s\t%s\t%s\n",info[i].name,info[i].tel,info[i].addr);
return i;
}
}
评论0