//图书管理系统
#include
using namespace std;
const int Maxb=10000; //最多的图书 class Book//图书类 {
int tag; //删除标记1:已删0:未删 int no; //图书编号 char name[20]; //书名 char author[10]; //作者名 char no2[10];//输入分类号 char dan[20];//输入出版单位 char time[20];//出版时间 int price;//价格
public:
Book() {}
char *getname() { return name; } //获取姓名 int getno() { return no; }//获取图书编号 int gettag() { return tag; } //获取删除标记 char *getauthor() {return author;} //获取作者名
char *getno2() {return no2;} //获取分类号 char *getdan() {return dan;} //获取出版单位 char *gettime() {return time;} //获取出版时间 char getprice() {return price;} //获取图书价格
void setname(char na[]) //设置书名 {
strcpy(name,na); }
void setauthor(char au[]) //设置作者名 {
strcpy(author,au); }
void setno2(char n[]) //设置分类号 {
strcpy(no2,n); }
void setdan(char d[]) //设置出版单位
{
strcpy(dan,d); }
void settime(char t[]) //设置出版时间 {
strcpy(time,t); }
void delbook() { tag=1; } //删除图书
void addbook(int n,char *na,char *au,char *n2,char *da,char *ti,int pr) //增加图书 {
tag=0; no=n; price=pr;
strcpy(name,na); strcpy(author,au); strcpy(no2,n2); strcpy(dan,da); strcpy(time,ti); }
void disp() //输出图书 {
cout << setw(10) << no << setw(10) << name << setw(10) <<
setw(10)<
class BDatabase //图书库类 {
int top; //图书记录指针
Book book[Maxb]; //图书记录 public:
BDatabase() //构造函数,将book.txt读到book[]中 {
Book b; top=-1;
fstream file(\ while (1) {
file.read((char *)&b,sizeof(b)); if (!file) break; top++;
book[top]=b; }
file.close(); }
void clear() //全删 {
top=-1; }
int addbook(int n,char *na,char *au, char *n2, char *da,char *ti,int pr) {
Book *p=query(n); if (p==NULL) {
top++;
book[top].addbook(n,na,au,n2,da,ti,pr); return 1; }
return 0; }
Book *query(int bookid) //查找图书 {
for (int i=0;i<=top;i++)
if (book[i].getno()==bookid && book[i].gettag()==0) return &book[i]; return NULL; }
Book *query2(int bookid,char *name) //按书名查找图书 {
for(int i=0;i<=top;i++)
if(strcmp(book[i].getname(),name)==0) {bookid=book[i].getno(); return &book[i]; }
return NULL; }
Book *query3(int bookid,char *author) //按作者查找图书 {
for(int i=0;i<=top;i++)
//增加图书 if(strcmp(book[i].getauthor(),author)==0) {bookid=book[i].getno(); return &book[i]; }
return NULL; }
void bookdata(); //图书库维护 void disp() {
cout< for (int i=0;i<=top;i++) if (book[i].gettag()==0) book[i].disp(); } ~BDatabase() //析构函数,将book[]写入book.txt文件中 { fstream file(\ for (int i=0;i<=top;i++) if (book[i].gettag()==0) file.write((char *)&book[i],sizeof(book[i])); file.close(); } }; void BDatabase::bookdata() { int choice=1; int choice2=1; int choice3=1; int choice4=1; char bname[40]; char bauthor[10]; char bno2[20]; char bdan[20]; char btime[20]; int bprice; int bookid; Book *b; while (choice!=0) { cout< cout<<\ * * * * * * * * * * * *\ cout<<\ * 1 添加信息 *\ cout<<\ * 2 修改信息 *\cout<<\ * 3 删除信息 *\cout<<\ * 4 信息查询 *\cout<<\ * 5 显示信息 *\cout<<\ * 6 全部删除 *\cout<<\ * 0 退出 *\ cout<<\ * * * * * * * * * * * *\cout< //如果输入的编号在菜单里不存在的情况---在for循环内部如果出现这样的错的时候 while(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5&&choice!=6&&choice!=0){ cout< switch (choice) { case 1: cout <<\输入图书编号:\ cin >> bookid; cout <<\输入图书书名:\ cin >> bname; cout <<\输入作者名:\cin >>bauthor; cout <<\输入分类号:\cin>>bno2; cout<<\输入出版单位:\cin>>bdan; cout<<\输入出版时间:\ cin>>btime; cout<<\输入价格:\cin>>bprice; addbook(bookid,bname,bauthor,bno2,bdan,btime,bprice); cout<<\图书编号\添加成功;按任意键返回菜单 \ break; case 2: cout << \ 输入图书编号:\ cin >> bookid; b=query(bookid); if (b==NULL) {