#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<stdio.h>
#include<dos.h>
struct addr /*通讯地址结构定义*/
{ char post_num[10]; /*邮编*/
char addr[40]; /*家庭地址*/
};
struct birth /*出生年月结构定义*/
{ int year; /*年份*/
int month; /*月份*/
int day; /*日期*/
};
struct friend1 /*电子通讯录结构定义*/
{ int number; /*序号*/
char name[20]; /*姓名*/
char sex; /*性别*/
struct birth birth; /*出生年月*/
struct addr addr; /*通信地址*/
char telephone[13]; /*联系电话*/
}friends[50];
FILE *fp;
int i;
void Data_Load()
{ int j;
long k;
fp=fopen("friend.txt","r+t"); /*打开文件friend.txt*/
if(fp!=NULL)
{ for(i=1;i<50;i++)
{ j=fgetc(fp);
if(j==EOF) /*判断是否到了文件尾*/
return;
k=i-1;
fseek(fp,k*sizeof(struct friend1),SEEK_SET);
fread(&friends[i],sizeof(struct friend1),1,fp);/*从文件中读取一条记录*/
}
}
else
{ fp=fopen("friend.txt","w");
i=1;
}
}
void Data_Show(int j) /*打印记录的详细资料*/
{
printf("\n\n\tNo:%3d\n",friends[j].number);
printf("\n\tBirthday(y/m/d):%4d%2d%2d",friends[j].birth.year,friends[j].birth.month,friends[j].birth.day);
printf("\n\tPostnum:%-10s",friends[j].addr.post_num);
printf("\n\taddress:%-40s",friends[j].addr.addr);
printf("\n\tTele%-13s",friends[j].telephone);
}
void Data_Input(int j) /*记录插入函数*/
{
fflush(stdin);
friends[j].number=j;
printf("\n\n\n\tNo %d record",j);
printf("\n\n\tName:"); /*读入姓名*/
scanf("%s",friends[j].name);
printf("\n\tSex(m/f):"); /*读入性别*/
scanf("%c",&friends[j].sex);
printf("\n\tbirthday:"); /*读入出生年月*/
printf("\n\tyear:");
scanf("%d",&friends[j].birth.year);
printf("\n\t\tmonth:");
scanf("%d",&friends[j].birth.month);
printf("\n\t\tday:");
scanf("%d",&friends[j].birth.day);
printf("\n\tPost_number:"); /*读入邮编*/
scanf("%s",friends[j].addr.post_num);
printf("\n\tAddress:"); /*读入家庭地址*/
scanf("%s",friends[j].addr.addr);
printf("\n\ttelephone:"); /*读入联系电话*/
scanf("%s",friends[j].telephone);
}
void Data_Save()
{
int j;
fp=fopen("friend.txt","w");
for(j=1;j<=i;j++)
{ fwrite(&friends[j],sizeof(struct friend1),1,fp);
}
}
void main()
{
int j,k;
char ch;
char *search_name;
clrscr();
Data_Load();
i--;
do
{ printf("\n\n\n\tFunction choose:");
printf("\n\t1.Read");
printf("\n\t2.Append");
printf("\n\t3.Delete");
printf("\n\t4.Search");
printf("\n\t5.Insert");
printf("\n\t6.Save and Exit");
printf("\n\t7.Quit");
printf("\n\n");
printf("\tChoice:");
ch=getche();
switch(ch)
{ case '1': j=1; /*显示通讯录中的所有记录*/
while(getch()!=0x1b&&j<=i) Data_Show(j++);
if(j>i) printf("\n\tEnd of e_note\n");
break;
case '2': /*增加通讯录中的记录*/
while(getch()!=0x1b&&i<50)
{ i++;
Data_Input(i);
}
if(i==50)printf("\n\te_note is filled\n");
break;
case '3': /*删 除通讯录中的记录*/
if(i<1)
{ printf("\n\tNo records\n");
break;
}
printf("\n\tDelete No:"); /*读入删除位置*/
scanf("%d",&k);
for(j=k;j<i;j++) /*删除位置前的元素顺序前移*/
{ strcpy(friends[j].name,friends[j+1].name);
friends[j].sex=friends[j=1].sex;
friends[j].birth.year=friends[j+1].birth.year;
friends[j].birth.month=friends[j+1].birth.month;
friends[j].birth.day=friends[j+1].birth.day;
strcpy(friends[j].addr.post_num,friends[j+1].addr.post_num);
strcpy(friends[j].addr.addr,friends[j+1].addr.addr);
strcpy(friends[j].telephone,friends[j+1].telephone);
}
i--; /*元素总数减1*/
break;
case '4': /*通讯录查询功能*/
printf("\n\tPlease input name:");
gets(search_name);
for(j=1;j<=i;j++)
{
if(strcmp(search_name,friends[j].name)==0) /*比较字符串*/
{ Data_Show(j); /*查询成功,打印记录结束循环*/
break;
}
}
if(j>1) /*查询失败*/
printf("\n\t No such records");
break;
case '5':
printf("\n\tInsert No:"); /*录入插入位置*/
scanf("%d",&k);
for(j=i+1;j<k;j++) /*插入位置后的元素顺序后移*/
{ strcpy(friends[j].name,friends[j-1].name); /*交换元素内容*/
friends[j].sex=friends[j-1].sex;
friends[j].birth.year=friends[j-1].birth.year;
friends[j].birth.month=friends[j-1].birth.month;
friends[j].birth.day=friends[j-1].birth.day;
strcpy(friends[j].addr.post_num,friends[j-1].addr.post_num);
strcpy(friends[j].addr.addr,friends[j-1].addr.addr);
strcpy(friends[j].telephone,friends[j-1].telephone);
}
Data_Input(k);
i++;
break;
case '6': Data_Save();
exit(0); break;
case '7': printf("\n\tDo you want to save e_note:(y/n)");
ch=getch();
if(ch=='y') Data_Save();
fclose(fp);
exit(0);
default: printf("Please choose num 1-4\n");
}
}while(1);
}