📄 2006022008532412933.cpp
字号:
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class PeriodicalDB //单期期刊数据库类
{
private: //单期期刊数据库类成员属性
int count; //单期期刊记录总数
int recPoint; //查询记录指针
Periodical periodical[MaxNumber]; //单期期刊记录
public:
PeriodicalDB()//构造函数,将issue.dat读到periodical[]中
{
Periodical p;
count=0;
recPoint=0;
fstream fin("issue.dat",ios::in);
if(!fin)
{
cout<<" File:issue.dat open for Read Failed!"<<endl;
abort();
}
while (true)
{
fin.read((char *)&p,sizeof(p));
if (!fin) break;
periodical[count++]=p;
}
fin.close();
}
~PeriodicalDB()//析构函数,将periodical[]写到issue.dat文件中
{
fstream fout("issue.dat",ios::out);
if(!fout)
{
cout<<" File:issue.dat open for Write Failed!"<<endl;
abort();
}
for (int i=0;i<=count-1;i++)
fout.write((char *)&periodical[i],sizeof(periodical[i]));
fout.close();
}
bool borrowPeriodical(long id,int number)
{
if(query(id))
{
if(queryRec(id,number))
{
if(periodical[recPoint].getStatus()=='A')
{
periodical[recPoint].setStatus('I');
return true;
}
return false;
}
return false;
}
return false;
}
bool returnPeriodical(long id,int number)
{
if(query(id))
{
if(queryRec(id,number))
{
if(periodical[recPoint].getStatus()=='I')
{
periodical[recPoint].setStatus('A');
return true;
}
return false;
}
return false;
}
return false;
}
void clearRec()//删除全部单期期刊记录
{
count=0;
}
bool query(long id)//查找特定ID的单期期刊记录
{
for (int i=0;i<=count-1;i++)
if (periodical[i].getID()==id)
{
recPoint=i;
return true;
}
return false;
}
bool queryRec(long id,int number)//查找单期期刊记录
{
for (int i=0;i<=count-1;i++)
if (periodical[i].getID()==id && periodical[i].getNumber()==number)
{
recPoint=i;
return true;
}
return false;
}
bool search(long id,int number)//搜索单期期刊记录
{
for (int i=0;i<=count-1;i++)
if (periodical[i].getID()==id && periodical[i].getNumber()<number)
{
recPoint=i;
return true;
}
return false;
}
void addPeriodical(MagazineDB &mzdb)//添加单期期刊记录
{
long id;
int number;
cout<<"\t\t\tAdd New Book/Periodical Details"<<endl;
cout<<"\nEnter Periodical Code:";
cin>>id;
if(mzdb.queryRec(id))
{
do
{
cout<<"\nPlease Enter Number:";
cin>>number;
if(number<=0)
cout<<"Periodical Number Is Less Than Zero,Please Input Again!"<<endl;
else
{
if(queryRec(id,number))
{
cout<<"This Number Periodical is already exist!Add Failed!"<<endl;
cout<<"Press any key to continue..."<<endl;
getch();
}
else
{
periodical[count].setID(id);
periodical[count].setNumber(number);
periodical[count].setStatus('A');
cin>>periodical[count];
count++;
}
}
}while(number<=0);
}
else
{
cout<<"The Periodical ID is not Exist!Add Periodical Failed!"<<endl;
cout<<"Press any key to continue..."<<endl;
getch();
}
}
void delPeriodical(int id,int number) //删除单期期刊记录
{
while(search(id,number))
{
for(int i=recPoint+1;i<=count-1;i++)
{
periodical[i-1]=periodical[i];
}
count--;
}
}
void dispRec() //显示全部单期期刊记录
{
for (int i=0;i<=count-1;i++)
periodical[i].disp();
}
void display(MagazineDB &mzdb) //显示全部单期期刊记录
{
for(int i=0;i<=count-1;i++)
{
if(periodical[i].getStatus()=='A')
{
mzdb.queryRec(periodical[i].getID());
cout<<"Code:"<<setw(3)<<periodical[i].getID()<<" Name:"<<setw(20)<<mzdb.getCurRecTitle()<<" Number:"<<setw(3)<<periodical[i].getNumber()<<" Issue Date:";
periodical[i].getIssue();
}
}
}
void Datebase(MagazineDB &mzdb);//单期期刊库维护
};
void PeriodicalDB::Datebase(MagazineDB &mzdb)
{
long id;
int number;
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:
addPeriodical(mzdb);
break;
case 2:
cout<<"Please Input Periodical ID:";
cin>>id;
cout<<"Please Input Periodical Number:"<<endl;
cin>>number;
cin.get(); //缓冲选择输入的回车.
if (!queryRec(id,number))
{
cout << "The Periodical is not exist!"<<endl;
cout<<"Press any key to continue..."<<endl;
getch();
break;
}
cin>>periodical[recPoint];
break;
case 3:
cout<<"Please Input Periodical ID:";
cin>>id;
if (!query(id))
{
cout <<"The Periodical is not exist!" << endl;
cout<<"Press any key to continue..."<<endl;
getch();
break;
}
cout<<"Please Input Periodical Number:";
cin>>number;
delPeriodical(id,number);
break;
case 4:
cout<<"Please Input Periodical ID:";
cin>>id;
cout<<"Please Input Periodical Number:"<<endl;
cin>>number;
if (!queryRec(id,number))
{
cout <<"The Periodical is not exist!"<< endl;
cout<<"Press any key to continue..."<<endl;
getch();
break;
}
periodical[recPoint].disp();
cout<<"Press any key to continue..."<<endl;
getch();
break;
case 5:
display(mzdb);
cout<<"Press any key to continue..."<<endl;
getch();
break;
case 6:
clearRec();
break;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mainInterface(BookDB &bkdb,MagazineDB &mzdb,PeriodicalDB &pddb)
{
int choice=0;
char select;
char flage;
long id;
int number;
while(choice!=6)
{
system("cls");
cout<<"\t\t\tLibrary Management Syetem"<<endl;
cout<<"1. Add New Book Details"<<endl;
cout<<"2. Add New Periodical Details"<<endl;
cout<<"3. Record Issue/Return Details"<<endl;
cout<<"4. Delete Old Periodical Issue Details"<<endl;
cout<<"5. View Available Books/Periodicals"<<endl;
cout<<"6. Exit"<<endl;
cout<<"\n\tPlease Enter Choice:";
cin>>choice;
cin.get();
system("cls");
switch (choice)
{
case 1:
bkdb.addBook();
break;
case 2:
do
{
system("cls");
cout<<"Add Periodical Details or Issue Details?(P/I):";
cin>>select;
cin.get();
if(toupper(select)!='P' && toupper(select)!='I')
{
cout<<"Select Invalidation,Please Select Again..."<<endl;
getch();
}
}while(toupper(select)!='P' && toupper(select)!='I');
if(toupper(select)=='P')
mzdb.addMagazine();
else
pddb.addPeriodical(mzdb);
break;
case 3:
do
{
system("cls");
cout<<"Record Issus/Return"<<endl;
cout<<"Issue or Return?(I/R):";
cin>>flage;
if(toupper(flage)!='I' && toupper(flage)!='R')
{
cout<<"Select Invalidation,Please Select Again..."<<endl;
getch();
}
}while(toupper(flage)!='I' && toupper(flage)!='R');
do
{
cout<<"Issue Book or Periodical?(B/P):";
cin>>select;
if(toupper(select)!='B' && toupper(select)!='P')
{
cout<<"Select Invalidation,Please Select Again..."<<endl;
getch();
}
}while(toupper(select)!='B' && toupper(select)!='P');
if(toupper(flage)=='I' && toupper(select)=='B') //借阅图书
{
cout<<"Please Enter Book Code:";
cin>>id;
if(!bkdb.queryRec(id))
{
cout<<"The Book is not exist!"<<endl;
getch();
break;
}
if(!bkdb.borrowBook(id))
{
cout<<"The Book is already Issue!"<<endl;
getch();
break;
}
cout<<"The Book:"<<id<<"Issue Succeed!"<<endl;
getch();
break;
}
else if(toupper(flage)=='I' && toupper(select)=='P') //借阅月刊
{
cout<<"Please Enter Periodical Code:";
cin>>id;
if(!pddb.query(id))
{
cout<<"The Periodical is not exist!"<<endl;
getch();
break;
}
cout<<"Please Input Issue Number:";
cin>>number;
if(!pddb.queryRec(id,number))
{
cout<<"The Periodical is not exist!"<<endl;
getch();
break;
}
if(!pddb.borrowPeriodical(id,number))
{
cout<<"The Book is already Issue!"<<endl;
getch();
break;
}
cout<<"The Periodical:"<<id<<"Issue Succeed!"<<endl;
getch();
break;
}
else if(toupper(flage)=='R' && toupper(select)=='B') //归还图书
{
cout<<"Please Enter Book Code:";
cin>>id;
if(!bkdb.queryRec(id))
{
cout<<"The Book is not exist!"<<endl;
getch();
break;
}
if(!bkdb.returnBook(id))
{
cout<<"The Book:"<<id<<"Return Failed!"<<endl;
getch();
break;
}
cout<<"The Book:"<<id<<"Return Succeed!"<<endl;
getch();
break;
}
else //归还月刊
{
cout<<"Please Enter Periodical Code:";
cin>>id;
if(!pddb.query(id))
{
cout<<"The Periodical is not exist!"<<endl;
getch();
break;
}
cout<<"Please Input Issue Number:";
cin>>number;
if(!pddb.queryRec(id,number))
{
cout<<"The Periodical is not exist!"<<endl;
getch();
break;
}
if(!pddb.returnPeriodical(id,number))
{
cout<<"The Periodical:"<<id<<"Return Failed!"<<endl;
getch();
break;
}
cout<<"The Periodical:"<<id<<"Return Succeed!"<<endl;
getch();
break;
}
break;
case 4:
system("cls");
cout<<"Delete Old Periodical Issue"<<endl;
cout<<"Please Enter Periodical Code:";
cin>>id;
if(!pddb.query(id))
{
cout<<"The Periodical is not exist!"<<endl;
getch();
break;
}
cout<<"Please Input Issue Number:";
cin>>number;
if(!pddb.search(id,number))
{
cout<<"The Periodical is not exist!"<<endl;
getch();
break;
}
pddb.delPeriodical(id,number);
getch();
break;
case 5:
do
{
system("cls");
cout<<"Issue Book or Periodical?(B/P):";
cin>>select;
if(toupper(select)!='B' && toupper(select)!='P')
{
cout<<"Select Invalidation,Please Select Again..."<<endl;
getch();
}
}while(toupper(select)!='B' && toupper(select)!='P');
if(toupper(select)=='B')
{
bkdb.display();
cout<<"Press any key to continue..."<<endl;
getch();
break;
}
else
{
pddb.display(mzdb);
cout<<"Press any key to continue..."<<endl;
getch();
break;
}
break;
case 6:
break;
default:
cout<<"Select Invalidation,Please Select Again..."<<endl;
getch();
break;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
BookDB bkDB;
MagazineDB mzDB;
PeriodicalDB pdDB;
mainInterface(bkDB,mzDB,pdDB);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -