图书信息管理系统

实验内容

设计并实现一个图书信息管理系统。根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能。 该系统至少包含以下功能:
(1) 根据指定图书个数,逐个输入图书信息;
(2) 逐个显示图书表中所有图书的相关信息;
(3) 能根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置;
(4) 根据指定的待出库的旧图书的位置,将该图书从图书表中删除;
(5) 能统计表中图书个数;
(6) 实现图书信息表的图书去重;
(7) 实现最爱书籍查询,根据书名进行折半查找,要求使用非递归算法实现,成功返回此书籍的书号和价格;
(8) 图书信息表按指定条件进行批量修改;
(9) 利用快速排序按照图书价格降序排序;
(10) 实现最贵图书的查找;

实验提示

1、 基于顺序存储/链式存储结构的图书信息表的创建和输出
定义一个包含图书信息(书号、书名、价格)的顺序表。读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。
输入
输入 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
2、 基于顺序存储/链式存储结构的图书信息表的修改
读入图书信息表,然后计算所有图书的平均价格,将所有低于平均价格的图书价格提高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
3、 基于顺序存储/链式存储结构的图书信息表的最贵图书查找
读入相应的图书信息表,然后查找价格最高的图书,输出相应图书的信息。
输出
总计 m+1 行,其中,第 1 行是最贵的图书数目,(价格最高的图书可能有多本),后m行是最贵图书的信息,每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。
输出样例:
2
9787302219972 数据挖掘与机器学习 35.20
9787811234923 操作系统教程 35.20
4、 基于顺序存储/链式存储结构的图书信息表的最爱图书的查找
读入相应的图书信息表,然后根据指定的最爱图书的名字,输出相应图书的信息。
输入
输入1行,为每次待查找的最爱图书名字。
输出
若查找成功,输出k+1行,对于每次查找,第一行是最爱图书数目,同一书名的图书可能有多本,后K行是最爱图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。若查找失败:只输出以下提示:抱歉,没有你的最爱!
输出样例
2
9787302257646 程序设计基础 30.00
9787302164340 程序设计基础(第 2 版) 24.00
5、 基于顺序存储/链式存储结构的图书信息表的新书入库
读入指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置上,最后输出新图书入库后所有图书的信息。
输入
总计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
6、 基于顺序存储/链式存储结构的图书信息表的旧书出库
读入指定的待出库的旧图书的书号,将该图书从图书表中删除,最后输出旧图书出库后所有图书的信息。
输入
输入待出库的旧图书的书号;
输出
若删除成功,输出旧图书出库后所有图书的信息(书号、书名、价格),每行是一本图书的信息,书号、书名、价格用空格分隔。其中价格输出保留两位小数。
若删除失败,只输出以下提示:出库失败,未找到该图书!
7、 基于顺序存储/链式存储结构的图书信息表的图书去重
出版社出版的任何一本图书的书号(ISBN)都是唯一的,即图书表中不允许包含书号重复的图书。读入相应的图书信息表(事先加入书号重复的记录),然后进行图书的去重,即删除书号重复的图书(只留第一本),最后输出去重后所有图书的信息。
输出
总计输出m+1行(m<=n),其中,第一行是去重后的图书数目,后m行是去重后图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。

实验代码

#include <iostream>
#include <vector>
#include <iomanip>
#include<algorithm>
using namespace std;typedef struct {string num;string name;double price;
}Book;class Library
{public:vector<Book> order;void input();void print();void print0(int a);void binsert();void dele(int a);void dsame();void fav();void prisort(int low,int high);void modify();void expen();
};void Library::input()//录入图书信息
{cout << "请按顺序输入图书号、图书名与图书价格,末尾加上三个0:" << endl;string a, b;double c;cin >> a >> b >> c;while (a != "0" && b != "0" && c != 0){Book tmp;tmp.num = a;tmp.name = b;tmp.price = c;order.push_back(tmp);cin >> a >> b >> c;}
}void Library::print0(int a)//打印单本图书信息
{if (a >= order.size() || a < 0)cout << "没有这本书";elsecout << order[a].num <<" "<< order[a].name <<" "<< fixed << setprecision(2) << order[a].price << endl;
}void Library::print()//打印所有图书信息
{for (int i = 0; i < order.size(); i++) print0(i);cout << "--------------------------" << endl;
}void Library::binsert()//插入图书信息
{string a, b;double c;int d;cout << "请依次输入插入位置、书号、书名、价格" << endl;cin >> d >> a >> b >> c;if (d > order.size() || d <= 0){cout << "抱歉,入库位置非法!" << endl;}else{Book tmp;tmp.name = b;tmp.num = a;tmp.price = c;order.insert(order.begin() + d - 1, tmp);print();}
}void Library::dele(int a)//按序号出库某本图书
{if (a > order.size() || a <= 0){cout << "出库失败,未找到该图书!" << endl;}else{order.erase(order.begin() + a - 1);}
}void Library::dsame()//去重
{cout << "执行去重" << endl;for (int i = 0; i < order.size(); i++){for (int j = i + 1; j < order.size(); j++)if (order[i].num == order[j].num){dele(j + 1);j--;}}cout<<order.size()<<endl;print();
}void Library::fav()//查找最爱图书
{cout << "请输入最爱图书的名字:" << endl;string n;cin >> n;int a = 0;bool b = 1;for (int i = 0; i < order.size(); i++)if (order[i].name == n){a++;b = 0;print0(i);}cout << "找到了" << a << "本最爱书籍" << endl;if (b) cout << "抱歉,没有你的最爱!" << endl;
}void Library::prisort(int low,int high)//按价格从高到低排序
{if (low < high){int i = low;int j = high;Book tmp = order[i];while (i < j){while (i < j && order[j].price <= tmp.price){j--;}if (i < j){order[i] = order[j];}while (i < j && order[i].price >= tmp.price){i++;}if (i < j){order[j] = order[i];}}order[i] = tmp;prisort(low, i - 1);prisort(i + 1, high);}
}void Library::modify()//对所有图书信息操作
{double ave = 0;double sum = 0;for (int i = 0; i < order.size(); i++)sum += order[i].price;ave = sum / order.size();for (int i = 0; i < order.size(); i++)order[i].price = order[i].price > ave ? order[i].price * 1.1 : order[i].price * 1.2;print();
}void Library::expen()//打印最贵图书
{prisort(0, order.size() - 1);for (int i = 0; i < order.size(); i++){if (order[i].price == order[0].price){print0(i);}}
}int main()
{Library test;int flag = 1;while (flag){cout << "请输入对应的序号:" << endl;cout << "1.根据指定图书个数,逐个录入图书信息" << endl;cout << "2.逐个显示图书表中所有图书的相关信息" << endl;cout << "3.将新图书插入到图书表中指定的位置" << endl;cout << "4.按照位置将该图书从图书表中删除" << endl;cout << "5.统计表中图书个数" << endl;cout << "6.图书信息表的图书去重" << endl;cout << "7.最爱书籍查询" << endl;cout << "8.批量修改" << endl;cout << "9.按照图书价格降序排序" << endl;cout << "10.查找最贵图书" << endl;cout << "0.退出程序" << endl;cin >> flag;if (flag == 1){cout << endl;test.input();cout << endl;}if (flag == 2){cout << endl;cout << test.order.size() << endl;test.print();cout << endl;}if (flag == 3){cout << endl;test.binsert();cout << endl;}if (flag == 4){cout << endl;cout << "请输入要删除图书的位置" << endl;int a;cin >> a;cout << endl;test.dele(a);test.print();cout << endl;}if (flag == 5) cout << endl << "库中当前共有" << test.order.size() << "本图书" << endl;if (flag == 6){cout << endl;test.dsame();cout << endl;}if (flag == 7){cout << endl;test.fav();cout << endl;}if (flag == 8){cout << endl;test.modify();cout << endl;}if (flag == 9){cout << endl;test.prisort(0, test.order.size() - 1);test.print();cout << endl;}if (flag == 10){cout << endl;test.expen();cout << endl;}}return 0;
}
/*
9787302257646 程序设计基础 25.00
9787302164340 程序设计基础(第2版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787302164340 程序设计基础(第2版) 20.00
9787810827430 工业计算机控制技术——原理与应用 29.00
9787811234923 汇编语言程序设计教程 32.00
0 0 0
*///1234567890123 众神之父赐予我重伤倒地 33.00

实验结果

数据结构课设实验一:图书信息管理系统相关推荐

  1. 数据结构课程设计实验一:图书信息管理系统的设计与实现

    目录 (一)实验内容 (二)实验目的 (三)实验主要数据类型定义 (四)系统功能概述 (五)实验代码 (六)实验内容展示 (一)实验内容 设计并实现一个图书信息管理系统.根据实验要求设计该系统的菜单和 ...

  2. 数据结构实验--个人图书信息管理系统

    数据结构实验 第一章 个人图书信息管理系统 第二章 停车场管理 第三章 哈夫曼编码 第一章 个人图书信息管理系统 数据结构实验 前言 一.需求分析 二.概要设计 三.详细设计 1.全局变量.元素类型. ...

  3. 空气质量等级c语言编程,华中科技大学C语言课设 空气质量检测信息管理系统.docx...

    华中科技大学 计算机科学与技术学院PAGE PAGE \* MERGEFORMAT 128 华中科技大学 计算机科学与技术学院 PAGE \* MERGEFORMAT 1 华中科技大学计算机科学与技术 ...

  4. Java课设之Swing学生信息管理系统(源码)

    前言: 这是我学java时,写的一个练手项目,主要用来巩固知识,还有很多地方并不完善,有很多不足之处,仅供参考. 另外,如果直接按着我的代码敲很可能会出现bug.这大概率时JDK或MySQL的版本问题 ...

  5. c++课设:高校人员信息管理系统 开发一个简易的高校人员信息管理系统,主要针对高校人员的基本信息进行管理。采用对象链表或对象数组存放各个对象,实现新增、修改、删除、查询以及统计等功能。

    通过本次课程设计,深入理解类和对象.继承和派生.重载和多态,熟练掌握面向对象的程序设计思想和方法,能够对现实世界中的实际问题进行分析.设计,并学会熟练运用面向对象的编程方法(OOP)-- C++语言进 ...

  6. 数据结构:实现图书信息管理系统

    数据结构:顺序表实现图书信息管理系统 大一的数据结构实验拖延了相当长一段时间,最近老师终于让我们实验形式完成一次数据结构作业,我把自己的渣程序放在这里,希望能对肝实验的同学提供帮助,也希望各位大神路过 ...

  7. 图书信息管理系统(数据结构顺序表,c语言版)

    图书信息管理系统 顺序表 一.实验题目 二.工具环境 三.实验问题 问题: 四.实验代码 五.解决方法 方法: 一.实验题目 图书信息管理系统 出版社有一些图书数据,为简单起见,在此假设每种图书只包括 ...

  8. 图书信息管理系统(数据结构链表,c语言版)

    图书信息管理系统 链表 一.实验题目 二.工具环境 三.实验问题 四.实验代码 五.实验总结 一.实验题目 图书信息管理系统 出版社有一些图书数据,为简单起见,在此假设每种图书只包括三部分信息:ISB ...

  9. 数据结构实验--基于线性表的图书信息管理系统

    本文是依据数据结构习题解析与实验指导(李冬梅)一书中的第一个实验–基于线性表的图书信息管理系统所写的. 之所以写这个,是因为这个实验不仅涉及到线性表的结构设计,还包括一些线性表的基本操作,个人认为,做 ...

最新文章

  1. 二十三、图的广度优先遍历
  2. matlab程序设计实践,MATLAB程序设计实践(第二题)
  3. img src 本地图片_Java爬取简单的网页内容和图片
  4. samba服务器的搭建【在windows查看linux的共享文件】
  5. Codeforces Round #372 (Div. 1) B. Complete The Graph
  6. 基于微信会议室预约小程序毕业设计设计与实现 开题报告参考
  7. 双态运维联盟首个“共研基地”落户云南电网信息中心
  8. python jinja2_python-Jinja2用法
  9. android 布局之滑动探究 scrollTo 和 scrollBy 方法使用说明
  10. 华为存储发展史:从筚路蓝缕到星辰大海
  11. socket 读、写字节流数据
  12. 0.96寸OLED屏使用详解
  13. 大三、大四期间去实习,要不要签三方协议?
  14. Poco访问mysql
  15. [附源码]Java计算机毕业设计SSM东北鹿产品售卖网站
  16. 自动化测试与自动化测试生命周期
  17. Hive设置连接用户名和密码
  18. 5000词学英语——DAY2
  19. 360密盘两月即被破解 10万年成笑话
  20. 网易24周年,竟拿出内部进阶必备的网络协议笔记,给程序员发福利

热门文章

  1. 基于java的客户订单管理系统
  2. angular UI框架
  3. 文献阅读笔记整理--ConvNext:A ConvNet for the 2020s
  4. 开源社邀请您参加2022 第四届天津前端开发者大会
  5. 计算机主板电感有正负极么,贴片电感有正负极之分吗_贴片电感怎样测量 - 全文...
  6. 艾伦图灵被称为人工智能之父,附源代码
  7. 百度百科词条怎么做?百度百科词条创建攻略分享
  8. 【转载】迅雷应用开发(调用迅雷自…
  9. 【刘文彬】EOS多节点组网:商业场景分析以及节点启动时序
  10. 一款小巧、开源免费、可观性强的流量监控软件——TrafficMonitor