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)
2.(People.cpp)
3.(User.h)
4.(User.cpp)
5.(Administrator.h)
6.(Administrator.cpp)
7.(Book.h)
8.(Book.cpp)
9.(E_Book.h)
10.(E_Book.cpp)
11.(Magazine.h)
12.(Magazine.cpp)
13.(Music.h)
14(Music.cpp)
15.(Movie.h)
16.(Movie.cpp)
17.(DVD.h)
18.(DVD.cpp)
19.(FileManagement.h)
20.(FileManagement.cpp)
21.(mainfunction)
以上は私の分析で、私も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;
}