数据结构实验一_图书馆信息管理系统

一、实现内容

二、实验目标

三、信息的定义以及链表的定义

四、数据的初始化

五、伪代码

六、实现功能

七、源码


一、实现内容

设计并实现一个图书信息管理系统。根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能。 该系统至少包含以下功能:

  1. 根据指定图书个数,逐个输入图书信息;
  2. 逐个显示图书表中所有图书的相关信息;
  3. 能根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置;
  4. 根据指定的待出库的旧图书的位置,将该图书从图书表中删除;
  5. 能统计表中图书个数;
  6. 实现图书信息表的图书去重;
  7. 实现最爱书籍查询,根据书名进行折半查找,要求使用非递归算法实现,成功返回此书籍的书号和价格;
  8. 图书信息表按指定条件进行批量修改;
  9. 利用快速排序按照图书价格降序排序;
  10. 实现最贵图书的查找;

二、实验目标

  1. 了解并掌握数据结构和算法设计的方法,具备初步的独立分析和设计能力
  2. 初步掌握软件开发过程的问题分析分析、系统设计、程序编码和测试等基本方法和技能。
  3. 提高综合运用所学的理论知识和方法,独立分析和解决问题的能力。
  4. 训练用系统的观点和软件开发一般规范进行软件的开发,培养软件工作着所具备的科学工作方法和作风。

三、信息的定义以及链表的定义

//图书信息的定义:
typedef struct {
    char no[8];   //8位书号
    char name[20]; //书名
    int price;     //价格
}Book;
 
//链表的定义:
typedef struct LNode{
     Book   data;       //数据域
     struct LNode  *next;   //指针域
}LNode,*LinkList; 

四、数据的初始化

Book book[50]; //存储初始化图书信息
    bool tag = true; //用于判断是否结束输入
    char ch;  //用于判断是否还输入下一个
    int i = 0,length=0; //length为初始化长度
    cout << "请输入书号,书名和价格(中间以空格符隔开)" << endl;
    while (tag) {  //
        cin >> book[i].no;
        cin >> book[i].name;
        cin >> book[i++].price;
        length++; //图书信息+1
        cout << "是否还输入下一个Y/N" << endl;
        cin >> ch;
        if (ch != 'Y' && ch != 'y')tag = false;
    }

五、伪代码

//类实现功能的操作
class LibraryMS {
 
private:
 
    LNode* first;  //链表头结点
 
public:
 
    //无参默认构造函数构造函数
    LibraryMS(){   
        first = new LNode();    
        first->next = NULL;   //创建头结点
    }
 
    //有参默认构造函数构造函数
    LibraryMS(Book book[], int n); 
 
    //逐个显示图书表中所有图书相关信息
    void bookPrint();  
 
    //能根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置
    void bookInsert(Book book, int n); 
 
    //根据指定的待出库的旧图书的位置,将该图书从图书表中删除;
    Book bookDelete(char no[]); 
 
    //能统计表中图书个数;
    int bookNumber();
 
    //实现图书信息表的图书去重;
    void bookSameDelete();
 
    //实现最爱书籍查询,根据书名进行折半查找,要求使用非递归算法实现,成功返回此书籍的书号和价格;
    void bookLoveFind(char name[]);
 
    //图书信息表按指定条件进行批量修改;
    void bookModify();
 
    //利用快速排序按照图书价格降序排序;
    void bookSort();
 
    //实现最贵图书的查找;
    void bookExpensive();
 
};

六、实现功能

定义一个包含图书信息(书号、书名、价格)的顺序表。读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。

输入

输入 n+1 行,其中前 n 行是 n 本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第 n+1 行是输入结束标志:0 0 0(空格分隔的三个 0)。其中书号和书名为字符串类型,价格为浮点数类型。

输出

总计 n+1 行,第 1 行是所创建的图书表中的图书个数,后 n 行是 n 本图书的信息(书号、

书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两

位小数。

输入样例:

9787302257646 程序设计基础 25.00

9787302164340 程序设计基础(第 2 版) 20.00

9787302219972 单片机技术及应用 32.00

9787302203513 单片机原理与应用技术 26.00

9787810827430 工业计算机控制技术——原理与应用 29.00

9787811234923 汇编语言程序设计教程 32.00

0 0 0

  1. 基于顺序存储/链式存储结构的图书信息表的修改

读入图书信息表,然后计算所有图书的平均价格,将所有低于平均价格的图书价格提高20%,所有高于或等于平均价格的图书价格提高10%,最后逐行输出价格修改后的图书信息。

输入

输入 n+1 行,其中前 n 行是 n 本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第 n+1 行是输入结束标志:0 0 0(空格分隔的三个 0)。其中书号和书名为字符串类型,价格为浮点数类型。

输出

总计 n+1 行,第 1 行是修改前所有图书的平均价格,后 n 行是价格修改后 n 本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

输入样例:

9787302257646 程序设计基础 25.00

9787302164340 程序设计基础(第 2 版) 20.00

9787302219972 数据挖掘与机器学习 32.00

9787302203513 模式识别与智能计算 26.00

9787810827430 工业计算机控制技术——原理与应用 29.00

9787811234923 操作系统教程 32.00

0 0 0

输出样例:

9787302257646 程序设计基础 30.00

9787302164340 程序设计基础(第 2 版) 24.00

9787302219972 数据挖掘与机器学习 35.20

9787302203513 模式识别与智能计算 28.60

9787810827430 工业计算机控制技术——原理与应用 31.90

9787811234923 操作系统教程 35.20

  1. 基于顺序存储/链式存储结构的图书信息表的最贵图书查找

读入相应的图书信息表,然后查找价格最高的图书,输出相应图书的信息。

输出

总计 m+1 行,其中,第 1 行是最贵的图书数目,(价格最高的图书可能有多本),后m行是最贵图书的信息,每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

输出样例:

2

9787302219972 数据挖掘与机器学习 35.20

9787811234923 操作系统教程 35.20

  1. 基于顺序存储/链式存储结构的图书信息表的最爱图书的查找

读入相应的图书信息表,然后根据指定的最爱图书的名字,输出相应图书的信息。

输入

输入1行,为每次待查找的最爱图书名字。

输出

若查找成功,输出k+1行,对于每次查找,第一行是最爱图书数目,同一书名的图书可能有多本,后K行是最爱图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。若查找失败:只输出以下提示:抱歉,没有你的最爱!

输出样例

2

9787302257646 程序设计基础 30.00

9787302164340 程序设计基础(第 2 版) 24.00

  1. 基于顺序存储/链式存储结构的图书信息表的新书入库

读入指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置上,最后输出新图书入库后所有图书的信息。

输入

总计n+1行,首先输入第1行,内容仅为一个整数,代表待入库的新图书的位置序号,然后输入n行,内容为新图书的信息,书号、书名、价格用空格分隔。

输出

若插入成功,输出新图书入库后所有图书的信息(书号、书名、价格),总计n+1行,每行是一本图书的信息,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

若插入失败,只输出以下提示:抱歉,入库位置非法!

输入样例:

2

9787302265436  计算机导论实验指导 18.00

输出样例:

9787302257646 程序设计基础 30.00

9787302265436 计算机导论实验指导 18.00

9787302164340 程序设计基础(第 2 版) 24.00

9787302219972 数据挖掘与机器学习 35.20

9787302203513 模式识别与智能计算 28.60

9787810827430 工业计算机控制技术——原理与应用 31.90

9787811234923 操作系统教程 35.20

  1. 基于顺序存储/链式存储结构的图书信息表的旧书出库

读入指定的待出库的旧图书的书号,将该图书从图书表中删除,最后输出旧图书出库后所有图书的信息。

输入

输入待出库的旧图书的书号;

输出

若删除成功,输出旧图书出库后所有图书的信息(书号、书名、价格),每行是一本图书的信息,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

若删除失败,只输出以下提示:出库失败,未找到该图书!

  1. 基于顺序存储/链式存储结构的图书信息表的图书去重

出版社出版的任何一本图书的书号(ISBN)都是唯一的,即图书表中不允许包含书号重复的图书。读入相应的图书信息表(事先加入书号重复的记录),然后进行图书的去重,即删除书号重复的图书(只留第一本),最后输出去重后所有图书的信息。

输出

总计输出m+1行(m<=n),其中,第一行是去重后的图书数目,后m行是去重后图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。

七、源码

https://blog.csdn.net/qq_52934831/article/details/118096371

你可能感兴趣的:(数据结构)