C语言图书管理系统

C语言图书管理系统为完善版,但是可以勉强用用。

在这里插入图片描述

#include "stdio.h"
#include "string.h"
#include "windows.h"
#include "conio.h"
#define LEN_BOOK sizeof(struct Book)
#define LEN_READER sizeof(struct Reader)
#define BOOK_DATA astBook[i].iNum,astBook[i].acName,astBook[i].acAuthor,astBook[i].acPress,astBook[i].iAmount
#define READER_DATA astReader[i].iNum,astReader[i].acName,astReader[i].acSex,astReader[i].iAmount,astReader[i].iMax,astReader[i].aiBookId//宏定义的这个模块可以在你使用的时候不用都写出来每个具体调用
#define BOOK_NUM 200
#define READER_NUM 100
#define PASSWORD_LENTH 20
char pass[PASSWORD_LENTH]="";//全局变量
struct Book{
    int iNum;
    char acName[30];
    char acAuthor[15];
    char acPress[20];
    int iAmount;
};
struct Reader{
    int iNum;
    char acName[15];
    char acSex[4];
    int iMax;
    int iAmount;
    int aiBookId[10];
};
struct Book astBook[BOOK_NUM];
struct Reader astReader[READER_NUM];
char *Password(){
    unsigned c;
    int i=0;
    while((c=getch())!='\r'){
        if(i<PASSWORD_LENTH-1&&isprint(c)){
            pass[i++]=c;
            putchar('*');
        }
        else if (i>0 && c=='\b')
        {
            --i;
            putchar('\b');
            putchar(' ');
            putchar('\b');
        }
    }
    putchar('\n');
    pass[i]='\0';
    return pass;
}
int Loading(){
    char acount[20],*mima;
    char cFlag;
    int i=0;
    printf("------------欢迎进入------------\n");
    printf("         图书馆管理系统       \n");
    start:
    printf("账号:");
    gets(acount);
    printf("密码:");
    mima=Password();
    if(strcmp(acount,"admin")==0&&strcmp(mima,"123")==0){
        printf("密码正确,正在进入系统");
        for(i=0;i<4;i++)printf("."),Sleep(350);
        return 1;
    }
    else{
        system("cls");
        printf("账号或密码错误,要重新输入吗(y or n)?\n");
        scanf("%c",&cFlag);
        getchar();
        if(cFlag=='y'){
            goto start;
        }
        else if(cFlag=='n'){
            return -1;
        }
    }
}
void ShowMainMenu(){
    system("cls");
    printf("\n\n");
    printf("\t|----------欢迎进入----------|\n");
    printf("\t|       图书馆管理系统       |\n");
    printf("\t|           主菜单           |\n");
    printf("\t|       1、图书管理          |\n");
    printf("\t|       2、读者管理          |\n");
    printf("\t|       3、借/还书登记       |\n");
    printf("\t|       0、退出系统          |\n");
    printf("\t|----------------------------|\n");
    printf("\n");
    printf("\t\t请选择(0-3):");
}
void ShowBookMenu(){
    system("cls");
    printf("\n\n");
    printf("\t|----------欢迎进入----------|\n");
    printf("\t|         图书管理系统       |\n");
    printf("\t|          图书子菜单        |\n");
    printf("\t|       1、显示图书信息      |\n");
    printf("\t|       2、新增图书信息      |\n");
    printf("\t|       3、图书信息查询      |\n");
    printf("\t|       4、图书信息删除      |\n");
    printf("\t|       5、图书信息修改      |\n");
    printf("\t|       0、返回主菜单        |\n");
    printf("\t|----------------------------|\n");
    printf("\n");
    printf("\t\t请选择(0-5):");
}
void ShowReaderMenu(){
    system("cls");
    printf("\n\n");
    printf("\t|----------欢迎进入----------|\n");
    printf("\t|         读者管理系统       |\n");
    printf("\t|          读者子菜单        |\n");
    printf("\t|       1、显示读者信息      |\n");
    printf("\t|       2、新增读者信息      |\n");
    printf("\t|       3、读者信息查询      |\n");
    printf("\t|       4、读者信息删除      |\n");
    printf("\t|       5、读者信息修改      |\n");
    printf("\t|       0、返回主菜单        |\n");
    printf("\t|----------------------------|\n");
    printf("\n");
    printf("\t\t请选择(0-5):");
}
void ShowBorrowReturnMenu(){
    system("cls");
    printf("\n\n");
    printf("\t|----------欢迎进入----------|\n");
    printf("\t|         借/还书登记        |\n");
    printf("\t|           子菜单           |\n");
    printf("\t|       1、借书登记          |\n");
    printf("\t|       2、还书登记          |\n");
    printf("\t|       0、返回主菜单        |\n");
    printf("\t|----------------------------|\n");
    printf("\n");
    printf("\t\t请选择(0-2):");
}
void ShowModifyBookMenu(){
    printf("\n");
    printf("\t|          1.编号                 |\n");
    printf("\t|          2.书字                 |\n");
    printf("\t|          3.作者                 |\n");
    printf("\t|          4.出版社               |\n");
    printf("\t|          5.库存                 |\n");
    printf("\n");
    printf("请输入所要修改的信息(键入相应的数字:1-5)\n");
}
void ShowModifyReaderMenu(){
    printf("\n");
    printf("\t|          1.编号                 |\n");
    printf("\t|          2.名字                 |\n");
    printf("\t|          3.性别                 |\n");
    printf("\t|          4.最大可借书数         |\n");
    printf("\n");
    printf("请输入所要修改的信息(键入相应的数字:1-4)\n");
}
void Showsearchmenu(){
    system("cls");
    printf("\n\n");
    printf("\t|----------欢迎进入----------|\n");
    printf("\t|         图书管理系统       |\n");
    printf("\t|         图书信息查询       |\n");
    printf("\t|       1、按编号查询        |\n");
    printf("\t|       2、按书名查询        |\n");
    printf("\t|       3、按作者查询        |\n");
    printf("\t|       4、按出版社查询      |\n");
    printf("\t|       5、模糊查找          |\n");
    printf("\t|       0、返回上级菜单      |\n");
    printf("\t|----------------------------|\n");
    printf("\n");
    printf("\t\t请选择(0-5):");
}
void Showfuzzysearchmenue(){
    system("cls");
    printf("\n\n");
    printf("\t|----------欢迎进入----------|\n");
    printf("\t|         图书管理系统       |\n");
    printf("\t|         图书模糊查询       |\n");
    printf("\t|       1、按书名查询        |\n");
    printf("\t|       2、按作者查询        |\n");
    printf("\t|       3、按出版社查询      |\n");
    printf("\t|       0、返回上级菜单      |\n");
    printf("\t|----------------------------|\n");
    printf("\n");
    printf("\t\t请选择(0-3):");
}
int ReadBookFile(char *pcMode){
    int iBookRecord=0;
    FILE *pfBook;
    pfBook=fopen("book.txt",pcMode);
    if(pfBook==NULL){
        return -1;
    }
    while(!feof(pfBook)){
        if(fread(&astBook[iBookRecord],LEN_BOOK,1,pfBook))
            iBookRecord++;
    }
    fclose(pfBook);
    return iBookRecord;
}
int ReadReaderFile(char *pcMode){
    int iReaderRecord=0;
    FILE *pfReader;
    pfReader=fopen("reader.txt",pcMode);
    if(pfReader==NULL){
        return -1;
    }
    while(!feof(pfReader)){
        if(fread(&astReader[iReaderRecord],LEN_READER,1,pfReader)==1)
            iReaderRecord++;
    }
    fclose(pfReader);
    return iReaderRecord;
}
void SaveBookFile(int iBookId){
    FILE *pfBook;
    pfBook=fopen("book.txt","rb+");
    if(pfBook!=NULL){
        fseek(pfBook,LEN_BOOK *iBookId,SEEK_SET);
        if(fwrite(&astBook[iBookId],LEN_BOOK,1,pfBook)!=1){
            printf("无法保存该信息!\n");
        }
    }
    fclose(pfBook);
}
void SaveReaderFile(int iReaderId){
    FILE *pfReader;
    pfReader=fopen("reader.txt","rb+");
    if(pfReader!=NULL){
        fseek(pfReader,LEN_BOOK *iReaderId,SEEK_SET);
        if(fwrite(&astReader[iReaderId],LEN_BOOK,1,pfReader)!=1){
            printf("无法保存该信息!\n");
        }
    }
    fclose(pfReader);
}
int SearchBook(){
//    system("cls");
    int iBookNum,iBookRecord,iBookId,i;
    iBookRecord=ReadBookFile("rb");
    if(iBookRecord==-1){
        printf("文件打开失败!\n");
        printf("|按任意键返回子菜单|");
        getch();
        return -2;
    }
    else if(iBookRecord==0){
        printf("数据库中没有任何图书记录\n");
        printf("|按任意键返回子菜单|");
        getch();
        return -3;
    }
    printf("请输入图书编号:");
    scanf("%d",&iBookNum);
    getchar();
    for(i=0;i<iBookRecord;i++){
        if(iBookNum==astBook[i].iNum){
            iBookId=i;
            printf("%d号图书信息如下:\n",iBookNum);
            printf("\t|——————————————————————————————————————————————|\n");
            printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
            printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
            printf("\t|——————————————————————————————————————————————|\n");
            printf("\n");
            break;
        }
    }
    if(i==iBookRecord){
        printf("找不到%d号图书信息!\n",iBookNum);
        iBookId=-1;
    }
    return iBookId;
}
void FuzzySearch(){
    int iBookNum,iBookRecord,iBookId,i,iItem=0,BookFlag=0;
    char acName[30],acAuthor[15],acPress[20];
    iBookRecord=ReadBookFile("rb");
    if(iBookRecord==-1){
        printf("文件打开失败!\n");
        printf("|按任意键返回子菜单|");
        getch();
    }
    else if(iBookRecord==0){
        printf("数据库中没有任何图书记录\n");
        printf("|按任意键返回子菜单|");
        getch();
    }
    Showfuzzysearchmenue();
    scanf("%d",&iItem);
    getchar();
    while(iItem){
        switch(iItem){
            case 1:
                BookFlag=0;
                printf("请输入书名:");
                gets(acName);
                for(i=0;i<iBookRecord;i++){
                    if(strstr(astBook[i].acName,acName)!=NULL){
                        iBookId=i;
                        printf("\t|——————————————————————————————————————————————|\n");
                        printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
                        printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
                        printf("\t|——————————————————————————————————————————————|\n");
                        BookFlag=1;
                    }
                }
                if(i==iBookRecord&&BookFlag==0){
                    printf("\t找不到“%s”相关图书信息!\n",acName);
                    printf("\t|按任意键返回子菜单|");
                    getch();
                    break;
                }
                if(i==iBookRecord&&BookFlag==1){
                    printf("\t|按任意键返回子菜单|");
                    getch();
                    break;
                }
            case 2:
                BookFlag=0;
                printf("请输入作者:");
                gets(acAuthor);
                for(i=0;i<iBookRecord;i++){
                    if(strstr(astBook[i].acAuthor,acAuthor)!=NULL){
                        iBookId=i;
                        printf("\t|——————————————————————————————————————————————|\n");
                        printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
                        printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
                        printf("\t|——————————————————————————————————————————————|\n");
                        BookFlag=1;
                    }
                }
                if(i==iBookRecord&&BookFlag==0){
                    printf("\t找不到“%s”相关图书信息!\n",acAuthor);
                    printf("\t|按任意键返回子菜单|");
                    getch();
                    break;
                }
                if(i==iBookRecord&&BookFlag==1){
                    printf("\t|按任意键返回子菜单|");
                    getch();
                    break;
                }
            case 3:
                BookFlag=0;
                printf("请输入书名:");
                gets(acPress);
                for(i=0;i<iBookRecord;i++){
                    if(strstr(astBook[i].acPress,acPress)!=NULL){
                        iBookId=i;
                        printf("\t|——————————————————————————————————————————————|\n");
                        printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
                        printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
                        printf("\t|——————————————————————————————————————————————|\n");
                        BookFlag=1;
                    }
                }
                if(i==iBookRecord&&BookFlag==0){
                    printf("\t找不到“%s”相关图书信息!\n",acPress);
                    printf("\t|按任意键返回子菜单|");
                    getch();
                    break;
                }
                if(i==iBookRecord&&BookFlag==1){
                    printf("\t|按任意键返回子菜单|");
                    getch();
                    break;
                }
            default:
                printf("\t请输入正确的指令!\n");
                printf("\t|按任意键重新输入|");
                getch();
        }
        Showfuzzysearchmenue();
        scanf("%d",&iItem);
        getchar();
    }
}
void SearchBookplus(){
    int iBookNum,iBookRecord,iBookId,i,iItem=0,BookFlag=0;
    char acName[30],acAuthor[15],acPress[20];
    iBookRecord=ReadBookFile("rb");
    if(iBookRecord==-1){
        printf("文件打开失败!\n");
        printf("|按任意键返回子菜单|");
        getch();
    }
    else if(iBookRecord==0){
        printf("数据库中没有任何图书记录\n");
        printf("|按任意键返回子菜单|");
        getch();
    }
    Showsearchmenu();
    scanf("%d",&iItem);
    getchar();
    while(iItem){
        switch(iItem){
            case 1:
                printf("\t请输入图书编号:");
                scanf("%d",&iBookNum);
                getchar();
                for(i=0;i<iBookRecord;i++){
                    if(iBookNum==astBook[i].iNum){
                        iBookId=i;
                        printf("\t%d号图书信息如下:\n",astBook[i].iNum);
                        printf("\t|——————————————————————————————————————————————|\n");
                        printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
                        printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
                        printf("\t|——————————————————————————————————————————————|\n");
                        printf("\n");
                        printf("\t|按任意键返回子菜单|");
                        getch();
                        break;
                    }
                }
                if(i==iBookRecord){
                    printf("\t找不到%d号图书信息!\n",iBookNum);
                    printf("\t|按任意键返回子菜单|");
                    getch();
                }
                break;
            case 2:
                printf("\t请输入书名:");
                gets(acName);
                for(i=0;i<iBookRecord;i++){
                    if(strcmp(acName,astBook[i].acName)==0){
                        iBookId=i;
                        printf("\t|——————————————————————————————————————————————|\n");
                        printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
                        printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
                        printf("\t|——————————————————————————————————————————————|\n");
                        printf("\n");
                        printf("\t|按任意键返回子菜单|");
                        getch();
                        break;
                    }
                }
                if(i==iBookRecord){
                    printf("\t找不到《%s》图书信息!\n",acName);
                    printf("\t|按任意键返回子菜单|");
                    getch();
                }
                break;
            case 3:
                BookFlag=0;
                printf("\t请输入作者:");
                gets(acAuthor);
                for(i=0;i<iBookRecord;i++){
                    if(strcmp(acAuthor,astBook[i].acAuthor)==0){
                        printf("\t|——————————————————————————————————————————————|\n");
                        printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
                        printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
                        printf("\t|——————————————————————————————————————————————|\n");
                        printf("\n");
                        BookFlag=1;
                    }
                }
                if(i==iBookRecord&&BookFlag==1){
                    printf("\t查找结束,以上是所有“%s”著作的书籍\n",acAuthor);
                    printf("\t|按任意键返回子菜单|");
                    getch();
                    break;
                }
                if(i==iBookRecord&&BookFlag==0){
                    printf("\t找不到“%s”著作的图书信息!\n",acAuthor);
                    printf("\t|按任意键返回子菜单|");
                    getch();
                }
                break;
            case 4:
                BookFlag=0;
                printf("\t请输入出版社名称:");
                gets(acPress);
                for(i=0;i<iBookRecord;i++){
                    if(strcmp(acPress,astBook[i].acPress)==0){
                        printf("\t|——————————————————————————————————————————————|\n");
                        printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
                        printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
                        printf("\t|——————————————————————————————————————————————|\n");
                        printf("\n");
                        BookFlag=1;
                    }
                }
                if(i==iBookRecord&&BookFlag==1){
                    printf("\t查找结束,以上是所有“%s”出版社的书籍\n",acPress);
                    printf("\t|按任意键返回子菜单|");
                    getch();
                    break;
                }
                if(i==iBookRecord){
                    printf("\t找不到任何“%s”出版社图书信息!\n",acPress);
                    printf("\t|按任意键返回子菜单|");
                    getch();
                }
                break;
            case 5:
                FuzzySearch();
                break;
            default:
                printf("\t请输入正确的指令!\n");
                printf("\t|按任意键重新输入|");
                getch();
        }
        Showsearchmenu();
        scanf("%d",&iItem);
        getchar();
    }
}
int SearchReader(){
    int iReaderNum,IReaderRecord,iReaderId,i;
    IReaderRecord=ReadReaderFile("rb");
    if(IReaderRecord==-1){
        printf("文件打开失败!\n");
        return -2;
    }
    else if(IReaderRecord==0){
        printf("没有读者记录!\n");
        return -3;
    }
    printf("请输入读者编号:");
    scanf("%d",&iReaderNum);
    getchar();
    for(i=0;i<IReaderRecord;i++){
        if(iReaderNum==astReader[i].iNum){
            iReaderId=i;
            printf("%d号读者信息如下:\n",iReaderNum);
            printf("\t|——————————————————————————————————————————————|\n");
            printf("\t%-8s%-12s%-6s%-16s%-16s\n","编号","姓名","性别","当前可借书数量","最大可借书数量");
            printf("\t%-8d%-12s%-6s%-16d%-16d\n",READER_DATA);
            printf("\t|——————————————————————————————————————————————|\n");
            printf("\n");
            break;
        }
    }
    if(i==IReaderRecord){
        printf("找不到%d号读者信息!\n",iReaderNum);
        iReaderId=-1;
    }
    return iReaderId;
}
void BorrowBook(){
    int iBookId,iReaderId,iBorrow,i;
    system("cls");
    iReaderId=SearchReader();
    if(iReaderId==-1){
        return;
    }
    iBorrow=astReader[iReaderId].iMax-astReader[iReaderId].iAmount;
    if(iBorrow==0){
        printf("该读者目前没有借任何书\n");
    }
    else{
        printf("\t该读者当前所借书编号为:");
        for(i=0;i<iBorrow;i++){
            printf("‘%d’",astReader[iReaderId].aiBookId[i]);
        }
        printf("\n\n");
    }
    if(astReader[iReaderId].iAmount==0){
        printf("该读者可借书数量为零,不能继续借书!\n");
        return;
    }
    printf("\n按任意键输入要借阅的图书信息\n");
    getch();
    iBookId=SearchBook();
    if(iBookId==-1){
        return;
    }
    if(astBook[iBookId].iAmount==0){
        printf("该图书库存量为零!图书不可借\n");
        return;
    }
    astReader[iReaderId].aiBookId[iBorrow]=astBook[iBookId].iNum;
    astBook[iBookId].iAmount--;
    astReader[iReaderId].iAmount--;
    SaveBookFile(iBookId);
    SaveReaderFile(iReaderId);
    printf("借书成功!\n");
}
void ReturnBook(){
    int iBookId,iReaderId,iBorrow,i,j;
    system("cls");
    iReaderId=SearchReader();
    if(iReaderId==-1){
        return;
    }
    iBorrow=astReader[iReaderId].iMax-astReader[iReaderId].iAmount;
    if(iBorrow==0){
        printf("\t该读者没有借任何书,无需归还\n");
        return;
    }
    else{
        printf("\t该读者当前所借图书为:");
        for(i=0;i<iBorrow;i++){
            printf("‘%d’",astReader[iReaderId].aiBookId[i]);
        }
        printf("\n\n");
    }
    printf("按任意键输入要归还的图书信息\n");
    getch();
    iBookId=SearchBook();
    if(iBookId==-1){
        return;
    }
    for(i=0;i<iBorrow;i++){
        if(astReader[iReaderId].aiBookId[i]==astBook[iBookId].iNum){
            for(j=i;j<iBorrow-1;j++){
                astReader[iReaderId].aiBookId[j]=astReader[iReaderId].aiBookId[j+1];
            }
            astReader[iReaderId].aiBookId[iBorrow]=0;
            astBook[iBookId].iAmount++;
            astReader[iReaderId].iAmount++;
            break;
        }
    }
    if(i==iBorrow){
        printf("该读者没有借这本书,无需归还\n");
        return;
    }
    SaveBookFile(iBookId);
    SaveReaderFile(iReaderId);
    printf("还书成功!\n");
}
void ShowBook(){
    int i,iBookRecord;
    system("cls");
    iBookRecord=ReadBookFile("r+");
    if(iBookRecord==-1)
        printf("文件打开失败!请先新增图书信息!\n");
    else if(iBookRecord==0)
        printf("文件中没有图书信息!\n");
    else{
        printf("\t|——————————————————————————————————————————————|\n");
        printf("\t%-6s%-30s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
        for(i=0;i<iBookRecord;i++)
            printf("\t%-6d%-30s%-10s%-20s%-4d\n",BOOK_DATA);
        printf("\t|——————————————————————————————————————————————|\n");
    }
}
void AddBook(){
    FILE *pfBook;
    int iBookRecord,iFlagExist,i;
    char cFlag;
    system("cls");
    iBookRecord=ReadBookFile("ab+");
    if(iBookRecord==-1){
        printf("文件打开失败!\n");
        return;
    }
    else if(iBookRecord==0)
        printf("没有图书记录!\n");
    else
        ShowBook();
    start:
    printf("\t请选择是否键入信息(y/n):");
    cFlag=getchar();
    getchar();
    if(cFlag=='n')
        return;
    pfBook=fopen("book.txt","ab+");
    if(pfBook==NULL){
        printf("文件打开失败!\n");
        return;
    }
    //功能添加完善代码
    if(cFlag!='y'&&cFlag!='n'){
        printf("请输入正确的指令!\n");
        goto start;
    }
    while(cFlag=='y'){
        if(iBookRecord>=BOOK_NUM){
            printf("记录已满!");
            fclose(pfBook); 
            return;
        }
        printf("\t请输入图书编号(非法输入编号将默认保存为0):");
        do{
            iFlagExist=0;
            scanf("%d",&astBook[iBookRecord].iNum);
            fflush(stdin);
            for(i=0;i<iBookRecord;i++){
                if(astBook[i].iNum==astBook[iBookRecord].iNum){
                    iFlagExist=1;
                    printf("该图书编号已存在,请重新输入:");
                    break;
                }
            }
        }while(iFlagExist==1);
        printf("\t请输入图书名称:");
        gets(astBook[iBookRecord].acName);
        printf("\t请输入图书作者:");
        gets(astBook[iBookRecord].acAuthor);
        printf("\t请输入图书出版社:");
        gets(astBook[iBookRecord].acPress);
        printf("\t请输入图书库存量(非法输入将不会保存库存):");
        scanf("%d",&astBook[iBookRecord].iAmount);
        fflush(stdin);
        if(fwrite(&astBook[iBookRecord],LEN_BOOK,1,pfBook)!=1){
            printf("\t无法保存该信息!\n");
            return;
        }
        else{
            printf("\t%d号图书已保存!\n",astBook[iBookRecord].iNum);
            iBookRecord++;
        }
        start1:
        printf("\t继续输入信息吗(y/n):");
        cFlag=getchar();
        getchar();
        if(cFlag!='y'&&cFlag!='n'){
            printf("\t请输入正确的指令!\n");
            goto start1;
        }
    }
    fclose(pfBook);
    printf("\t添加图书执行完毕!\n");
}
void DeleteBook(){
    FILE *pfBook;
    int iBookId,iBookRecord,i;
    char cFlag;
    system("cls");
    ShowBook();
    iBookId=SearchBook();
    if(iBookId==-1)
        return;
    iBookRecord=ReadBookFile("rb");
    start:
    printf("\t已找到该图书,是否删除?(y/n):");
    cFlag=getchar();
    fflush(stdin);
    //功能修改
    if(cFlag!='y'&&cFlag!='n'){
        printf("\t请输入正确的指令!\n");
        goto start;
    }
    if(cFlag=='n'||cFlag=='N')
        return;
    else if(cFlag=='y'||cFlag=='Y'){
        for(i=iBookId;i<iBookRecord-1;i++)
            astBook[i]=astBook[i+1];
        iBookRecord--;
    }
    pfBook=fopen("book.txt","wb");
    if(pfBook!=NULL){
        for(i=0;i<iBookRecord;i++){
            if(fwrite(&astBook[i],LEN_BOOK,1,pfBook)!=1){
                printf("无法保存该信息!\n");
                return;
            }
        }
        fclose(pfBook);
        printf("\t%d号图书信息已删除!\n",astBook[iBookId].iNum);
    }
}
void ModifyBook(){
    int iBookId,iBookRecord,iFlagExist,iItem,iNum,i;
    system("cls");
    ShowBook();
    iBookId=SearchBook();
    if(iBookId==-1)
        return;
    iBookRecord=ReadBookFile("rb");
    ShowModifyBookMenu();
    scanf("%d",&iItem);
    getchar();
    switch(iItem){
        case 1:
            printf("请输入图书编号:");
            do{
                iFlagExist=0;
                scanf("%d",&iNum);
                getchar();
                for(i=0;i<iBookRecord;i++){
                    if(iNum==astBook[i].iNum&&i!=iBookId){
                        iFlagExist=1;
                        printf("错误,该图书编号已存在,请重新输入:");
                        break;
                    }
                }
            }while(iFlagExist==1);
            astBook[iBookId].iNum=iNum;
            break;
        case 2:
            printf("请输入图书名称:");
            gets(astBook[iBookId].acName);
            break;
        case 3:
            printf("请输入图书作者:");
            gets(astBook[iBookId].acAuthor);
            break;
        case 4:
            printf("请输入图书出版社:");
            gets(astBook[iBookId].acPress);
            break;
        case 5:
            printf("请输入图书库存量:");
            scanf("%d",&astBook[iBookId].iAmount);
            getchar();
            break;
    }
    SaveBookFile(iBookId);
    printf("图书信息修改成功!\n");
}
void ShowReader(){
    int i,iReaderRecord;
    system("cls");
    iReaderRecord=ReadReaderFile("rb");
    if(iReaderRecord==-1)
        printf("文件打开失败!请添加读者信息!\n");
    else if(iReaderRecord==0)
        printf("文件中没有读者信息\n");
    else{
        printf("\t|——————————————————————————————————————————————|\n");
        printf("\t%-8s%-12s%-6s%-16s%-16s\n","编号","姓名","性别","当前可借书数量","最大可借书数量");
        for(i=0;i<iReaderRecord;i++){
            printf("\t%-8d%-12s%-6s%-16d%-16d\n",READER_DATA);
        }
        printf("\t|——————————————————————————————————————————————|\n");
    }
}
void AddReader(){
    FILE *pfReader;
    int iFlagExist,iReaderRecord,i;
    char cFlag;
    system("cls");
    iReaderRecord=ReadReaderFile("ab+");
    if(iReaderRecord==-1){
        printf("文件打开失败!\n");
        return;
    }
    else if(iReaderRecord==0)
        printf("没有读者记录!\n");
    else
        ShowReader();
    start:
    printf("请选择是否键入信息(y/n):");
    cFlag=getchar();
    fflush(stdin);
    //功能修改
    if(cFlag!='y'&&cFlag!='n'){
    printf("请输入正确的指令!\n");
    goto start;
    }
    if(cFlag=='n')
        return;
    pfReader=fopen("reader.txt","ab+");
    if(pfReader==NULL){
        printf("文件打开失败!\n");
        return;
    }
    while(cFlag=='y'||cFlag=='Y'){
        if(iReaderRecord>=READER_NUM){
            printf("记录已满!\n");
            fclose(pfReader);
            return;
        }
        printf("请输入读者编号(非法输入默认编号将为0):");
        do{
            iFlagExist=0;
            scanf("%d",&astReader[iReaderRecord].iNum);
            fflush(stdin);
            for(i=0;i<iReaderRecord;i++){
                if(astReader[i].iNum==astReader[iReaderRecord].iNum){
                    iFlagExist=1;
                    printf("该读者编号已存在!请重新输入:");
                }
            }
        }while(iFlagExist==1);
        printf("请输入读者姓名:");
        gets(astReader[iReaderRecord].acName);
        printf("请输入读者性别:F/M:");
        //功能修改
        while(gets(astReader[iReaderRecord].acSex)!=NULL){
            if(strcmp(astReader[iReaderRecord].acSex,"F")==0)
                break;
            else if(strcmp(astReader[iReaderRecord].acSex,"M")==0)
                break;
            printf("错误,只能输入'F'或'M',请重新输入\n");
        }
        printf("请输入读者最大可借书数(范围5-10):");
        while(scanf("%d",&astReader[iReaderRecord].iMax)==1){
            fflush(stdin);
            if(astReader[iReaderRecord].iMax>=5&&astReader[iReaderRecord].iMax<=10)
                break;
            printf("错误,读者最大借阅数范围为5-10,请重新输入\n");
        }
        astReader[iReaderRecord].iAmount=astReader[iReaderRecord].iMax;
        for(i=0;i<astReader[iReaderRecord].iMax;i++)
            astReader[iReaderRecord].aiBookId[i]=0;
        if(fwrite(&astReader[iReaderRecord],LEN_READER,1,pfReader)!=1){
            printf("无法保存该信息!\n");
        }
        else{
            printf("%d号读者信息已保存!\n",astReader[iReaderRecord].iNum);
            iReaderRecord++;
        }
        start1:
        printf("继续输入信息吗(y/n):");
        cFlag=getchar();
        getchar();
        //功能修改
        if(cFlag!='y'&&cFlag!='n'){
            printf("请输入正确的指令!\n");
            goto start1;
        }
    }
    fclose(pfReader);
    printf("添加读者执行完毕!\n");
}
void DeleteReader(){
    FILE *pfReader;
    int iReaderId,iReaderRecord,i;
    char cFlag;
    system("cls");
    ShowReader();
    iReaderId=SearchReader();
    if(iReaderId==-1)
        return;
    iReaderRecord=ReadReaderFile("rb");
    start:
    printf("已找到该读者,是否删除?(y/n):");
    cFlag=getchar();
    getchar();
    if(cFlag!='y'&&cFlag!='n'){
        printf("请输入正确的指令!\n");
        goto start;
    }
    if(cFlag=='n')
        return;
    else if(cFlag=='y'||cFlag=='Y'){
        for(i=iReaderId;i<iReaderRecord-1;i++)
            astReader[i]=astReader[i+1];
        iReaderRecord--;
    }
    pfReader=fopen("reader.txt","wb");
    if(pfReader!=NULL){
        for(i=0;i<iReaderRecord;i++){
            if(fwrite(&astReader[i],LEN_READER,1,pfReader)!=1){
                printf("无法保存该信息!\n");
                return;
            }
        }
        fclose(pfReader);
        printf("%d号读者信息已删除!\n",astReader[iReaderId].iNum);
    }
}
void ModifyReader(){
    int iReaderId,iReaderRecord,iBorrow,iItem,iNum,iMax,iFlagExist,i;
    system("cls");
    ShowReader();
    iReaderId=SearchReader();
    if(iReaderId==-1)
        return;
    iReaderRecord=ReadReaderFile("rb");
    ShowModifyReaderMenu();
    scanf("%d",&iItem);
    getchar();
    switch(iItem){
        case 1:
            printf("请输入读者编号:");
            do{
                iFlagExist=0;
                scanf("%d",&iNum);
                getchar();
                for(i=0;i<iReaderRecord;i++)
                    if(iNum==astReader[i].iNum&&i!=iReaderId){
                        iFlagExist=1;
                        printf("错误,该读者编号已存在,请重新输入:\n");
                        break;
                    }
            }while(iFlagExist==1);
            astReader[iReaderId].iNum=iNum;
            break;
        case 2:
            printf("请输入读者名字:");
            gets(astReader[iReaderId].acName);
            break;
        case 3:
            printf("请输入读者性别:F/M:");
            while(gets(astReader[iReaderId].acSex)!=NULL){
                if(strcmp(astReader[iReaderId].acSex,"F")==0||strcmp(astReader[iReaderId].acSex,"M")==0)
                    break;
                printf("错误,只能输入'F'或者'M',请重新输入\n");
            }
            break;
        case 4:
            iBorrow=astReader[iReaderId].iMax-astReader[iReaderId].iAmount;
            printf("请输入读者最大可借书数:(范围5-10):");
            while(scanf("%d",&iMax)==1){
                getchar();
                if(iMax>=5&&iMax<=10){
                    if(iBorrow>iMax){
                        printf("该读者目前借阅图书数量大于该数目,需要先还书\n");
                        return;
                    }
                    else{
                        astReader[iReaderId].iMax=iMax;
                        astReader[iReaderId].iAmount=iMax-iBorrow;
                        for(i=iBorrow;i<iMax;i++)
                            astReader[iReaderId].aiBookId[i]=0;
                        break;
                    }
                }
                printf("错误,读者最大借阅数范围为5-10,请重新输入\n");
            }
            break;
    }
    SaveReaderFile(iReaderId);
    printf("读者信息修改成功!\n");
}
void ManageBook(){
    int iItem;
    ShowBookMenu();
    scanf("%d",&iItem);
    getchar();
    while(iItem){
        switch(iItem){
            case 1:
                ShowBook();
                break;
            case 2:
                AddBook();
                break;
            case 3:
                system("cls");
                SearchBookplus();//注意吧功能集成一个新的函数中
                break;
            case 4:
                DeleteBook();
                break;
            case 5:
                ModifyBook();
                break;
            default:
                printf("\t\t请输入正确的数字!\n\t");
        }
        if(iItem!=3){
            printf("\t|按任意键返回子菜单|");
            getch();
        }
        ShowBookMenu();
        scanf("%d",&iItem);
        getchar();
    }
}
void ManageReader(){
    int iItem=0;
    ShowReaderMenu();
    scanf("%d",&iItem);
    getchar();
    while(iItem){
        switch(iItem){
            case 1:
                ShowReader();
                break;
            case 2:
                AddReader();
                break;
            case 3:
                system("cls");
                SearchReader();
                break;
            case 4:
                DeleteReader();
                break;
            case 5:
                ModifyReader();
                break;
            default:
                printf("\t\t请输入正确的数字!\n\t\t");
        }
        printf("|按任意键返回子菜单|");
        getch();
        ShowReaderMenu();
        scanf("%d",&iItem);
        getchar();
    }
}
void BorrowReturnManage(){
    int iItem=0;
    ShowBorrowReturnMenu();
    scanf("%d",&iItem);
    getchar();
    while(iItem){
        switch(iItem){
            case 1:
                BorrowBook();
                break;
            case 2:
                ReturnBook();
                break;
            default:
                printf("\t\t请输入正确的数字!\n\t\t");
        }
        printf("|按任意键返回子菜单|");
        getch();
        ShowBorrowReturnMenu();
        scanf("%d",&iItem);
        getchar();
    }
}
int main(){
    int iItem,load;
    load=Loading();
    if(load==1){
        ShowMainMenu();
        scanf("%d",&iItem);
        getchar();
        while(iItem){
            switch(iItem){
                case 1:
                    ManageBook();
                    break;
                case 2:
                    ManageReader();
                    break;
                case 3:
                    BorrowReturnManage();
                    break;
                default:
                    printf("\t\t请输入正确的数字!\n\t\t程序将于2秒后跳转到主菜单");
                    Sleep(2000);
            }
            ShowMainMenu();
            scanf("%d",&iItem);
            getchar();
        }
    }
    if(load==-1){
        printf("登陆失败!程序将在1秒后结束");
        Sleep(1000);
    }
    return 0;
    system("pause");
}

以上该管理系统的源码。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值