📄 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 + -