图书信息管理系统的设计与实现

  • 实验内容
  • 预习部分
  • 代码部分
  • 运行截图

实验内容

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

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

预习部分

图书信息的定义:
typedef struct {
char no[8]; //8位书号
char name[20]; //书名
int price; //价格
}Book;
顺序表的定义:
typedef struct {
Book *elem; //指向数据元素的基地址
int length; //线性表的当前长度
}SqList;
链表的定义:
typedef struct LNode{
Book data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;

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 <cstring>
using namespace std;//图书信息的定义
typedef struct {char no[8];   //13位书号(要实现的样例为13位书号)char name[20]; //书名double price;  //价格
}Book;//链表的定义
typedef struct LNode {Book data;           //数据域struct LNode* next;  //指针域
}LNode, * LinkList;//定义图书信息管理的类
class LibraryManageSystem {private:LNode* first;  //链表头结点
public:LibraryManageSystem() {first = new LNode();first->next = NULL;  //设置头结点}//根据指定图书个数,逐个输入图书信息LibraryManageSystem(Book book[], int n) {first = new LNode();first->next = NULL;LNode* p = first, * r;for (int i = 0; i < n; i++) {r = new LNode();r->data = book[i];r->next = NULL;p->next = r;p = r;}p->next = NULL;}//功能二:逐个显示图书表中所有图书相关信息void bookPrint(){cout << endl;cout << "目前图书数量为: " << bookAmount() << endl;cout << "图书信息目录: " << endl << endl;LNode* p = first->next;while (p) {cout << p->data.no << "   " << p->data.price << endl;p = p->next;}}//功能三:根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置void bookInsert(Book book, int n){LNode* p = first, * r;int i = 0;bool tag = false;while (i < n - 1 && p) {p = p->next;i++;}if (!p)cout << " 抱歉,入库位置非法! " << endl << endl;else {r = new LNode();r->data = book;r->next = p->next;p->next = r;tag = true;}if (tag) { //判断是否插入成功bookPrint();cout << " 恭喜您,插入成功! " << endl << endl;}}//功能四:根据指定的待出库的旧图书的位置,将该图书从图书表中删除void bookDelete(char no[]){LNode* p = first, * r;Book book;if (!p || !p->next)cout << " 出库失败,未找到该图书! " << endl;else {r = p->next;book = r->data;p->next = r->next;delete r;bookPrint();cout << " 恭喜您,删除成功! " << endl << endl;}}//功能五:统计表中图书个数int bookAmount(){int length = 0;LNode* p = first->next;while (p) {length++;p = p->next;}return length;}//功能六:实现图书信息表的图书去重void bookSameDelete(){LNode* p = first->next, * r;while (p) {r = p->next;while (r) {if (strcmp(p->data.no, r->data.no) == 0){LNode* s = first;while (s->next != r)s = s->next;     //寻找前一个位置s->next = r->next;   //删除}r = r->next;}p = p->next;}bookPrint();cout << " 恭喜您,去重完成! " << endl << endl;}//功能七:实现最爱书籍查询void bookFavourite(char name[]){LNode* p = first->next;int num = 0;Book book[20];while (p) {if (strcmp(p->data.name, name) == 0) {book[num++] = p->data;}p = p->next;}if (num == 0)cout << " 抱歉,并没有找到您的最爱书籍! " << endl << endl;else {cout << endl;for (int j = 0; j < num; j++) {cout << book[j].no << ' ' << book[j].price << endl;}cout << " 恭喜您,查询成功! " << endl << endl;}}//功能八:图书信息表按指定条件进行批量修改void bookModify(){double average = 0;LNode* p = first->next;while (p) {average += p->data.price;p = p->next;}average /= bookAmount();p = first->next;while (p) {if (p->data.price < average)p->data.price += (p->data.price * 0.2);else p->data.price += (p->data.price * 0.1);p = p->next;}bookPrint();cout << " 恭喜您,批量修改成功! " << endl << endl;}//功能九:利用快速排序按照图书价格降序排序void bookDesSort(Book book[], int bookAmount){Book target;int i, j;for (i = 1; i < bookAmount; i++){target = book[i];for (j = i - 1; j >= 0; j--){if (book[j].price < target.price){book[j + 1] = book[j];}elsebreak;}book[j + 1] = target;  //将新元素插入到已排序的元素大于等于新元素的位置后}for (int k = 0; k < bookAmount; k++) {cout << book[k].no << "   " << book[k].price << endl;}cout << " 恭喜您,排序完成! " << endl << endl;}//功能十:实现最贵图书的查找void bookMostExpensive(){LNode* p = first->next;int num = 0;double max = 0;Book book[20];while (p) {if (p->data.price > max) {max = p->data.price;num = 0;book[num++] = p->data;}else if (p->data.price == max)book[num++] = p->data;p = p->next;}if (num == 0)cout << " 抱歉,当前没有剩余图书! " << endl << endl;else {for (int j = 0; j < num; j++) {cout << book[j].no << ' ' << book[j].price << endl;}cout << " 恭喜您,查找完成! " << endl << endl;}}
};//设置菜单
void Menu() {cout << "*********   欢迎来到图书信息管理系统!   *********" << endl << 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 << endl;cout << "请输入您要进行的选项(1-10):    " << endl;
}int main() {//初始化Book book[100];bool tag = true;int i = 0;int length = 0;while (tag) {cout << "您好!请输入要录入书籍的书号、书名和价格信息:" << endl;cout << "(温馨提示:如您已录入完毕,请输入:0 0 0)" << endl << endl;cin >> book[i].no;cin >> book[i].name;cin >> book[i].price;cout << endl;cout << "------------------------------------------------" << endl;if (book[i].price == 0) {tag = false;cout << " 恭喜您,录入完毕! " << endl;break;}i++;length++;}LibraryManageSystem library(book, length);    //建立类的对象int op; //设置功能选择while (1) {system("cls");Menu();cin >> op;switch (op) {case 1: {library.bookPrint();break;}case 2: {cout << endl;cout << "请输入要录入书籍位置:" << "( 现有图书数量为" << library.bookAmount() << " )" << endl;Book book;int n;//插入位置cin >> n;while (n <= 0 && n > library.bookAmount()) {cout << "抱歉,入库位置非法!" << endl;cin >> n;}cout << "请输入书号:" << endl;cin >> book.no;cout << "请输入书名:" << endl;cin >> book.name;cout << "请输入价格:" << endl;cin >> book.price;library.bookInsert(book, n);break;}case 3: {char no[8];cout << endl;cout << "请输入书号!" << endl;cin >> no;library.bookDelete(no);break;}case 4: {cout << endl;cout << "图书数量为:" << "  " << library.bookAmount() << endl << endl;break;}case 5: {library.bookSameDelete();break;}case 6: {library.bookModify();break;}case 7: {char name[20];cout << endl;cout << "请输入最喜爱图书名:" << endl;cin >> name;library.bookFavourite(name);break;}case 8: {cout << endl;library.bookDesSort(book, length);break;}case 9: {cout << endl;library.bookMostExpensive();break;}case 10:return 0;}system("pause");}
}

运行截图


目录

插入图书

排序

最喜爱查找

删除

最贵查找

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

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

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

  2. 预习:图书信息管理系统的设计与实现

    (一)实验内容 设计并实现一个图书信息管理系统.根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能. 该系统至少包含以下功能: 根据指定图书个数,逐个输入图书信息: 逐个显示图书表中 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 源码安装httpd2.4.4
  2. Vivado中如何避免信号被优化掉?
  3. Mac NIFI 安装
  4. Java并发编程(1):可重入内置锁
  5. AspNetCore 中使用 InentityServer4(2)
  6. java asynccontext,超时后的JavaEE 6 AsyncContext行为
  7. java hashcode 例子_Java UUID hashCode()用法及代码示例
  8. linux 声音控制 命令,linux 声音大小调整的命令
  9. 64如何传入后台_如何保证API接口数据安全?
  10. sql执行为啥这么慢,常见的原因有哪些
  11. Navi.Soft31.任务管理器(定时同步+数据采集)
  12. Filter动态代理敏感词汇过滤
  13. MS .Net常见的持久层框架
  14. 《算法导论》:关于循环不变式
  15. 13、TWS API和IB中的历史数据
  16. 基本初等函数导数公式表
  17. 代码 土方 网格法_三分钟解决方格网法土方计算
  18. 【5G NR】手机身份证号IMEI与IMEISV
  19. html去除背景颜色怎么设置,word文档背景颜色怎么去掉,文档背景颜色怎么去掉
  20. Xcode13.3.1 upload ipa error:Invalid Provisioning Signature....STATE_ERROR.VALIDATION_ERROR.9016解决方案

热门文章

  1. springboot整合mongodb
  2. autoit脚本实现电脑加域,退域,重加域
  3. 快速搜索Wox工具之Everything Service没有运行报错,解决办法!
  4. 《数学之美》读书笔记和知识点总结
  5. 如何屏蔽搜狗浏览器中的广告 搜狗浏览器拦截广告的教程
  6. jvm核心技术梳理(持续更新)
  7. Origin 数据渐变色
  8. 磁盘阵列恢复方法以及注意事项
  9. HTML基本结构标签
  10. 基于pygame的自定义游戏《the box》