基于线性表的图书信息管理系统

【实验目的】

1.掌握线性表的顺序存储表示和链式存储表示。
2.掌握顺序表和链表的基本操作,包括创建、查找、插入和删除等算法。
3.明确线性表两种不同存储结构的特点及其适用场合,明确它们各自的优缺点。

【实验内容】

图书信息表包括以下4项常用的基本操作:图书信息表的创建和输出、排序、修改、逆序存储。实验要求分别利用顺序表和链表实现上述4项操作。

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 汇编语言程序设计教程 21.00
0 0 0

输出样例

6
9787302257646 程序设计基础 25.00
9787302164340 程序设计基础(第 2 版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787810827430 工业计算机控制技术—原理与应用 29.00
9787811234923 汇编语言程序设计教程 21.00

2.基于顺序存储结构的图书信息表的排序

问题描述

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建。然后,将图书按照价格降序排序,逐行输出排序后每本图书的信息。

输入要求

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

输出要求

总计 n 行,每行是一本图书的信息(书号、书名、价格),书号、书名、价格用空格分隔。其中,价格输出保留两位小数。

输入样例

9787302257646 程序设计基础 2500
9787302164340 程序设计基础(第 2 版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787810827430 工业计算机控制技术—原理与应用 29.00
9787811234923 汇编语言程序设计教程 21.00
0 0 0

输出样例

9787302219972 单片机技术及应用 32.00
9787810827430 工业计算机控制技术—原理与应用 29.00
9787302203513 单片机原理与应用技术 26.00
9787302257646 程序设计基础 25.00
9787811234923 汇编语言程序设计教程 21.00
9787302164340 程序设计基础(第 2 版)20.00

3.基于顺序存储结构的图书信息表的修改

问题描述

首先,定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建。然后,计算所有图书的平均价格,将所有低于平均价格的图书价格提高 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 汇编语言程序设计教程 21.00
0 0 0

输出样例

25.50
9787302257646 程序设计基础 30.00
9787302164340 程序设计基础(第 2 版) 24.00
9787302219972 单片机技术及应用 35.20
9787302203513 单片机原理与应用技术 28.60
9787810827430 工业计算机控制技术—原理与应用 31.90
9787811234923 汇编语言程序设计教程 25.20

4.基于顺序存储结构的图书信息表的逆序存储

问题描述

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

输入要求

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

输出要求

总计 n 行,第 i 行是原有图书信息表中第 n-计+2 行(此处不是 n-计 1,是因原有图书信息表中第 1 行不是图书信息而是图书数目)的图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中,价格输出保留两位小数。

输入样例

9787302257646 程序设计基础 25.00
9787302164340 程序设计基础(第 2 版)20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787810827430 工业计算机控制技术一一原理与应用 29.00
9787811234923 汇编语言程序设计教程 21.00

输出样例

9787811234923 汇编语言程序设计教程 21.00
9787810827430 工业计算机控制技术一一原理与应用 29.00
9787302203513 单片机原理与应用技术 26.00
9787302219972 单片机技术及应用 32.00
9787302164340 程序设计基础(第 2 版)20.00
9787302257646 程序设计基础 25.00

【实验提示】

不同的存储结构对应的算法实现不同,下面分别给出图书信息表的顺序存储结构和链式
存储结构的定义。

typedef struct{char number[30] ;char title[30] ;float price ;
}BOOK ; //  数据元素BOOK
typedef struct{BOOK* elem ;int length ;int listsize ;   //  空间大小
}Sqlist ;   //  顺序存储顺序表
typedef struct{char number[30] ;char title[30] ;float price ;
}BOOK ; //  数据元素BOOK
typedef struct node {BOOK book;struct node *next;
} LNode, *LinkList; //  链式顺序表LinkList
#include<bits/stdc++.h>
using namespace std ;#define LIST_INIT_SIZE 100
#define LIST_INCREMENT 10
#define ERROR 0
#define OK 1
typedef int Status ;typedef struct{char number[30] ;char title[30] ;float price ;
}BOOK ;typedef struct{BOOK* elem ;int length ;int listsize ;    //  空间大小
}Sqlist ;Status Init_Sqlist(Sqlist &L)
{L.elem = (BOOK *)malloc(LIST_INIT_SIZE * sizeof(BOOK)) ;if(!L.elem)return ERROR ;L.length = 0 ;L.listsize = LIST_INIT_SIZE ;return  OK ;
}Status Insert_Sqlist(Sqlist &L, int i, BOOK e)
{BOOK *p ;if(i < 1 || i > L.length + 1)return ERROR ;if(L.length >= L.listsize) {    // 当前存储空间已满,增加容量BOOK *newbase = (BOOK *)realloc(L.elem,(L.listsize + LIST_INCREMENT) * sizeof(BOOK));if(!newbase)return ERROR;                 // 存储分配失败L.elem = newbase;                  // 新基址L.listsize += LIST_INCREMENT;      // 增加存储容量}BOOK *q = &(L.elem[i - 1]);       // q为插入位置for(p = &(L.elem[L.length - 1]); p >= q; --p)*(p + 1) = *p;                 // 插入位置及之后的元素右移*q = e;                // 插入e++L.length;             // 表长增1return OK;
}Status DestroyList(Sqlist &L)
{ free(L.elem);L.elem = NULL;L.length = 0;L.listsize = 0;return OK;
}Status Show_The_List(Sqlist &L)
{if(!&L){cout<<"EMPTY"<<endl ;return ERROR ; }for(int i = 0 ;i < L.length ;i++){cout<<L.elem[i].number<<"  "<<L.elem[i].title<<"  "<<L.elem[i].price<<endl ;}cout<<endl ;return OK ;
}Status List_Sort(Sqlist &L)
{BOOK temp ;int flags = 0 ;for(int i = 0 ;i < L.length - 1 ;i++){for(int j = 0 ;j < L.length - 1 - i ;j++){if(L.elem[j].price > L.elem[j + 1].price){temp = L.elem[j] ;L.elem[j] = L.elem[j + 1] ;L.elem[j + 1] = temp ;flags = 1 ;}}if(flags == 0)return OK ;}return OK ;
}Status Adjust_List(Sqlist &L)
{float price_sum, price_ave ;for(int i = 0 ;i < L.length ;i++){price_sum += L.elem[i].price ;}price_ave = price_sum/L.length ;for(int i = 0 ;i < L.length ;i++){if(L.elem[i].price <= price_ave)L.elem[i].price *= 1.1 ;elseL.elem[i].price *= 0.8 ;       }return OK ;
}/*Status List_Reverse_Storage(Sqlist &L)
{Sqlist temp ;BOOK *book ;Init_Sqlist(temp) ;for(int i = L.length - 1 ;i >= 0 ;i--){if(!strcmp(L.elem[i].number,"0")&&!strcmp(L.elem[i].title,"0")&&L.elem[i].price==0){break ;}Insert_Sqlist(temp, temp.length + 1, L.elem[i]) ;}for(int i = 0 ;i < temp.length ;i++){if(!strcmp(temp.elem[i].number,"0")&&!strcmp(temp.elem[i].title,"0")&&temp.elem[i].price==0){break ;}L.elem[i] = temp.elem[i] ;} return OK ;
}*/Status List_Reverse_Storage(Sqlist &L)
{BOOK temp ;for(int i = 0 ;i < L.length/2 ;i++){temp = L.elem[i] ;L.elem[i] = L.elem[L.length - 1 - i] ;L.elem[L.length - 1 - i] = temp ;}return OK ;
}
int main()
{Sqlist L ;BOOK book ;int i = 0 ;Init_Sqlist(L) ;while(~scanf("%s %s %f", book.number, book.title, &book.price)){if(!strcmp(book.number,"0")&&!strcmp(book.title,"0")&&book.price==0){break ;}L.elem[L.length] = book ;Insert_Sqlist(L, L.length + 1, book) ;}   Show_The_List(L) ;List_Sort(L) ;Show_The_List(L) ;Adjust_List(L) ;Show_The_List(L) ;List_Reverse_Storage(L) ;Show_The_List(L) ;DestroyList(L) ;return 0 ;
}
/*
9787302257646 程序设计基础 2500
9787302164340 程序设计基础(第2版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787810827430 工业计算机控制技术原理与应用 29.00
9787811234923 汇编语言程序设计教程 21.00
0 0 0
*/
#include<bits/stdc++.h>
using namespace std ;#define LIST_INIT_SIZE 100
#define LIST_INCREMENT 10
#define ERROR 0
#define OK 1
typedef int Status ;typedef struct{char number[30] ;char title[30] ;float price ;
}BOOK ;typedef struct{BOOK* elem ;int length ;int listsize ;    //  空间大小
}Sqlist ;Status Init_Sqlist(Sqlist &L)
{L.elem = (BOOK *)malloc(LIST_INIT_SIZE * sizeof(BOOK)) ;if(!L.elem)return ERROR ;L.length = 0 ;L.listsize = LIST_INIT_SIZE ;return  OK ;
}Status Insert_Sqlist(Sqlist &L, int i, BOOK e)
{BOOK *p ;if(i < 1 || i > L.length + 1)return ERROR ;if(L.length >= L.listsize) {    // 当前存储空间已满,增加容量BOOK *newbase = (BOOK *)realloc(L.elem,(L.listsize + LIST_INCREMENT) * sizeof(BOOK));if(!newbase)return ERROR;                 // 存储分配失败L.elem = newbase;                  // 新基址L.listsize += LIST_INCREMENT;      // 增加存储容量}BOOK *q = &(L.elem[i - 1]);       // q为插入位置for(p = &(L.elem[L.length - 1]); p >= q; --p)*(p + 1) = *p;                 // 插入位置及之后的元素右移*q = e;                // 插入e++L.length;             // 表长增1return OK;
}Status DestroyList(Sqlist &L)
{ free(L.elem);L.elem = NULL;L.length = 0;L.listsize = 0;return OK;
}Status Show_The_List(Sqlist &L)
{if(!&L){cout<<"EMPTY"<<endl ;return ERROR ; }for(int i = 0 ;i < L.length ;i++){cout<<L.elem[i].number<<"  "<<L.elem[i].title<<"  "<<L.elem[i].price<<endl ;}cout<<endl ;return OK ;
}Status List_Sort(Sqlist &L)
{BOOK temp ;int flags = 0 ;for(int i = 0 ;i < L.length - 1 ;i++){for(int j = 0 ;j < L.length - 1 - i ;j++){if(L.elem[j].price > L.elem[j + 1].price){temp = L.elem[j] ;L.elem[j] = L.elem[j + 1] ;L.elem[j + 1] = temp ;flags = 1 ;}}if(flags == 0)return OK ;}return OK ;
}Status Adjust_List(Sqlist &L)
{float price_sum, price_ave ;for(int i = 0 ;i < L.length ;i++){price_sum += L.elem[i].price ;}price_ave = price_sum/L.length ;for(int i = 0 ;i < L.length ;i++){if(L.elem[i].price <= price_ave)L.elem[i].price *= 1.1 ;elseL.elem[i].price *= 0.8 ;       }return OK ;
}/*Status List_Reverse_Storage(Sqlist &L)
{Sqlist temp ;BOOK *book ;Init_Sqlist(temp) ;for(int i = L.length - 1 ;i >= 0 ;i--){if(!strcmp(L.elem[i].number,"0")&&!strcmp(L.elem[i].title,"0")&&L.elem[i].price==0){break ;}Insert_Sqlist(temp, temp.length + 1, L.elem[i]) ;}for(int i = 0 ;i < temp.length ;i++){if(!strcmp(temp.elem[i].number,"0")&&!strcmp(temp.elem[i].title,"0")&&temp.elem[i].price==0){break ;}L.elem[i] = temp.elem[i] ;} return OK ;
}*/Status List_Reverse_Storage(Sqlist &L)
{BOOK temp ;for(int i = 0 ;i < L.length/2 ;i++){temp = L.elem[i] ;L.elem[i] = L.elem[L.length - 1 - i] ;L.elem[L.length - 1 - i] = temp ;}return OK ;
}
int main()
{Sqlist L ;BOOK book ;int i = 0 ;Init_Sqlist(L) ;while(~scanf("%s %s %f", book.number, book.title, &book.price)){if(!strcmp(book.number,"0")&&!strcmp(book.title,"0")&&book.price==0){break ;}L.elem[L.length] = book ;Insert_Sqlist(L, L.length + 1, book) ;}   Show_The_List(L) ;List_Sort(L) ;Show_The_List(L) ;Adjust_List(L) ;Show_The_List(L) ;List_Reverse_Storage(L) ;Show_The_List(L) ;DestroyList(L) ;return 0 ;
}
/*
9787302257646 程序设计基础 2500
9787302164340 程序设计基础(第2版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787810827430 工业计算机控制技术原理与应用 29.00
9787811234923 汇编语言程序设计教程 21.00
0 0 0
*/

基于线性表的图书信息管理系统相关推荐

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

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

  2. 数据结构实验1《基于线性表的图书管理系统》

    数据结构实验1<基于线性表的图书管理系统> (visual studio 2019可运行) 输入及输出要求见<数据结构C语言(第二版)>严蔚敏版 [本文仅用于啥都看不懂还想交作 ...

  3. 数据结构 基于线性表的图书信息管理

    数据结构 基于线性表的图书信息管理 实验前的准备 IDE的选择 C语言中指针与结构体 实验目的 实验内容 1.基于顺序存储结构的图书信息表的创建和输出 代码 实验中遇到的问题 ① 实验中遇到的问题 ② ...

  4. C语言图书信息管理系统简单,线性表简单实现图书信息管理系统(C语言版)

    #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE ...

  5. 基于python的图书信息管理系统

    基于python的图书信息管理系统 实验任务和要求 设计并实现一个图书信息管理系统.根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能. 该系统至少包含以下功能: (1) 根据指定图 ...

  6. 基于顺序表的图书管理系统(C语言)

    Visual Studio编译环境 功能: 0.退出.             1.基于顺序存储结构的图书信息表的创建和输出.             2.基于顺序存储结构的图书信息表的新图书的入库. ...

  7. 基于顺序存储结构的图书信息表

    利用结构体数组模拟实现线性表 例题一 基于顺序存储结构的图书信息表的创建和输出 题目描述 定义一个包含图书信息(书号.书名.价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的 ...

  8. 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(一)】

    资源下载:https://download.csdn.net/download/weixin_44893902/34867237 练习点设计:模糊查询.删除.新增 一.语言和环境 1.实现语言:JAV ...

  9. 基于Eclipse+Java+Swing+Mysql图书信息管理系统

    基于Eclipse+Java+Swing+Mysql图书信息管理系统 一.系统介绍 二.功能展示 1.主页 2.新增图书信息 3.删除图书信息 三.数据库 四.其他系统实现 五.获取源码 一.系统介绍 ...

最新文章

  1. 属性处理器Spring攻略学习笔记(2.12)------外部化Bean配置
  2. 你还在使用 try-catch-finally 关闭资源?不太优雅~
  3. Python基础——PyCharm版本——第八章、文件I/O(核心3、csv和excel解析)
  4. Python之路【第二篇】:Python基础(一)
  5. java封装demo_java封装
  6. cmd模式下如何从c盘转换到其他盘
  7. 等待队列设备[置顶] Linux设备驱动,等待队列
  8. 基于Citespace和vosviewer的文献信息可视化分析技术
  9. 兼容最好的设为首页加入收藏代码
  10. 麦肯锡方法:解决问题的七个步骤
  11. Beautiful Soup4.2文档
  12. 基于Cubieboard2的静电测试仪开发
  13. 超分辨率技术:Adobe Photoshop与深度神经网络对比
  14. 微信 昵称带 表情存入mysql数据库
  15. linux 中文件批量重命名
  16. 用python爬取中国土地市场网上的土地出让公告所有标题
  17. 中国2019最有价值的科幻类影视游戏IP 网络科幻小说《公元2119年》、
  18. RISC-V调用惯例
  19. 基于ijkplayer封装ffmpeg播放器的录屏实现
  20. MSVC编译器Warnings手册

热门文章

  1. Java对数组对象进行排序
  2. gnu stubs arch linux,编译Nachos源代码时出现错误“gnu/stubs-32.h:No such file or directory”...
  3. Java课程设计税率_梁勇(Danniel Liang) java教材例题:java程序购买额按税率求营业税 java中数值保留2位小数的方法...
  4. c语言书面作业3,C语言程序设计
  5. cadence SPB17.4 - 从正常PCB文件反推原理图
  6. 4.4 day14 内置函数
  7. php百分比乘加,PHP学习笔记第一篇 基础知识
  8. 【HTML5】网页实用技巧3:将方形图片设置成圆形后,添加圆形虚线边框
  9. 【PHPWord】如何解决PHPWord的输出checkbox复选框并设置checked已勾选
  10. 微信更新,重点关注!