图书流通管理系统——软件开发项目实践

本文介绍了一个使用C/C++开发的图书流通管理系统,包括图书分类浏览、检索、借书、还书和查询借阅记录等功能。文章详细讨论了特殊库函数如strcmp、strcpy、swap和strstr的应用,并列出数据文件格式,如book.txt、catalog3.dat、lend.txt和reader.txt。虽然原计划实现图形化界面,但因技术限制未实现,作者提到未来会学习相关技术。源码已上传至GitHub供参考。
摘要由CSDN通过智能技术生成

一、功能

在这里插入图片描述

二、分析

三、特殊库函数

  • 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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值