|
|
1鱼币
#include<stdio.h>
#include<string.h>
struct information
{
char name[20];
char kind[20];
char tele[20];
char address[40];
}person[500];
int num = 0;
int adduser();
int deleteuser();
int modify();
int show();
int name_search();
int kind_search();
int tele_search();
int myexit();
int i=0;
int main()
{
int a;
while(1)
{
printf("\n******欢迎来到通讯录!你要做什么?*****");
printf("\n\t\t1.添加用户");
printf("\n\t\t2.删除用户");
printf("\n\t\t3.修改用户");
printf("\n\t\t4.显示用户");
printf("\n\t\t5.按名称查询用户");
printf("\n\t\t6.按类别查询");
printf("\n\t\t7.按电话号码查询");
printf("\n\t\t8.退出");
scanf("%c",&a);
switch(a)
{
case 1:adduser();break;
case 2:deleteuser();break;
case 3:modify();break;
case 4:show();break;
case 5:name_search();break;
case 6:kind_search();break;
case 7:tele_search();break;
case 8:myexit();break;
}
return 0;
}
int name_search()
{
char name[20];
printf("输入姓名:");
scanf("%s",&name);
for(i=0;i<num;i++)
{
if(strcmp(person[i].name,name)==0)
{
printf("\n\t\t分类: %s",person[i].kind);
printf("\n\t\t姓名: %s",person[i].name);
printf("\n\t\t电话: %s",person[i].tele);
printf("\n\t\t地址: %s",person[i].address);
return 1;
}
else
return 0;
}
return 0;
}
int kind_search()
{
int i;
char kind[20];
for(i=0;i<num;i++)
{
printf("输入类型:");
scanf("%s",&kind);
if(strcmp(person[i].kind,kind)==0)
{
printf("\n\t\t分类: %s",person[i].kind);
printf("\n\t\t姓名: %s",person[i].name);
printf("\n\t\t电话: %s",person[i].tele);
printf("\n\t\t地址: %s",person[i].address);
return 1;
}
else
return 0;
}
return 0;
}
int tele_search()
{
int i;
char tele[20];
for(i=0;i<num;i++)
{
printf("输入电话号:");
scanf("%s",&tele);
if(strcmp(person[i].tele,tele)==0)
{
printf("\n\t\t分类: %s",person[i].kind);
printf("\n\t\t姓名: %s",person[i].name);
printf("\n\t\t电话: %s",person[i].tele);
printf("\n\t\t地址: %s",person[i].address);
return 1;
}
else
return 0;
}
return 0;
}
int adduser()
{
int a;
char ch0;
char ch1;
a=name_search();
if(a=0)
{
FILE *fp;
if((fp=fopen("通讯录.txt","w"))!=NULL)
{
printf("输入类型,姓名,电话号和地址");
scanf("%s%s%s%s",person[i].kind,person[i].name,person[i].tele,person[i].address);
fclose(fp);//这里已经是以结构体形式写入通讯录.txt了吗?如果不是,该怎么写呢
}
printf("添加成功,是否要继续添加,y/n");
scanf("%s",&ch0);
if(ch0=='y')
adduser();//w表示的是打开或创建,再用会覆盖掉以前的,应用a,怎么循环用追加?
else
myexit();
}
if(a=1)
{
printf("该联系人已存在。您要做1修改2退出");
scanf("%c",&ch1);
if(ch1=='1')
modify();
else
return 0;
}
return 0;
}
int deleteuser()
{
int a;
char n;
a=name_search();
if(a=1)
{
FILE *fp;
if((fp=fopen("通讯录.txt","r"))!=NULL)
printf("是否确定要删除该项?是y,否n\n");
scanf("%s",&n);
if(n=='y')
{
for(i=i;i<num-1;i++)
person[i]=person[i+1];
num--;//神马意思,
}
if(n=='n')
return 0;
}
if(a=0)
printf("没有该联系人!");
return 0;
}
int modify()
{
int a;
char n;
a=name_search();
if(a=1)
{
FILE *fp;
if((fp=fopen("通讯录.txt","wr+"))!=NULL)
printf("是否确定要修改该项?是y,否n\n");
scanf("%s",&n);
if(n=='y')
{
fp=fopen("person[i]","w");//怎样修改
fclose(fp);
}
if(n=='n')
myexit();
}
return 0;
}
int show()
{
int i;
printf("******我的联系人******");
for(i=0;i<num;i++)
{
printf("\n\t\t分类: %s",person[i].kind);
printf("\n\t\t姓名: %s",person[i].name);
printf("\n\t\t电话: %s",person[i].tele);
printf("\n\t\t地址: %s",person[i].address);
printf("\t\t");
if(i+1<num)
printf("=======我是华丽丽的分割线==========");
}
return 0;
}
int myexit()
{
printf("按任意键退出系统\n");
getchar();
return 0;
}
还有一个问题,文件和数组的关系。。我说出我的理解,有不对的望改正哈。。咱用指针指向一个文件打开后,里面的信息也是由一个个的结构体数组构成的,我们同样用一个个的指针指向它们。在添加等功能中,我们用指针找他们,然后操作它们,完事保存。对么?
|
最佳答案
查看完整内容
adduser() 需要更改
if((fp=fopen("通讯录.txt","a+b"))!=NULL)
{
printf("输入类型,姓名,电话号和地址");
scanf("%s%s%s%s",person.kind,person.name,person.tele,person.address);
fwrite(&person,sizeof(information),1,fp);
//fwrite可参考http://man.chinaunix.net/develop/c&c++/linux_c/default.htm
fclose(fp);//这里只是关闭文件流
}
其他的大同小异,总之楼主应该以二进制形式打开文件即用fopen(" ...
|