程序设计基础课程设计—模拟图书馆管理系统

本文档详细介绍了使用C++编程实现一个简单的图书管理系统的过程,包括数据存储、用户交互、功能设计等方面。系统区分管理员和读者,实现了增删改查等操作,并提供了测试数据和结果分析。采用类结构组织代码,利用txt文件存储数据,确保程序的可读性和可移植性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人博客地址:https://travis1024.github.io/

简单文件数据库-模拟图书馆管理系统

1. 问题描述

编写一个程序模拟图书管理系统。用户分为管理员和读者两类,分别显示不同文本格式菜单,通过菜单项对应数字进行选择。读者菜单包括借书、还书、查询等功能。管理员菜单包括图书和读者信息录入、修改和删除。图书信息至少应包括:编号、书名、数量,读者信息至少应包括:编号、姓名、所借图书。可根据图书名称或编号进行图书信息查询,可查询某本书现在被哪些读者借走,命令行参数如下:Libsim –a(-u) xxxx

第一个参数为可执行程序名称;第二个参数为用户身份,-a表示管理员,-u表示读者;第三个参数为用户名。

2. 问题分析

  1. 文件需要对数据信息进行存储,我们应该考虑怎么样对txt文件进行设计才能让数据文件尽可能全面且简洁;

  2. 如何对txt文件进行写入,读取或者修改;

  3. 在对程序进行设计时我们还需要考虑程序结构,在保证程序完整性,功能完整性的同时,还尽可能应该保证程序结构逻辑的可读性;

  4. 系统与读者和管理员的交互,而且读者与管理员的部分功能是类型,我们可不可以将类似的功能合在一起,以避免代码的冗余,这是在设计之初需要考虑的问题。

3. 处理方法设计(算法步骤)

  • 首先是结构体和类采用哪种实现方式的选择:

    ​ C++中的类和结构体都可以继承,struct可以继承class,同样class也可以继承struct;C++中的类和结构体都可以封装,两者都可以包含成员变量和成员方法,都可以具有构造函数和析构函数。C++中的类和结构体都可以多态,允许成员函数是虚函数可以多态;C++中的类和结构体都具有访问控制,都可以用public、protected、private修饰其成员变量和成员方法。C++中的类和结构体都是按指传递的。另外,都可以同过彼此的方式初始化。
    ​ 而struct和class之间最本质的一个区别就是默认的访问控制: struct默认的数据访问控制是public的,而class默认的成员变量访问控制是private的。在继承方面,struct可以继承class,class同样可以继承struct。但是,struct默认是public继承,class默认是private继承。也就是说,在不指定继承方式时,struct是public继承父类的,class是private继承父类的,无论父类是class还是struct。
    ​ 综上并根据c++的特性,以及出于对后续程序设计的便捷性,可移植性,代码的可读性考虑,我决定采用类实现本程序的功能。

  • 经过初步设计,需要建立了四个txt文档,以存储相应的数据:

    (1)BookList.txt书籍id,书籍名称,总数量,可借阅数量;
    (2)Manager.txt管理员id,管理员密码,管理员姓名;
    (3)Reader.txt读者id,读者密码,读者姓名;
    (4)ReaderInfoRecord借阅者id,借阅图书名称,借阅数量;

    ​ 其中,有关读者姓名,管理员姓名,读者名称这三个字段,在进行输入时支持使用空格,为使读取方便,在对有空格的名称进行存储时,已将空格转换成下划线;

  • 需要建立7个类,以实现相应的功能:

    1. BookInfo类:其面向BookList.txt,用来实现书籍信息的读取,录入或者修改;
    2. ReaderInfo类:其面向ReaderInfoRecord.txt,用来实现对借阅记录信息的读取,录入,修改或者删除;
    3. ManagerPassword类:其面向Manager.txt,用来实现对管理员信息的读取,以及登陆信息的验证;
    4. ReaderPassword类,其面向Reader.txt,用来实现对读者信息的读取,以及登录信息的验证;
    5. Commonfunction类:在此类中,作为Reader类和Manager类的父类,实现两个子类共同需要的功能;
    6. Reader类,继承Commonfunction类,除此在此类中实现读者独有的功能;
    7. Manager类:继承Commonfunction类,除此在此类中实现管理员独有的功能;
  • 管理员功能:

  • 读者功能

  • 主要函数功能说明:

    (1)UpdataMap()
    程序在对读者id和姓名对应,管理员id和姓名对应时采用map数组以简化对txt文件的操作;此函数功能是在更改名字时更新map数组;
    (2)Login_Judge()
    登陆判断,检测id和密码是否正确;
    (3)ReadData()
    打开相应的txt文件,读取数据函数;
    (4)WriteBookInfo()
    打开txt文件,追加读写,不会覆盖掉之前的所有信息;
    (5)Update_BookFreeNumber()
    更新书籍剩余的可借阅数量,在借阅书籍或者还书时,更新BookList.txt文件的数量信息;
    (6)JudgeRepeat()
    在增加信息时,判断id(书籍或者读者)是否在txt文件中已经存在;
    (7)Deal_Black()
    判断名称中是否存在空格,如果存在将空格替换成下划线;
    (8)RemoveBlack()
    在对txt文件进行操作后,可能出现空白行的情况,造成文件空间的浪费,此函数功能即为删除文件中的空白行;

4.测试数据设计

  • 管理员:

    1)增加图书信息
    2)更改图书信息
    3)删除图书信息
    4)查询图书馆中所有书籍的信息
    5)增加读者信息
    6)更改读者信息
    7)删除读者信息
    8)查询所有注册过的读者信息
    9)读者借阅书籍(增加借阅记录)
    10)修改读者借阅信息(修改借阅记录)
    11)读者退还书籍(删除借阅记录)
    12)查询所有的借阅记录
    13)退出系统

  • 读者:

    1)借阅图书
    2)退还图书
    3)查看所有书籍的信息
    4)修改个人信息
    5)退出系统

5.测试结果分析

  • 管理员

    (1)增加图书信息

(2)更改图书信息

​ (3)删除图书信息

​ (4)查询图书馆中所有书籍的信息

​ (5)增加读者信息

​ (6)更改读者信息

​ (7)删除读者信息

​ (8)查询所有注册过的读者信息

​ (9)读者借阅书籍(增加借阅记录)

​ (10)修改读者借阅信息(修改借阅记录)

​ (11)读者退还书籍(删除借阅记录)

​ (12)查询所有的借阅记录

  • 读者

    ​ (1)借阅图书

​ (2)退还图书

​ (3)查看所有书籍信息

​ (4)修改个人信息

6.程序结构

7.源代码

Github:代码开源地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值