一、功能
二、分析
-
图书分类浏览具体分析见 分类目录管理系统
-
图书检索
-
借书
-
还书
-
查询借阅记录
三、特殊库函数
- strcmp( ): 用于比较两个字符串是否相等,也可用来实现字典序排序和冒泡排序的比较操作
- strcpy( ):将一个字符串复制给另一个字符串
- swap( ):交换两个数组或结构体,可用来实现冒泡排序的交换操作
- strstr( ):字符串匹配,判断某个字符串是否被包含在另一个字符串
四、数据
1、book.txt
存放每本书籍的ISBN、书名、作者、出版社、出版时间、价格、分类号信息
2、catalog3.dat
是一个二进制文件,存放目录的分类名、分类号、父节点信息
3、lend.txt
存放读者的借阅信息,依次是读者证号、ISBN号、借书日期、应还日期、实际归还日期、书籍状态
4、reader.txt
存放读者信息,依次是学号、姓名、性别、学院、读者证状态
ps: 这四个文件都放在本文最下面提供的GitHub链接中。
五、代码
头文件:configure.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#define MAX_TREE_SIZE 100 //最多结点个数
#define MAX_DAY_LEND 90 //最长借阅天数
#include <stdio.h>
#include <iostream>
using namespace std;
#include <time.h>
#include <string>
#include <list>
typedef struct Catalog //目录结构类型
{
char key[20] = {
0 }; //编号
char caption[80] = {
0 }; //类名
char parent[20] = {
0 }; //父亲编号
}Catalog;
typedef struct CatalogTree
{
Catalog Node[MAX_TREE_SIZE] = {
0 }; //数据域,Node的下标就表示了某个单元信息在顺序存储中的位置
int root = 0; //根节点位置,根节点默认在0号单元
int num = 0; //最后一个结点的数组编号
}CatalogTree;
typedef struct Book
{
char ISBN[200] = {
0 }; //ISBN码
char title[200] = {
0 }; //书名
char author[200] = {
0 }; //作者
char press[200] = {
0 }; //出版社
char date[200] = {
0 }; //书的出版日期
char price[200] = {
0 }; //书的价格
char CatalogNum[200] = {
0 }; //书的分类
};
typedef struct BookList {
//使用下标,还是直接vector就好了
Book Node[4000] = {
0 };
int num = 0;
};
typedef struct Reader {
char code[20]; //证件号
char name[30]; //姓名
char sex[5]; //性别
char dept[50]; //系别
int tag; //证件状态
};
typedef struct ReaderList {
Reader Node[500] = {
0 };
int num = 0;
};
typedef struct Lend //存储一条条借书记录
{
char ISBN[200] = {
0 }; //书的ISBN
char code[20] = {
0 }; //读者的证件号
char first[80] = {
0 }; //借出日期
char finish[80] = {
0 }; //应还日期
char back[80] = {
0 }; //实际归还日期
int tag = 0; //标记是否归还
};
//1、图书分类浏览
void BrowseBookCatalog(); //按照图书分类CatalogNum浏览图书,建立图书顺序表。
void CreateCatalogTree(); //将文件读入数组
void PrintCatalogTree(); //调用PreOrder()函数
void PreOrder(CatalogTree* ct, int i); //先序遍历
//2、按ISBN检索图书
void CreateBookList();
void FindISBN_BubbleSort(); //按ISBN检索图书,先按ISBN冒泡排序,再二分查找记录。
void BubbleSort(); //按ISBN冒泡排序所有记录
void BinSearchISBN(); //按ISBN折半查找记录
//3、按书名Title检索图书
void FindTitle();
//4、按作者Author检索图书
void FindAuthor();
//5、按出版社Publisher检索图书
void FindPublisher();
//6、按分类名Catalog检索图书
void FindCatalog();
//7、借书
void LendBook();
void FindReaderL(); //查询借书读者详细信息
int LendBookNum(char Code[]); //计算该读者已借图书本数
void SaveLendInfo(char Code[],char key[]); //保存借阅信息到lend.txt
//8、还书
void ReturnBook(); //还书
void CreatLendList(); //从lend.txt读取记录,并创建借阅记录单链表。
void SaveLendInfoW(int n); //保存链表信息到lend.txt中,重写借阅记录。
//9、查询借阅记录
void FindLendInfo(); //查找lend.txt输出该读者所有借阅记录
void menu();
int Bin(int low,int high,char key[]);
void SearchBook();
void CreatReadList();
main.cpp
#include "configure.h"
FILE* fcatalog = fopen("catalog3.dat", "rb"); //文件指针,打开分类信息
FILE* flend = fopen("lend.txt", "a+"); //文件指针,打开借书信息
FILE* freader = fopen("reader.txt", "r"); //文件指针,打开读者信息
CatalogTree tree, * ct;
BookList book;
ReaderList reader;
list<Lend> lend