C++顺序表实现图书管理系统

本文为大家分享了C++顺序表实现图书管理系统的具体代码,供大家参考,具体内容如下

图书信息表包括以下10项常用的基本操作:图书信息表的创建和输出、排序、修改、逆序存储、最贵图书的查找、最爱图书的查找、最佳位置图书的查找、新图书的入库、旧图书的出库、图书去重。

代码:

#include<iostream>

#include<iomanip>

#include<string>

using namespace std;

//函数结果状态代码

#define OK 1

#define ERROR 0

#define OVERFLOW -2

//Status是函数返回值类型,其值是函数结果状态代码

typedef int Status;

#define MAXSIZE 100

struct BOOK

{

string ib;//isbn

string name;//名字

float price;//价格

};

typedef struct

{

BOOK *elem;//存储空间的基地址

int length; //当前长度

} SqList;

//1、创建一个图书信息表

Status CreateTheList(SqList &L)

{

L.elem = new BOOK[MAXSIZE];//为顺序表分配一个大小为MAXSIZE的数组空间

if(!L.elem) exit(OVERFLOW);//存储分配失败退出

L.length = 0;//将长度初始化为0

return OK;

}

//3.根据图书价格对图书信息表进行降序排序

Status SortTheList(SqList &L)

{

//让每一个数据与其后面的价格都进行对比,若价格小于其后面的便进行交换,以保证价格小的在后面

for(int i=0;i<L.length;++i)

{

for(int j=i+1;j<L.length;++j)

{

if(L.elem[i].price<L.elem[j].price)

{

BOOK temp;

temp=L.elem[i];

L.elem[i]=L.elem[j];

L.elem[j]=temp;

}

}

}

cout<<"排序成功"<<endl;

}

//4.修改图书信息表

Status ChangeTheList(SqList &L)

{

//求平均值

float total=0;

for(int i=0;i<L.length;i++)

{

total += L.elem[i].price;

}

float ave=total/L.length;

cout<<"平均价格为:"<<ave<<endl;

//修改每本图书的价格

for(int i=0;i<L.length;i++)

{

if(L.elem[i].price>ave)

L.elem[i].price *= 1.1;

else

L.elem[i].price *= 1.2;

}

cout<<"修改成功"<<endl;

}

//5.实现该图书信息表的逆序存储

Status ReverseTheList(SqList &L)

{

//将第一个元素与最后一个交换位置,第二个与倒数第二个交换,以此类推

for(int i=0;i<L.length/2;i++)

{

BOOK temp;

temp = L.elem[i];

L.elem[i] = L.elem[L.length-1-i];

L.elem[L.length-i-1] = temp;

}

cout<<"逆序存储成功"<<endl;

}

//6.查找图书信息表中最贵的图书

Status TheExpensiveBook(SqList &L)

{

//先找最贵的价格

float max=0;

int i,number=0;

for(i=0;i<L.length;i++)

{

if(L.elem[i].price>max)

max=L.elem[i].price;

}

cout<<"图书最贵的价格为:"<<max<<endl;

//再遍历图书表寻找价格等于max的图书并输出

for(i=0;i<L.length;i++)

{

if(L.elem[i].price == max)

{

number++;

cout<<setiosflags(ios::fixed);//设置小数点的位数

cout<<L.elem[i].ib<<" "<<L.elem[i].name<<" "<<setprecision(2)<<L.elem[i].price<<endl;

}

}

cout<<"最贵的图书数量为:"<<number<<endl;

}

//7.查找最爱的图书

Status TheFavouriteBook(SqList &L)

{

int x;

cout<<"请输入要查找的次数:"<<endl;

cin>>x;//要找的书的数量

for(int i=1;i<=x;i++)

{

cout<<"请输入要查找的书名:"<<endl;

string name1;

cin>>name1;//输入书名

int number=0;//记录与输入的书名相同的书的数量

for(int j=0;j<L.length;j++)

{

if(L.elem[j].name == name1)

{

number++;

cout<<setiosflags(ios::fixed);//设置小数点的位数

cout<<L.elem[j].ib<<" "<<L.elem[j].name<<" "<<setprecision(2)<<L.elem[j].price<<endl;

}

}

if(number==0)

{

cout<<"抱歉,没有你的最爱!"<<endl;

}

else

{

cout<<"第"<<i<<"次输入的书名对应的书有:"<<number<<"本"<<endl;

}

}

}

//8.查找最佳位置上的图书

Status TheBestPosition(SqList &L)

{

int x;

cout<<"请输入要查找的次数:"<<endl;

cin>>x;//要查找的次数

for(int i=1;i<=x;i++)

{

cout<<"请输入要查找的位置:"<<endl;

int pos;

cin>>pos;//输入位置

if(pos<=0 || pos>L.length)

{

cout<<"抱歉,最佳位置上的图书不存在!"<<endl;

}

else

{

cout<<setiosflags(ios::fixed);//设置小数点的位数

cout<<L.elem[pos-1].ib<<" "<<L.elem[pos-1].name<<" "<<setprecision(2)<<L.elem[pos-1].price<<endl;

}

}

}

//9.新图书入库

Status InsertABook(SqList &L)

{

cout<<"输入要插入的位置:"<<endl;

int x;

cin>>x;//输入要插入的位置

//判断位置是否合法

if(x<1 || x>L.length+1)

{

cout<<"抱歉,入库位置非法!"<<endl;

}

else

{

cout<<"输入要插入的图书信息:"<<endl;

string ib1;

cin>>ib1;

string name1;

cin>>name1;

float price1;

cin>>price1;

BOOK e;//e包含要插入的书的信息

e.ib = ib1;

e.name = name1;

e.price = price1;

//将插入位置之后的元素后移一位

for(int j=L.length-1;j>=x-1;j--)

{

L.elem[j+1]=L.elem[j];

}

L.elem[x-1]=e;//插入元素

L.length +=1;//表长加一

cout<<"插入成功"<<endl;

}

}

//10.旧图书出库

Status DeleteABook(SqList &L,int x)

{

//判断位置是否合法

if(x<1 || x>L.length)

{

cout<<"抱歉,出库位置非法!"<<endl;

}

else

{

//被删除元素之后的元素前移一位

for(int j=x;j<=L.length-1;j++)

{

L.elem[j-1]=L.elem[j];

}

L.length -=1;//表长减一

cout<<"删除成功"<<endl;

}

}

//11.图书信息表去重

Status DeleteTheRepeat(SqList &L)

{

int i,j;

for(i=0;i<L.length;i++)

{

for(j=i+1;j<L.length;j++)

{

if(L.elem[i].ib == L.elem[j].ib)

{

DeleteABook(L,j+1);

j=j-1;

}

}

}

cout<<"去重完成"<<endl;

cout<<"(输出删除成功表示信息表中有重复的书籍存在)"<<endl;

}

//12.输出图书信息表

Status PrintTheList(SqList &L)

{

int i=0;

cout<<"图书的数量为:"<<L.length<<endl;

for(;i<L.length;i++)

{

cout<<setiosflags(ios::fixed);//设置小数点的位数

cout<<L.elem[i].ib<<" "<<L.elem[i].name<<" "<<setprecision(2)<<L.elem[i].price<<endl;

}

}

int main()

{

SqList l;

while(true){

cout<<"欢迎使用图书管理系统"<<endl;

cout<<"1.创建一个图书信息表"<<endl;

cout<<"2.录入图书信息"<<endl;

cout<<"3.根据图书价格对图书信息表进行降序排序"<<endl;

cout<<"4.修改图书信息表,修改规则如下:"<<endl;

cout<<"计算所有图书的平均价格,将所有低于平均价格的图书价格提高20%,所有高于或等于平均价格的图书价格提高10%,最后打印该表"<<endl;

cout<<"5.实现该图书信息表的逆序存储"<<endl;

cout<<"6.查找图书信息表中最贵的图书"<<endl;

cout<<"7.查找最爱的图书"<<endl;

cout<<"8.查找最佳位置上的图书"<<endl;

cout<<"9.新图书入库"<<endl;

cout<<"10.旧图书出库"<<endl;

cout<<"11.图书信息表去重"<<endl;

cout<<"12.输出图书信息表"<<endl;

cout<<"13.退出系统"<<endl;

cout<<"请输入您的选择:"<<endl;

int x,i=0;

cin>>x;

switch(x){

case 1:

if(CreateTheList(l))

cout<<"创建成功"<<endl;

else

cout<<"创建失败"<<endl;

cout<<"-------------------------------------------------------------"<<endl;

break;

case 2:

cout<<"请输入图书的信息:"<<endl;

while(true){

//输入图书的信息

string ib1;

cin>>ib1;

string name1;

cin>>name1;

float price1;

cin>>price1;

//判断是不是输入结束

if(ib1 =="0" && name1 =="0" && price1 == 0)

{

break;

}

//向后插入读入的图书信息

l.elem[i].ib = ib1;

l.elem[i].name = name1;

l.elem[i].price = price1;

i++;//图书数量加一

}

l.length = i;

cout<<"录入完毕"<<endl;

cout<<"-------------------------------------------------------------"<<endl;

break;

case 3:

SortTheList(l);

cout<<"-------------------------------------------------------------"<<endl;

break;

case 4:

ChangeTheList(l);

cout<<"-------------------------------------------------------------"<<endl;

break;

case 5:

ReverseTheList(l);

cout<<"-------------------------------------------------------------"<<endl;

break;

case 6:

TheExpensiveBook(l);

cout<<"-------------------------------------------------------------"<<endl;

break;

case 7:

TheFavouriteBook(l);

cout<<"-------------------------------------------------------------"<<endl;

break;

case 8:

TheBestPosition(l);

cout<<"-------------------------------------------------------------"<<endl;

break;

case 9:

InsertABook(l);

cout<<"-------------------------------------------------------------"<<endl;

break;

case 10:

cout<<"输入要删除的书籍的位置:"<<endl;

int x;

cin>>x;//输入要删除的位置

DeleteABook(l,x);

cout<<"-------------------------------------------------------------"<<endl;

break;

case 11:

DeleteTheRepeat(l);

cout<<"-------------------------------------------------------------"<<endl;

break;

case 12:

PrintTheList(l);

cout<<"-------------------------------------------------------------"<<endl;

break;

case 13:

exit(0);

}

}

}

测试数据:

9787302257646  程序设计基础 25.00

9787302164340  程序设计基础第二版 20.00

9787302219972  单片机技术及应用 32.00

9787302219972  单片机技术及应用 32.00

9787302203513  单片机原理与技术应用 26.00

9787810827430  工业计算机控制技术原理与应用 31.00

9787811234923  汇编语言程序设计教程 21.00

9787811234923  汇编语言程序设计教程 21.00

运行结果:

创建与输出

对图书价格进行降序排序

修改图书价格

实现逆序存储

查找最贵图书

查找最爱的图书

查找最佳位置的图书

新图书入库

旧图书出库

图书信息去重(根据ISBN去重)

去重前书籍信息

去重后

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 C++顺序表实现图书管理系统 的全部内容, 来源链接: utcz.com/p/247364.html

回到顶部