(一)实验内容

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

  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行是去重后图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。

(三)源码(基于顺序存储):

BookList.h

#pragma once
#include<iostream>
#include<iomanip>
#include<string.h>
#include<vector>
#include<algorithm>using namespace std;const int MaxSize = 1000;struct book
{char no[8];                    //8位书号char name[20];                //书名float price;                //价格
};class BookList
{
private:book list[MaxSize];int length;
public:BookList();                  //默认构造函数~BookList();                //析构函数int getLength();          //获取长度void printList();         //打印图书信息表void getExpensive();       //获取最贵图书信息void findFavourite();     //最爱图书查询void insertBooks();         //新书入库void deleteBook();            //旧书出库void deleteBook(int loc); //删除指定位置图书void bookDeWeight();      //图书去重void priceChanged();      //修改价格void fastSort(int l,int r);   //按照价格降序排序
};

BookList.cpp

#include "BookList.h"BookList::BookList()
{cout << "当前图书为空,新建一个图书信息表..." << endl << endl;cout << "依次输入书号、书名、价格,空格隔开,(0,0,0)视为退出" << endl;int flag = 1, index = 0;length = 1;char exit[] = "0";while (flag && index < MaxSize){//依次输入图书信息cin >> list[index].no;cin >> list[index].name;cin >> list[index].price;//检测到(0,0,0)时退出if (!strcmp(list[index].no, exit) && !strcmp(list[index].name, exit) && list[index].price == 0){    cout << "输入完成" << endl;flag = 0;}else{index++;length++;}}}BookList::~BookList()
{
}void BookList::printList()
{cout << "输出图书信息表如下:" << endl;cout << "长度:" << length - 1 << endl;for (int i = 0; i < length - 1; i++)cout << list[i].no << " " << list[i].name << " " << fixed << setprecision(2) << list[i].price << endl;
}void BookList::getExpensive()
{int max = 0;vector<int> ExpensiveLoc;ExpensiveLoc.push_back(max);for (int i = 1; i < length - 1; i++){if (list[i].price == list[max].price)ExpensiveLoc.push_back(i);//检测到相同的最大值则存放其位置if (list[i].price > list[max].price){//检测到更大值,则清空最大位置数组,重新存放max = i;ExpensiveLoc.clear();ExpensiveLoc.push_back(max);}}//输出最贵图书信息cout << "最贵图书数量为" << ExpensiveLoc.size() << ",具体信息如下:" << endl;int index = 0;for (int i = 0; i < ExpensiveLoc.size(); i++){cout << list[ExpensiveLoc[index]].no << " " << list[ExpensiveLoc[index]].name << " " << fixed << setprecision(2) << list[ExpensiveLoc[index]].price << endl;index++;}
}int BookList::getLength()
{return length;
}void BookList::findFavourite()
{char favBookName[20];cout << "请输入最爱图书名:";cin >> favBookName;vector<int> favLoc;for(int i=0;i<length;i++){if (strcmp(list[i].name, favBookName) == 0)favLoc.push_back(i);//找到最爱图书则存放其位置}int count = favLoc.size();//记录最爱图书数量if (count == 0)cout << "抱歉,没有你的最爱!" << endl;else{cout << "已找到,展示如下:" << endl;cout << count << endl;int index = 0;for (int i = 0; i < count; i++){cout << list[favLoc[index]].no << " " << list[favLoc[index]].name << " " << fixed << setprecision(2) << list[favLoc[index]].price << endl;index++;}}
}void BookList::insertBooks()
{cout << "请输入插入顶点位置:";int loc;cin >> loc;loc--;cout << "请输入插入图书的信息:";char new_no[8], new_name[20];float new_price;cin >> new_no;cin >> new_name;cin >> new_price;if (length == MaxSize)cout << "抱歉,入库位置非法!" << endl;else{for (int i = length - 1; i >= loc; i--){strcpy_s(list[i + 1].no,list[i].no);strcpy_s(list[i + 1].name, list[i].name);list[i + 1].price = list[i].price;}strcpy_s(list[loc].no, new_no);strcpy_s(list[loc].name, new_name);list[loc].price = new_price;}length++;cout << "插入完成" << endl;printList();
}void BookList::deleteBook()
{cout << "请输入删除图书的书号:";char del_no[8];cin >> del_no;for (int i = 0; i < length; i++){if (!strcmp(list[i].no, del_no)){for (int j = i; j < length; j++){strcpy_s(list[i].no, list[i + 1].no);strcpy_s(list[i].name, list[i + 1].name);list[i].price = list[i + 1].price;}length--;break;}if (i == length - 1)cout << "出库失败,未找到该图书!" << endl;}cout << "删除完成" << endl;printList();
}void BookList::deleteBook(int loc)//用于去重函数
{for (int i = loc; i < length - 1; i++){strcpy_s(list[i].no, list[i + 1].no);strcpy_s(list[i].name, list[i + 1].name);list[i].price = list[i + 1].price;}length--;
}void BookList::priceChanged()
{float sumPrice = 0;for (int i = 0; i < length; i++)sumPrice += list[i].price;float ave = sumPrice / (length - 1);for (int i = 0; i < length; i++){if (list[i].price < ave)list[i].price += list[i].price / 10;elselist[i].price += list[i].price / 5;}cout << "价格已修改" << endl;printList();
}void BookList::fastSort(int l,int r)
{if (l < r){int i = l, j = r;float temp_price = list[l].price;char temp_no[8], temp_name[20];strcpy_s(temp_no, list[l].no);strcpy_s(temp_name, list[l].name);while (i < j){//从右向左找第一个价格大于temp_price的数while (i < j && list[j].price <= temp_price)j--;if (i < j){list[i].price = list[j].price;strcpy_s(list[i].no, list[j].no);strcpy_s(list[i].name, list[j].name);i++;}//从左向右找第一个价格小于temp_price的数while (i<j && list[i].price > temp_price)i++;if (i < j){list[j].price = list[i].price;strcpy_s(list[j].no, list[i].no);strcpy_s(list[j].name, list[i].name);j--;}}list[i].price = temp_price;strcpy_s(list[i].no, temp_no);strcpy_s(list[i].name, temp_name);fastSort(l, i - 1);fastSort(i + 1, r);}
}void BookList::bookDeWeight()
{for (int i = 0; i < length - 1; i++)for (int j = i + 1; j < length; j++)if (strcmp(list[i].no, list[j].no) == 0)deleteBook(j);cout << endl << "去重已完成" << endl;printList();
}

BookInf_Management.cpp

#include "BookList.h"//用户交互界面
void userWindow()
{BookList demo;int flag = 1,choose;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;while (flag){cout << endl;cout << "请输入序号选择操作:";cin >> choose;cout << endl;switch (choose){case 1:demo.printList(); break;case 2:demo.priceChanged(); break;case 3:demo.getExpensive(); break;case 4:demo.findFavourite(); break;case 5:demo.insertBooks(); break;case 6:demo.deleteBook(); break;case 7:demo.bookDeWeight(); break;case 8:{int len = demo.getLength();demo.fastSort(0, len - 2);demo.printList();break;}case 9:flag = 0; break;default:break;}}
}int main()
{userWindow();return 0;
}

预习:图书信息管理系统的设计与实现相关推荐

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

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

  2. 基于Spring boot的图书馆图书借阅管理系统的设计与实现

    作者主页:编程千纸鹤 作者简介:Java.前端.Python开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发.毕业设计开发.面试技术整理.最新技术分享 收藏点赞不迷路  关注作者有好处 ...

  3. c语言课程图书信息管理系统,c语言课程设图书信息管理系统.doc

    c语言课程设图书信息管理系统 课程设计报告 课程:高级语言程序设计 学号: 1010431059 姓名: 胡维维 班级: 嵌入式一班 教师: 王群芳 时间: 2011年6月 计算机科学与技术系 设计名 ...

  4. 大一c语言图书管理系统查询,大一C语言课程设计图书信息管理系统.doc

    高级语言程序设计 课程设计 评语: 学 院 班 级 姓 名 学 号 成 绩 指导老师 年 月 日 一.目的 1. 进一步掌握和利用C语言进行程设计的能力: 2.? 进一步理解和运用结构化程设计的思想和 ...

  5. 数据库课程设计:图书信息管理系统(Java+MySQL)(附程序)

    期末数据库课程设计做了个图书信息管理系统,由于老师给的选题给得早,所以我在开学后的几周就开学搞了,删删改改整了好多,在此整理分享一下: 项目简介: 随着社会的发展,人们对知识的需求也在不断增长.书籍作 ...

  6. C语言课程设计:图书信息管理系统

    设计一个图书信息管理系统,功能需求如下: 录入图书信息 2.添加图书信息 3.查询图书信息 4.修改图书信息 5.删除图书信息 6.按出版社排序 7.浏览所有图书信息 8.退出系统 话不多说,代码如下 ...

  7. 课程设计--图书信息管理系统(C语言)

    图书信息管理系统(C语言) 图书信息包括:登录号.书名.作者名.分类号.出版单位.出版时间.价格等.试设计一图书信息管理系统,使之能提供以下功能: 系统以菜单方式工作 1) 图书信息录入功能(图书信息 ...

  8. 课程设计-图书信息管理系统

    介绍: 课程设计-银行储蓄系统--> 在这里 图书信息管理系统包括:登录号.书名.作者名.分类号.出版单位.出版时间.价格等.试设计一图书信息管理系统,使之能提供以下功能: (1)系统以菜单方式 ...

  9. 计算机毕业设计源码分享双鱼林,双鱼林SSM图书信息管理系统毕业课程设计源码 - WEB源码|源代码 - 源码中国...

    双鱼林SSM图书信息管理系统\.classpath 双鱼林SSM图书信息管理系统\.mymetadata 双鱼林SSM图书信息管理系统\.project 双鱼林SSM图书信息管理系统\.setting ...

最新文章

  1. Tensorflow基础入门十大操作总结
  2. float 属性详解
  3. 120000字,你们要的Java 并发编程图文小册整理出来了,免费送给大家!
  4. 图像分析:投影曲线的波峰查找
  5. 服务器文件协议,文件服务器协议
  6. UI5 Control lazy load mechanism
  7. C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。
  8. ret2dlresolve归纳
  9. C#学习常用方法(3000)---Foreach ,in
  10. 黑马程序员_Java高新技术--代理
  11. openldap quick start guide
  12. ios13.5正式版信号怎样?
  13. Date实战案例:倒计时日历
  14. 包邮送5本!新书推荐:MLOps实践――机器学习从开发到生产
  15. 百度ai平台接口使用记录
  16. 用计算机求正有理数算术平方根的步骤,用计算器求算数平方根、用有理数估计算数平方根的大小 (2).ppt...
  17. chrome最强大的浏览器插件油猴Tampermonkey插件离线安装包免费分享下载
  18. 是谁送给秦羽73件鸿蒙,《星辰变》秦羽的6个身份,第一个弱爆了,最后一个大反转...
  19. java的逻辑常量_在Java语言中,逻辑常量只有true和(__)两个值;
  20. 顶点一二轮调研报告之关于快递包装回收

热门文章

  1. 查询mysql定时任务_MySQL 定时任务
  2. 手机号、身份证、邮箱校验方法
  3. SDNUOJ.1105.椭圆(记得避坑)
  4. 代码高亮的可行性方案,highlight.js
  5. 从零开始打造一款面向市场级产品
  6. hive-sql截取汉字、字母和数字等
  7. 在vue、html中手动写日期格式化转换为“yyyy-MM-dd hh:mm:ss”
  8. 顶层const与底层const
  9. ug区域轮廓铣没有重叠距离_ug编程公共参数大全,讲得最详细的资料都在这里了...
  10. python的设计哲学是什么意思_哲学是什么意思