#include #include #include #include #define NAMESIZE 20 #define LAGERSIZE 10 typedef struct { int nr; char namn[NAMESIZE+1]; int antal; } Item; Item aItem(int myNr, char myNamn[], int myAntal); Item newItem(void); void addItem(Item *pLager, int *counter, Item itamz); void openLager(Item pLager[],int *pitems, char aFile[]); void backupLager(Item pLager[],int fitems, char aFile[]); void printItem(Item *pItem); void printLager(Item *pLager, int fitems); void setAntal(Item *pLager, int Antalet); void printAntal(Item *pLager, int fitems, int theNr); void delItem(Item *pLager, int *counter, int theNr); void changeItemSaldo(Item *pLager, int fitems, int theNr, int saldot); void findNr(Item *pLager, int fitems, int theNr); void writeNr(Item *pLager, int fitems, int theNr, char aFile[]); void writeNamn(Item *pLager, int fitems, char *theNamn, char aFile[]); void writeSaldo(Item *pLager, int fitems, int theNr, char aFile[]); void findAntal(Item *pLager, int fitems, int theNr); void findNamn(Item *pLager, int fitems, char *theNamn); void nrSort(Item *pLager, int theNr); void antalSort(Item *pLager, int theNr); void namnSort(Item *pLager, int theNr); void printMenu(void); bool checkNr(Item *pLager, int theNr); int main(int argc, char **argv) { Item Lager[LAGERSIZE+1]; char ch1[3]; char ch2[2]; char ch3[3]; char ch4[3]; int items = 0; int aTal = 0; char aaTal[4]; int aSaldo = 0; char aNamn[NAMESIZE+1]; char filen[NAMESIZE+1]; printf("V\x84lkommen till lagret!\n"); printf("Tyv\x84rr \x84r detta programmet endast optimerat f\x94r anv\x84ndning av gemener.\n"); printf("Versaler anv\x84nds p\x86 egen risk\n"); printf("Skriv in filnamnet p\x86 den fil inneh\x86llande ditt lager: "); gets(filen); openLager(Lager, &items, filen); printMenu(); do { printf("Ditt val: "); gets(ch1); switch (ch1[0]) { case 'r' : printf("Registrera varor?\n"); do { if (items != LAGERSIZE) { addItem(Lager, &items, newItem()); // Registrera ny vara printf("y f\x94r att forts\x84tta"); gets(aaTal); } else { printf("Lagret \x84r fullt! [%d/%d]\n", items, LAGERSIZE); break; } } while (aaTal[0] == 'y'); break; case 'w' : printLager(Lager, items); break; // Visa alla varor case 's' : do { printf("S\x94k efter varor p\x86 [i] - varunummer, [n] - varunamn, [s] - saldo. q f\x94r att avsluta\n\n"); gets(ch2); switch (ch2[0]) { case 'i' : gets(aaTal); aTal = atoi(aaTal); findNr(Lager, items, aTal); break; case 'n' : gets(aNamn); findNamn(Lager, items, aNamn); break; case 's' : gets(aaTal); aTal = atoi(aaTal); findAntal(Lager, items, aTal); break; } } while (ch2[0] != 'q'); break; case 'c' : printf("Type in the itemnumber for the item you want to change saldo: "); gets(aaTal); aTal = atoi(aaTal); printf("Nytt saldo:"); gets(aaTal); aSaldo= atoi(aaTal); changeItemSaldo(Lager, items, aTal, aSaldo); break;// Ändra lagersaldot för varor case 'o' : printf("Sortera varor. [i] efter varunummer. [n] efter namn och [s] efter saldo: "); gets(ch3); switch (ch3[0]) { case 's' : antalSort(Lager, items); printf("Sorterat efter saldo"); break; case 'i' : nrSort(Lager, items); printf("Sorterat efter varunummer"); break; case 'n' : namnSort(Lager, items); printf("Sorterat i bokstavsordning"); break; } break; case 'd' : printf("Ange varunummer f\x94r den vara du vill ta bort: "); gets(aaTal); aTal = atoi(aaTal); delItem(Lager, &items, aTal); break; // Avregistrera varor case 'v' : gets(aaTal); aTal = atoi(aaTal); printAntal(Lager, items, aTal); break; // Varning för lågt saldo case 'k' : printf("S\x94k och skriva ut varor till fil. [i] efter varunummer. [n] efter namn och [s] efter saldo: "); gets(ch4); switch(ch4[0]) { case 'i' : printf("Skriv in varunumret: "); gets(aaTal); aTal = atoi(aaTal); printf("Skriv in filnamnet p\x86 den filen du vill spara i: "); gets(filen); writeNr(Lager, items, aTal, filen); break; case 'n' : printf("S\x94k p\x86 namn: "); gets(aaTal); printf("Skriv in filnamnet p\x86 den filen du vill spara i: "); gets(filen); writeNamn(Lager, items, aaTal, filen); break; case 's' : printf("S\x94k p\x86 saldo: "); gets(aaTal); aTal = atoi(aaTal); printf("Skriv in filnamnet p\x86 den filen du vill spara i: "); gets(filen); writeSaldo(Lager, items, aTal, filen); break; } break; case 'p' : printf("[%d] / %d\n", items, LAGERSIZE); break; case 'm' : printMenu(); break; case 'q' : printf("Du har tryckt f\x94r att avsluta. Ange filnamnet du vill spara lagret till: "); gets(filen); backupLager(Lager, items, filen); break; } } while (ch1[0] != 'q'); printf("P\x86 \x86terseende"); return 0; } void openLager(Item pLager[],int *pitems, char aFile[]) { // Läser in ett lager från en fil FILE *pFile; printf("-[L\x84ser in filen]-\n"); if ((pFile=fopen(aFile,"r"))) { while (fscanf(pFile, "%d %s %d", &pLager[*pitems].nr, pLager[*pitems].namn, &pLager[*pitems].antal)==3 && *pitems < LAGERSIZE) { (*pitems)++; } } else { printf("Ingen fil med det namnet hittade\n"); } fclose(pFile); printf("Lagret laddat med [ %d ] varor\n", *pitems); } void backupLager(Item pLager[],int fitems, char aFile[]) { // Skriver lagret till en fil FILE *pFile; printf("L\x84ser in filen\n"); if ((pFile=fopen(aFile,"w"))) { for (int i=0; inr); printf("%-20s\t", pItem->namn); printf("%5d\n", pItem->antal); } void printLager(Item *pLager, int fitems) { // Skriver ut hela lagret printf("Nr\t\tNamn\t\t\tSaldo\n"); printf("---------------------------------------------\n"); for (int i=0;iantal = Antalet; } void printAntal(Item *pLager, int fitems, int theNr) { // Skriver ut varor på skärmen med saldo X eller lägre printf("Visar varor med antal %d eller mindre\n", theNr); printf("---------------------\n"); for (int i=0;ipLager[j+1].nr) { tmp=pLager[j].nr; tmp2 =pLager[j].antal; strcpy(tmp3,pLager[j].namn); pLager[j].nr=pLager[j+1].nr; pLager[j].antal=pLager[j+1].antal; strcpy(pLager[j].namn,pLager[j+1].namn); pLager[j+1].nr=tmp; pLager[j+1].antal=tmp2; strcpy(pLager[j+1].namn,tmp3); } } void antalSort(Item *pLager, int theNr) { // Sorterar lagret efter saldo int tmp; int tmp2; char tmp3[NAMESIZE+1]; for (int i=0; ipLager[j+1].antal) { tmp=pLager[j].nr; tmp2 =pLager[j].antal; strcpy(tmp3,pLager[j].namn); pLager[j].nr=pLager[j+1].nr; pLager[j].antal=pLager[j+1].antal; strcpy(pLager[j].namn,pLager[j+1].namn); pLager[j+1].nr=tmp; pLager[j+1].antal=tmp2; strcpy(pLager[j+1].namn,tmp3); } } void namnSort(Item *pLager, int theNr) { // Sorterar lagret i bokstavsordning int tmp; int tmp2; char tmp3[NAMESIZE+1]; for (int i=0; i 0){ tmp=pLager[j].nr; tmp2 =pLager[j].antal; strcpy(tmp3,pLager[j].namn); pLager[j].nr=pLager[j+1].nr; pLager[j].antal=pLager[j+1].antal; strcpy(pLager[j].namn,pLager[j+1].namn); pLager[j+1].nr=tmp; pLager[j+1].antal=tmp2; strcpy(pLager[j+1].namn,tmp3); } } void printMenu(void){ // Huvudmeny printf("[Lager meny]\n"); printf("[r] - registrera\n"); printf("[w] - visa lagret\n"); printf("[s] - s\x94ka i lagret\n"); printf("[c] - \x84ndra saldo f\x94r en vara\n"); printf("[o] - ordna i lagret\n"); printf("[d] - ta bort en vara\n"); printf("[v] - varna f\x94r l\x86gt saldo\n"); printf("[k] - skriv ut delar av lagret till en txt fil\n"); printf("[p] - Lagerstatus\n"); printf("[m] - f\x94r att visa denna meny\n"); } bool checkNr(Item *pLager, int theNr) { // Kollar om ett varunummer redan finns i lagret int i; bool alrdyExist = false; for (i=0;i