📄 2006022008532412933.cpp
字号:
in>>magazine.period;
magazine.period=toupper(magazine.period);
if(magazine.period!='F' && magazine.period!='M' && magazine.period!='S' && magazine.period!='Y')
cout<<"Magazine Periodicity is Wrong,Please Input Again!"<<endl;
}while(magazine.period!='F' && magazine.period!='M' && magazine.period!='S' && magazine.period!='Y');
return in;
}
friend fstream & operator>>(fstream & in,Magazine & magazine) {} //期刊类从文件输入
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Periodical //单期期刊类
{
private: //单期期刊类成员属性
long id; //期刊代码
int number; //期刊发行期数
Date issue; //期刊出版日期
double price; //期刊价格
char status; //期刊状态("A"代表可借阅,"I"代表已被借阅)
public:
Periodical()
{
id=0;
number=0;
issue=Date();
price=0.0;
status='X';
}
Periodical(long id,int number,int year,int month,int day,double price,char status='A')
{
this->id=id;
this->number=number;
this->issue=Date(year,month,day);
this->price=price;
if(status!='A' && status!='I')
{
cout<<"Book Status Set Error!"<<endl;
this->status='X';
}
else
{
this->status=status;
}
}
virtual ~Periodical() {}
void setID(long id) { this->id=id; }
void setNumber(int number) { this->number=number; }
void setIssue(int year,int month,int day) { issue=Date(year,month,day); }
void setPrice(double) { this->price=price; }
void setStatus(char status) { this->status=toupper(status); }
void setInfo(long id,int quantity,int year,int month,int day,double price,char status='A')
{
this->id=id;
this->number=number;
this->issue=Date(year,month,day);
this->price=price;
if(status!='A' && status!='I')
{
cout<<"Book Status Set Error!"<<endl;
this->status='X';
}
else
{
this->status=status;
}
}
long getID() { return this->id; }
int getNumber() { return this->number; }
void getIssue() { issue.getDate(); }
double getPrice() { return this->price; }
char getStatus() { return this->status; }
void getInfo() {}
void disp()
{
cout<<"Code:"<<setw(3)<<id<<" Number:"<<setw(3)<<number<<" Issue Date:"<<issue<<" Status:"<<setw(2)<<status<<endl;
}
bool borrowPeriodical()
{
if (status=='A')
{
status='I';
return true;
}
return false;
}
void returnPeriodical()
{
status='A';
}
void toSave(fstream &fout) //保存对象属性值到文件
{
fout.write((char *)this,sizeof(Periodical));
}
void toLoad(fstream &fin) //从文件当前位置读取数据到对象
{
fin.read((char *)this,sizeof(Periodical));
}
friend ostream & operator<<(ostream & out,Periodical & periodical) //单期期刊类输出到屏幕
{
cout<<periodical.id<<" "<<periodical.number<<" "<<periodical.issue<<" "<<periodical.price<<" "<<periodical.status;
return out;
}
friend fstream & operator<<(fstream & out,Periodical & periodical) //单期期刊类输出到文件
{
cout<<periodical.id<<" "<<periodical.number<<" "<<periodical.issue<<" "<<periodical.price<<" "<<periodical.status;
return out;
}
friend istream & operator>>(istream & in,Periodical & periodical) //单期期刊类从键盘输入
{
cout<<"\nPlease Enter Publishing Date(Separate By Blank):";
cin>>periodical.issue;
do
{
cout<<"\nPlease Enter Price:";
cin>>periodical.price;
if(periodical.price<=0)
cout<<"Book Price Is Less Than Zero,Please Input Again!"<<endl;
}while(periodical.price<=0);
return in;
}
friend fstream & operator>>(fstream & in,Periodical & periodical) {} //单期期刊类从文件输入
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class BookDB //图书数据库类
{
private: //图书数据库类成员属性
int count; //图书记录总数
int recPoint; //查询记录指针
Book book[MaxNumber]; //图书记录
public:
BookDB()//构造函数,将book.dat读到book[]中
{
Book b;
count=0;
recPoint=0;
fstream fin("book.dat",ios::in);
if(!fin)
{
cout<<" File:book.dat open for Read Failed!"<<endl;
abort();
}
while (true)
{
fin.read((char *)&b,sizeof(b));
if (!fin) break;
book[count++]=b;
}
fin.close();
}
~BookDB()//析构函数,将book[]写到book.dat文件中
{
fstream fout("book.dat",ios::out);
if(!fout)
{
cout<<" File:book.dat open for Write Failed!"<<endl;
abort();
}
for (int i=0;i<=count-1;i++)
fout.write((char *)&book[i],sizeof(book[i]));
fout.close();
}
bool borrowBook(long id)
{
if(queryRec(id))
{
if (book[recPoint].getStatus()=='A')
{
book[recPoint].setStatus('I');
return true;
}
return false;
}
return false;
}
bool returnBook(long id)
{
if(queryRec(id))
{
if(book[recPoint].getStatus()=='I')
{
book[recPoint].setStatus('A');
return true;
}
return false;
}
return false;
}
void clearRec()//记录全部删除
{
count=0;
}
bool queryRec(long id)//查找图书记录
{
for (int i=0;i<=count-1;i++)
if (book[i].getID()==id)
{
recPoint=i;
return true;
}
return false;
}
void addBook()//添加图书记录
{
cout<<"\t\t\tAdd New Book/Periodical Details"<<endl;
if(count==0)
{
cout<<"\nBook Code:"<<1<<endl;
book[count].setID(1);
book[count].setStatus('A');
cin>>book[count];
count++;
}
else
{
cout<<"\nBook Code:"<<book[count-1].getID()+1<<endl;
book[count].setID(book[count-1].getID()+1);
book[count].setStatus('A');
cin>>book[count];
count++;
}
}
void delBook()//删除图书记录
{
for(int i=recPoint+1;i<=count-1;i++)
{
book[i-1]=book[i];
}
count--;
}
void dispRec()//显示全部图示记录
{
for (int i=0;i<=count-1;i++)
book[i].disp();
}
void display()//显示可以借阅的图书信息
{
for (int i=0;i<=count-1;i++)
if(book[i].getStatus()=='A')
book[i].disp();
}
void Datebase();//图书库维护
};
void BookDB::Datebase()
{
long id;
int choice=1;
while (choice!=0)
{
system("cls");
cout <<"Book Maintenance 1: Add 2: Modify 3: Delete 4: Find 5: Display 6: Clear 0: Exit=>";
cin >> choice;
cin.get(); //缓冲选择输入的回车.
switch (choice)
{
case 1:
addBook();
break;
case 2:
cout<<"Please Input Book ID:";
cin>>id;
cin.get(); //缓冲选择输入的回车.
if (!queryRec(id))
{
cout << "The Book is not exist!"<<endl;
cout<<"Press any key to continue..."<<endl;
getch();
break;
}
cin>>book[recPoint];
break;
case 3:
cout<<"Please Input Book ID:";
cin>>id;
if (!queryRec(id))
{
cout <<"The Book is not exist!" << endl;
cout<<"Press any key to continue..."<<endl;
getch();
break;
}
delBook();
break;
case 4:
cout<<"Please Input Book ID:";
cin>>id;
if (!queryRec(id))
{
cout <<"The Book is not exist!"<< endl;
cout<<"Press any key to continue..."<<endl;
getch();
break;
}
book[recPoint].disp();
cout<<"Press any key to continue..."<<endl;
getch();
break;
case 5:
dispRec();
cout<<"Press any key to continue..."<<endl;
getch();
break;
case 6:
clearRec();
break;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class MagazineDB //期刊数据库类
{
private: //期刊类成员属性
int count; //期刊记录总数
int recPoint; //查询记录指针
Magazine magazine[MaxNumber]; //期刊记录
public:
MagazineDB()//构造函数,将periodical.dat读到magazine[]中
{
Magazine m;
count=0;
recPoint=0;
fstream fin("periodical.dat",ios::in);
if(!fin)
{
cout<<" File:periodical.dat open for Read Failed!"<<endl;
abort();
}
while (true)
{
fin.read((char *)&m,sizeof(m));
if (!fin) break;
magazine[count++]=m;
}
fin.close();
}
~MagazineDB()//析构函数,将magazine[]写到periodical.dat文件中
{
fstream fout("periodical.dat",ios::out);
if(!fout)
{
cout<<" File:periodical.dat open for Write Failed!"<<endl;
abort();
}
for (int i=0;i<=count-1;i++)
fout.write((char *)&magazine[i],sizeof(magazine[i]));
fout.close();
}
void clearRec()//删除全部期刊记录
{
count=0;
}
bool queryRec(long id)//查找期刊记录
{
for (int i=0;i<=count-1;i++)
if (magazine[i].getID()==id)
{
recPoint=i;
return true;
}
return false;
}
void addMagazine()//添加期刊记录
{
cout<<"\t\t\tAdd New Book/Periodical Details"<<endl;
if(count==0)
{
cout<<"\nMagazine Code:"<<1<<endl;
magazine[count].setID(1);
cin>>magazine[count];
count++;
}
else
{
cout<<"\nMagazine Code:"<<magazine[count-1].getID()+1<<endl;
magazine[count].setID(magazine[count-1].getID()+1);
cin>>magazine[count];
count++;
}
}
void delMagazine()//删除期刊记录
{
for(int i=recPoint+1;i<=count-1;i++)
{
magazine[i-1]=magazine[i];
}
count--;
}
char* getCurRecTitle()
{
return magazine[recPoint].getTitle();
}
void dispRec()//显示全部期刊记录
{
for (int i=0;i<=count-1;i++)
magazine[i].disp();
}
void Datebase();//期刊库维护
};
void MagazineDB::Datebase()
{
long id;
int choice=1;
while (choice!=0)
{
system("cls");
cout <<"Magazine Maintenance 1: Add 2: Modify 3: Delete 4: Find 5: Display 6: Clear 0: Exit=>";
cin >> choice;
cin.get(); //缓冲选择输入的回车.
switch (choice)
{
case 1:
addMagazine();
break;
case 2:
cout<<"Please Input Magazine ID:";
cin>>id;
cin.get(); //缓冲选择输入的回车.
if (!queryRec(id))
{
cout << "The Magazine is not exist!"<<endl;
cout<<"Press any key to continue..."<<endl;
getch();
break;
}
cin>>magazine[recPoint];
break;
case 3:
cout<<"Please Input Magazine ID:";
cin>>id;
if (!queryRec(id))
{
cout <<"The Magazine is not exist!" << endl;
cout<<"Press any key to continue..."<<endl;
getch();
break;
}
delMagazine();
break;
case 4:
cout<<"Please Input Magazine ID:";
cin>>id;
if (!queryRec(id))
{
cout <<"The Magazine is not exist!"<< endl;
cout<<"Press any key to continue..."<<endl;
getch();
break;
}
magazine[recPoint].disp();
cout<<"Press any key to continue..."<<endl;
getch();
break;
case 5:
dispRec();
cout<<"Press any key to continue..."<<endl;
getch();
break;
case 6:
clearRec();
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -