在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例常规C/C++编程 → 图书馆

图书馆

常规C/C++编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:2.45M
  • 下载次数:43
  • 浏览次数:415
  • 发布时间:2015-11-22
  • 实例类别:常规C/C++编程
  • 发 布 人:xiangzz159
  • 文件格式:.zip
  • 所需积分:2
 相关标签:

实例介绍

【实例简介】图书馆数据结构实例
【实例截图】

【核心代码】

#include<iostream>

#include<string>
#include<list>
#include<algorithm>

using namespace std;

class Patron;

class Book
{
public:
Book()
{
patron=0;
}
bool operator==(const Book& bk) const
{
return strcmp(title, bk.title)==0;
}
private:
char *title;
Patron *patron;
ostream &printBook(ostream &) const;
friend ostream & operator<<(ostream &out, const Book& bk)
{
return bk.printBook(out);
}
friend class CheckedOutBook;
friend Patron;
friend void includeBook();
friend void checkOutBook();
friend void returnBook();
};

class Author{
public:
Author(){
}
bool operator==(const Author &ar) const{
return strcmp(name, ar.name)==0;
}
private:
char *name;
list<Book> books;
ostream &printAuthor(ostream&) const;
friend ostream &operator<<(ostream &out, const Author &ar)
{
return ar,printAuthor(out);
}
friend void includeBook();
friend void checkOutBook();
friend void returnBook();
friend class CheckedOutBook;
friend Patron;
};

class CheckedOutBook{
public:
CheckedOutBook(list<Author>::iterator ar=0,
list<Book>::iterator bk=0){
author=ar;
book=bk;
}
bool operator==(const CheckedOutBook& bk) const{
return strcmp(author->name, bk.author->name)==0 && 
strcmp(book->title, bk.book->title)==0;
}
private:
list<Author>::iterator author;
list<Book>::iterator book;
friend void checkOutBook();
friend void returnBook();
friend Patron;
};

class Patron
{
public:
Patron(){
}
bool operator==(const Patron &pn) const {
return strcmp(name, pn.name)==0;
}
private:
char *name;
list<CheckedOutBook> books;
ostream &printPatron(ostream&) const;
friend ostream &operator<<(ostream &out, const Patron &pn){
return pn.printPatron(out);
}
friend void checkedOutBook();
friend void returnBook();
friend Book;
};

list<Author> catalog['Z' 1];
list<Patron> people['Z' 1];

ostream &Author::printAuthor(ostream &out) const{
out << name << endl;
list<Book>::const_iterator ref=books.begin();
for(; ref!=books.end(); ref )
out << *ref;
return out;
}

ostream &Book::printBook(ostream &out) const{
out << "*" << title;
if(patron!=0)
out << " - checked out to " << patron->name;
out << endl;
return out;
}

ostream &Patron::printPatron(ostream& out) const{
out << name;
if(!books.empty())
{
out << " has the following books:\n";
list<CheckedOutBook>::const_iterator bk=books.begin();
for(; bk!=books.end(); bk )
out << "    *" << bk->author->name << ", "
<< bk->book->title << endl;
}
else
out << " has no books\n";
return out;
}

template<class T>
ostream &operator<<(ostream &out, const list<T>& lst)
{
for(list<T>::const_iterator ref=lst.begin(); ref!=lst.end();
ref )
out << *ref;
return out;
}

char* getString(char *msg){
char s[82], i, *destin;
cout << msg;
cin.get(s, 80);
while(cin.get(s[81]) && s[81]!='\n');
destin=new char[strlen(s) 1];
for(i=0; destin[i]=toupper(s[i]); i );
return destin;
}

void status()
{
register int i;
cout << "Library has the following books:\n\n";
for(i='A'; i<='Z'; i )
if(!catalog[i].empty())
cout << catalog[i];
cout << "\nThe following people are using the libraty:\n\n";
for(i='A'; i<='Z'; i )
if(!people[i].empty())
cout << people[i];
}

void includeBook()
{
Author newAuthor;
Book newBook;
newAuthor.name=getString("Enter author's name: ");
newBook.title=getString("Enter the title of the book: ");
list<Author>::iterator oldAuthor=
find(catalog[newAuthor.name[0]].begin(),
catalog[newAuthor.name[0]].end(), newAuthor);
if(oldAuthor==catalog[newAuthor.name[0]].end()){
newAuthor.books.push_front(newBook);
catalog[newAuthor.name[0]].push_front(newAuthor);
}
else 
(*oldAuthor).books.push_front(newBook);
}

void checkOutBook()
{
Patron patron;
Author author;
Book book;
list<Author>::iterator authorRef;
list<Book>::iterator bookRef;
patron.name=getString("Enter patron's name: ");
while(true)
{
author.name=getString("Enter author's name: ");
authorRef=find(catalog[author.name[0]].begin(),
catalog[author.name[0]].end(), author);
if(authorRef==catalog[author.name[0]].end())
cout << "Misspelled author's name\n";
else
break;
}
while(true)
{
book.title=getString("Enter the title of the book: ");
bookRef=find((*authorRef).books.begin(), (*authorRef).books.end(), book);
if(bookRef==(*authorRef).books.end())
cout << "Misspelled title\n";
else break;
}
list<Patron>::iterator patronRef;
patronRef=find(people[patron.name[0]].begin(), 
people[patron.name[0]].end(), patron);
CheckedOutBook checkOutBook(authorRef, bookRef);
if(patronRef==people[patron.name[0]].end())
{
patron.books.push_front(checkedOutBook);
people[patron.name[0]].push_front(patron);
(*bookRef).patron=&*people[patron.name[0]].begin();
}
else
{
(*patronRef).books.push_front(checkedOutBook);
(*bookRef).patron=&*patronRef;
}
}

void returnBook()
{
Patron patron;
Book book;
Author author;
list<Patron>::iterator patronRef;
list<Book>::iterator bookRef;
list<Author>::iterator authorRef;
while(true)
{
patron.name=getString("Enter patron's name: ");
patronRef=find(people[patron.name[0]].begin(),
people[patron.name[0]].end(), patron);
if(patronRef==people[patron.name[0]].end())
cout << "Patron's name misspelled\n";
else
break;
}
while(true)
{
author.name=getString("Enter author's name: ");
authorRef=find(catalog[author.name[0]].begin(),
catalog[author.name[0]].end(), author);
if(authorRef==catalog[author.name[0]].end())
cout << "Misspelled author's name\n";
else
break;
}
while(true)
{
book.title=getString("Enter the title of the book: ");
bookRef=find((*authorRef).books.begin(), (*authorRef).books.end(), book);
if(bookRef==((*authorRef).books.end())
cout << "Misspelled title\n";
else
break;
}
CheckedOutBook checkedOutBook(authorRef, bookRef);
(*bookRef).patron=0;
(*patronRef).books.remove(checkedOutBook);
}

int menu()
{
int option;
cout << "\nEnter one of the following options:\n"
<< "1. Include a book in the catalog\n2. Check out a book\n"
<< "Your option?";
cin >> option;
cin.get();
return option;
}
void main()
{
while(true)
switch (menu())
{
case 1:
includeBook();
break;
case 2:
checkedOutBook();
break;
case 3:
returnBook();
break;
case 4:
status();
break;
case 5:
return 0;
default:
cout << "Wrong option, try again: ";
}
}

标签:

实例下载地址

图书馆

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警