本文主要是介绍数据结构课设实验一:图书信息管理系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
图书信息管理系统
实验内容
设计并实现一个图书信息管理系统。根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能。 该系统至少包含以下功能:
(1) 根据指定图书个数,逐个输入图书信息;
(2) 逐个显示图书表中所有图书的相关信息;
(3) 能根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置;
(4) 根据指定的待出库的旧图书的位置,将该图书从图书表中删除;
(5) 能统计表中图书个数;
(6) 实现图书信息表的图书去重;
(7) 实现最爱书籍查询,根据书名进行折半查找,要求使用非递归算法实现,成功返回此书籍的书号和价格;
(8) 图书信息表按指定条件进行批量修改;
(9) 利用快速排序按照图书价格降序排序;
(10) 实现最贵图书的查找;
实验提示
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 <vector>
#include <iomanip>
#include<algorithm>
using namespace std;typedef struct {string num;string name;double price;
}Book;class Library
{
public:vector<Book> order;void input();void print();void print0(int a);void binsert();void dele(int a);void dsame();void fav();void prisort(int low,int high);void modify();void expen();
};void Library::input()//录入图书信息
{cout << "请按顺序输入图书号、图书名与图书价格,末尾加上三个0:" << endl;string a, b;double c;cin >> a >> b >> c;while (a != "0" && b != "0" && c != 0){Book tmp;tmp.num = a;tmp.name = b;tmp.price = c;order.push_back(tmp);cin >> a >> b >> c;}
}void Library::print0(int a)//打印单本图书信息
{if (a >= order.size() || a < 0)cout << "没有这本书";elsecout << order[a].num <<" "<< order[a].name <<" "<< fixed << setprecision(2) << order[a].price << endl;
}void Library::print()//打印所有图书信息
{for (int i = 0; i < order.size(); i++) print0(i);cout << "--------------------------" << endl;
}void Library::binsert()//插入图书信息
{string a, b;double c;int d;cout << "请依次输入插入位置、书号、书名、价格" << endl;cin >> d >> a >> b >> c;if (d > order.size() || d <= 0){cout << "抱歉,入库位置非法!" << endl;}else{Book tmp;tmp.name = b;tmp.num = a;tmp.price = c;order.insert(order.begin() + d - 1, tmp);print();}
}void Library::dele(int a)//按序号出库某本图书
{if (a > order.size() || a <= 0){cout << "出库失败,未找到该图书!" << endl;}else{order.erase(order.begin() + a - 1);}
}void Library::dsame()//去重
{cout << "执行去重" << endl;for (int i = 0; i < order.size(); i++){for (int j = i + 1; j < order.size(); j++)if (order[i].num == order[j].num){dele(j + 1);j--;}}cout<<order.size()<<endl;print();
}void Library::fav()//查找最爱图书
{cout << "请输入最爱图书的名字:" << endl;string n;cin >> n;int a = 0;bool b = 1;for (int i = 0; i < order.size(); i++)if (order[i].name == n){a++;b = 0;print0(i);}cout << "找到了" << a << "本最爱书籍" << endl;if (b) cout << "抱歉,没有你的最爱!" << endl;
}void Library::prisort(int low,int high)//按价格从高到低排序
{if (low < high){int i = low;int j = high;Book tmp = order[i];while (i < j){while (i < j && order[j].price <= tmp.price){j--;}if (i < j){order[i] = order[j];}while (i < j && order[i].price >= tmp.price){i++;}if (i < j){order[j] = order[i];}}order[i] = tmp;prisort(low, i - 1);prisort(i + 1, high);}
}void Library::modify()//对所有图书信息操作
{double ave = 0;double sum = 0;for (int i = 0; i < order.size(); i++)sum += order[i].price;ave = sum / order.size();for (int i = 0; i < order.size(); i++)order[i].price = order[i].price > ave ? order[i].price * 1.1 : order[i].price * 1.2;print();
}void Library::expen()//打印最贵图书
{prisort(0, order.size() - 1);for (int i = 0; i < order.size(); i++){if (order[i].price == order[0].price){print0(i);}}
}int main()
{Library test;int flag = 1;while (flag){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;cout << "10.查找最贵图书" << endl;cout << "0.退出程序" << endl;cin >> flag;if (flag == 1){cout << endl;test.input();cout << endl;}if (flag == 2){cout << endl;cout << test.order.size() << endl;test.print();cout << endl;}if (flag == 3){cout << endl;test.binsert();cout << endl;}if (flag == 4){cout << endl;cout << "请输入要删除图书的位置" << endl;int a;cin >> a;cout << endl;test.dele(a);test.print();cout << endl;}if (flag == 5) cout << endl << "库中当前共有" << test.order.size() << "本图书" << endl;if (flag == 6){cout << endl;test.dsame();cout << endl;}if (flag == 7){cout << endl;test.fav();cout << endl;}if (flag == 8){cout << endl;test.modify();cout << endl;}if (flag == 9){cout << endl;test.prisort(0, test.order.size() - 1);test.print();cout << endl;}if (flag == 10){cout << endl;test.expen();cout << endl;}}return 0;
}
/*
9787302257646 程序设计基础 25.00
9787302164340 程序设计基础(第2版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787302164340 程序设计基础(第2版) 20.00
9787810827430 工业计算机控制技术——原理与应用 29.00
9787811234923 汇编语言程序设计教程 32.00
0 0 0
*///1234567890123 众神之父赐予我重伤倒地 33.00
实验结果
这篇关于数据结构课设实验一:图书信息管理系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!