数据结构课程设计---图书管理系统
一、图书信息管理系统的设计与实现
(一)实验内容
设计并实现一个图书信息管理系统。根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能。 该系统至少包含以下功能:
- 根据指定图书个数,逐个输入图书信息;
- 逐个显示图书表中所有图书的相关信息;
- 能根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置;
- 根据指定的待出库的旧图书的位置,将该图书从图书表中删除;
- 能统计表中图书个数;
- 实现图书信息表的图书去重;
- 实现最爱书籍查询,根据书名进行折半查找,要求使用非递归算法实现,成功返回此书籍的书号和价格;
- 图书信息表按指定条件进行批量修改;
- 利用快速排序按照图书价格降序排序;
- 实现最贵图书的查找;
(二)实验目的
- 了解并掌握数据结构和算法设计的方法,具备初步的独立分析和设计能力
- 初步掌握软件开发过程的问题分析分析、系统设计、程序编码和测试等基本方法和技能。
- 提高综合运用所学的理论知识和方法,独立分析和解决问题的能力。
- 训练用系统的观点和软件开发一般规范进行软件的开发,培养软件工作着所具备的科学工作方法和作风
( 三 ) 实验要求
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行是去重后图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。
(四)实验思路
图书信息、顺序表、链表的定义
图书信息的定义: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;
class bookSystem
{
private:book Book[100];int length;
public:bookSystem();~bookSystem(); void input(int book_num);//输入图书信息void print_all();//显示图书的相关信息 int getlength()//统计表中图数个数void insert(book a);//指定位置插入void bookDelete(int pos);//删除图书信息void bookDeletethesame();//去重void downSort(int left,int right);//降序排序void findFavorite(string Name);//查找最爱书籍void findmostExpensive();//查找最贵书籍
}
1.输入图书信息
void bookSystem::input(int book_num){for (int i = 0; i < book_num; i++){cout << "请输入书号:";cin >> Book[length + i].no; cout << endl;cout << "请输入书名:";cin >> Book[length + i].name; cout << endl;cout << "请输入书的价格:";cin >> Book[length + i].price; cout << endl; }length = length + book_num;
}
2.插入图书信息
void bookSystem::insert(int pos){int Pos = pos - 1;if (Pos<0 || pos>100)cout << "位置错误" << endl;else{if (length >= 100)cout << "溢出" << endl;else{if (pos >= length){cout << "请输入书号:";cin >> Book[length].no; cout << endl;cout << "请输入书名:";cin >> Book[length].name; cout << endl;cout << "请输入价格:";cin >> Book[length].price; cout << endl;length++;}else{for (int i = length; i >= Pos; i--){Book[i] = Book[i - 1];}cout << "请输入书号:";cin >> Book[Pos].no; cout << endl;cout << "请输入书名:";cin >> Book[Pos].name; cout << endl;cout << "请输入价格:";cin >> Book[Pos].price; cout << endl;length++;}}}
}
3.删除图书
void bookSystem::bookDelete(int pos){ if (length == 0)cout << "没有图书可以删除" << endl;else{if (pos <= 0 || pos >= length)cout << "该图书不存在" << endl;else{cout << "删除:" << Book[pos - 1].no << " " << Book[pos - 1].name << " " << fixed << setprecision(2) << Book[pos - 1].price << endl;for (int i = pos - 1; i < length - 1; i++){Book[i] = Book[i + 1];}length--;}}
}
4.去重
void bookSystem::bookDeletethesame(){book temp[100];int a = length;int temp_len = 0;for (int x = 0; x < length; x++){bool flag=0;for (int y = 0; y < temp_len + 1; y++){if (Book[x].no == temp[y].no){flag = 1;break;}else{flag = 0;continue;}}if (flag == 1){cout << Book[x].no << " " << Book[x].name << " " << fixed << setprecision(2) << Book[x].price << endl;continue;}else{temp[temp_len] = Book[x];++temp_len;}}length = temp_len;for (int i = 0; i < length; i++){Book[i] = temp[i];}for (int i = length; i < a; i++){bookDelete(i);
}
5.寻找最爱书籍
void bookSystem::findFavorite(string Name){int count=0;//最爱书籍的数目book temp[100];for (int i = 0; i < length; i++){if (Book[i].name == Name){temp[i] = Book[i];++count;}}if (count == 0)cout << "抱歉,没有找到你的最爱书籍" << endl;else{cout << "找到" << count << "本" << endl;for (int i = 0; i < count; i++){cout << temp[i].no << " " << temp[i].name << " " << fixed << setprecision(2) << temp[i].price << endl;}}}
6.按价格降序排序
void bookSystem::downSort(int left,int right){if (left >= right)return;book base = Book[left];book temp;int i = left, j = right;while (i<j){while (Book[j].price >= base.price&&i<j)j--;while (Book[i].price <= base.price&&i<j)i++;if (i<j){temp = Book[j];Book[j] = Book[i];Book[i] = temp;}}Book[left] = Book[i];Book[i] = base; downSort( left, i - 1);downSort( i + 1, right);
}
7.查找最贵书籍
void bookSystem::findmostExpensive(){book findmostExpensive() = Book[0];for (int i = 1; i < length; i++){if (Book[i].price >= findmostExpensive().price)findmostExpensive() = Book[i];elsecontinue;}cout << "最贵:" << findmostExpensive().no << " " << findmostExpensive().name << " " << fixed << setprecision(2) << findmostExpensive().price << endl;
}
数据结构课程设计---图书管理系统相关推荐
- 数据结构课程设计图书管理系统,C语言版。
目录 一.功能描述 二.设计要求 三.实现的功能 四.代码 一.功能描述 设计一个图书管理程序满足图书馆基本业务需求. 二.设计要求 每种书的登记内容包括书号.书名.著作者.现存量和库存量等: 对书号 ...
- 数据结构课程设计--图书管理系统
//主函数模块#include "library.h" int main() {FILE *fp_book,*fp_reader; /*创建文件型指针*/Denglu();if(( ...
- c语言课程设计图书管理系统
数据结构c语言课程设计 图书管理系统 我做的是百度文库的第28题,目前没有报错,正常运行,但是还有一点小bug.代码很多地方写的不是很好,请多多包涵. 账号1,密码1,为管理员账号:其他账号2,3,4 ...
- RFID课程设计-图书管理系统用户端设计
RFID课程设计-图书管理系统用户端设计课程设计题目课程设计任务内容题目设计基本原理NFC开发概述标签调度系统如何将 NFC 标签映射到 MIME 类型和 URI如何将 NFC 标签分发到应用在 An ...
- oracle课程设计图书销售系统,oracle课程设计图书管理系统
oracle课程设计图书管理系统 数据库课程设计 设计名称:图书管理系统 组员:尚靖伟(122068) 张红凯(122072) 班级:计 G121 班信息工程学院计算机系 2013 年 6 月 27 ...
- java数据结构通讯录管理系统_数据结构课程设计—通讯录管理系统
浊贤平鲁冠城美华道钉.内急顺美兴华品红缺点清屏!车组悬吊嗉囊沥胆情愿,城东兴荣规划管涌铺板?轻奏便装壳菜蓝坛卵石数据结构课程设计-通讯录管理系统.缪斯朝圣美金放下隆暑路权. 当年绸巾登封轮滑殴伤调理电 ...
- python通讯录管理系统设计_数据结构课程设计-通讯录管理系统(C语言版)
##数据结构课程设计-通讯录管理系统 一,前言 自从上次C语言课设写完后,这次数据结构课设就写的游刃有余了,很快啊,不足三天就写完了它(年轻人不讲武德),如果你认真看过我之前写的C语言课程设计-球队管 ...
- 数据结构课程设计—同学录管理系统(c语言)
数据结构课程设计-同学录管理系统(c语言) 文章目录 前言 一.需求分析 二.总体设计 三.代码实现 四.代码说明 前言 计算机相关专业在学习数据结构这门课程时会有课程设计,我被分配到的是同学录管理系 ...
- C#课程设计-图书管理系统
C#课程设计-图书管理系统 前言 一.课设任务是什么? 二.使用工具及软件环境 三.系统功能介绍及部分代码展示 3.1 登陆界面及主要代码 3.2 图书管理 3.3 修改书籍页面视图及主要代码 四.使 ...
- Python课程设计-图书管理系统
Python课程设计-图书管理系统 摘要 第一章 绪论 1.1 开发环境及技术 1.2 系统实现功能描述 第二章 功能详细设计与实现 2.1 系统框架各层次实现 2.1.1 可视页面设计 2 数据库设 ...
最新文章
- 读csapp有感:大端法,小端法
- 安卓最好用的浏览器_iOS最好用的浏览器,没有之一!
- 巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!
- 数据结构:循环链表解决约瑟夫问题
- SAP:查找某个请求号的传输者是谁
- 【.NET基础】--委托、事件、线程(2)
- 3D打印技术在医疗领域能做些什么?帮助精确完成手术
- 【Julia】ERROR: UndefVarError: linspace not defined
- 二.激光SLAM框架学习之A-LOAM框架---介绍及其演示
- Leetcode每日一题:141.linked-list-cycle(环形链表)
- java多线程-线程安全
- 设计一个程序,完成(英雄)商品的购买(界面就是第一天打印的界面) 展示商品信息(折扣)->输入商品价格->输入购买数量->提示付款 输入付款金额->打印购买小票
- fdisk 创建和维护磁盘分区命令(MBR分区方案)
- win10下安装Jekyll(rubyinstaller-devkit)
- 老码识途——1.1反汇编机器码入门
- ssdp java_SSDP协议的Android实现以及使用
- java 定时任务假死 定时任务阻塞 线程池消失
- SpringCloud Tencent 全套解决方案
- 自己为什么活着,活着的意义是什么?
- 基于区块链的学生课程成绩查询系统
热门文章
- 学生签到系统c代码_C++实现简单的学生管理系统
- linux全局启动tomcat,linux下启动tomcat服务
- 参加Oracle OCP和MySQL OCP考试的学员怎样在VUE预约考试
- WEB前端视频教程网站推荐
- 最新全套Web前端视频教程
- hfss螺旋平面_微波射频网HFSS平面螺旋天线设计
- 【hadoop系列】Hadoop HDFS命令
- openwrt编译qca驱动不成功。gcc -isystem问题。
- su室内插件_SketchUp必学插件TOP100,每一个都是[室内/装饰/景观]设计的效率神器...
- Oracle查看表空间使用率