c++ 질문좀 드릴게요..

dnrn12의 이미지

책리스트에 책을 추가할 때 책 제목을 기준으로 정렬(알파벳 오름차순)이 되도록 AddBook()을 수정하려고하는데요..
(strcmp 함수를 이용하여 책이 추가될 위치를 찾고 추가될 위치 이후는 순서가 뒤로 밀리도록 함)

아무리 해봐도 실행이되질 않네요.. 어떻게 해야될까요?

#include
#include

using namespace std;
// -------------------------------------------------------

class Book
{
char title[40];
char author[20];
int year;
bool isSold;

public:
Book(char * t, char * a, int y)
{
strcpy(title, t);
strcpy(author, a);
year = y;
isSold = false;
}

char* GetTitle() { return title; }
bool GetIsSold() { return isSold; }
void SetIsSold(bool s) { isSold = s; }

void ShowBookInfo()
{
cout << "Book Info : " ;
cout << title << ", "<< author <<", " << year;
if( isSold ) cout << " *** Sold ***";
cout << endl;
}

};

class BookSeller
{
int sellerID;
char name[20];
Book * bookList[10];
int bookCnt;

public:
BookSeller(int id, char * name) : sellerID(id)
{
strcpy(this->name, name);
bookCnt = 0;
}

~BookSeller()
{
for(int i=0; i delete bookList[i];
}

void AddBook(char * t, char * a, int y)
{
bookList[bookCnt] = new Book(t,a,y);
bookCnt++;
}

void DeleteBook(char * t)
{
for(int i=0; i if( strcmp( bookList[i]->GetTitle() , t) == 0 )
{
delete bookList[i];
for( ;i bookList[i] = bookList[i+1];
bookCnt--;
return;
}
cout << "Sorry, we have not <" << t << ">!" << endl;
}

void SellBook(char * t)
{
for(int i=0; i if( strcmp( bookList[i]->GetTitle() , t) == 0 )
{
if ( bookList[i]->GetIsSold() )
cout << "Sorry, <" << t << "> is sold out!" << endl;
else
{ cout << "<" << t << "> is sold, now." << endl;
bookList[i]->SetIsSold(true);
}
return;
}
cout << "Sorry, we have not <" << t << ">!" << endl;
}

void ShowBookList()
{
cout << endl << "+++++++++++++ BooK List +++++++++++++" << endl;

for(int i=0; i bookList[i]->ShowBookInfo();

cout << endl;
}

};

void main()
{
BookSeller seller( 2013155, "Hong Jun");

seller.AddBook("Hard Thinking", "Dr Han", 2008);
seller.AddBook("The tree","Bernar", 2009);
seller.AddBook("Starry Night", "Gogh", 1890);
seller.AddBook("CPP Programming", "Kwag", 2010);
seller.AddBook("Apple Story", "Apple", 2010);

seller.ShowBookList();

seller.SellBook("The tree");
seller.SellBook("The seven weeks");
seller.SellBook("The tree");

seller.ShowBookList();

seller.DeleteBook("The tree");
seller.ShowBookList();

return;
}

kleinstein의 이미지

소스코드를 올릴 때에는 소스코드 태그를 이용해서 올려주세요.

dnrn12의 이미지

죄송합니다ㅠㅠ

익명 사용자의 이미지

일단 컴파일 에러부터 모두 고치는게 어떨까요?

또, strcpy를 반드시 사용해야 하는지...?

여튼, 코드를 BookSeller.h와 BookSeller.cpp로 나눠서 .h에는 declare을, .cpp에는 정의를 하시는게 훨씬 보기 쉬울겁니다. main함수는 main.cpp에 따로 격리해주시고요. 또, 인덴트를 해주시면 더욱 보기가 좋을것 같습니다. 지금은 {}가 모두 평행해서 보기가 힘듭니다. 밑에 예시를 첨가해보겠습니다.

#include <iostream>
//#include
 
using namespace std;
// -------------------------------------------------------
 
class Book
{
    char title[40];
    char author[20];
    int year;
    bool isSold;
 
public:
    Book(char * t, char * a, int y)
    {
        strcpy(title, t);
        strcpy(author, a);
        year = y;
        isSold = false;
    }
 
    char* GetTitle()
    {
        return title;
    }
    bool GetIsSold()
    {
        return isSold;
    }
    void SetIsSold(bool s)
    {
        isSold = s;
    }
 
    void ShowBookInfo()
    {
        cout << "Book Info : " ;
        cout << title << ", "<< author <<", " << year;
        if( isSold ) cout << " *** Sold ***";
        cout << endl;
    }
 
};
 
class BookSeller
{
    int sellerID;
    char name[20];
    Book * bookList[10];
    int bookCnt;
 
public:
    BookSeller(int id, char * name) : sellerID(id)
    {
        strcpy(this->name, name);
        bookCnt = 0;
    }
 
    ~BookSeller()
    {
        for(int i=0; iGetTitle() , t) == 0 )
        {
            delete bookList[i];
            for( ; i!" << endl;
                }
 
                    void SellBook(char * t)
                    {
                    for(int i=0; iGetTitle() , t) == 0 )
                    {
                    if ( bookList[i]->GetIsSold() )
                    cout << "Sorry, <" << t << "> is sold out!" << endl;
                    else
                    { cout << "<" << t << "> is sold, now." << endl;
                    bookList[i]->SetIsSold(true);
                }
                    return;
                }
                    cout << "Sorry, we have not <" << t << ">!" << endl;
                }
 
                    void ShowBookList()
                    {
                    cout << endl << "+++++++++++++ BooK List +++++++++++++" << endl;
 
                    for(int i=0; iShowBookInfo();
 
                    cout << endl;
                }
 
                };
 
                    void main()
                    {
                    BookSeller seller( 2013155, "Hong Jun");
 
                    seller.AddBook("Hard Thinking", "Dr Han", 2008);
                    seller.AddBook("The tree","Bernar", 2009);
                    seller.AddBook("Starry Night", "Gogh", 1890);
                    seller.AddBook("CPP Programming", "Kwag", 2010);
                    seller.AddBook("Apple Story", "Apple", 2010);
 
                    seller.ShowBookList();
 
                    seller.SellBook("The tree");
                    seller.SellBook("The seven weeks");
                    seller.SellBook("The tree");
 
                    seller.ShowBookList();
 
                    seller.DeleteBook("The tree");
                    seller.ShowBookList();
 
                    return;
                }

CodeBlocks로 자동 인덴트해보니까 맨 끝이 조금 이상하죠? ~BookSeller()에서부터 괄호의 갯수가 맞지 않은건지 계속 쭉쭉 인덴트되어있네요. 그리고 <code>태그를 사용 안 하셔서 보다큼/보다작음 기호들이 죄다 생략됐네요...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.