Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* https://app.box.com/s/87dfqn37lc0y0jen7y4mwwcjszfvtuu9 */
- /* link di supporto scrittura su file: https://www.youtube.com/watch?v=2i9dPVtHJXc */
- /* link di supporto time.h: http://it.wikibooks.org/wiki/C/Appendice/Librerie_standard/time.h */
- #include <stdio.h>
- #include <stdlib.h>
- #include <malloc.h>
- #include <time.h>
- #include <string.h>
- #define N 20
- /*strutture*/
- struct card{
- char nome[N+1];
- char ID[8+1];
- char reg[8+1];
- int punti;
- struct log *inf;
- struct card *pun;
- };
- struct log{
- char data[8+1];
- int punti;
- struct log *pun;
- };
- /*funzioni*/
- int menu(struct card *);
- void addCard(struct card *);
- void findCard(struct card *);
- void downCard(struct card *);
- void printBest(struct card *, struct card **, int *);
- void upPunti(struct card *, int);
- void menu2(struct card *);
- void dwPunti(struct card *);
- struct card *ciclo(struct card *);
- struct card *findCard2(struct card *, char *);
- void logcat(struct card *);
- /*main*/
- int main()
- {
- struct card *px=NULL, *radice=NULL;
- int risp, x=0;
- radice=malloc(sizeof(struct card));
- radice->punti=0;
- radice->inf=NULL;
- radice->pun=NULL;
- printf("\nInserire nome autolavaggio ");
- scanf("%[^\n]", radice->nome);
- getchar();
- while(risp!=0){
- risp=menu(radice);
- switch(risp){
- case 0:{ break;}
- case 1:{ addCard(radice); break;}
- case 2:{ findCard(radice); break;}
- case 3:{ findCard(radice); break;}
- case 4:{ printBest(radice, &px, &x); break;}
- default:{ printf("\n\nOpzione non ammessa!"); getchar();}
- }}
- return 0;
- }
- int menu(struct card *p)
- {
- int opz;
- system("cls");
- printf("\n Menu' Autolavaggio %s\n", p->nome);
- printf("\n1. Registra cliente\n\n2. Ricerca cliente\n\n3. Scarica punti\n\n4. Miglior cliente\n\n0. EXIT\n\n");
- scanf("%d", &opz);
- getchar();
- return opz;
- }
- void addCard(struct card *p)
- {
- system("cls");
- time_t t=time(NULL);
- struct tm *tp=localtime(&t);
- p=ciclo(p);
- p->pun=malloc(sizeof(struct card));
- p=p->pun;
- printf("\nInserire Nome e Cognome cliente separati da uno spazio\t");
- scanf("%[^\n]", p->nome); p->nome[N]='\0'; getchar();
- strftime(p->ID, 9, "%m%d%H%M", tp);
- printf("\nID cliente: %s\t", p->ID);
- strftime(p->reg, 9, "%Y%m%d", tp);
- p->punti=0; p->pun=NULL; p->inf=NULL;
- printf("\n\n\nRicorda d aspettare almeno 1 minuto\nprima di registrare un nuovo cliente!!");
- getchar();
- }
- struct card *ciclo(struct card *p)
- {
- if(p!=NULL){ if(p->pun!=NULL) p=ciclo(p->pun); return p;}
- }
- void findCard(struct card *p)
- {
- struct card *paus=NULL;
- char find[8+1];
- int esci=-1;
- system("cls");
- while(paus==NULL && esci!=0){
- printf("\n\t\t\t ,........,");
- printf("\nInserire ID carta (8 cifre): ");
- scanf("%s", find); find[8]='\0'; getchar();
- if(strcmp(find, "00000000")==0) esci=0;
- else{ paus=findCard2(p->pun, find);
- if(paus==NULL) printf("\nID carta non presente, riprovare\n");
- else menu2(paus);}}
- }
- struct card *findCard2(struct card *p, char *val)
- {
- if(p!=NULL){
- if(strcmp(p->ID, val)!=0){ if(p->pun!=NULL) p=findCard2(p->pun, val); else return NULL;}
- return p;}
- else return NULL;
- }
- void menu2(struct card *p)
- {
- int opz=-1;
- system("cls");
- while(opz<0 || opz>5){
- printf("\nCliente: %s", p->nome);
- printf("\n\n1. Lavaggio auto solo interno - punti 1");
- printf("\n\n2. Lavaggio auto solo esterno - punti 2");
- printf("\n\n3. Lavaggio auto interno ed esterno - punti 3");
- printf("\n\n4. Scarica punti\n\n5. !log!\n\n0. EXIT\n\n");
- scanf("%d", &opz); getchar();}
- switch(opz){
- case 1:{ upPunti(p, 1); break;}
- case 2:{ upPunti(p, 2); break;}
- case 3:{ upPunti(p, 3); break;}
- case 4:{ dwPunti(p); break;}
- case 5:{ logcat(p); break;}}
- printf("\n\nOperazione completata con successo ");
- getchar();
- }
- void upPunti(struct card *p, int pnt)
- {
- struct log *px, *paus=p->inf;
- printf("\nSaldo carta: %d", p->punti);
- time_t t=time(NULL);
- struct tm *tp=localtime(&t);
- (p->punti)+=pnt;
- p->inf=malloc(sizeof(struct log));
- px=p->inf;
- strftime(px->data, 9, "%Y%m%d", tp);
- px->punti=pnt;
- px->pun=paus;
- printf("\nNuovo saldo carta: %d", p->punti);
- }
- void dwPunti(struct card *p)
- {
- struct log *px, *paus=p->inf;
- int pnt=-1;
- system("cls");
- printf("\nSaldo carta: %d", p->punti);
- time_t t=time(NULL);
- while(pnt<0 || pnt>(p->punti)){
- printf("\nInserire punti ritiro premio, 0 per annullare ");
- scanf("%d", &pnt); getchar();}
- if(pnt!=0){
- struct tm *tp=localtime(&t);
- (p->punti)-=pnt;
- p->inf=malloc(sizeof(struct log));
- px=p->inf;
- strftime(px->data, 9, "%Y%m%d", tp);
- px->punti=-pnt;
- px->pun=paus;}
- printf("\nNuovo saldo carta: %d", p->punti);
- }
- void printBest(struct card *p, struct card **paus, int *n)
- {
- if(p!=NULL){
- if((*n)<(p->punti)){ *n=p->punti; *paus=p;}
- printBest(p->pun, paus, n);}
- else if(*paus!=NULL){
- system("cls");
- printf("\n\n\n Il cliente con un piu' punti e': ");
- printf("%s, con un totale di: %d punti.\t", (*paus)->nome, (*paus)->punti);
- getchar();}
- else{ printf("\n\n\tNessuna cliente ancora registrato!"); getchar();}
- }
- void logcat(struct card *p)
- {
- struct log *pl=p->inf;
- int i;
- FILE *scrivi;
- system("cls");
- scrivi=fopen("C:\\Users\\user\\Desktop\\logCliente.txt", "w");
- if(scrivi==NULL) printf("\nProblemi nella creazione file!");
- else{
- fprintf(scrivi, "Cliente: %s\tID: %s\n", p->nome, p->ID);
- fprintf(scrivi, "Log eventi dal più recente\n\n");
- while(pl!=NULL){
- fprintf(scrivi, "\nData: ");
- for(i=0; i<8; i++){ if(i==4 || i==6) fprintf(scrivi, "-"); fprintf(scrivi, "%c", pl->data[i]);}
- fprintf(scrivi, "\nOperazione punti: %d\n\n\n", pl->punti); pl=pl->pun;}
- fclose(scrivi); printf("\nCreazione file avvenuta con successo");}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement