有没有大佬能帮忙看看怎么修改bug,就是文件里面文本显示他没有换行跟在输出的后面去了
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include <windows.h>
#include<dos.h>
#include<string.h>
#define LEN sizeof(struct addritem)
#define FORMAT "|| %-10s% -10s%-15s%-15s%-25s%-30s\n"
#define DATA addrinfo[i].name,addrinfo[i].nickname,addrinfo[i].phone1,addrinfo[i].phone2,addrinfo[i].email,addrinfo[i].address
struct addritem
{
char name[10];
char nickname[10];
char phone1[15];
char phone2[15];
char email[25];
char address[30];
};
struct addritem addrinfo[100];
void input();
void search();
void update();
void del();
void display();
void sort();
void menu();
void display_solid();
void warning();
int isdigit(char s[]);
//功能说明 1.录入联系人信息是从键盘输入录入保存到data.txt文件里
//2.查找联系人可以从三个方面,名字,备注,两个电话号码的其中一个
//3.修改联系人信息,可以修改该联系人的所有信息,修改的时候可以存为原来的名字电话号码
//4.删除联系人的所有信息,输入名字就可以删掉这个联系人的信息
//5.排序 根据姓名的首字母从A->Z的排序
//6.显示所有联系人 就是显示当前已经输入保存的所有联系人信息
void menu()
{
system("color C");
system("cls");
printf("\n\n\n\n\n");
printf("\t\t|------------------------青春猪头少年不会梦到GGBond男神通讯录管理系统---------------------------------|\n");
printf("\t\t|**************************************0. 返回*********************************************|\n");
printf("\t\t|**************************************1. 录入联系人信息***********************************|\n");
printf("\t\t|**************************************2. 查找联系人信息***********************************|\n");
printf("\t\t|**************************************3. 修改联系人信息***********************************|\n");
printf("\t\t|**************************************4. 删除联系人信息 **********************************|\n");
printf("\t\t|**************************************5. 排序*********************************************|\n");
printf("\t\t|**************************************6. 显示所有联系人***********************************|\n");
printf("\t\t|**************************************!提醒:输入完请按回车继续**************************|\n");
printf("\t\t|**************************************! 提示:输入非法键位会警告!!!*********************|\n");
printf("\t\t|------------------------------------------------------------------------------------------|\n");
printf("\t\t 选择功能(0-6):");
}
int main()
{
int n;
menu();
scanf("%d",&n);
while (n)
{
switch (n)
{
case 1: input(); break;
case 2: search(); break;
case 3: update(); break;
case 4: del(); break;
case 5: sort(); break;
case 6: display_solid();break;
default: warning(); break;
}
getch();
menu();
scanf("%d",&n);
}
}
void input()
{
int i,count=0;
char ch[2];
FILE *fp;
if((fp=fopen("data.txt","a+"))==NULL)
{
printf("文件无法打开!\n");
return;
}
while (!feof(fp))
{
if (fread(&addrinfo[count], LEN, 1, fp)==1)
count++;
}
fclose(fp);
if (count==0)
printf("没有联系记录!\n");
else
{
system("cls");//清楚屏幕显示所有联系人
display();
}
if ((fp=fopen("data.txt", "wb"))==NULL)
{
printf("打不开文件!\n");
return;
}
for (i = 0; i < count; i++)
fwrite(&addrinfo[i], LEN, 1, fp);
printf("请输入(y/n)");
scanf("%s", ch);
while (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
int flag=1;
printf("名字:");
if(count==0)
scanf("%s", &addrinfo[count].name);
else
{
while(flag)
{
char s[20];
scanf("%s",&s);
flag=0;
for(i=0;i<count;i++)
if (strcmp(addrinfo[i].name, s) == 0)
{
printf("名字已经存在,请重新输入名字\n名字:");
flag=1;
break;
}
if(flag==0)
strcpy(addrinfo[count].name,s);
}
}
printf("备注:");
scanf("%s", &addrinfo[count].nickname);
printf("电话1:");
if(count==0)
scanf("%s", &addrinfo[count].phone1);
else
{
flag=1;
while(flag)
{
char p1[20];
scanf("%s",&p1);
flag=0;
for(i=0;i<count;i++)
if (strcmp(addrinfo[i].phone1, p1) == 0||strcmp(addrinfo[i].phone2, p1) == 0)
{
printf("电话1已经存在,请重新输入\n电话1:");
flag=1;
break;
}
if(flag==0&&strlen(p1)==11&&isdigit(p1)==1)
strcpy(addrinfo[count].phone1,p1);
if(isdigit(p1)==0||strlen(p1)!=11)
{
printf("格式不太对,请重新输入\n电话1:");
flag=1;
}
}
}
printf("电话2:");
if(count==0)
scanf("%s", &addrinfo[count].phone2);
else
{
flag=1;
while(flag)
{
char p2[20];
scanf("%s",&p2);
flag=0;
for(i=0;i<count;i++)
if (strcmp(addrinfo[i].phone2, p2) == 0||strcmp(addrinfo[i].phone1, p2) == 0)
{
printf("电话2已经存在,请重新输入\n电话2:");
flag=1;
break;
}
if(flag==0&&strlen(p2)==11&&isdigit(p2)==1)
strcpy(addrinfo[count].phone2,p2);
if(isdigit(p2)==0||strlen(p2)!=11)
{
printf("格式不太对,请重新输入\n电话2:");
flag=1;
}
}
}
printf("email:");
scanf("%s", &addrinfo[count].email);
printf("地址:");
scanf("%s", &addrinfo[count].address);
if (fwrite(&addrinfo[count], LEN, 1, fp) != 1)//将新建联系人信息保存到磁盘文件
{
printf("无法保存记录!");
getch();
}
else
{
printf("%s 已保存!\n", addrinfo[count].name);
count++;
}
printf("是否继续?(y/n):");
scanf("%s", ch);
}
fclose(fp);
printf("OK!关注青春猪头少年不会梦到GGBond男神不会让你失望\n");
printf("请输入任意键返回菜单\n");
}
void search()
{
FILE *fp;
int i, count = 0;
char ch[2], name[15],nickname[15],phone[15];
if ((fp = fopen("data.txt", "rb")) == NULL)
{
printf("无法打开文件关注青春猪头少年不会梦到GGBond男神不会让你失望\n");
return;
}
while (!feof(fp))
if (fread(&addrinfo[count], LEN, 1, fp) == 1)
count++;
fclose(fp);
if (count == 0)
{
printf("没有该联系记录!关注青春猪头少年不会梦到GGBond男神不会让你失望\n");
return;
}
printf("名字查找请输入1\n备注查找请输入2\n电话查找请输入3\n");
int nm;
scanf("%d",&nm);
if(nm==1)
{
printf("请输入名字:");
scanf("%s",name);
for(i=0;i<count;i++)
if (strcmp(name, addrinfo[i].name) == 0)
{
printf("查找到该联系人了,是否展示?(y/n):");
scanf("%s", ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
printf("||***名字****备注********电话1**********电话2***********email*****************地址***********\n");
printf(FORMAT,DATA);
}
printf("请输入任意键返回菜单\n");
break;
}
if (i == count)
{
printf("找不到该联系人!\n");
printf("请输入任意键返回菜单\n");
}
}
else if(nm==2)
{
printf("请输入备注:");
scanf("%s",nickname);
for(i=0;i<count;i++)
if (strcmp(nickname, addrinfo[i].nickname) == 0)
{
printf("查找到该联系人了,是否展示?(y/n):");
scanf("%s", ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
printf("||***名字****备注********电话1**********电话2***********email*****************地址***********\n");
printf(FORMAT,DATA);
printf("请按任意键位返回主菜单\n");
}
break;
}
if (i == count)
{
printf("找不到该联系人!\n");
printf("请输入任意键返回菜单\n");
}
}else if(nm==3)
{
printf("请输入电话:");
scanf("%s",phone);
int flag=0;
for(i=0;i<count;i++)
if (strcmp(phone, addrinfo[i].phone1) == 0)
{
flag=1;
printf("查找到该联系人了,是否展示?(y/n):");
scanf("%s", ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
printf("||***名字****备注********电话1**********电话2***********email*****************地址***********\n");
printf(FORMAT,DATA);
printf("请按任意键位返回主菜单\n");
}
break;
}
for(i=0;i<count&&flag==0;i++)
if (strcmp(phone, addrinfo[i].phone2) == 0)
{
printf("查找到该联系人了,是否展示?(y/n):");
scanf("%s", ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
printf("||***名字****备注********电话1**********电话2***********email*****************地址***********\n");
printf(FORMAT,DATA);
printf("请按任意键位返回主菜单\n");
}
break;
}
if (i == count)
{
printf("找不到该联系人!\n");
printf("请输入任意键返回菜单\n");
}
}
}
void update()
{
FILE* fp;
int i, j, count = 0;
char name[15];
if ((fp = fopen("data.txt", "r+")) == NULL)
{
printf("文件无法打开!关注青春猪头少年不会梦到GGBond男神不会让你失望\n");
return;
}
while (!feof(fp))
if (fread(&addrinfo[count], LEN, 1, fp) == 1)
count++;
if (count == 0)
{
printf("没有记录!关注青春猪头少年不会梦到GGBond男神不会让你失望\n");
fclose(fp);
return;
}
display();
printf("请输入您要更新的联系人的名字!\n");
scanf("%s", &name);
for (i = 0; i < count; i++)
{
if (strcmp(name, addrinfo[i].name) == 0)
{
printf("||***名字****备注********电话1**********电话2***********email*****************地址***********\n");
printf(FORMAT, DATA);
printf("已经找到该联系人!\n");
printf("不修改名字的话请输入@,否则输入要修改的名字:");
char tmp[15];
scanf("%s",&tmp);
if(tmp[0]=='@') printf("不修改备注的话请输入@,否则输入要修改的备注:");
else
{
int flag=1;
while(flag)
{
flag=0;
for(j=0;j<count;j++)
if (strcmp(addrinfo[j].name, tmp) == 0)
{
printf("名字已经存在,请重新输入名字\n名字:");
scanf("%s",&tmp);
flag=1;
break;
}
if(flag==0)
strcpy(addrinfo[i].name,tmp);
}
printf("不修改备注的话请输入@,否则输入要修改的备注:");
}
char tmp1[15];
scanf("%s",&tmp1);
if(tmp1[0]=='@') printf("不修改电话1的话请输入@,否则输入要修改的电话1:");
else
{
strcpy(addrinfo[i].nickname,tmp1);
printf("不修改电话1的话请输入@,否则输入要修改的电话1:");
}
char tmp2[15];
scanf("%s",&tmp2);
if(tmp2[0]=='@') printf("不修改电话2的话请输入@,否则输入要修改的电话2:");
else
{
int flag=1;
while(flag)
{
flag=0;
for(j=0;j<count;j++)
if (strcmp(addrinfo[j].phone1, tmp2) == 0||strcmp(addrinfo[j].phone2, tmp2) == 0)
{
printf("电话1已经存在,请重新输入\n电话1:");
scanf("%s",&tmp2);
flag=1;
break;
}
if(flag==0&&strlen(tmp2)==11&&isdigit(tmp2)==1)
strcpy(addrinfo[i].phone1,tmp2);
if(isdigit(tmp2)==0||strlen(tmp2)!=11)
{
printf("格式不太对,请重新输入\n电话1:");
scanf("%s",&tmp2);
flag=1;
}
}
printf("不修改电话2的话请输入@,否则输入要修改的电话2:");
}
char tmp3[15];
scanf("%s",&tmp3);
if(tmp3[0]=='@') printf("不修改email的话请输入@,否则输入要修改的email:");
else
{
int flag=1;
while(flag)
{
flag=0;
for(j=0;j<count;j++)
if (strcmp(addrinfo[j].phone2, tmp3) == 0||strcmp(addrinfo[j].phone1, tmp3) == 0)
{
printf("电话2已经存在,请重新输入\n电话2:");
scanf("%s",&tmp3);
flag=1;
break;
}
if(flag==0&&strlen(tmp3)==11&&isdigit(tmp3)==1)
strcpy(addrinfo[i].phone2,tmp3);
if(isdigit(tmp3)==0||strlen(tmp3)!=11)
{
printf("格式不太对,请重新输入\n电话2:");
scanf("%s",&tmp3);
flag=1;
}
}
printf("不修改email的话请输入@,否则输入要修改的email:");
}
char tmp4[15];
scanf("%s",&tmp4);
if(tmp4[0]=='@') printf("不修改地址的话请输入@,否则输入要修改的地址:");
else
{
strcpy(addrinfo[i].email,tmp4);
printf("不修改地址的话请输入@,否则输入要修改的地址:");
}
char tmp5[15];
scanf("%s",&tmp5);
if(tmp5[0]=='@') printf("地址未修改\n");
else
{
strcpy(addrinfo[i].address,tmp5);
}
printf("!!!成功修改该联系的所有数据!\n关注青春猪头少年不会梦到GGBond男神不会让你失望");
printf("请输入任意键位返回主菜单\n");
if ((fp = fopen("data.txt", "wb")) == NULL)
{
printf("文件打不开!关注青春猪头少年不会梦到GGBond男神不会让你失望\n");
return;
}
for (j = 0; j < count; j++)
if (fwrite(&addrinfo[j], LEN, 1, fp) != 1)
{
printf("无法保存!关注青春猪头少年不会梦到GGBond男神不会让你失望");
getch();
}
fclose(fp);
return;
}
}
printf("找不到该联系人!关注青春猪头少年不会梦到GGBond男神不会让你失望\n请输入任意键返回菜单\n");//??????????????????//
}
void del()
{
FILE* fp;
int i, j, count = 0;
char ch[2];
char name[15];
if ((fp = fopen("data.txt", "r+")) == NULL)
{
printf("文件无法打开!关注青春猪头少年不会梦到GGBond男神不会让你失望||请按任意键位返回主菜单\n");
return;
}
while (!feof(fp))
if (fread(&addrinfo[count], LEN, 1, fp) == 1)
count++;
fclose(fp);
if (count == 0)
{
printf("没有联系记录!关注青春猪头少年不会梦到GGBond男神不会让你失望||请按任意键位返回主菜单\n");
return;
}
display();
printf("请输入名字:");
scanf("%s", &name);
for (i = 0; i < count; i++)
{
if (strcmp(name, addrinfo[i].name) == 0)
{
printf("已找到该联系人,是否删除?(y/n)");
scanf("%s", ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
for (j = i; j < count; j++)
addrinfo[j] = addrinfo[j + 1];
count--;
if ((fp = fopen("data.txt", "wb")) == NULL)
{
printf("无法打开文件!关注青春猪头少年不会梦到GGBond男神不会让你失望||请输入任意键位返回主菜单\n");
return;
}
for(j=0;j<count;j++)
if (fwrite(&addrinfo[j], LEN, 1, fp) != 1)
{
printf("无法保存!关注青春猪头少年不会梦到GGBond男神不会让你失望||请输入任意键位返回主菜单\n");
getch();
}
fclose(fp);
printf("成功删除!关注青春猪头少年不会梦到GGBond男神不会让你失望||请输入任意键位返回主菜单\n");
return;
}
}
printf("找不到该联系人!关注青春猪头少年不会梦到GGBond男神不会让你失望||请输入任意键位返回主菜单\n");
}
void sort()
{
FILE* fp;
struct addritem t;
int i = 0, j = 0, count = 0;
if ((fp = fopen("data.txt", "r+")) == NULL)
{
printf("无法打开该文件!关注青春猪头少年不会梦到GGBond男神不会让你失望||请输入任意键位返回主菜单\n");
return;
}
while (!feof(fp))
if (fread(&addrinfo[count], LEN, 1, fp) == 1)
count++;
fclose(fp);
if (count == 0)
{
printf("没有该联系记录!关注青春猪头少年不会梦到GGBond男神不会让你失望||请输入任意键位返回主菜单\n");
return;
}
for(i=0;i<count-1;i++)
for(j=i+1;j<count;j++)
if (strcmp(addrinfo[i].name, addrinfo[j].name) > 0)
{
t = addrinfo[i];
addrinfo[i] = addrinfo[j];
addrinfo[j] = t;
}
if ((fp = fopen("data.txt", "wb")) == NULL)
{
printf("无法打开文件!关注青春猪头少年不会梦到GGBond男神不会让你失望||请输入任意键位返回主菜单\n");
return;
}
for(i=0;i<count;i++)
if(fwrite(&addrinfo[i],LEN,1,fp)!=1)
{
printf("无法保存!关注青春猪头少年不会梦到GGBond男神不会让你失望||请输入任意键位返回主菜单\n");
getch();
}
fclose(fp);
printf("成功保存!关注青春猪头少年不会梦到GGBond男神不会让你失望||请输入任意键位返回主菜单\n");
printf("请输入任意键返回菜单\n");
}
void display()
{
FILE* fp;
int i, count = 0,cnt=0;
fp = fopen("data.txt", "rb");
while (!feof(fp))
{
if (fread(&addrinfo[count], LEN, 1, fp) == 1)
count++;
}
fclose(fp);
printf("||***名字****备注********电话1**********电话2***********email*****************地址***********\n");
for (i = 0; i < count; i++)
printf(FORMAT, DATA);
//printf("请输入任意键返回菜单\n");
}
void display_solid()
{
FILE* fp;
int i, count = 0,cnt=0;
fp = fopen("data.txt", "rb");
while (!feof(fp))
{
if (fread(&addrinfo[count], LEN, 1, fp) == 1)
count++;
}
fclose(fp);
printf("||***名字****备注********电话1**********电话2***********email*****************地址***********\n");
for (i = 0; i < count; i++)
printf(FORMAT, DATA);
printf("\t\t 请继续选择功能:(0-6):");
int n;
scanf("%d",&n);
while (n)
{
switch (n)
{
case 1: input(); break;
case 2: search(); break;
case 3: update(); break;
case 4: del(); break;
case 5: sort(); break;
case 6: display_solid();break;
default: warning(); break;
}
getch();
menu();
scanf("%d",&n);
}
if(n==0) menu();
}
void warning()
{
system("cls");
printf("\a请输入有效指令!\n");
printf("请返回任意键位返回主菜单\n");
Sleep(800);
}
int isdigit(char s[])
{
for(int i=0;i<strlen(s);i++)
{
if(s[i]>'9'||s[i]<'0') return 0;
}
return 1;
}