头文件内容:
book.h
#ifndef _book_h #define _book_h #includeusing namespace std; class Book//图书类 { public: Book(){} char getBname();//获得书名 char getWname();//获得作者名字 char getPname();//获得出版社名字 long getPdate();//获得出版日期 int getEdition();//获得出版版次 float getPrice();//获得价格 int getnote();//获得删除标志 int getnumber();//获得图书编号 long long getInumber();//获得ISBN编号 void setinformation(long long m,char a[],char b[],char c[],long x, float y,int z);//设置书名 void delbook();//删除图书 void addbook(int n,long long m,char a[],char b[],char c[],long x, float y,int z);//添加图书 int borrowbook();//借书操作 void bookout();//设置上架标志 void retbook();//还书操作 void list();//输出图书 private: int note;//删除标志(0:已删,1:未删) int number;//图书编号 char Bname[10];//书名 int onshelf;//上架标志(1:在架,可借。0:已借出。) long long ISBN;//ISBN编号 char Wname[10];//作者名字 char Pname[10];//出版社名字 long Pdate;//出版日期 int Edition;//出版版次 float Price;//定价 }; #endif
bdatabase.h
#ifndef _bdatabase_h #define _bdatabase_h #include"book.h" #includeusing namespace std; const int Maxb=100;//最大图书数量 class BDatabase//图书类库 { public: BDatabase(); void clear();//全部删除 int addbook(int n,long long m,char a[],char b[],char c[],long x, float y,int z);//添加图书 Book *query(int bookid);//查找图书 void list();//输出图书信息 void bookdate();//图书库维护 ~BDatabase();//析构函数,写文件 private: int top;//图书记录指针 Book book[Maxb];//图书记录 }; #endif
reader.h
#ifndef _reader_h #define _reader_h #includeusing namespace std; const int Maxbor=5;//最大借阅量 class Reader//读者类 { public: Reader() {} char getname();//获得姓名 int getnote();//获得删除标志 int getnumber();//获得读者编号 int getage();//获得年龄 bool getsex();//获得性别 char getaddress();//获得读者地址 void setinformation(int m,char c[],char a[],char b[]);//设置姓名 void delbook();//设置删除标记 void addreader(int n,int m,char c[],char a[],char b[]);//添加读者 void borrowbook(int bookid);//借书操作 int retbook(int bookid);//还书操作 void list();//输出读者信息 private: int note;//删除标志(0:已删, 1:未删) int number;//读者编号 char name[10];//读者姓名 int borbook[Maxbor];//所借图书 int age;//读者年龄 char sex[10];//读者性别 char ad[20];//读者地址 }; #endif
rdatabase.h
#ifndef _rdatabase_h_ #define _rdatabase_h_ #include"reader.h" #includeusing namespace std; const int Maxr=100;//最大读者数 class RDatabase//读者类 { public: RDatabase();//构造函数初始化,读文件 void clear();//删除所有读者信息 int addreader(int n,int m,char c[],char a[],char b[]);//添加读者记录时,先确定 //他是否已经存在。 Reader *query(int readerid);//按编号查找 void list();//输出所有读者信息 void readerdata();//读者库维护 ~RDatabase();//析构函数,写文件 private: int top;//读者记录指针 Reader read[Maxr];//读者记录 }; #endif
源文件内容:
book.cpp
#include#include"book.h" #include #include using namespace std; char Book::getBname() { return Bname[10]; } char Book::getWname() { return Wname[10]; } char Book::getPname() { return Pname[10]; } int Book::getnote() { return note; } int Book::getnumber() { return number; } long long Book::getInumber() { return ISBN; } long Book::getPdate() { return Pdate; } int Book::getEdition() { return Edition; } float Book::getPrice() { return Price; } void Book::setinformation(long long m,char a[],char b[],char c[],long x, float y,int z) { strcpy(Bname,a); strcpy(Wname,b); strcpy(Pname,c); ISBN=m; Pdate=x; Price=y; Edition=z; } void Book::addbook(int n,long long m,char a[],char b[],char c[],long x, float y,int z) { note=1; number=n; ISBN=m; strcpy(Bname,a); strcpy(Wname,b); strcpy(Pname,c); Pdate=x; Edition=z; Price=y; onshelf=1; } void Book::delbook() { note=0; } int Book::borrowbook() { onshelf=0; return onshelf; } void Book::bookout() { onshelf=0; } void Book::retbook() { onshelf=1; } void Book::list() { if(note==1) { cout< bdatabase.cpp
//#include"stdafx.h" #include#include #include #include"bdatabase.h" using namespace std; BDatabase::BDatabase() { Book s; top=-1; fstream file;//打开文件 file.open("book.dat", ios::in|ios::binary); while(1) { file.read((char*)&s, sizeof(s)); if(!file) break; top++; book[top]=s; } file.close();//关闭文件 } void BDatabase::clear() { top=-1; } Book *BDatabase::query(int bookid) { ifstream f("book.dat"); for(int i=0; i<=top; i++) if(book[i].getnumber()==bookid&&book[i].getnote()==1) return &book[i]; return NULL; f.close(); } int BDatabase::addbook(int n,long long m,char a[],char b[],char c[],long x, float y,int z) { Book *p=query(n); if(p==NULL) { top++; book[top].addbook(n,m,a,b,c,x,y,z); return 1; } return 0; } void BDatabase::list() { for(int i=0; i<=top; i++) book[i].list(); } BDatabase::~BDatabase() { fstream file; file.open("book.dat", ios::app|ios::binary); for(int i=0; i<=top; i++) if(book[i].getnote()==0) file.write((char*)&book[i],sizeof(book[i])); file.close(); } void BDatabase::bookdate() { int choice=1; char bookname[20]="0"; char writername[20]="0"; char Pname[20]="0"; long Pdate=0; int Edition=0; float Price=0; long long Inumber=0; int bookid=0; Book *b; while(choice!=0) { cout<<"图书维护: "< >choice; cout<<"-------------------------------------------------"< >bookid; f1<<"输入图书编号: "< >Pdate; f1<<"输入出版日期: "< >Edition; f1<<"输入版次: "< >Price; f1<<"输入价格: "< >Inumber; f1<<"输入INBS编号: "< >bookid; cin.get(); b=query(bookid); if(b==NULL) { cout<<"该图书不存在!"< >Pdate; cout<<"输入新的版次: "; cin>>Edition; cout<<"输入新的价格: "; cin>>Price; cout<<"输入新的INBS编号: "; cin>>Inumber; b->setinformation(Inumber,bookname,writername,Pname,Pdate, Price,Edition); };break; case 3: { cout<<"输入图书编号: "; cin>>bookid; b=query(bookid); if(b==NULL) { cout<<"该图书不存在! "< delbook(); cout<<"该书籍已删除!"< >bookid; b=query(bookid); if(b==0) { cout<<"该图书不存在!"< list(); f.close(); };break; case 5: { cout< reader.cpp
#include//#include"stdafx.h" #include"reader.h" //extern int Maxbor=5; #include using namespace std; char Reader::getname() { return name[10]; } int Reader::getnote() { return note; } int Reader::getnumber() { return number; } int Reader::getage() { return age; } bool Reader::getsex() { return sex; } char Reader::getaddress() { return ad[20]; } void Reader::setinformation(int m,char c[],char a[],char b[]) { strcpy_s(name, a); strcpy_s(ad, b); strcpy_s(sex, c); m=age; } void Reader::addreader(int n,int m,char c[],char a[],char b[]) { note=1; number=n; age=m; strcpy_s(sex, c); strcpy_s(name, a); strcpy_s(ad,b); for(int i=0; i rdatabase.cpp
//#include"stdafx.h" #include#include #include using namespace std; #include"rdatabase.h" RDatabase::RDatabase() { Reader s; top=-1; ifstream file; file.open("reader.dat", ios::app|ios::binary); while(1) { file.read((char*)&s,sizeof(s)); if(!file) break; top++; read[top]=s; } file.close(); } void RDatabase::clear() { top=-1; } Reader *RDatabase::query(int readerid) { for(int i=0; i<=top; i++) if(read[i].getnumber()==readerid&&read[i].getnote()==1) return &read[i]; return NULL; } int RDatabase::addreader(int n,int m,char c[],char a[],char b[]) { Reader *p=query(n); if(p==NULL) { top++; read[top].addreader(n,m,c,a,b); return 1; } return 0; } void RDatabase::list() { for(int i=0; i<=top; i++) read[i].list(); } RDatabase::~RDatabase() { fstream file; file.open("reader.dat",ios::app|ios::binary); for(int i=0; i<=top; i++) if(read[i].getnote()==0) file.write((char*)&read[i], sizeof(read[i])); file.close(); } void RDatabase::readerdata() { int choice=1; char readername[20]; int readerid; int age; char sex[10]; char ad[20]; Reader *r; while(choice!=0) { cout<<"读者维护:"< >choice; cout<<"---------------------------------------------------------"< >readerid; f2<<"输入读者编号: "< >readername; f2<<"输入读者姓名: "< >age; f2<<"输入读者年龄: "<>sex; f2<<"输入读者性别: "< >ad; f2<<"输入读者地址: "<>readerid; cin.get(); r=query(readerid); if(r==NULL) { cout<<"该读者不存在!"< >age; cout<<"输入新的读者性别: "; cin>>sex; cout<<"输入新的读者地址: "; cin>>ad; r->setinformation(age,sex,readername,ad); };break; case 3: { cout<<"输入读者编号:"; cin>>readerid; r=query(readerid); if(r==NULL) { cout<<"该读者不存在!"< delbook(); cout<<"该读者已删除!"< >readerid; r=query(readerid); if(r==NULL) { cout<<"该读者不存在!"< list(); cout< library.cpp
#include"reader.h" #include"rdatabase.h" #include"book.h" #include"bdatabase.h" #include#include #include using namespace std; #define FILEPATH01 "password.dat" #define LEN 20 #define TRYNUM 3 int main(int argc, char *argv[]) { int choice=1, bookid, readerid; // char text[LEN]; // char passwd[LEN]; RDatabase ReaderDB; BDatabase BookDB; Reader *r; Book *b; //LoginSucceed: cout<<"--------------------------------------------------------------------------------"< >choice; switch(choice) { case 1: { cout<<"输入借书读者编号:"; cin>>readerid; cout<<"输入图书编号:"; cin>>bookid; r=ReaderDB.query(readerid); if(r==NULL) { cout<<"该读者不存在,不能借书!"< borrowbook()==0) { cout<<"该图书已借出,不能借书!"< borrowbook(b->getnumber()); b->bookout(); cout<<"借书成功!"< >readerid; cout<<"输入图书编号:"; cin>>bookid; r=ReaderDB.query(readerid); if(r==NULL) { cout<<"该读者不存在,不能还书!"< retbook(); r->retbook(b->getnumber()); cout<<"还书成功!"<



