導航:首頁 > 編程語言 > 圖書編程怎麼編

圖書編程怎麼編

發布時間:2025-08-11 21:41:35

Ⅰ C++編程題,在線求解!!!

/*


1、定義一個媒體Media類

2、它有兩個派生類:圖書Book類、光碟CD類

3、其中,圖書有名稱、銷售數量、ISBN編號等屬性

4、光碟有名稱、銷售數量、製作方等屬性

5、要求:

1)設計上述三個類的相關屬性;

2)利用多態性的概念,分別以虛函數的形式完成對圖書和光碟信息的顯示

3)編寫一個普通函數f(),顯示出銷售數量超過1000的圖書和光碟

4)在main函數中進行測試。


*/

#include <vector>

#include <string>

#include <iostream>

using namespace std;


class Media

{

public:

Media(){};

~Media(){};

virtual void Init(string name, int number)

{

m_Name = name;

m_Number = number;

};

virtual int GetNumber()

{

return m_Number;

}

virtual void Display()

{

cout<<"name: "<<m_Name<<endl;

cout<<"namber: "<<m_Number<<endl;

}

protected:

string m_Name;

int m_Number;

};


class Book : public Media

{

public:

Book(){};

~Book(){};

void Init(string name, int number, string ISBN)

{

Media::Init(name, number);

m_ISBN = ISBN;

};

void Display()

{

Media::Display();

cout<<"ISBN: "<<m_ISBN<<endl;

}

private:

string m_ISBN;

};


class CD : public Media

{

public:

CD(){};

~CD(){};

void Init(string name, int number, string Author)

{

Media::Init(name, number);

m_Author = Author;

};

void Display()

{

Media::Display();

cout<<"author: "<<m_Author<<endl;

}

private:

string m_Author;

};


int main()

{

// 添加書籍和光碟

Book *b1 = new Book();

Book *b2 = new Book();

Book *b3 = new Book();

b1->Init("book1", 100, "ISBN100");

b2->Init("book2", 1000, "ISBN1000");

b3->Init("book3", 10000, "ISBN10000");


CD *cd1 = new CD;

CD *cd2 = new CD;

CD *cd3 = new CD;

cd1->Init("cd1", 100, "author100");

cd2->Init("cd2", 1000, "author1000");

cd3->Init("cd3", 10000, "author10000");


vector<Media *> vectMedia;

vectMedia.push_back(b1);

vectMedia.push_back(b2);

vectMedia.push_back(b3);

vectMedia.push_back(cd1);

vectMedia.push_back(cd2);

vectMedia.push_back(cd3);


// 顯示部分(銷售數量大於1000)

for (int i=0; i<vectMedia.size(); i++)

{

if (vectMedia[i]->GetNumber() >= 1000)

{

cout<<"》》》銷售量大於1000的書籍或光碟《《《"<<endl;

vectMedia[i]->Display();

}

}


return 0;

}


// 運行效果見圖示

Ⅱ C語言編程

C++的行不?
等等,要菜單??就是說要支持MFC??
要是您不嫌棄,就先試試這個吧,手頭上只有這個了。

#include <string>//字元串頭文件
#include <fstream>//文件頭文件
#include <iostream>//是指標准庫中輸入輸出流的頭文件using namespace std;//使用名字空間std
const int BMAX=50; //書最多個數

//圖書管理模塊

//圖書類
class book
{
public:
int no; //圖書編號
char name[20]; //圖書名稱
int b_flag; //1為在架,2為借出
int b_del; //1為存在, 2為刪除
public :
book(){} //構造函數
void setno(int n)
{
no=n; //圖書編號取值
}
int getno()
{
return no; //返回圖書編號值
}
void setname(char na[])
{
strcpy(name, na); //字元串復制
}
char* getname()
{
return name; //返回圖書名稱
}
void borbook()
{
b_flag=2; //借書標志
}
void delbook()
{
b_del=2; //刪除標志
}
void addbook(int no,char na[]) //增加圖書功能
{
setno(no);
setname(na);
b_flag=1;
b_del=1;
}
}
;
//圖書資料庫類

class bdatabase
{
public:
book btarray[BMAX]; //圖書集合
int top;
public:
bdatabase()
{

book b;
top=-1;
fstream file("book.txt",ios::in); //打開文件
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
btarray[top] = b;
}
file.close(); //關閉文件
}

~bdatabase() //析構函數, 將btarray[]寫到book.txt文件中
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
{
if (btarray[i].b_del==1)
file.write((char *)&btarray[i],sizeof(btarray[i]));
}
file.close();
}

void addbooks() //往圖書資料庫中加圖書
{
book bk;
int no;
char bname[20];
cout<<"請輸入書號: ";
cin>>no;
cout<<endl<<"請輸入書名: ";
cin>>bname;
cout<<endl;
bk.b_flag=1;
bk.addbook(no, bname);
top++;
btarray[top]=bk;
return;
}

int findbooks(int suffix) //查找圖書,這個函數用於借書這書操作,suffix是數組下標
{
int no;
cout<<"請輸入書號: ";
cin>>no;
for(int i=0; i<=top; i++)
{
if(btarray[i].no==no && btarray[i].b_del==1)
{
return i;
}
}
return -1;
}

int findbooks() //查找圖書,這個函數用於圖書維護
{
int no;
char value[6];
cout<<"請輸入書號: ";
cin>>no;
for(int i=0; i<=top; i++)
{
if(btarray[i].no==no && btarray[i].b_del==1)
{
if(btarray[i].b_flag==1) strcpy(value,"在架");
if(btarray[i].b_flag==2) strcpy(value,"借出");
cout<<"書號: "<<btarray[i].no<<" 書的名稱: "<<btarray[i].name<<" 圖書狀態 :"<<value<<endl;
return i;
}
}
return -1;
}

void editbooks() //編輯圖書
{
int cur;
cur = findbooks();
if (cur==-1)
{ cout<<"沒有這本書"<<endl;
return;
}
cout<<"書號: "<<btarray[cur].no<<" 書的名稱: "<<btarray[cur].name<<endl;
cout<<"請修改數據:"<<endl;
cout<<endl<<"書的名稱: ";
cin>>btarray[cur].name;
return ;
}

void delbooks() //刪除圖書
{
int cur;
cur = findbooks();
if (cur==-1)
{
return;
}
if(btarray[cur].b_flag==2) //刪除時判斷圖書是否借出
{
cout<<"該圖書已經借出,請在歸還後再刪除。"<<endl;
return;
}
btarray[cur].b_del=2;
return;
}

void listbooks() //顯示全部圖書
{
char value[6];
for(int i=0; i<=top; i++)
{

if(btarray[i].b_del==1)
{
if(btarray[i].b_flag==1) strcpy(value,"在架");
if(btarray[i].b_flag==2) strcpy(value,"借出");
cout<<"書號: "<<btarray[i].no<<" 書的名稱: "<<btarray[i].name<<" 圖書狀態 :"<<value<<endl;
}
}
return;
}
}
;
//讀者管理模塊
//讀者類
class reader
{
public:
int no;
char name[20];
int r_del; //1存在,2刪除
int r_bor; //1借過書,2沒有借書
book brbook;
public:
void addreader(int id, char na[])//增加讀者
{
no = id;
strcpy(name, na);
r_del=1;
}
void setbrbook(book bt) //設置借書標記
{
brbook = bt;
}

book getbrbook()
{
return brbook; //返回借書信息
}
};
//讀者資料庫類
class rdatabase
{
public:
reader rdarray[BMAX];
int top;

public:
rdatabase()
{
reader rd;
top=-1;
fstream file("reader.txt",ios::in); //打開文件
while (1)
{
file.read((char *)&rd,sizeof(rd));
if (!file) break;
top++;
rdarray[top]=rd;
}
file.close(); //關閉文件
}

~rdatabase()//析構函數
{
fstream file("reader.txt",ios::out);
for (int i=0;i<=top;i++)
{
if (rdarray[i].r_del==1)
file.write((char *)&rdarray[i],sizeof(rdarray[i]));
}
file.close();
}

void addreaders() //添加讀者
{
reader rd;
int no;
char rname[20];
cout<<"請輸入學號: ";
cin>>no;
cout<<endl<<"請輸入姓名: ";
cin>>rname;
cout<<endl;
rd.addreader(no, rname);
rd.r_bor=2;
top++;
rdarray[top]=rd;
return;
}
int findreaders(int suffix) //查找讀者,這個函數用於借書還書操作。 參數suffix是數組下標
{
int no;
cout<<"請輸入學號: ";
cin>>no;
for(int i=0; i<=top; i++)
{
if(rdarray[i].no==no && rdarray[i].r_del==1)
{
return i;
}
}
return -1;

}
int findreaders() //查找讀者,這個函數用於讀者維護操作
{
int no;
char value[3];
cout<<"請輸入學號: ";
cin>>no;
for(int i=0; i<=top; i++)
{
if(rdarray[i].no==no && rdarray[i].r_del==1)
{
if(rdarray[i].r_bor==1) strcpy(value,"借");
if(rdarray[i].r_bor==2) strcpy(value,"無");
cout<<"學號: "<<rdarray[i].no<<" 姓名: "<<rdarray[i].name<<" 是否借書: "<<value<<endl;
return i;
}
}
return -1;
}
void editreaders() //編輯讀者信息
{

int cur;
cur = findreaders();
if (cur==-1)
{ cout<<"沒有該學生"<<endl;
return;
}
cout<<"請修改數據:"<<endl;
cout<<endl<<" 姓名: ";
cin>>rdarray[cur].name;
return ;
}
void delreaders() //刪除讀者,讀者如果借書要還書後才能刪除
{
int cur;
cur = findreaders();
if (cur==-1)
{
return;
}
if(rdarray[cur].r_bor==1)
{
cout<<"該用戶借了圖書,請還書後再刪除"<<endl;
return;
}
rdarray[cur].r_del=2;
return;
}
void listreaders() //顯示所有讀者
{
char value[3];
for(int i=0; i<=top; i++)
{

if(rdarray[i].r_del==1)
{
if(rdarray[i].r_bor==1) strcpy(value,"借");
if(rdarray[i].r_bor==2) strcpy(value,"無");
cout<<"學號: "<<rdarray[i].no<<" 姓名: "<<rdarray[i].name<<" 是否借書: "<<value<<endl;
}
}
return;
}

}
;

void bookjiemain() //圖書維護子菜單
{
cout<<"|---------------------|"<<endl;
cout<<"| 圖書維護 |"<<endl;
cout<<"| (1)增 加 |"<<endl;
cout<<"| (2)更 改 |"<<endl;
cout<<"| (3)刪 除 |"<<endl;
cout<<"| (4)查 找 |"<<endl;
cout<<"| (5)顯 示 |"<<endl;
cout<<"| (6)返回上一層 |"<<endl;
cout<<"|---------------------|"<<endl;
}

void readerjiemian() //讀者維護子菜單
{
cout<<"|---------------------|"<<endl;
cout<<"| 讀者維護 |"<<endl;
cout<<"| (1)增 加 |"<<endl;
cout<<"| (2)更 改 |"<<endl;
cout<<"| (3)刪 除 |"<<endl;
cout<<"| (4)查 找 |"<<endl;
cout<<"| (5)顯 示 |"<<endl;
cout<<"| (6)返回上一層 |"<<endl;
cout<<"|---------------------|"<<endl;
}

void mainjiemian() //主界面
{
cout<<"***********************************************"<<endl;
cout<<"* 圖 書 管 理 系 統 *"<<endl;
cout<<"* *"<<endl;
cout<<"* (1) 借 書 *"<<endl;
cout<<"* *"<<endl;
cout<<"* (2) 還 書 *"<<endl;
cout<<"* *"<<endl;
cout<<"* (3) 圖書管理 *"<<endl;
cout<<"* *"<<endl;
cout<<"* (4) 用戶管理 *"<<endl;
cout<<"* *"<<endl;
cout<<"* (0) 退 出 *"<<endl;
cout<<"***********************************************"<<endl;
}

void borrowtoreturn(char br)
//借書還書函數.參數br用來判斷是「借書」還是「還書」.1為「借書」,2為「還書」
{
int rdid=0;
int bkid=0;
int rsuffix, bsuffix;
bdatabase t_bd;
rdatabase t_rd;
if(br=='1') //借書
{
rsuffix=t_rd.findreaders(rdid);
bsuffix=t_bd.findbooks(bkid);
if (rsuffix==-1 || bsuffix==-1)
return;
if(t_bd.btarray[bsuffix].b_flag==2)
{
cout<<"圖書已經借出,請選擇其它圖書"<<endl;
return;
}
if(t_rd.rdarray[rsuffix].r_bor==1)
{
cout<<"你已經借過圖書,請先歸還再借其它圖書"<<endl;
return;
}
t_bd.btarray[bsuffix].b_flag=2;
t_rd.rdarray[rsuffix].r_bor=1;
t_rd.rdarray[rsuffix].brbook=t_bd.btarray[bsuffix];
return;

}
if(br=='2')
{
rsuffix=t_rd.findreaders(rdid);
bsuffix=t_bd.findbooks(bkid);
if (rsuffix==-1 || bsuffix==-1 )
return;

if(t_rd.rdarray[rsuffix].brbook.no==t_bd.btarray[bsuffix].no)
{
t_bd.btarray[bsuffix].b_flag=1;
t_rd.rdarray[rsuffix].r_bor=2;
t_rd.rdarray[rsuffix].brbook=t_bd.btarray[bsuffix];
}
else
{
cout<<"請重新輸入,讀者借的圖書號不正確"<<endl;
return;
}
return;
}
}

void booksmange()
{
char in;
bdatabase bd;
do{
bookjiemain();
cin>>in;
switch (in)
{
case '1':
bd.addbooks();
break;
case '2':
bd.editbooks();
break;
case '3':
bd.delbooks();
break;
case '4':
bd.findbooks();
break;
case '5':
bd.listbooks();
break;
case '6':
break;
default:cout<<"輸入錯誤,請從新輸入。"<<endl;;
}
}while(in!='6');
return;
}

void readersmange()
{
char in;
rdatabase bd;
do{
readerjiemian();
cin>>in;
switch (in)
{
case '1':
bd.addreaders();
break;
case '2':
bd.editreaders();
break;
case '3':
bd.delreaders();
break;
case '4':
bd.findreaders();
break;
case '5':
bd.listreaders();
break;
case '6':
break;
default:cout<<"輸入錯誤,請從新輸入。"<<endl;
}
}while(in!='6');
return;

}

int main(int argc, char* argv[])
{ char in;
do{
mainjiemian();
cin>>in;
switch (in)
{
case '1':
borrowtoreturn(in);
break;
case '2':
borrowtoreturn(in);
break;
case '3':
booksmange();
break;
case '4':
readersmange();
break;
case '0':
break;
default:cout<<"輸入錯誤,請從新輸入。"<<endl;
}
}while(in!='0');
return 0;
}

閱讀全文

與圖書編程怎麼編相關的資料

熱點內容
cmd命令行通配符 瀏覽:511
什麼app買菜便宜 瀏覽:804
數控電火花線切割機床編程 瀏覽:355
程序員那麼可愛陸漓扮男裝被發現 瀏覽:165
解壓好的刷機包怎麼安裝 瀏覽:632
pdf怎樣轉換為jpg 瀏覽:114
javaphpnetnodejs 瀏覽:179
愛心命令 瀏覽:431
剪影app菱形圖標是什麼 瀏覽:862
75千瓦空氣壓縮機 瀏覽:540
s20u相冊怎麼加密 瀏覽:431
大專畢業4年可以選擇程序員嗎 瀏覽:856
bitlocker加密其他電腦能打開不 瀏覽:709
如何修改steam中dota伺服器 瀏覽:178
並聯單片機 瀏覽:47
linux搜狗五筆 瀏覽:69
qt高級編程pdf 瀏覽:260
三菱人機編程軟體下載 瀏覽:271
java語法錯會在編譯時報錯嗎 瀏覽:349
用電腦編程怎麼編 瀏覽:614