#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<ctype.h>
#define Max 500
typedef struct
{ char name[10];
char city[30];
char units[25];
int tele[20];
}PAD;
/*函数原形说明*/
char Menubar();
void List(PAD t[],int n);
void Order();
void SearchN(PAD t[],int n);
int Find(PAD t[],int n,int b,char *s,char cl);
int Insert(PAD t[],int n);
int Append(PAD t[],int n);
void Editrec(PAD t[],int n);
int DeleteN(PAD t[],int n);
void Sort(PAD t[],int n);
void Save(PAD t[],int n);
int Load(PAD t[],int n);
int Join(PAD t[],int n);
void Display(PAD temp);
void main()
{ PAD adr[Max];
int count=0;
count=Load(adr,count);
for(;;)
{ switch(Menubar())
{ /*选择功能号1~4,查询并显示记录*/
case ’1′:List(adr,count); break; /*按页显示全部记录*/
case ’2′:Order(); break; /*按序号显示记录*/
case ’3′:SearchN(adr,count); break; /*按姓名查找显示记录*/
/*选择功能号4~7,编辑记录*/
case ’4′:count=Insert(adr,count); break; /*插入记录*/
case ’5′:count=Append(adr,count); break; /*增加记录*/
case ’6′:Editrec(adr,count); break; /*修改记录*/
case ’7′:count=DeleteN(adr,count); break; /*按姓名删除记录*/
/*选择功能号~11,文件操作*/
case ’8′:Sort(adr,count); break; /*按姓名排序*/
case ’9′:Save(adr,count); break; /*保存记录*/
case ’10′:Load(adr,count); break; /*从文件中读取数据*/
case ’11′:count=Join(adr,count); break; /*合并通讯录*/
case ’0′:exit(0); /*跳出循环,中止程序运行*/
}
}
}
char Menubar()
{ char c=’0′;
printf(“\n*************** 欢迎进入通讯录查询系统 ***************\n\n”);
printf(“ 1.显示通讯录”);
printf(“ 2.按序号显示记录\n”);
printf(“ 3.按姓名查找显示记录\n”);
printf(“ 4.查找记录\n”);
printf(“ 5.插入记录\n”);
printf(“ 6.增加记录\n”);
printf(“ 7.修改记录\n”);
printf(“ 8.按姓名删除记录\n”);
printf(“ 9.按姓名排序\n”);
printf(“ A.保存电话薄\n”);
printf(“ B.从文件中读取数据\n”);
printf(“ C.合并通讯录\n”);
printf(“ 0.退出系统 \n”);
printf(“\n***********************************************\n”);
printf(“\n 请输入选项(0~C):”);
do{scanf(“%c”,&c);
c=toupper(c);
}while(!(c>=’0′&&c<=’9′||c==’A'||c==’B'||c==’C'));
return c;
}
int Init(PAD t[])
{ int i,n;
printf(“\n请输入需要录入的条数: \n”);
scanf(“%d”,&n);
printf(“按顺序输入记录,各项内容之间用空格隔开,按回车键结束一条记录。\n”);
printf(“序 号 姓 名 城 市 单 位 电 话 \n”);
printf(“————————————————–\n”);
for(i=0;i<n;i++)
{ printf(“%-5d”,i+1);
scanf(“%s%s%s%s”,t[i].name,t[i].city,t[i].units,t[i].tele);
}
return n;
}
/*显示通讯录*/
void List (PAD t[],int n)
{ int i;
printf(“\n\n**************电话本****************\n\n”);
printf(” 姓 名 城 市 单 位 电 话 \n”);
printf(“—————————————–\n”);
for(i=0;i<n;i++)
printf(“%-10s%-30%-25%-20\n”,t[i].name,t[i].city,t[i].units,t[i].tele);
if((i+1)%10==0)
{ printf(“按任意键显示下一页…\n”);
}
printf(“\n**************显示结束*****************\n”);
}
/*按序号显示文件*/
void Order()
{ int id,n;
PAD t;
FILE *fp;
if((fp=fopen(“record.txt”,”rt”))==NULL)
{ printf(“不能打开通讯录文件! \n”);
exit(1);
}
printf(“请输入序号…\n”);
scanf(“%d”,&id); /*输入序号*/
fscanf(fp,”%d\r\n”,&n); /*从文件中读入记录数*/
if(id>0&&id<=n)
{ fseek(fp,(id-1)*(sizeof(PAD)+3),1);
fscanf(fp,”%10s%30s&25s%20s”,t.name,t.city,t.units,t.tele);
printf(“姓 名 城 市 单 位 电 话 \n”);
printf(“————————————-\n”);
Display(t);
}
else
printf(“序号 %d非法!!!\n “,id);
fclose(fp);
}
/*按姓名查找通讯录*/
void SearchN(PAD t[],int n)
{ char s[20];
int i;
printf(“请输入姓名,按回车结束: “);
scanf(“%s”,s);
i=Find(t,n,0,s,’N');
if(i<n-1)
printf(“查无此人! \n”);
else
{ printf(“姓 名 城 市 单 位 电 话 \n”);
printf(“————————————-\n”);
while (i<n)
{ Display(t[i]);
i=Find(t,n,i+1,s,’N');
}
printf(“************** 结束 *************\n”);
}
}
/*快速查找姓名或分类为k的记录*/
void Find(PAD t[],int n,int b,char *s,char cy)
{ int i;
for(i=b;i<n;i++)
{ if (cy==’N') /*按姓名查找*/
{ if(strcmp(s,t[i].name)==0)
break;
}
else if (cy==’L')
{ if(strcmp(s,t[i].city)==0)
break;
}
}
return i;
}
/*插入记录*/
int Insert(PAD t[],int n)
{ PAD temp;
int i,j;
char s[20]; /*确定插入位置*/
printf(“请输入新插入的记录:\n”);
printf(“姓 名 城 市 单 位 电 话 \n”);
printf(“————————————-\n”);
scanf(“%s%s%s%s”,t[i].name,t[i].city,t[i].units,t[i].tele);
printf(“请输入姓名,新记录将插入到此人前面:”);
scanf(“%s”,s);
i=find(t,n,o,s,’N');
for(j=n-1;j>=i;j–)
{ strcpy(t[j+1].name,t[j].name);
strcpy(t[j+1].city,t[j].city);
strcpy(t[j+1].units,t[j].units);
strcpy(t[j+1].tele,t[j].tele);
}
strcpy(t[i].name,temp.name);
strcpy(t[i].city,temp.city);
strcpy(t[i].units,temp.units);
strcpy(t[i].tele,temp.tele);
n++;
return n;
}
/*增加记录*/
int Append(PAD t[],int n)
{ printf(“请输入新增加的记录\n”);
printf(“姓 名 城 市 单 位 电 话 \n”);
printf(“————————————-\n”);
scanf(“%s%s%s%s”,t[n].name,t[n].city,t[n].units,t[n].tele);
return n+1;
}
/*修改记录*/
void Editrec(PAD t[],int n)
{ int i;
char s[20],ch’Y';
printf(“请输入姓名,确定需要修改的记录:”);
scanf(“%s”,s);
i=find(t,n,o,s,’N');
if(i>n-1)
printf(“未找到此人的相关记录。\n”);
else
{ printf(“姓 名 城 市 单 位 电 话 \n”);
printf(“————————————-\n”);
while (i<n)
{ Display(t[i]);
printf(“确认是否修改本记录(Y修改/N取消)?\n”);
scanf(“%*c%c”,&ch);
ch=toupper(ch);
if(ch==’Y')
{scanf(“%s%s%%s%s”,t[i].name,t[i].city,t[i].units,t[i].tele);
break;
else
i=find(t,n,i+1,s,’N');
}
}
}
/*按姓名删除记录*/
int DeleteN(PAD t[],int n)
{ char s[20];
char ch=’N';
int i=0,j;
printf(“请输入姓名,此人的记录将被清除: \n”);
scanf(“%s”,s);
while (i<n)
{ i=Find(t,n,i,s’N');
if(i>n-1)
{ printf(“未找到此人的相关记录。 \n”);
break;
}
else
{ printf(“姓 名 城 市 单 位 电 话 \n”);
printf(“————————————-\n”);
Display(t[i]);
printf(“确认是否删除此人记录(Y删除/N取消)?\n”);
scanf(“%*c%c”,&ch);
ch=toupper(ch);
if(ch==’Y')
{ for(j=i+1;j<n;j++)
{ strcpy(t[j-1].name,t[j].name);
strcpy(t[j-1].city,t[j].city);
strcpy(t[j-1].units,t[j].units);
strcpy(t[j-1].tele,t[j].tele);
}
n–;
}
}
i++;
}
return n;
}
/*按姓名排序*/
void Sort(PAD t[],int n)
{ int i,j,k;
PAD temp;
printf(“正在排序,请稍候….\n”);
for(i=0;i<n-1;i++)
{ k=i;
for(j=i;j<n;j++)
if((strcmp(t[j].name,t[k].name))<0)
k=j;
if (k!=i)
{ strcpy(temp.name,t[k].name);
strcpy(temp.city,t[k].city);
strcpy(temp.units,t[k].units);
strcpy(temp.tele,t[k].tele);
strcpy(t[k].name,t[i].name);
strcpy(t[k].city,t[i].city);
strcpy(t[k].units,t[i].units);
strcpy(t[k].name,t[i].name);
strcpy(t[i].city,temp.city);
strcpy(t[i].units,temp.units);
strcpy(t[i].tele,temp.tele);
strcpy(t[i].tele,temp.tele);
}
}
printf(“已完成排序操作!\n”);
}
/*+保存电话簿*/
void Save(PAD t[],int n)
{ int i;
FILE *fp;
if((fp=fopen(“record.txt”,”wt”))==NULL)
{ printf(“保存文件失败! \n”);
exit(1);
}
printf(“\n正在保存文件….\n”);
fprintf(fp,”%d”,n);
fprintf(fp,”\r\n”);
for(i=0;i<n;i++)
{ fprintf(fp,”%-10s%-30s%-25s-%-20s”,t[i].name,t[i].city,t[i].units,t[i].tele);
fprintf(fp,”\r\n”);
}
fclose(fp);
printf(“****文件已经保存成功!****\n”);
}
/*从文件中读取数据*/
int Load(PAD t[],int len)
{ int i,n;
FILE *fp;
if((fp=fopen(“record.txt”,”rt”))==NULL)
{ printf(“尚未建立通讯录,请先建通讯录。 \n”);
len=init(t);
Save(t, len);
fp=fopen(“record.txt”,”rt”);
}
fscanf(fp,”%d”,&n);
for(i=0;i<n;i++)
fscanf(fp, “%10s%30s&25s%20s”,t[i].name,t[i].city,t[i].units,t[i].tele);
fclose(fp);
return n;
}
/*合并通讯录*/
int Join (PAD t[],int n)
{ char inputfile[20];
FILE *fp;
int i,cn;
print(“请输入需要并入的文件名,格式为 c:\\pt\\fi.txt:\n”);
scanf(“%s”,inputfile);
if((fp=fopen(inputfile,”rt”))==NULL)
{ printf(“不能打开文件,合并完成! \n”);
getchar();
return n;
}
fscanf(fp,”%d”,&cn);
if (cn>0&&cn<MAX)
{ for (i=0;i<cn;i++)
fscanf(fp,”%10s%30s&25s%20s\n”,t[i+n].name,t[i+n].city,t[i+n].units,t[i+n].tele);
n=n+cn;
fclose(fp);
save(t,n);
}
return n;
}
>> 本文固定链接: http://www.vcgood.com/archives/1718
错误提示?
运行后里边有20多个错误。。。。看提示改也改不了
我是刚学的。大一的。要交实习。做了好长时间才弄出来。结果有好多错误
把错误提示发上来!