Bootstrap

c语言实训通讯录管理系统

有没有大佬能帮忙看看怎么修改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;

 

;