实现环境: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