C++図書館管理プログラム(継承、マルチステート)

112146 ワード

分析:1.元の図書館管理プログラムでは、私はベースクラスのUserが1つしかなく、それから人員の継承を実現し、書籍の継承を完了していません.だから新しいプログラムの中で、私は新しいBookクラスをベースクラスとして追加して、それから新しいクラスとFileManagementクラスを派生して、各種の情報の記憶に用いて、私はこのプログラムの中で、依然としてファイルの記憶を使って、書籍と読者に対して添削して調べる過程の中で、プログラムはそれに応じてtextドキュメントの情報を修正します.    2. そして、異なるユーザーを区別するために、異なる操作を行うために、ユーザーは初期にログインし、システムはユーザーのアカウントによって異なる役割のユーザーを区別する(管理者のアカウントは文字Aから始まり、普通のユーザーのアカウントは文字Uから始まる)、それぞれ異なるユーザーインタフェースに入り、この機能は虚関数を使って多態を実現することができる.3.管理者は本の情報を見ることができ、本の情報を追加、削除、修正することができる.4.普通のユーザーはすべての本の情報、具体的な1冊の本の情報と本を借りて、本を返すことができます;    5. クラスの説明は以下の通りです:(1)Peopleはユーザーのアカウントパスワード属性(private)を保存し、対応するset、get方法を提供します.(2)UserはPeopleから継承し、display()を書き換え、以下の機能を追加する:viewBookInfo()図書詳細情報を表示BorrowBook()貸し出し図書ReturnBook()図書を返却する機能(3)AdministratorはPeopleから継承し、display()を書き換える以下の機能を追加します:addBook()図書deleteBook()図書reSetBook()図書を削除します(4)Bookのすべての本クラスのベースクラスを修正して、本の各種の属性を持って、そして相応のset、get方法と虚関数toString()を提供します;    (5)E_Book、Magazine、Movie、MusicはBookから継承され、toString()を書き換える.(6)DVDはムービーから引き継ぐ;(7)3種類のFileManagement:①map getPeopleInfo()はユーザファイルpeopleを担当する.txt情報読み取り②vector getBooks()は、本情報ファイルbookを担当する.txtは、③void saveBooks(vectorvec)の読み取りと、ブック情報の修正④Book*getObject(string ID)の保存を行い、ブックのID情報に基づいて、対応するタイプのオブジェクトポインタを返す.
以上は私の分析で、私も1つの完全な実験報告を書いたことがあって、中には類の詳しい設計に対して含んで、興味があるのはダウンロードして見て、みんなに役に立つことを望んで、最終的にやはりみんなに頼って自分で悟って、その中の原理を理解します.ダウンロードしたい場合はDownloadをクリックしてください
コード実装
皆さんもしダウンロードしたくないならば、私は下でもすべてのコードを书いて、みんなに1つの参考をあげて、もし何か间违った地方があるならば、みんなの评论を歓迎して、いっしょに顽张りましょう!!!
1.(People.h)
#include
#include"Book.h"
#include 
#include "FileManagement.h"
using namespace std;
class People//  
{
private:
	string account;
	string password;
protected:
	FileManagement fileManagement; //          ,       
	vector<Book *> Books;  //      
	map<string, string> accounts; //           
public:
	People();//      
	People(string account, string password);
	~People();
	string getAccount();
	string getPassword();
	void setAccount(string account);//      
	void setPassword(string password);//      
	void viewBooks(vector<Book *> Books);  //         
	virtual void Login();    //      
	virtual void display();  //         
};

2.(People.cpp)
#include "People.h"
People::People()
{
}
People::~People()
{
}
People::People(string account, string password) {
	this->account = account;
	this->password = password;
}
string People::getAccount() {
	return this->account;
}
string People::getPassword() {
	return this->password;
}
void People::setAccount(string account) {
	this->account = account;
}
void People::setPassword(string password) {
	this->password = password;
}
void People::viewBooks(vector<Book *> Books) {
	cout << "Number" << "  " << "ID" << "           " << "Name" << "      " << "Author" << "      " << "Publisher"
		<< "  " << "Price" << "  " << "IsBorrowed
"
; for (unsigned int i = 0; i < Books.size(); i++) { cout << " "; cout.width(4);// cout.setf(ios::left);// cout << i << " "; cout.width(10); cout.setf(ios::left); cout << Books[i]->getID() << " "; cout.width(8); cout.setf(ios::left); cout << Books[i]->getName() << " "; cout.width(10); cout.setf(ios::left); cout << Books[i]->getAuthor() << " "; cout.width(9); cout.setf(ios::left); cout << Books[i]->getPublisher() << " "; cout.width(5); cout.setf(ios::left); cout << Books[i]->getPrice() << " "; if (!Books[i]->getBorrowed()) { cout.setf(ios::left); cout << "No
"
; } else { cout.setf(ios::left); cout << "Yes
"
; } } } void People::Login() { // accounts = fileManagement.getPeopleInfo(); Books = fileManagement.getBooks(); // if (accounts[getAccount()] == getPassword()) { // system("cls"); this->display(); } else { system("cls"); cout << "Account And Password Is Error! Please Again!
"
; string password, account; cout << "Account:"; cin >> account; cout << "Password:"; cin >> password; // , setAccount(account); setPassword(password); this->Login(); } } void People::display() { }

3.(User.h)
class User :public People//User     People
{
public:
	User();//      
	User(string account,string password);
	~User();//    
	void display();//      
	void viewBookInfo();//      
	void borrowBook();//  
	void ReturnBook();//  
};

4.(User.cpp)
#include "User.h"
User::User()
{
}
User::~User()
{
}
User::User(string account, string password):People(account, password)//       ,         
{
}
//          
void User::viewBookInfo() {
	cout << "Input Book's Number:";
	int num;
	cin >> num;
	cout << endl;
	cout << Books[num]->toString();
	cout << endl;
	display();
}
//  
void User::borrowBook() {
	cout << "Input Book's Number:";
	int num;
	cin >> num;
	Books[num]->setBorrowed(true);
	system("cls");//      
	cout << "Success Borrow Book!

"
; viewBooks(Books); display(); } // void User::ReturnBook() { cout << "Input Book's Number:"; int num; cin >> num; Books[num]->setBorrowed(false); system("cls"); cout << "Success Return Book!

"
; viewBooks(Books); display(); } // void User::display() { cout << "Operations:
"
; cout << "1、View Books!
"
; cout << "2、View Book's Information!
"
; cout << "3、Borrow Book!
"
; cout << "4、Return Book!
"
; cout << "5、Exit Library!
"
; cout << endl; cout << "Input Your Operation:"; int chose; cin >> chose; switch (chose) { case 1: system("cls"); viewBooks(Books); display(); break; case 2: viewBookInfo(); break; case 3: borrowBook(); break; case 4: ReturnBook(); break; case 5: exit(1); } }

5.(Administrator.h)
#include "People.h"
#include "Book.h"
#include "FileManagement.h"

class Administrator :public People
{

private:
	string arr[10] = { "E_Book", "Magazine", "Music", "DVD", "Movie" };

public:
	Administrator();
	Administrator(string account, string password);
	~Administrator();
	void display();
	void deleteBook();
	void addBook();
	void ResetBook();
};

6.(Administrator.cpp)
#include "Administrator.h"
Administrator::Administrator()
{
}
Administrator::Administrator(string account, string password):People(account, password)
{
}
Administrator::~Administrator()
{
}
//    
void Administrator::deleteBook() {
	cout << "Input Book's Number:";
	int num;
	cin >> num;
	Books.erase(Books.begin() + num);
	system("cls");
	viewBooks(Books);
	cout << endl;
	display();
}
//    
void Administrator::addBook() {
	cout << "Chose Book's Type: 1、E_Book 2、Managezine 3、Music 4、DVD 5、Movie
"
; int type; cin >> type; cout << "Input Book's ID:"; string ID; cin >> ID; Book * book; book = fileManagement.getObject(arr[type - 1]); book->setBorrowed(false); book->setID(arr[type - 1] + ID); cout << "Input Book's Name:"; string name; cin >> name; book->setName(name); cout << "Input Book's Author:"; string author; cin >> author; book->setAuthor(author); cout << "Input Book's Publisher:"; string Publisher; cin >> Publisher; book->setPublisher(Publisher); cout << "Input Book's Price:"; int price; cin >> price; book->setPrice(price); cout << "Input Book's Content:"; string Content; cin >> Content; book->setContent(Content); Books.push_back(book); // FileManagement fileMan; fileMan.saveBooks(Books); system("cls"); viewBooks(Books); cout << endl; display(); } // void Administrator::ResetBook() { cout << "Input Chosed Book's Number:"; int num; cin >> num; cout << "Input Book's Name:"; string name; cin >> name; Books[num]->setName(name); cout << "Input Book's Author:"; string author; cin >> author; Books[num]->setAuthor(author); cout << "Input Book's Publisher:"; string Publisher; cin >> Publisher; Books[num]->setPublisher(Publisher); cout << "Input Book's Price:"; int price; cin >> price; Books[num]->setPrice(price); cout << "Input Book's Content:"; string Content; cin >> Content; Books[num]->setContent(Content); // FileManagement fileMan; fileMan.saveBooks(Books); system("cls"); viewBooks(Books); cout << endl; display(); } // void Administrator::display() { cout << "Operations:
"
; cout << "1、View Book Information!
"
; cout << "2、Add Book!
"
; cout << "3、Delete Book!
"
; cout << "4、Reset Book!
"
; cout << "5、Exit Library!
"
; cout << "Input your chosen operation:"; int chosen; cin >> chosen; switch (chosen) { case 1: system("cls"); viewBooks(Books); cout << endl; display(); break; case 2: addBook(); break; case 3: deleteBook(); break; case 4: ResetBook(); break; case 5: exit(1); } }

7.(Book.h)
#include
#include
using namespace std;
class Book
{
private:
	string ID;//    
	string Name;//    
	string Author;//    
	string Publisher;//     
	int price;//    
	bool   isBorrowed;//    
	string content;//     
public:
	Book();
	~Book();
	void setID(string ID);
	string getID();
	void setName(string Name);
	string getName();
	void setAuthor(string Author);
	string getAuthor();
	void setPublisher(string publisher);
	string getPublisher();
	void setPrice(int price);
	int getPrice();
	void setBorrowed(bool flag);
	bool getBorrowed();
	void setContent(string content);
	string getContent();
	virtual string toString();
};

8.(Book.cpp)
#include "Book.h"
Book::Book()
{
}
Book::~Book()
{
}
void Book::setID(string ID) {
	this->ID = ID;
}
string Book::getID() {
	return this->ID;
}
void Book::setName(string Name) {
	this->Name = Name;
}
string Book::getName() {
	return this->Name;
}
void Book::setAuthor(string Author) {
	this->Author = Author;
}
string Book::getAuthor() {
	return this->Author;
}
void Book::setPublisher(string publisher) {
	this->Publisher = publisher;
}
string Book::getPublisher() {
	return this->Publisher;
}
void Book::setPrice(int price) {
	this->price = price;
}
int Book::getPrice() {
	return this->price;
}
void Book::setBorrowed(bool flag) {
	this->isBorrowed = flag;
}
bool Book::getBorrowed() {
	return this->isBorrowed;
}
void Book::setContent(string content) {
	this->content = content;
}
string Book::getContent() {
	return this->content;
}
string Book::toString() {
	return "This is A Book! Its Name's " + getName() + "! And Its Content's " + getContent() + "!
"
; }

9.(E_Book.h)
#include "Book.h"
class E_Book :public Book
{
public:
	E_Book();
	~E_Book();
	string toString();
};

10.(E_Book.cpp)
#include "E_Book.h"
E_Book::E_Book()
{
}
E_Book::~E_Book()
{
}
string E_Book::toString() {
	return "This is An E_Book! Its Name's " + getName() + "! And Its Content's " + getContent() + "!
"
; }

11.(Magazine.h)
#include "Book.h"
class Magazine :public Book
{
public:
	Magazine();
	~Magazine();
	string toString();
};

#include "Magazine.h"

Magazine::Magazine()
{
}

12.(Magazine.cpp)
Magazine::~Magazine()
{
}
string Magazine::toString() {
	return "This is An Magazine! Its Name's " + getName() + "! And Its Content's " + getContent() + "!
"
; }

13.(Music.h)
#include "Book.h"
class Music :public Book
{
public:
	Music();
	~Music();
	string toString();
};

14(Music.cpp)
#include "Music.h"
Music::Music()
{
}
Music::~Music()
{
}
string Music::toString() {
	return "This is A Music! Its Name's " + getName() + "! And Its Content's " + getContent() + "!
"
; }

15.(Movie.h)
#include "Book.h"
class Movie :public Book
{
public:
	Movie();
	~Movie();
	string toString();
};

16.(Movie.cpp)
#include "Movie.h"
Movie::Movie()
{
}
Movie::~Movie()
{
}
string Movie::toString() {
	return "This is A Movie! Its Name's " + getName() + "! And Its Content's " + getContent() + "!
"
; }

17.(DVD.h)
#include "Movie.h"
class DVD :public Movie
{
public:
	DVD();
	~DVD();
	string toString();
};

18.(DVD.cpp)
#include "DVD.h"
DVD::DVD()
{
}
DVD::~DVD()
{
}
string DVD::toString() {
	return "This is A DVD! Its Name's " + getName() + "! And Its Content's " + getContent() + "!
"
; }

19.(FileManagement.h)
#include
#include
#include "Book.h"
using namespace std;

class FileManagement
{
public:
	FileManagement();
	~FileManagement();

	map<string, string> getPeopleInfo();//      people.txt   
	vector<Book *> getBooks();  //      book.txt   
	void saveBooks(vector<Book *> vec);//          
	Book * getObject(string ID);
};

20.(FileManagement.cpp)
#include "FileManagement.h"
#include 
#include "E_Book.h"
#include "Magazine.h"
#include "DVD.h"
#include "Movie.h"
#include "Music.h"


FileManagement::FileManagement()
{
}
FileManagement::~FileManagement()
{
}
Book * FileManagement::getObject(string ID) {
//      ,        
	if (ID.find("E_Book") != string::npos)
	{
		return new E_Book();
	}
	//     ,       
	if (ID.find("Magazine") != string::npos)
	{
	    return new Magazine();
	}
	//     ,       
	if (ID.find("Music") != string::npos)
	{
		return new Music();
	}
	//   DVD,   DVD  
	if (ID.find("DVD") != string::npos)
	{
		return new DVD();
	}
	//   Movie,   Movie  
	if (ID.find("Movie") != string::npos)
	{
		return new Movie();
	}
	return NULL;
}
map<string, string> FileManagement::getPeopleInfo() {
	ifstream ifile("people.txt", ios::in);
	if (!ifile)
	{
		cerr << "open people error!" << endl;
	}
	map<string, string> mp;
	//        
	while (!ifile.eof())
	{
		string account, password;
		ifile >> account >> password;
		mp[account] = password;
	}
	ifile.close();
	return mp;
}
vector<Book *> FileManagement::getBooks() {
	ifstream ifile("book.txt", ios::in);

	if (!ifile)
	{
		cerr << "open Book error" << endl;
	}
	vector<Book *> Books;
	Book * book;
	string ID, Name, Author, Pubilsher, Content;
	int price, flag;
	while (!ifile.eof())
	{
		ifile >> ID >> Name >> Author >> Pubilsher >> price >> flag >> Content;
		book = getObject(ID);
		book->setID(ID);
		book->setAuthor(Author);
		book->setName(Name);
		book->setPublisher(Pubilsher);
		book->setPrice(price);
		book->setContent(Content);
		if (flag == 0)
			book->setBorrowed(false);
		else
			book->setBorrowed(true);
		Books.push_back(book);
	}
	ifile.close();
	return Books;
}
void FileManagement::saveBooks(vector<Book *> vec) {
	ofstream ofile("book.txt", ios::out);
	if (!ofile)
	{
		cout << "open error";
	}
	for (unsigned int i = 0; i < vec.size(); i++)
	{
		ofile << vec[i]->getID() << " "
			<< vec[i]->getName() << " "
			<< vec[i]->getAuthor() << " "
			<< vec[i]->getPublisher() << " "
			<< vec[i]->getPrice() << " ";
		if (!vec[i]->getBorrowed())
		{
			ofile << 0;
		}
		else
		{
			ofile << 1;
		}
		ofile << " " << vec[i]->getContent();
		if (i != vec.size() - 1)
		{
			ofile << "
"
; } } ofile.close(); }

21.(mainfunction)
#include
#include "Book.h"
#include "FileManagement.h"
#include "User.h"
#include "Administrator.h"
using namespace std;
int main() {
	string account, password;
	cout << "Welcom to Library!
"
; cout << "Account:"; cin >> account; cout << "Password:"; cin >> password; if (account.find("A") != string::npos)// { Administrator * admin = new Administrator(account, password); admin->Login(); } if (account.find("U") != string::npos)// { User * user = new User(account, password); user->Login(); } return 0; }