Programm f. Computerbestand
-
Ich habe ein Programm geschrieben bei dem man einen komputernamen (darf max 20 stellen lang sein) einfügt, einen preis eingibt und einen prozessortyp wählt. Jetzt soll man aber nicht mehrmals ein und denselben Namen eingeben. Ich schaff es nicht das zu realisieren - funktioniert bei mir nicht...
Waere super wenn man mir helfen koennte...
Gemacht habe ich das Prog mit Borland C++ 3.1 aber mit Compiler Source auf ANSI. Hier noch die Bedeutung der Woerter im Programm:
Aanmaken - Neue Datei und Datenbestand
Toevoegen - Hinzufuegen
Wijzigen - Aendern des Namens
Verwijderen - Loeschen eines Datenbestandes
Overzicht - UebersichtHabe noch mal die englische Aufgabenstellung rausgesucht:
make a program, that can execute the following operations on the content of a file with structures:
• Make a new file with structures (write-mode) and fill the first structure,
• Add a structure to an existing file (append-mode) ; preferably using empty places first,
• Change the content of a structure, indicated by the user,
• Remove a structure from the file by ‘clearing’ the content of that structure,
• List the content of the complete file in one table.Also pay attention to the following:
• The member-names of the given structure-type have to appear in the header of the listing,
• When searching for a structure , entering upper or lower case may not make any difference,
• Make sure that your program checks for ‘wrong’ input, such as: too long names and asking for a non-existing structure,
• Make a testfile with at least 5 structures,
• Take care that for one, fixed chooses , structure-member the content is unique (meaning that in all structures of the file it appears only one time). Through this member (the key) then a structure has to be selected (indicated italicized in the following structures !!),
• Do not add members to the following !
• It is not allowed to use a variable, indicating the position of a structure in the file.Ich werde da echt nicht mehr schlau draus...
Nun noch der Code vom dem Programm (bin in Holland, deswegen ist der Text auf niederlaendisch):#include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h> enum processor_type{P286=1,P386,P486,Pentium,Athlon}; struct komputer { char chNaam[20]; float fPrijs; enum processor_type type; }; typedef struct komputer KOMPUTER; /* Nu is KOMPUTER de alias of de struct komputer */ char Menu(void); void Verwerkingsmenu(char *, char); /*****************************************************\ | het keuze menu met de verwerking van de keuze | | | \*****************************************************/ int main(void) { char chKeuze, chFilenaam[]="H:\\komputer_op8-10.dat"; chKeuze = Menu(); while(chKeuze !='s') { Verwerkingsmenu(chFilenaam, chKeuze); chKeuze = Menu(); } return(0); } /**************************************************\ | Hier wordt de ingave verwerkt door de keuze | \**************************************************/ char Menu(void) { char chInvoer; clrscr(); printf("Dit is een kleine database program waarin je komputer kan invoeren\n"); printf("sorteren, wijzigen en verwijderen.\n\n\n\n"); printf("Wat wil je doen? Type in! \n\n"); printf("a = Aanmaaken van een nieuwe file.\n"); printf("t = Toevoegen van waarden in de file.\n"); printf("w = Wijzigen van waarden in de file.\n"); printf("v = Verwijderen van waarden in de file.\n"); printf("o = Overzicht van de heele file.\n"); printf("s = Stoppen.\n"); chInvoer = getche(); return(chInvoer); } /*************************************************\ | verwerking van de keuze van het menu | \*************************************************/ void toevoegen(char *, char *); void wijzigen(char *); void verwijderen(char *); void overzicht(char *); void Verwerkingsmenu(char *chFilenaam, char chKeuze) { clrscr(); switch(chKeuze) { case 'a' : toevoegen(chFilenaam, "wb"); break; case 't' : toevoegen(chFilenaam, "ab+"); break; case 'w' : wijzigen(chFilenaam); break; case 'v' : verwijderen(chFilenaam); break; case 'o' : overzicht(chFilenaam); break; case 'A' : toevoegen(chFilenaam, "wb"); break; case 'T' : toevoegen(chFilenaam, "ab+"); break; case 'W' : wijzigen(chFilenaam); break; case 'V' : verwijderen(chFilenaam); break; case 'O' : overzicht(chFilenaam); break; default : printf("Je heeft geen goede keuze gemaakt.\nMaak een nieuwe keuze: \n\n"); break; } } /**********************************************************\ | Het menu toevoegen maakt een nieuw file aan | \**********************************************************/ void voegtoe(FILE *, char *); void toevoegen(char *chFilenaam, char *chMode) { FILE *p_file; char chAntwoord = 'y'; clrscr(); while(chAntwoord == 'y') { p_file = fopen(chFilenaam, chMode); voegtoe(p_file, chFilenaam); fclose(p_file); if(strcmp(chMode,"wb")==0) { chMode="ab+"; } printf("\nWil je nog een komputer toevoegen? [y/n]: \n"); chAntwoord = getche(); while(chAntwoord != 'y' && chAntwoord != 'n') { printf("\nJe heeft geen goede invoer gegeven!!\n"); printf("Geef een y of een n!\n"); printf("Geef een invoer: "); chAntwoord=getche(); printf("\n"); } } clrscr(); } /*****************************************************\ | Definitie van toevoegen | | hier kun je alles invoeren | \*****************************************************/ void voegtoe(FILE *p_file, char *chFilenaam) { KOMPUTER komputer,komputer2; FILE *p_file2; int nError=1; p_file2=fopen(chFilenaam,"rb"); clrscr(); printf("Geef de naam van de komputer: \n"); scanf("%d",&komputer.chNaam); while(nError==1) { nError=0; while(!feof(p_file2)) { fread(&komputer2,sizeof(KOMPUTER),1,p_file2); if(komputer2.chNaam==komputer.chNaam) { nError=1; } if(nError==1) { printf("Deze naam bestaat al!!\n"); printf("Voer een nieuwe naam in: \n"); scanf("%d",&komputer.chNaam); } } rewind(p_file2); } fclose(p_file2); printf("Geef de prijs: \n"); scanf("%f",&komputer.fPrijs); printf("Geef het nummer van de processor:\n1.P286\n2.P386\n3.P486\n4.Pentium\n5.Athlon\n"); scanf("%d",&komputer.type); while((komputer.type <1) || (komputer.type > 5)) { printf("Je heeft geen goede invoer gegeven!!\n"); printf("Geef een andere invoer: \n"); scanf("%d",&komputer.type); } fwrite(&komputer,sizeof(KOMPUTER),1,p_file); } /********************************************************\ | Definitie van veranderen | | hier kun je je invoer wijzigen | \********************************************************/ void wijzigen(char *chFilenaam) { FILE *p_file; KOMPUTER komputer; char chZoek; char chTeller=-1, chGevonden=0; char chAntwoord = 'y'; p_file = fopen(chFilenaam,"rb+"); while(chAntwoord == 'y') { clrscr(); printf("Geef de naam van de komputer die je verandern wil: "); scanf("%d",&chZoek); while(!feof(p_file)&&chGevonden==0) { fread(&komputer,sizeof(KOMPUTER),1,p_file); if(chZoek==komputer.chNaam) { chGevonden=1; } chTeller++; } if(chGevonden==1) { fseek(p_file,(chTeller*sizeof(KOMPUTER)),SEEK_SET); voegtoe(p_file, chFilenaam); printf("\nWilt je nog iets in de file wijzigen? [y/n]: \n"); chAntwoord = getche(); } else { printf("Deze naam is niet gevonden!!\n"); printf("Druk op een toets om verder te gaan.\n"); getch(); } rewind(p_file); chGevonden=0; chTeller=-1; } fclose(p_file); } /************************************************************\ | Definitie van verwijderen | | Hier kun je een invoer verwijderen | \************************************************************/ void verwijder(FILE *); void verwijderen(char *chFilenaam) { FILE *p_file; KOMPUTER komputer; char chZoek; char chTeller=-1, chGevonden=0; char chAntwoord = 'y'; p_file = fopen(chFilenaam,"rb+"); while(chAntwoord == 'y') { clrscr(); printf("Geef de naam van de komputer die je wilt verwijderen: "); scanf("%d",&chZoek); while(!feof(p_file)&&chGevonden==0) { fread(&komputer,sizeof(KOMPUTER),1,p_file); if(chZoek==komputer.chNaam) { chGevonden=1; } chTeller++; } if(chGevonden==1) { fseek(p_file,(chTeller*sizeof(KOMPUTER)),SEEK_SET); verwijder(p_file); printf("Wil je nog een komputer verwijderen? [y/n]: \n"); chAntwoord = getche(); } else { printf("Deze naam is niet gevonden!!\n"); printf("Druk op een toets om verder te gaan.\n"); getch(); } rewind(p_file); chGevonden=0; chTeller=-1; } fclose(p_file); clrscr(); } void verwijder(FILE *p_file) { KOMPUTER komputer; strcpy(komputer.chNaam,""); fwrite(&komputer,sizeof(KOMPUTER),1,p_file); } /********************************************************************\ | De definitie van overzicht | | hiermee word er een overzicht op het beeld gemaakt | \********************************************************************/ void overzicht(char *chFilenaam) { FILE *p_file; KOMPUTER komputer; char chType[20]; clrscr(); p_file = fopen(chFilenaam,"rb"); printf("Naam\t\tPrijs\t\tProcessor\n"); fread(&komputer,sizeof(KOMPUTER),1,p_file); while(!feof(p_file)) { switch(komputer.type) { case 1:strcpy(chType,"P286"); break; case 2:strcpy(chType,"P386"); break; case 3:strcpy(chType,"P486"); break; case 4:strcpy(chType,"Pentium"); break; case 5:strcpy(chType,"Athlon"); break; default: ; } if(komputer.chNaam!=NULL) { printf("%d\t%d\t\t%d\t%12.2f\t\t%s\n",komputer.chNaam,komputer.fPrijs,chType); } fread(&komputer,sizeof(KOMPUTER),1,p_file); } fclose(p_file); printf("\nDruk op een toets om verder te gaan.\n"); getch(); }
Gruesse,
Pierre
-
omg, codetags bitte.. geht ja gar nicht
-
Es fehlt eine konkrete Frage!
-
konkrete antwort auf konkrete frage:
beim hinzufuegen eines datensatzes, suche nach datensaetzen, die den gleichen namen haben (non-case-sensitive). wenn welche vorhanden sind, weise die eingabe ab.
-
hallo...
das mit dem abweisen sagst du so einfach... ich bin froh das ich das bis dahin geschafft habe... aber ich weiß echt nicht wie ich weiter machen soll/muss...
und diee frage lautet zu dem programm: was muss geändert werden damit es so läuft wie ich das möchte, eigentlich losgisch - oder?? ^^grüße,
pierre
-
nachdem wir ueber icq schon gesprochen haben... ich hoffe es hilft
int name() { char used_names[5][255] = {"Rechner1" "Rechner2" "bla1" "bla2" "blubb"}; char current_name[255] = "neuer_rechner"; for(int i = 0; i <= 4, i++); { if(strcmp(used_names[i], current_name) == 0) { printf("Name bereits vergeben"); return name(); } } return 0; }
-
der Strichpunkt nach der for-schleife gehört aber weg
mfg (c)h