Twotigersdd
Twotigersdd
2021-06-16 00:57
采纳率: 100%
浏览 31

C++代码可以运行,但是保存不了文件,怎么解决?谢谢!!!

#include "stdio.h"  
#include "string"

/*定义医生结构体*/  
struct Doctor
{
     char ID[50];       //医生编号
     char Name[50];     //姓名
     char Keshi[11];     //科室
     char Room[11];     //诊室
};

/*声明医生数组及医生数量*/  
struct Doctor Doctors[100];  
int num=0;  

/*通过医生编号返回数组下标*/   
int Doctor_SearchByIndex(char id[])  
{
    int i;  
    for (i=0;i<num;i++)  
    {
        if (strcmp(Doctors[i].ID,id)==0)  
        {
            return i;  
        }  
    }  
    return -1;   
}

/*通过姓名返回数组下标*/
int Doctor_SearchByName(char name[])  
{
    int i;  
    for (i=0;i<num;i++)  
    { 
        if (strcmp(Doctors[i].Name,name)==0)
        { 
            return i;
        }  
    }  
    return -1;  
}  

/*显示单条医生记录*/  
void Doctor_DisplaySingle(int index)   
{
    printf("%10s%10s%10s%8s\n","医生编号","姓名","科室","诊室");  
    printf("-------------------------------------------------------------\n");  
    printf("%10s%10s%10s%8s\n",Doctors[index].ID,Doctors[index].Name,Doctors[index].Keshi,Doctors[index].Room);  
}  

/****1、增加医生记录*****/  
void Doctor_Insert()  
{  
    while(1)  
    {
        printf("请输入医生编号:");  
        scanf("%s",&Doctors[num].ID);  
        getchar();  
        printf("请输入姓名:");  
        scanf("%s",&Doctors[num].Name);  
        getchar(); 
		printf("请输入科室:");  
        scanf("%s",&Doctors[num].Keshi);  
        getchar();
        printf("请输入诊室:");  
        scanf("%s",&Doctors[num].Room);  
        getchar(); 
    

        printf("是否继续?(Y/N),继续请按任意键,否则输入N:"); 
        if (getchar()=='N')  
        {  
            break;
        }  
     }  
}     

/******2、修改医生信息**********/  
void Doctor_Modify()  
{  
    while(1) 
    {  
        char id[50]; 
        int index; 
        printf("请输入要修改的医生的医生编号:"); 
        scanf("%s",&id);  
        getchar();  
        index=Doctor_SearchByIndex(id);  
        if (index==-1)  
        {  
            printf("该医生不存在!\n"); 
         }
        else  
        {  
            printf("你要修改的医生信息为:\n"); 
            Doctor_DisplaySingle(index);  
            printf("-- 请输入新值--\n"); 
            printf("请输入医生编号:");  
            scanf("%s",&Doctors[index].ID);  
            getchar();  
            printf("请输入姓名:");  
            scanf("%s",&Doctors[index].Name);  
            getchar();
            printf("请输入科室:");  
            scanf("%s",&Doctors[index].Keshi);  
            getchar();    
            printf("请输入诊室:");  
            scanf("%s",&Doctors[index].Room);  
            getchar();  

         }  

         printf("是否继续?(Y/N),继续请按任意键,否则输入N:"); 
         if (getchar()=='N')  
         {  
            break;
         }  

     }  

} 

/****3、删除医生信息****/  
void Doctor_Delete()  
{ 
    int i;  
    while(1)  
    {  
        char id[50];  
        int index;  
        printf("请输入要删除的医生的医生编号:");  
        scanf("%s",&id);  
        getchar();  
        index=Doctor_SearchByIndex(id);  
        if (index==-1)  
        {  
            printf("医生不存在!\n");  
        }  
        else  
        {  
            printf("你要删除的医生信息为:\n"); 
            Doctor_DisplaySingle(index);  
            printf("是否真的要删除?(Y/N)");  
            if (getchar()=='Y')  
            {  
                for (i=index;i<num-1;i++)  
                {  
                    Doctors[i]=Doctors[i+1];//把后边的对象都向前移动  
                } 
                num--;  
             }  
            getchar();  
            printf("已删除\n");
         }  

         printf("是否继续删除?(Y/N),继续请按任意键,否则输入N:"); 
         if (getchar()=='N')  
         {  
            break;
         }  
     }  
}  


/****4、按姓名查询******/  
void Doctor_Select()  
{  
    while(1)  
    {  
        char name[50];  
        int index;  

        printf("请输入要查询的医生的姓名:");  
        scanf("%s",&name); 
        getchar();  
        index=Doctor_SearchByName(name);  

        if (index==-1) 
        {  
            printf("医生不存在!\n"); 
        } 
        else  
        {  
            printf("你要查询的医生信息为:\n"); 
            Doctor_DisplaySingle(index);  
        }  

        printf("是否继续?(Y/N),继续请按任意键,否则输入N:"); 
        if (getchar()=='N')  
        {  
            break;
        } 

     }
}  





/*显示医生信息*/  
void Doctor_Display()  
{  
    int i;  
    printf("%10s%10s%10s%8s\n","医生编号","姓名","科室","诊室");  
    printf("-------------------------------------------------------------\n");  

    for (i=0;i<num;i++)  
    {  
        printf("%10s%10s%10s%8f\n",Doctors[i].ID,Doctors[i].Name,Doctors[i].Keshi,Doctors[i].Room);  
    }  

}  

/*将医生信息从文件(Database.txt)中读出*/  
void IO_ReadInfo()  
{ 
    FILE *fp;  
    int i;  

    if ((fp=fopen("Database.txt","rb"))==NULL)  
    {  
        printf("不能打开文件!\n");  
        return;  
    }

    if (fread(&num,sizeof(int),1,fp)!=1)  
    {  
        num=-1;  
    } 
    else  
    {  
        for(i=0;i<num;i++)  
        {  
            fread(&Doctors[i],sizeof(struct Doctor),1,fp);  
        }  
    } 

    fclose(fp);  
} 

/*将医生信息写入文件(Database.txt)*/  
void IO_WriteInfo()
{  
    FILE *fp; 
    int i;  
    if ((fp=fopen("Database.txt","wb"))==NULL)  
    {  
        printf("不能打开文件!\n");  
        return;  
    }  
    if (fwrite(&num,sizeof(int),1,fp)!=1)  
    {  
        printf("写入文件错误!\n");  
    }  
    for (i=0;i<num;i++)  
    {  
        if (fwrite(&Doctors[i],sizeof(struct Doctor),1,fp)!=1)  
        {  
            printf("写入文件错误!\n");  
        }  
    }  
    fclose(fp);  
} 

/***********主程序*********/ 
void main()  
{ 
    int choice;  

    IO_ReadInfo();          //读取文件

    while(1)  
    {  
        /*主菜单*/  
        printf("\n------ 医生预约系统------\n");  
        printf("1. 增加医生记录\n");  
        printf("2. 修改医生记录\n");  
        printf("3. 删除医生记录\n");  
        printf("4. 按姓名查询医生记录\n");  
        printf("5. 按诊室排序\n");  
        printf("6. 退出\n");  
        printf("请选择(1-6):");  

        scanf("%d",&choice);  
        getchar();  

        switch(choice)  
        { 
        case 1:  
            Doctor_Insert();  
            break; 

        case 2: 
            Doctor_Modify(); 
            break;  

        case 3:  
            Doctor_Delete(); 
            break;  

        case 4:  
            Doctor_Select();
            break;  

        case 5:  

            break;  

        case 6: 
            exit(0);  
            break;  
        } 
        IO_WriteInfo();  

    } 
}  
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • qzjhjxj
    qzjhjxj 2021-06-16 09:40
    已采纳

    修改完善如下,供参考:

    #include <stdio.h>
    #include <string>
    /*定义医生结构体*/
    struct Doctor
    {
         char ID[50];       //医生编号
         char Name[50];     //姓名
         char Keshi[11];     //科室
         char Room[11];     //诊室
    };
    /*声明医生数组及医生数量*/
    struct Doctor Doctors[100];
    int num=0;
    /*通过医生编号返回数组下标*/
    int Doctor_SearchByIndex(char id[])
    {
        int i;
        for (i=0;i<num;i++)
        {
            if (strcmp(Doctors[i].ID,id)==0)
            {
                return i;
            }
        }
        return -1;
    }
    /*通过姓名返回数组下标*/
    int Doctor_SearchByName(char name[])
    {
        int i;
        for (i=0;i<num;i++)
        {
            if (strcmp(Doctors[i].Name,name)==0)
            {
                return i;
            }
        }  
        return -1;  
    }  
    /*显示单条医生记录*/  
    void Doctor_DisplaySingle(int index)
    {
        printf("%10s%10s%10s%8s\n","医生编号","姓名","科室","诊室");  
        printf("-------------------------------------------------------------\n");  
        printf("%10s%10s%10s%8s\n",Doctors[index].ID,Doctors[index].Name,Doctors[index].Keshi,
                                                                         Doctors[index].Room);
    }  
    /****1、增加医生记录*****/
    void Doctor_Insert()
    {  
        while(1)  
        {
            printf("请输入医生编号:");
                                            //scanf("%s",&Doctors[index].Room);
            fflush(stdout);rewind(stdin);
            scanf("%s",Doctors[num].ID);    //scanf("%s",&Doctors[num].ID);
                                            //getchar();
            printf("请输入姓名:");
            fflush(stdout);rewind(stdin);
            scanf("%s",Doctors[num].Name);//scanf("%s",&Doctors[num].Name);
                                           //getchar();
            printf("请输入科室:");
            fflush(stdout);rewind(stdin);
            scanf("%s",Doctors[num].Keshi);//scanf("%s",&Doctors[num].Keshi);
                                           //getchar();
            printf("请输入诊室:");
            fflush(stdout);rewind(stdin);
            scanf("%s",Doctors[num].Room);//scanf("%s",&Doctors[num].Room);
                                          //getchar();
            num++;
            printf("是否继续?(Y/N),继续请按任意键,否则输入N:");
            fflush(stdout);rewind(stdin);
            if ((getchar())=='N')
            {  
                break;
            }
         }  
    }
    /******2、修改医生信息**********/  
    void Doctor_Modify()  
    {  
        while(1) 
        {  
            char id[50];
            int index; 
            printf("请输入要修改的医生的医生编号:");
            scanf("%s",id);  //scanf("%s",&id);
            getchar();  
            index=Doctor_SearchByIndex(id);
            if (index==-1)
            {  
                printf("该医生不存在!\n"); 
             }
            else  
            {  
                printf("你要修改的医生信息为:\n");
                Doctor_DisplaySingle(index);
                printf("-- 请输入新值--\n"); 
                printf("请输入医生编号:");
                fflush(stdout);rewind(stdin);
                scanf("%s",Doctors[index].ID);  //scanf("%s",&Doctors[index].ID);
                                                //getchar();
                printf("请输入姓名:");
                fflush(stdout);rewind(stdin);
                scanf("%s",Doctors[index].Name);//scanf("%s",&Doctors[index].Name);
                                                //getchar();
                printf("请输入科室:");
                fflush(stdout);rewind(stdin);
                scanf("%s",Doctors[index].Keshi);//scanf("%s",&Doctors[index].Keshi);
                                                //getchar();
                printf("请输入诊室:");
                fflush(stdout);rewind(stdin);
                scanf("%s",Doctors[index].Room);//scanf("%s",&Doctors[index].Room);
                                               //getchar();
             }
             printf("是否继续?(Y/N),继续请按任意键,否则输入N:");
             fflush(stdout);rewind(stdin);
             if ((getchar())=='N')
             {
                break;
             }
         }
    } 
    /****3、删除医生信息****/  
    void Doctor_Delete()  
    {
        int i;  
        while(1)  
        {  
            char id[50];  
            int index;  
            printf("请输入要删除的医生的医生编号:");
            fflush(stdout);rewind(stdin);
            scanf("%s",id);                 // scanf("%s",&id);
                                            //getchar();
            index=Doctor_SearchByIndex(id);
            if (index==-1)  
            {
                printf("医生不存在!\n");  
            }  
            else  
            {  
                printf("你要删除的医生信息为:\n"); 
                Doctor_DisplaySingle(index);
                printf("是否真的要删除?(Y/N)");  
                if ((getchar())=='Y')
                {  
                    for (i=index;i<num-1;i++)  
                    {  
                        Doctors[i]=Doctors[i+1];//把后边的对象都向前移动
                    } 
                    num--;  
                 }  
                getchar();
                printf("已删除\n");
             }
             printf("是否继续删除?(Y/N),继续请按任意键,否则输入N:");
             fflush(stdout);rewind(stdin);
             if ((getchar())=='N')
             {  
                break;
             }
         }  
    }  
     
    /****4、按姓名查询******/  
    void Doctor_Select()  
    {
        while(1)  
        {  
            char name[50];  
            int index;  
            printf("请输入要查询的医生的姓名:");
            fflush(stdout);rewind(stdin);
            scanf("%s",name); //scanf("%s",&name);
                              //getchar();
            index=Doctor_SearchByName(name);
            if (index==-1) 
            {  
                printf("医生不存在!\n");
            } 
            else  
            {  
                printf("你要查询的医生信息为:\n"); 
                Doctor_DisplaySingle(index);  
            }
            printf("是否继续?(Y/N),继续请按任意键,否则输入N:");
            fflush(stdout);rewind(stdin);
            if ((getchar())=='N')
            {  
                break;
            }
         }
    }  
     
     
    /*显示医生信息*/  
    void Doctor_Display()
    {  
        int i;  
        printf("%10s%10s%10s%8s\n","医生编号","姓名","科室","诊室");  
        printf("-------------------------------------------------------------\n");  
        for (i=0;i<num;i++)  
        {
            printf("%10s%10s%10s%8f\n",Doctors[i].ID,Doctors[i].Name,Doctors[i].Keshi,
                                                                     Doctors[i].Room);
        }  
    }  
    /*将医生信息从文件(Database.txt)中读出*/  
    void IO_ReadInfo()
    { 
        FILE *fp;  
        int i;  
        if ((fp=fopen("Database.txt","rb"))==NULL)  
        {  
            printf("不能打开文件!\n");
            return;  
        }
        if (fread(&num,sizeof(int),1,fp)!=1)  
        {  
            num=-1;  
        }
        else  
        {  
            for(i=0;i<num;i++)  
            {  
                fread(&Doctors[i],sizeof(struct Doctor),1,fp);  
            }
        } 
        fclose(fp);  
    } 
    /*将医生信息写入文件(Database.txt)*/  
    void IO_WriteInfo()
    {
        FILE *fp; 
        int i;  
        if ((fp=fopen("Database.txt","wb"))==NULL)  
        {  
            printf("不能打开文件!\n");  
            return;
        }  
        if (fwrite(&num,sizeof(int),1,fp)!=1)
        {  
            printf("写入文件错误!\n");  
        }  
        for (i=0;i<num;i++)
        {  
            if (fwrite(&Doctors[i],sizeof(struct Doctor),1,fp)!=1)  
            {  
                printf("写入文件错误!\n");  
            }  
        }
        fclose(fp);  
    } 
    /***********主程序*********/ 
    void main()  
    { 
        int choice;
        IO_ReadInfo();          //读取文件
        while(1)  
        {  
            /*主菜单*/  
            printf("\n------ 医生预约系统------\n");  
            printf("1. 增加医生记录\n");
            printf("2. 修改医生记录\n");  
            printf("3. 删除医生记录\n");  
            printf("4. 按姓名查询医生记录\n");  
            printf("5. 按诊室排序\n");  
            printf("6. 保存并退出\n");  
            printf("请选择(1-6):");
            scanf("%d",&choice);  
            getchar();  
            switch(choice)  
            { 
            case 1:  
                Doctor_Insert();
                break; 
            case 2: 
                Doctor_Modify(); 
                break;  
            case 3:  
                Doctor_Delete();
                break;  
            case 4:  
                Doctor_Select();
                break;  
            case 5:  
                break;
            case 6:
                IO_WriteInfo();
                exit(0);
                //break;
            }
        }
    }
    点赞 1 评论

相关推荐