图书馆管理系统-C语言版

实现环境:VS2022

设计思想:

1.本系统实现了图书馆管理的图书管理模块、读者管理模块、以及借书还书模块

2.图书管理模块实现了对图书的增删改查以及显示信息、读者管理模块实现了对读者信息的增删改查和显示信息、借书还书模块实现了读者的借书和还书功能

设计过程:

本系统所用到的宏定义:

#define BOOK_DATA astBook[i].iNum,astBook[i].acName,astBook[i].acAuthor,astBook[i].acPress,astBook[i].iAmout
#define READER_DATA astReader[i].iNum,astReader[i].acName,astReader[i].acSex,astReader[i].iMax,astReader[i].iAmout
#define BOOK_NUM 100
#define READER_NUM 100
#define LEN_BOOK sizeof(struct Book)
#define LEN_READER sizeof(struct Reader)
#define COUNT astReader[i].iMax-astReader[i].iAmout//读者当前已借阅图书数目
#define IBORROW astReader[iReaderId].iMax-astReader[iReaderId].iAmout//读者当前已借阅数

定义两个存储图书和读者信息的结构体:

//定义两个全局结构体数组用来记录所有的图书和读者信息
struct Book astBook[BOOK_NUM];
struct Reader astReader[READER_NUM];
//这里的BOOK_NUM和READER_NUM是两个宏定义,你也可以自行设计大小

图书信息:

//图书信息
struct Book
{
    int iNum;//图书编号
    char acName[15];//图书名称
    char acAuthor[15];//图书作者
    char acPress[15];//图书的出版社
    int iAmout;//图书的库存量
};

读者信息:

//读者信息
struct Reader
{
    int iNum;//读者编号
    char acName[15];//读者姓名
    char acSex[4];//读者性别
    int iMax;//读者最大的可借阅数量
    int iAmout;//读者当前可借阅数量
    int BookId[10];//读者已经借阅的读书列表
}

代码实现:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
#include<conio.h>

#define BOOK_DATA astBook[i].iNum,astBook[i].acName,astBook[i].acAuthor,astBook[i].acPress,astBook[i].iAmout
#define READER_DATA astReader[i].iNum,astReader[i].acName,astReader[i].acSex,astReader[i].iMax,astReader[i].iAmout
#define BOOK_NUM 100
#define READER_NUM 100
#define LEN_BOOK sizeof(struct Book)
#define LEN_READER sizeof(struct Reader)
#define COUNT astReader[i].iMax-astReader[i].iAmout//读者当前已借阅图书数目
#define IBORROW astReader[iReaderId].iMax-astReader[iReaderId].iAmout//读者当前已借阅数
//图书信息
struct Book
{
    int iNum;//图书编号
    char acName[15];//图书名称
    char acAuthor[15];//图书作者
    char acPress[15];//图书的出版社
    int iAmout;//图书的库存量
};

//读者信息
struct Reader
{
    int iNum;//读者编号
    char acName[15];//读者姓名
    char acSex[4];//读者性别
    int iMax;//读者最大的可借阅数量
    int iAmout;//读者当前可借阅数量
    int BookId[10];//读者已经借阅的读书列表
};

//定义两个全局结构体数组用来记录所有的图书和读者信息
struct Book astBook[BOOK_NUM];
struct Reader astReader[READER_NUM];

void ShowMainMenu()//显示主函数的界面(图书馆管理系统的主界面)
{
    system("cls");
    printf("\n\n\n\n\n\n");
    printf("\t\t|*********************************|\n");
    printf("\t\t|*************欢迎进入************|\n");
    printf("\t\t|**********图书馆管理系统*********|\n");
    printf("\t\t|*************主菜单**************|\n");
    printf("\t\t|**********1.图书管理*************|\n");
    printf("\t\t|**********2.读者管理*************|\n");
    printf("\t\t|**********3.借书还书登记*********|\n");
    printf("\t\t|**********0.退出系统*************|\n");
    printf("\t\t|*********************************|\n");
    printf("\t\t请选择:0-3\n");
}

void ShowBookMenu()//显示图书管理的子菜单
{
    system("cls");
    printf("\n\n\n\n\n\n");
    printf("\t\t|*********************************|\n");
    printf("\t\t|*************欢迎进入************|\n");
    printf("\t\t|**********图书馆管理系统*********|\n");
    printf("\t\t|*************子菜单**************|\n");
    printf("\t\t|**********图书管理模块***********|\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|**********0.返回主菜单***********|\n");
    printf("\t\t|*********************************|\n");
    printf("\t\t请选择:0-5\n");
}

//把图书信息从文件读取到数组中
int ReadBookFile(const char* pcMode)
{
    int iBookRecord = 0;//文件中的记录条数
    FILE* pfBook;
    pfBook=fopen("book.txt", pcMode);
    if (pfBook == NULL)
    {
        //printf("文件打开失败!\n");
        return -1;
    }

    while (!feof(pfBook))//feof:读到文件尾
    {
		if (fread(&astBook[iBookRecord], LEN_BOOK, 1, pfBook))
        {
            iBookRecord++;
        }
    }
    fclose(pfBook);
    return iBookRecord;
}

void ShowBook()//显示图书信息
{
    int i, iBookRecord;//信息数(条)
    system("cls");
    iBookRecord = ReadBookFile("rb");
    if (iBookRecord == -1)
    {
        printf("该文件打开失败,请先新增图书信息!\n");
    }
    else if (iBookRecord == 0)
    {
        printf("文件中没有图书信息!\n");
    }
    else
    {
        printf("\t|**********************|\n");
        printf("\n\n");
        printf("\t\t%-6s%-16s%-10s%-20s%-4s\n", "编号", "书名", "作者", "出版社", "库存量");
        for (i = 0; i < iBookRecord; i++)
        {
            printf("\t\t%-6d%-16s%-10s%-20s%-4d\n", BOOK_DATA);
        }
    }
}

void AddBook()//新增图书信息
{
    FILE* pfBook;
    int iBookRecord;//文件中的记录条数
    int iFlagExist;//图书是否存在
    int i;
    char cFlag;//是否输入图书信息的标志
    system("cls");
    iBookRecord = ReadBookFile("ab+");//ab+:以追加方式打开,或者新建二进制文件
    if (iBookRecord == -1)
    {
        printf("文件打开失败!\n");
        return;
    }
    else if (iBookRecord == 0)
    {
        printf("没有图书记录!\n");
    }
    else//记录不为0
    {
        ShowBook();//显示图书信息
    }
    //循环录入图书信息
    printf("请选择是否输入图书信息(y(Y)/n(N)):");
    cFlag = getchar();
    getchar();
    if (cFlag == 'n'||cFlag=='N')
    {
        return;
    }
    pfBook = fopen("book.txt", "ab+");
    if (pfBook == NULL)
    {
        printf("文件打开失败!\n");
        return;
    }
    while (cFlag == 'y' || cFlag == 'Y')
    {
        printf("录入数据:\n");

        //录入数据
        //判断记录是否已满
        if (iBookRecord >= BOOK_NUM)
        {
            printf("记录已满!\n");
            fclose(pfBook);
            return;
        }
        //图书编号不能重复
        printf("请输入图书编号:");
        do
        {
            iFlagExist = 0;
            scanf("%d", &astBook[iBookRecord].iNum);
            getchar();
            for (i = 0; i < i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪星猫宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值