Advertisement
attilan

Mate3

May 15th, 2018
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.34 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5. #include<string.h>
  6. #include<locale.h>
  7. #include<Windows.h>
  8. #include<time.h>
  9.  
  10. #define MAX 255
  11. #define MAXADAT 20
  12. #define MINADAT 1
  13.  
  14. typedef struct Dinstruktura {
  15.     char IP[MAX];
  16.     char MASK[MAX];
  17.     int ID;
  18. }dinstr;
  19.  
  20. typedef struct Lista {
  21.     char IP[MAX];
  22.     char MASK[MAX];
  23.     int ID;
  24.     struct Lista* KOV;
  25. }Listaelem;
  26.  
  27. int getline(char s[], int lim);
  28. int szame(char s[], int alap);
  29. dinstr* dinbeolvas(const char *fajlnev, int adatokszama);
  30. void dinkkiir(dinstr* ptr);
  31. void dinfkiir(dinstr* ptr, char* fnev, int adatszam);
  32. void beolvasListabaRendezetlen(char fajlnev[], Listaelem *ELSO);
  33. void elsoelem(Listaelem* ELSO, char buffer[]);
  34. void vegere(Listaelem* ELSO, char buffer[]);
  35. void fajlbairas(Listaelem* ELSO, char fajlnev[]);
  36. void kiiratas(Listaelem *ELSO);
  37. void egeszlistatorlese(Listaelem* ELSO);
  38.  
  39. void main() {
  40.     clock_t start;
  41.     clock_t end;
  42.     double futasido;
  43.     int adatokszama;
  44.     int tenylegesadat = 0;
  45.     int ok = 3;
  46.     char INP[MAX + 1] = "\0";
  47.     char* fnevbe = "IP.txt";
  48.     char* fnevki = "IPKI.txt";
  49.     char* fnevkill = "IPKILL.txt";
  50.     dinstr* ptr = NULL;
  51.     Listaelem* ELSO = (Listaelem*)malloc(sizeof(Listaelem));
  52.  
  53.     setlocale(LC_ALL, "");
  54.     start = clock();
  55.     SetConsoleCP(1250);
  56.     SetConsoleOutputCP(1250);
  57.  
  58.     printf("Beolvasás dinamikus struktúrába és láncolt listába.\n");
  59.     printf("Maximum 3 próbálkozás van az adatszám megadására!\n");
  60.     printf("Az adatok számának %d és %d közé kell esnie!\n", MINADAT, MAXADAT);
  61.     printf("Kilépés a ""Vége"" szöveg beírásával lehetséges.\n\n");
  62.     do {
  63.         printf("\nKérem adja meg hány adatra kell felkészülni: ");
  64.         if (!getline(INP, MAX)) {
  65.             printf("Nem adhat meg üres sort!\n");
  66.             ok--;
  67.             printf("Hátralévő próbálkozások száma: %d\n", ok);
  68.         }
  69.         else if (!strcmp(INP, "Vége")) {
  70.             printf("Bekérés megszakítva.\n");
  71.             printf("Az adatok láncolt listában lesznek tárolva.\n");
  72.             ok = 4;
  73.         }
  74.         else if (!szame(INP, 10)) {
  75.             printf("Nem számot adott meg!\n");
  76.             ok--;
  77.             printf("Hátralévő próbálkozások száma: %d\n", ok);
  78.         }
  79.         else if (((adatokszama = atoi(INP)) < MINADAT) || (adatokszama > MAXADAT)) {
  80.             printf("Az adatok számának %d és %d közé kell esnie!\n", MINADAT, MAXADAT);
  81.             ok--;
  82.             printf("Hátralévő próbálkozások száma: %d\n", ok);
  83.         }
  84.         else {
  85.             ptr = dinbeolvas(fnevbe, &tenylegesadat);
  86.             ok = 5;
  87.         }
  88.     } while (ok < 3 && ok > 0);
  89.     printf("Tényleges adat: %d\n", tenylegesadat);
  90.     if (tenylegesadat>0) {
  91.         if (ok == 5) {
  92.             system("cls");
  93.             printf("A tárolás dinamikus struktúrába megtörtént.\n");
  94.             ok = 0;
  95.  
  96.             do {
  97.                 printf("(K)épernyőre szeretné kiíratni a tartalmat, (F)ájlba vagy (M)indkettőbe: ");
  98.                 if (!getline(INP, MAX)) {
  99.                     printf("Nem adhat meg üres sort!\n");
  100.                 }
  101.                 else if (!strcmp(INP, "K")) {
  102.                     printf("Képernyőre kiiratás következik:\n\n");
  103.                     dinkkiir(ptr, tenylegesadat);
  104.                     ok = 1;
  105.                 }
  106.                 else if (!strcmp(INP, "F")) {
  107.                     printf("Fájlba kiiratás következik:\n");
  108.                     dinfkiir(ptr, fnevki, tenylegesadat);
  109.                     ok = 1;
  110.                 }
  111.                 else if (!strcmp(INP, "M")) {
  112.                     printf("Fájlba és képernyőre kiiratás következik:\n");
  113.                     dinkkiir(ptr, tenylegesadat);
  114.                     dinfkiir(ptr, fnevki, tenylegesadat);
  115.                     ok = 1;
  116.                 }
  117.                 else {
  118.                     printf("Hibás paraméter!\n");
  119.                 }
  120.             } while (!ok);
  121.             free(ptr);
  122.         }
  123.         else {
  124.             system("cls");
  125.             printf("Dinamikus struktúrában való tárolás sikertelen!\n");
  126.         }
  127.  
  128.         printf("\nLáncolt listában történő tárolás következik.\n\n");
  129.         beolvasListabaRendezetlen(fnevbe, ELSO);
  130.  
  131.         if (ELSO) {
  132.             ok = 0;
  133.             do {
  134.                 printf("\n(K)épernyőre szeretné kiíratni a tartalmat, (F)ájlba vagy (M)indkettőbe: ");
  135.                 if (!getline(INP, MAX)) {
  136.                     printf("Nem adhat meg üres sort!\n");
  137.                 }
  138.                 else if (!strcmp(INP, "K")) {
  139.                     printf("Képernyőre kiiratás következik:\n\n");
  140.                     kiiratas(ELSO);
  141.                     ok = 1;
  142.                 }
  143.                 else if (!strcmp(INP, "F")) {
  144.                     printf("Fájlba kiiratás következik:\n");
  145.                     fajlbairas(ELSO, fnevkill);
  146.                     ok = 1;
  147.                 }
  148.                 else if (!strcmp(INP, "M")) {
  149.                     printf("Fájlba és képernyőre kiiratás következik:\n");
  150.                     kiiratas(ELSO);
  151.                     fajlbairas(ELSO, fnevkill);
  152.                     ok = 1;
  153.                 }
  154.                 else {
  155.                     printf("Hibás paraméter!\n");
  156.                 }
  157.             } while (!ok);
  158.             egeszlistatorlese(ELSO);
  159.         }
  160.         else {
  161.             system("cls");
  162.             printf("Láncolt listában való tárolás sikertelen!\n");
  163.         }
  164.     }
  165.     else printf("Nincs elegendő adat!\n");
  166.     end = clock();
  167.     futasido = ((double)(end - start)) / CLOCKS_PER_SEC;
  168.     printf("\nA futásidő: %0.2lf másodperc.\n", futasido);
  169.     printf("Billentyűleütésre a program kilép.");
  170.     getchar();
  171. }
  172.  
  173. int getline(char s[], int lim)
  174. {
  175.     int c, i;
  176.     for (i = 0; i < lim && (c = getchar()) != '\n' && c != EOF; i++)
  177.         s[i] = c;
  178.     s[i] = '\0';
  179.     while (c != '\n' && c != EOF)
  180.         c = getchar();
  181.     return i;
  182. }
  183.  
  184. int szame(char s[], int alap) {                     //s string ALAP alapú szám-e?
  185.     int i = 0;
  186.     while (s[i] == ' ' || s[i] == '\n' || s[i] == '\t') {
  187.         ++i;                //return 0 hozzáadásával kizárhatóak a fehér karakterek
  188.         return 0;
  189.     }
  190.     while (s[i] == '-' || s[i] == '+')
  191.         ++i;
  192.     for (; s[i] != 0; ++i)
  193.         if (!(s[i] >= '0' && s[i] <= alap - 1 + '0'))
  194.             return 0;
  195.     return 1;
  196. }
  197.  
  198. dinstr* dinbeolvas(const char *fajlnev, int* tenylegesadat) {
  199.     FILE* f = fopen(fajlnev, "r");
  200.     dinstr* ptr;
  201.     char buf[MAX];
  202.     int sorokszama = 0;
  203.     int hossz = 0;
  204.     int i = 0;
  205.     int futas = 0;
  206.     char* token;
  207.  
  208.     if (f) {
  209.         while (fgets(buf, sizeof(buf), f)) {
  210.             sorokszama++;
  211.         }
  212.         *tenylegesadat = sorokszama;
  213.         rewind(f);
  214.         ptr = (dinstr*)malloc(sizeof(dinstr) * sorokszama);
  215.         while (fgets(buf, sizeof(buf), f)) {
  216.             hossz = strlen(buf) - 1;
  217.             if (buf[hossz == '\n'])
  218.                 buf[hossz] = '\0';
  219.             token = strtok(buf, "\t");
  220.             while (token) {
  221.                 if (futas == 0)
  222.                     strcpy((ptr + i)->IP, token);
  223.                 else if (futas == 1)
  224.                     strcpy((ptr + i)->MASK, token);
  225.                 else
  226.                     (ptr + i)->ID = atoi(token);
  227.                 futas++;
  228.                 token = strtok(NULL, "\t");
  229.             }
  230.             futas = 0;
  231.             i++;
  232.         }
  233.         fclose(f);
  234.         return ptr;
  235.     }
  236.     else
  237.         printf("Fájlolvasás hiba!\n");
  238. }
  239.  
  240. void dinkkiir(dinstr* ptr, int adatszam) {
  241.     int i = 0;
  242.  
  243.     for (i; i < adatszam; i++) {
  244.         printf("IP cím: %s\n", (ptr + i)->IP);
  245.         printf("Alhálózati maszk: %s\n", (ptr + i)->MASK);
  246.         printf("Azonosító: %d\n", (ptr + i)->ID);
  247.         printf("\n");
  248.     }
  249.     printf("Képernyőre kiíratás kész.\n");
  250. }
  251.  
  252. void dinfkiir(dinstr* ptr, char* fnev, int adatszam) {
  253.     FILE* f = fopen(fnev, "w+");
  254.     int i = 0;
  255.  
  256.     if (f) {
  257.         for (i; i < adatszam; i++) {
  258.             fprintf(f, "IP cím: %s\n", (ptr + i)->IP);
  259.             fprintf(f, "Alhálózati maszk: %s\n", (ptr + i)->MASK);
  260.             fprintf(f, "Azonosító: %d\n", (ptr + i)->ID);
  261.             fprintf(f, "\n");
  262.         }
  263.         fclose(f);
  264.         printf("Fájlba iratás kész.\n");
  265.     }
  266.     else
  267.         printf("Fájlba írás hiba!\n");
  268. }
  269.  
  270. void beolvasListabaRendezetlen(char fajlnev[], Listaelem *ELSO) {
  271.     FILE *f = fopen(fajlnev, "r");
  272.     char buffer[256];
  273.     int futas = 0;
  274.     int hossz = 0;
  275.  
  276.     if (f) {
  277.         while (fgets(buffer, sizeof buffer, f)) {
  278.             hossz = strlen(buffer);
  279.             if (buffer[hossz - 1] == '\n')
  280.                 buffer[hossz - 1] = '\0';
  281.             if (futas == 0) {
  282.                 elsoelem(ELSO, buffer);
  283.                 futas++;
  284.             }
  285.             else vegere(ELSO, buffer);
  286.         }
  287.         printf("Láncolt listába írás kész.\n");
  288.         fclose(f);
  289.     }
  290.     else
  291.         printf("Listába írás hiba!\n");
  292. }
  293.  
  294. void elsoelem(Listaelem* ELSO, char buffer[]) {
  295.     char* token;
  296.     int ugras = 0;
  297.  
  298.     token = strtok(buffer, "\t");
  299.     while (token != NULL) {
  300.         if (ugras == 0)
  301.             strcpy(ELSO->IP, token);
  302.         else if (ugras == 1)
  303.             strcpy(ELSO->MASK, token);
  304.         else {
  305.             ELSO->ID = atoi(token);
  306.             ELSO->KOV = NULL;
  307.         }
  308.         ugras++;
  309.         token = strtok(NULL, "\t");
  310.     }
  311. }
  312.  
  313. void vegere(Listaelem* ELSO, char buffer[]) {
  314.     char* token;
  315.     int ugras = 0;
  316.     Listaelem* AKT = ELSO;
  317.     Listaelem* ELOZO = NULL;
  318.     token = strtok(buffer, "\t");
  319.  
  320.     while (AKT != NULL) {
  321.         ELOZO = AKT;
  322.         AKT = AKT->KOV;
  323.     }
  324.  
  325.     ELOZO->KOV = (Listaelem *)malloc(sizeof(Listaelem));
  326.     AKT = ELOZO->KOV;
  327.     while (token != NULL) {
  328.         if (ugras == 0)
  329.             strcpy(AKT->IP, token);
  330.         else if (ugras == 1)
  331.             strcpy(AKT->MASK, token);
  332.         else {
  333.             AKT->ID = atoi(token);
  334.             AKT->KOV = NULL;
  335.         }
  336.         ugras++;
  337.         token = strtok(NULL, "\t");
  338.     }
  339. }
  340.  
  341. void fajlbairas(Listaelem* ELSO, char fajlnev[]) {
  342.     FILE *f = fopen(fajlnev, "w+");
  343.  
  344.     if (f == NULL) {
  345.         printf("Fájlba írás hiba!\n");
  346.         getchar();
  347.     }
  348.     else {
  349.         Listaelem* AKT = ELSO;
  350.         if (AKT == NULL)
  351.             fprintf(f, "A lista üres!\n");
  352.         else {
  353.             while (AKT != NULL) {
  354.                 fprintf(f, "IP cím: %s\n", AKT->IP);
  355.                 fprintf(f, "Alhálózati maszk: %s\n", AKT->MASK);
  356.                 fprintf(f, "Azonosító: %d\n", AKT->ID);
  357.                 fprintf(f, "\n");
  358.                 AKT = AKT->KOV;
  359.             }
  360.         }
  361.         fclose(f);
  362.         printf("Fájlba írás kész.\n");
  363.     }
  364. }
  365.  
  366. void kiiratas(Listaelem *ELSO) {
  367.     Listaelem *AKT = ELSO;
  368.  
  369.     if (AKT == NULL)
  370.         printf("A lista üres.\n");
  371.     else {
  372.         while (AKT != NULL) {
  373.             printf("IP cím: %s\n", AKT->IP);
  374.             printf("Alhálózati maszk: %s\n", AKT->MASK);
  375.             printf("Azonosító: %d\n", AKT->ID);
  376.             printf("\n");
  377.             AKT = AKT->KOV;
  378.         }
  379.     }
  380.     printf("Képernyőre kiiratás kész.\n");
  381. }
  382.  
  383. void egeszlistatorlese(Listaelem* ELSO) {
  384.     Listaelem* tmp;
  385.     Listaelem* AKT = ELSO;
  386.  
  387.     while (AKT) {
  388.         tmp = AKT;
  389.         AKT = AKT->KOV;
  390.         free(tmp);
  391.     }
  392. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement