1、图书信息管理系统图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:系统以菜单方式工作?图书信息录入功能(图书信息用文件保存)输入?图书信息浏览功能输出?查询和排序功能:(至少一种查询方式)算法? 按书名查询? 按作者名查询图书信息的删除与修改(可选项)#include #include #include #include struct bookData int booknumber; char bookname30; int store; ; struct Person char name20; char studynumbe
2、r10; int count; bookData Rbook2; /bookData Rbook; ; class History public: History(fstream& a)readerbook=a; void writehistory(); void readhistory(fstream&); private: fstream readerbook; ; class Liberian; void Find(fstream&); void CreateTxt(fstream&); class Reader friend Liberian; public: Reader(fstre
3、am&); void print(); void handlebook(fstream&); void change(); bool findreader(); void Addreader(); void deletereader(); private: fstream file; Person person; ; class Liberian public: Liberian(char *,char *); void changeReader(Reader&); void selfprint(); void Append(fstream&); private: char workname2
4、0; char worknumber20; ; int main() fstream bookRecord( book.dat,ios:in| ios:out); if(!bookRecord) cerr Cant open,try again!endl; exit(1); fstream readerRecord(reader.dat,ios:in|ios:out); if(!readerRecord) cerr Cant open,try again!endl; exit(1); int choice; int key; Reader reader(readerRecord);/读者管理系
5、统 Liberian liberian(李天,123456);/图书管理员 History rec(readerRecord);/声明显示历史记录类 while(1) cout 请输入您的选择:nn 1-图书管理员n 2-读者系统n choice; switch(choice) case 1: cout Hello,图书管理员:n; liberian.selfprint();coutendl; cout1- 增加新图书n 2- 改变读者的属性n 3- 显示历史记录n key; switch(key) case 1: liberian.Append(bookRecord); break; cas
6、e 2: liberian.changeReader(reader); break; case 3: rec.readhistory(readerRecord); case 0: break ; break; case 2: cout学生读者n; int iflag=1; /reader.findreader(); cout1- 借书与还书信息n 2- 修改个人信息n key; switch(key) case 1: reader.handlebook(bookRecord); break; case 2: reader.change(); break; case 0: break; brea
7、k; default: return 0; return 0; /增加书籍 void Liberian:Append(fstream& storef) bookData book; int choice; int key; int num; storef.seekp(0,ios:end); int posEnd=storef.tellp(); cout*书籍入库*endl; while(1) cout Please enter your choice:endl; cout1-添加新书n2-已有书籍nchoice; switch(choice) case 1: cout 书号, 书名, 数量?b
8、ook.booknumberbook.booknamebook.store; storef.write(reinterpret_cast(&book),sizeof(bookData); break; case 2: storef.seekg(0,ios:beg); coutkey; do storef.read(reinterpret_cast(&book),sizeof(bookData); while(book.booknumber!=key&storef.tellg()!=posEnd); if(book.booknumber=key) coutbook.booknumber-book
9、.bookname-book.storeendl; cout 输入已有书增加的数量:num; if(num0) book.store+=num; else cout Invalid inputendl; storef.seekp(-long(sizeof(bookData),ios:cur);/ storef.write(reinterpret_cast(&book),sizeof(bookData); cout现在书籍: book.bookname 余量为: book.storeendl; else cout找不到此书,请重新查阅书号是否正确!endl; break; case 0: ret
10、urn ; /书籍查询 void Find(fstream & f) bookData book; int key; int choice; f.seekg(0,ios:end); int posEnd=f.tellp(); cout*书籍查询*endl; while(1) cout 请输入您的选择n 1- 检索一本书n 2- 显示全部书籍n choice; switch(choice) case 1: f.seekg(0,ios:beg); cout输入你想检索书的书号key; do f.read(reinterpret_cast(&book),sizeof(bookData); while
11、(book.booknumber!=key&f.tellg()!=posEnd); if(book.booknumber=key) coutbook.booknumber-book.bookname-book.storeendl; else cout找不到此书,请重新确认!endl; break; case 2: f.seekg(0,ios:beg); do f.read(reinterpret_cast(&book),sizeof(bookData); coutbook.booknumber-book.bookname-book.storeendl; while(f.tellg()!=pos
12、End); break; case 0: return ; Reader:Reader(fstream& c) file=c; Person person=0,0,0,0,0,0, 0,0,0; void Reader:print() coutName-person.namennstudynumber-person.studynumber=3) return; /coutperson.name; while(1) cout1- 借书n 2- 还书n 3- 查找一本书n 0- 返回choice; switch(choice) case 1: filee.seekp(0,ios:end); int
13、 posEnd=filee.tellp(); if(person.count=1) cout 输入你要借阅图书的书号:key; filee.seekg(0); do filee.read(reinterpret_cast(&book),sizeof(bookData); while(book.booknumber!=key&filee.tellp()!=posEnd); /coutbook.booknumberendl; if(book.booknumber=key) /cout 找到你想借阅的图书,成功借阅!0) person.Rbookperson.count=book; person.c
14、ount+=1; book.store-=1; filee.seekp(-long(sizeof(bookData),ios:cur); filee.write(reinterpret_cast(&book),sizeof(bookData); cout 找到你想借阅的图书,成功借阅!endl; cout书籍 :book.bookname剩余的本数为:book.storeendl; else cout 现在此图书已经被借完了,请耐心等待几天!endl; else cout 找不到你想要的图书endl; else cout0) / int iflag=0; filee.seekg(0); cou
15、t 输入你想要还的书的书号:key; for(int i=0;i2;i+) if(key=person.Rbooki.booknumber) person.Rbooki=blankbook; cout成功归还此书!; iflag=1; person.count-; do filee.read(reinterpret_cast(&book),sizeof(bookData); while(book.booknumber!=key&filee.tellp()!=posEnd); if(book.booknumber=key) book.store+=1; filee.seekp(-long(siz
16、eof(bookData),ios:cur); filee.write(reinterpret_cast(&book),sizeof(bookData); cout书籍 :book.bookname余本量为: book.storeendl; if(!iflag) cout 你没有借阅那本书,请确认!endl; / / else / cout=3) return; cout 请输入你的选择!endl; cout1-改变名字!n 2-修改学号rn choice; switch(choice) case 1: coutnewname; strcpy(person.name,newname); bre
17、ak; case 2: coutnewnumber; strcpy(person.studynumber,newnumber); break; default: break; file.seekp(-long(sizeof(Person),ios:cur); file.write(reinterpret_cast(&person),sizeof(Person); cout信息修改成功!endl; void Liberian:selfprint() cout 图书管理员 :n worknumber-workname 为您服务!n; Liberian:Liberian(char *a,char*b
18、) strcpy(workname,a); strcpy(worknumber,b); void Liberian:changeReader(Reader& a) int choice; char newname20;char newnumber10; cout修改读者的数据信息!n; cout1- 增加一个读者n 2- 删除一个读者n choice; switch(choice) case 1: a.Addreader(); break; case 2: a.deletereader(); break; case 0: return; void Reader:Addreader() Pers
19、on temp;bookData book=0,0,0; file.seekp(0,ios:end); int Posend=file.tellp(); cout输入你想要增加的读者的名字temp.name; cout新读者的学号:temp.studynumber; temp.Rbook1=book; temp.Rbook0=book; temp.count=0; file.write(reinterpret_cast(&temp),sizeof(Person); cout 成功添加!temp.nameendl; void Reader:deletereader() file.seekp(0,
20、ios:end); int Posend=file.tellp(); Person person; char name20; cout输入要删除的读者的名字!name; file.seekg(0); do file.read(reinterpret_cast(&person),sizeof(Person); while(strcmp(name,person.name)&file.tellp()!=Posend); if(!strcmp(name,person.name) bookData blankbook=0,0,0; Person guest=0,0,0,0,0,0,0,0,0; file
21、.seekp(-long(sizeof(Person),ios:cur); file.write(reinterpret_cast(&guest),sizeof(Person); cout成功删除!person.nameendl; else cout查无此人!endl; bool Reader:findreader() file.seekp(0,ios:end); int Posend=file.tellp(); char name20; Person guest=0,0,0,0,0,0,0,0,0; coutname; file.seekg(0); do file.read(reinterp
22、ret_cast(&person),sizeof(Person); while(strcmp(name,person.name)&file.tellp()!=Posend); if(!strcmp(name,person.name) cout查到此人:person.nameendl; return true; else cout找不到此人,请重新确认!endl; return false; /借阅历史 void History:readhistory(fstream& a) readerbook=a; char name10=0; readerbook.seekp(0,ios:end); in
23、t Posend=readerbook.tellp(); Person guest; int iflag=1; cout 书籍借阅信息如下:endl; cout姓名 学号 借书量 书籍名endl; readerbook.seekg(0,ios:beg); do readerbook.read(reinterpret_cast(&guest),sizeof(Person); if(strcmp(guest.Rbook1.bookname,name) | strcmp(guest.Rbook1.bookname,name) coutguest.name guest.studynumber guest.count ; for(int i=0;i2;i+) if(st
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1