Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- FILE* TabelleOeffnen(char*);
- FILE* TabelleErstellen(char*);
- void TabelleAnzeigen(FILE*, char*);
- void TabelleQuersummeHinzufuegen(FILE*, char*);
- void TabelleLaengssummeHinzufuegen(FILE*, char*);
- void TabelleZeileEinfuegen(FILE*, char*, char*, int);
- void TabelleZeileAendern(FILE*, char*, char*, int);
- void TabelleZeileEntfernen(FILE*, char*, int);
- void TabelleLoeschen();
- void Bubblesort(int[], int, int);
- int main()
- {
- FILE* paktuelletabelle = 0;
- int iwahl = 0;
- char sztabelle[50] = { 0 };
- do
- {
- system("cls");
- if(paktuelletabelle)
- {
- printf("Aktuelle Tabelle: %s\n", sztabelle);
- }
- else
- {
- puts("Willkommmen im Tabellenprogramm!");
- }
- puts("Bitte eine Funktion auswaehlen\n"
- "[n] neue Tabelle erstellen\n"
- "[o] eine Tabelle oeffnen\n"
- "[l] eine Tabelle loeschen\n"
- "[a] Tabelle anzeigen\n"
- "[x] Programm beenden");
- fflush(stdin);
- iwahl = getch();
- system("cls");
- switch (iwahl)
- {
- case 'n':
- if ( paktuelletabelle )
- {
- fclose(paktuelletabelle);
- }
- paktuelletabelle = TabelleErstellen(sztabelle);
- if ( !paktuelletabelle )
- {
- puts("Fehler beim erstellen der Tabelle");
- system("pause");
- }
- break;
- case 'o':
- if ( paktuelletabelle )
- {
- fclose(paktuelletabelle);
- }
- paktuelletabelle = TabelleOeffnen(sztabelle);
- if ( !paktuelletabelle )
- {
- puts("Fehler beim laden der Tabelle");
- system("pause");
- }
- break;
- case 'l':
- TabelleLoeschen();
- break;
- case 'a':
- if ( paktuelletabelle )
- {
- TabelleAnzeigen(paktuelletabelle, sztabelle);
- }
- else
- {
- puts("Keine Tabelle vorhanden");
- system("Pause");
- }
- break;
- case 'x':
- case 'X':
- {
- if (paktuelletabelle)
- {
- fclose(paktuelletabelle);
- }
- return 0;
- }
- default:
- puts("Falsche eingabe");
- system("Pause");
- break;
- }
- }
- while(1);
- return 0;
- }
- FILE* TabelleOeffnen(char* szdateiname)
- {
- system("cls");
- puts("Bitte Dateinamen eingeben:");
- fflush(stdin);
- gets(szdateiname);
- strcat(szdateiname, ".txt");
- return fopen(szdateiname, "r+");
- }
- FILE* TabelleErstellen(char* szdateiname)
- {
- system("cls");
- puts("Bitte Dateinamen eingeben:");
- fflush(stdin);
- gets(szdateiname);
- strcat(szdateiname, ".txt");
- FILE* fTabelle = 0;
- fTabelle = fopen(szdateiname, "w+");
- if(fTabelle)
- {
- int izeilen, ispalten;
- puts("Bitte Anzahl Zeilen angeben (max. 99):");
- fflush(stdin);
- scanf("%i", &izeilen);
- //TODO: prüfen ob max 99
- fprintf(fTabelle, "%i ", izeilen);
- puts("Bitte Anzahl Spalten angeben (max. 10):");
- fflush(stdin);
- scanf("%i", &ispalten);
- //TODO: prüfen ob max 10
- fprintf(fTabelle, "%i\n", ispalten);
- int i;
- for(i = 0; i < izeilen; i++)
- {
- int j;
- for(j = 0; j < ispalten; j++)
- {
- fprintf(fTabelle, "%6i", rand() % 20);
- }
- fprintf(fTabelle, "\n");
- }
- }
- return fTabelle;
- }
- void TabelleLoeschen()
- {
- char szdateiname[50] = { 0 };
- system("cls");
- puts("Bitte Dateinamen eingeben:");
- fflush(stdin);
- gets(szdateiname);
- strcat(szdateiname, ".txt");
- remove(szdateiname);
- }
- void TabelleAnzeigen(FILE* ptabelle, char* szdateiname)
- {
- static int izeile = 1;
- int izeilen, ispalten;
- char szzeile[1024] = { 0 };
- int iwahl;
- do
- {
- int i;
- system("cls");
- rewind(ptabelle);
- fscanf(ptabelle, "%i %i", &izeilen, &ispalten);
- printf("Zeile %i bis %i von %i:\n\n", izeile, (izeile + 4 > izeilen) ? izeilen : izeile + 4, izeilen);
- //Kopfzeile:
- printf(" ");
- for(i = 0; i < ispalten; i++)
- {
- printf(" [%2i]", i + 1);
- }
- printf(" |min| |max|\n");
- fgets(szzeile, sizeof(szzeile), ptabelle); //headerzeile überspringen
- int izellen[10][99] = { 0 };
- //komplette tabelle einlesen
- for(i = 0; i < izeilen; i++)
- {
- char* sztoken = 0;
- int iindex_token;
- fgets(szzeile, sizeof(szzeile), ptabelle);
- sztoken = strtok(szzeile, " ");
- iindex_token = -1;
- while(sztoken != 0)
- {
- iindex_token++;
- if(iindex_token >= 10)
- {
- break;
- }
- izellen[iindex_token][i] = atoi(sztoken);
- //nächste zahl lesen
- sztoken = strtok(0, " ");
- }
- }
- //auswahl anzeigen
- for(i = izeile - 1; i < izeilen && i < izeile + 4; i++)
- {
- int imin = 9999;
- int imax = 0;
- int j;
- printf(" [%2i] ", i + 1);
- for(j = 0; j < ispalten; j++)
- {
- printf("%6i", izellen[j][i]);
- if(abs(izellen[j][i]) < imin)
- {
- imin = abs(izellen[j][i]);
- }
- if(abs(izellen[j][i]) > imax)
- {
- imax = abs(izellen[j][i]);
- }
- }
- printf(" %6i%6i\n", imin, imax);
- }
- printf("\n |min|");
- for(i = 0; i < ispalten; i++)
- {
- int imin = 9999;
- int j;
- for(j = 0; j < izeilen; j++)
- {
- if(abs(izellen[i][j]) < imin)
- {
- imin = abs(izellen[i][j]);
- }
- }
- printf("%6i", imin);
- }
- printf("\n |max|");
- for(i = 0; i < ispalten; i++)
- {
- int imax = 0;
- int j;
- for(j = 0; j < izeilen; j++)
- {
- if(abs(izellen[i][j]) > imax)
- {
- imax = abs(izellen[i][j]);
- }
- }
- printf("%6i", imax);
- }
- puts("\nBitte eine Funktion auswaehlen\n"
- "[PFEIL HOCH] -1 Zeile\n"
- "[PFEIL RUNTER] +1 Zeile\n"
- "[BILD HOCH] -1 Seite\n"
- "[BILD RUNTER] +1 Seite\n"
- "[h] Zeile hinzufuegen\n"
- "[a] Zeile aendern\n"
- "[e] Zeile entfernen\n"
- "[l] Laengssummen berechnen\n"
- "[q] Quersummen berechnen\n"
- "[s] Spalte sortieren\n"
- "[x] Zurueck");
- fflush(stdin);
- iwahl = getch();
- switch (iwahl)
- {
- case 72: //pfeil hoch
- {
- if(izeile > 1) izeile--;
- }
- break;
- case 80: //pfeil runter
- {
- if(izeile + 4 < izeilen) izeile++;
- }
- break;
- case 73: //bild hoch
- {
- if(izeile - 5 >= 1 ) izeile -= 5;
- }
- break;
- case 81: //bild runter
- {
- if(izeile + 4 + 5 <= izeilen) izeile += 5;
- }
- break;
- case 'h':
- {
- char szeingabe[1024] = { 0 };
- char szzeile[100] = { 0 };
- int izeile_neu = 0;
- puts("Zeilennummer vor der eingefuegt werden soll eingeben\n"
- "oder nichts eingeben wenn automatisch am Ende eingefuegt werden soll:");
- fflush(stdin);
- gets(szeingabe);
- if(strlen(szeingabe) == 0)
- {
- puts("Zeile wird am Ende der Tabelle angefuegt");
- izeile_neu = izeilen + 1;
- }
- else if(sscanf(szeingabe, "%i", &izeile_neu) != 1)
- {
- puts("Ungueltige Eingabe, Zeile wird am Ende der Tabelle angefuegt");
- izeile_neu = izeilen + 1;
- }
- else if(izeile_neu < 1)
- {
- puts("Ungueltige Zeilennummer (< 1), Zeile wird am Anfang der Tabelle eingefuegt");
- izeile_neu = 1;
- }
- else if(izeile_neu > izeilen + 1)
- {
- puts("Ungueltige Zeilennummer (> Anzahl Zeilen + 1), Zeile wird am Ende der Tabelle angefuegt");
- izeile_neu = izeilen + 1;
- }
- else
- {
- printf("Neue Zeile wird vor Zeile %i eingefuegt\n", izeile_neu);
- }
- puts("Bitte Werte fuer neue Zeile eingeben:");
- fflush(stdin);
- gets(szeingabe);
- char* sztoken = 0;
- int itoken;
- char sztoken_neu[7] = { 0 };
- sztoken = strtok(szeingabe, " ");
- int ianzahl_token = 0;
- while(sztoken != 0)
- {
- ianzahl_token++;
- //zu viele Werte ignorieren
- if(ianzahl_token > ispalten)
- {
- break;
- }
- itoken = atoi(sztoken);
- if(itoken > 9999)
- {
- itoken = 9999;
- }
- else if(itoken < -9999)
- {
- itoken = -9999;
- }
- sprintf(sztoken_neu, "%6i", itoken);
- strcat(szzeile, sztoken_neu);
- //naechste Zahl lesen
- sztoken = strtok(0, " ");
- }
- //zu wenige Werte mit 0 auffüllen
- int inullen = 0;
- while(inullen < (ispalten - ianzahl_token))
- {
- strcat(szzeile, " 0");
- inullen++;
- }
- strcat(szzeile, "\n");
- TabelleZeileEinfuegen(ptabelle, szdateiname, szzeile, izeile_neu);
- }
- break;
- case 'a':
- {
- char szeingabe[1024] = { 0 };
- char szzeile[100] = { 0 };
- int izeile_neu = 0;
- puts("Zeilennummer der zu editierenden Zeile:");
- fflush(stdin);
- scanf("%i", &izeile_neu);
- puts("Bitte neue Werte eingeben:");
- fflush(stdin);
- gets(szeingabe);
- char* sztoken = 0;
- int itoken;
- char sztoken_neu[7] = { 0 };
- sztoken = strtok(szeingabe, " ");
- int ianzahl_token = 0;
- while(sztoken != 0)
- {
- ianzahl_token++;
- //zu viele Werte ignorieren
- if(ianzahl_token > ispalten)
- {
- break;
- }
- itoken = atoi(sztoken);
- if(itoken > 9999)
- {
- itoken = 9999;
- }
- else if(itoken < -9999)
- {
- itoken = -9999;
- }
- sprintf(sztoken_neu, "%6i", itoken);
- strcat(szzeile, sztoken_neu);
- //naechste Zahl lesen
- sztoken = strtok(0, " ");
- }
- //zu wenige Werte mit 0 auffüllen
- int inullen = 0;
- while(inullen < (ispalten - ianzahl_token))
- {
- strcat(szzeile, " 0");
- inullen++;
- }
- strcat(szzeile, "\n");
- TabelleZeileAendern(ptabelle, szdateiname, szzeile, izeile_neu);
- }
- break;
- case 'e':
- {
- puts("Zeilennummer der zu loeschenden Zeile:");
- int izeile_loeschen = 0;
- fflush(stdin);
- scanf("%i", &izeile_loeschen);
- TabelleZeileLoeschen(ptabelle, szdateiname, izeile_loeschen);
- }
- break;
- case 'l':
- {
- TabelleLaengssummeHinzufuegen(ptabelle, szdateiname);
- }
- break;
- case 'q':
- {
- TabelleQuersummeHinzufuegen(ptabelle, szdateiname);
- }
- break;
- case 's':
- {
- puts("Bitte Spalte angeben die sortiert werden soll:");
- int ispalte;
- int iliste[1000] = { 0 };
- fflush(stdin);
- scanf("%i", &ispalte);
- rewind(ptabelle);
- fscanf(ptabelle, "%i %i", &izeilen, &ispalten);
- fgets(szzeile, sizeof(szzeile), ptabelle); // headerzeile überspringen
- if(ispalte < 1 || ispalte > ispalten)
- {
- puts("Ungueltige Spaltennummer!");
- getch();
- }
- else
- {
- int q;
- char* sztoken = 0;
- int iindex_token;
- for(q = 1; q <= izeilen; q++)
- {
- fgets(szzeile, sizeof(szzeile), ptabelle);
- sztoken = strtok(szzeile, " ");
- iindex_token = -1;
- while(sztoken != 0)
- {
- if(++iindex_token + 1 == ispalte)
- {
- //spalte gefunden
- iliste[q - 1] = atoi(sztoken);
- break;
- }
- //naechste Zahl lesen
- sztoken = strtok(0, " ");
- }
- }
- Bubblesort(iliste, izeilen, 0);
- printf("Spalte %i sortiert:\n", ispalte);
- int in = 0;
- while(in < izeilen)
- {
- printf("%i ", iliste[in++]);
- }
- getch();
- }
- }
- break;
- case 'x':
- {
- return;
- }
- break;
- default:
- break;
- }
- }
- while(1);
- }
- void TabelleQuersummeHinzufuegen(FILE* ptabelle, char* szdateiname)
- {
- char szzeile[1024] = { 0 };
- char sztemp[55] = { 0 };
- strcpy(sztemp, szdateiname);
- strcat(sztemp, ".temp");
- FILE* ftemp = fopen(sztemp, "w");
- if(ftemp)
- {
- char* sztoken = 0;
- int izeilen, ispalten, isumme, itoken;
- rewind(ptabelle);
- fscanf(ptabelle, "%i %i", &izeilen, &ispalten);
- fgets(szzeile, sizeof(szzeile), ptabelle); // headerzeile überspringen
- fprintf(ftemp, "%i %i\n", izeilen, ispalten + 1);
- int i;
- for(i = 1; i <= izeilen; i++)
- {
- isumme = 0;
- fgets(szzeile, sizeof(szzeile), ptabelle);
- //Quersumme berechnen
- sztoken = strtok(szzeile, " ");
- while(sztoken != 0)
- {
- itoken = atoi(sztoken);
- isumme += itoken;
- fprintf(ftemp, "%6i", itoken);
- //naechste Zahl lesen
- sztoken = strtok(0, " ");
- }
- //Quersumme hinzufügen
- fprintf(ftemp, "%6i\n", isumme);
- }
- //Originaldatei mit temporärer ersetzen
- fclose(ptabelle);
- fclose(ftemp);
- remove(szdateiname);
- rename(sztemp, szdateiname);
- ptabelle = fopen(szdateiname, "r+");
- }
- }
- void TabelleLaengssummeHinzufuegen(FILE* ptabelle, char* szdateiname)
- {
- char szzeile[1024] = { 0 };
- char sztemp[55] = { 0 };
- strcpy(sztemp, szdateiname);
- strcat(sztemp, ".temp");
- FILE* ftemp = fopen(sztemp, "w");
- if(ftemp)
- {
- char* sztoken = 0;
- int izeilen, ispalten, isumme[13] = { 0 }, itoken;
- rewind(ptabelle);
- fscanf(ptabelle, "%i %i", &izeilen, &ispalten);
- fgets(szzeile, sizeof(szzeile), ptabelle); // headerzeile überspringen
- fprintf(ftemp, "%i %i\n", izeilen + 1, ispalten);
- int i;
- int iindex_token;
- for(i = 1; i <= izeilen; i++)
- {
- fgets(szzeile, sizeof(szzeile), ptabelle);
- //Längssummen berechnen
- sztoken = strtok(szzeile, " ");
- iindex_token = -1;
- while(sztoken != 0)
- {
- //zu Lsumme addieren
- itoken = atoi(sztoken);
- isumme[++iindex_token] += itoken;
- //in neue Datei schreiben
- fprintf(ftemp, "%6i", itoken);
- //naechste Zahl lesen
- sztoken = strtok(0, " ");
- }
- fprintf(ftemp, "\n");
- }
- //Längssummen hinzufügen
- for(i = 0; i <= iindex_token; i++)
- {
- fprintf(ftemp, "%6i", isumme[i]);
- }
- fprintf(ftemp, "\n");
- //Originaldatei mit temporärer ersetzen
- fclose(ptabelle);
- fclose(ftemp);
- remove(szdateiname);
- rename(sztemp, szdateiname);
- ptabelle = fopen(szdateiname, "r+");
- }
- }
- void TabelleZeileLoeschen(FILE* ptabelle, char* szdateiname, int izeile)
- {
- char sztemp[55] = { 0 };
- char szzeile[55] = { 0 };
- strcpy(sztemp, szdateiname);
- strcat(sztemp, ".temp");
- FILE* ftemp = fopen(sztemp, "w");
- if(ftemp)
- {
- int izeilen, ispalten;
- rewind(ptabelle);
- fscanf(ptabelle, "%i %i", &izeilen, &ispalten);
- fgets(szzeile, sizeof(szzeile), ptabelle); // headerzeile überspringen
- izeilen -= 1;
- fprintf(ftemp, "%i %i\n", izeilen, ispalten);
- fflush(ftemp);
- int i;
- for(i = 1; i < izeile; i++)
- {
- fgets(szzeile, sizeof(szzeile), ptabelle);
- fprintf(ftemp, "%s", szzeile);
- fflush(ftemp);
- }
- fgets(szzeile, sizeof(szzeile), ptabelle); //zu löschende zeile überspringen
- for(; i <= izeilen; i++)
- {
- fgets(szzeile, sizeof(szzeile), ptabelle);
- fprintf(ftemp, "%s", szzeile);
- fflush(ftemp);
- }
- //Originaldatei mit temporärer ersetzen
- fclose(ptabelle);
- fclose(ftemp);
- remove(szdateiname);
- rename(sztemp, szdateiname);
- ptabelle = fopen(szdateiname, "r+");
- }
- }
- void TabelleZeileAendern(FILE* ptabelle, char* szdateiname, char* szzeile_neu, int izeile)
- {
- char sztemp[55] = { 0 };
- char szzeile[55] = { 0 };
- strcpy(sztemp, szdateiname);
- strcat(sztemp, ".temp");
- FILE* ftemp = fopen(sztemp, "w");
- if(ftemp)
- {
- int izeilen, ispalten;
- rewind(ptabelle);
- fscanf(ptabelle, "%i %i", &izeilen, &ispalten);
- fgets(szzeile, sizeof(szzeile), ptabelle); // headerzeile überspringen
- fprintf(ftemp, "%i %i\n", izeilen, ispalten);
- fflush(ftemp);
- int i;
- for(i = 1; i < izeile; i++)
- {
- fgets(szzeile, sizeof(szzeile), ptabelle);
- fprintf(ftemp, "%s", szzeile);
- fflush(ftemp);
- }
- fgets(szzeile, sizeof(szzeile), ptabelle); //alte zeile überspringen
- fprintf(ftemp, "%s", szzeile_neu);
- fflush(ftemp);
- for(; i <= izeilen; i++)
- {
- fgets(szzeile, sizeof(szzeile), ptabelle);
- fprintf(ftemp, "%s", szzeile);
- fflush(ftemp);
- }
- //Originaldatei mit temporärer ersetzen
- fclose(ptabelle);
- fclose(ftemp);
- remove(szdateiname);
- rename(sztemp, szdateiname);
- ptabelle = fopen(szdateiname, "r+");
- }
- }
- void TabelleZeileEinfuegen(FILE* ptabelle, char* szdateiname, char* szzeile_neu, int izeile)
- {
- char sztemp[55] = { 0 };
- char szzeile[55] = { 0 };
- strcpy(sztemp, szdateiname);
- strcat(sztemp, ".temp");
- FILE* ftemp = fopen(sztemp, "w");
- if(ftemp)
- {
- int izeilen, ispalten;
- rewind(ptabelle);
- fscanf(ptabelle, "%i %i", &izeilen, &ispalten);
- fgets(szzeile, sizeof(szzeile), ptabelle); // headerzeile überspringen
- izeilen += 1;
- fprintf(ftemp, "%i %i\n", izeilen, ispalten);
- int i;
- for(i = 1; i < izeile; i++)
- {
- fgets(szzeile, sizeof(szzeile), ptabelle);
- fprintf(ftemp, "%s", szzeile);
- fflush(ftemp);
- }
- fprintf(ftemp, "%s", szzeile_neu);
- fflush(ftemp);
- for(; i <= izeilen; i++)
- {
- fgets(szzeile, sizeof(szzeile), ptabelle);
- fprintf(ftemp, "%s", szzeile);
- fflush(ftemp);
- }
- //Originaldatei mit temporärer ersetzen
- fclose(ptabelle);
- fclose(ftemp);
- remove(szdateiname);
- rename(sztemp, szdateiname);
- ptabelle = fopen(szdateiname, "r+");
- }
- }
- void Bubblesort(int iliste[], int iliste_laenge, int absteigend)
- {
- int i, j, itemp;
- if(absteigend)
- {
- for (i = 0 ; i < ( iliste_laenge - 1 ); i++)
- {
- for (j = 0 ; j < iliste_laenge - i - 1; j++)
- {
- if (iliste[j] < iliste[j+1])
- {
- itemp = iliste[j];
- iliste[j] = iliste[j+1];
- iliste[j+1] = itemp;
- }
- }
- }
- }
- else
- {
- for (i = 0 ; i < ( iliste_laenge - 1 ); i++)
- {
- for (j = 0 ; j < iliste_laenge - i - 1; j++)
- {
- if (iliste[j] > iliste[j+1])
- {
- itemp = iliste[j];
- iliste[j] = iliste[j+1];
- iliste[j+1] = itemp;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement