C++順序表實(shí)現(xiàn)圖書管理系統(tǒng)
本文為大家分享了C++順序表實(shí)現(xiàn)圖書管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
圖書信息表包括以下10項(xiàng)常用的基本操作:圖書信息表的創(chuàng)建和輸出、排序、修改、逆序存儲(chǔ)、最貴圖書的查找、最愛(ài)圖書的查找、最佳位置圖書的查找、新圖書的入庫(kù)、舊圖書的出庫(kù)、圖書去重。
代碼:
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
//函數(shù)結(jié)果狀態(tài)代碼
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//Status是函數(shù)返回值類型,其值是函數(shù)結(jié)果狀態(tài)代碼
typedef int Status;
#define MAXSIZE 100
struct BOOK
{
string ib;//isbn
string name;//名字
float price;//價(jià)格
};
typedef struct
{
BOOK *elem;//存儲(chǔ)空間的基地址
int length; //當(dāng)前長(zhǎng)度
} SqList;
//1、創(chuàng)建一個(gè)圖書信息表
Status CreateTheList(SqList &L)
{
L.elem = new BOOK[MAXSIZE];//為順序表分配一個(gè)大小為MAXSIZE的數(shù)組空間
if(!L.elem) exit(OVERFLOW);//存儲(chǔ)分配失敗退出
L.length = 0;//將長(zhǎng)度初始化為0
return OK;
}
//3.根據(jù)圖書價(jià)格對(duì)圖書信息表進(jìn)行降序排序
Status SortTheList(SqList &L)
{
//讓每一個(gè)數(shù)據(jù)與其后面的價(jià)格都進(jìn)行對(duì)比,若價(jià)格小于其后面的便進(jìn)行交換,以保證價(jià)格小的在后面
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<<"平均價(jià)格為:"<<ave<<endl;
//修改每本圖書的價(jià)格
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.實(shí)現(xiàn)該圖書信息表的逆序存儲(chǔ)
Status ReverseTheList(SqList &L)
{
//將第一個(gè)元素與最后一個(gè)交換位置,第二個(gè)與倒數(shù)第二個(gè)交換,以此類推
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<<"逆序存儲(chǔ)成功"<<endl;
}
//6.查找圖書信息表中最貴的圖書
Status TheExpensiveBook(SqList &L)
{
//先找最貴的價(jià)格
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<<"圖書最貴的價(jià)格為:"<<max<<endl;
//再遍歷圖書表尋找價(jià)格等于max的圖書并輸出
for(i=0;i<L.length;i++)
{
if(L.elem[i].price == max)
{
number++;
cout<<setiosflags(ios::fixed);//設(shè)置小數(shù)點(diǎn)的位數(shù)
cout<<L.elem[i].ib<<" "<<L.elem[i].name<<" "<<setprecision(2)<<L.elem[i].price<<endl;
}
}
cout<<"最貴的圖書數(shù)量為:"<<number<<endl;
}
//7.查找最愛(ài)的圖書
Status TheFavouriteBook(SqList &L)
{
int x;
cout<<"請(qǐng)輸入要查找的次數(shù):"<<endl;
cin>>x;//要找的書的數(shù)量
for(int i=1;i<=x;i++)
{
cout<<"請(qǐng)輸入要查找的書名:"<<endl;
string name1;
cin>>name1;//輸入書名
int number=0;//記錄與輸入的書名相同的書的數(shù)量
for(int j=0;j<L.length;j++)
{
if(L.elem[j].name == name1)
{
number++;
cout<<setiosflags(ios::fixed);//設(shè)置小數(shù)點(diǎn)的位數(shù)
cout<<L.elem[j].ib<<" "<<L.elem[j].name<<" "<<setprecision(2)<<L.elem[j].price<<endl;
}
}
if(number==0)
{
cout<<"抱歉,沒(méi)有你的最愛(ài)!"<<endl;
}
else
{
cout<<"第"<<i<<"次輸入的書名對(duì)應(yīng)的書有:"<<number<<"本"<<endl;
}
}
}
//8.查找最佳位置上的圖書
Status TheBestPosition(SqList &L)
{
int x;
cout<<"請(qǐng)輸入要查找的次數(shù):"<<endl;
cin>>x;//要查找的次數(shù)
for(int i=1;i<=x;i++)
{
cout<<"請(qǐng)輸入要查找的位置:"<<endl;
int pos;
cin>>pos;//輸入位置
if(pos<=0 || pos>L.length)
{
cout<<"抱歉,最佳位置上的圖書不存在!"<<endl;
}
else
{
cout<<setiosflags(ios::fixed);//設(shè)置小數(shù)點(diǎn)的位數(shù)
cout<<L.elem[pos-1].ib<<" "<<L.elem[pos-1].name<<" "<<setprecision(2)<<L.elem[pos-1].price<<endl;
}
}
}
//9.新圖書入庫(kù)
Status InsertABook(SqList &L)
{
cout<<"輸入要插入的位置:"<<endl;
int x;
cin>>x;//輸入要插入的位置
//判斷位置是否合法
if(x<1 || x>L.length+1)
{
cout<<"抱歉,入庫(kù)位置非法!"<<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;//表長(zhǎng)加一
cout<<"插入成功"<<endl;
}
}
//10.舊圖書出庫(kù)
Status DeleteABook(SqList &L,int x)
{
//判斷位置是否合法
if(x<1 || x>L.length)
{
cout<<"抱歉,出庫(kù)位置非法!"<<endl;
}
else
{
//被刪除元素之后的元素前移一位
for(int j=x;j<=L.length-1;j++)
{
L.elem[j-1]=L.elem[j];
}
L.length -=1;//表長(zhǎng)減一
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<<"(輸出刪除成功表示信息表中有重復(fù)的書籍存在)"<<endl;
}
//12.輸出圖書信息表
Status PrintTheList(SqList &L)
{
int i=0;
cout<<"圖書的數(shù)量為:"<<L.length<<endl;
for(;i<L.length;i++)
{
cout<<setiosflags(ios::fixed);//設(shè)置小數(shù)點(diǎn)的位數(shù)
cout<<L.elem[i].ib<<" "<<L.elem[i].name<<" "<<setprecision(2)<<L.elem[i].price<<endl;
}
}
int main()
{
SqList l;
while(true){
cout<<"歡迎使用圖書管理系統(tǒng)"<<endl;
cout<<"1.創(chuàng)建一個(gè)圖書信息表"<<endl;
cout<<"2.錄入圖書信息"<<endl;
cout<<"3.根據(jù)圖書價(jià)格對(duì)圖書信息表進(jìn)行降序排序"<<endl;
cout<<"4.修改圖書信息表,修改規(guī)則如下:"<<endl;
cout<<"計(jì)算所有圖書的平均價(jià)格,將所有低于平均價(jià)格的圖書價(jià)格提高20%,所有高于或等于平均價(jià)格的圖書價(jià)格提高10%,最后打印該表"<<endl;
cout<<"5.實(shí)現(xiàn)該圖書信息表的逆序存儲(chǔ)"<<endl;
cout<<"6.查找圖書信息表中最貴的圖書"<<endl;
cout<<"7.查找最愛(ài)的圖書"<<endl;
cout<<"8.查找最佳位置上的圖書"<<endl;
cout<<"9.新圖書入庫(kù)"<<endl;
cout<<"10.舊圖書出庫(kù)"<<endl;
cout<<"11.圖書信息表去重"<<endl;
cout<<"12.輸出圖書信息表"<<endl;
cout<<"13.退出系統(tǒng)"<<endl;
cout<<"請(qǐng)輸入您的選擇:"<<endl;
int x,i=0;
cin>>x;
switch(x){
case 1:
if(CreateTheList(l))
cout<<"創(chuàng)建成功"<<endl;
else
cout<<"創(chuàng)建失敗"<<endl;
cout<<"-------------------------------------------------------------"<<endl;
break;
case 2:
cout<<"請(qǐng)輸入圖書的信息:"<<endl;
while(true){
//輸入圖書的信息
string ib1;
cin>>ib1;
string name1;
cin>>name1;
float price1;
cin>>price1;
//判斷是不是輸入結(jié)束
if(ib1 =="0" && name1 =="0" && price1 == 0)
{
break;
}
//向后插入讀入的圖書信息
l.elem[i].ib = ib1;
l.elem[i].name = name1;
l.elem[i].price = price1;
i++;//圖書數(shù)量加一
}
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<<"輸入要?jiǎng)h除的書籍的位置:"<<endl;
int x;
cin>>x;//輸入要?jiǎng)h除的位置
DeleteABook(l,x);
cout<<"-------------------------------------------------------------"<<endl;
break;
case 11:
DeleteTheRepeat(l);
cout<<"-------------------------------------------------------------"<<endl;
break;
case 12:
PrintTheList(l);
cout<<"-------------------------------------------------------------"<<endl;
break;
case 13:
exit(0);
}
}
}
測(cè)試數(shù)據(jù):
9787302257646 程序設(shè)計(jì)基礎(chǔ) 25.00
9787302164340 程序設(shè)計(jì)基礎(chǔ)第二版 20.00
9787302219972 單片機(jī)技術(shù)及應(yīng)用 32.00
9787302219972 單片機(jī)技術(shù)及應(yīng)用 32.00
9787302203513 單片機(jī)原理與技術(shù)應(yīng)用 26.00
9787810827430 工業(yè)計(jì)算機(jī)控制技術(shù)原理與應(yīng)用 31.00
9787811234923 匯編語(yǔ)言程序設(shè)計(jì)教程 21.00
9787811234923 匯編語(yǔ)言程序設(shè)計(jì)教程 21.00
運(yùn)行結(jié)果:
創(chuàng)建與輸出

對(duì)圖書價(jià)格進(jìn)行降序排序

修改圖書價(jià)格

實(shí)現(xiàn)逆序存儲(chǔ)

查找最貴圖書

查找最愛(ài)的圖書

查找最佳位置的圖書

新圖書入庫(kù)


舊圖書出庫(kù)


圖書信息去重(根據(jù)ISBN去重)
去重前書籍信息

去重后

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C++實(shí)現(xiàn)簡(jiǎn)單的圖書管理系統(tǒng)
- C++實(shí)現(xiàn)圖書管理系統(tǒng)
- C++實(shí)現(xiàn)圖書管理系統(tǒng)課程設(shè)計(jì)
- C++實(shí)現(xiàn)圖書管理系統(tǒng)源碼
- C++編寫實(shí)現(xiàn)圖書管理系統(tǒng)
- C++實(shí)現(xiàn)圖書館管理系統(tǒng)
- C++實(shí)現(xiàn)圖書管理系統(tǒng)課程設(shè)計(jì)(面向?qū)ο?
- C++利用鏈表實(shí)現(xiàn)圖書信息管理系統(tǒng)
- C++實(shí)現(xiàn)圖書管理系統(tǒng)最新版
- C++實(shí)現(xiàn)簡(jiǎn)單版圖書管理系統(tǒng)
相關(guān)文章
C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)之連續(xù)存儲(chǔ)數(shù)組的算法
這篇文章主要介紹了C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)之連續(xù)存儲(chǔ)數(shù)組的算法的相關(guān)資料,需要的朋友可以參考下2017-01-01
C#如何調(diào)用原生C++ COM對(duì)象詳解
這篇文章主要給大家介紹了C#如何調(diào)用原生C++ COM對(duì)象,在C++中實(shí)現(xiàn)C#的接口。文中通過(guò)示例代碼介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)會(huì)有一定的參考借鑒價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2016-12-12
淺談Qt實(shí)現(xiàn)HTTP的Get/Post請(qǐng)求
本文主要介紹了淺談Qt實(shí)現(xiàn)HTTP的Get/Post請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05

