C++实现图书管理系统(文件操作与类)

 更新时间:2022年03月12日 12:14:12   作者:糖醋web排骨  
这篇文章主要为大家详细介绍了C++实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C++实现图书管理系统的具体代码,供大家参考,具体内容如下

(1)定义图书类;

(2)图书信息包括:书名name,价格price,库存num;

(3)可以查询、增加、删除、修改功能;

(4)使用文件保存及读取图书数据;

#include<iostream>
using namespace std;
#include<fstream>
#define filename "booklist.txt"
#include<list>
#include<cstring>
#include<iomanip>
 
class Book    //创建Book类,存放图书信息
{
public:
    Book(string na=" ", int p=0, int n=0)
    {
        name = na;
        num = n;
        price = p;
    }
    void Show()
    {
        cout <<  "书名:" << std::left << setw(20) << name << std::right << setw(6) << "\t价格:" << price << "\t数量:" << num << endl;
    }
    void Set()
    {
        cout << "请输入书名:";
        cin >> name;
        cout << "请输入价格:";
        cin >> price;
        cout << "请输入数量:";
        cin >> num;
    }
    void Addnum()
    {
        int n;
        cout << "请输入归还的数量:";
        cin >> n;
        num += n;
    }
    void Borrownum()
    {
        int n;
        cout << "请输入借出的数量:";
        cin >> n;
        num -= n;
    }
public:
    string name;
    int price;
    int num;
};
 
void menu()
{
    cout << "--------------------------------------欢迎进入图书管理系统--------------------------------------" << endl;
    cout << endl << "0 - 退出系统;" << "1 - 显示库存;" << "2 - 查询图书;" << "3 - 借阅图书;" << "4 - 归还图书;" << "5 - 增加图书;" << "6 - 删除图书;" << endl;
}
 
class Booklist    //创建BookList类,数据成员有Book还有图书数量
{
public:
    void save()    //新建图书的话保存数据,用app方式打开文件
    {
        ofstream fout(filename, ios::app);
        list<Book>::iterator it = BList.begin();
        for (int i = 0; i < num-1; i++)    //偏移迭代器,指向新加入的Book并写入文件
        {
            it++;
        }
        for (; it != BList.end(); it++)
        {
            fout << (*it).name << ' ' << (*it).price << ' ' << (*it).num << '\n';
        }
        fout.close();
    }
    void resave()
    {
        ofstream fout(filename, ios::out);    //重新写入数据,因为删除了某个元素
        if (fout.is_open())
        {
            for (list<Book>::iterator it = BList.begin(); it != BList.end(); it++)
            {
                fout << (*it).name << ' ' << (*it).price << ' ' << (*it).num << '\n';
            }
        }
        fout.close();
    }
    void Show()
    {
        for (list<Book>::iterator it = BList.begin(); it != BList.end(); it++)
        {
            (*it).Show();
        }
    }
    void adddata()    //添加数据
    {
        Book B;
        B.Set();
        BList.push_back(B);
        num++;
    }
    void start()    //程序一开始读取文件里的数据
    {
        string na;
        int n;
        int p;
        ifstream fin(filename, ios::in);
        if (fin.is_open())
        {
            while (fin >> na >> p >> n)
            {
                Book B(na, p, n);
                BList.push_back(B);
                num++;
            }
        }
        fin.close();
    }
    void increase()
    {
        cout << "请输入书名:" << endl;
        string n;
        cin >> n;
        for (list<Book>::iterator it = BList.begin(); it != BList.end(); it++)
        {
            if ((*it).name == n)
                (*it).Addnum();
        }
        resave();
    }
    void decrease()
    {
        cout << "请输入书名:" << endl;
        string n;
        cin >> n;
        for (list<Book>::iterator it = BList.begin(); it != BList.end(); it++)
        {
            if ((*it).name == n)
                (*it).Borrownum();
        }
        resave();
    }
    void FindBook()
    {
        string name;
        cin >> name;
        for (list<Book>::iterator it = BList.begin(); it != BList.end(); it++)    //遍历整个list,所以符合关键字的都会被找到
        {
            int index = (*it).name.find(name);    //如果没找到返回值是一个很大的数
            if (index < (*it).name.length())
                (*it).Show();
        }
    }
    void DeleteBook()
    {
        string name;
        cout << "请输入书名:";
        cin >> name;
        int i = 0;
        for (list<Book>::iterator it = BList.begin(); it != BList.end();it++)
        {
            if ((*it).name == name)
                break;
            ++i;
        }
        list<Book>::iterator it = BList.begin();
        advance(it, i);
        BList.erase(it);
        --num;
        resave();
    }
public:
    list<Book>BList;
    int num = 0;
};
 
int main()
{
    Booklist B1;
    B1.start();
    while (1)
    {
        menu();
        int key;
        cout << "请输入要进行的操作:";
        cin >> key;
        switch (key)
        {
        case 0:
            return 0;
            break;
        case 1:
            B1.Show();
            break;
        case 2:
            B1.FindBook();
            break;
        case 3:
            B1.decrease();
            break;
        case 4:
            B1.increase();
            break;
        case 5:
        {
            B1.adddata();
            B1.save();
            break;
        }
        case 6:
            B1.DeleteBook();
            break;
        }
 
    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • VC++实现的OpenGL线性渐变色绘制操作示例

    VC++实现的OpenGL线性渐变色绘制操作示例

    这篇文章主要介绍了VC++实现的OpenGL线性渐变色绘制操作,结合实例形式分析了VC++基于OpenGL进行图形绘制的相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • 解读C++编程的相关文件操作

    解读C++编程的相关文件操作

    这篇文章主要介绍了解读C++编程的相关文件操作,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • Qt中PaintEvent绘制实时波形图的实现示例

    Qt中PaintEvent绘制实时波形图的实现示例

    本文主要介绍了Qt中PaintEvent绘制实时波形图的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C++的多态与虚函数你了解吗

    C++的多态与虚函数你了解吗

    这篇文章主要为大家详细介绍了C++多态与虚函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 关于STL中list容器的一些总结

    关于STL中list容器的一些总结

    list就是数据结构中的双向链表(根据sgi stl源代码),因此它的内存空间是不连续的,通过指针来进行数据的访问,这个特点使得它的随即存取变的非常没有效率,因此它没有提供[]操作符的重载
    2013-09-09
  • 简单总结C++中的修饰符类型

    简单总结C++中的修饰符类型

    这篇文章主要介绍了C++中的修饰符类型总结,是C++入门学习中的基础知识,需要的朋友可以参考下
    2016-05-05
  • C++实现LeetCode(109.将有序链表转为二叉搜索树)

    C++实现LeetCode(109.将有序链表转为二叉搜索树)

    这篇文章主要介绍了C++实现LeetCode(109.将有序链表转为二叉搜索树),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C中的volatile使用方法

    C中的volatile使用方法

    volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错
    2013-02-02
  • 提高C++程序运行效率的10个简单方法

    提高C++程序运行效率的10个简单方法

    这篇文章主要介绍了提高C++程序运行效率的10个简单方法,包括了循环、变量、继承等等应用的技巧,非常具有实用价值,需要的朋友可以参考下
    2014-09-09
  • C++实现LeetCode(202.快乐数)

    C++实现LeetCode(202.快乐数)

    这篇文章主要介绍了C++实现LeetCode(202.快乐数),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论