Problem bei Mappenverwaltungsprogramm
lima-city → Forum → Programmiersprachen → C/C++ und D
array
auflistung
auswahl
beginn
code
cursor
ende
fehler
geordnete anzeige
hauptprogramm
kennzahl
kommentar
komponist
lied
logisches problem
mappe
pfad
programm
taste
verwalten
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage