图书管理程序

图书管理程序,第1张

自己运行下 看行不行

#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=0i<Maxbori++)

borbook[i]=0

}

void borrowbook(int bookid)//借书 *** 作

{

for(int i=0i<Maxbori++)

{

if (borbook[i]==0)

{

borbook[i]=bookid

return

}

}

}

int retbook(int bookid)//还书 *** 作

{

for(int i=0i<Maxbori++)

{

if(borbook[i]==bookid)

{

borbook[i]=0

return 1

}

}

return 0

}

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

{

cout <<setw(5) <<no <<setw(10) <<name<<"借书编号:["

for(int i=0i<Maxbori++)

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=0i<=topi++)

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

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

{

return &read[i]

}

return NULL

}

void disp() //输出所有读者信息

{

for (int i=0i<=topi++)

read[i].disp()

}

void readerdata()//读者库维护

~RDatabase() //析构函数,将read[]写到reader.txt文件中

{

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

for (int i=0i<=topi++)

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=0i<=topi++)

if (book[i].getno()==bookid &&book[i].gettag()==0)

{

return &book[i]

}

return NULL

}

void bookdata()//图书库维护

void disp()

{

for (int i=0i<=topi++)

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

book[i].disp()

}

~BDatabase()//析构函数,将book[]写到book.txt文件中

{

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

for (int i=0i<=topi++)

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<<"输入错误,请从新输入:"

}

}

}

你看行不?

是否可以解决您的问题?

政府刊物是由负责编辑和发送或销售文本,图像,以及磁带,软件等通过各种渠道的政府机构打印。和政府颁布了一项法令,以反映他们的思想,意志,物质载体的行为,也是政府的思想,意志,行为各大媒体的社会影响。 政府及其所属机构公布的具有官方性质的文件。也被称为官方出版物。美国政府出版物没有统一的定义。大致可分为两类:一类是行政文件,包括会议纪要,司法信息,条约,决议,法规和规章,以及调查信息。另外就是文献,包括研究,信息科学与技术政策文件的技术。数量庞大的政府出版物,广泛的内容,发布快捷,可靠的数据是信息的重要来源。书的点击看详细教科文组织定义是:如果按(供应商)不包括在超过49打印的出版物,包括前盖和后盖,标题和作者具有特定名称,有ISBN编译的定价,并获得版权的出版叫做书。基于知识版权作品与文字或记录在某种形式的材料上方的其它信息符号的目的的传播点击看详细图书书是人类社会实践的产物,是一种特殊的生长显著知识传播工具。定义点击看详细期刊是:写由不同的主题构成集合定期出版物作品的数量。点击看详细粗体可以发现,从政府出版的书籍和期刊之间的区别:点击看详细之一,不同的编辑器,不同的作者。政府出版物印刷主...

如果认为我回答的好记得给赞哦。

ahcaonaqiz21185587552016-12-23 9:09:23

enumState{Borrowed,Available}//Borrowed表示被借出,Available表示书籍可用。

classBook{

public:

//定义类型别名以实现抽象

typedefmultiset<Book>data_t

//不允许书籍默认构造。只允许通过传入书名构造。将书籍状态设为“可用”

Book()=delete

Book(constname_t&name):name(name),state(Available){}

~Book()=default

//使用书名比较书籍间的相互关系

booloperator<(constBook&other)const{returnname<other.name}

booloperator==(constBook&other)const{returnname==other.name}

//一些访问和修改的函数

//关于书籍名字和书籍状态(“可用”,“已借”)

StateGetState()const{returnstate}

name_tGetName()const{returnname

voidSetName(constname_t&_name){name=_name}

voidSetState(StatenewState){state=newState}

private:

name_tname

Statestate

}

classLibrary{

public:

//定义一系列类型类型别名实现抽象

typedefmultiset<Book>data_t

typedeftypenameBook::name_tname_t

typedeftypenamedata_t::iteratorIterator

typedefvector<Book>Info_t

typedefstringfile_name_t

//只允许该类默认构造,不允许复制

Library()=default

Library(constLibrary&)=delete

Library&operator=(constLibrary&)=delete

//分别为增加,删除,借阅,归还书籍。

voidInsert(constBook&book){libraryData.insert(book)}

boolRemove(constname_t&name)

boolBorrow(constname_t&name)

boolGiveBack(constname_t&name)

//返回该类中书籍的相关信息

vector<Book>GetBookInfo(constname_t&name)const

vector<Book>GetAllBookInfo()const

//返回该类中书籍的数目

size_tCount(constname_t&name)const{returnlibraryData.count(Book(name))}

size_tNumOfBook()const{returnlibraryData.size()}

//保存信息到文件,从文件读取信息

//接受文件名为参数

voidSaveToFile(conststring&fileName)const

boolLoadFromFile(conststring&fileName)

private:

//储存书籍的容器

data_tlibraryData

//内部辅助函数。输入书籍的名字,返回一对迭代器(std::pair)指向一个区间范围。该范围内的书籍都有相同名字name

inlineauto_find(constname_t&name)const->constpair<Iterator,Iterator>

{

returnlibraryData.equal_range(Book(name))

}

}

//打印“>>>”用以实现交互界面

inlinevoidPrintPromt(ostream&os)

//打印指导信息。每次运行该系统都会输出该内容

voidPrintInstroduction(ostream&os)

//打印帮助信息。在系统中输入help会调用该函数输出帮助

voidPrintHelp(ostream&os)

//打印错误信息。该函数会将参数s直接打印出来(加上换行符)

inlinevoidPrintError(ostream&os,conststring&s)

//将系统中的全部书籍以表格形式输出。接受library类。通过调用PrintTitle(打印表格)和PrintAllBook(打印所有书籍)执行打印

inlinevoidPrintTable(ostream&os,constLibrary&lib)

//打印表格的题头。执行实际的打印行为

inlinevoidPrintTitle(ostream&os)

//打印系统中的全部书籍。通过调用PrintBookInOneLine打印书籍

voidPrintAllBook(ostream&os,constLibrary&lib)

//实际执行打印行为的函数。每次只打印一行。接受Book的对象为参数

inlinevoidPrintBookInOneLine(ostream&os,constBook&book)

扩展资料

C++编写程序注意事项

1、算:计算利润,计算一元二次方程的根,计算一个数列的和等。

2、找:找最大的值,找最短的一条路径,找一个字符串的位置等。

3、实现功能:实现撤销,重做的功能实现某种 *** 作的功能等。

4、字符串查找,在记事本里有一个查找的功能,输入要查找的关键字,能够快速找到它所在位置,如果没找到并给出提示,现在要求在一个字符串里找到一个子串,和记事本的查找功能一样。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11054329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存