#include <string>
#include <fstream>
#include <iostream>
using namespace std;
const int BMAX=20; //設定借書上限
//-----------------------------------------------------圖書管理模塊
//-----------------------------------------------------圖書類
class book
{
public:
int no; //圖書編號
char name[20]; //圖書名稱
char author[10];
int classtion;
char publisher[20];
int price;
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 setauthor(char au[])
{
strcpy(author,au);
}
char *getauthor()
{
return author;
}
void setclasstion(int cl)
{
classtion=cl;
}
int getclasstion()
{
return classtion;
}
void setprice(int pr)
{
price=pr;
}
int getprice()
{
return price;
}
void setpublisher(char pu[])
{
strcpy(publisher,pu);
}
char* getpublisher()
{
return publisher;
}
void borbook()
{
b_flag=2; //借書標志
}
void delbook()
{
b_del=2; //洗掉標志
}
void addbook(int no,char na[],char au[],int cl,char pu[],int pr) //增加圖書功能
{
setauthor(au);
setclasstion(cl);
setpublisher(pu);
setprice(pr);
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];
char bauthor[20];
int bclasstion;
char bpublisher[20];
int bprice;
cout<<"請輸入書號: ";
cin>>no;
cout<<endl<<"請輸入書名: ";
cin>>bname;
cout<<endl<<"請輸入作者: ";
cin>>bauthor;
cout<<endl<<"請輸入分類號: ";
cout<<bclasstion;
cout<<endl<<"請輸入出版單位: ";
cout<<bpublisher;
cout<<endl<<"請輸入價格: ";
cout<<bprice;
cout<<endl;
bk.b_flag=1;
bk.addbook(no, bname,bauthor,bclasstion,bpublisher,bprice);
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<<"作者:"<<btarray[cur].author<<"分類號:"<<btarray[cur].classtion<<"出版單位"<<btarray[cur].publisher<<"價格"<<btarray[cur].price<<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<<"作者:"<<btarray[i].author<<"分類號:"<<btarray[i].classtion<<"出版單位"<<btarray[i].publisher<<"價格"<<btarray[i].price<<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[bs
uj5u.com熱心網友回復:
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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/45882.html
標籤:基礎類
