當前位置:編程學習大全網 - 編程語言 - 跪求壹個C語言的編程。關於圖書銷售管理系統的編程,要求看問題的補充。有的發我Q1823613009

跪求壹個C語言的編程。關於圖書銷售管理系統的編程,要求看問題的補充。有的發我Q1823613009

湊合著用吧

#include <iostream>

#include <iomanip>

#include <string>

#include <fstream>//輸入/輸出文件流類

using namespace std;

const int Maxr=100;//最多的讀者

const int Maxb=100;//最多的圖書

const int Maxbor=5;//每位讀者最多借五本書

//讀者類,實現對讀者的信息的描述

class Reader

{

private:

int tag; //刪除標記 1:已刪 0:未刪

int no; //讀者編號

char name[10]; //讀者姓名

int borbook[Maxbor];//所借圖書

public:

Reader() {}

char *getname() {return name;} //獲取姓名

int gettag() {return tag;} //獲取刪除標記

int getno() {return no;} //獲取讀者編號

void setname(char na[]) //設置姓名

{

strcpy(name,na);

}

void delbook(){ tag=1; }//設置刪除標記 1:已刪 0:未刪

void addreader(int n,char *na)//增加讀者

{

tag=0;

no=n;

strcpy(name,na);

for(int i=0;i<Maxbor;i++)

borbook[i]=0;

}

void borrowbook(int bookid)//借書操作

{

for(int i=0;i<Maxbor;i++)

{

if (borbook[i]==0)

{

borbook[i]=bookid;

return;

}

}

}

int retbook(int bookid)//還書操作

{

for(int i=0;i<Maxbor;i++)

{

if(borbook[i]==bookid)

{

borbook[i]=0;

return 1;

}

}

return 0;

}

void disp()//讀出讀者信息

{

cout << setw(5) << no <<setw(10) << name<<"借書編號:[";

for(int i=0;i<Maxbor;i++)

if(borbook[i]!=0)

cout << borbook[i] << "|";

cout << "]"<<endl;

}

};

//讀者類庫,實現建立讀者的個人資料

class RDatabase

{

private:

int top; //讀者記錄指針

Reader read[Maxr];//讀者記錄

public:

RDatabase() //構造函數,將reader.txt讀到read[]中

{

Reader s;

top=-1;

fstream file("reader.txt",ios::in);//打開壹個輸入文件

while (1)

{

file.read((char *)&s,sizeof(s));

if (!file)break;

top++;

read[top]=s;

}

file.close(); //關閉 reader.txt

}

void clear()//刪除所有讀者信息

{

top=-1;

}

int addreader(int n,char *na)//添加讀者時先查找是否存在

{

Reader *p=query(n);

if (p==NULL)

{

top++;

read[top].addreader(n,na);

return 1;

}

return 0;

}

Reader *query(int readerid)//按編號查找

{

for (int i=0;i<=top;i++)

if (read[i].getno()==readerid &&

read[i].gettag()==0)

{

return &read[i];

}

return NULL;

}

void disp() //輸出所有讀者信息

{

for (int i=0;i<=top;i++)

read[i].disp();

}

void readerdata();//讀者庫維護

~RDatabase() //析構函數,將read[]寫到reader.txt文件中

{

fstream file("reader.txt",ios::out);

for (int i=0;i<=top;i++)

if (read[i].gettag()==0)

file.write((char *)&read[i],sizeof(read[i]));

file.close();

}

};

void RDatabase::readerdata()

{

char choice;

char rname[20];

int readerid;

Reader *r;

while (choice!='0')

{

cout <<"\n\n\t\t\t讀 者 維 護\n\n\n\t\t 1 新 增\n\n\t\t 2 更改\n\n\t\t 3 刪 除\n\n\t\t 4 查 找\n\n\t\t 5 顯 示\n\n\t\t 6 全 刪\n\n\t\t 0 退出"<<endl;

cin >> choice;

switch (choice)

{

case '1':

cout << "輸入讀者編號:";

cin >> readerid;

cout << "輸入讀者姓名:";

cin >> rname;

addreader (readerid,rname);

break;

case '2':

cout << "輸入讀者編號:";

cin >> readerid;

r=query(readerid);

if (r==NULL)

{

cout << " 該讀者不存在 "<<endl;

break;

}

cout << "輸入新的姓名:";

cin >> rname;

r->setname(rname);

break;

case '3':

cout << " 輸入讀者編號:";

cin >> readerid;

r=query(readerid);

if (r==NULL)

{

cout <<" 該讀者不存在" << endl;

break;

}

r->delbook();

break;

case '4':

cout << "讀入讀者編號:";

cin >> readerid;

r=query(readerid);

if (r==NULL)

{

cout <<"該讀者不存在"<< endl;

break;

}

r->disp();

break;

case '5':

disp();

break;

case '6':

clear();

break;

default:cout<<"輸入錯誤,請從新輸入:";break;

}

}

}

//圖書類,實現對圖書的描述,圖書的編號,書名,借出,還入等

class Book

{

private:

int tag;//刪除標記 1:已刪 0:未刪

int no;//圖書編號

char name[20];//書名

int onshelf;//是否再架 1:再架 2:已借

public:

Book(){}

char *getname() { return name; }//獲取姓名

int getno(){ return no; }//獲取圖書編號

int gettag(){ return tag; }//獲取刪除標記

void setname(char na[])//設置書名

{

strcpy(name,na);

}

void delbook(){ tag=1;}//刪除圖書

void addbook(int n,char *na)//增加圖書

{

tag=0;

no=n;

strcpy(name,na);

onshelf=1;

}

int borrowbook()//借書操作

{

if (onshelf==1)

{

onshelf=0;

return 1;

}

return 0;

}

void retbook()//還書操作

{

onshelf=1;

}

void disp()//輸出圖書

{

cout << setw(6) << no << setw(18) << name << setw(10)

<<(onshelf==1? "在架":"已借") <<endl;

}

};

//圖書庫類,實現對圖書的維護,查找,刪除等

class BDatabase

{

private:

int top; //圖書記錄指針

Book book[Maxb]; //圖書記錄

public:

BDatabase()//構造函數,將book.txt讀到book[]中

{

Book b;

top=-1;

fstream file("book.txt",ios::in);

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)//增加圖書

{

Book *p=query(n);

if (NULL==p)

{

top++;

book[top].addbook(n,na);

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;

}

void bookdata();//圖書庫維護

void disp()

{

for (int i=0;i<=top;i++)

if (book[i].gettag()==0)

book[i].disp();

}

~BDatabase()//析構函數,將book[]寫到book.txt文件中

{

fstream file("book.txt",ios::out);

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()

{

char choice;

char bname[40];

int bookid;

Book *b;

while (choice!='0')

{

cout <<"\n\n\n\t\t\t圖 書 維 護 "<<endl<<endl;

cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 刪 除\n\t\t4 查 找\n\t\t5 顯示\n\t\t6 全 刪\n\t\t0 退 出"<<endl;

cin >> choice;

switch (choice)

{

case '1':

cout << "輸入圖書編號:"<<endl;

cin >> bookid;

cout << "輸入圖書書名:"<<endl;

cin >> bname;

addbook(bookid,bname);

break;

case '2':

cout << "輸入圖書編號:"<<endl;

cin >> bookid;

b=query(bookid);

if (b==NULL)

{

cout << " 該圖書不存在 "<<endl;

break;

}

cout << "輸入新的書名:"<<endl;

cin >> bname;

b->setname(bname);

break;

case '3':

cout <<" 讀入圖書編號:"<<endl;

cin >> bookid;

b=query(bookid);

if (b==NULL)

{

cout <<" 該圖書不存在" << endl;

break;

}

b->delbook();

break;

case '4':

cout << " 讀入圖書編號:"<<endl;

cin >> bookid;

b=query(bookid);

if (b==NULL)

{

cout <<" 該圖書不存在"<< endl;

break;

}

b->disp();

break;

case '5':

disp();

break;

case '6':

clear();

break;

default:cout<<"輸入錯誤,請從新輸入:";

}

}

}

//main() 函數的實現,程序的主界面的引導

void main()

{

char choice;

int bookid,readerid;

RDatabase ReaderDB;

Reader *r;

BDatabase BookDB;

Book *b;

while(choice!='0')

{

cout <<endl<<endl<<"\t\t\t 圖 書 管 理 系 統\n\n\n";

cout <<"\t\t\t1 借 書\n\n\t\t\t2 還 書 \n\n\t\t\t3 圖 書 維護\n\n\t\t\t4 讀 者 維 護\n\n\t\t\t0 離 開"<<endl;

cin >> choice;

switch (choice)

{

case '1':

cout <<" 借書 讀者編號:";

cin >>readerid;

cout <<" 圖書編號: ";

cin >>bookid;

r=ReaderDB.query(readerid);//按編號查找

if (NULL==r)

{

cout <<" 不存在該讀者,不能借書"<< endl;

break;

}

b=BookDB.query(bookid);

if (b==NULL)

{

cout <<" 不存在該圖書,不能借書"<< endl;

break;

}

if (b->borrowbook()==0)

{

cout << " 該圖書已借出,不能借書"<< endl;

break;

}

r->borrowbook(b->getno());

break;

case '2':

cout<<"還書\n 讀者編號:";

cin >>readerid;

cout << " 圖書編號:";

cin >>bookid;

r=ReaderDB.query(readerid);

if (r==NULL)

{

cout <<" 不存在該讀者,不能還書" << endl;

break;

}

b=BookDB.query(bookid);

if (b==NULL)

{

cout <<" 不存在該圖書,不能還書" <<endl;

break;

}

b->retbook();

r->retbook(b->getno());

break;

case '3':

BookDB.bookdata();

break;

case '4':

ReaderDB.readerdata();

break;

default:cout<<"輸入錯誤,請從新輸入:";

}

}

}

  • 上一篇:UG如何設計豐田標誌註塑模具?
  • 下一篇:電競專業學生就業方向?
  • copyright 2024編程學習大全網