Sono tre file:
FILE lis.h
codice:
#include <malloc.h>
#include <string.h>
extern char file[100];
struct nodo {
Sms val;
struct nodo *next;
};
class Lista {
public:
Lista(void)
{
lung = 0;
l = NULL;
}
~Lista(void)
{ // DISTRUTTORE
struct nodo *aux;
while (l != NULL)
{
aux = l;
l = l->next;
free(aux);
}
l = NULL;
lung = 0;
}
void inserisci(int pos, Sms ele)
{
if ((pos >= 1) && (pos <= lung+1))
{
int i = 1;
struct nodo *p = l;
struct nodo *aux = (struct nodo *)malloc(sizeof(struct nodo));
struct nodo *prec = NULL;
aux->val = ele;
while (i != pos)
{
prec = p;
p = p->next;
i++;
}
aux->next = p;
if (prec != NULL)
prec->next = aux;
else
l = aux;
lung++;
}
}
void elimina(int pos)
{
if ((pos >= 1) && (pos <= lung))
{
int i = 1;
struct nodo *p = l;
struct nodo *prec = NULL;
while (i != pos)
{
prec = p;
p = p->next;
i++;
}
if (prec != NULL)
prec->next = p->next;
else
l = l->next;
free(p);
lung--;
}
}
void mostra(int pos)
{
if ((pos >= 1) && (pos <= lung))
{
struct nodo *p = l;
for (int i = 1; i != pos; i++)
p = p->next;
p->val.visualizza();
}
}
void cerca(char *p)
{
struct nodo *s;
for (s = l; s != NULL; s = s->next)
if (s->val.confronta(p))
{
system("cls");
s->val.visualizza();
putchar('\n');
system("PAUSE");
}
}
int lunghezza(void)
{
return lung;
}
int vuota(void)
{
return (lung == 0);
}
void salva(void)
{
struct nodo *p;
char scelta;
printf("\n\nVuoi salvare? ");
scanf("%c%*c",&scelta);
if (scelta != 's' && scelta != 'S')
return;
FILE *fp = fopen(file,"w");
if (fp != NULL)
{
for (p = l; p != NULL; p = p->next)
fwrite(&(p->val), 1, sizeof(Sms), fp);
printf("\n\nSalvato\n\n");
fclose(fp);
}
else
printf("\nNon riuscito\n");
system("PAUSE");
}
protected: int lung;
protected: struct nodo *l;
};
class Lista_ordinata : public Lista
{
public:
void inserisci(Sms n)
{
int i;
struct nodo *p;
bool inserito = false;
for (i = 1, p = l; i <= lung; i++)
{
if (p->val >= n)
{
Lista::inserisci(i,n);
inserito = true;
break;
}
p = p->next;
}
if (!inserito)
{
Lista::inserisci(lung+1,n);
inserito = true;
}
}
void elimina(Sms n)
{
int i;
struct nodo *p;
bool eliminato = false;
for (i = 1, p = l; p != NULL; i++, p = p->next)
{
if (p->val == n)
{
Lista::elimina(i);
eliminato = true;
break;
}
}
if (eliminato)
printf("Operazione riuscita\n");
else
printf("Elemento non presente\n");
}
FILE *apri(void)
{
Sms aux;
struct nodo *p;
printf("\n\nChe file vuoi aprire? ");
scanf("%[^\n]%*c",file);
FILE *fp = fopen(file,"a+");
if (fp != NULL)
{
while (fread(&aux, 1, sizeof(Sms), fp))
inserisci(aux);
return fp;
}
else
{
printf("\nNon riuscito\n");
return NULL;
}
}
};
FILE sms.h
codice:
class Sms
{
private:
char testo[481];
char persona[20];
char modo;
struct data {
unsigned int giorno, mese, anno;
} data;
struct ora {
unsigned int ore, minuti;
} ora;
public:
Sms()
{
testo[0] = '\0';
persona[0] = '\0';
modo = 'N';
data.giorno = data.mese = data.anno = 0;
ora.ore = ora.minuti = 0;
}
~Sms()
{
testo[0] = '\0';
persona[0] = '\0';
modo = 'N';
data.giorno = data.mese = data.anno = 0;
ora.ore = ora.minuti = 0;
}
int operator==(Sms &x)
{
if (modo == x.modo)
if (data.giorno == x.data.giorno)
if (data.mese == x.data.mese)
if (data.anno == x.data.anno)
if (ora.ore == x.ora.ore)
if (ora.minuti == x.ora.minuti)
if (strcmp(testo,x.testo) == 0)
if (strcmp(persona,x.persona) == 0)
return 1;
return 0;
}
int operator>=(Sms &x)
{
if (data.anno > x.data.anno)
return 1;
if (data.anno == x.data.anno)
{
if (data.mese > x.data.mese)
return 1;
if (data.mese == x.data.mese)
{
if (data.giorno > x.data.giorno)
return 1;
if (data.giorno == x.data.giorno)
{
if (ora.ore > x.ora.ore)
return 1;
if (ora.ore == x.ora.ore)
{
if (ora.minuti >= x.ora.minuti)
return 1;
}
}
}
}
return 0;
}
void inserisci(void)
{
do {
printf("\nInviato o Ricevuto? ");
scanf("%c%*c",&modo);
} while (modo != 'I' && modo != 'R');
printf("\n%s chi? ",(modo == 'I') ? "A" : "Da");
scanf("%[^\n]%*c",persona);
printf("\nInserisci il testo:\n");
scanf("%[^\n]%*c",testo);
printf("\nAnno: ");
scanf("%d%*c",&data.anno);
printf("\nMese: ");
scanf("%d%*c",&data.mese);
printf("\nGiorno: ");
scanf("%d%*c",&data.giorno);
printf("\nOra: ");
scanf("%d%*c",&ora.ore);
printf("\nMinuti: ");
scanf("%d%*c",&ora.minuti);
}
void visualizza(void)
{
printf("\n%s : %s",(modo == 'I') ? "Inviato a" : "Ricevuto da",persona);
printf("\t\t%d/%d/%d",data.giorno,data.mese,data.anno);
printf("\tOre %d:%d\n\n",ora.ore,ora.minuti);
printf("%s\n",testo);
}
int confronta(char *p)
{
return (!(strcmp(p,persona)));
}
};
FILE principale
codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "sms.h"
#include "lis.h"
char file[100];
int main()
{
Lista_ordinata lista_sms;
Sms sms;
char pers[21];
int scelta,i;
FILE *fp = lista_sms.apri();
if (fp == NULL)
return 0;
do {
system("cls");
printf("\nGESTIONE SMS\n\n");
printf("1) Inserisci sms\n");
printf("2) Ricerca\n");
printf("3) Visualizza lista\n");
printf("\n0)Fine\n");
printf("\t\tScelta: ");
scanf("%d%*c",&scelta);
switch (scelta)
{
case 1:
sms.inserisci();
lista_sms.inserisci(sms);
fwrite(&sms,1,sizeof(Sms),fp);
fflush(fp);
break;
case 2:
printf("Mittente/Destinatario: ");
scanf("%[^\n]%*c",pers);
lista_sms.cerca(pers);
break;
case 3:
for (i = 1; i <= lista_sms.lunghezza(); i++)
{
system("cls");
lista_sms.mostra(i);
putchar('\n');
system("PAUSE");
}
break;
}
} while (scelta);
fclose(fp);
}
uso il compilatore mingw