Avatar billede kila Nybegynder
22. maj 2003 - 12:04 Der er 7 kommentarer

HJÆLP! c++ program a´la cd arkiv.

Hjælp!! Jeg står og skal bruge et c++ program der skal virke som cd-kartotek.
Skal indeholde en klasse, sortering, slet og filskrivning. Er der nogen der kan hjælpe mig please???????????
Avatar billede soreno Praktikant
22. maj 2003 - 12:15 #1
Hvad har du lavet indtil videre ?
(så kan vi arbejde videre ud fra det)

Skal det være console eller GUI ?
Avatar billede kila Nybegynder
22. maj 2003 - 16:33 #2
Jeg er på 1 semester Dataingeniør og har programmeret 2 projekter før. Det skal være console.. Projektet går ud på at opbygge en simpel CD-kartotek der kan hente fra en fil, vise hovedmenu hvorfra man kan indtaste kunstner og titel, sortere i kunstner(a-z) samt slette. Og det er påkrævet at der er en klasse og jeg sidder bare FAST.
Avatar billede soreno Praktikant
22. maj 2003 - 16:38 #3
En definition på et album kunne se sådan ud:


class Album
{
    public:
        Album();
        Album(string artist, string title);
        ~Album();
       
        void setArtist(string artist);
        string getArtist();
        void setTitle(string title);
        string getTitle();
                void addTrack(string track);
                int getNumberOfTracks();
                string getTrackNumber(i);

    private:
        string artist;
        string title;
                vector<string> tracks;       
};

Man kunne også lave en klasse der repræsenterer et track. Men det har jeg ikke gjort.

Så skal du lave en container klasse:
class Kartotek
{
    public:
        Kartotek();
        ~Kartotek();

        void addAlbum(Album album);
        int getNumberOfAlbums();
        Album getAlbum(i);

    private:
        vector<Album> vect;
}

Kan du selv implementere funktionerne ?
Avatar billede kila Nybegynder
22. maj 2003 - 17:50 #4
Jeg kan godt selv implementere funkt. har bare store problemer med at få det hele hæklet sammen, men klassen virker fint, har lige impl. den tak for det
Avatar billede soreno Praktikant
22. maj 2003 - 18:05 #5
Det er jo en klassisk aggregerings konstruktion. Et Kartotek kan indeholde 0-n Album.

Du kan bruge klasserne sådan:

Album albums[10];

//tilføj lidt data
for(int i=0;i<10;i++)
{
  string temp = "artist" + i;
  albums[i].setArtist(temp);
  temp = "title" + i;
  albums[i].setTitle(temp);

  for(int j=0;j<10;j++)
  {
    temp = "track" + j;
    albums[i].addTrack(temp);
  }
}


Kartotek kartotek;

//tilføj album til kartotek
for(int i=0;i<10;i++)
{
  kartotek.addAlbum(albums[i]);
}

//Udskriv kartotek
for(int i=0;i<kartotek.getNumberOfAlbums();i++)
{
  Album album = kartotek.getAlbum(i);
  cout << "Artist: " << album.getArtist() << endl;
  cout << " Title: " << album.getTitle() << endl;
  for(int j=0;j<album.getNumberOfTracks();j++)
  {   
    cout << '\t' << album.getTrackNumber(j) << endl;
  }
}

Skal du have et eksempel der også compiler ?
:-)
Avatar billede kila Nybegynder
22. maj 2003 - 22:30 #6
Det ville jeg være meget taknemmelig for hvis du har mulighed for dette, jeg er som sagt meget presset og taknemmelig for enhver hjælp
Avatar billede soreno Praktikant
23. maj 2003 - 11:56 #7
Ok, jeg har lavet noget der compiler baseret på ovenstående dekleration.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

//----------------------------Album
class Album
{
    public:
        Album();
        Album(string artist, string title);
        ~Album();
     
        void setArtist(string artist);
        string getArtist();
        void setTitle(string title);
        string getTitle();
        void addTrack(string track);
        int getNumberOfTracks();
        string getTrackNumber(int index);

    private:
        string artist;
        string title;
        vector<string> tracks;     
};

Album::Album()
{
}

Album::Album(string artist, string title)
{
    this->artist = artist;
    this->title = title;
}

Album::~Album()
{
}

void Album::setArtist(string artist)
{
    this->artist = artist;
}

string Album::getArtist()
{
    return artist;
}

void Album::setTitle(string title)
{
    this->title = title;
}

string Album::getTitle()
{
    return title;
}

void Album::addTrack(string track)
{
    tracks.push_back(track);
}

int Album::getNumberOfTracks()
{
    return tracks.size();
}

string Album::getTrackNumber(int index)
{
    return tracks[index];
}

//----------------------------Kartotek
class Kartotek
{
    public:
        Kartotek();
        ~Kartotek();

        void addAlbum(Album album);
        int getNumberOfAlbums();
        Album getAlbum(int index);

    private:
        vector<Album> albums;
};

Kartotek::Kartotek()
{
}

Kartotek::~Kartotek()
{
}

void Kartotek::addAlbum(Album album)
{
    albums.push_back(album);
}

int Kartotek::getNumberOfAlbums()
{
    albums.size();
}

Album Kartotek::getAlbum(int index)
{
    return albums[index];
}


//----------------------------Main
void generateAlbums(Kartotek &kartotek, int amount);
void printKartotek(Kartotek &kartotek);

int main(int argc, char *argv[])
{
    Kartotek kartotek;

    generateAlbums(kartotek, 10);
    printKartotek(kartotek);

    return 0;
}

void generateAlbums(Kartotek &kartotek, int amount)
{
    for(int i=0;i<amount;i++)
    {
        Album album;
        char buffer[128];
        char tempBuffer[16];

        strcpy(buffer, "Album: ");
        itoa(i, tempBuffer, 10);
        strcat(buffer, tempBuffer);
        album.setTitle(buffer);

        strcpy(buffer, "Artist: ");
        itoa(i, tempBuffer, 10);
        strcat(buffer, tempBuffer);;
        album.setArtist(buffer);
       
        for(int j=0;j<10;j++)
        {
            strcpy(buffer, "Track: ");
            itoa(j, tempBuffer, 10);
            strcat(buffer, tempBuffer);
            album.addTrack(buffer);
        }
        kartotek.addAlbum(album);
    }
}

void printKartotek(Kartotek &kartotek)
{
    for(int i=0;i<kartotek.getNumberOfAlbums();i++)
    {
        Album album = kartotek.getAlbum(i);
        cout << "Artist: " << album.getArtist() << endl;
        cout << " Title: " << album.getTitle() << endl;
        for(int j=0;j<album.getNumberOfTracks();j++)
        { 
            cout << '\t' << album.getTrackNumber(j) << endl;
        }
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester