C++图书馆管理系统

题目:开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:
(1)图书信息录入功能(图书信息用文件保存)--输入
(2)图书信息浏览功能--输出
(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):
①按书名查询

②按作者名查询

③按照价钱排序

④按出版时间排序

(4)图书信息的删除与修改
扩展功能:可以按照自己的程度进行扩展。

比如:

(1)简单的权限处理

(2)报表打印功能

(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。

(4)模糊查询

(5)综合查询

(6)统计功能 比如统计处某一类别的图书信息 或 筛选出小于指定数量库存的图书信息等等。

代码如下:

#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
struct Books {
    int serial;//编号
    string bookname;//书名
    string author;//作者
    string Press;//出版社
    string time;//出版时间
    int price;//价格
    string borrow;//判断是否被借走
};
//图书信息🆗
struct Library {
    Books book[50];
    int count;
};
//图书馆信息🆗
void Menu()
{
    cout << "-----------------------------" << endl;
    cout << "!  *XXX图书馆管理系统*     !" << endl;
    cout << "!  1.登录书籍               !" << endl;
    cout << "!  2.浏览书籍               !" << endl;
    cout << "!  3.借阅书籍               !" << endl;
    cout << "!  4.归还书籍               !" << endl;
    cout << "!  5.书籍排序               !" << endl;
    cout << "!  6.删除书籍               !" << endl;
    cout << "!  0.退出系统               !" << endl;
    cout << "-----------------------------" << endl;
}
//菜单🆗
void Logbooks(Library *Management)
{
    int year, month, day;
    string time;
    cout << "请输入图书编号:" ;
    cin >> Management->book[Management->count].serial;
    cout << "请输入图书书名:"  ;
    cin >> Management->book[Management->count].bookname;
    cout << "请输入图书作者:"  ;
    cin>>Management->book[Management->count].author;
    cout << "请输入图书出版社:"  ;
    cin >> Management->book[Management->count].Press;
    cout << "请输入图书出版时间(格式:aaaa--bb--cc):" ;
    cin>>Management->book[Management->count].time;
    cout << "请输入图书价格(单位/元):" ;
    cin >> Management->book[Management->count].price;
    cout << "添加成功" << endl;
    system("pause"); system("cls");
    Management->count++;
}
//1.登录书籍🆗
void Browsebooks(Library* Management)
{
    if (Management->count == 0)
    {
        cout << "目前图书馆书籍为空" << endl;
        system("pause"); system("cls");
    }
    else 
    {
        for (int i = 0; i < 50; i++)
        {
            if(Management->book[i].borrow== "该书已被借走")
            {
                cout << "图书编号:" << Management->book[i].serial << "\t";//编号
                cout << "图书书名:" << Management->book[i].bookname << "\t";//书名
                cout << "图书作者:" << Management->book[i].author << "\t";//作者
                cout << "图书出版社:" << Management->book[i].Press << "\t";//出版社
                cout << "图书出版时间:" << Management->book[i].time << "\t";//时间
                cout << "图书价格:" << Management->book[i].price << "\t";//价格
                cout << "注:该书已被借走" << endl;
                if (i + 1 >= Management->count)break;
            }
            else
            {
                cout << "图书编号:" << Management->book[i].serial << "\t";//编号
                cout << "图书书名:" << Management->book[i].bookname << "\t";//书名
                cout << "图书作者:" << Management->book[i].author << "\t";//作者
                cout << "图书出版社:" << Management->book[i].Press << "\t";//出版社
                cout << "图书出版时间:" << Management->book[i].time << "\t";//时间
                cout << "图书价格:" << Management->book[i].price << endl;//价格
                if (i + 1 >= Management->count)break;
            }
        }system("pause"); system("cls");
    }
}
//2.浏览书籍🆗
int Borrow(Library* Management,int t)
{
    if (Management->book[t].borrow == "该书已被借走")
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
//判断该书是否被借走🆗
int Locatebooks(Library* Management, string bookname)
{
    int flag=0;
    for (int i = 0; i < Management->count; i++,flag++)
    {
        if (Management->book[i].bookname == bookname)//寻找书
        {
            if (Borrow(Management, i) == 0)
                break;//该书未被借走的情况,返回书的数组下标
            else
            {
                flag = -1;//该书被借走的情况
                break;
            }
        }
        else
            flag = -3;//图书馆中未发现此书
    }
    return flag;
}
//查找书籍(根据书名)
void Borrowingbooks(Library* Management)
{
    void Filling(int, Library*);
    if (Management->count == 0)
    {
        cout << "图书馆中还未存放书籍" << endl;
    }
    else
    {
        string bookname;
        int t;
        cout << "请输入书名:";
        cin >> bookname;
        t = Locatebooks(Management, bookname);
        if (t >= 0)
        {
            Management->book[t].borrow = "该书已被借走";
            cout << "图书编号:" << Management->book[t].serial << "\t";//编号
            cout << "图书书名:" << Management->book[t].bookname << "\t";//书名
            cout << "图书作者:" << Management->book[t].author << "\t";//作者
            cout << "图书出版社:" << Management->book[t].Press << "\t";//出版社
            cout << "图书出版时间:" << Management->book[t].time << "\t";//时间
            cout << "图书价格:" << Management->book[t].price << endl;//价格
            cout << "书籍借阅成功!" << endl;
        }
        else if (t == -1)
        {
            cout << "该书已被借走" << endl;
        }
        else if (t == -3)
        {
            cout << "图书馆中未发现此书" << endl;
        }
    }system("pause"); system("cls");
}
//3.借阅书籍
int Whether(Library* Management)
{
    for (int i = 0; i < Management->count; i++)
    {
        if (Management->book[i].borrow == "该书已被借走")
            return 1;
        else
            return 0;
    }
}
//判断图书馆是否有被借书🆗
void Returningbooks(Library* Management)
{
    if (Management->count == 0)
    {
        cout << "图书馆中还未存放书籍" << endl;
        system("pause"); system("cls");
    }
    else
    {
        if (Whether(Management) == 0)
        {
            cout << "图书馆未向外借出图书" << endl;
            cout << "本书非本图书馆所有" << endl;;
            int selete;
            cout << "请问您是否愿意将该数捐给凯武图书馆?" << endl;
            cout << "1--愿意" << endl;
            cout << "2--不愿意" << endl;
            cout << "请输入您的选择:";
            cin >> selete;
            if (selete == 1)
            {
                cout << "感谢您的捐赠!!!" << endl;
                cout << "麻烦您输入一下该书的相关信息:" << endl;
                cout << "请输入图书编号:";
                cin >> Management->book[Management->count].serial;
                cout << "请输入图书书名:";
                cin >> Management->book[Management->count].bookname;
                cout << "请输入图书作者:";
                cin >> Management->book[Management->count].author;
                cout << "请输入图书出版社:";
                cin >> Management->book[Management->count].Press;
                cout << "请输入图书出版时间(格式:aaaa--bb--cc):";
                cin >> Management->book[Management->count].time;
                cout << "请输入图书价格(单位/元):";
                cin >> Management->book[Management->count].price;
                cout << "添加成功" << endl;
                Management->count++;
                system("pause"); system("cls");
            }
            else if (selete == 2)
            {
                cout << "你已经被本图书馆列入黑名单" << endl;
                system("pause"); system("cls");
            }
            //隐藏功能
            system("pause"); system("cls");
        }
        else
        {
            string bookname;
            cout << "请输入待归还的书的书名:";
            cin >> bookname;
            int t = Locatebooks(Management, bookname);
            if (t >= 0)
            {
                Management->book[t].borrow = "该书已归还";
            }
            else if (t == -3)
            {
                cout << "图书馆中未发现此书" << endl;
                cout << "本书非本图书馆所有" << endl;;
                int selete;
                cout << "请问您是否愿意将该书捐给凯武图书馆?" << endl;
                cout << "1--愿意" << endl;
                cout << "2--不愿意" << endl;
                cout << "请输入您的选择:";
                cin >> selete;
                if (selete == 1)
                {
                    cout << "感谢您的捐赠!!!" << endl;
                    cout << "麻烦您输入一下该书的相关信息:" << endl;
                    cout << "请输入图书编号:";
                    cin >> Management->book[Management->count].serial;
                    cout << "请输入图书书名:";
                    cin >> Management->book[Management->count].bookname;
                    cout << "请输入图书作者:";
                    cin >> Management->book[Management->count].author;
                    cout << "请输入图书出版社:";
                    cin >> Management->book[Management->count].Press;
                    cout << "请输入图书出版时间(格式:aaaa--bb--cc):";
                    cin >> Management->book[Management->count].time;
                    cout << "请输入图书价格(单位/元):";
                    cin >> Management->book[Management->count].price;
                    cout << "添加成功" << endl;
                    Management->count++;
                    system("pause"); system("cls");
                }
                else if (selete == 2)
                {
                    cout << "你已经被本图书馆列入黑名单" << endl;
                    system("pause"); system("cls");
                }
            }system("pause"); system("cls");
        }
    }
}
//4.归还书籍🆗
void Positionswitch(Books &a, Books &b)
{
    Books temp;
    temp = a;
    a = b;
    b = temp;
}
//位置互换(引用法)🆗
void BookSorting(Library *Management )
{
    if (Management->count == 0)
    {
        cout << "图书馆中无书籍可供排序" << endl;
    }
    else 
    {
        for (int i = 0; i < Management->count ; i++)//排序
        {
            for (int k = 0; k < Management->count; k++)
            {
                if (Management->book[k].serial < Management->book[i].serial)
                    Positionswitch(Management->book[k], Management->book[i]);
            }
        }cout << "书籍已经根据编号由小到大排序成功" << endl;
    }
    system("pause"); system("cls");
}
//5.书籍排序🆗
void Filling(int t, Library* Management)
{
    for (t = t; t < Management->count; t++)
    {
        Management->book[t+1] = Management->book[t];
    }
}
//填充🆗
void Deletebooks(Library* Management)
{
    if (Management->count == 0)
    {
        cout << "无图书可删除" << endl;
        system("pause"); system("cls");
    }
    else
    {
        string bookname;
        cout << "请输入待删除书籍书名:";
        cin >> bookname;
        int t = Locatebooks(Management, bookname);
        if (t >= 0)
        {
            Filling(t, Management);//将位置向前移
            Management->count--;
            cout << "书籍删除成功" << endl;
        }
        else if (t == -1)
        {
            cout << "该书已被借走" << endl;
        }
        else if (t == -3)
        {
            cout << "图书馆中未发现此书" << endl;
        }
        system("pause"); system("cls");
    }
}
//6.删除书籍
int main()
{
    int selete;
    Library Management;
    Management.count = 0;
    do{
        Menu();
        cout << "请输入您的选择:";
        cin >> selete;
        switch (selete)
        {
        case 1://登录书籍
            Logbooks(&Management);
            break;
        case 2://浏览书籍
            Browsebooks(&Management);
            break;
        case 3://借阅书籍 
            Borrowingbooks(&Management);
            break;
        case 4://归还书籍
            Returningbooks(&Management);
            break;
        case 5://书籍排序
            BookSorting(&Management);
            break;
        case 6://删除书籍
            Deletebooks(&Management);
            break;
        case 0://退出系统
        {cout << "欢迎再次使用!";
        return 0;
        break; }
        default:
        {cout << "输入错误,请重新输入!";
        system("pause"); system("cls");
        break; }
        }
    } while (1);
}
//主函数🆗

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,这个问题我可以回答。以下是示例代码: ```c #include <stdio.h> #include <string.h> #define MAX_BOOKS 5 struct book { char name[100]; char publisher[100]; float price; }; int main() { struct book books[MAX_BOOKS]; struct book *ptr_book; int i; // 输入图书信息 for (i = 0; i < MAX_BOOKS; i++) { ptr_book = books + i; printf("请输入第%d本书的信息:\n", i + 1); printf("书名:"); scanf("%s", ptr_book->name); printf("出版社:"); scanf("%s", ptr_book->publisher); printf("价格:"); scanf("%f", &ptr_book->price); } // 查找并修改图书信息 for (i = 0; i < MAX_BOOKS; i++) { ptr_book = books + i; if (strcmp(ptr_book->name, "C language") == 0) { strcpy(ptr_book->publisher, "SUST"); ptr_book->price = 39.6; break; } } // 输出所有图书信息 printf("\n所有图书信息如下:\n"); for (i = 0; i < MAX_BOOKS; i++) { ptr_book = books + i; printf("第%d本书:\n", i + 1); printf("书名:%s\n", ptr_book->name); printf("出版社:%s\n", ptr_book->publisher); printf("价格:%f\n", ptr_book->price); } return 0; } ``` 这个程序定义了一个结构体 `book`,其中包含了三个字段:书名、出版社和价格。然后定义了一个结构体数组 `books`,用于存储所有图书的信息。接下来使用指针 `ptr_book` 指向结构体数组中的每一个元素,依次输入每一本书的信息。输入完成后,使用一个循环遍历整个结构体数组,查找书名为 “C language” 的图书,并修改其出版社和价格信息。最后,再次遍历整个结构体数组,输出所有图书的信息。 需要注意的是,上面的代码中使用了 `strcpy` 函数将字符串拷贝到结构体字段中,这在实际开发中可能会存在安全问题。如果你使用的是 C11 标准及以上的编译器,可以使用 `strcpy_s` 函数代替 `strcpy` 函数,避免安全问题的出现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值