基于线性表的图书信息管理系统
基于线性表的图书信息管理系统
【实验目的】
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《基于线性表的图书管理系统》
数据结构实验1<基于线性表的图书管理系统> (visual studio 2019可运行) 输入及输出要求见<数据结构C语言(第二版)>严蔚敏版 [本文仅用于啥都看不懂还想交作 ...
- 数据结构 基于线性表的图书信息管理
数据结构 基于线性表的图书信息管理 实验前的准备 IDE的选择 C语言中指针与结构体 实验目的 实验内容 1.基于顺序存储结构的图书信息表的创建和输出 代码 实验中遇到的问题 ① 实验中遇到的问题 ② ...
- C语言图书信息管理系统简单,线性表简单实现图书信息管理系统(C语言版)
#include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE ...
- 基于python的图书信息管理系统
基于python的图书信息管理系统 实验任务和要求 设计并实现一个图书信息管理系统.根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能. 该系统至少包含以下功能: (1) 根据指定图 ...
- 基于顺序表的图书管理系统(C语言)
Visual Studio编译环境 功能: 0.退出. 1.基于顺序存储结构的图书信息表的创建和输出. 2.基于顺序存储结构的图书信息表的新图书的入库. ...
- 基于顺序存储结构的图书信息表
利用结构体数组模拟实现线性表 例题一 基于顺序存储结构的图书信息表的创建和输出 题目描述 定义一个包含图书信息(书号.书名.价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的 ...
- 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(一)】
资源下载:https://download.csdn.net/download/weixin_44893902/34867237 练习点设计:模糊查询.删除.新增 一.语言和环境 1.实现语言:JAV ...
- 基于Eclipse+Java+Swing+Mysql图书信息管理系统
基于Eclipse+Java+Swing+Mysql图书信息管理系统 一.系统介绍 二.功能展示 1.主页 2.新增图书信息 3.删除图书信息 三.数据库 四.其他系统实现 五.获取源码 一.系统介绍 ...
最新文章
- 属性处理器Spring攻略学习笔记(2.12)------外部化Bean配置
- 你还在使用 try-catch-finally 关闭资源?不太优雅~
- Python基础——PyCharm版本——第八章、文件I/O(核心3、csv和excel解析)
- Python之路【第二篇】:Python基础(一)
- java封装demo_java封装
- cmd模式下如何从c盘转换到其他盘
- 等待队列设备[置顶] Linux设备驱动,等待队列
- 基于Citespace和vosviewer的文献信息可视化分析技术
- 兼容最好的设为首页加入收藏代码
- 麦肯锡方法:解决问题的七个步骤
- Beautiful Soup4.2文档
- 基于Cubieboard2的静电测试仪开发
- 超分辨率技术:Adobe Photoshop与深度神经网络对比
- 微信 昵称带 表情存入mysql数据库
- linux 中文件批量重命名
- 用python爬取中国土地市场网上的土地出让公告所有标题
- 中国2019最有价值的科幻类影视游戏IP 网络科幻小说《公元2119年》、
- RISC-V调用惯例
- 基于ijkplayer封装ffmpeg播放器的录屏实现
- MSVC编译器Warnings手册
热门文章
- Java对数组对象进行排序
- gnu stubs arch linux,编译Nachos源代码时出现错误“gnu/stubs-32.h:No such file or directory”...
- Java课程设计税率_梁勇(Danniel Liang) java教材例题:java程序购买额按税率求营业税 java中数值保留2位小数的方法...
- c语言书面作业3,C语言程序设计
- cadence SPB17.4 - 从正常PCB文件反推原理图
- 4.4 day14 内置函数
- php百分比乘加,PHP学习笔记第一篇 基础知识
- 【HTML5】网页实用技巧3:将方形图片设置成圆形后,添加圆形虚线边框
- 【PHPWord】如何解决PHPWord的输出checkbox复选框并设置checked已勾选
- 微信更新,重点关注!