为c ++设计三本书类

时间:2011-01-18 03:31:51

标签: c++ programming-languages

我对程序世界很陌生,我现在卡住了。我想设计一个包含标题,作者,出版商,类别(杜威十进制)和出版日期的书籍记录。对于booklist我需要知道如何添加新的bookrecord对象,找到给定标题的书记录,删除bookrecord对象,并显示所有bookrecord对象。对于booklistUI,我需要菜单,命令处理器,添加记录,删除记录,显示所有记录。我有点迷失在哪里,我应该如何开始呢?到目前为止我确实有一些......它是否正确?

这是我到目前为止所拥有的

/*
    Title:          CSU Bodie.cpp
    Description:    implements three classes to make a simple searchable list of the library holdings.
*/
#include <iostream>;
#include <string>;
#include <vector>;
using namespace std;

//Define a name class...

class ShortName {
    string FirstName;
    string LastName;

public:
    ShortName();  //Define a default constructor...
    ShortName(string, string); //...and an initializing one...

    //Define some mutators...

    void SetFirst(string First) { FirstName = First; }
    void SetLast(string Last)   { LastName = Last; }

    //...and some accessors...

    string GetFirst()  { return FirstName; }
    string GetLast()   { return LastName;  }

};

ShortName::ShortName()
{
    FirstName = "";
    LastName = "";
}

ShortName::ShortName(string First, string Last)
{
    FirstName = First;
    LastName  = Last;
}

//Define a list class...

class ShortNameList  {
    vector<ShortName> List;  //Create a specific sized list...

public:
    ShortNameList()  {;}  //Nothing for it to do at this point...

    void AddRecord(string, string);
    void ShowList();
};

void ShortNameList::AddRecord( string  First, string Last)
{
    ShortName NameBuffer;

    NameBuffer.SetFirst(First);
    NameBuffer.SetLast(Last);

    List.push_back(NameBuffer);
}

void ShortNameList::ShowList()
{
    int K;
    for(K = 0 ; K < List.size() ; K++)
    cout << List[K].GetFirst() << "  " List[K].GetLast() << endl;
}

class ShortNameUI  {
    ShortNameList Collection;

public:
    ShortNameUI() {;}
        void Menu();
    void AddNewRecord();
    void RunIT();
};


//This gives us options...

void ShortNameUI::Menu()
{
    cout << "Choices..." << endl;
    cout << "====================================================================" << endl;
    cout << "\\tAdd.........allows the user to enter names." << endl;
    cout << "\\tDisplay......shows the names." << endl;
    cout << "\\tQuit.........terminates the program" << endl;
    cout << "====================================================================" << endl;
}

void ShortNameUI::RunIT()
{
    string Command;

    while(true)  {
        Menu();
            cout << "Command: ";
              getline(cin, Command);

            if(Command == "Quit")
                break;
            else if(Command == "Add")
                AddNewRecord();
            else if(Command == "Display")
                Collection.ShowList();
           }
}

void ShortNameUI::AddNewRecord()
{
    string First, Last;

    cout << "Enter Names Below, Stop To Quit" << endl;
    while(true)  {
        cout  << "First Name: ";
                   getline(cin, First);
        if(First == "Stop")
            break;
        cout  << "Last Name: ";
                   getline(cin, Last);
        if(Last == "Stop")
            break;
        Collection.AddRecord(First, Last);
             }
}

int  main()
{
    ShortNameUI NameList;
    NameList.RunIT();
}



}

2 个答案:

答案 0 :(得分:0)

是的,一旦你修复编译,你所拥有的是一个良好的开端。 预处理程序指令不是语句,因此不应该终止; 文件末尾有一个迷路。

您似乎可以添加完整的书籍细节将大致相同。关键是你需要从标题中找到一本书。最简单的方法是从矢量&lt;&gt;更改将图书存储到地图&lt;&gt;。

typedef std::string Title;
class BookDetails
{
 // etc.
};
typedef std::map<Title, BookDetails> BookCollection;

查看std :: map&lt;&gt;上的文档看它是如何使用的。

答案 1 :(得分:0)

请尝试将参数作为参考传递,而不是传递值。例如。 代替

void SetFirst(string First);

尝试使用 void SetFirst(string& First);

更好的是,如果您确定该函数内部的值不会改变,请使用SetFirst(const string& First);

这会让你免于悲伤。

这是您正在开发的控制台应用程序或Windows应用程序吗?如果控制台应用程序的UI将是直接的,但如果是Windows应用程序,则必须使用MFC或纯Win32。