miyago

labb3 lager

Mar 8th, 2018
433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 15.46 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdbool.h>
  5. #include "funktioner.h"
  6.  
  7. #define NAMESIZE 20
  8. #define LAGERSIZE 10
  9.  
  10.  
  11. Item aItem(int myNr, char myNamn[], int myAntal);
  12. Item newItem(void);
  13. void addItem(Item *pLager, int *counter, Item itamz);
  14. void openLager(Item pLager[],int *pitems, char aFile[]);
  15. void backupLager(Item pLager[],int fitems, char aFile[]);
  16. void printItem(Item *pItem);
  17. void printLager(Item *pLager, int fitems);
  18. void setAntal(Item *pLager, int Antalet);
  19. void printAntal(Item *pLager, int fitems, int theNr);
  20. void delItem(Item *pLager, int *counter, int theNr);
  21. void changeItemSaldo(Item *pLager, int fitems, int theNr, int saldot);
  22. void findNr(Item *pLager, int fitems, int theNr);
  23. void writeNr(Item *pLager, int fitems, int theNr, char aFile[]);
  24. void writeNamn(Item *pLager, int fitems, char *theNamn, char aFile[]);
  25. void writeSaldo(Item *pLager, int fitems, int theNr, char aFile[]);
  26. void findAntal(Item *pLager, int fitems, int theNr);
  27. void findNamn(Item *pLager, int fitems, char *theNamn);
  28. void nrSort(Item *pLager, int theNr);
  29. void antalSort(Item *pLager, int theNr);
  30. void namnSort(Item *pLager, int theNr);
  31. void printMenu(void);
  32. bool checkNr(Item *pLager, int theNr);
  33.  
  34. int main(int argc, char **argv) {
  35.     Item Lager[LAGERSIZE+1];
  36.     char ch1[3];
  37.     char ch2[2];
  38.     char ch3[3];
  39.     char ch4[3];
  40.     int items = 0;
  41.     int aTal = 0;
  42.     char aaTal[4];
  43.     int aSaldo = 0;
  44.     char aNamn[NAMESIZE+1];
  45.     char filen[NAMESIZE+1];
  46.     printf("V\x84lkommen till lagret!\n");
  47.     printf("Tyv\x84rr \x84r detta programmet endast optimerat f\x94r anv\x84ndning av gemener.\n");
  48.     printf("Versaler anv\x84nds p\x86 egen risk\n");
  49.     printf("Skriv in filnamnet p\x86 den fil inneh\x86llande ditt lager: ");
  50.     gets(filen);
  51.     openLager(Lager, &items, filen);
  52.     printMenu();
  53.     do {
  54.         printf("Ditt val: ");
  55.         gets(ch1);
  56.         switch (ch1[0]) {
  57.             case 'r' :  printf("Registrera varor?\n");
  58.                     do {
  59.                         if (items != LAGERSIZE) {
  60.                         addItem(Lager, &items, newItem()); // Registrera ny vara
  61.                         printf("y f\x94r att forts\x84tta");
  62.                         gets(aaTal);
  63.                     } else {
  64.                         printf("Lagret \x84r fullt! [%d/%d]\n", items, LAGERSIZE);
  65.                         break;
  66.                     }
  67.                     } while (aaTal[0] == 'y');
  68.                     break;
  69.             case 'w' :  printLager(Lager, items); break; // Visa alla varor
  70.             case 's' :  do {
  71.                         printf("S\x94k efter varor p\x86 [i] - varunummer, [n] - varunamn, [s] - saldo. q f\x94r att avsluta\n\n");
  72.                         gets(ch2);
  73.                         switch (ch2[0]) {
  74.                             case 'i' :  gets(aaTal);
  75.                                 aTal = atoi(aaTal);
  76.                                 findNr(Lager, items, aTal);
  77.                                 break;
  78.                             case 'n' :  gets(aNamn);
  79.                                 findNamn(Lager, items, aNamn);
  80.                                 break;
  81.                             case 's' :  gets(aaTal);
  82.                                 aTal = atoi(aaTal);
  83.                                 findAntal(Lager, items, aTal);
  84.                                 break;
  85.                     }
  86.                     } while (ch2[0] != 'q');
  87.                         break;
  88.             case 'c' :  printf("Type in the itemnumber for the item you want to change saldo: ");
  89.                         gets(aaTal);
  90.                         aTal = atoi(aaTal);
  91.                         printf("Nytt saldo:");
  92.                         gets(aaTal);
  93.                         aSaldo= atoi(aaTal);
  94.                         changeItemSaldo(Lager, items, aTal, aSaldo);
  95.                         break;// Ändra lagersaldot för varor
  96.             case 'o' :  printf("Sortera varor. [i] efter varunummer. [n] efter namn och [s] efter saldo: ");
  97.                         gets(ch3);
  98.                         switch (ch3[0]) {
  99.                             case 's' :  antalSort(Lager, items);
  100.                                         printf("Sorterat efter saldo\n");
  101.                                         break;
  102.                             case 'i' :  nrSort(Lager, items);
  103.                                         printf("Sorterat efter varunummer\n");
  104.                                         break;                    
  105.                             case 'n' :  namnSort(Lager, items);
  106.                                         printf("Sorterat i bokstavsordning\n");
  107.                                         break;
  108.                         }
  109.                         break;
  110.             case 'd' :  printf("Ange varunummer f\x94r den vara du vill ta bort: ");
  111.                         gets(aaTal);
  112.                         aTal = atoi(aaTal);
  113.                         delItem(Lager, &items, aTal);
  114.                         break; // Avregistrera varor
  115.             case 'v' :  gets(aaTal);
  116.                         aTal = atoi(aaTal);
  117.                         printAntal(Lager, items, aTal);
  118.                         break; // Varning för lågt saldo
  119.             case 'k' :  printf("S\x94k och skriva ut varor till fil. [i] efter varunummer. [n] efter namn och [s] efter saldo: ");
  120.                         gets(ch4);
  121.                         switch(ch4[0]) {
  122.                             case 'i' :  printf("Skriv in varunumret: ");
  123.                                         gets(aaTal);
  124.                                         aTal = atoi(aaTal);
  125.                                         printf("Skriv in filnamnet p\x86 den filen du vill spara i: ");
  126.                                         gets(filen);
  127.                                         writeNr(Lager, items, aTal, filen);
  128.                                         break;
  129.                             case 'n' :  printf("S\x94k p\x86 namn: ");
  130.                                         gets(aaTal);
  131.                                         printf("Skriv in filnamnet p\x86 den filen du vill spara i: ");
  132.                                         gets(filen);
  133.                                         writeNamn(Lager, items, aaTal, filen);
  134.                                         break;
  135.                             case 's' :  printf("S\x94k p\x86 saldo: ");
  136.                                         gets(aaTal);
  137.                                         aTal = atoi(aaTal);
  138.                                         printf("Skriv in filnamnet p\x86 den filen du vill spara i: ");
  139.                                         gets(filen);
  140.                                         writeSaldo(Lager, items, aTal, filen);
  141.                                         break;
  142.                         } break;
  143.             case 'p' :  printf("[%d] / %d\n", items, LAGERSIZE); break;
  144.             case 'm' :  printMenu(); break;
  145.             case 'q' :  printf("Du har tryckt f\x94r att avsluta. Ange filnamnet du vill spara lagret till: ");
  146.                         gets(filen);
  147.                         backupLager(Lager, items, filen);
  148.                         break;
  149.         }
  150.     } while (ch1[0] != 'q');
  151.         printf("P\x86 \x86terseende");
  152.    
  153.  
  154.    
  155.     return 0;
  156. }
  157.  
  158. void openLager(Item pLager[],int *pitems, char aFile[]) { // Läser in ett lager från en fil
  159.     FILE *pFile;
  160.     printf("-[L\x84ser in filen]-\n");
  161.     if ((pFile=fopen(aFile,"r"))) {
  162.         while (fscanf(pFile, "%d %s %d",
  163.         &pLager[*pitems].nr,
  164.         pLager[*pitems].namn,
  165.         &pLager[*pitems].antal)==3 && *pitems < LAGERSIZE) {
  166.             (*pitems)++;
  167.         }
  168.     } else {
  169.         printf("Ingen fil med det namnet hittade\n");
  170.     }
  171.     fclose(pFile);
  172.     printf("Lagret laddat med [ %d ] varor\n", *pitems);
  173. }
  174. void backupLager(Item pLager[],int fitems, char aFile[]) { // Skriver lagret till en fil
  175.     FILE *pFile;
  176.     printf("L\x84ser in filen\n");
  177.     if ((pFile=fopen(aFile,"w"))) {
  178.         for (int i=0; i<fitems; i++)
  179.             fprintf(pFile, "%d %s %d\n",
  180.             pLager[i].nr,
  181.             pLager[i].namn,
  182.             pLager[i].antal);
  183.         } else {
  184.         printf("Something went wrong!\n");
  185.     }
  186.     fclose(pFile);
  187.     printf("Lagret skriven till filen: %s\n", aFile);
  188. }
  189. void printItem(Item *pItem){ // Skriver ut en vara
  190.     printf("%03d\t\t", pItem->nr);
  191.     printf("%-20s\t", pItem->namn);
  192.     printf("%5d\n", pItem->antal);
  193. }
  194. void printLager(Item *pLager, int fitems) { // Skriver ut hela lagret
  195.         printf("Nr\t\tNamn\t\t\tSaldo\n");
  196.         printf("---------------------------------------------\n");
  197.         for (int i=0;i<fitems;i++){
  198.             printItem(&pLager[i]);
  199.     }
  200. }
  201. Item aItem(int myNr, char myNamn[], int myAntal) { // Skapar en ny vara
  202.     Item aItem;
  203.     aItem.nr = myNr;
  204.     strcpy(aItem.namn, myNamn);
  205.     aItem.antal = myAntal;
  206.     return aItem;
  207. }
  208.  
  209. void addItem(Item *pLager, int *counter, Item itamz){ // Läger till en vara i lagret
  210.     bool check;
  211.     check = checkNr(pLager, itamz.nr);
  212.         if (check == false){
  213.             pLager[(*counter)++] = itamz;
  214.             } else {
  215.             printf("Varunummer m\x86ste vara unikt!\n");
  216.             return;
  217.         }
  218.            
  219. }
  220. void setAntal(Item *pLager, int Antalet){ // Mutator för saldo
  221.     pLager->antal = Antalet;
  222. }
  223. void printAntal(Item *pLager, int fitems, int theNr) { // Skriver ut varor på skärmen med saldo X eller lägre
  224.         printf("Visar varor med antal %d eller mindre\n", theNr);
  225.         printf("---------------------\n");
  226.         for (int i=0;i<fitems;i++){
  227.          if (pLager[i].antal <= theNr){
  228.             printItem(&pLager[i]);
  229.             }
  230.     }
  231. }
  232. void delItem(Item *pLager, int *counter, int theNr) { // Tar bort en vara
  233.     int i; bool check;
  234.     check = checkNr(pLager, theNr);
  235.     if (check == true) {
  236.         printf("Tar bort varan med varunummer %d\n", theNr);
  237.         printf("---------------------\n");
  238.         for (i=0;i<LAGERSIZE;i++){
  239.          if (pLager[i].nr == theNr){
  240.             pLager[i].nr = 0;
  241.             (*counter)--;
  242.             for (i=0;i<LAGERSIZE;i++){
  243.                 if(pLager[i].nr == 0){
  244.                     pLager[i].nr = pLager[i+1].nr;
  245.                     pLager[i+1].nr = 0;
  246.                 }
  247.             }
  248.          }
  249.         }
  250.     } else {
  251.         printf("Ogilitigt varunummer!\n");
  252.         return;
  253.     }
  254. }
  255. void changeItemSaldo(Item *pLager, int fitems, int theNr, int saldot) { // Ändrar saldo på en vara
  256.     int i; bool check;
  257.         check = checkNr(pLager, theNr);
  258.         if(check == true) {
  259.             printf("\x8Endrar varanummer %d's saldo till %d\n", theNr, saldot);
  260.             printf("---------------------\n");
  261.             for (i=0;i<fitems;i++){
  262.                 if (pLager[i].nr == theNr) {
  263.                     setAntal(pLager, saldot);
  264.                 }
  265.             }
  266.         } else {
  267.             printf("Ogiltigt varunummer!");
  268.             return;
  269.         }
  270. }
  271. void findNr(Item *pLager, int fitems, int theNr) { // Söker efter en varu med ett vist varunummer
  272.         printf("Visar varor med varunummer %d\n", theNr);
  273.         printf("---------------------\n");
  274.         for (int i=0;i<fitems;i++){
  275.          if (pLager[i].nr == theNr){
  276.             printItem(&pLager[i]);
  277.             }
  278.     }
  279. }
  280. void writeNr(Item *pLager, int fitems, int theNr, char aFile[]) { // Skriver ut en vara med ett visst varunummer
  281.         printf("---------------------\n");
  282.         int i; bool check; FILE *pFile;
  283.         check = checkNr(pLager, theNr);
  284.         if (check == true) {
  285.             printf("[-L\x84ser in filen]-\n");
  286.             if ((pFile=fopen(aFile,"w"))) {
  287.                 for (i=0; i<fitems; i++){
  288.                     if (pLager[i].nr == theNr){
  289.                         fprintf(pFile, "%d %s %d\n",
  290.                                         pLager[i].nr,
  291.                                         pLager[i].namn,
  292.                                         pLager[i].antal);
  293.                         printf("Skriver ut vara med varunummer %d till %s\n", theNr, aFile);
  294.                     }
  295.                 }
  296.             } else {
  297.                 printf("Something went wrong!\n");
  298.                     }
  299.         } else {
  300.             printf("Ogiltigt varunummer!");
  301.             return;
  302.         }
  303.     fclose(pFile);
  304.    
  305. }
  306. void writeNamn(Item *pLager, int fitems, char *theNamn, char aFile[]) { // Skriver ut varor efter namn
  307.         printf("---------------------\n");
  308.     FILE *pFile;
  309.     printf("-[L\x84ser in filen]-\n");
  310.     if ((pFile=fopen(aFile,"w"))) {
  311.         for (int i=0; i<fitems; i++){
  312.             if (strstr(pLager[i].namn, theNamn) != NULL){
  313.             fprintf(pFile, "%d %s %d\n",
  314.             pLager[i].nr,
  315.             pLager[i].namn,
  316.             pLager[i].antal);
  317.             }
  318.             printf("Skriver ut varor med varunamn matchande %s till %s\n", theNamn, aFile);
  319.         }
  320.         } else {
  321.         printf("Something went wrong!\n");
  322.     }
  323.     fclose(pFile);
  324. }
  325. void writeSaldo(Item *pLager, int fitems, int theNr, char aFile[]) { // Skriver ut varor med ett visst saldo
  326.         printf("---------------------\n");
  327.     FILE *pFile;
  328.     printf("-[L\x84ser in filen]-\n");
  329.     if ((pFile=fopen(aFile,"w"))) {
  330.         for (int i=0; i<fitems; i++) {
  331.             if (pLager[i].antal == theNr){
  332.             fprintf(pFile, "%d %s %d\n",
  333.             pLager[i].nr,
  334.             pLager[i].namn,
  335.             pLager[i].antal);
  336.         }
  337.        
  338.         }
  339.         printf("Skriver ut alla varor med saldo %d till filen %s\n", theNr, aFile);
  340.         } else {
  341.         printf("Something went wrong!\n");
  342.         }
  343.     fclose(pFile);
  344. }
  345. void findAntal(Item *pLager, int fitems, int theNr) { // Sök på saldo
  346.         printf("Visar varor med antal %d\n", theNr);
  347.         printf("---------------------\n");
  348.         for (int i=0;i<fitems;i++){
  349.          if (pLager[i].antal == theNr){
  350.             printItem(&pLager[i]);
  351.             }
  352.     }
  353. }
  354. void findNamn(Item *pLager, int fitems, char *theNamn) { // Sök på varunamn
  355.         printf("Visar varor som inneh\x86ller s\x94kordet %s\n", theNamn);
  356.         printf("---------------------\n");
  357.         for (int i=0;i<fitems;i++){
  358.          if (strstr(pLager[i].namn, theNamn) != NULL){
  359.             printItem(&pLager[i]);
  360.          }
  361. }
  362. }
  363. void nrSort(Item *pLager, int theNr) { // Sorterar lagret efter varunummer
  364.     int tmp; int tmp2;
  365.     char tmp3[NAMESIZE+1];
  366.     for (int i=0; i<theNr-1; i++)
  367.         for (int j=0; j<theNr-1-i; j++)
  368.             if (pLager[j].nr>pLager[j+1].nr) {
  369.                 tmp=pLager[j].nr;
  370.                 tmp2 =pLager[j].antal;
  371.                 strcpy(tmp3,pLager[j].namn);
  372.                 pLager[j].nr=pLager[j+1].nr;
  373.                 pLager[j].antal=pLager[j+1].antal;
  374.                 strcpy(pLager[j].namn,pLager[j+1].namn);
  375.                 pLager[j+1].nr=tmp;
  376.                 pLager[j+1].antal=tmp2;
  377.                 strcpy(pLager[j+1].namn,tmp3);
  378.             }
  379. }
  380. void antalSort(Item *pLager, int theNr) { // Sorterar lagret efter saldo
  381.     int tmp; int tmp2;
  382.     char tmp3[NAMESIZE+1];
  383.     for (int i=0; i<theNr-1; i++)
  384.         for (int j=0; j<theNr-1-i; j++)
  385.             if (pLager[j].antal>pLager[j+1].antal) {
  386.                 tmp=pLager[j].nr;
  387.                 tmp2 =pLager[j].antal;
  388.                 strcpy(tmp3,pLager[j].namn);
  389.                 pLager[j].nr=pLager[j+1].nr;
  390.                 pLager[j].antal=pLager[j+1].antal;
  391.                 strcpy(pLager[j].namn,pLager[j+1].namn);
  392.                 pLager[j+1].nr=tmp;
  393.                 pLager[j+1].antal=tmp2;
  394.                 strcpy(pLager[j+1].namn,tmp3);
  395.             }
  396. }
  397. void namnSort(Item *pLager, int theNr) { // Sorterar lagret i bokstavsordning
  398.     int tmp; int tmp2;
  399.     char tmp3[NAMESIZE+1];
  400.     for (int i=0; i<theNr-1; i++)
  401.         for (int j=0; j<theNr-1-i; j++)
  402.             if (strcmp(pLager[j].namn,pLager[j+1].namn) > 0){
  403.                 tmp=pLager[j].nr;
  404.                 tmp2 =pLager[j].antal;
  405.                 strcpy(tmp3,pLager[j].namn);
  406.                 pLager[j].nr=pLager[j+1].nr;
  407.                 pLager[j].antal=pLager[j+1].antal;
  408.                 strcpy(pLager[j].namn,pLager[j+1].namn);
  409.                 pLager[j+1].nr=tmp;
  410.                 pLager[j+1].antal=tmp2;
  411.                 strcpy(pLager[j+1].namn,tmp3);
  412.             }
  413. }
  414. bool checkNr(Item *pLager, int theNr) { // Kollar om ett varunummer redan finns i lagret
  415.     int i; bool alrdyExist = false;
  416.     for (i=0;i<LAGERSIZE; i++) {
  417.         if (pLager[i].nr == theNr) {
  418.             alrdyExist = true;
  419.         }
  420.     }
  421.     return alrdyExist;
  422. }
Advertisement
Add Comment
Please, Sign In to add comment