kostenloser Webspace werbefrei: lima-city


Problem bei Mappenverwaltungsprogramm

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    f**i

    Hallo
    Ich habe ein Programm, dass meine Musikmappen verwalten soll, angefangen zu programmieren, habe jetzt aber ein logisches Problem/Fehler, auf den ich nicht draufkomme, wie das richtig zu lösen ist.......vielleicht könnt ihr mir da ja helfen. Wäre super!

    Der Fehler ist im Unterprogramm "Mappen". Das Problem ist, dass ich, wenn mehrere Lieder zu einer Mappe hinzugefügt werden, bei der Auflistung der Mappen jeder Mappenname nur einmal angezeigt werden soll. Ich habe es schon versucht, mit irgendwelchen strcmp und strcpy und einem eigenen feld, jedoch stimmt das noch nicht ganz...:(


    Hier der Code:

    /*
    
    MAPPEN => Auflistung der Mappen und danach bei Auswahl der Mappe nach alphabet geordnete Anzeige der
    
    Lieder (evt. auch löschen einer gesamten Mappe möglich)
    
    LIEDER  => Auflistung aller Lieder in alphabetischer Reihenfolge
    
    SUCHEN  => In ein Suchfeld wird etwas beliebiges Eingegeben und es werden name, mappe, komponist und
    
    kommentar durchsucht  (wenn möglich, Auflistung der Ergebnisse nach jedem Tastendruck wie bei mac)
    
    
    ENDE => Beenden des Programmes
    
    
    
    
    
    
    lied: name
      mappe
      komponist
      kommentar
    
    
    
    
    
    Lieder werden aufgelistet und durch balken kann man ein lied anwählen und bei bedarf (enter) bearbeiten
    
    bzw. löschen
    
    
    
    Das Hinzufügen funktioniert so:
    Lieder hinzufügen: Mappen => Mappe wird ausgewählt, danach h drücken, Lied wird zu ausgewählter Mappe
    
    hinzugefügt
    Mappen hinzufügen: => Mappen => h drücken und neue Mappe kann erstellt werden
    
    ...löschen so wie hinzufügen
    
    
    */
    
    
    
    
    
    
    
    
    // +++++++++++++BEGINN DES PROGRAMMES++++++++++++++++++++++++++++
    
    #include<iostream.h>
    #include<conio.h>
    #include<string.h>
    
    FILE *dv;
    
    struct ds
    {
      char liedname[50];
      char mappenname[30];
      char komponist[50];
      char kommentar[100];
    }
    lied;
    
    
    //char pfad[30]={"X:\\Aprog\\mappen.fiz"};
    char pfad[30]={"C:\\Aprog\\mappen.fiz"};
    
    
    int mappenanzahl=0;
    int liederanzahl=0;
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    //+++++++++++++++++++BEGINN DES MENÜS+++++++++++++++++++++
    
    void menue(int &kennzahl)
    {
      int bp=0,i,x=10,y=5;    //bp steht für die Balkenposition
      char menuetext[4][20]={"Mappen","Lieder","Suchen","Ende"};
      char taste;
    
      clrscr();
      _setcursortype(_NOCURSOR);    //Schaltet den Cursor weg
      do
      {
    
        for(i=0;i<4;i++)
        {
          gotoxy(x,y+i*2);
          if(bp==i)
          {
            textbackground(BLUE);
            cprintf(menuetext[i]);
            textbackground(BLACK);
          }
    
          else
          {
            cprintf(menuetext[i]);
          }
    
        }
    
        taste=getch();
        if((int)taste==0)
        {
          taste=getch();
          if((int)taste==80)      // 0 80  ist Cursor nach unten
          {
            bp++;
            if(bp>3) bp=0;
          }
    
          if((int)taste==72)      // 0 72  ist Cursor nach oben
          {
            bp--;
            if(bp<0) bp=3;
          }
    
        }
    
    
    
      }
      while((int)taste!=13);
      kennzahl=bp;
      _setcursortype(_NORMALCURSOR);
    
    }
    
    
    
    
    
    
    
    
    
    
    
    
    //++++++++++++++++++UNTERPROGRAMM MAPPEN+++++++++++++++++++
    
    void mappen()
    {
    
      char taste;
      int i,k;
      int bp=0, x=10, y=5;
      int j=0;
      int l;
      char mappenfeld[50][30];
    
      clrscr();
      dv=fopen(pfad,"a+b");
      if(dv==0)
      {
        cout<<"Datei konnte nicht geöffnet werden";
        getch();
      }
    
    
        _setcursortype(_NOCURSOR);   //Schaltet den Cursor weg
    
    
     
    
    
    for(i=0;i<(mappenanzahl+1);i++)
    {
      
      
      
      
        while(fread(&lied,sizeof(lied),1,dv)>0)     //LESESCHLEIFE!!!!!
        {
           
           
             
             
          
          strcpy(mappenfeld[i],lied.mappenname);
          
          for(j=0;j<i;j++)
          {
            if(strcmp(mappenfeld[i],mappenfeld[j])==0) i--;
          }  
        }
          
         
         
         
         
         
          
        
          
          for(j=0;j<mappenanzahl;j++)
          {
            cout<<mappenfeld[j];
          }
          
          
          
          
          
          /*
          
          strcpy(mappenfeld[j],lied.mappenname);
            
            if(i==0 && j==0) cprintf("%s\n\r",lied.mappenname);
          
    
          if(strcmp(mappenfeld[j],lied.mappenname)==0) 
          {
          
    
          */
        
    
    
    
    
            taste=getch();
            if(taste=='h')
            {
              clrscr();
              gotoxy(10,5);
              cout<<"Mappe: ";
              gets(lied.mappenname);
              fwrite(&lied,sizeof(lied),1,dv);
              fseek(dv,0,0);
              mappenanzahl++;
              clrscr();
            }
    
    }
      
    
          _setcursortype(_NORMALCURSOR);
    
    
      fclose(dv);
      
    }
    
    
    
    
    
    
    
    
    
    
    
    
    //++++++++++++++++++UNTERPROGRAMM LIEDER++++++++++++++++++++++
    
    void lieder()
    {
      int i;
      char taste;
      
      clrscr();
      dv=fopen(pfad,"a+b");
      if(dv==0)
      {
        cout<<"Datei konnte nicht geöffnet werden";
        getch();
      }
    
    
        _setcursortype(_NOCURSOR);   //Schaltet den Cursor weg
    
    
     
    
    
    for(i=0;i<(liederanzahl+1);i++)
    {
      
        while(fread(&lied,sizeof(lied),1,dv)>0)     //LESESCHLEIFE!!!!!
        {
          
          cprintf("%s\n\r",lied.liedname);
        }
    
    
    
    
            taste=getch();
            if(taste=='h')
            {
              clrscr();
              gotoxy(10,5);
              cout<<"Mappe: ";
              gets(lied.mappenname);
              cout<<"Lied: ";
              gets(lied.liedname);
              fwrite(&lied,sizeof(lied),1,dv);
              fseek(dv,0,0);
              liederanzahl++;
              clrscr();
            }
    
    }
      
    
          _setcursortype(_NORMALCURSOR);
    
    
      fclose(dv);
      
      
    }
    
    
    
    
    
    
    
    
    //++++++++++++++++++HAUPTPROGRAMM++++++++++++++++++++++++
    
    void main()
    {
      int kzahl;
    
      clrscr();
      do
      {
        menue(kzahl);
        if(kzahl==0) mappen();
        if(kzahl==1) lieder();
        //if(kzahl==2) suchen();
      }
      while(kzahl!=3);
    }







    Danke für eure Hilfe
    mfg Fizi
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hi,
    also was mir spontan auffällt, ist das deine Variable mappenfeld als 2D Array definiert ist, du aber nur eine Dimension verwendest.
    Das könnt auch schon der fehler sein, wieso dein strcmp nicht funktioniert . ( da bin ich mir aber nicht sicher, da ich schon lange - ca. 2Jahre - kein C/C++ mehr programmiert habe )

    Nichts desto trotz ist das 2D Array meiner Meinung nach ein guter Ansatz.
    Ich würde mir den Index für den Mappennamen in der 1. Dimesion und den Liednamen in der 2. Dimesion merken .

    hier mal ein kurzes Bspl. ( wie gesagt, hab lange kein C mehr geschrieben, also bitten wegen Syntax fehlern nicht böse sein )

    char mappe[10];
    char mappenfeld[10][20];
    
    mappe[0] = "mappe1";
    mappenfeld[0][0]="lied1";
    mappenfeld[0][1]="lied2";
    
    mappe[1]="mappe2";
    mappenfeld[1][0]="lied3";
    mappenfeld[0][1]="lied2";
    
    ...
    
    if ( strcmp(mappenfeld[0][[1],mappenfeld[1][1])==0)
    println(" lied ist gleich");
    else
    println(" lied ist nicht gleich");


    hoffe das hilft dir weiter




    Beitrag zuletzt geändert: 27.3.2009 22:50:33 von brainworm
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!