Labb C
unknown
c_cpp
2 years ago
11 kB
12
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_VAROR 100
#define MAX_NAMN 20
/* Represententation för varje vara */
struct Vara {
int varunummer;
char namn[MAX_NAMN];
int lagersaldo;
};
/* Registrera nya varor */
void registreraVaror(struct Vara varor[], int *antalVaror) {
int varunummer;
char namn[MAX_NAMN];
int lagersaldo;
printf("Registrera nya varor:\n");
while (1) {
printf("Ange varunummer (0 för avslut): ");
scanf("%d", &varunummer);
if (varunummer == 0) {
break;
}
int uniktVarunummer = 1;
for (int i = 0; i < *antalVaror; i++) {
if (varor[i].varunummer == varunummer) {
uniktVarunummer = 0;
printf("Ej unikt nummer!\n");
break;
}
}
if (!uniktVarunummer) {
continue;
}
printf("Ange namn: ");
scanf(" %[^\n]", namn); // För att läsa in hela raden inklusive mellanslag
printf("Ange saldo: ");
scanf("%d", &lagersaldo);
if (*antalVaror < MAX_VAROR) {
varor[*antalVaror].varunummer = varunummer;
strcpy(varor[*antalVaror].namn, namn);
varor[*antalVaror].lagersaldo = lagersaldo;
(*antalVaror)++;
} else {
printf("Lagret är fullt! Kan inte lägga till fler varor.\n");
break;
}
}
}
/* Skriva ut alla varor */
void skrivUtAllaVaror(struct Vara varor[], int antalVaror) {
printf("%-12s %-15s %10s\n", "Varunummer", "Namn", "Lagersaldo");
printf("_____________________________________________\n");
for (int i = 0; i < antalVaror; i++) {
printf("%-12d %-15s %10d\n", varor[i].varunummer, varor[i].namn, varor[i].lagersaldo);
}
}
/* Sökning efter varor genom namn */
void sokVaraNamn(struct Vara varor[], int antalVaror) {
char sokstr[MAX_NAMN];
printf("Ange söksträng: ");
scanf(" %[^\n]", sokstr);
printf("Varunummer Namn Lagersaldo\n");
printf("_________________________________\n");
for (int i = 0; i < antalVaror; i++) {
if (strstr(varor[i].namn, sokstr) != NULL) {
printf("%-12d %-15s %10d\n", varor[i].varunummer, varor[i].namn, varor[i].lagersaldo);
}
}
}
/* Sökning efter varor genom varunummer */
void sokVaraNummer(struct Vara varor[], int antalVaror) {
int varunummer;
printf("Ange varunummer: ");
scanf("%d", &varunummer);
int hittad = 0;
for (int i = 0; i < antalVaror; i++) {
if (varor[i].varunummer == varunummer) {
printf("Varunummer Namn Lagersaldo\n");
printf("_________________________________\n");
printf("%-12d %-15s %10d\n", varor[i].varunummer, varor[i].namn, varor[i].lagersaldo);
hittad = 1;
break;
}
}
if (!hittad) {
printf("Ingen vara med angivet varunummer hittades.\n");
}
}
/* Sökning efter varor genom lagersaldo */
void sokVaraSaldo(struct Vara varor[], int antalVaror) {
int saldo;
printf("Ange lagersaldo: ");
scanf("%d", &saldo);
printf("Varunummer Namn Lagersaldo\n");
printf("_________________________________\n");
for (int i = 0; i < antalVaror; i++) {
if (varor[i].lagersaldo == saldo) {
printf("%-12d %-15s %10d\n", varor[i].varunummer, varor[i].namn, varor[i].lagersaldo);
}
}
}
/* Ändring av lagersaldot */
void andraLagersaldo(struct Vara varor[], int antalVaror) {
int varunummer, andring;
printf("Ange varunummer: ");
scanf("%d", &varunummer);
int hittad = 0;
for (int i = 0; i < antalVaror; i++) {
if (varor[i].varunummer == varunummer) {
printf("Nuvarande lagersaldo för %s är %d\n", varor[i].namn, varor[i].lagersaldo);
printf("Ange ökning/minskning av lagersaldo: ");
scanf("%d", &andring);
varor[i].lagersaldo += andring;
if (varor[i].lagersaldo < 0) {
printf("Varning: Lagersaldo kan inte vara mindre än 0! Lagersaldo sätts till 0.\n");
varor[i].lagersaldo = 0;
}
printf("Lagersaldo för %s uppdaterat till %d\n", varor[i].namn, varor[i].lagersaldo);
hittad = 1;
break;
}
}
if (!hittad) {
printf("Ingen vara med angivet varunummer hittades.\n");
}
}
/* Sortera varor - varunummer */
int varunummerSorter(const void *vara1, const void *vara2) {
return ((struct Vara *)vara1)->varunummer - ((struct Vara *)vara2)->varunummer;
}
/* sortera varor genom namn */
int namnSorter(const void *vara1, const void *vara2) {
return strcmp(((struct Vara *)vara1)->namn, ((struct Vara *)vara2)->namn);
}
/* Sortera varor genom lagersaldo */
int saldoSorter(const void *vara1, const void *vara2) {
return ((struct Vara *)vara1)->lagersaldo - ((struct Vara *)vara2)->lagersaldo;
}
/* avregistrera varor */
void avregistreraVaror(struct Vara varor[], int *antalVaror) {
int varunummer;
printf("Ange varunummer för vara att avregistrera: ");
scanf("%d", &varunummer);
int hittad = 0;
for (int i = 0; i < *antalVaror; i++) {
if (varor[i].varunummer == varunummer) {
// Flytta alla varor efter den som ska tas bort ett steg bakåt i arrayen
for (int j = i; j < *antalVaror - 1; j++) {
varor[j] = varor[j + 1];
}
(*antalVaror)--;
printf("Vara med varunummer %d har tagits bort ur registret.\n", varunummer);
hittad = 1;
break;
}
}
if (!hittad) {
printf("Ingen vara med angivet varunummer hittades.\n");
}
}
/* Sökning efter varor med saldo <= angiven siffra */
void varningLagersaldo(struct Vara varor[], int antalVaror) {
int saldo;
printf("Ange ett saldo: ");
scanf("%d", &saldo);
printf("Varunummer Namn Lagersaldo\n");
printf("_________________________________\n");
for (int i = 0; i < antalVaror; i++) {
if (varor[i].lagersaldo <= saldo) {
printf("%-12d %-15s %10d\n", varor[i].varunummer, varor[i].namn, varor[i].lagersaldo);
}
}
}
/* Spara varor */
void sparaVarorTillFil(struct Vara varor[], int antalVaror) {
char filnamn[100];
printf("Ange filnamn: ");
scanf("%s", filnamn);
FILE *fil = fopen(filnamn, "w");
if (fil != NULL) {
for (int i = 0; i < antalVaror; i++) {
fprintf(fil, "%d %s %d\n", varor[i].varunummer, varor[i].namn, varor[i].lagersaldo);
}
fclose(fil);
printf("Varor sparade till filen '%s'.\n", filnamn);
} else {
printf("Kunde inte öppna filen för skrivning.\n");
}
}
int main() {
struct Vara varor[MAX_VAROR];
int antalVaror = 0;
/* Läs in varor från fil om den finns */
FILE *fil = fopen("varor.txt", "r");
if (fil != NULL) {
while (fscanf(fil, "%d %s %d", &varor[antalVaror].varunummer, varor[antalVaror].namn, &varor[antalVaror].lagersaldo) == 3) {
antalVaror++;
}
fclose(fil);
}
int val;
while (1) {
printf("\nHuvudmeny:\n");
printf("1. Registrera nya varor\n");
printf("2. Skriva ut alla varor\n");
printf("3. Söka efter varor\n");
printf("4. Ändra lagersaldo för varor\n");
printf("5. Sortera varor\n");
printf("6. Avregistrera varor\n");
printf("7. Varning - Visa varor med lågt saldo\n");
printf("8. Spara varor till fil\n");
printf("9. Avsluta programmet\n");
printf("Välj ett alternativ: ");
scanf("%d", &val);
switch (val) {
case 1:
registreraVaror(varor, &antalVaror);
break;
case 2:
skrivUtAllaVaror(varor, antalVaror);
break;
case 3:
printf("Sökalternativ:\n");
printf("1. Sök efter varor baserat på namn\n");
printf("2. Sök efter varor baserat på varunummer\n");
printf("3. Sök efter varor baserat på lagersaldo\n");
printf("4. Återgå till huvudmenyn\n");
printf("Välj ett sökalternativ: ");
scanf("%d", &val);
switch (val) {
case 1:
sokVaraNamn(varor, antalVaror);
break;
case 2:
sokVaraNummer(varor, antalVaror);
break;
case 3:
sokVaraSaldo(varor, antalVaror);
break;
case 4:
// Huvudmeny
break;
default:
printf("Ogiltigt val. Försök igen.\n");
break;
}
break;
case 4:
andraLagersaldo(varor, antalVaror);
break;
case 5:
printf("Sorteringsalternativ:\n");
printf("1. Sortera varor baserat på varunummer\n");
printf("2. Sortera varor baserat på namn\n");
printf("3. Sortera varor baserat på lagersaldo\n");
printf("4. Återgå till huvudmenyn\n");
printf("Välj ett sorteringsalternativ: ");
scanf("%d", &val);
switch (val) {
case 1:
qsort(varor, antalVaror, sizeof(struct Vara), varunummerSorter);
break;
case 2:
qsort(varor, antalVaror, sizeof(struct Vara), namnSorter);
break;
case 3:
qsort(varor, antalVaror, sizeof(struct Vara), saldoSorter);
break;
case 4:
// Huvudmeny
break;
default:
printf("Ogiltigt val. Försök igen.\n");
break;
}
break;
case 6:
avregistreraVaror(varor, &antalVaror);
break;
case 7:
varningLagersaldo(varor, antalVaror);
break;
case 8:
sparaVarorTillFil(varor, antalVaror);
break;
case 9:
// Spara varor
fil = fopen("varor.txt", "w");
if (fil != NULL) {
for (int i = 0; i < antalVaror; i++) {
fprintf(fil, "%d %s %d\n", varor[i].varunummer, varor[i].namn, varor[i].lagersaldo);
}
fclose(fil);
} else {
printf("Kunde inte spara till filen.\n");
}
printf("Avslutar programmet...\n");
return 0;
default:
printf("Ogiltigt val. Försök igen.\n");
break;
}
}
return 0;
}Editor is loading...