用C++写一个图书信息管理系统

题目介绍

定义图书类,属性有:书名、出版社、ISBN号、作者、库存量、价格等信息和相关的对属性做操作的行为。 主要完成对图书的销售、统计和图书的简单管理。

(1)销售功能。购买书籍时,输入相应的ISBN号,并在书库中查找该书的相关信息。如果有库存量,输入购买的册数,进行相应计算。如果库存量不够,给出提示信息,结束购买。  

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

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

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

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

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

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

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

以下,是此程序的代码

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string>
#include<iomanip>
#define max 200
using namespace std;
class book
{
public:
    string name;
    string pub;
    int isbn;
    string author;
    double price;
    int astore;
    void input();
    void output();
};
book b[max];
static int btop;
void book::input()
{
    cout << "请输入ISBN号" << endl;
    cin >> isbn;
    cout << "请输入书名" << endl;
    cin >> name;
    cout << "请输入出版社" << endl;
    cin >>pub;
    cout << "请输入作者" << endl;
    cin >>author;
    cout << "请输入价格" << endl;
    cin >> price;
    cout << "请输入总库存" << endl;
    cin >> astore;
}
void book::output()
{
    cout << setw(10) << isbn
        << setw(10) << name
        << setw(10) << pub
        << setw(10) << author
        << setw(10) << price
        << setw(10) << astore
        << endl;
}
class manage:public book
{
public:
    int add();
    int search();
    int edit();
    int Delete();
    int sell();
    int sta();
    int save();
    int read();
};

int manage::add()
{
    system("cls");
    book b1;
    int i, n;
    bool isbnExists = false;
    cout << "请输入ISBN号,以校验是否重复" << endl;
    cin >> n;
    for (i = 0; i < btop; i++)
    {
        if (n == b[i].isbn)
        {
            isbnExists = true;
            break;
        }
    }
    if (!isbnExists)
    {
        b1.input();
        btop++;
        b[btop] = b1;
        cin.get();
        return 0;
    }
    else
    {
        cout << "已有此编号,请重新添加"<<endl;
        cin.get();
        return 0;
    }
}

int manage::search()

    system("cls");
    int i,a;
    double c;
    string n;
    bool f = 0;
    cout << "*****欢迎查询图书信息*****" << endl;
    cout << "     1.按书名查询" << endl;
    cout << "     2.按ISBN号查询" << endl;
    cout << "     3.按作者查询" << endl;
    cout << "     4.按出版社查询" << endl;
    cout << "请按照需求,选择您的查询方式(1~4)" << endl;
    cin >> a;
    switch (a)
    {
    case 1:cout << "请输入书名" << endl;
        cin >> n;
        for (i = 0; i < btop; i++)
        {
            if ((b[i].name).compare(n) == 0)
            {
                cout << setw(10) << "ISBN号"
                    << setw(10) << "书名"
                    << setw(10) << "出版社"
                    << setw(10) << "作者"
                    << setw(10) << "价格"
                    << setw(10) << "总库存"
                    << endl;
                b[i].output();
                f = 1;
                cin.get(); 
                break;
            }
        }
        if (f == 0)
        {
            cout << "没有找到该书" << endl;
            cin.get();
            return 0;
        }
        break;
    case 2:cout << "请输入ISBN号" << endl;
        cin >> c;
        for (i = 0; i < btop; i++)
        {
            if (c== b[i].isbn)
            {
                cout << setw(10) << "ISBN号"
                    << setw(10) << "书名"
                    << setw(10) << "出版社"
                    << setw(10) << "作者"
                    << setw(10) << "价格"
                    << setw(10) << "总库存"
                    << endl;
                b[i].output();
                f = 1; 
                cout << "按下enter返回主菜单";
                cout << endl; 
                cin.get(); 
                break;
            }
        }
        if (f == 0)
        {
            cout << "没有找到该书" << endl;
            cin.get();
            return 0;
        }
        break;
    case 3:cout << "请输入作者" << endl;
        cin >> n;
        for (i = 0; i < btop; i++)
        {
            if ((b[i].author).compare(n)==0)
            {
                cout << setw(10) << "ISBN号"
                    << setw(10) << "书名"
                    << setw(10) << "出版社"
                    << setw(10) << "作者"
                    << setw(10) << "价格"
                    << setw(10) << "总库存"
                    << endl;
                b[i].output();
                f = 1; 
                cout << "按下enter返回主菜单";
                cout << endl;
                cin.get();
                 break;
            }
        }
        if (f == 0)
        {
            cout << "没有找到该书" << endl;
            cin.get();
            return 0;
        }
        break;
    case 4:cout << "请输入出版社" << endl;
        cin >> n;
        for (i = 0; i < btop; i++)
        {
            if ((b[i].pub).compare(n)==0)
            {
                cout << setw(10) << "ISBN号"
                    << setw(10) << "书名"
                    << setw(10) << "出版社"
                    << setw(10) << "作者"
                    << setw(10) << "价格"
                    << setw(10) << "总库存"
                    << endl;
                b[i].output();
                f = 1;
                cin.get(); 
                break;
            }
        }
        if (f == 0)
        {
            cout << "没有找到该书" << endl;
            cin.get();
            return 0;
        }
        break;
    default:cout << "请输入正确的数字" << endl;
        cin.get();
        return 0; 
        break;
    }
}
int manage::edit()
{
    system("cls");
    book b1;
    int i, n;
    bool found = false;
    cout << "请输入ISBN号" << endl;
    cin >> n;
    for (i = 0; i < btop; i++)
    {
        if (n == b[i].isbn)
        {
            cout << "开始修改信息" << endl;
            b1.input();
            b[i] = b1;
            cout << "编辑成功" << endl;
            cin.get();
            found = true;
            break;
        }
    }
    if (!found)
    {
        cout << "该编号不存在" << endl;
        cin.get();
        return -1; // 返回-1表示需要跳回主菜单
    }
    return 0;
}

int manage::Delete()
{
    system("cls");
    int i, n;
    cout << "请输入ISBN号" << endl;
    cin >> n;
    bool found = false;
    for (i = 0; i < btop; i++)
    {
        if (n == b[i].isbn)
        {
            found = true;
            break;
        }
    }
    if (!found)
    {
        cout << "该编号不存在" << endl;
        return 0;
    }
    for (i; i < btop - 1; i++)
    {
        b[i] = b[i + 1];
    }
    btop--;
    cout << "删除成功" << endl;

    cin.get();
    return 0;
}


int manage::sell()
{
    system("cls");
    book b1;
    int i, n,a;
    cout << "请输入ISBN号" << endl;
    cin >> n;
    for (i = 0; i < btop; i++)
    {
        if (i == btop)
        {
            cout << "该编号不存在" << endl;

            cin.get();
            return 0;
        }
        if (n == b[i].isbn)
            break;
    }
    b[i].output();
    cout << "请输入你要购买的书本数" << endl;
    cin >> a;
    if (a <= astore)
        cout << "总金额为:" << a * b[i].price << endl;
    if (a > astore)
    {
        cout << "库存不足" << endl;
        cout << "剩余库存为:" << b[i].astore << endl;

        cin.get();
        return 0;
    }
}
int manage::sta()
{
    system("cls");
    book b1;
    int i,a;
    cout << "可按四种类型进行统计,按价格为1,按库存量为2,按作者为3,按出版社为4" << endl;
    cin >> a;
    switch (a)
    {
    case 1:
        // 按价格排序
        for (i = 0; i < btop - 1; i++)
        {
            for (int j = 0; j < btop - 1 - i; j++)
            {
                if (b[j].price < b[j + 1].price)
                {
                    b1 = b[j];
                    b[j] = b[j + 1];
                    b[j + 1] = b1;
                }
            }
        }
        for (i = 0; i < btop - 1; i++)
        {

        }
        break;
    case 2:
        // 按库存量排序
        for (i = 0; i < btop - 1; i++)
        {
            for (int j = 0; j < btop - 1 - i; j++)
            {
                if (b[j].astore < b[j + 1].astore)
                {
                    b1 = b[j];
                    b[j] = b[j + 1];
                    b[j + 1] = b1;
                }
            }
        }
        break;
    case 3:
        // 按作者排序
        for (i = 0; i < btop - 1; i++)
        {
            for (int j = 0; j < btop - 1 - i; j++)
            {
                if (b[j].author > b[j + 1].author)
                {
                    b1 = b[j];
                    b[j] = b[j + 1];
                    b[j + 1] = b1;
                }
            }
        }
        break;
    case 4:
        // 按出版社排序
        for (i = 0; i < btop - 1; i++)
        {
            for (int j = 0; j < btop - 1 - i; j++)
            {
                if (b[j].pub > b[j + 1].pub)
                {
                    b1 = b[j];
                    b[j] = b[j + 1];
                    b[j + 1] = b1;
                }
            }
        }
        break;
    }

    // 输出排序后的图书信息
    cout << setw(10) << "ISBN号"
        << setw(10) << "书名"
        << setw(10) << "出版社"
        << setw(10) << "作者"
        << setw(10) << "价格"
        << setw(10) << "总库存"
        << endl;
    for (i = 0; i < btop; i++)
    {
        b[i].output();
    }

    cin.get();
    return 0;
}

int manage::save()
{
    system("cls");
    int i;
    ofstream outfile; // 向文件中写入
    string filename = "books_data.data"; // 自动生成的文件名
    outfile.open(filename, ios::binary); // 打开文件并设置为二进制模式
    if (!outfile)
    {
        cerr << "无法打开文件" << endl;
        return 0;
    }
    for (i = 0; i < btop; i++)
        outfile.write((char*)&b[i], sizeof(b[i]));

    outfile.close();
    cout << "保存成功" << endl;
}

int manage::read()
{
    system("cls");
    int i;
    ifstream infile; // 从文件读出
    string filename = "books_data.data"; // 自动生成的文件名
    infile.open(filename, ios::binary); // 打开文件并设置为二进制模式
    if (!infile)
    {
        cerr << "无法打开文件" << endl;
        return 0;
    }
    for (i = 0; i < btop; i++)
        infile.read((char*)&b[i], sizeof(b[i]));

    infile.close();
    cout << "读取成功" << endl;
}


int main()
{
    int a;
    manage m;
    do
    { 
        cout << "************************************" << endl;
        cout << "********欢迎使用图书管理系统********" << endl;
        cout << "       1. 添加图书" << endl;
        cout << "        2. 搜索图书" << endl;
        cout << "        3. 编辑图书" << endl;
        cout << "        4. 删除图书" << endl;
        cout << "        5. 销售图书" << endl;
        cout << "        6. 统计图书" << endl;
        cout << "        7. 保存图书信息" << endl;
        cout << "        8. 读取图书信息" << endl;
        cout << "        0. 退出" << endl;
        cout << "************************************" << endl;
        cout << "请输入您的选择: ";
        cin >> a;
        switch (a)
        {
        case 1:
            m.add();
            break;
        case 2:
            m.search();
            break;
        case 3:
            m.edit();
            break;
        case 4:
            m.Delete();
            break;
        case 5:
            m.sell();
            break;
        case 6:
            m.sta();
            break;
        case 7:
            m.save();
            break;
        case 8:
            m.read();
            break;
        case 0:
            cout << "谢谢使用,再见!" << endl;
            break;
        default:
            cout << "无效的选择,请重新输入!" << endl;
            break;
        }
    } while (a != 0);
}

C++中编一个简单的图书管理系统涉及到几个关键部分,包括数据结构、文件操作以及用户界面交互。这里是一个基础的控制台版图书管理系统的简化示例: ```cpp #include <iostream> #include <map> #include <fstream> // 定义图书结构体 struct Book { std::string title; std::string author; int stock; }; class Library { private: std::map<std::string, Book> books; // 使用关联容器存储书籍信息 public: // 添加新书 void addBook(const std::string& title, const std::string& author, int stock) { books[title] = {title, author, stock}; } // 查询书籍库存 bool hasStock(const std::string& title) { return books.find(title) != books.end() && books[title].stock > 0; } // 出借书籍 bool borrowBook(const std::string& title) { if (hasStock(title)) { books[title].stock--; std::cout << "Borrowed: " << title << "\n"; return true; } std::cout << "Sorry, out of stock.\n"; return false; } // 归还书籍并检查库存 bool returnBook(const std::string& title) { if (books.find(title) != books.end()) { books[title].stock++; std::cout << "Returned: " << title << "\n"; return true; } std::cout << "Invalid book to return.\n"; return false; } }; int main() { Library lib; // 示例操作 lib.addBook("The Catcher in the Rye", "J.D. Salinger", 5); lib.borrowBook("The Catcher in the Rye"); lib.returnBook("The Catcher in the Rye"); // 文件持久化(这里仅作演示,实际应用会更复杂) try { std::ofstream file("library.txt"); for (const auto& entry : books) { file << entry.first << ": " << entry.second.title << ", " << entry.second.author << ", " << entry.second.stock << '\n'; } file.close(); } catch (std::exception& e) { std::cerr << "Error writing to file: " << e.what() << '\n'; } return 0; } ``` 这个程序定义了一个`Library`类,包含了添加、查询库存、出借和归还书籍的功能。它还展示了如何将数据保存到磁盘以便持久化。注意这只是一个基础版本,实际应用可能需要更复杂的错误处理、用户输入验证以及图形用户界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值