顺序、链式结构的个人书籍管理系统(C++)

仅供课外学习使用,任何个人与机构不得利用此文章进行任何形式的作弊。

因上一作浏览量激增,不胜惶恐。故上传新版,恳请各路大神赐教。

个人书籍管理系统的编写、制作与实现(C语言)

github快速下载本项目:BFU-CS_CourseDesign/BookManagementSystem/C++ at main · CCCP-lus/BFU-CS_CourseDesign (github.com) 

项目要求

设计一个图书管理系统,每本图书包括三部分信息:no、name、price,完成以下功能:
(1)图书输入:从键盘上输入n,然后输入n本图书的信息;
(2)图书输出:将输入的n本图书信息逐行输出到屏幕上;
(3)书名查找:根据指定的书名查找相应图书的信息(假设书名没有重复);
(4)价格最高:输出图书价格最高的图书信息(假设最高者唯一);
(5)升序排序:将图书按价格升序排序后输出;
(6)逆序存放:将图书逆序存放并输出。
要求:借助while 循环和 switch语句实现菜单功能选项,6个功能对应6个选项,同时增加一个退出功能,这样总计7个功能选项,用户可以通过选择 1-7 运行相应的功能。

顺序结构:

#include <bits/stdc++.h>
#include<windows.h>
using namespace std;

#define MAXSIZE 10000

//书籍信息结构体
typedef struct
{
    char no[15];
    char name[50];
    float price;
}Book;

//顺序存储结构类型
typedef struct
{
    Book* elem;
    int length;
}SqList;

SqList L;   //定义变量
bool newb = false;  //重复更新提示

//辅助功能函数
void Load();//读入文件
void Print(Book book);//自定义格式化输出
void Insertionsort();//自定义插入排序
void Menu();//自定义目录函数

//操作函数
void Show();//图书浏览
void Sum();//图书统计
void Insert();//图书插入
void Delete();//图书删除
void Search();//图书查找
void Renew();//价格更新
void Sort();//价格排序
void Inverse();//逆序存储

//读入文件
void Load()
{
    ifstream inFile("book.txt", ios::in);
    if (!inFile)
    {
        cout << "打开文件失败,请检查文件路径后重试" << endl;
        system("pause");
        return;
    }
    string line;
    getline(inFile, line);  //读入并抛弃标题
    getline(inFile, line);  //读入并抛弃表头
    while (getline(inFile, line))   //文件读入到系统
    {
        string str;
        istringstream sin(line);
        Book bk;
        getline(sin, str, '\t');
        strcpy_s(bk.no, str.c_str());
        getline(sin, str, '\t');
        strcpy_s(bk.name, str.c_str());
        getline(sin, str, '\t');
        bk.price = stof(str);
        L.elem[L.length] = bk;
        L.length++;
        if (L.length == MAXSIZE)    //防止内存溢出
        {
            cout << "因空间不足,操作终止!" << endl;
            break;
        }
    }
    cout << "读取完成!" << endl;
    inFile.close();
}

//自定义格式化输出
void Print(Book book)
{
    cout << left << setw(15) << book.no << "\t";
    cout << left << setw(50) << book.name << "\t";
    cout << left << book.price << endl;
}

//自定义插入排序(价格升序)
void Insertionsort()
{
    int i, j;
    Book bk;
    for (i = 1; i < L.length; i++)
    {
        bk = L.elem[i];
        j = i - 1;
        while ((j >= 0) && (L.elem[j].price > bk.price))
        {
            L.elem[j + 1] = L.elem[j];
            j--;
        }
        L.elem[j + 1] = bk;
    }
}

//自定义目录函数(参照C大作业格式)
void Menu()
{
    printf("*************欢迎使用个人书籍管理系统************\n");
    printf("-------------------------------------------------\n");
    printf("-------------------1.图书浏览--------------------\n\n");
    printf("-------------------2.图书统计--------------------\n\n");
    printf("-------------------3.图书插入--------------------\n\n");
    printf("-------------------4.图书删除--------------------\n\n");
    printf("-------------------5.图书查找--------------------\n\n");
    printf("-------------------6.价格更新--------------------\n\n");
    printf("-------------------7.价格排序--------------------\n\n");
    printf("-------------------8.逆序储存--------------------\n\n");
    printf("-------------------0.退出系统--------------------\n");
    printf("-------------------------------------------------\n");
    printf("********************言锡制作*********************\n\n");
}

//操作函数通过书籍数量是否为零判定表是否非空

//1.图书浏览
void Show()
{
    cout << "1->图书浏览:" << endl;
    //两次判定,防止多次读入造成信息重复
    if (L.length == 0)
    {
        cout << "正在为您录入书籍信息..." << endl;
        Load();
    }
    if (L.length == 0)
    {
        cout << "未检索到文件信息,请检查文件路径后重试" << endl;
        system("pause");
    }
    else
    {
        cout << "系统已读入以下书籍信息:" << endl;
        Sleep(1000);
        for (int i = 0; i < L.length; i++)
            Print(L.elem[i]);
        system("pause");
    }
}

//图书统计
void Sum()
{
    cout << "2->图书统计:" << endl;
    cout << "目前共录入" << L.length << "本书籍,统计完毕!" << endl;
    system("pause");
}

//图书插入
void Insert()
{
    cout << "3->图书插入:" << endl;
    if (L.length == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        cout << "请输入要插入的位置:";
        int x; cin >> x;
        if (x <= 0 || x > L.length + 1)
        {
            cout << "不合法的数据!" << endl;
        }
        else if (L.length == MAXSIZE)
        {
            cout << "当前存储空间已满!" << endl;
        }
        else
        {
            Book bk;
            cout << "请输入要插入图书的信息:" << endl;
            cout << "请按顺序输入ISBN,书名,价格,以空格隔开,信息中空格请用下划线_代替:" << endl;
            cin >> bk.no >> bk.name >> bk.price;
            for (int i = 0; i < L.length; i++)
                if (bk.no == L.elem[i].no && bk.name == L.elem[i].name && bk.price == L.elem[i].price)
                {//重复信息判定
                    cout << "该图书已存在!" << endl;
                    return;
                }
            for (int i = L.length - 1; i >= x - 1; i--)
                L.elem[i + 1] = L.elem[i];
            L.length++;
            L.elem[x - 1] = bk;
            cout << "插入完毕!" << endl;

            remove("book.txt");
            ofstream outFile("book.txt", ios::out);
            if (!outFile)
            {
                cout << "读取文件失败,请检查路径是否正确!" << endl;
                exit(1);
            }
            outFile << "北京林业大学图书馆计算机类图书采购列表" << endl;
            outFile << "ISBN	                  书名	                定价" << endl;
            for (int i = 0; i < L.length; i++)
            {
                outFile << L.elem[i].no << "\t";
                outFile << L.elem[i].name << "\t";
                outFile << L.elem[i].price << endl;
            }
            outFile.close();
            cout << "文件已保存为'book.txt'!" << endl;
        }
        system("pause");
    }
}

//图书删除
void Delete()
{
    if (L.length == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        cout << "请输入要删除的位置:";
        int x; cin >> x;
        if (x <= 0 || x > L.length)
        {
            cout << "不合法的数据!" << endl;
        }
        else
        {
            Print(L.elem[x - 1]);
            cout << "按0确认删除,任意键取消" << endl;
            int y; cin >> y;
            switch (y)
            {
            case 0:
                for (int i = x - 1; i < L.length; i++)
                    L.elem[i] = L.elem[i + 1];
                L.length--;
                cout << "删除完毕!" << endl;
                break;
            default:
                cout << "操作已取消" << endl;
                return ;
                break;
            }

            remove("book.txt");
            ofstream outFile("book.txt", ios::out);
            if (!outFile)
            {
                cout << "读取文件失败,请检查路径是否正确!" << endl;
                exit(1);
            }
            outFile << "北京林业大学图书馆计算机类图书采购列表" << endl;
            outFile << "ISBN	                  书名	                定价" << endl;
            for (int i = 0; i < L.length; i++)
            {
                outFile << L.elem[i].no << "\t";
                outFile << L.elem[i].name << "\t";
                outFile << L.elem[i].price << endl;
            }
            outFile.close();
            cout << "文件已保存为'book.txt'!" << endl;
        }
        system("pause");
    }
}

//图书查找
void Search()
{
    cout << "5->图书查找" << endl;
    if (L.length == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        int o;
        cout << "请选择模式:" << endl;
        cout << "1->按位置    2->按书名    任意键->取消" << endl;
        cin >> o;
        switch (o)
        {
        case 1:
            cout << "请输入目标位置:";
            int ad; cin >> ad;
            if (0 < ad && ad <= L.length)
            {
                cout << "目标位置 " << ad << " 处的书籍信息如下:" << endl;
                Print(L.elem[ad - 1]);
            }
            else
            {
                cout << "不合法的数据!" << endl;
            }
            break;
        case 2:
            cout << "请输入目标书名:";
            char b[50]; cin >> b;
            cout << "找到以下数据:" << endl;
            for (int i = 0; i < L.length; i++)
            {
                if (strcmp(b, L.elem[i].name) == 0)
                {
                    Print(L.elem[i]);
                }
            }
            break;
        default:
            cout << "操作已取消." << endl;
            break;
        }
        system("pause");
    }
}

//价格更新
void Renew()
{
    cout << "6->价格更新" << endl;
    if (L.length == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        if (newb == true)   //二次更新判定
        {
            cout << "已经更新过价格!再次更新将导致二次提价!" << endl;
            cout << "按0取消,其他键继续" << endl;
            string c; cin >> c;
            char x = c.at(0);   //防止输入过多
            if (x == '0')
            {
                cout << "已中止操作!" << endl;
                return ;
            }
        }
        for (int i = 0; i < L.length; i++)
        {
            if (L.elem[i].price < 45)
            {
                L.elem[i].price *= (float)1.2;
            }
            else
            {
                L.elem[i].price *= (float)1.1;
            }
        }
        newb = true;
        cout << "更新完成,结果如下:" << endl;
        for (int i = 0; i < L.length; i++)
            Print(L.elem[i]);

        ofstream outFile("book-newprice.txt", ios::out);
        if (!outFile)
        {
            cout << "读取文件失败,请检查路径是否正确!" << endl;
            exit(1);
        }
        outFile << "北京林业大学图书馆计算机类图书采购列表" << endl;
        outFile << "ISBN	                  书名	                定价" << endl;
        for (int i = 0; i < L.length; i++)
        {
            outFile << L.elem[i].no << "\t";
            outFile << L.elem[i].name << "\t";
            outFile << L.elem[i].price << endl;
        }
        outFile.close();
        cout << "文件已保存为'book-newprice.txt'!" << endl;
        system("pause");
    }
}

//价格排序
void Sort()
{
    cout << "7->价格排序" << endl;
    if (L.length == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        Insertionsort();
        cout << "排序完成,结果如下:" << endl;
        for (int i = 0; i < L.length; i++)
            Print(L.elem[i]);
        cout << "共" << L.length << "本" << endl;

        ofstream outFile("book-newsort.txt", ios::out);
        if (!outFile)
        {
            cout << "读取文件失败,请检查路径是否正确!" << endl;
            exit(1);
        }
        outFile << "北京林业大学图书馆计算机类图书采购列表" << endl;
        outFile << "ISBN	                  书名	                定价" << endl;
        for (int i = 0; i < L.length; i++)
        {
            outFile << L.elem[i].no << "\t";
            outFile << L.elem[i].name << "\t";
            outFile << L.elem[i].price << endl;
        }
        outFile.close();
        cout << "文件已保存为'book-newsort.txt'!" << endl;
        system("pause");
    }
}

//逆序存储
void Inverse()
{
    cout << "8->逆序存储" << endl;
    if (L.length == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        Book bk;
        for (int i = 0; i < (L.length / 2); i++)
        {
            bk = L.elem[i];
            L.elem[i] = L.elem[L.length - 1 - i];
            L.elem[L.length - 1 - i] = bk;
        }
        for (int i = 0; i < L.length; i++)
            Print(L.elem[i]);

        ofstream outFile("book-newinverse.txt", ios::out);
        if (!outFile)
        {
            cout << "读取文件失败,请检查路径是否正确!" << endl;
            exit(1);
        }
        outFile << "北京林业大学图书馆计算机类图书采购列表" << endl;
        outFile << "ISBN	                  书名	                定价" << endl;
        for (int i = 0; i < L.length; i++)
        {
            outFile << L.elem[i].no << "\t";
            outFile << L.elem[i].name << "\t";
            outFile << L.elem[i].price << endl;
        }
        outFile.close();
        cout << "文件已保存为'book-newinverse.txt'!" << endl;
        system("pause");
    }
}

int main()
{
    L.elem = new Book[MAXSIZE];
    if (!L.elem)    //存储分配失败则退出
        exit(OVERFLOW);
    bool flag = true;   //操作循环控制
    bool data = false;  //判定初始数据
    int selection;  //操作选择
    system("color 0a"); //更改配色
    while (flag)    //操作循环
    {
        system("cls");
        Menu();
        cout << "请选择功能:" << endl;
        cin >> selection;
        system("cls");
        switch (selection)
        {
        case 1:
            Show();
            break;
        case 2:
            Sum();
            break;
        case 3:
            Insert();
            break;
        case 4:
            Delete();
            break;
        case 5:
            Search();
            break;
        case 6:
            Renew();
            break;
        case 7:
            Sort();
            break;
        case 8:
            Inverse();
            break;
        case 0:
            cout << "0->退出系统:" << endl;
            flag = false;
            break;
        default:
            cout << "无效数据,正在请求跳回:" << endl;
            system("pause");
            break;
        }
    }
    delete[] L.elem;
    cout << "系统已正常退出!文件自动保存!";
    return 0;
}

链式结构:

#include <bits/stdc++.h>
#include<windows.h>
using namespace std;

#define MAXSIZE 120

typedef struct
{
    char no[15];
    char name[50];
    float price;
}Book;

typedef struct LNode
{
    Book data;
    struct LNode* next;
}LNode, * LinkList;

//辅助功能函数
void Load(LinkList head, int& sum);//读入文件
void Print(Book book);//自定义格式化输出
void BubbleSort(LinkList head, const int& sum);//自定义冒泡排序
void Menu();//自定义目录函数

//操作函数
void Show(LinkList head, int& sum);//图书浏览
void Sum(const int& sum);//图书统计
void Insert(LinkList head, int& sum);//图书插入
void Delete(LinkList head, int& sum);//图书删除
void Search(LinkList head, const int& sum);//图书查找
void Renew(LinkList head, const int& sum);//价格更新
void Sort(LinkList head, const int& sum);//价格排序
void Inverse(LinkList head, const int& sum);//逆序存储

//读入文件
void Load(LinkList head, int& sum)
{
    ifstream inFile("book.txt", ios::in);
    if (!inFile)
    {
        cout << "打开文件失败,请检查文件路径后重试" << endl;
        system("pause");
        return;
    }
    LNode* temp = head; //初始化中间变量
    string line;
    getline(inFile, line);
    getline(inFile, line);  //读入并抛弃标题、表头
    while (getline(inFile, line))
    {
        string str;
        istringstream sin(line);
        Book bk;
        getline(sin, str, '\t');
        strcpy_s(bk.no, str.c_str());
        getline(sin, str, '\t');
        strcpy_s(bk.name, str.c_str());
        getline(sin, str, '\t');
        bk.price = stof(str);

        LNode* t = (LNode*)malloc(sizeof(LNode));   //新建节点
        if (t == NULL)
        {
            cout << "出错!" << endl;
            exit(0);
        }
        t->data = bk;
        t->next = NULL;

        temp->next = t;
        temp = temp->next;
        sum++;
    }
    cout << "读取成功!" << endl;
    inFile.close();
}

//自定义格式化输出
void Print(Book book)
{
    cout << left << setw(15) << book.no << "\t";
    cout << left << setw(50) << book.name << "\t";
    cout << left << book.price << endl;
}

//自定义冒泡排序
void BubbleSort(LinkList head, const int& sum)
{
    if (!head || !head->next) 
        return;
    for (int i = 0; i < sum; ++i) 
    {
        LNode* pre = head->next;
        LNode* cur = head->next->next;
        bool flag = 0;
        for (int j = 0; j < sum - i - 1; ++j) 
        {
            if (cur != NULL && pre->data.price > cur->data.price) 
            {
                Book bk;
                bk = pre->data;
                pre->data = cur->data;
                cur->data = bk;
                flag = 1;
            }
            if (pre == NULL)
            {
                cout << "出错!" << endl;
                exit(0);
            }
            pre = pre->next;
            if (cur == NULL)
            {
                cout << "出错!" << endl;
                exit(0);
            }
            cur = cur->next;
        }
        if (!flag)   break;
    }
}

//自定义目录函数
void Menu()
{
    printf("*************欢迎使用个人书籍管理系统************\n");
    printf("-------------------------------------------------\n");
    printf("-------------------1.图书浏览--------------------\n\n");
    printf("-------------------2.图书统计--------------------\n\n");
    printf("-------------------3.图书插入--------------------\n\n");
    printf("-------------------4.图书删除--------------------\n\n");
    printf("-------------------5.图书查找--------------------\n\n");
    printf("-------------------6.价格更新--------------------\n\n");
    printf("-------------------7.价格排序--------------------\n\n");
    printf("-------------------8.逆序储存--------------------\n\n");
    printf("-------------------0.退出系统--------------------\n");
    printf("-------------------------------------------------\n");
    printf("********************言锡制作*********************\n\n");
}

//图书浏览
void Show(LinkList head, int& sum)
{
    cout << "1->图书浏览:" << endl;
    //为避免文件运行时二次操作重复读入,需额外增加一次判定
    if (sum == 0)
    {
        cout << "正在为您录入书籍信息..." << endl;
        Load(head, sum);
    }
    if (sum == 0)
    {
        cout << "未检索到文件信息,请检查文件路径后重试" << endl;
        system("pause");
    }
    else
    {
        cout << "系统已读入以下书籍信息:" << endl;
        LNode* t = head->next;
        while (t != NULL)
        {
            Print(t->data);
            t = t->next;
        }
        system("pause");
    }
}

//图书统计
void Sum(const int& sum)
{
    cout << "2->图书统计:" << endl;
    cout << "目前共录入" << sum << "本书籍,统计完毕!" << endl;
    system("pause");
}

//图书插入
void Insert(LinkList head, int& sum)
{
    cout << "3->图书插入:" << endl;
    if (sum == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        LNode* temp = head->next;
        cout << "请输入要插入的位置:";
        int x; cin >> x;
        if (x <= 0 || x > sum + 1)
        {
            cout << "不合法的数据!" << endl;
        }
        else
        {
            Book bk;
            cout << "请输入要插入图书的信息:" << endl;
            cout << "请按顺序输入ISBN,书名,价格,以空格隔开:" << endl;
            cin >> bk.no >> bk.name >> bk.price;
            while (temp->next != NULL)
            {
                if (temp->data.no == bk.no && temp->data.name == bk.name && temp->data.price == bk.price)
                {
                    cout << "该图书已存在!" << endl;
                    return;
                }
                temp = temp->next;
            }
            LNode* t = (LNode*)malloc(sizeof(LNode));   //新建节点
            if (t == NULL)
            {
                cout << "出错!" << endl;
                exit(0);
            }
            t->data = bk;
            t->next = NULL;
            temp = head;
            for (int i = 0; i < x; i++)
            {
                if (i == x - 1)
                {
                    t->next = temp->next;
                    temp->next = t;
                }
                if (temp == NULL)
                {
                    cout << "出错!" << endl;
                    exit(0);
                }
                temp = temp->next;
            }
            sum++;
            cout << "插入完毕!" << endl;
        }

        remove("book.txt");
        ofstream outFile("book.txt", ios::out);
        if (!outFile)
        {
            cout << "读取文件失败,请检查路径是否正确!" << endl;
            exit(1);
        }
        outFile << "北京林业大学图书馆计算机类图书采购列表" << endl;
        outFile << "ISBN	                  书名	                定价" << endl;
        temp = head->next;
        while (temp != NULL)
        {
            outFile << temp->data.no << "\t";
            outFile << temp->data.name << "\t";
            outFile << temp->data.price << endl;
            temp = temp->next;
        }
        outFile.close();
        cout << "文件已保存为'book.txt'!" << endl;
    }
    system("pause");
}

//图书删除
void Delete(LinkList head, int& sum)
{
    cout << "4->图书删除:" << endl;
    if (sum == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        LNode* temp = head->next;
        cout << "请输入要删除的位置:";
        int x; cin >> x;
        if (x < 0 || x > sum)
        {
            cout << "不合法的数据!" << endl;
        }
        else
        {
            LNode* last = head;
            for (int i = 0; i < x; i++)
            {
                if (i == x - 1)
                    Print(temp->data);
                else
                {
                    last = temp;
                    temp = temp->next;
                }
            }
            cout << "按0确认删除,任意键取消" << endl;
            int y; cin >> y;
            LNode* t = temp->next;
            switch (y)
            {
            case 0:
                last->next = t;
                sum--;
                cout << "删除完毕!" << endl;
                break;
            default:
                cout << "操作已取消" << endl;
                break;
            }

            remove("book.txt");
            ofstream outFile("book.txt", ios::out);
            if (!outFile)
            {
                cout << "读取文件失败,请检查路径是否正确!" << endl;
                exit(1);
            }
            outFile << "北京林业大学图书馆计算机类图书采购列表" << endl;
            outFile << "ISBN	                  书名	                定价" << endl;
            temp = head->next;
            while (temp != NULL)
            {
                outFile << temp->data.no << "\t";
                outFile << temp->data.name << "\t";
                outFile << temp->data.price << endl;
                temp = temp->next;
            }
            outFile.close();
            cout << "文件已保存为'book.txt'!" << endl;
        }
        system("pause");
    }
}

//图书查找
void Search(LinkList head, const int& sum)
{
    cout << "5->图书查找" << endl;
    if (sum == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        int o;
        cout << "请选择模式:" << endl;
        cout << "1->按位置 2->按书名" << endl;
        cin >> o;
        LNode* temp = head->next;
        switch (o)
        {
        case 1:
            cout << "请输入目标位置:";
            int ad; cin >> ad;
            if (0 < ad && ad <= sum)
            {
                cout << "目标位置的书籍信息如下:" << endl;
                for (int i = 0; i < ad; i++)
                {
                    if (i == ad - 1)
                        Print(temp->data);
                    else
                        temp = temp->next;
                }
            }
            else
            {
                cout << "不合法的数据!" << endl;
            }
            break;
        case 2:
            cout << "请输入目标书名:";
            char b[50]; cin >> b;
            cout << "找到以下数据:" << endl;
            while (temp->next != NULL)
            {
                if (strcmp(b, temp->data.name) == 0)
                {
                    Print(temp->data);
                    break;
                }
                else
                    temp = temp->next;
            }
            break;
        default:
            cout << "不合法的数据!" << endl;
            break;
        }
        system("pause");
    }
}

//价格更新
void Renew(LinkList head, const int& sum)
{
    cout << "6->价格更新" << endl;
    if (sum == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        LNode* temp = head->next;
        for (int i = 0; i < sum; i++)
        {
            if (temp->data.price < 45)
            {
                temp->data.price *= (float)1.2;
            }
            else
            {
                temp->data.price *= (float)1.1;
            }
            temp = temp->next;
        }
        cout << "更新完成,结果如下:" << endl;
        temp = head->next;
        for (int i = 0; i < sum; i++)
        {
            Print(temp->data);
            temp = temp->next;
        }
        cout << "共" << sum << "本" << endl;
        temp = head->next;

        ofstream outFile("book-newprice.txt", ios::out);
        if (!outFile)
        {
            cout << "读取文件失败,请检查路径是否正确!" << endl;
            exit(1);
        }
        outFile << "北京林业大学图书馆计算机类图书采购列表" << endl;
        outFile << "ISBN	                  书名	                定价" << endl;
        for (int i = 0; i < sum; i++)
        {
            outFile << temp->data.no << "\t";
            outFile << temp->data.name << "\t";
            outFile << temp->data.price << endl;
            temp = temp->next;
        }
        outFile.close();
        cout << "文件已保存为'book-newprice.txt'!" << endl;
        system("pause");
    }
}

//价格排序
void Sort(LinkList head, const int& sum)
{
    cout << "7->价格排序" << endl;
    if (sum == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        LNode* temp = head->next;
        BubbleSort(head, sum);
        cout << "排序完成,结果如下:" << endl;
        temp = head->next;
        for (int i = 0; i < sum; i++)
        {
            Print(temp->data);
            temp = temp->next;
        }
        cout << "共" << sum << "本" << endl;

        ofstream outFile("book-newsort.txt", ios::out);
        if (!outFile)
        {
            cout << "读取文件失败,请检查路径是否正确!" << endl;
            exit(1);
        }
        outFile << "北京林业大学图书馆计算机类图书采购列表" << endl;
        outFile << "ISBN	                  书名	                定价" << endl;
        temp = head->next;
        for (int i = 0; i < sum; i++)
        {
            outFile << temp->data.no << "\t";
            outFile << temp->data.name << "\t";
            outFile << temp->data.price << endl;
            temp = temp->next;
        }
        outFile.close();
        cout << "文件已保存为'book-newsort.txt'!" << endl;
        system("pause");
    }
}

//逆序存储
void Inverse(LinkList head, const int& sum)
{
    cout << "8->逆序存储" << endl;
    if (sum == 0)
    {
        cout << "未检索到书籍信息,请先输入" << endl;
        system("pause");
    }
    else
    {
        LNode* p1, * p2, * p3, * temp;
        p1 = head;
        p2 = head->next;
        p3 = head->next->next;
        while (p3 != NULL)
        {
            if (p1->next == head)
                p1->next = NULL;    //头结点后继置空
            p2->next = p1;
            p1 = p3->next;  //将23变为21
            temp = p1;
            p1 = p3;
            p3 = temp;  //调整顺序
            temp = p2;
            p2 = p1;
            p1 = temp;
        }
        p2->next = p1;
        head->next = p2;    //头结点指向末元
        cout << "排序完成,结果如下:" << endl;
        temp = head->next;
        for (int i = 0; i < sum; i++)
        {
            Print(temp->data);
            temp = temp->next;
        }
        cout << "共" << sum << "本" << endl;

        ofstream outFile("book-newinverse.txt", ios::out);
        if (!outFile)
        {
            cout << "读取文件失败,请检查路径是否正确!" << endl;
            exit(1);
        }
        outFile << "北京林业大学图书馆计算机类图书采购列表" << endl;
        outFile << "ISBN	                  书名	                定价" << endl;
        temp = head->next;
        for (int i = 0; i < sum; i++)
        {
            outFile << temp->data.no << "\t";
            outFile << temp->data.name << "\t";
            outFile << temp->data.price << endl;
            temp = temp->next;
        }
        outFile.close();
        cout << "文件已保存为'book-newinverse.txt'!" << endl;
        system("pause");
    }
}

int main()
{
    LinkList head = (LNode*)malloc(sizeof(LNode));
    if (head == NULL)
    {
        cout << "初始化失败!" << endl;
        exit(0);
    }
    head->next = NULL;
    cout << "初始化完毕!" << endl;
    Sleep(1000);
    bool flag = true;   //操作循环控制
    int sum = 0;    //书籍数量
    int selection;
    system("color 0a");
    while (flag)
    {
        system("cls");
        Menu();
        cout << "请选择您需要的服务:";
        cin >> selection;
        system("cls");
        switch (selection)
        {
        case 1:
            Show(head, sum);
            break;
        case 2:
            Sum(sum);
            break;
        case 3:
            Insert(head, sum);
            break;
        case 4:
            Delete(head, sum);
            break;
        case 5:
            Search(head, sum);
            break;
        case 6:
            Renew(head, sum);
            break;
        case 7:
            Sort(head, sum);
            break;
        case 8:
            Inverse(head, sum);
            break;
        case 0:
            cout << "0->退出系统:" << endl;
            flag = false;
            break;
        default:
            cout << "无效数据,正在请求跳回:" << endl;
            system("pause");
            break;
        }
    }
    cout << "系统已正常退出!文件自动保存!";
    return 0;
}

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CresCent_Charles

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值