|
|
|
@ -0,0 +1,246 @@
|
|
|
|
|
#include<stdio.h>
|
|
|
|
|
#include<stdlib.h>
|
|
|
|
|
#include<string.h>
|
|
|
|
|
#define SIZE 50
|
|
|
|
|
|
|
|
|
|
struct TX{
|
|
|
|
|
char name[10];
|
|
|
|
|
char jiguan[20];
|
|
|
|
|
char d1[20],d2[20];
|
|
|
|
|
char ema[30];
|
|
|
|
|
}inf [SIZE];
|
|
|
|
|
void luru(){
|
|
|
|
|
system("cls"); //清屏
|
|
|
|
|
int i,n;
|
|
|
|
|
FILE *fp;
|
|
|
|
|
fp=fopen("date.dat","wb");//创建二进制文件进行写
|
|
|
|
|
//rewind(fp);
|
|
|
|
|
printf("\t\t\t\t\t\t请输入需要录入的个数:");
|
|
|
|
|
scanf("%d",&n);
|
|
|
|
|
for(i=1;i<=n;i++){
|
|
|
|
|
printf("\t\t\t\t\t\t请输入录入的第%d个人的姓名:",i);
|
|
|
|
|
scanf("%s",inf[i].name);
|
|
|
|
|
printf("\t\t\t\t\t\t请输入籍贯:");
|
|
|
|
|
scanf("%s",inf[i].jiguan);
|
|
|
|
|
printf("\t\t\t\t\t\t请输入电话号码1:");
|
|
|
|
|
scanf("%s",inf[i].d1);
|
|
|
|
|
printf("\t\t\t\t\t\t请输入电话号码2: ");
|
|
|
|
|
scanf("%s",inf[i].d2);
|
|
|
|
|
printf("\t\t\t\t\t\t请输入电子邮箱:");
|
|
|
|
|
scanf("%s",inf[i].ema);
|
|
|
|
|
printf("\n\n\n");
|
|
|
|
|
fwrite(&inf[i],sizeof(struct TX),1,fp);//将信息写入二进制文件
|
|
|
|
|
}if(n>=1)printf("\t\t\t\t\t\t信息录入完成!\n\n\n\n");
|
|
|
|
|
else
|
|
|
|
|
printf("\t\t\t\t\t\t输入错误!\n\n\n\n");
|
|
|
|
|
|
|
|
|
|
fclose(fp);//打开文件后要关闭文件,否则可能会造成数据的丢失
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
void addmore(){
|
|
|
|
|
system("cls"); //清屏
|
|
|
|
|
int i,n;
|
|
|
|
|
FILE *fp;
|
|
|
|
|
fp=fopen("date.dat","ab+");//打开二进制文件进行读,写,追加
|
|
|
|
|
//rewind(fp);
|
|
|
|
|
printf("\t\t\t\t\t\t请输入需要增加的个数:");
|
|
|
|
|
scanf("%d",&n);
|
|
|
|
|
for(i=1;i<=n;i++){
|
|
|
|
|
printf("\t\t\t\t\t\t请输入增加的第%d个人的姓名:",i);
|
|
|
|
|
scanf("%s",inf[i].name);
|
|
|
|
|
printf("\t\t\t\t\t\t请输入籍贯:");
|
|
|
|
|
scanf("%s",inf[i].jiguan);
|
|
|
|
|
printf("\t\t\t\t\t\t请输入电话号码1:");
|
|
|
|
|
scanf("%s",inf[i].d1);
|
|
|
|
|
printf("\t\t\t\t\t\t请输入电话号码2: ");
|
|
|
|
|
scanf("%s",inf[i].d2);
|
|
|
|
|
printf("\t\t\t\t\t\t请输入电子邮箱:");
|
|
|
|
|
scanf("%s",inf[i].ema);
|
|
|
|
|
printf("\n\n\n");
|
|
|
|
|
fwrite(&inf[i],sizeof(struct TX),1,fp);//将信息写入二进制文件
|
|
|
|
|
}if(n>=1)printf("\t\t\t\t\t\t信息录入完成!\n\n\n\n");
|
|
|
|
|
else
|
|
|
|
|
printf("\t\t\t\t\t\t输入错误!\n\n\n\n");
|
|
|
|
|
|
|
|
|
|
fclose(fp);//打开文件后要关闭文件,否则可能会造成数据的丢失
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
void browse(){
|
|
|
|
|
system("cls");
|
|
|
|
|
FILE *fp;int i=0;
|
|
|
|
|
fp=fopen("date.dat","rb");//打开二进制文件进行只读;
|
|
|
|
|
printf("\t\t\t****************************************************************\n");
|
|
|
|
|
printf("\t\t\t***** 信息列表 *****\n");
|
|
|
|
|
printf("\t\t\t*****------------------------------------------------------*****\n");
|
|
|
|
|
for(i=0;fread(&inf[i],sizeof(struct TX),1,fp)==1;i++){//从二进制文件中读出信息。若fread(&inf[i],sizeof(struct TX),1,fp)!=1代表文件到末尾。
|
|
|
|
|
printf("\t\t\t*****姓名:%s\n",inf[i].name);
|
|
|
|
|
printf("\t\t\t*****籍贯:%s\n",inf[i].jiguan);
|
|
|
|
|
printf("\t\t\t*****电话号码1:%s\n",inf[i].d1);
|
|
|
|
|
printf("\t\t\t*****电话号码2:%s\n",inf[i].d2);
|
|
|
|
|
printf("\t\t\t*****邮箱:%s\n\n\n\n",inf[i].ema);
|
|
|
|
|
}printf("\n\n\n");
|
|
|
|
|
fclose(fp);
|
|
|
|
|
}
|
|
|
|
|
void change(){
|
|
|
|
|
system("cls");
|
|
|
|
|
FILE *fp;
|
|
|
|
|
char a[20],b[20];
|
|
|
|
|
int i,flag=0,n,f=0;
|
|
|
|
|
fp=fopen("date.dat","rb");//打开二进制文件进行只读;
|
|
|
|
|
printf("\t\t\t\t\t\t请输入需要修改信息的姓名:");
|
|
|
|
|
scanf("%s",a);
|
|
|
|
|
for(i=0;fread(&inf[i],sizeof(struct TX),1,fp)==1;i++){
|
|
|
|
|
if(strcmp(a,inf[i].name)==0){//strcmp为比较函数,若a=inf[i].name则返回0;
|
|
|
|
|
printf("\t\t\t\t\t\t当前信息:\n");
|
|
|
|
|
printf("\t\t\t\t\t\t姓名:%s\n",inf[i].name);
|
|
|
|
|
printf("\t\t\t\t\t\t籍贯:%s\n",inf[i].jiguan);
|
|
|
|
|
printf("\t\t\t\t\t\t电话号码1:%s\n",inf[i].d1);
|
|
|
|
|
printf("\t\t\t\t\t\t电话号码2:%s\n",inf[i].d2);
|
|
|
|
|
printf("\t\t\t\t\t\t邮箱:%s\n\n\n",inf[i].ema);
|
|
|
|
|
flag=1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}fclose(fp);
|
|
|
|
|
fp=fopen("date.dat","rb+");
|
|
|
|
|
fseek(fp,i*sizeof(struct TX),0);//将文件指针移到需要改变数据的位置,否则会出错
|
|
|
|
|
if(flag==0)printf("\t\t\t\t\t\t输入错误!\n\n\n\n\n") ;
|
|
|
|
|
if(flag==1){
|
|
|
|
|
printf("\t\t\t请输入需要修改的信息:1.姓名 2.籍贯 3.电话号码1 4.电话号码2 5.邮箱 6.不需要继续修改了\n");
|
|
|
|
|
printf("\t\t\t\t\t\t修改信息:");
|
|
|
|
|
for(;f==0;){
|
|
|
|
|
scanf("%d",&n);
|
|
|
|
|
switch(n){
|
|
|
|
|
case 1:printf("\t\t\t\t\t\t将姓名修改为:");
|
|
|
|
|
scanf("%s",inf[i].name);
|
|
|
|
|
printf("\n");break;
|
|
|
|
|
case 2:printf("\t\t\t\t\t\t将籍贯修改为:");
|
|
|
|
|
scanf("%s",inf[i].jiguan);printf("\n");break;
|
|
|
|
|
case 3:printf("\t\t\t\t\t\t将电话号码1修改为:");
|
|
|
|
|
scanf("%s",inf[i].d1);printf("\n");break;
|
|
|
|
|
case 4:printf("\t\t\t\t\t\t将电话号码2修改为:");
|
|
|
|
|
scanf("%s",inf[i].d2);printf("\n");break;
|
|
|
|
|
case 5:printf("\t\t\t\t\t\t将邮箱修改为:");
|
|
|
|
|
scanf("%s",inf[i].ema);printf("\n");break;
|
|
|
|
|
case 6:f=1;printf("\n\n\n");break;
|
|
|
|
|
}if(n!=6){
|
|
|
|
|
printf("\t\t\t\t\t\t还需修改的信息是:");
|
|
|
|
|
fwrite(&inf[i],sizeof(struct TX),1,fp);//将修改后的信息写入文件
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void del(){
|
|
|
|
|
system("cls");
|
|
|
|
|
FILE *fp;
|
|
|
|
|
int i,j,flag=1;
|
|
|
|
|
char a[20],n;
|
|
|
|
|
fp=fopen("date.dat","rb");//以只读的方式打开文件
|
|
|
|
|
printf("\t\t\t\t\t\t请输入要删除的联系人:");
|
|
|
|
|
scanf("%s",a);
|
|
|
|
|
for(i=0;fread(&inf[i],sizeof(struct TX),1,fp)==1;i++){//从文件中读取信息
|
|
|
|
|
if(strcmp(a,inf[i].name)==0)flag=0;//比较
|
|
|
|
|
}
|
|
|
|
|
if(flag==1){
|
|
|
|
|
printf("\t\t\t\t\t\t输入错误,此联系人不存在!\n\n\n\n");
|
|
|
|
|
} if(flag==0){
|
|
|
|
|
printf("\t\t\t\t\t\t确定删除请输入Y,否则输入N:");
|
|
|
|
|
getchar();
|
|
|
|
|
scanf("%c",&n);
|
|
|
|
|
if(n=='N')printf("\t\t\t\t\t\t删除失败!\n\n\n");
|
|
|
|
|
if(n=='Y'){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fp=fopen("date.dat","wb+");//打开新二进制文件进行读,写 ,将原有信息覆盖。(替换掉原文件)
|
|
|
|
|
for(j=0;j<i;j++){
|
|
|
|
|
if(strcmp(a,inf[j].name)!=0)fwrite(&inf[j],sizeof(struct TX),1,fp);//将除了要删除的姓名外的信息写入文件;
|
|
|
|
|
}printf("\t\t\t\t\t\t删除成功!\n\n\n\n");
|
|
|
|
|
}else
|
|
|
|
|
printf("\t\t\t\t\t\t输入错误!\n\n\n\n");
|
|
|
|
|
}
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
void search(){
|
|
|
|
|
system("cls");
|
|
|
|
|
FILE *fp;
|
|
|
|
|
int i,flag=0;
|
|
|
|
|
char a[20];
|
|
|
|
|
fp=fopen("date.dat","rb");//以只读方式打开二进制文件
|
|
|
|
|
rewind(fp); //将指针指向文件开头,从文件开头查找
|
|
|
|
|
printf("\t\t\t\t\t\t请输入需要查询信息的姓名:");
|
|
|
|
|
scanf("%s",a);
|
|
|
|
|
for(i=0;fread(&inf[i],sizeof(struct TX),1,fp)==1;i++){
|
|
|
|
|
if(strcmp(a,inf[i].name)==0){//找到对应的信息则输出
|
|
|
|
|
printf("\n\n\n");
|
|
|
|
|
printf("\t\t\t\t\t\t------------------------\t\t\t\n");
|
|
|
|
|
printf("\t\t\t\t\t\t姓名:%s\n",inf[i].name);
|
|
|
|
|
printf("\t\t\t\t\t\t籍贯:%s\n",inf[i].jiguan);
|
|
|
|
|
printf("\t\t\t\t\t\t电话号码1:%s\n",inf[i].d1);
|
|
|
|
|
printf("\t\t\t\t\t\t电话号码2:%s\n",inf[i].d2);
|
|
|
|
|
printf("\t\t\t\t\t\t邮箱:%s\n",inf[i].ema);
|
|
|
|
|
printf("\t\t\t\t\t\t------------------------\t\t\t\n\n\n\n\n");
|
|
|
|
|
flag=1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}if(flag==0)printf("\t\t\t\t\t\t输入错误!\n\n\n");
|
|
|
|
|
fclose(fp);
|
|
|
|
|
}
|
|
|
|
|
int main(){
|
|
|
|
|
int n;
|
|
|
|
|
while(1){
|
|
|
|
|
printf("\t\t\t\t\t\t**************\t\t\t\n");
|
|
|
|
|
printf("\t\t\t\t\t\t通讯录管理系统\t\t\t\n");
|
|
|
|
|
printf("\t\t\t\t\t\t 0.录入信息 \t\t\t\n");
|
|
|
|
|
printf("\n");
|
|
|
|
|
printf("\t\t\t\t\t\t 1.增加信息 \t\t\t\n");
|
|
|
|
|
printf("\n");
|
|
|
|
|
printf("\t\t\t\t\t\t 2.浏览信息 \t\t\t\n");
|
|
|
|
|
printf("\n");
|
|
|
|
|
printf("\t\t\t\t\t\t 3.查询信息 \t\t\t\n");
|
|
|
|
|
printf("\n");
|
|
|
|
|
printf("\t\t\t\t\t\t 4.修改信息 \t\t\t\n");
|
|
|
|
|
printf("\n");
|
|
|
|
|
printf("\t\t\t\t\t\t 5.删除信息 \t\t\t\n");
|
|
|
|
|
printf("\n");
|
|
|
|
|
printf("\t\t\t\t\t\t 6.退出系统 \t\t\t\n");
|
|
|
|
|
printf("\t\t\t\t\t\t**************\t\t\t\n");
|
|
|
|
|
printf("\t\t\t\t\t\t请输入操作(1-6):");
|
|
|
|
|
scanf("%d",&n);
|
|
|
|
|
switch(n){
|
|
|
|
|
case 0:luru();break;
|
|
|
|
|
case 1:addmore();break;
|
|
|
|
|
case 2:browse();break;
|
|
|
|
|
case 3:search();break;
|
|
|
|
|
case 4:change();break;
|
|
|
|
|
case 5:del();break;
|
|
|
|
|
case 6:printf("\n\n\n\n");
|
|
|
|
|
printf("\t\t\t\t\t\t**************\t\t\t\n\n\n");
|
|
|
|
|
printf("\t\t\t\t\t\t感谢您的使用 再见!\n\n\n");
|
|
|
|
|
printf("\t\t\t\t\t\t**************\n\n\n\n\n");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|