проектирование трех книжных классов для с ++ - PullRequest
1 голос
/ 18 января 2011

Я очень новичок в мире программ и сейчас застрял. Я предполагаю разработать книжную запись, которая содержит название, автора, издателя, категорию (десятичный знак Дьюи) и дату публикации. Для списка книг мне нужно знать, как добавить новый объект bookrecord, найти запись book с заданным названием, удалить объект 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 голосов
/ 18 января 2011

Пожалуйста, попробуйте передать параметры как ссылку вместо передачи по значениям. Например, вместо </p> <p>void SetFirst(string First);

попробуй использовать void SetFirst(string& First);

еще лучше, если вы уверены, что значение не изменится внутри функции, используйте вот так SetFirst(const string& First);

Это спасет вас от горя позже.

Это консольное приложение или приложение для Windows, которое вы разрабатываете? В случае консольного приложения пользовательский интерфейс будет прямым, но в случае приложения Windows вам придется использовать либо MFC, либо чистый Win32.

0 голосов
/ 18 января 2011

Да, у вас есть хорошее начало - как только вы исправите компиляцию. Директивы препроцессора не являются утверждениями, поэтому их не следует завершать; В конце файла есть беспризорник.

Похоже, вы получите, что добавление полной информации о книге будет почти таким же. Главное, что вам нужно найти книгу по названию. Самое простое, что можно сделать - перейти с вектора <> для хранения книг на карту <>.

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

Просмотрите документацию по std :: map <>, чтобы узнать, как она используется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...