显示和查找功能都有问题
是文件读写问题吗。。
#include
#include
#include
#include
#define SIZE 100
struct addr{
char name[10];
int phone[10];
char address[30];
int zip[10];
char email[30];
}contact[SIZE];
FILE *fp;
int n = 0;
void fileread()
{
if((fp=fopen("contact.txt","r")) == NULL)
{
printf("文件不存在!\n");
if((fp=fopen("contact.txt","w")) == NULL)
{
printf("文件写入失败!\n");
exit(0);
}
exit(0);
}
fseek(fp,0,2);
if(ftell(fp) > 0)
{
rewind(fp);
for (n = 0; !feof(fp) && fread(&contact[n],sizeof(struct addr),1,fp); n++);
}
}
void menu()
{
system("cls");
printf("[1]显示联系人\n");
printf("[2]查找联系人\n");
printf("[3]新建联系人\n");
printf("[4]删除联系人\n");
printf("[5]修改联系人\n");
printf("[0]退出\n");
printf("请输入你的选项:");
}
void new_contact()
{
if(n == SIZE)
printf("联系人已满!\n");
printf("请输入姓名:");
scanf("%s", contact[n].name);
printf("电话号码:");
scanf("%d", contact[n].phone);
printf("地址:");
scanf("%s", contact[n].address);
printf("邮政编码:");
scanf("%d", contact[n].zip);
printf("email:");
scanf("%s", contact[n].email);
n++;
int i;
if((fp=fopen("contact.txt", "w")) == NULL)
printf("打开文件失败!\n");
for(i = 0; i < n; i++)
if(fwrite(&contact[i],sizeof(struct addr),1,fp) != 1)
printf("写入文件失败!\n");
fclose(fp);
//exit(0);
}
void search_contact()
{
int i, flag = 0;
char name[10];
system("cls");
//if(n == 0)
//printf("没有联系人");
//else
//{
printf("请输入要查找的联系人姓名:");
scanf("%s", name);
for(i = 0; i < n; i++)
if(strcmp(contact[i].name,name) == 0)
{
printf("姓名:%s", contact[i].name);
printf("电话号码:%d", contact[i].phone);
printf("地址:%s", contact[i].address);
printf("邮政编码:%d", contact[i].zip);
printf("email:%s", contact[i].email);
flag = 1;
}
//}
if(flag == 0)
printf("不存在该联系人");
}
void display_contact()
{
int i;
system("cls");
if(n == 0)
printf("没有联系人");
else
{
printf("姓名\t 电话号码\t 地址\t 邮政编码\t email\n");
for(i = 0; i < n; i++)
{
printf("%s\t", contact[i].name);
printf("%d\t", contact[i].phone);
printf("%s\t", contact[i].address);
printf("%d\t", contact[i].zip);
printf("%s\n", contact[i].email);
}
}
}
void update_contact()
{
int i, flag = 0;
char name[10];
system("cls");
if(n == 0)
printf("没有联系人");
printf("请输入要修改的联系人姓名:");
scanf("%s", &name);
for(i = 0; i < n; i++)
if(strcmp(contact[i].name,name) == 0)
{
printf("以下是要修改的联系人信息:");
printf("姓名\t 电话号码\t 地址\t 邮政编码\t email\n");
printf("%s\t", contact[i].name);
printf("%d\t", contact[i].phone);
printf("%s\t", contact[i].address);
printf("%d\t", contact[i].zip);
printf("%s\n", contact[i].email);
printf("是否修改?(Y/N)");
if((getchar() == 'y') || (getchar() == 'Y'))
{
flag++;
printf("请输入新姓名:");
scanf("%s", contact[i].name);
printf("请输入新的电话号码:");
scanf("%d", contact[i].phone);
printf("请输入新的地址:");
scanf("%s", contact[i].address);
printf("请输入新的邮政编码:");
scanf("%d", contact[i].zip);
printf("请输入新的email:");
scanf("%s", contact[i].email);
}
else
return;
}
if(flag == 0)
printf("不存在该联系人");
}
void delete_contact()
{
int m, i, flag = 0;
char name[10];
system("cls");
if(n == 0)
printf("没有联系人");
printf("请输入你要删除的联系人姓名:");
scanf("%s", name);
for(i = 0; i < n; i++)
if(strcmp(contact[i].name,name) == 0)
{
printf("确定删除此联系人?(Y/N)");
if((getchar() == 'y') || (getchar() == 'Y'))
{
for(m = i; m < n-1; m++)
contact[m] = contact[m+1];
n--;
flag++;
printf("删除成功!\n");
}
else
return;
}
if(flag == 0)
printf("不存在该联系人");
}
int main()
{
int choice;
fileread();
while(1)
{
menu();
scanf("%d", &choice);
switch(choice)
{
case 1: display_contact(); break;
case 2: search_contact(); break;
case 3: new_contact(); break;
case 4: delete_contact(); break;
case 5: update_contact(); break;
case 0: exit(0);
default: printf("输入不合法!\n"); break;
}
}
return 0;
}