#ifndef LIBRARY_H
#include<iostream>
#include<string>
#include<iomanip>
#include <fstream>
#include"book.h"
#define MAXSIZE 100 //圖書館最大存書數
using namespace std;
class Library
{
private:
Book Books[MAXSIZE];
int num; //當前圖書個數
public:
Library();
~Library();
int In_Book(Book c); //插入圖書
int Out_BookN(char *b);//刪除圖書
void Show_Book(); //顯示圖書館內所有的書
void Change_Book(int b,Book B); //修改圖書
void BookSort(); //按書號從大到小排序
int Seach_BookNo(char *b); //按書號查找
int Seach_BookName(char *s); //按書名查找
int Seach_BookWriter(char *s); //按作者查找
int Seach_Bookmoney(int a,int b); //按價格區間查找
void dataSave(); //存儲數據
void dataRead(); //讀取數據
};
Library::Library()
{
dataRead();
}
Library::~Library()
{
dataSave();
}
int Library::In_Book(Book c)
{
if(num>MAXSIZE-1)
{ cout<<"圖書館已滿!";
return 0;
}
if(Seach_BookNo(c.GetNo())==-1)
{ num++;
Books[num]=c;
dataSave();
return 1;}
else
{
cout<<"該書號已存在!"<<endl;
return 0;
}
}
int Library::Out_BookN(char *b)
{
int i,j;
i=Seach_BookNo(b);
if(i!=-1)
{
for(j=i;j<=num;j++)
Books[j]=Books[j+1];
num--;
dataSave();
return 1;
}
else
{cout<<"沒有該書!"<<endl;
return 0;}
}
void Library::Show_Book()
{
int i;
for(i=0;i<=num;i++)
Books[i].Print();
cout<<endl;
}
int Library::Seach_BookNo(char *b)
{
int i;
for(i=0;i<=num;i++)
if(Books[i].ifBookNo(b))
{Books[i].Print();
return i;}
return -1;
}
int Library::Seach_BookName(char* s)
{
int i,count=0;
for(i=0;i<=num;i++)
if(Books[i].ifBName(s))
{Books[i].Print();
count++;
}
return count;
}
int Library::Seach_BookWriter(char* s)
{
int i,count=0;
for(i=0;i<=num;i++)
if(Books[i].ifWriter(s))
{Books[i].Print();
count++;
}
return count;
}
int Library::Seach_Bookmoney(int a,int b)
{
int i,count=0;
for(i=0;i<=num;i++)
if(Books[i].ifmoney(a,b))
{Books[i].Print();
count++;
}
return count;
}
void Library::Change_Book(int b,Book B)
{
Books[b]=B;
dataSave();
}
void Library::dataSave() //存儲資料函數,將read[]寫入Book.dat文件中
{
fstream file("Book.dat",ios::out);
for (int i=0;i<=num;i++)
file.write((char *)&Books[i],sizeof(Books[i]));
file.close();
}
void Library::dataRead() //構造函數,將Book.dat讀到read[]中
{
Book s;
num=-1;
fstream file("Book.dat",ios::in);
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file) break;
num++;
Books[num]=s;
}
file.close();
}
void Library::BookSort() //冒泡法排序,從小到大
{
int i,j;
Book B;
for(i=0;i<=num;i++)
for(j=0;j<=num-i-1;j++)
if(strcmp(Books[j].GetNo(),Books[j+1].GetNo())>0)
{
B=Books[j];
Books[j]=Books[j+1];
Books[j+1]=B;
}
dataSave();
}
#endif
//book.h
#ifndef BOOK_H
#include<iostream>
#include<string>
#include<iomanip>
#include <fstream>
using namespace std;
class Book
{
private:
char Bname[20]; //書名
char Writer[20]; //作者
char BookNo[7]; //書號
float money; //價格
public:
Book(char *N="*****",char *W="***",char *BN="000000",float M=0.00);
void Print(); //顯示
int ifBookNo(char *b); //判斷書號是否與b相同
char* GetNo(); //獲取書號
int ifBName(char* s); //判斷書名是否與s相同
int ifWriter(char* s); //判斷作者是否與s相同
int ifmoney(int a,int b);//判斷價格是否在a和b之間
};
Book::Book(char *N,char *W,char *BN,float M)
{
strcpy(Bname,N);
strcpy(Writer,W);
strcpy(BookNo,BN);
money=M;
}
void Book::Print()
{
cout<<BookNo<<setw(10)<<"書名:"<<Bname<<setw(5)<<"作者:"<<Writer<<"價格:"<<money<<endl;
}
int Book::ifBookNo(char* b)
{
if(strcmp(BookNo,b)==0)
return 1;
else
return 0;
}
char* Book::GetNo()
{
return BookNo;
}
int Book::ifBName(char* s)
{
if(strcmp(Bname,s)==0)
return 1;
else return 0;
}
int Book::ifWriter(char* s)
{
if(strcmp(Writer,s)==0)
return 1;
else return 0;
}
int Book::ifmoney(int a,int b)
{
if(money>=a&&money<=b)
return 1;
else return 0;
}
#endif
//library.h
#ifndef LIBRARY_H
#include<iostream>
#include<string>
#include<iomanip>
#include <fstream>
#include"book.h"
#define MAXSIZE 100 //圖書館最大存書數
using namespace std;
class Library
{
private:
Book Books[MAXSIZE];
int num; //當前圖書個數
public:
Library();
~Library();
int In_Book(Book c); //插入圖書
int Out_BookN(char *b);//刪除圖書
void Show_Book(); //顯示圖書館內所有的書
void Change_Book(int b,Book B); //修改圖書
void BookSort(); //按書號從大到小排序
int Seach_BookNo(char *b); //按書號查找
int Seach_BookName(char *s); //按書名查找
int Seach_BookWriter(char *s); //按作者查找
int Seach_Bookmoney(int a,int b); //按價格區間查找
void dataSave(); //存儲數據
void dataRead(); //讀取數據
};
Library::Library()
{
dataRead();
}
Library::~Library()
{
dataSave();
}
int Library::In_Book(Book c)
{
if(num>MAXSIZE-1)
{ cout<<"圖書館已滿!";
return 0;
}
if(Seach_BookNo(c.GetNo())==-1)
{ num++;
Books[num]=c;
dataSave();
return 1;}
else
{
cout<<"該書號已存在!"<<endl;
return 0;
}
}
int Library::Out_BookN(char *b)
{
int i,j;
i=Seach_BookNo(b);
if(i!=-1)
{
for(j=i;j<=num;j++)
Books[j]=Books[j+1];
num--;
dataSave();
return 1;
}
else
{cout<<"沒有該書!"<<endl;
return 0;}
}
void Library::Show_Book()
{
int i;
for(i=0;i<=num;i++)
Books[i].Print();
cout<<endl;
}
int Library::Seach_BookNo(char *b)
{
int i;
for(i=0;i<=num;i++)
if(Books[i].ifBookNo(b))
{Books[i].Print();
return i;}
return -1;
}
int Library::Seach_BookName(char* s)
{
int i,count=0;
for(i=0;i<=num;i++)
if(Books[i].ifBName(s))
{Books[i].Print();
count++;
}
return count;
}
int Library::Seach_BookWriter(char* s)
{
int i,count=0;
for(i=0;i<=num;i++)
if(Books[i].ifWriter(s))
{Books[i].Print();
count++;
}
return count;
}
int Library::Seach_Bookmoney(int a,int b)
{
int i,count=0;
for(i=0;i<=num;i++)
if(Books[i].ifmoney(a,b))
{Books[i].Print();
count++;
}
return count;
}
void Library::Change_Book(int b,Book B)
{
Books[b]=B;
dataSave();
}
void Library::dataSave() //存儲資料函數,將read[]寫入Book.dat文件中
{
fstream file("Book.dat",ios::out);
for (int i=0;i<=num;i++)
file.write((char *)&Books[i],sizeof(Books[i]));
file.close();
}
void Library::dataRead() //構造函數,將Book.dat讀到read[]中
{
Book s;
num=-1;
fstream file("Book.dat",ios::in);
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file) break;
num++;
Books[num]=s;
}
file.close();
}
void Library::BookSort() //冒泡法排序,從小到大
{
int i,j;
Book B;
for(i=0;i<=num;i++)
for(j=0;j<=num-i-1;j++)
if(strcmp(Books[j].GetNo(),Books[j+1].GetNo())>0)
{
B=Books[j];
Books[j]=Books[j+1];
Books[j+1]=B;
}
dataSave();
}
#endif