m0_58287021
2021-05-15 20:10
采纳率: 100%
浏览 184

C语言图书管理系统设计

如何将这些从键盘输入的数据存储到文件中,以二进制打开储存文件

下次运行不用再次录入,不用再次使用1.图书入库,就有上次录入的数据可用

其他的已经弄好了

 

 

#include<stdio.h>
#include <stdlib.h>
#include<windows.h>
#include<string.h>
#include<conio.h>
#define M 100
struct books
{
    char BookName[12];
    int BookNumber;
    float Price;
    char Writter[12];
    char ExistentialState[12];
    char Name[12];
    char Sex[12];
    int SchoolNember;
    char StduentName[12];
    int StudentNum;
    char Sexual[12];
}s[M];
int N;

int main ()

    int sele; 
    sele=1;
    void Input();
    void Input1(); 
    void  Query();
    int Delete();
    void Borrow();
    void  Return();
    
    void Finish();
    while (1)
    {    
        system("cls"); 
        
        printf("\n\n");
        printf("|     1.图书入库      |\n\n");
        printf("|     2.图书查询      |\n\n");
        printf("|     3.删除图书      |\n\n");
        printf("|     4.借书注册      |\n\n");
        printf("|     5.图书借阅      |\n\n");
        printf("|     6.图书归还      |\n\n");
        printf("|     0.退出软件      |\n\n");
        label_1:printf("\n\n请输入功能序号:");
        scanf ("%d",&sele);

        if(sele>=0 && sele<=6)
        

    switch(sele)
    {
        case 1:Input();break;
        case 2:Query();break;
         case 3:Delete();break;
         case 4:Input1();break;
        case 5:Borrow();break;
        case 6:Return();break;
        case 0:Finish();break;
    }    
        else
        {
            printf("输入错误请再次输入|\n\n");
            goto label_1;
        }
        
    
    
    }
    
}


/*********输入*********/
void Input()

 int n,i,m;
 N=0;
    system("cls");
    printf("需要录入的书本总数:");
    scanf("%d",&n);
    N += n; m = n;
    printf("请输入相关信息:\n");
    for(i=0;i<n;i++)
    {
    system("cls");
    printf("还有%d本书待录入\n", m); m--;
    printf("图书名称:");
    scanf("%s",s[N-n+i].BookName);
    printf("图书编号:");
    scanf("%d",&s[N-n+i].BookNumber);
    printf("单价:");
    scanf("%f",&s[N-n+i].Price);
    printf("作者:");
    scanf("%s",&s[N-n+i].Writter);
    strcpy(s[N-n+i].ExistentialState,"未借出");
    strcpy(s[N-n+i].Name,"无");
    }
    printf("已成功入库%d本图书~~~,3秒后自动返回主菜单",n);
    Sleep(3000);
}

/********查询**********/
void Query()
{
    int i,j[100]={-1},d,k,t=0;
    char m[20];
    label_2:system("cls");
    printf("查询:");
    printf("1:图书名称              2:图书编号");
    printf("\n\n请输入查询选项:");
    scanf("%d",&k);
    if(k==1)
    {
        system("cls"); 
        printf("请输入图书名称:");
        scanf("%s",m);
        for(i=0;i<N;i++)
        if(strcmp(m,s[i].BookName)==0)
        {
        j[t]=i;
        t=t+1;
        }
    }
    else if(k==2)
    {
        system("cls"); 
        printf("请输入图书编号:");
        scanf("%d",&d);
        for(i=0;i<N;i++)
        if(d==s[i].BookNumber)
        {
        j[t]=i;
        t++;
        }
    }
    if (j[0] == -1 && t == 0)
    {
        system("cls");
        printf("书库暂时没有这本书\n\n继续查询吗?【按1继续/按其他键回主菜单】");
        scanf("%d", &k);
        if (k == 1)
            goto label_2;
        
    }
    if(j[0]!=-1 && t!=0)
    {
        system("cls"); 
        printf("\t图书名称 \t图书编号 \t单价 \t作者 \t存在状态 \t借书人姓名 \t性别 \t学号\n");
    for(i=0;i<t;i++)
    {
    system("cls"); 
    printf("\t%s       \t%d       \t%.3f\t%s   \t%s   \t%s         \t%s    \t%d ",s[j[i]].BookName,s[j[i]].BookNumber,s[j[i]].Price,s[j[i]].Writter,s[j[i]].ExistentialState,s[j[i]].Name,s[j[i]].Sex,s[j[i]].SchoolNember);
    }
    printf("\n\n继续查询吗?【按1继续/按其他键回主菜单】");
    scanf("%d", &k);
    if (k == 1)
        goto label_2;
    }
}
/********删除模块*********/
int Delete()
{
    int i,d,k,t=0;
    char ms[20];
    int ja=-1;
    label_1:system("cls");
    printf("查询:");
    printf("1:图书名称              2:图书编号");
    printf("\n\n请输入查询选项:");
    scanf("%d",&k);
    if(k==1)
    {
        system("cls"); 
        printf("请输入图书名称:");
        scanf("%s",ms);
        for(i=0;i<N;i++)
        if(strcmp(ms,s[i].BookName)==0)
        {
        ja=i;
        break;
        }
    }
    else if(k==2)
    {
        system("cls"); 
        printf("请输入图书编号:");
        scanf("%d",&d);
        for(i=0;i<N;i++)
        if(d==s[i].BookNumber)
        {
        ja=i;
        break;
        }
    }
    printf("确定删除该图书吗?\n********1表示Yes,其他No*********");
    int p;
    scanf("%d",&p);
    if (p == 1)
    {
        printf("删除中...");
        Sleep(300);
        
    }
    if (p != 1)
        return 0;
    if(ja!=-1 && p==1)
    {
        N=N-1;
        for(i=ja;i<N;i++)
        {
            strcpy(s[i].BookName,s[i+1].BookName);
            s[i].BookNumber=s[i+1].BookNumber;
            s[i].Price=s[i+1].Price;
            strcpy(s[i].Writter,s[i+1].Writter);
            strcpy(s[i].ExistentialState,s[i+1].ExistentialState);
            strcpy(s[i].Name,s[i+1].Name);
            strcpy(s[i].Sex,s[i+1].Sex);
            s[i].SchoolNember=s[i+1].SchoolNember;
        }
        printf("删除成功\n"); 
        printf("\n\n继续删除吗?【按1继续/按其他键回主菜单】");
        scanf("%d", &k);
        if (k == 1)
            goto label_1;
    }
    else if (ja == -1)
    {
        
        printf("书库暂时没有这本书哦~^_^\n");
        printf("\n\n继续删除吗?【按1继续/按其他键回主菜单】");
        scanf("%d", &k);
        if (k == 1)
            goto label_1;
    }
}
/**********借书人注册模块***********/
void Input1()

     int a=0,b=0,c=0;
    int D=0; 
    system("cls");
    printf("借书人注册数:");
    scanf("%d",&a);
    D += a; c = a;
    printf("请输入相关信息:\n");
    for(b=0;b<a;b++)
    {
    system("cls");
    printf("还有%d个借书人注册待录入\n", c); c--;
    printf("借书人名称:");
    scanf("%s",&s[D-a+b].StduentName);
    printf("借书人学号:");
    scanf("%d",&s[D-a+b].StudentNum);
    printf("性别:");
    scanf("%s",&s[D-a+b].Sexual);
    }
    printf("已成功录入%d个借书人~~~,3秒后自动返回主菜单",a);
    Sleep(3000);
}
/**********借书模块***********/
void Borrow()
{
        int i,j[100]={-1},d,k,t=0;
        char m[20];
        label_1:system("cls");
        printf("查询:");
        printf("1:图书名称              2:图书编号");
        printf("\n\n请输入查询选项:");
        scanf("%d",&k);
        if(k==1)
        {
            system("cls"); 
            printf("请输入图书名称:");
            scanf("%s",&m);
            for(i=0;i<N;i++)
            if(strcmp(m,s[i].BookName)==0)
            {
            j[t]=i;
            t=t+1;
            }
        }
    else if(k==2)
    {
        system("cls");
        printf("请输入图书编号:");
        scanf("%d",&d);
        for(i=0;i<N;i++)
        if(d==s[i].BookNumber)
        {
        j[t]=i;
        t++;
        }
    }
        if (j[0] == -1 && t == 0)
        {
            printf("没有找到这本书喔~~\n"); 
            printf("\n\n继续借书吗?【按1继续/按其他键回主菜单】");
            scanf("%d", &k);
            if (k == 1)
                goto label_1;
        } 
    
    if(j[0]!=-1&&t!=0&&s[j[i]].ExistentialState==" 未借出")
    {
        system("cls"); 
        printf("\t图书名称 \t图书编号 \t单价 \t作者 \t存在状态 \t借书人姓名 \t性别 \t学号\n");
        printf("\t%s       \t%d       \t%.3f\t%s   \t%s   \t%s         \t%s    \t%d ", s[j[i]].BookName, s[j[i]].BookNumber, s[j[i]].Price, s[j[i]].Writter, s[j[i]].ExistentialState, s[j[i]].Name, s[j[i]].Sex, s[j[i]].SchoolNember);
    }
    printf("\n\n*1:确定借阅  2:退出\n\n");
    scanf("%d",&k);
    switch(k)
    {
    case 1:system("cls"); 
        printf("请输入学号:\n");
    scanf("%d",&s[j[i]].SchoolNember);
    printf("请输入姓名:\n");
    scanf("%s",&s[j[i]].Name);
    printf("请输入性别:\n");
    scanf("%s",&s[j[i]].Sex);
    strcpy(s[j[i]].ExistentialState,"已借出");
    printf("借阅成功"); printf("\n\n继续借书吗?【按1继续/按其他键回主菜单】");
    scanf("%d", &k);
    if (k == 1)
        goto label_1;
    break;
    
    case 2:system("cls"); break;
    }
}

/*************还书模块***************/
void Return()
{
        int i,j[100]={-1},d,k,t=0;
        char m[20];
        label_1:system("cls");
        printf("查询:");
        printf("1:图书名称              2:图书编号");
        printf("\n\n请输入查询选项:");
        scanf("%d",&k);
        if(k==1)
        {
            system("cls"); 
            printf("请输入图书名称:");
            scanf("%s",&m);
            for(i=0;i<N;i++)
            if(strcmp(m,s[i].BookName)==0)
            {
            j[t]=i;
            t++;
            break;
            }
        }
    else if(k==2)
    {
        system("cls"); 
        printf("请输入图书编号:");
        scanf("%d",&d);
        for(i=0;i<N;i++)
        if(d==s[i].BookNumber)
        {
        j[t]=i;
        t++;
        break;
        }
    }
        if (t == 0)
        {
            printf("没有找到这本书喔~~\n");
            printf("\n\n继续还书吗?【按1继续/按其他键回主菜单】");
            scanf("%d", &k);
            if (k == 1)
                goto label_1;
        }
    else 
    {
        system("cls"); 
        printf("\t图书名称 \t图书编号 \t单价 \t作者 \t存在状态 \t借书人姓名 \t性别 \t学号\n");
        printf("\t%s       \t%d       \t%.3f\t%s   \t%s   \t%s         \t%s    \t%d ", s[j[i]].BookName, s[j[i]].BookNumber, s[j[i]].Price, s[j[i]].Writter, s[j[i]].ExistentialState, s[j[i]].Name, s[j[i]].Sex, s[j[i]].SchoolNember);
        printf("\n\n****************\n****************1:确定归还  2:退出\n****************\n");
        int p;
        scanf("%d",&p);
        if(p==1)
        {
        system("cls"); 
        strcpy(s[j[i]].ExistentialState,"未借出");
        strcpy(s[j[i]].Name,"无");
        s[j[i]].SchoolNember=0;
        printf("已归还\n");
        printf("\n\n继续还书吗?【按1继续/按其他键回主菜单】");
        scanf("%d", &k);
        if (k == 1)
            goto label_1;
        }
     
    }
}
/*************结束模块***************/
void Finish()
{
    exit(0);
}

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • CSDN专家-三岁丫 2021-05-15 21:30
    已采纳
    #include<stdio.h>
    #include <stdlib.h>
    //#include<windows.h>
    #include<string.h>
    //#include<conio.h>
    #define M 100
    struct books
    {
        char BookName[12];
        int BookNumber;
        float Price;
        char Writter[12];
        char ExistentialState[12];
        char Name[12];
        char Sex[12];
        int SchoolNember;
        char StduentName[12];
        int StudentNum;
        char Sexual[12];
    }s[M];
    int N;
    
    int main ()
    {
        int sele;
        sele=1;
        // 系统初始化
        void init();
        void Input();
        void Input1();
        void  Query();
        int Delete();
        void Borrow();
        void  Return();
        void Finish();
        void clearInputCache();
        init();
        while (1)
        {
            system("cls");
    
            printf("\n\n");
            printf("|     1.图书入库      |\n\n");
            printf("|     2.图书查询      |\n\n");
            printf("|     3.删除图书      |\n\n");
            printf("|     4.借书注册      |\n\n");
            printf("|     5.图书借阅      |\n\n");
            printf("|     6.图书归还      |\n\n");
            printf("|     0.退出软件      |\n\n");
            label_1:printf("\n\n请输入功能序号:");
            clearInputCache();
            scanf ("%d",&sele);
            clearInputCache();
            if(sele>=0 && sele<=6)
    
    
                switch(sele)
                {
                    case 1:Input();break;
                    case 2:Query();break;
                    case 3:Delete();break;
                    case 4:Input1();break;
                    case 5:Borrow();break;
                    case 6:Return();break;
                    case 0:Finish();break;
                }
            else
            {
                printf("输入错误请再次输入|\n\n");
                goto label_1;
            }
    
    
    
        }
    
    }
    
    /*********系统初始化*********/
    void init()
    {
        // 打开数据文件
        FILE * fp;
        if ((fp = fopen("book.dat", "rb")) == NULL)
        {
            printf("打开文件 %s 失败", "book.dat");
            exit(EXIT_FAILURE);
        }
    
        // 数据装载
        rewind(fp);
        while (!feof(fp))
        {
            fread(&s[N++], sizeof(struct books), 1, fp);
        }
        fclose(fp);
    }
    
    /*********输入*********/
    void Input()
    {
        int n,i,m;
        system("cls");
        printf("需要录入的书本总数:");
        scanf("%d",&n);
        m = n;
        printf("请输入相关信息:\n");
        for(i=0;i<n;i++)
        {
            system("cls");
            printf("还有%d本书待录入\n", m); m--;
            printf("图书名称:");
            scanf("%s",s[N].BookName);
            printf("图书编号:");
            scanf("%d",&s[N].BookNumber);
            printf("单价:");
            scanf("%f",&s[N].Price);
            printf("作者:");
            scanf("%s",&s[N].Writter);
            strcpy(s[N].ExistentialState,"未借出");
            strcpy(s[N++].Name,"无");
        }
        printf("已成功入库%d本图书~~~,3秒后自动返回主菜单",n);
    //    Sleep(3000);
    }
    
    /********查询**********/
    void Query()
    {
        int i,j[100]={-1},d,k,t=0;
        char m[20];
        label_2:system("cls");
        printf("查询:");
        printf("1:图书名称              2:图书编号");
        printf("\n\n请输入查询选项:");
        scanf("%d",&k);
        if(k==1)
        {
            system("cls");
            printf("请输入图书名称:");
            scanf("%s",m);
            for(i=0;i<N;i++)
                if(strcmp(m,s[i].BookName)==0)
                {
                    j[t]=i;
                    t=t+1;
                }
        }
        else if(k==2)
        {
            system("cls");
            printf("请输入图书编号:");
            scanf("%d",&d);
            for(i=0;i<N;i++)
                if(d==s[i].BookNumber)
                {
                    j[t]=i;
                    t++;
                }
        }
        if (j[0] == -1 && t == 0)
        {
            system("cls");
            printf("书库暂时没有这本书\n\n继续查询吗?【按1继续/按其他键回主菜单】");
            scanf("%d", &k);
            if (k == 1)
                goto label_2;
    
        }
        if(j[0]!=-1 && t!=0)
        {
            system("cls");
            printf("\t图书名称 \t图书编号 \t单价 \t作者 \t存在状态 \t借书人姓名 \t性别 \t学号\n");
            for(i=0;i<t;i++)
            {
                system("cls");
                printf("\t%s       \t%d       \t%.3f\t%s   \t%s   \t%s         \t%s    \t%d ",s[j[i]].BookName,s[j[i]].BookNumber,s[j[i]].Price,s[j[i]].Writter,s[j[i]].ExistentialState,s[j[i]].Name,s[j[i]].Sex,s[j[i]].SchoolNember);
            }
            printf("\n\n继续查询吗?【按1继续/按其他键回主菜单】");
            scanf("%d", &k);
            if (k == 1)
                goto label_2;
        }
    }
    /********删除模块*********/
    int Delete()
    {
        int i,d,k,t=0;
        char ms[20];
        int ja=-1;
        label_1:system("cls");
        printf("查询:");
        printf("1:图书名称              2:图书编号");
        printf("\n\n请输入查询选项:");
        scanf("%d",&k);
        if(k==1)
        {
            system("cls");
            printf("请输入图书名称:");
            scanf("%s",ms);
            for(i=0;i<N;i++)
                if(strcmp(ms,s[i].BookName)==0)
                {
                    ja=i;
                    break;
                }
        }
        else if(k==2)
        {
            system("cls");
            printf("请输入图书编号:");
            scanf("%d",&d);
            for(i=0;i<N;i++)
                if(d==s[i].BookNumber)
                {
                    ja=i;
                    break;
                }
        }
        printf("确定删除该图书吗?\n********1表示Yes,其他No*********");
        int p;
        scanf("%d",&p);
        if (p == 1)
        {
            printf("删除中...");
    //        Sleep(300);
        }
        if (p != 1)
            return 0;
        if(ja!=-1 && p==1)
        {
            N=N-1;
            for(i=ja;i<N;i++)
            {
                strcpy(s[i].BookName,s[i+1].BookName);
                s[i].BookNumber=s[i+1].BookNumber;
                s[i].Price=s[i+1].Price;
                strcpy(s[i].Writter,s[i+1].Writter);
                strcpy(s[i].ExistentialState,s[i+1].ExistentialState);
                strcpy(s[i].Name,s[i+1].Name);
                strcpy(s[i].Sex,s[i+1].Sex);
                s[i].SchoolNember=s[i+1].SchoolNember;
            }
            printf("删除成功\n");
            printf("\n\n继续删除吗?【按1继续/按其他键回主菜单】");
            scanf("%d", &k);
            if (k == 1)
                goto label_1;
        }
        else if (ja == -1)
        {
    
            printf("书库暂时没有这本书哦~^_^\n");
            printf("\n\n继续删除吗?【按1继续/按其他键回主菜单】");
            scanf("%d", &k);
            if (k == 1)
                goto label_1;
        }
    }
    /**********借书人注册模块***********/
    void Input1()
    {
        int a=0,b=0,c=0;
        int D=0;
        system("cls");
        printf("借书人注册数:");
        scanf("%d",&a);
        D += a; c = a;
        printf("请输入相关信息:\n");
        for(b=0;b<a;b++)
        {
            system("cls");
            printf("还有%d个借书人注册待录入\n", c); c--;
            printf("借书人名称:");
            scanf("%s",&s[D-a+b].StduentName);
            printf("借书人学号:");
            scanf("%d",&s[D-a+b].StudentNum);
            printf("性别:");
            scanf("%s",&s[D-a+b].Sexual);
        }
        printf("已成功录入%d个借书人~~~,3秒后自动返回主菜单",a);
    //    Sleep(3000);
    }
    /**********借书模块***********/
    void Borrow()
    {
        int i,j[100]={-1},d,k,t=0;
        char m[20];
        label_1:system("cls");
        printf("查询:");
        printf("1:图书名称              2:图书编号");
        printf("\n\n请输入查询选项:");
        scanf("%d",&k);
        if(k==1)
        {
            system("cls");
            printf("请输入图书名称:");
            scanf("%s",&m);
            for(i=0;i<N;i++)
                if(strcmp(m,s[i].BookName)==0)
                {
                    j[t]=i;
                    t=t+1;
                }
        }
        else if(k==2)
        {
            system("cls");
            printf("请输入图书编号:");
            scanf("%d",&d);
            for(i=0;i<N;i++)
                if(d==s[i].BookNumber)
                {
                    j[t]=i;
                    t++;
                }
        }
        if (j[0] == -1 && t == 0)
        {
            printf("没有找到这本书喔~~\n");
            printf("\n\n继续借书吗?【按1继续/按其他键回主菜单】");
            scanf("%d", &k);
            if (k == 1)
                goto label_1;
        }
    
        if(j[0]!=-1&&t!=0&&s[j[i]].ExistentialState==" 未借出")
        {
            system("cls");
            printf("\t图书名称 \t图书编号 \t单价 \t作者 \t存在状态 \t借书人姓名 \t性别 \t学号\n");
            printf("\t%s       \t%d       \t%.3f\t%s   \t%s   \t%s         \t%s    \t%d ", s[j[i]].BookName, s[j[i]].BookNumber, s[j[i]].Price, s[j[i]].Writter, s[j[i]].ExistentialState, s[j[i]].Name, s[j[i]].Sex, s[j[i]].SchoolNember);
        }
        printf("\n\n*1:确定借阅  2:退出\n\n");
        scanf("%d",&k);
        switch(k)
        {
            case 1:system("cls");
                printf("请输入学号:\n");
                scanf("%d",&s[j[i]].SchoolNember);
                printf("请输入姓名:\n");
                scanf("%s",&s[j[i]].Name);
                printf("请输入性别:\n");
                scanf("%s",&s[j[i]].Sex);
                strcpy(s[j[i]].ExistentialState,"已借出");
                printf("借阅成功"); printf("\n\n继续借书吗?【按1继续/按其他键回主菜单】");
                scanf("%d", &k);
                if (k == 1)
                    goto label_1;
                break;
    
            case 2:system("cls"); break;
        }
    }
    
    /*************还书模块***************/
    void Return()
    {
        int i,j[100]={-1},d,k,t=0;
        char m[20];
        label_1:system("cls");
        printf("查询:");
        printf("1:图书名称              2:图书编号");
        printf("\n\n请输入查询选项:");
        scanf("%d",&k);
        if(k==1)
        {
            system("cls");
            printf("请输入图书名称:");
            scanf("%s",&m);
            for(i=0;i<N;i++)
                if(strcmp(m,s[i].BookName)==0)
                {
                    j[t]=i;
                    t++;
                    break;
                }
        }
        else if(k==2)
        {
            system("cls");
            printf("请输入图书编号:");
            scanf("%d",&d);
            for(i=0;i<N;i++)
                if(d==s[i].BookNumber)
                {
                    j[t]=i;
                    t++;
                    break;
                }
        }
        if (t == 0)
        {
            printf("没有找到这本书喔~~\n");
            printf("\n\n继续还书吗?【按1继续/按其他键回主菜单】");
            scanf("%d", &k);
            if (k == 1)
                goto label_1;
        }
        else
        {
            system("cls");
            printf("\t图书名称 \t图书编号 \t单价 \t作者 \t存在状态 \t借书人姓名 \t性别 \t学号\n");
            printf("\t%s       \t%d       \t%.3f\t%s   \t%s   \t%s         \t%s    \t%d ", s[j[i]].BookName, s[j[i]].BookNumber, s[j[i]].Price, s[j[i]].Writter, s[j[i]].ExistentialState, s[j[i]].Name, s[j[i]].Sex, s[j[i]].SchoolNember);
            printf("\n\n****************\n****************1:确定归还  2:退出\n****************\n");
            int p;
            scanf("%d",&p);
            if(p==1)
            {
                system("cls");
                strcpy(s[j[i]].ExistentialState,"未借出");
                strcpy(s[j[i]].Name,"无");
                s[j[i]].SchoolNember=0;
                printf("已归还\n");
                printf("\n\n继续还书吗?【按1继续/按其他键回主菜单】");
                scanf("%d", &k);
                if (k == 1)
                    goto label_1;
            }
    
        }
    }
    /*************结束模块***************/
    void Finish()
    {
        FILE * fp;
        if ((fp = fopen("book.dat", "wb")) == NULL)
        {
            printf("打开文件 %s 失败", "book.dat");
            exit(EXIT_FAILURE);
        }
        // 结束之前重写文件
        for (int i = 0; i < N; i ++)
        {
            fwrite(&s[i], sizeof(struct books), 1, fp);
        }
        fclose(fp);
        exit(0);
    }
    void clearInputCache()
    {
        while (getchar() != '\n')
            continue;
    }

    其实还是有小问题,不过文件的重写和装载,我已经写好了。

    评论
    解决 1 无用
    打赏 举报
查看更多回答(3条)

相关推荐 更多相似问题