一心向上的Lee 2021-07-13 21:12 采纳率: 50%
浏览 114
已结题

用c语言设计一个图书管理信息系统,输入信息要保存在txt文档之中

设计一个计算机管理系统完成图书管理基本业务,要求如下;

  1. 馆藏图书信息。每种书的登记内容包括书号、书名、著作者、现存量和
    库存量;
  2. 图书查询。对书号查找,并显示所查找图书的所有信息,包括书号、书
    名、著作者、现存量、库存量和借阅者姓名;
  3. 系统主要功能如下:
    ①采编入库:新购一种书确定书号后,登记到图书帐目表中,如果表中已有,
    则将库存量和现存量增加;
    ②读者借阅:若一种书的现存量大于 0,则借出一本,登记借阅者的姓名,
    改变现存量,若一种书的现存量为 0,则提示该书库存不足,读者无法借阅;
    ③读者归还:注销对借阅者的登记,改变该书的现存量。
  • 写回答

1条回答 默认 最新

  • 小P聊技术 2021-07-14 10:39
    关注
    #include<iostream>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<string>
    #include<cmath>
    #include<vector>
    #include<fstream>
    
    using namespace std;
    
    ifstream fin("图书管理系统测试数据2.txt");
    
    typedef struct Book
    {
        string name;
        string bid;
        string writer;
        string date;
        Book *lc, *rc, *parent, *next;
        int now;                               //struct stu;
        int summary;                          //stu *visit;
        int key;
    } B_list, *book;
    
    typedef struct stu
    {
        string name;
        book bl[26];            //存自己借的书
        string sid;
        book first;          //用于访问书结构体的指针
        int booknum;
    
    } S_list, *student;
    
    typedef struct graph_s         //学生查书的图
    {
        S_list sl[26];             //已经创建了26个学生的数组
        int s_num;
        int b_num;
        //book bl[26];                //书本采用两种方式存储,一种树状结构,一种链式结构,链式结构用于查找.
    } g_s_list;
    
    book original;
    void find_index(book h,book hh, g_s_list w);            //先声明一下
    
    void digui_create(book &bo, g_s_list &w)
    {
        string ch;
        cout << "请输入书名(%代表没有这种书)" << endl;
        cin >> ch;
        if (ch == "%")          //输入的时候最好一次输入一个换行,别加空格
        {
            bo = NULL;
        }
        if (bo)
        {
            bo = new Book;
    
            bo->name = ch;
            digui_create(bo->lc, w);
            digui_create(bo->rc, w);
        }
    }
    
    //book hh=bo;              //要把这个指向二叉树的根节点
    
    void insert(book hh,g_s_list w)
    {
        book h;
        int n;
        cout << "请输入要添加的书籍种类数:" << endl;
        cin >> n;
        for (int i = 0; i < n; i++)
        {
            h = new Book;
            cout << "请输入第" << i + 1 << "本书的书名,书号以及库存和key:" << endl;
            cin >> h->name >> h->bid >> h->summary>>h->key;
            h->lc = NULL;
            h->rc = NULL;            //要把左右孩子置空
            find_index(h,hh, w);
        }
    }
    
    book temp;
    int x;
    void find_index(book h,book bo,g_s_list w)                 //用于找插入位置
    {
        if (bo)
        {
            if (h->key < bo->key)
            {
                x = 0;
            }
            if (h->key > bo->key)
            {
                x = 1;
            }
            if (h->key == bo->key)
            {
                x = 2;
            }
            if (x==0/*h->key < bo->key*/)
            {
                temp = bo;
                find_index(h, bo->lc, w);
            }
            //h = temp->lc;
            if (x==1/*h->key >= bo->key*/)
            {
                temp = bo;
                find_index(h, bo->rc, w);
            }
            if (x == 2)
            {
                temp = bo;
                temp->summary += h->summary;
                x = 3;               //要把状态码x置为一个不存在的状态
                return;
            }
            //h = temp->rc;
        }
        else
        {
            if (x == 0)
            {
                temp->lc = h;    //如上
                x = 3;
            }
            else if (x == 1)
            {
                temp->rc = h;    //如上
                x = 3;
            }
            //else
            //{
            //    temp->summary += h->summary;
            //}
        }
    }
    
    void preorder(book bo)
    {
        if (bo)
        {
            cout << "请输入  《" << bo->name << "》  书的书号,作者,key,库存:" << endl;   //先序遍历创建的书的树
            cin >> bo->bid >> bo->writer >> bo->key >> bo->summary;
            preorder(bo->lc);
            preorder(bo->rc);
        }
    }
    void preorder_x(book bo)              //遍历访问插入新书后的书树
    {
        if (bo)
        {
            cout << "书名为:  《" << bo->name << "》 key为:  " << bo->key << "  库存为:  " << bo->summary << endl;
            preorder_x(bo->lc);
            preorder_x(bo->rc);
        }
    }
    
    book find_book;
    book t;
    void find(book bo, string book_id)             //用于找书
    {
        if (bo)
        {
            if (bo&&bo->bid == book_id)
            {
                find_book = bo;
                // tem = bo;
                cout << "书名为:\n" <<"《"<< find_book->name<<"》";
                cout << endl;
                cout << "库存为:\n" << find_book->summary << endl;
                cout << "请输入借入时间:" << endl;
                cin >> find_book->date;
            }
            find(bo->lc, book_id);
            find(bo->rc, book_id);
        }
    }
    
    void create(book bo, g_s_list &w, S_list &s)            //建图
    {
        book t;                              //用于保存下找到的上一本书
        cout << "请输入有几个学生:" << endl;
        cin >> w.s_num;
        w.b_num = 0;
        book q;
        int x = 0;
        string book_id;
        for (int i = 0; i < w.s_num; i++)
        {
            //s=new stu;
            cout << "请输入第" << i + 1 << "个学生的姓名,学号和借书量:" << endl;
            cin >> w.sl[i].name >> w.sl[i].sid >> w.sl[i].booknum;
            q = bo;                         //把q指向创建书本的树的根节点
            cout << "请输入第" << i + 1 << "个学生的第 1 本书的书号:" << endl;
            cin >> book_id;
            //cout << "库存量为:" << find(bo, book_id);
    
            find(bo, book_id);
            w.sl[i].first = find_book;
            t = find_book;                            //保存下来
            w.sl[i].bl[x] = find_book;                   //把第一本书保存下来,便于后面的学生查找自己借的书
            x++;
            cout << endl;
            for (int j = 0; j < w.sl[i].booknum - 1; j++)
            {
                //find_book->next = new Book;
                //find_book = find_book->next;
                cout << "请输入第" << i + 1 << "个学生的第 " << j + 2 << " 本书的书号:" << endl;
                cin >> book_id;
                find(bo, book_id);
                //t->next = find_book;
                w.sl[i].bl[x] = find_book;
                x++;
                //t = find_book;
                cout << endl;
                //cout << "库存量为:" << find(bo, book_id);
            }
            x = 0;
        }
    
    }
    
    void lend(book bo, g_s_list w, S_list s)
    {
        //t = original;                    //t用于遍历自己借的书
        string sq;
        cout << "请输入学号:" << endl;
        cin >> sq;
        for (int i = 0; i < w.s_num; i++)
        {
            t = w.sl[i].bl[i];
            if (sq == w.sl[i].sid)
            {
                cout << "欢迎" << " " << w.sl[i].name << "\n" << " \n" << "你借的书有:\n";
                //w.sl[i].bl[i]->name << " 库存为:" << w.sl[i].bl[i]->summary <<" 借入时间为:"<<w.sl[i].bl[i]->date<< endl;
                //t = t->next;
                for (int j = 0; j < w.sl[i].booknum; j++)
                {
                    //t=t->next;
                    //cout << t->name << " " << "库存为:"<<t->summary<<" 借入时间为:"<<t->date << endl;
                    cout << "《"<<w.sl[i].bl[j]->name << "》 " << "库存为:" << w.sl[i].bl[j]->summary << " 借入时间为:" << w.sl[i].bl[j]->date << endl;
    
                }
    
                break;
            }
            if (i == w.s_num - 1)
                cout << "查无此人" << endl;
        }
    }
    
    int main()
    {
    
        book hwq;
        g_s_list wwq;
        S_list s;
        digui_create(hwq, wwq);
        preorder(hwq);
        insert( hwq, wwq);
        preorder_x(hwq);
        create(hwq, wwq, s);
        lend(hwq, wwq, s);
        system("pause");
        return 0;
    }
    
    
    ![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/419933032626172.png)
    
    
    
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月29日
  • 创建了问题 7月13日

悬赏问题

  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 arbotix没有/cmd_vel话题