通讯录(C语言版)(请下载观看,无乱码)
#include
#include
#include
#include
typedef struct personnode {
char name[8];
char tel[16];
char add[30];
}personnode;
FILE *fp; //定义文件型指针变量
/*以下创建通讯录,若通讯录不存在,刚提示创建,若存在则不创建*/ void creat(){
personnode *person;
person=(personnode *)malloc(sizeof(personnode));
if((fp=fopen("通讯录.dat","r"))==NULL){ //r 只读(打开)
printf("通讯录不存在!\n");
fp=fopen("通讯录.dat","w"); //w 只写(建立)
fprintf(fp,"%-10s%-20s%-50s\n","姓名","电话号码","地址");
printf("\n建立通讯录成功!\n");
}
else
printf("通讯录已存在,不用建立!\n");
fclose(fp);
} //creat()
void output(){
personnode *person;
person=(personnode *)malloc(sizeof(personnode));
if((fp=fopen("通讯录.dat","r"))==NULL){
printf("\n不能打开通讯录!\n");
exit(0);
}
printf("\n**************************************\n");
printf("%24s\n","通讯录");
while(!feof(fp)){ //如果没到文件末尾,则不停循环输出
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);
}
fclose(fp);
printf("\n**************************************\n");
} //output()
/*以下为添加模块*/
void append(){
personnode *person;
person=(personnode *)malloc(sizeof(personnode));
if((fp=fopen("通讯录.dat","a"))==NULL){ //a 追加
printf("\n不能打开通讯录!\n");
exit(0);
}
printf("\n请输入添加的姓名、电话号码及地址\n");
scanf("%s%s%s",person->name,person->tel,person->add);
fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->add);
fclose(fp);
printf("\n添加成功!\n");
} //append()
/*以下为查找模块*/
void search(){
int k=0,h;
char namekey[8],telkey[16];
personnode *person;
person=(personnode *)malloc(sizeof(personnode));
printf("\n*********************************\n");
printf("* \t1 -- 按号码查找 \t*\n");
printf("* \t2 -- 按姓名查找 \t*\n");
printf("*********************************\n");
printf("\n请选择操作 (1 ~ 2) :");
scanf("%d",&h);
fp=fopen("通讯录.dat","r");
if(h==1){
printf("\n请输入你查找的号码!\n");
scanf("%s",telkey);
while(!feof(fp)){
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);
if(!strcmp(telkey,person->tel)){
printf("\n\n已查到,记录为:\n");
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);
k=1;
} //if
}
}
else if(h==2){
printf("\n请输入要查找的姓名:");
scanf("%s",namekey);
while(!feof(fp)){
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);
if(!strcmp(namekey,person->name)){
printf("\n\n已查到,记录为:\n");
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);
k=1;
} //if
} //while*/
if(!k)printf("对不起,没有此人记录!\n");
fclose(fp);
}
} //search()
/*以下为修改模块*/
void modify(){
int k=0;
long offset;
char namekey[8];
personnode *person;
person=(personnode *)malloc(sizeof(personnode));
printf("\n请输入要修改的姓名:");
scanf("%s",namekey);
if((fp=fopen("通讯录.dat","r+"))==NULL){ // r+ 读写
printf("\n不能打开通讯录!\n");
exit(0);
}
while(!feof(fp)){
offset=ftell(fp);
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);
if(!strcmp(namekey,person->name)){
k=1;break;
}
}
if(k){
printf("\n已查到,记录为:\n");
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);
printf("\n请输入新姓名、电话号码及地址\n");
scanf("%s%s%s",person->name,person->tel,person->add);
fseek(fp,offset,SEEK_SET); //从该条记录的开始点进行写操作
fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->add);
printf("\n修改成功!\n");
}
else printf("\n对不起,没有此人记录!\n");
fclose(fp);
}
/*以下为删除模块*/
void delrecord(){
int k=0;int sum=1;
char m;
long offset1;
char namekey[8];
personnode *person;
person=(personnode *)malloc(sizeof(personnode));
printf("\n请输入要删除的姓名:");
scanf("%s",namekey);
if((fp=fopen("通讯录.dat","r+"))==NULL){
printf("\n不能打开通讯录!\n");
exit(0);
}
while(!feof(fp)){
offset1=ftell(fp); //文件位置指针当前值
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);
sum+=1;
if(!strcmp(namekey,person->name)){
k=1;break;
}
} //while()
if(k){
printf("\n已查到,记录为:\n");
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);
printf("\n确定要删除吗? (Y/N) ");
scanf("%s",&m);
if(m=='y'||m=='Y'){
rewind(fp);
fseek(fp,sum*80L,1);
fprintf(fp,"%-10s%-20s%-50s\n","","","");
printf("\n删除成功!\n");
} //if
}
else printf("\n对不起,没有此人记录!\n");
fclose(fp);
} //delcord()
void main(){
int m,flag=1;
system("color 2f"); //调用颜色命令,包含在stdlib.h头文件中
printf("\n\n********************************************************************
***********\n\n");
printf("\t\t???????????????????????\n");
printf("\t\t? ?__? Random 编写 ? ?\n");
printf("\t\t? 欢迎使用Random的通讯录 ?\n");
printf("\t\t? QQ:747187822 ?\n");
printf("\t\t???????????????????????\n");
printf("\t\t? 1 -- 添加 ? 2 -- 查找 ?\n");
printf("\t\t? ? ?\n");
printf("\t\t? 3 -- 修改 ? 4 -- 删除 ?\n");
printf("\t\t? ? ?\n");
printf("\t\t? 5 -- 打印 ? 0 -- 退出 ?\n");
printf("\t\t???????????????????????\n");
printf("\n**********************************************************************
*********\n\n");
creat();
while(flag){ //用死循环实现
printf("\n请选择操作 (0 ~ 5) :");
scanf("%d",&m);
switch(m){
case 1: append();break;
case 2: search();break;
case 3: modify();break;
case 4: delrecord();break;
case 5: output();break;
case 0: printf("\n\n==========>感谢使用Random的通讯录!<==========\n");
exit(0);
} //switch()
} //while()
}
/*本程序编写By:Random*/