100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 预习:图书信息管理系统的设计与实现

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

时间:2023-10-06 01:33:17

相关推荐

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

(一)实验内容

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

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

(二)实现方案

1.基于顺序存储/链式存储结构的图书信息表的创建和输出

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

输入

输入n+1行,其中前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:00 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行是输入结束标志:00 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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。