Code:
#include <stdlib.h>
#include <stdio.h>
void insert(void);
void visualize(void);
void save(void);
int llinea(char *str, int n);
struct comp
{
int code;
char name[27];
char des[52];
int disp;
struct comp *n;
};
struct comp *comps = 0;
int main()
{
int c;
for(;;)
{
fputs("________________________________________________________________________________\n", stdout);
fputs("Database componenti ©2011\n\n", stderr);
fputs("1 - Inserisci componente nel database\n\n", stderr);
fputs("2 - Visualizza il database\n\n", stderr);
fputs("3 - Salva database\n\n", stderr);
fputs("4 - Esci dal programma\n", stderr);
fputs("________________________________________________________________________________\n", stderr);
fputs("Inserisci il codice corrispondente all'operazione: ", stderr);
fflush(stdin);
scanf("%i", &c);
if(c == 1)
{
inserisci();
}
else if(c == 2)
{
visualizza();
}
else if(c == 3)
{
salva();
}
else if(c == 4)
{
return 0;
}
else
{
fputs("\nIl codice inserito non è valido.\n\n------------------------Premere un tasto per continuare---------------------\n", stderr);
fflush(stdin);
getchar();
fputs("\n\n", stderr);
}
fputs("\n------------------------Premere un tasto per continuare---------------------\n", stderr);
fflush(stdin);
getchar();
fputs("\n\n", stderr);
}
}
void insert()
{
struct comp *p, *c, *nn = calloc(1, sizeof(struct comp));
if(!nn)
{
fputs("Memoria piena. Impossibile aggiungere il componente.\n", stderr);
}
fputs("\nInserisci il codice del componente (max. 99999999): ", stderr);
fflush(stdin);
scanf("%9i", &nn->code);
for(c = comps, p = 0; c && nn->code > c->code; p = c, c = c->n);
if(c && (nn->code == c->code))
{
fputs("Il componente esiste gia'. Impossibile aggiungere il componente.\n", stderr);
return;
}
fputs("Inserisci il nome del componente: ", stderr);
llinea(nn->name, 25);
fputs("Inserisci la descrizione del componente: ", stderr);
llinea(nn->des, 100);
fputs("Inserisci la disponibilita' del componente: ", stderr);
fflush(stdin);
scanf("%i", &nn->disp);
nn->n = c;
if(!p)
{
comps = nn;
}
else
{
p->n = nn;
}
}
void visualize()
{
struct comp *p;
for(p = comps; p; p = p->n)
{
fprintf(stderr, "\nCodice del componente: %i\n", p->code);
fprintf(stderr, "Nome del componente: %s\n", p->name);
fprintf(stderr, "Descrizione del componente: %s\n", p->des);
fprintf(stderr, "Disponibilita' del componente: %i\n\n", p->disp);
}
}
void save()
{
FILE *fw;
struct comp *p;
if((fw = fopen("C:\\Users\\Utente\\Desktop\\prova.txt", "w")) != NULL)
{
int s1;
int s2;
int s3;
int s4;
fputs("\n| CODICE | NOME | DESCRIZIONE | DISPONIBILITA' |\n", fw);
fputs("\n| | | | |\n", fw);
for(p = comps; p; p = p->n)
{
s1 = ((((float)(25 - strlen(p->name))) + 0.5) / 2);
s2 = ((((float)(25 - strlen(p->name))) - 0.5) / 2);
s3 = ((((float)(52 - strlen(p->des))) + 0.5) / 2);
s4 = ((((float)(52 - strlen(p->des))) - 0.5) / 2) - 1;
fprintf(fw, "| %09.9i ", p->code);
fprintf(fw, "| %*s%.25s%*s ", s1, " ", p->name, s2, " ");
fprintf(fw, "| %*s%.50s%*s ", s3, " ", p->des, s4, " ");
fprintf(fw, "| %09.9i |\n", p->disp);
}
}
fclose(fw);
}
int llinea(char *str, int n)
{
int c, i = 0;
fflush(stdin);
while(isspace(c = getc(stdin)));
while(c != '\n')
{
if(i < n)
{
str[i++] = c;
}
c = getc(stdin);
}
if(n == i)
{
str[i++] = (int) "*";
}
str[i] = '\0';
return i;
}