手把手教你用 c++ 做 图书管理系统

题目要求

1、问题描述 :
定义图书类,属性有:书名、出版社、ISBN 号、作者、库存量、价格等信息和相关的 对属性做操作的行为。 主要完成对图书的销售、统计和图书的简单管理。
2、功能要求
(1)销售功能:
购买书籍时,输入相应的 ISBN 号,并在书库中查找该书的相关信息。 如果有库存量,输入购买的册数,进行相应计算。如果库存量不够,给出提示信息,结束购 买。
(2)图书简单管理功能:

添加功能:主要完成图书信息的添加,要求 ISBN 号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加。

查询功能:可按书名、ISBN 号、作者、出版社进行查询。若存在相应信息,输出所查 询的信息,若不存在该记录,则提示“该标题不存在!”。

修改功能:可根据查询结果对相应的记录进行修改,修改时注意 ISBN 号的唯一性。

删除功能:主要完成图书信息的删除。输入要删除的 ISBN 号,根据编号删除该物品的 记录,如果该编号不在物品库中,则提示“该编号不存在”。

(3)统计功能。 输出当前书库中所有图书的总数及详细信息;可按书的价格、库存量、作者、出版社进 行统计,输出统计信息时,要按从大到小进行排序。

(4)图书存盘:将当前程序中的图书信息存入文件中。

(5)读出信息:从文件中将图书信息读入程序。

思路分析

图书管理系统肯定要定义“书”类啦~大概有这些属性叭。
在这里插入图片描述
再分析功能要求,大概这个系统是这样
在这里插入图片描述
大致将各个模块分了出来,接下来就开始实现了!

各个模块的实现

“书”类的创建

这个简单,就这几个属性,直接上代码

class Book
{
   
public:
    Book();
    ~Book();
    string name;
    int ISBN;
    int price;//价格
    string writer;//作者
    string publishingHouse;//出版社
    int inStock; //库存
};

就把他放在Book.h 头文件吧

管理模块的创建及实现

管理权限

定义bool类函数来判断用户输入的密码是否正确,随便写一字符串就好

bool quanxian()
{
   
    cout << "请输入密码来证明您的权限" << endl;
    string c;
    cin >> c;
    return c == "73748156";
}

添加图书

接下来是添加一本书,先声明一个临时的Book类型变量,然后依次读入他的各个属性,一定要注意判断ISBN号是否唯一
先写一个判断ISBN号是否唯一的函数

int isExist(int isbn, vector<Book>& b)
{
   
    for (auto& i : b) {
    
        //遍历这个Book类vector,判断ISBN是否唯一
        if (i.ISBN == isbn)return -1;
    }
    return 0;
}

然后写添加书籍名称的函数

void addBookName(vector<Book>& b, Book& c) {
   
    string name;
    cout << "请输入书名" << endl;
    cin >> name;
    c.name = name;
}

添加ISBN的函数,在其中插入判断ISBN是否唯一的函数

void addBookIsbn(vector<Book>& b, Book& c) {
   
    int isbn;
    cout << "请输入ISBN号" << endl;
    while (true)
    {
   
        cin >> isbn;
        if (isExist(isbn, b) == -1)cout << "ISBN号重复,请重新输入" << endl;
        else break;
    }
    c.ISBN = isbn;
}

添加作者的函数

void addBookWriter(vector<Book>& b, Book& c) {
   
    string writer;
    cout << "请输入作者" << endl;
    cin >> writer;
    c.writer = writer;
}

添加出版社的函数

void addBookPublishingHouse(vector<Book>& b, Book& c) {
   
    string chubanshe;
    cout << "请输入出版社" << endl;
    cin >> chubanshe;
    c.publishingHouse = chubanshe;
}

添加库存的函数

void addBookInStock(vector<Book>& b, Book& c) {
   
    int kucun;
    cout << "请输入库存" << endl;
    cin >> kucun;
    c.inStock = kucun;
}

添加价格的函数

void addBookPrice(vector<Book>& b, Book& c) {
   
    int jiage;
    cout << "请输入价格" << endl;
    cin >> jiage;
    c.price = jiage;
}

最后一起调用,做添加图书的总函数

void addBook(vector<Book>& b) {
   
    Book newbook;//声明一个Book类变量
    addBookName(b, newbook);
    addBookIsbn(b, newbook);
    addBookWriter(b, newbook);
    addBookPublishingHouse(b, newbook);
    addBookInStock(b, newbook);
    addBookPrice(b, newbook);
    //将信息读取到newbook变量中
    b.push_back(newbook);
    //再将newbook添加到Book类vector中
    cout << "添加成功" << endl;
}

这样就可以添加图书了

查找图书

查找图书肯定要按多种条件查找
先做一个菜单

void showMenu4()
{
   
    cout << "*************************************" << endl;
    cout << "***   请选择您检索书籍的方式   *******" << endl;
    cout << "***   通过书名查找请按1        ******" << endl;
    cout << "***   通过IBSN号查找请按2      ******" << endl;
    cout << "***   通过作者查找请按3        ******" << endl;
    cout << "***   通过出版社查找请按4       ******" << endl;
    cout << "***   退出查找请按0           *******" << endl;
    cout << "***********************************" << endl;
}

理科生整的菜单没有美感。。。。。。。

接下来需要考虑的问题是书籍信息重复问题
书名会重,一个作者会写好多本书,出版社也肯定不会只出一本书
考虑到上述情况,查找结果可能不止一本书

故在查找函数内部再声明一个Book类的vector,
将查到的书存在里边,然后再做第二次确认

还是先做查找书名的函数,参数传两个Book类的vector

void findBookName(vector<Book>& b, vector<Book>& c) {
   
    string name;
    cout << "请输入您要查找的书籍名称" << endl;
    cin >> name;
    for (auto& i : b) {
   
        if (i.name == name)
        {
   
            c.push_back(i);
        }
    }
}

然后是查找作者的函数

void findBookWriter(vector<Book>& b, vector<Book>& c) {
   
    string writer;
    cout << "请输入您要查找的书籍作者" << endl;
    cin >> writer;
    for (auto& i : b) {
   
        if (i.writer == writer)
        {
   
            c.push_back(i);
        }
    }
}

还有查找出版社的函数

void findBookPublishingHouse(vector<Book>& b, vector<Book>& c) {
   
    string chubanshe;
    cout << "请输入您要查找的书籍出版社" << endl;
    cin >> chubanshe;
    for (auto& i : b) {
   
        if (i.publishingHouse == chubanshe)
        {
   
            c.push_back(i);
        }
    }
}

最后是查找ISBN的函数,ISBN肯定是唯一的
所以这种检索方式是最准确的
但是为方便后续操作
依旧传两个vector

void findBookIsbn(vector<Book>& b, vector<Book>& c) {
   
    cout << "请输入您要查找的书籍ISBN" << endl;
    int ISBN;
    cin >> ISBN;
    for
  • 381
    点赞
  • 1109
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 111
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 111
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Gettler•Main

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

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

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

打赏作者

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

抵扣说明:

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

余额充值