?? main.cpp
字號:
/*******************************************
//本程序有個缺陷是時間效益不是很好
//每個函數都要大量的時間去讀取與寫入
//當文件很大的時候就會很慢
//同時還有許多的缺點,如:注釋、數據的定義等
*****************************************/
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
//定義圖書的數據結構
const int shulian=5;//可借總數
struct BOOK
{
int t_ID;//圖書編號
char tmode;//圖書狀態
char t_name[20];//圖書名
char tc_time[14];//出版時間,如:20081202122030
char chbsh[20];//出版社名稱
};
//定義讀者的數據結構
struct READERSHIP
{
int d_ID;//讀者編號
char d_name[8];//讀者姓名
char sex[2];//性別
int age;//年齡
char address[28];//地址
int kejie[shulian];//已借標記
};
//圖書類
class book
{
protected:
int j_sum;//借出總數
int t_sum;//圖書總書
BOOK *tb;
public:
book(int n=0,int m=0):t_sum(n),j_sum(m){}
void update(fstream &file);//更新圖書庫
void duqu(fstream &file);//讀取圖書庫
void display();//顯示查詢狀態
int chaxun(int ID,int ztai);//查詢圖書與更改借書狀態2、可借,1不可借
};
void book::duqu(fstream &file)
{
file.seekg(0,ios::beg);
file.read((char *)&t_sum,sizeof(t_sum));
file.seekg(sizeof(t_sum),ios::beg);
file.read((char *)&j_sum,sizeof(j_sum));
file.seekg(sizeof(t_sum)+sizeof(j_sum),ios::beg);
cout<<"圖書總數:"<<t_sum<<" "<<"借書總數:"<<j_sum<<endl;
tb=new BOOK[t_sum];
if(tb==NULL)cout<<"空間不足,出錯了"<<endl;
file.read((char *)tb,t_sum*sizeof(BOOK));
}
void book::display( )
{
//duqu(file);
int i=0;
while(i<t_sum)
{
cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
<<" "<<tb[i].chbsh<<endl;
i++;
}
//update(file);
}
int book::chaxun(int ID,int ztai)
{
int i=0;
while(i!=t_sum){
if(ID==tb[i].t_ID){
if(ztai==1){
if(tb[i].tmode=='F') return 0;
cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
<<" "<<tb[i].chbsh<<endl;
tb[i].tmode='F';
j_sum++;
return 1;
}
else if(ztai==2){
if(tb[i].tmode=='T') return 0;
cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
<<" "<<tb[i].chbsh<<endl;
tb[i].tmode='T';
j_sum--;
return 1;
}
return i;
}
i++;
}
return -1;
}
void book::update(fstream &file)
{
file.seekp(0,ios::beg);
file.write((char *)&t_sum,sizeof(t_sum));
file.seekp(sizeof(t_sum),ios::beg);
file.write((char *)&j_sum,sizeof(j_sum));
file.seekp(sizeof(t_sum)+sizeof(j_sum),ios::beg);
for(int i=0;i<t_sum;i++){
file.write((char *)&tb[i],sizeof(BOOK));
file.seekp(sizeof(t_sum)+sizeof(j_sum)+(i+1)*sizeof(BOOK),ios::beg);
}
delete tb;
}
////圖書處理類
class tbook:public book
{
public:
int a;
tbook(int n=0,int m=0):book(n,m){}
void select();//主要的界面,用于選擇
void addbook(fstream &file);//添加圖書
void display(fstream &file);//顯示查詢狀態
void tchaxun(fstream &file);//顯示查詢狀態
void xiugai(fstream &file);//修改圖書信息
void del(fstream &file);//刪除圖書庫
};
void tbook::select()
{
int i;
fstream ofile("1.txt",ios::in|ios::out);
while(1)
{
cout<<"\t\t\t圖書信息"<<endl;
cout<<"\t\t\t1、顯示"<<endl;
cout<<"\t\t\t2、查詢"<<endl;
cout<<"\t\t\t3、添加"<<endl;
cout<<"\t\t\t4、修改"<<endl;
cout<<"\t\t\t5、刪除"<<endl;
cout<<"\t\t\t6、退出"<<endl;
cout<<"請選擇:";
cin>>i;
switch(i)
{
case 1:display(ofile);break;
case 2:tchaxun(ofile);break;
case 3:addbook(ofile);break;
case 4:xiugai(ofile);break;
case 5:del(ofile);break;
case 6:break;
default:cout<<"輸入有誤"<<endl;
}
if(i==6)break;
}
ofile.close();
}
void tbook::addbook(fstream &file)
{
BOOK b;
duqu(file);
cout<<"輸入你的圖書編號:";
cin>>b.t_ID;
if(t_sum!=0&&chaxun(b.t_ID,0)!=-1)
{
cout<<"此書已經從在!"<<endl;
return ;
}
cout<<"輸入你的圖書名:";
cin>>b.t_name;
cout<<"輸入你的出版時間(如:2008/01/01,輸入20080101):";
cin>>b.tc_time;
cout<<"輸入你的圖書出版社:";
cin>>b.chbsh;
b.tmode='T';
t_sum++;
file.seekp(0,ios::beg);
file.write((char *)&t_sum,sizeof(t_sum));
file.seekp(sizeof(t_sum),ios::beg);
file.write((char *)&j_sum,sizeof(j_sum));
file.seekp(sizeof(t_sum)+sizeof(j_sum),ios::beg);
if(t_sum!=1){
for(int i=0;i<t_sum-1;i++){
file.write((char *)&tb[i],sizeof(BOOK));
file.seekp(sizeof(t_sum)+sizeof(j_sum)+(i+1)*sizeof(BOOK),ios::beg);
}
}
file.write((char *)&b,sizeof(BOOK));
cout<<"添加成功!"<<endl;
//if(t_sum!=1)
delete tb;
}
void tbook::display(fstream &file)
{
duqu(file);
book::display();
delete tb;
}
void tbook::tchaxun(fstream &file)
{
char t_name[20];//圖書名
cout<<"輸入你要查詢的書名:";
cin>>t_name;
duqu(file);
int i=0;
while(i!=t_sum){
if(!strcmp(t_name,tb[i].t_name)){
cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
<<" "<<tb[i].chbsh<<endl;
break;}
i++;
}
if(i==t_sum)cout<<"沒有你找到你想要的書!";
delete tb;
}
void tbook::xiugai(fstream &file)
{
int i;
duqu(file);
cout<<"請輸入圖書編號:";
cin>>i;
i=chaxun(i,0);
if(i==-1)
{
cout<<"你要修改的書不存在。"<<endl;
delete tb;
}
else {
cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
<<" "<<tb[i].chbsh<<endl;
cout<<"輸入你要修改的圖書名:";
cin>>tb[i].t_name;
cout<<"輸入你要修改的出版時間:";
cin>>tb[i].tc_time;
cout<<"輸入你要修改的出版社:";
cin>>tb[i].chbsh;
update(file);
}
}
void tbook::del(fstream &file)
{
int i;
duqu(file);
cout<<"全部刪除請輸入:-1"<<endl;
cout<<"輸入你要刪除的圖書編號:";
cin>>i;
if(i==-1) {
t_sum=0;
j_sum=0;
file.seekp(0,ios::beg);
file.write((char *)&t_sum,sizeof(t_sum));
file.seekp(sizeof(t_sum),ios::beg);
file.write((char *)&j_sum,sizeof(j_sum));
}
else
{
i=chaxun(i,0);
if(i==-1)
{
cout<<"找不到圖書編號。"<<endl;
}
else {
cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
<<" "<<tb[i].chbsh<<endl;
t_sum--;
file.seekp(0,ios::beg);
file.write((char *)&t_sum,sizeof(t_sum));
file.seekp(sizeof(t_sum),ios::beg);
file.write((char *)&j_sum,sizeof(j_sum));
int j=0;
int k;
for(k=0;j<t_sum+1;j++)
{
if(i!=j){
file.seekp(sizeof(t_sum)+sizeof(j_sum)+(j-k)*sizeof(BOOK),ios::beg);
file.write((char *)&tb[j],sizeof(BOOK));
}
else k=1;
}
cout<<"刪除成功"<<endl;
}
}
delete tb;
}
//讀者信息類
class reader
{
protected:
READERSHIP *dz;
int d_sum;
public:
reader(int n=0):d_sum(n){}
void duqu(fstream &file);//讀取讀者庫
void update(fstream &file);//更新讀者庫
int chaxun(int ID,int k=1);//查詢讀者,1、帶輸出讀者
int xieru(int i,int tID,int j)//1、借2、還
{
int k;
if(j==1){
for(k=0;k<shulian;k++)
if(dz[i].kejie[k]==0){
dz[i].kejie[k]=tID;
return 1;}
}
else if(j==2){
for(k=0;k<shulian;k++)
if(dz[i].kejie[k]==tID){
dz[i].kejie[k]=0;
return 1;
}
}
return 0;
}
};
void reader::duqu(fstream &file)
{
file.seekg(0,ios::beg);
file.read((char *)&d_sum,sizeof(d_sum));
file.seekg(sizeof(d_sum),ios::beg);
cout<<"讀者總數:"<<d_sum<<endl;
dz=new READERSHIP[d_sum];
if(dz==NULL)cout<<"空間不足,出錯了"<<endl;
file.read((char *)dz,d_sum*sizeof(READERSHIP));
}
void reader::update(fstream &file)
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -