关于#c++#的问题:C++数据结构 二叉树 单链表建一个图书管理系统 删除图书操作有问题

C++数据结构 二叉树 单链表建一个图书管理系统 删除图书操作有问题,怎么也改不出来<<endl;

#include <iostream>
#include<string>
using namespace std;

typedef string ElemType;
typedef int Status;
string anything;

#define TRUE 1;
#define FALSE 0;
#define OK 1;
#define ERROR 0;
#define MAXSIZE 999999;

typedef struct Book {
    string bookID; //书号
    string bookName; //书名
    string writerName; //作者
    int booknumnow; //现库存量
    string biglei; //大类
    string smalllei; //小类
}Book, * Bookk; //书本类型

typedef struct LNode //链表
{
    Book* book;
    struct LNode* next;
}LNode, * LinkList;
typedef struct FiveTNode//每一层有五类 
{
    ElemType data;
    struct FiveTNode* child1, * child2, * child3, * child4, * child5;
    LNode* lnode;
}FiveTNode, * FiveTree;
Status CreateFiveTree(FiveTree& T, FiveTree& A, FiveTree& B, FiveTree& C, FiveTree& D, FiveTree& E)//创建树 
{
    T = new FiveTNode;//生成根结点
    T->data = "图书";
    T->child1 = new FiveTNode;
    T->child2 = new FiveTNode;
    T->child3 = new FiveTNode;
    T->child4 = new FiveTNode;
    T->child5 = new FiveTNode;

    A = T->child1;
    B = T->child2;
    C = T->child3;
    D = T->child4;
    E = T->child5;

    A->data = "文化";
    B->data = "自然科学";
    C->data = "中国名著";
    D->data = "外国名著";
    E->data = "综合类书籍";

    A->child1 = new FiveTNode;
    A->child2 = new FiveTNode;
    A->child3 = new FiveTNode;
    A->child4 = new FiveTNode;
    A->child5 = new FiveTNode;

    A->child1->data = "哲学";
    A->child2->data = "历史";
    A->child3->data = "政治";
    A->child4->data = "国学";
    A->child5->data = "民族";

    B->child1 = new FiveTNode;
    B->child2 = new FiveTNode;
    B->child3 = new FiveTNode;
    B->child4 = new FiveTNode;
    B->child5 = new FiveTNode;

    B->child1->data = "生物";
    B->child2->data = "物种";
    B->child3->data = "地理";
    B->child4->data = "基因";
    B->child5->data = "生命";

    C->child1 = new FiveTNode;
    C->child2 = new FiveTNode;
    C->child3 = new FiveTNode;
    C->child4 = new FiveTNode;
    C->child5 = new FiveTNode;

    C->child1->data = "古代神话";
    C->child2->data = "古代奇幻";
    C->child3->data = "现代小说";
    C->child4->data = "古代小说";
    C->child5->data = "现代散文";

    D->child1 = new FiveTNode;
    D->child2 = new FiveTNode;
    D->child3 = new FiveTNode;
    D->child4 = new FiveTNode;
    D->child5 = new FiveTNode;

    D->child1->data = "古代小说";
    D->child2->data = "现代小说";
    D->child3->data = "现代散文";
    D->child4->data = "古代散文";
    D->child5->data = "童话";

    E->child1 = new FiveTNode;
    E->child2 = new FiveTNode;
    E->child3 = new FiveTNode;
    E->child4 = new FiveTNode;
    E->child5 = new FiveTNode;

    E->child1->data = "交通运输";
    E->child2->data = "工业技术";
    E->child3->data = "航空航天";
    E->child4->data = "环境科学";
    E->child5->data = "安全科学";

    A->child1->lnode = new LNode;
    A->child1->lnode->book = new Book;
    A->child2->lnode = new LNode;
    A->child2->lnode->book = new Book;
    A->child3->lnode = new LNode;
    A->child3->lnode->book = new Book;
    A->child4->lnode = new LNode;
    A->child4->lnode->book = new Book;
    A->child5->lnode = new LNode;
    A->child5->lnode->book = new Book;

    B->child1->lnode = new LNode;
    B->child1->lnode->book = new Book;
    B->child2->lnode = new LNode;
    B->child2->lnode->book = new Book;
    B->child3->lnode = new LNode;
    B->child3->lnode->book = new Book;
    B->child4->lnode = new LNode;
    B->child4->lnode->book = new Book;
    B->child5->lnode = new LNode;
    B->child5->lnode->book = new Book;

    C->child1->lnode = new LNode;
    C->child1->lnode->book = new Book;
    C->child2->lnode = new LNode;
    C->child2->lnode->book = new Book;
    C->child3->lnode = new LNode;
    C->child3->lnode->book = new Book;
    C->child4->lnode = new LNode;
    C->child4->lnode->book = new Book;
    C->child5->lnode = new LNode;
    C->child5->lnode->book = new Book;

    D->child1->lnode = new LNode;
    D->child1->lnode->book = new Book;
    D->child2->lnode = new LNode;
    D->child2->lnode->book = new Book;
    D->child3->lnode = new LNode;
    D->child3->lnode->book = new Book;
    D->child4->lnode = new LNode;
    D->child4->lnode->book = new Book;
    D->child5->lnode = new LNode;
    D->child5->lnode->book = new Book;

    E->child1->lnode = new LNode;
    E->child1->lnode->book = new Book;
    E->child2->lnode = new LNode;
    E->child2->lnode->book = new Book;
    E->child3->lnode = new LNode;
    E->child3->lnode->book = new Book;
    E->child4->lnode = new LNode;
    E->child4->lnode->book = new Book;
    E->child5->lnode = new LNode;
    E->child5->lnode->book = new Book;

    A->child1->lnode->book->bookName = "《哲学起步》";
    A->child1->lnode->book->bookID = "1";
    A->child1->lnode->book->writerName = "邓晓芒";
    A->child1->lnode->book->booknumnow = 11;
    A->child1->lnode->next = NULL;

    A->child2->lnode->book->bookName = "《中国历史文化课》";
    A->child2->lnode->book->bookID = "2";
    A->child2->lnode->book->writerName = "余秋雨";
    A->child2->lnode->book->booknumnow = 11;
    A->child2->lnode->next = NULL;

    A->child3->lnode->book->bookName = "《万古江河》";
    A->child3->lnode->book->bookID = "3";
    A->child3->lnode->book->writerName = "朱卓文";
    A->child3->lnode->book->booknumnow = 23;
    A->child3->lnode->next = NULL;

    A->child4->lnode->book->bookName = "《国学知识大全》";
    A->child4->lnode->book->bookID = "4";
    A->child4->lnode->book->writerName = "吕思勉";
    A->child4->lnode->book->booknumnow = 34;
    A->child4->lnode->next = NULL;

    A->child5->lnode->book->bookName = "《民族文化史》";
    A->child5->lnode->book->bookID = "5";
    A->child5->lnode->book->writerName = "季玉春";
    A->child4->lnode->book->booknumnow = 26;
    A->child5->lnode->next = NULL;

    B->child1->lnode->book->bookName = "《万物简史》";
    B->child1->lnode->book->bookID = "6";
    B->child1->lnode->book->writerName = "达尔文";
    B->child1->lnode->book->booknumnow = 34;
    B->child1->lnode->next = NULL;

    B->child2->lnode->book->bookName = "《物种起源》";
    B->child2->lnode->book->bookID = "7";
    B->child2->lnode->book->writerName = "萨根";
    B->child2->lnode->book->booknumnow = 34;
    B->child2->lnode->next = NULL;

    B->child3->lnode->book->bookName = "《神秘的宇宙》";
    B->child3->lnode->book->bookID = "8";
    B->child3->lnode->book->writerName = "理查德";
    B->child3->lnode->book->booknumnow = 18;
    B->child3->lnode->next = NULL;

    B->child4->lnode->book->bookName = "《自私的基因》";
    B->child4->lnode->book->bookID = "9";
    B->child4->lnode->book->writerName = "吉姆";
    B->child4->lnode->book->booknumnow = 27;
    B->child4->lnode->next = NULL;

    B->child5->lnode->book->bookName = "《神奇的量子力量》";
    B->child5->lnode->book->bookID = "10";
    B->child5->lnode->book->writerName = "萨利";
    B->child5->lnode->book->booknumnow = 27;
    B->child5->lnode->next = NULL;

    C->child1->lnode->book->bookName = "《山海经》";
    C->child1->lnode->book->bookID = "11";
    C->child1->lnode->book->writerName = "邹衍";
    C->child1->lnode->book->booknumnow = 54;
    C->child1->lnode->next = NULL;

    C->child2->lnode->book->bookName = "《西游记》";
    C->child2->lnode->book->bookID = "12";
    C->child2->lnode->book->writerName = "吴承恩";
    C->child2->lnode->book->booknumnow = 32;
    C->child2->lnode->next = NULL;

    C->child3->lnode->book->bookName = "《团圆》";
    C->child3->lnode->book->bookID = "13";
    C->child3->lnode->book->writerName = "张爱玲";
    C->child3->lnode->book->booknumnow = 23;
    C->child3->lnode->next = NULL;

    C->child4->lnode->book->bookName = "《三国演义》";
    C->child4->lnode->book->bookID = "14";
    C->child4->lnode->book->writerName = "罗贯中";
    C->child4->lnode->book->booknumnow = 56;
    C->child4->lnode->next = NULL;

    C->child5->lnode->book->bookName = "《朝花夕拾》";
    C->child5->lnode->book->bookID = "15";
    C->child5->lnode->book->writerName = "鲁迅";
    C->child5->lnode->book->booknumnow = 32;
    C->child5->lnode->next = NULL;

    D->child1->lnode->book->bookName = "《神圣的罗马帝国》";
    D->child1->lnode->book->bookID = "16";
    D->child1->lnode->book->writerName = "新海月";
    D->child1->lnode->book->booknumnow = 24;
    D->child1->lnode->next = NULL;

    D->child2->lnode->book->bookName = "《追风筝的人》";
    D->child2->lnode->book->bookID = "17";
    D->child2->lnode->book->writerName = "卡勒得";
    D->child2->lnode->book->booknumnow = 46;
    D->child2->lnode->next = NULL;

    D->child3->lnode->book->bookName = "《论时机》";
    D->child3->lnode->book->bookID = "18";
    D->child3->lnode->book->writerName = "培根";
    D->child3->lnode->book->booknumnow = 23;
    D->child3->lnode->next = NULL;

    D->child4->lnode->book->bookName = "《诗学》";
    D->child4->lnode->book->bookID = "19";
    D->child4->lnode->book->writerName = "亚里士多德";
    D->child4->lnode->book->booknumnow = 35;
    D->child4->lnode->next = NULL;

    D->child5->lnode->book->bookName = "《安徒生童话》";
    D->child5->lnode->book->bookID = "20";
    D->child5->lnode->book->writerName = "安徒生";
    D->child5->lnode->book->booknumnow = 41;
    D->child5->lnode->next = NULL;

    E->child1->lnode->book->bookName = "《道路交通安全法》";
    E->child1->lnode->book->bookID = "21";
    E->child1->lnode->book->writerName = "郑彩城";
    E->child1->lnode->book->booknumnow = 12;
    E->child1->lnode->next = NULL;

    E->child2->lnode->book->bookName = "《大国重工》";
    E->child2->lnode->book->bookID = "22";
    E->child2->lnode->book->writerName = "吴国忠";
    E->child2->lnode->book->booknumnow = 27;
    E->child2->lnode->next = NULL;

    E->child3->lnode->book->bookName = "《中国航空》";
    E->child3->lnode->book->bookID = "23";
    E->child3->lnode->book->writerName = "沈海军";
    E->child3->lnode->book->booknumnow = 30;
    E->child3->lnode->next = NULL;

    E->child4->lnode->book->bookName = "《环境科学与工程》";
    E->child4->lnode->book->bookID = "24";
    E->child4->lnode->book->writerName = "李思雨";
    E->child4->lnode->book->booknumnow = 21;
    E->child4->lnode->next = NULL;

    E->child5->lnode->book->bookName = "《安全科学你我需知》";
    E->child5->lnode->book->bookID = "25";
    E->child5->lnode->book->writerName = "刘俊";
    E->child5->lnode->book->booknumnow = 58;
    E->child5->lnode->next = NULL;

    return OK;
}

void OutputP(LNode *pa1, LNode *pa2, LNode *pa3, LNode * pa4, LNode * pa5)
{
    //pa1->book = new Book;
    //pa2->book = new Book;
    //pa3->book = new Book;
    //pa4->book = new Book;
    //pa5->book = new Book;
    while (pa1)
    {
        cout << pa1->book->bookID << " " << pa1->book->bookName << " " << pa1->book->writerName << endl;
        pa1 = pa1->next;
    }
    while (pa2)
    {
        cout << pa2->book->bookID << " " << pa2->book->bookName << " " << pa2->book->writerName << endl;
        pa2 = pa2->next;
    }
    while (pa3)
    {
        cout << pa3->book->bookID << " " << pa3->book->bookName << " " << pa3->book->writerName << endl;
        pa3 = pa3->next;
    }
    while (pa4)
    {
        cout << pa4->book->bookID << " " << pa4->book->bookName << " " << pa4->book->writerName << endl;
        pa4 = pa4->next;
    }
    while (pa5)
    {
        cout << pa5->book->bookID << " " << pa5->book->bookName << " " << pa5->book->writerName << endl;
        pa5 = pa5->next;
    }
}

//显示所有图书
void showbook(FiveTree& T, FiveTree& A, FiveTree& B, FiveTree& C, FiveTree& D, FiveTree& E)
{
    system("cls"); //清屏
    LNode *pa1, *pa2, *pa3,* pa4,* pa5,* pb1,* pb2,* pb3, *pb4, *pb5, *pc1, *pc2, *pc3, *pc4, *pc5, *pd1, *pd2, *pd3, *pd4, *pd5, *pe1, *pe2, *pe3, *pe4, *pe5 = new LNode;
    pa1 = A->child1->lnode;
    pa2 = A->child2->lnode;
    pa3 = A->child3->lnode;
    pa4 = A->child4->lnode;
    pa5 = A->child5->lnode;

    pb1 = B->child1->lnode;
    pb2 = B->child2->lnode;
    pb3 = B->child3->lnode;
    pb4 = B->child4->lnode;
    pb5 = B->child5->lnode;

    pc1 = C->child1->lnode;
    pc2 = C->child2->lnode;
    pc3 = C->child3->lnode;
    pc4 = C->child4->lnode;
    pc5 = C->child5->lnode;

    pd1 = D->child1->lnode;
    pd2 = D->child2->lnode;
    pd3 = D->child3->lnode;
    pd4 = D->child4->lnode;
    pd5 = D->child5->lnode;

    pe1 = E->child1->lnode;
    pe2 = E->child2->lnode;
    pe3 = E->child3->lnode;
    pe4 = E->child4->lnode;
    pe5 = E->child5->lnode;
    cout << " ***************************************" << endl;
    OutputP(pa1, pa2, pa3, pa4, pa5);
    OutputP(pb1, pb2, pb3, pb4, pb5);
    OutputP(pc1, pc2, pc3, pc4, pc5);
    OutputP(pd1, pd2, pd3, pd4, pd5);
    OutputP(pe1, pe2, pe3, pe4, pe5);
    cout << " ***************************************" << endl;
    cout << "输入任意字符返回!" << endl;
    cin >> anything;
    return;
}

void delete_(LNode* p, string book_delete_name)
{
    while (p->next)
    {
        if (p->next->book->bookName == book_delete_name)
        {
            cout << "删除的具体信息如下" << endl;
            cout << "ID:" << p->next->book->bookID << "书名: " << p->next->book->bookName << "作者: " << p->next->book->writerName << endl;
            p->next = p->next->next;
            delete (p->next);
            cout << "删除成功" << endl;
        }
        p = p->next;
    }
}
void delete_findID(FiveTree& T, FiveTree& A, FiveTree& B, FiveTree& C, FiveTree& D, FiveTree& E, string book_delete_name)//查找ID
{
    string book_delete_ID;
    LNode* pa1, * pa2, * pa3, * pa4, * pa5, * pb1, * pb2, * pb3, * pb4, * pb5, * pc1, * pc2, * pc3, * pc4, * pc5, * pd1, * pd2, * pd3, * pd4, * pd5, * pe1, * pe2, * pe3, * pe4, * pe5 = new LNode;
    pa1 = A->child1->lnode;
    pa2 = A->child2->lnode;
    pa3 = A->child3->lnode;
    pa4 = A->child4->lnode;
    pa5 = A->child5->lnode;

    pb1 = B->child1->lnode;
    pb2 = B->child2->lnode;
    pb3 = B->child3->lnode;
    pb4 = B->child4->lnode;
    pb5 = B->child5->lnode;

    pc1 = C->child1->lnode;
    pc2 = C->child2->lnode;
    pc3 = C->child3->lnode;
    pc4 = C->child4->lnode;
    pc5 = C->child5->lnode;

    pd1 = D->child1->lnode;
    pd2 = D->child2->lnode;
    pd3 = D->child3->lnode;
    pd4 = D->child4->lnode;
    pd5 = D->child5->lnode;

    pe1 = E->child1->lnode;
    pe2 = E->child2->lnode;
    pe3 = E->child3->lnode;
    pe4 = E->child4->lnode;
    pe5 = E->child5->lnode;

    delete_(pa1, book_delete_name);
    delete_(pa2, book_delete_name);
    delete_(pa3, book_delete_name);
    delete_(pa4, book_delete_name);
    delete_(pa5, book_delete_name);
    delete_(pb1, book_delete_name);
    delete_(pb2, book_delete_name);
    delete_(pb3, book_delete_name);
    delete_(pb4, book_delete_name);
    delete_(pb5, book_delete_name);
    delete_(pc1, book_delete_name);
    delete_(pc2, book_delete_name);
    delete_(pc3, book_delete_name);
    delete_(pc4, book_delete_name);
    delete_(pc5, book_delete_name);
    delete_(pd1, book_delete_name);
    delete_(pd2, book_delete_name);
    delete_(pd3, book_delete_name);
    delete_(pd4, book_delete_name);
    delete_(pd5, book_delete_name);
    delete_(pe1, book_delete_name);
    delete_(pe2, book_delete_name);
    delete_(pe3, book_delete_name);
    delete_(pe4, book_delete_name);
    delete_(pe5, book_delete_name);
}
Status ListDelete(FiveTree& T, FiveTree& A, FiveTree& B, FiveTree& C, FiveTree& D, FiveTree& E)//删除
{
    system("cls"); //清屏
    int password;//输入密码验证身份
    cout << "************************************" << endl;
    cout << "*为证明身份,请输入密码:          *" << endl;
    cout << "************************************" << endl;
    cin >> password;
    if (password == 1379)//密码输入正确
    {
        system("cls"); //清屏
        showbook(T, A, B, C, D, E);
        system("cls"); //清屏
        cout << "请输入删除书籍的书名" << endl;
        string book_delete_name;
        cin >> book_delete_name;
        delete_findID(T, A, B, C, D, E, book_delete_name);
    }
    else
    {
        //输入了其他的字符
        system("cls"); //清屏
        cout << " ***************************************" << endl;
        cout << "密码错误!请返回!若非管理员请勿操作此功能!" << endl;
        cout << " ***************************************" << endl;
    }
    return OK;
}


int main()
{
    FiveTree T, A, B, C, D, E;
    CreateFiveTree(T, A, B, C, D, E);
    cout << "请在显示的菜单里复制书名!" << endl;
    showbook(T, A, B,C,D,E);
    ListDelete(T,A,B,C,D,E);
    showbook(T, A, B, C, D, E);
}




```c++
Status DeleteBook(FiveTree T, string biglei, string smalllei, string bookName) {
    FiveTree p = T;
    while (p != NULL) {
        if (p->data == biglei) {
            FiveTree q = p->child1;
            while (q != NULL) {
                if (q->data == smalllei) {
                    LNode* r = q->lnode;
                    LNode* pre = NULL;
                    while (r != NULL) {
                        if (r->book->bookName == bookName) {
                            if (pre == NULL) {
                                q->lnode = r->next;
                            } else {
                                pre->next = r->next;
                            }
                            delete r->book;
                            delete r;
                            return OK;
                        }
                        pre = r;
                        r = r->next;
                    }
                    cout << "Book not found." << endl;
                    return ERROR;
                }
                q = q->child5;
            }
            cout << "Small category not found." << endl;
            return ERROR;
        }
        p = p->child5;
    }
    cout << "Big category not found." << endl;
    return ERROR;
}


```

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7774020
  • 这篇博客也不错, 你可以看下C++数据结构与算法笔记之实验七 二叉树的链式存储结构、性质
  • 除此之外, 这篇博客: 数据结构 C++实现 基于不同策略的英文单词的词频统计和检索系统(糅合版)中的 二、设计内容 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 一篇英文文章存储在一个文本文件中,然后分别基于线性表、二叉排序树和哈希表不同的存储结构,完成单词词频的统计和单词的检索功能。同时计算不同检索策略下的平均查找长度ASL,通过比较ASL的大小,对不同检索策略的时间性能做出相应的比较分析(比较分析要写在实习报告中的“收获和体会”中)。

    1. 读取一篇包括标点符号的英文文章(InFile.txt),假设文件中单词的个数最多不超过5000个。从文件中读取单词,过滤掉所有的标点。
    2. 分别利用线性表(包括基于顺序表的顺序查找、基于链表的顺序查找、基于顺序表的折半查找)、二叉排序树和哈希表(包括基于开放地址法的哈希查找、基于链地址法的哈希查找)总计6种不同的检索策略构建单词的存储结构。
    3. 不论采取哪种检索策略,完成功能均相同。
      (1)词频统计
      当读取一个单词后,若该单词还未出现,则在适当的位置上添加该单词,将其词频计为1;若该单词已经出现过,则将其词频增加1。统计结束后,将所有单词及其频率按照词典顺序写入文本文件中。其中,不同的检索策略分别写入6个不同的文件。
      基于顺序表的顺序查找— OutFile1.txt
      基于链表的顺序查找— OutFile2.txt
      折半查找— OutFile3.txt
      基于二叉排序树的查找— OutFile4.txt
      基于开放地址法的哈希查找— OutFile5.txt
      基于链地址法的哈希查找— OutFile6.txt
      注:如果实现方法正确,6个文件的内容应该是一致的。
      (2)单词检索
      输入一个单词,如果查找成功,则输出该单词对应的频率,同时输出查找成功的平均查找长度ASL和输出查找所花费的时间。如果查找失败,则输出“查找失败”的提示。
  • 您还可以看一下 夏曹俊老师的C++ 设计模式原理与实战大全-架构师需备课程课程中的 简单工厂实用工程技术:C++对象动态创建技术与配置化开发小节, 巩固相关知识点