C++図書館管理システム
I. 実験名
図書館管理システム
II. 実験の目的
システムの終了、図書の追加、削除、図書の貸出、返却、図書情報の表示、図書の照会などの機能を持つ小規模な図書館管理システムのシミュレーションプログラムをC++で設計・開発し、その機能を実現しなさい。継承構造、およびオブジェクト、クラス、チェーンの使用とメンバ関数、コンストラクタの定義と呼び出し、およびプログラムの実験装置とデバッグ方法を使用するスキルとテクニックを習得している必要があります。
III. 実験用プラットフォーム
実行環境 VC++6.0
IV. 問題分析
図書館管理システムのシミュレーションプログラムは、出口モジュール、本の追加モジュール、本の削除モジュール、本の借り出しモジュール、本の返却モジュール、本の情報表示モジュール、本の照会モジュールの7つのモジュールに分けることができます。各モジュールは多かれ少なかれ互いに関連しており、例えば、チェックアウトモジュール、図書情報表示モジュール、図書照会モジュールはすべて図書モジュールを追加した後に実行する必要があります。モジュール間の主な関係を理解することは、プログラムの設計と完成に資するので、プログラムの階層が明確で、プログラムを書いて、読んで、デバッグするのは簡単です。以下は、本実験のプロジェクト・アーキテクチャ図である。
この実験では、3つのクラスが定義されています。Itemクラス、Personクラス、Libraryクラス
Itemクラスは、name、item_type、bool Registerというパブリック関数を持ちます(bool関数はtureとforceのみを出力し、登録されているかどうかを判断するために使用します)。
Personクラスは、パブリック関数を持っています。Name (), Adress (), Regist_items.
ライブラリクラスのパブリック関数:ライブラリに本を追加する addBook()、無駄な本を削除する deleteBook()、本が存在するかどうかを判断する前に本を借りる borrowBook()、本を返す returnBook()、一定数の本を借りた人を問い合わせる getReader()、番号を元に配列内の本の添え字を取得する indexOfNum( string num)。
private functions: vector books all books, map<string, int> readers readersとその読者が借りた本の数を格納する、currentNum在庫の本の数、browNumチェックアウトした本の数。
付録
プログラムのソースコードです。
#include
#include
#include
#include
#include
#include
using namespace std;
class item
class
public:
string name;
string item_type;
bool Register;
};
//Magazine class
class magazine :public item
{
string Type;
string Writer;
};
//MusicCd class
class MusicCd :public item
{
string Singer;
};
//Movie class
class Movie :public item
{
string Type;
string Director;
string Actor;
};
//book class
class Book : public item
{
public:
Book() { borrow_flag = false; } //no-parameter constructor
Book(string name, string num, string auther)
:name(name), num(num), auther(auther) {
borrow_flag = false;
} //Constructor with parameters
void setReader(string reader, int lcn, string data); //set reader
void setInfo(string name, string num, string auther); //Set book information
string getName() {
return name;
}
string getNum() { return num; }
string getAuther() {
return auther;
}
bool getBorrow_flag() {
return borrow_flag;
}
string getReader() {
return reader;
}
int getLcn() {
return lcn;
}
string getData() {
return data;
}
bool isBorrow() { return borrow_flag; } // Determine if the book is borrowed or not
void setBorrow_flag(bool b) { borrow_flag = b; }
void showInfo(); //Display data information
private:
string name; //book name
string num; //number (unique marker)
string auther; //author
bool borrow_flag;
string reader; //Reader
int lcn; //library card number
string data; //date of borrowing
};
//DVD movie class
class DVD :public Movie
{
};
//Blu-ray movie class
class Blue_ligh :public Movie
{
};
//user
class Person
{
public:
string Name;
string Adress;
list<item> Regist_items;
};
void Book::setReader(string reader, int lcn, string data)
{
borrow_flag = true;
this->reader.assign(reader);
this->lcn = lcn;
this->data.assign(data);
}
void Book::setInfo(string name, string num, string auther)
{
this->name.assign(name);
this->num.assign(num);
this->auther.assign(auther);
}
void Book::showInfo()
{
cout << "Book name: " << setiosflags(ios_base::left) << setw(56) << name << endl
<< "book_number:" << setw(56) << num<< endl
<< "Book author: " << setw(56) << auther << endl;
if (borrow_flag)
{
cout << "Book is lent. \n"
<< "Reader name: " << setw(56) << reader< < endl
<< "Library card number: " << setw(56) << lcn << endl
<< "Date of borrowing: " <<
int currentNum; // number of books in stock (not including loaned ones)
int brrowNum; //number of books on loan
};
void Library::showInfo()
{
cout << " *************************** all books information ***************************\n\n";
for (int i = 0; i < books.size(); i++)
{
cout << "The " << i + 1 << " Information about this book. " << endl;
books[i].showInfo();
}
system("pause");
system("cls");
}
int Library::indexOfNum(string num)
{
int i;
for (i = 0; i < books.size(); i++)
{
if (books[i].getNum() == num)
return i;
}
return -1;
}
void Library::addBook()
{
Book b;
int temp;
string name, num, auther;
cout << " ***************************** add interface *****************************\n\n";
do {
cout << " Enter book name, number, author: ";
cin >> name >> num >> auther;
b.setInfo(name, num, auther);
if (indexOfNum(num) == -1) {
books.push_back(b);
currentNum++;
cout << "\n added successfully. " << endl;
cout << "Input 1 continues to increase, returning to the previous level Input 2: ";
cin >> temp;
}
else {
cout << "A book with this number already exists, add failed. " << endl;
cout << " "Input 1 continue to re-add, return to the previous level Input 2: ";
cin >> temp;
}
} while (temp == 1);
system("pause");
system("cls");
}
void Library::addBook(string name, string num, string auther)
{
Book b;
b.setInfo(name, num, auther);
books.push_back(b);
}
void Library::deleteBook()
{
int index, temp;
string num;
cout << " ***************************** delete interface *****************************\n\n";
do {
cout << " Enter the number of the book to be deleted: ";
cin >> num;
index = indexOfNum(num);
if (index ! = -1) {
if (!books[index].getBorrow_flag()) {
cout << "Information about the deleted books: \n";
books[index].showInfo();
books.erase(books.begin() + index);
currentNum--;
cout << "Deletion successful. " << endl;
cout << " "Input 1 continue to delete, return to the previous level Input 2: ";
cin >> temp;
}
else {
cout << "Deletion failed! Book has been checked out. " << endl;
cout << " "Input 1 continue to delete, return to the previous level Input 2: ";
cin >> temp;
}
}
else
{
cout << "Deletion failed. Book with number " < < num < < " was not found. \n";
cout << " " input 1 continue to delete, return to the previous level input 2: ";
cin >> temp;
}
} while (temp == 1);
system("pause");
system("cls");
}
void Library::brrowBook()
{
string num;
int index;
cout << " ***************************** borrowing interface *****************************\n\n";
cout << "Enter the number of the book to be checked out: ";
cin >> num;
index = indexOfNum(num);
if (index ! = -1) {
if (books[index].isBorrow()) {
cout << "Borrowing failed, books were checked out as well. \n";
system("pause");
system("cls");
}
else
{
cout << "Information about the book to be borrowed: \n";
books[index].showInfo();
string reader, data;
int lcn;
cout << "Enter the reader's name, library card number, and date of borrowing: ";
cin >> reader >> lcn >> data;
if (readers[reader] ! = 2) {
books[index].setReader(reader, lcn, data);
cout << "Borrowing of books completed. \n";
currentNum--;
brrowNum++;
readers[reader]++;
system("pause");
system("cls");
}
else
{
cout << "Borrowing a book failed, the reader to borrow more than two books. \n";
system("pause");
system("cls");
}
}
}
else
{
cout << "Failed to borrow book. Book number " << num << " not found. \n";
system("pause");
system("cls");
}
}
void Library::returnBook()
{
string num;
cout << " ****
関連
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み】C++ Exception thrown: read access violation.これはnullptrでした。
-
[解決済み】エラー:削除された関数の使用
-
[解決済み] cin bufferをフラッシュする方法を教えてください。
-
[解決済み] 1970年からのミリ秒単位で現在のタイムスタンプを取得する方法(Javaの取得方法と同じ
-
[解決済み] 変数またはフィールド(関数)がvoid宣言されている
-
[解決済み] PostQuitMessage()とDestroyWindow()の論理的な違いは何ですか?
-
[解決済み] Google Mock - モック関数に名前を付けるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] なぜこの2つのコードは異なる出力をするのでしょうか?// bits.c float_i2f
-
[解決済み] オブジェクトファイル内の未解決の外部シンボル
-
[解決済み] オーバーロード * 演算子 - 0個または1個の引数を取る必要があります。
-
[解決済み] no matching function ifstream error を修正する方法は?重複
-
[解決済み] C++ Visual Studio 「非標準の構文。メンバへのポインタを作成するには '&' を使用」 [終了しました]
-
[解決済み] exc_bad_access エラー
-
[解決済み] Fatal Error: 'openssl/conf.h' ファイルが見つかりません。
-
[解決済み] int 型の一時的なものから int& 型の非恒等式参照への無効な初期化
-
[解決済み] 優先キューを用いた中央値の算出
-
[解決済み] QJsonObjectオブジェクトが特定の属性を含んでいるかどうかをチェックする方法はありますか?