Implementazione particolare funzione

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
AndreITPS
Prode Principiante
Messaggi: 8
Iscrizione: domenica 15 maggio 2016, 13:27
Distribuzione: Ubuntu 15.10 x86_64
Sesso: Maschile

Implementazione particolare funzione

Messaggio da AndreITPS »

Salve a tutti, sono nuovo in questo forum, sto creando questa discussione perchè ho urgente bisogno di aiuto per quanto riguarda l'implementazione di una funzione in C. Sto sviluppando un progetto per un'esame universitario, che ha questa traccia:
Gestione di un centro sportivo.
Archivi da creare:
· Corsi
· soci
· Iscrizioni e relativi pagamenti
· Ingressi al centro (orario di entrata ed uscita del socio)
Al momento dell’ingresso al centro, occorre verificare se il socio è in regola coi pagamenti.
Ecco il mio problema. Ho creato tutta la libreria con i vari menu e le varie funzioni per interagire con lo stesso. Ma la parte che non so assolutamente come implementare è questa "Al momento dell’ingresso al centro, occorre verificare se il socio è in regola coi pagamenti.". Non so ne dove inserirla ne come implementarla. Qualcuno di voi potrebbe dirmi come fare?

Vi ringrazio.

P.S: Tra poco posto il codice della libreria statica di questo progetto
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Implementazione particolare funzione

Messaggio da Zoff »

Le specifiche lavorano spazio all'interpretazione.
Direi che hai due macro casi:
1. Deleghi il controllo alla funzione che registra l'ingresso.
PRO: il chiamante non deve farsi carico dei controlli
CONTRO: la libreria deve conoscere le altre librerie necessarie per eseguire i controlli vai quindi a creare una dipendenza logica
2. Ti prendi carico del controllo nel main dell'applicazione.
PRO: la libreria che gestisce gli ingressi rimane leggera e disaccoppiata dalle altre
CONTRO: il chiamante si deve fare carico del controllo
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
AndreITPS
Prode Principiante
Messaggi: 8
Iscrizione: domenica 15 maggio 2016, 13:27
Distribuzione: Ubuntu 15.10 x86_64
Sesso: Maschile

Re: Implementazione particolare funzione

Messaggio da AndreITPS »

La mia esigenza è creare una funzione che verifica che la data in cui avviene l'ingresso al centro, sia minore della data di scadenza della quota (che dovrebbe essere, nel caso del mensile, la stessa data con il mese incrementato di 1)......ma non so ASSOLUTAMENTE farla! Qualcuno di voi, gentilmente, potrebbe fare lo pseudocodice di questa funzione?

Aiutatemi più che potete perfavore!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Implementazione particolare funzione

Messaggio da Zoff »

Ma il modello dei dati quale è?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
AndreITPS
Prode Principiante
Messaggi: 8
Iscrizione: domenica 15 maggio 2016, 13:27
Distribuzione: Ubuntu 15.10 x86_64
Sesso: Maschile

Re: Implementazione particolare funzione

Messaggio da AndreITPS »

Cosa intendi per modello dei dati??
Comunque posto tutto il codice:

Codice: Seleziona tutto

/*
 * centro.h
 *
 *  Created on: 05 mag 2016
 *      Author: andrea
 */

#ifndef CENTRO_H_
#define CENTRO_H_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <time.h>
#include <ctype.h>
#define max 20

struct Corso
{
	int id[20];
	char nome_corso[20];
	char nome_responsabile[20];
	char cognome_responsabile[20];
};
typedef struct Corso course;
course tempcourse[max];
course *c;

struct Soci
{
	int codicesocio[20];
	char nome_socio[20];
	char cognome_socio[20];
	int eta[20];
};
typedef struct Soci member;
member tempmember[max];
member *m;

struct Iscrizioni
{
	int numero_tessera[20];
	char datadinascita[20];
	double quota[20];
	char data_pagamento[20];
};
typedef struct Iscrizioni registration;
registration tempreg[max];
registration *r;

struct Ingressi
{
	int id[20];
	char orario_ingresso[20];
	char orario_uscita[20];
};
typedef struct Ingressi entrance;
entrance tempent[max];
entrance *e;

/*-------- FUNZIONI GESTIONE CORSI --------*/
void costruiretab_corso(void);
void visualizzatab_corso(void);
void aggiungi_corso(void);
void menu_aggiornacorso(void);
void aggiorna_id(int);
void aggiorna_nomecorso(int);
void aggiorna_nomeresponsabile(int);
void aggiorna_cognomeresponsabile(int);
void ricerca_corso(void);
void elimina_corso(void);

/*-------- FUNZIONI GESTIONE SOCI --------*/
void costruiretab_socio(void);
void visualizzatab_socio(void);
void aggiungi_socio(void);
void menu_aggiornasocio(void);
void aggiorna_codice(int);
void aggiorna_nomesocio(int);
void aggiorna_cognomesocio(int);
void aggiorna_eta(int);
void ricerca_socio(void);
void elimina_socio(void);

/*-------- FUNZIONI GESTIONE ISCRIZIONI --------*/
void creatabella_iscrizioni(void);
void visualizzatab_iscrizioni(void);
void aggiungi_iscrizione(void);
void menu_aggiornaiscrizione(void);
void aggiorna_numtessera(int);
void aggiorna_datadinascita(int);
void aggiorna_quota(int);
void aggiorna_datapagamento(int);
void ricerca_iscrizione(void);
void elimina_iscrizione(void);

/*-------- FUNZIONI GESTIONE INGRESSI --------*/
void creatabella_ingressi(void);
void visualizzatab_ingressi(void);
void aggiungi_ingresso(void);
void menu_aggiornaingresso(void);
void aggiorna_identificativo(int);
void aggiorna_orarioingresso(int);
void aggiorna_orariouscita(int);
void ricerca_ingresso(void);
void elimina_ingresso(void);
bool pagamentiOK(void);

/*-------- SOTTOMENU --------*/
void menu_corso(void);
void menu_soci(void);
void menu_iscrizioni(void);
void menu_ingressi(void);

/*-------- MENU PRINCIPALE --------*/
void menu(void);

#endif /* CENTRO_H_ */
AndreITPS
Prode Principiante
Messaggi: 8
Iscrizione: domenica 15 maggio 2016, 13:27
Distribuzione: Ubuntu 15.10 x86_64
Sesso: Maschile

Re: Implementazione particolare funzione

Messaggio da AndreITPS »

Codice: Seleziona tutto

/*
 * centro.c
 *
 *  Created on: 05 mag 2016
 *      Author: andrea
 */

#include "centro.h"

/*------- VARIABILI GLOBALI -------*/
int num=0;
FILE *out;

/*------- MENU PRINCIPALE -------*/
void menu()
{
	int scelta;
	char torna;
	do{
		system("clear");
		printf("\n********BENVENUTO NEL PROGRAMMA DI GESTIONE DEL CENTRO SPORTIVO********\n ");

		printf(" [1] Menu Corsi \n");
		printf(" [2] Menu Soci \n");
		printf(" [3] Menu Iscrizioni \n");
		printf(" [4] Menu Ingressi \n");

		printf("\nEffettua la tua scelta: ");
		scanf("%d", &scelta);

		switch(scelta)
		{
		case 1: system("clear");
		        menu_corso();
		        break;
		case 2: system("clear");
		        menu_soci();
		        break;
		case 3: system("clear");
		        menu_iscrizioni();
		        break;
		case 4: system("clear");
		        menu_ingressi();
		        break;
	   default: printf("Scelta non valida \n");
	            break;
		}
		printf("Vuoi uscire?\n\n");
		printf("[y] Si\n");
		printf("[n] No\n");
		printf("Cosa vuoi fare: ");
		scanf("%s", &torna);
	}
	while (torna != 'n');
}

/*-------- FUNZIONE MENU CORSO --------*/
void menu_corso()
{
	int scelta;
	char torna;
	do
	{
		system("clear");
	    printf(" ");
	    printf("\n\t\t*****BENVENUTO NELL'AREA DEDICATA AI CORSI*****");
	    printf("\n");
	    printf("\n[1]-->Costruire la tabella ");
	    printf(" ");
	    printf("\n[2]-->Visualizzare la tabella");
	    printf(" ");
	    printf("\n[3]-->Inserire nuovo corso");
	    printf(" ");
	    printf("\n[4]-->Cancellare un corso");
	    printf(" ");
	    printf("\n[5]-->Modificare un corso");
	    printf(" ");
	    printf("\n[6]-->Ricercare un corso");
	    printf(" ");
	    printf("\nImmettere un opzione-->");
	    scanf("%d", &scelta);

	switch(scelta)
	{
	case 1: costruiretab_corso();
	        break;
	case 2: visualizzatab_corso();
	        break;
	case 3: aggiungi_corso();
	        break;
	case 4: elimina_corso();
	        break;
	case 5: menu_aggiornacorso();
	        break;
	case 6: ricerca_corso();
	        break;
   default: menu();
            break;
	}
  }while (torna != 'n');
}

/*-------- FUNZIONI GESTIONE CORSI --------*/
void costruiretab_corso(void)
{
	int i=0;
	system("clear");

	printf("Costruzione tabella corsi ");
	printf("\n");

	printf("\nNumero massimo ----> 20");
	printf("\n");

	printf("\nQuante voci vuoi inserire----->");
	scanf("%d", &num);

	system("clear");

	out = fopen("corsi.txt", "wb");
	printf("\nInserire i seguenti dati");
	for(i=0; i<=num-1;i++)
	{
		printf("\nID ");
		scanf("%d", &c[i].id);
		fprintf(out, "%d", c[i].id);
		printf("\nNome Corso ");
		scanf("%s", &c[i].nome_corso);
		fprintf(out, "%s", c[i].nome_corso);
		printf("\nNome del Responsabile ");
		scanf("%s", &c[i].nome_responsabile);
		fprintf(out, "%s", c[i].nome_responsabile);
		printf("\nCognome del Responsabile");
		scanf("%s", &c[i].cognome_responsabile);
		fprintf(out, "%s", c[i].cognome_responsabile);
	}
	fclose(out);
}

void visualizzatab_corso()
{
	int i=0;
	system("clear");
	printf(" ********Visualizza tabella dei corsi********");
	printf("\n");

	out=fopen("corsi.txt", "rb");
	printf(" ID\tNome Corso\tNome Responsabile\t Cognome Responsabile");
	for(i=0;i<=num-1;i++)
	{
		fscanf(out, "%d", c[i].id);
		printf("\n%d", c[i].id);
		fscanf(out, "%s", c[i].nome_corso);
		printf("\n%s", c[i].nome_corso);
		fscanf(out, "%s", c[i].nome_responsabile);
		printf("\n%s", c[i].nome_responsabile);
		fscanf(out, "%s", c[i].cognome_responsabile);
		printf("\n%s", c[i].cognome_responsabile);
		printf("\n");
	}
	printf("\nTornare al menu principale");
	getchar();
}

void aggiungi_corso()
{
	int i=num;
	system("clear");
	num+=1;

	printf("\n**********Inserimento di un nuovo corso**********");
	printf("\n");

	printf("\n\nInserire le seguenti informazioni");
	out = fopen("corsi.txt", "wb");

	printf("\n\nID :- ");
	fflush(stdin);
	scanf("%d", c[i].id);
	fprintf(out, "%d", c[i].id);

	printf("\nNome Corso :- ");
	scanf("%s", c[i].nome_corso);
	fprintf(out, "%s", c[i].nome_corso);

	printf("\nNome del Responsabile :- ");
	scanf("%s", c[i].nome_responsabile);
	fprintf(out, "%s", c[i].nome_responsabile);

	printf("\nCognome del Responsabile :- ");
	scanf("%s", c[i].cognome_responsabile);
	fprintf(out, "%s", c[i].cognome_responsabile);
	printf("\n\n");

	printf("\nDati inseriti. Ritorno al menu principale");
}

void elimina_corso()
{
	int code;
	int check;
	int i;

	system("clear");

	printf("\n**********Eliminare il corso**********");
	printf("\n");

	printf("\nInserire l'ID del corso da eliminare :- ");
	scanf("%d", &code);
	for(i=0;i<=num-1;i++)
	{
		if(c[i].id==code)
		{
			check=i;
		}
	}
	for(i=0;i<=num;i++)
	{
		if(i==check)
		{
			printf("Corso eliminato....");
			continue;
		} else {
			if(i>check)
			{
				tempcourse[i-1]=c[i];
				printf("Corso eliminato....");
			} else {
				tempcourse[i]=c[i];
			}
		}
	}
	num--;
	for(i=0;i<=num-1;i++)
	{
		c[i]=tempcourse[i];
	}
}

void aggiorna_corso()
{
	int i;
	int code;
	char option;

	system("clear");

	printf("\n**********Modifica dati CORSO********** ");
	printf("\n\n");

	printf("\nInserire un codice per modificare un dato dei corsi (1=ID, 2=Nome Corso, 3=Nome Responsabile, 4=Cognome Responsabile)----> ");
	scanf("%d", &code);
	menu_aggiornacorso();

	for(i=0;i<=num-1;i++)
	{
		if(c[i].id==code)
		{
			while((option=getchar())!='q')
			{
				switch(option)
				{
				case '1': aggiorna_id(i);
				          break;
				case '2': aggiorna_nomecorso(i);
				           break;
				case '3': aggiorna_nomeresponsabile(i);
				           break;
				case '4': aggiorna_cognomeresponsabile(i);
				           break;
				}
				printf("Dato Modificato....");
				menu_aggiornacorso();
			}
		}
	}
}

void menu_aggiornacorso()
{
	system("clear");
	printf("Quale dato del corso vuoi modificare?: ");
	printf("\n [i]--------->ID");
	printf("\n [nc]--------->Nome corso");
	printf("\n [nr]--------->Nome responsabile");
	printf("\n [cr]--------->Cognome responsabile");
	printf("\n [q]--------->ESCI");
	printf("\n Che opzione scegli ---->>> ");
}

void aggiorna_id(int i)
{
	printf("\nInserire un nuovo ID-----> ");
	fflush(stdin);
	scanf("%d", c[i].id);
}

void aggiorna_nomecorso(int i)
{
	printf("\nNuovo nome per il corso-----> ");
	fflush(stdin);
	scanf("%s", c[i].nome_corso);
}

void aggiorna_nomeresponsabile(int i)
{
	printf("\nNuovo nome per il responsabile-----> ");
	fflush(stdin);
	scanf("%s", c[i].nome_responsabile);
}

void aggiorna_cognomeresponsabile(int i)
{
	printf("\nNuovo cognome per il responsabile-----> ");
	fflush(stdin);
	scanf("%s", c[i].cognome_responsabile);
}

void ricerca_corso()
{
	int code, i;
	system("clear");

	printf("\n\t\tBenvenuto nella sezione di ricerca");

	printf("\n\n");
	printf("\nLa ricerca può essere effettuata SOLO tramite l'ID");
	printf("\nInserire l'ID del corso");
	scanf("%d", &code);

	for(i=0;i<=num-1;i++)
	{
		if(c[i].id==code)
		{
			printf("\n ID NOME CORSO NOME RESPONSABILE COGNOME RESPONSABILE");
			printf("\n ------------------------------------------------------");
			printf("\n ID :- %d", c[i].id);
			printf("\n Nome Corso :- %s", c[i].nome_corso);
			printf("\n Nome Responsabile :- %s", c[i].nome_responsabile);
			printf("\n Cognome Responsabile :- %s", c[i].cognome_responsabile);
			printf("\n");
		}
	}
	printf("\nTornando al menu principale");
	getchar();
}

/*-------- FUNZIONE MENU SOCIO --------*/
void menu_soci()
{
	system("clear");

	printf(" ");
	printf("\n\t\t*****BENVENUTO NELL'AREA DEDICATA AI SOCI*****");
	printf("\n");
	printf(" ");
	printf("\n[1]-->Costruire la tabella");
	printf(" ");
	printf("\n[2]-->Visualizza la tabella");
	printf(" ");
	printf("\n[3]-->Inserire un nuovo socio");
	printf(" ");
	printf("\n[4]-->Cancellare un socio");
	printf(" ");
	printf("\n[5]-->Modificare un socio");
	printf(" ");
	printf("\n[6]-->Ricercare un socio");
	printf(" ");
	printf("\n[7]-->Tornare al menù principale");
	printf(" ");
	printf("\nImmettere un opzione-->");
}

/*-------- FUNZIONI GESTIONE SOCI --------*/
void costruiretab_socio()
{
	int i=0;
	system("clear");

	printf(" ********Costruzione della tabella********");
	printf("\n");

	printf("\nNumero massimo di dati -----> 20");
	printf("\n");

	printf("\nQuanti se ne desiderano ----->");
	scanf("%d", &num);

	system("clear");

	out=fopen("soci.txt", "wb");

	printf("\nInserire i seguenti dati");
	for(i=0;i<num-1;i++)
	{
		printf("\nNome socio ");
		fflush(stdin);
		scanf("%s", m[i].nome_socio);
		fprintf(out, "%s", m[i].nome_socio);

		printf("\nCognome socio ");
		fflush(stdin);
		scanf("%s", m[i].cognome_socio);
		fprintf(out, "%s", m[i].cognome_socio);

		printf("\nEtà: ");
		fflush(stdin);
		scanf("%d", m[i].eta);
		fprintf(out, "%d", m[i].eta);
	}
	fclose(out);
	printf("\nTornando al menu principale");
}

void visualizzatab_socio()
{
	int i=0;
	system("clear");

	printf(" ********Visualizza la tabella********");
	printf("\n");

	out=fopen("soci.txt", "rb");
	printf(" Nome\tCognome\tSocio");
	for(i=0;i<=num-1;i++)
	{
		fscanf(out, "%s", m[i].nome_socio);
		printf("\n%s", m[i].nome_socio);

		fscanf(out, "%s", m[i].cognome_socio);
		printf("\n%s", m[i].cognome_socio);

		fscanf(out, "%d", m[i].eta);
		printf("\n%d", m[i].eta);
		printf("\n");
	}
	printf("\nTornando al menu principale");
	getchar();
}

void aggiungi_socio()
{
	int i=num;
	system("clear");
	num+=1;

	printf("\n**********Inserimento nuovo socio**********");
	printf("\n");

	printf("\nInserire questi dati");
	out=fopen("soci.txt", "wb");

	printf("\n\nCodice Socio :- ");
	fflush(stdin);
	scanf("%d", m[i].codicesocio);

	printf("\n\nNome :- ");
	fflush(stdin);
	scanf("%s", m[i].nome_socio);
	fprintf(out, "%s", m[i].nome_socio);

	printf("\n\nCognome :- ");
	fflush(stdin);
	scanf("%s", m[i].cognome_socio);
	fprintf(out, "%s", m[i].cognome_socio);

	printf("\n\nEtà :- ");
	fflush(stdin);
	scanf("%d", m[i].eta);
	fprintf(out, "%d", m[i].eta);
	printf("\n\n");

	printf("\nDati inseriti correttamente. Ritorno al menu principale");
}

void elimina_socio()
{
	int code=0;
	int check;
	int i=0;

	system("clear");

	printf("\n*************Eliminazione socio*************");
	printf("\n");

	printf("\n\nInserire il codice del socio :- ");
	scanf("%d", m[i].codicesocio);

	for(i=0;i<=num-1;i++)
	{
		if(m[i].codicesocio==code)
		{
			check=i;
		}
		for(i=0;i<=num-1;i++)
		{
			if(i==check)
			{
				printf("Socio eliminato!");
				continue;
			} else {
				if(i>check)
				{
					tempmember[i-1]=m[i];
					printf("Socio eliminato!");
				} else {
					tempmember[i]=m[i];
				}
			}
		}
		num--;
		for(i=0;i<=num-1;i++)
		{
			m[i]=tempmember[i];
		}
	}
}

void aggiorna_socio()
{
	int i;
	int code;
	char option;

	printf("\n **********Area di modifica dei dati socio********** ");
	printf("\n\n");

	printf("\nInserire il codice del socio da modificare----> ");
	scanf("%d", &code);
	menu_aggiornasocio();

	for(i=0;i<num-1;i++)
	{
		if(m[i].codicesocio==code)
		{
			while((option=getchar())!='q')
			{
				switch(option)
				{
				case '1': aggiorna_nome(i);
				          break;
				case '2': aggiorna_cognome(i);
				          break;
				case '3': aggiorna_eta(i);
				          break;
				}
				printf("Dato modificato...");
				menu_aggiornasocio();
			}
		}
	}
}

void menu_aggiornasocio()
{
	system("clear");
	printf("\nCosa si desidera modificare");
	printf("\n c-------->Codice");
	printf("\n n-------->Nome");
	printf("\n s-------->Cognome");
	printf("\n e-------->Età");
	printf("\n q-------->Esci");
	printf("\n Scelta---->>> ");
}

void aggiorna_codice(int i)
{
	printf("\nInserire un nuovo codice-----> ");
	scanf("%d", m[i].codicesocio);
}

void aggiorna_nome(int i)
{
	printf("\nInserire il nuovo nome-----> ");
	fflush(stdin);
	scanf("%s", m[i].nome_socio);
}

void aggiorna_cognome(int i)
{
	printf("\nInserire il nuovo cognome-----> ");
	fflush(stdin);
	scanf("%s", m[i].cognome_socio);
}

void aggiorna_eta(int i)
{
	printf("\nInserire la nuova età");
	scanf("%d", m[i].eta);
}

void ricerca_socio()
{
	int codice=0;
	int i=0;
	system("clear");

	printf("\n\t\tBenvenuto nell'area di ricerca del socio");
	printf("\n\n");

	printf("\n\nLa ricerca può essere fatta solo tramite il codice del socio");

	printf("\nInserire il codice del socio");
	scanf("%d", m[i].codicesocio);

	for(i=0;i<=num-1;i++)
	{
		if(m[i].codicesocio==codice)
		{
			printf("\n Codice Nome Cognome Età");
			printf("\n ------------------------------");
			printf("\n Codice socio :- %d", m[i].codicesocio);
			printf("\n Nome :- %s", m[i].nome_socio);
			printf("\n Cognome :- %s", m[i].cognome_socio);
			printf("\n Età :- %d", m[i].eta);
			printf("\n");
		}
	}
	printf("\nTorno al menu principale");
	getchar();
}

/*-------- FUNZIONE GESTIONE ISCRIZIONI/PAGAMENTI --------*/
void menu_iscrizioni()
{
	system("clear");

	printf(" ");
	printf("\n\t\t*****BENVENUTO NELL'AREA DEDICATA ALLE ISCRIZIONI/PAGAMENTI*****");
	printf("\n");
	printf(" ");
	printf("\n[1]-->Costruire la tabella");
	printf(" ");
	printf("\n[2]-->Visualizza la tabella");
	printf(" ");
	printf("\n[3]-->Inserire un nuovo socio");
	printf(" ");
	printf("\n[4]-->Cancellare un socio");
	printf(" ");
	printf("\n[5]-->Modificare un socio");
	printf(" ");
	printf("\n[6]-->Ricercare un socio");
	printf(" ");
	printf("\n[7]-->Tornare al menù principale");
	printf(" ");
	printf("\nImmettere un opzione-->");
}
void creatabella_iscrizioni()
{
	int i=0;
	system("clear");

	printf("Costruzione della tabella per le iscrizioni ");
	printf("\n");

	printf("\nMassimo numero di voci -----> 20");
	printf("\n");

	printf("\nQuante voci vuoi inserire ----->");
	scanf("%d", &num);

	system("clear");

	out=fopen("iscrizioni.txt", "wb");
	printf("\nInserire le seguenti informazioni");

	for(i=0;i<=num-1;i++)
	{
		printf(" \nNumero della tessera ");
		fflush(stdin);
		scanf("%d", r[i].numero_tessera);
		fprintf(out, "%d", r[i].numero_tessera);

		printf(" \nData di nascita formato(formato GG/MM/AAAA) ");
		fflush(stdin);
		scanf("%s", r[i].datadinascita);
		fprintf(out, "%s", r[i].datadinascita);

		printf(" \nQuota: ");
		fflush(stdin);
		scanf("%f", r[i].quota);
		fprintf(out, "%f", r[i].quota);

		printf(" \nData del pagamento: ");
		fflush(stdin);
		scanf("%s", r[i].data_pagamento);
		fprintf(out, "%s", r[i].data_pagamento);
	}
	fclose(out);
	printf("\nRitorno al menu principale");
}

void visualizzatab_iscrizioni()
{
	int i=0;
	system("clear");

	printf(" ********Elenca la tabella********");
	printf("\n");

	out=fopen("iscrizioni.txt", "rb");
	printf(" Num.Tessera\tData di nascita\tQuota\tData del pagamento ");
	for(i=0;i<=num-1;i++)
	{
		fscanf(out, "%d", r[i].numero_tessera);
		printf("\n%d", r[i].numero_tessera);
		fscanf(out, "%s", r[i].datadinascita);
		printf("\n%s", r[i].datadinascita);
		fscanf(out, "%f", r[i].quota);
		printf("\n%.f", r[i].quota);
		fscanf(out, "%s", r[i].data_pagamento);
		printf("\n%s", r[i].data_pagamento);
		printf("\n");
	}
	printf("\nTorno al menu principale");
	getchar();
}

void aggiungi_iscrizione()
{
	int i=num;
	system("clear");
	num+=1;

	printf("**********Inserimento di una nuova iscrizione*********");
	printf("\n");

	printf("\nInserire i seguenti dati");
	out=fopen("iscrizioni.txt", "wb");

	printf("\n\nNumero tessera :- ");
	fflush(stdin);
	scanf("%d", r[i].numero_tessera);
	fprintf(out, "%d", r[i].numero_tessera);

	printf("\nData di nascita(formato GG/MM/AAAA) :- ");
	fflush(stdin);
	scanf("%s", r[i].datadinascita);
	fprintf(out, "%s", r[i].datadinascita);

	printf("\nQuota :- ");
	fflush(stdin);
	scanf("%f", r[i].quota);
	fprintf(out, "%f", r[i].quota);

	printf("\nData pagamento :- ");
	fflush(stdin);
	scanf("%s", r[i].data_pagamento);
	fprintf(out, "%s", r[i].data_pagamento);
	printf("\n\n");
	printf("\nDati inseriti. Torno al menu principale");
}

void elimina_iscrizione()
{
	int codice, check, i;

	system("clear");

	printf("\n*************Eliminazione socio*************");
	printf("\n");

	printf("\n\nInserire il numero della tessera del socio da eliminare :- ");
	scanf("%d", &codice);

	for(i=0;i<=num-1;i++)
	{
		if(r[i].numero_tessera==codice)
		{
			check=i;
		}
	}
	for(i=0;i<=num-1;i++)
	{
		if(i==check)
		{
			printf("Socio eliminato....");
			continue;
		} else {
			if(i>check)
			{
				tempreg[i-1]=r[i];
				printf("Socio eliminato....");
			} else {
				tempreg[i]=r[i];
			}
		}
	}
	num--;
	for(i=0;i<=num-1;i++)
	{
		r[i]=tempreg[i];
	}
}

void aggiorna_iscrizione()
{
	int i=0;
	int codice=0;
	char option;

	system("clear");
	printf("\n *********Modifica iscrizione********** ");
	printf("\n\n");

	printf("\nInserire il numero tessera");
	scanf("%d", r[i].numero_tessera);
	menu_aggiornaiscrizione();

	for(i=0;i<=num-1;i++)
	{
		if(r[i].numero_tessera==codice)
		{
			while((option=getchar())!='q')
			{
				switch(option)
				{
				case 'nt': aggiorna_numtessera(i);
				           break;
				case 'dn': aggiorna_datadinascita(i);
				           break;
				case 'q':  aggiorna_quota(i);
				           break;
				case 'dp': aggiorna_datapagamento(i);
				           break;
				}
				printf("Dato modificato......");
				menu_aggiornaiscrizione();
			}
		}
	}
}

void menu_aggiornaiscrizione()
{
	system("clear");
	printf(" \nCosa vuoi modificare");
	printf("\n nt--------->Numero tessera");
	printf("\n dn--------->Data di nascita");
	printf("\n  q--------->Quota");
	printf("\n dp--------->Data del pagamento");
	printf("\n Scelta: ---->>> ");
}

void aggiorna_numtessera(int i)
{
	printf("\nInserire nuovo numero tessera-----> ");
	fflush(stdin);
	scanf("%d", r[i].numero_tessera);
}

void aggiorna_datadinascita(int i)
{
	printf("\nInserire la nuova data di nascita-----> ");
	scanf("%s", r[i].datadinascita);
}

void aggiorna_quota(int i)
{
	printf("\nInserire la nuova quota-----> ");
	scanf("%f", r[i].quota);
}

void aggiorna_datapagamento(int i)
{
	printf("\nInserire la nuova data del pagamento-----> ");
	scanf("%s", r[i].data_pagamento);
}

void ricerca_iscrizione()
{
	int codice=0;
	int i=0;
	system("clear");

	printf("\n\t\tBenvenuto nella sezione di ricerca iscrizione");
	printf("\n\n");

	printf("\n\nRicerca effettuabile solo attravero il numero di tessera");
	printf("Prego inserire il numero della tessera");
	scanf("%d", r[i].numero_tessera);

	for(i=0;i<=num-1;i++)
	{
		if(r[i].numero_tessera==codice)
		{
			printf("\n Num.tessera Data di nascita Quota Data pagamento");
			printf("\n --------------------------------------------------------");
			printf("\n Numero tessera :- %s", r[i].numero_tessera);
			printf("\n Data di nascita :- %s", r[i].datadinascita);
			printf("\n Quota :- %s", r[i].quota);
			printf("\n Data pagamento :- %s", r[i].data_pagamento);
			printf("\n");
		}
	}
	printf("Torno al menu principale");
	getchar();
}

/*-------- FUNZIONE GESTIONE INGRESSI --------*/
void menu_ingressi(void)
{
	system("clear");

	printf(" ");
	printf("\n\t\t*****BENVENUTO NELL'AREA DEDICATA AGLI INGRESSI*****");
	printf("\n");
	printf(" ");
	printf("\n[1]-->Costruire la tabella");
	printf(" ");
	printf("\n[2]-->Visualizza la tabella");
	printf(" ");
	printf("\n[3]-->Inserire un nuovo ingresso");
	printf(" ");
	printf("\n[4]-->Cancellare un ingresso");
	printf(" ");
	printf("\n[5]-->Modificare un ingresso");
	printf(" ");
	printf("\n[6]-->Ricercare un ingresso");
	printf(" ");
	printf("\n[7]-->Tornare al menù principale");
	printf(" ");
	printf("\nImmettere un opzione-->");
}

void creatabella_ingressi()
{
	int i=0;
	system("clear");

	printf("Costruzione della tabella per gli ingressi ");
	printf("\n");

	printf("\nMassimo numero di voci -----> 20");
	printf("\n");

	printf("\nQuante voci vuoi inserire ----->");
	scanf("%d", &num);

	system("clear");

	out=fopen("ingressi.txt", "wb");
	printf("\nInserire le seguenti informazioni");

	for(i=0;i<=num-1;i++)
	{
		printf("\nID ");
		fflush(stdin);
		scanf("%d", e[i].id);
		fprintf(out, "%d", e[i].id);

		printf(" \nOrario di ingresso ");
		fflush(stdin);
		scanf("%d", e[i].orario_ingresso);
		fprintf(out, "%d", e[i].orario_ingresso);

		printf(" \nOrario di uscita ");
		fflush(stdin);
		scanf("%s", e[i].orario_uscita);
		fprintf(out, "%s", e[i].orario_uscita);
	}
	fclose(out);
	printf("\nRitorno al menu principale");
}

void visualizzatab_ingressi()
{
	int i=0;
	system("clear");

	printf(" ********Elenca la tabella********");
	printf("\n");

	out=fopen("ingressi.txt", "rb");
	printf("  ");
	for(i=0;i<=num-1;i++)
	{
		fscanf(out, "%d", e[i].id);
		printf("\n%d", e[i].id);
		fscanf(out, "%d", e[i].orario_ingresso);
		printf("\n%d", e[i].orario_ingresso);
		fscanf(out, "%s", e[i].orario_uscita);
		printf("\n%s", e[i].orario_uscita);
		printf("\n");
	}
	printf("\nTorno al menu principale");
	getchar();
}

void aggiungi_ingresso()
{
	int i=num;
	system("clear");
	num+=1;

	printf("**********Inserimento di un nuovo ingresso*********");
	printf("\n");

	printf("\nInserire i seguenti dati");
	out=fopen("ingressi.txt", "wb");

	printf("\nID :- ");
	fflush(stdin);
	scanf("%d", e[i].id);
	fprintf(out, "%d", e[i].id);

	printf("\n\nOrario di ingresso :- ");
	fflush(stdin);
	scanf("%d", e[i].orario_ingresso);
	fprintf(out, "%d", e[i].orario_ingresso);

	printf("\nOrario di uscita :- ");
	fflush(stdin);
	scanf("%s", e[i].orario_uscita);
	fprintf(out, "%s", e[i].orario_uscita);

	printf("\n\n");
	printf("\nDati inseriti. Torno al menu principale");
}

void elimina_ingresso()
{
	int codice, check, i;

	system("clear");

	printf("\n*************Eliminazione ingresso*************");
	printf("\n");

	printf("\n\nInserire l'ID dell'ingresso da eliminare :- ");
	scanf("%d", &codice);

	for(i=0;i<=num-1;i++)
	{
		if(e[i].id==codice)
		{
			check=i;
		}
	}
	for(i=0;i<=num-1;i++)
	{
		if(i==check)
		{
			printf("Ingresso eliminato....");
			continue;
		} else {
			if(i>check)
			{
				tempent[i-1]=e[i];
				printf("Ingresso eliminato....");
			} else {
				tempent[i]=e[i];
			}
		}
	}
	num--;
	for(i=0;i<=num-1;i++)
	{
		e[i]=tempent[i];
	}
}

void aggiorna_ingresso()
{
	int i=0;
	int codice=0;
	char option;

	system("clear");
	printf("\n *********Modifica ingresso********** ");
	printf("\n\n");

	printf("\nInserire l'ID");
	scanf("%d", e[i].id);
	menu_aggiornaingresso();

	for(i=0;i<=num-1;i++)
	{
		if(e[i].id==codice)
		{
			while((option=getchar())!='q')
			{
				switch(option)
				{
				case 'i': aggiorna_id(i);
				           break;
				case 'oi': aggiorna_orarioingresso(i);
				           break;
				case 'ou':  aggiorna_orariouscita(i);
				           break;
				}
				printf("Dato modificato......");
				menu_aggiornaingresso();
			}
		}
	}
}

void menu_aggiornaingresso()
{
	system("clear");
	printf(" \nCosa vuoi modificare");
	printf("\n i--------->Numero tessera");
	printf("\n oi--------->Data di nascita");
	printf("\n ou--------->Quota");
	printf("\n Scelta: ---->>> ");
}

void aggiorna_identificativo(int i)
{
	printf("\nInserire nuovo ID-----> ");
	fflush(stdin);
	scanf("%d", e[i].id);
}

void aggiorna_orarioingresso(int i)
{
	printf("\nInserire il nuovo orario di ingresso-----> ");
	scanf("%s", e[i].orario_ingresso);
}

void aggiorna_orariouscita(int i)
{
	printf("\nInserire il nuovo orario di uscita-----> ");
	scanf("%f", e[i].orario_uscita);
}

void ricerca_ingresso()
{
	int codice=0;
	int i=0;
	system("clear");

	printf("\n\t\tBenvenuto nella sezione di ricerca ingresso");
	printf("\n\n");

	printf("\n\nRicerca effettuabile solo attravero il numero ID");
	printf("Prego inserire l'ID");
	scanf("%d", e[i].id);

	for(i=0;i<=num-1;i++)
	{
		if(e[i].id==codice)
		{
			printf("\n ID Orario ingresso Orario uscita");
			printf("\n --------------------------------------------------------");
			printf("\n ID :- %s", e[i].id);
			printf("\n Data di nascita :- %s", e[i].orario_ingresso);
			printf("\n Quota :- %s", e[i].orario_uscita);
			printf("\n");
		}
	}
	printf("Torno al menu principale");
	getchar();
}
AndreITPS
Prode Principiante
Messaggi: 8
Iscrizione: domenica 15 maggio 2016, 13:27
Distribuzione: Ubuntu 15.10 x86_64
Sesso: Maschile

Re: Implementazione particolare funzione

Messaggio da AndreITPS »

Qualcuno può aiutarmi??
AndreITPS
Prode Principiante
Messaggi: 8
Iscrizione: domenica 15 maggio 2016, 13:27
Distribuzione: Ubuntu 15.10 x86_64
Sesso: Maschile

Re: Implementazione particolare funzione

Messaggio da AndreITPS »

Ragazzi, ho un problema con questa funzione che deve eliminare una riga dal file corsi.dat in base all'id inserito. Esempio: se l'utente inserisce il numero id 1 deve eliminare la riga a cui appartiene l'id 1
Io ho implementato questa funzione ma mi elimina tutto...non solo la riga scelta

Codice: Seleziona tutto

#include <stdio.h>

int main(void)
{
	int num;
	int i,code,check;
	int id;
	int tempid;
	char nome_corso;
	char nome_responsabile;
	char cognome_responsabile;
	
	FILE *cfPtr;
	
	if( ( cfPtr = fopen("corsi.dat", "w") ) == NULL) {
		printf("Errore.\n");
	}
	else {
		printf("\nInserire l'ID del corso da eliminare :- ");
		scanf("%d", &id);
		for(i=0;i<=num-1;i++)
		{
			if(id==code)
			{
				check=i;
			}
		}
		for(i=0;i<=num;i++)
		{
			if(i==check)
			{
				printf("Corso eliminato!");
				continue;
			} else {
				if(i>check)
				{
				  tempid=id;
				  printf("Corso eliminato!");	
				} else {
					tempid=id;
				}
			}
		}
		num--;
		for(i=0;i<=num-1;i++)
		{
			id=tempid;
		}
		
		fclose(cfPtr);
    }
    return 0;
}
Qualcuno potrebbe correggermela o almeno dirmi dove si trova l'errore?

Grazie
fabio massacci
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 289
Iscrizione: mercoledì 11 giugno 2014, 14:12
Desktop: Lubuntu
Distribuzione: Ubuntu 20.04.3 LTS

Re: Implementazione particolare funzione

Messaggio da fabio massacci »

ciao
riguardo a come manipolare date e orari puoi studiare le funzioni e strutture di time.h :

http://www.cplusplus.com/reference/ctime/

invece nell'ultimo tuo post non c'è molto su cui darti indicazioni, hai estrapolato dal codice originale? perchè così non si capisce molto: per dirne qualcuna, la variabile num non è inizializzata, il file è aperto solo in scrittura, mentre se devi cercare l'id suppongo tu debba anche leggerlo, tra l'altro non c'è una singola istruzione che faccia qualcosa sul file, lo apri e lo chiudi, fine, quindi non capisco come pensi cancelli tutto se non fa niente.
Non ho guardato bene gli altri tuoi post per mancanza di tempo, ma mi pare che anche le altre funzioni elimina_qualcosa non facciano niente sul file, forse dovresti testare il funzioni una per volta, magari i dati neanche li inserisci bene, infatti vedo che non appendi mai nelle funzioni aggiungi_qualcosa, inoltre ricorda che per ogni open dovrebbe esserci alla fine un close
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Implementazione particolare funzione

Messaggio da crap0101 »

AndreITPS [url=http://forum.ubuntu-it.org/viewtopic.php?p=4884314#p4884314][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Ragazzi, ho un problema con questa funzione che deve eliminare una riga dal file corsi.dat in base all'id inserito. Esempio: se l'utente inserisce il numero id 1 deve eliminare la riga a cui appartiene l'id 1
Io ho implementato questa funzione ma mi elimina tutto...non solo la riga scelta

Codice: Seleziona tutto

#include <stdio.h>

int main(void)
{
	int num;
	int i,code,check;
	int id;
	int tempid;
	char nome_corso;
	char nome_responsabile;
	char cognome_responsabile;
	
	FILE *cfPtr;
	
	if( ( cfPtr = fopen("corsi.dat", "w") ) == NULL) {
		printf("Errore.\n");
	}
	else {
		printf("\nInserire l'ID del corso da eliminare :- ");
		scanf("%d", &id);
		for(i=0;i<=num-1;i++)
		{
			if(id==code)
			{
				check=i;
			}
		}
		for(i=0;i<=num;i++)
		{
			if(i==check)
			{
				printf("Corso eliminato!");
				continue;
			} else {
				if(i>check)
				{
				  tempid=id;
				  printf("Corso eliminato!");	
				} else {
					tempid=id;
				}
			}
		}
		num--;
		for(i=0;i<=num-1;i++)
		{
			id=tempid;
		}
		
		fclose(cfPtr);
    }
    return 0;
}
Qualcuno potrebbe correggermela o almeno dirmi dove si trova l'errore?

Grazie
più che correggere andrebbe riscritto tutto... fa tutt'altro rispetto a quanto dici che dovrebbe.
Oltre a quanto fatto notare da fabio massacci... cos'è `code`? Anche questa non viene inizializzata o valorizzata in alcun punto.
A parte aprire e chiudere il file non vi fai altre operazioni (tipo scrivere tutte le linee tranne quella/quelle da eliminare). Ovviamente aprendo il file in modalità `w`, questo viene *troncato* a zero, per cui perdi i dati che ci son sopra ancor prima di provare a leggerli.
I cicli mi sembrano operazioni inutilmente complicate e non ne colgo il senso: iteri su dei "numeri" di provenienza sconosciuta... che poi, la linea da eliminare è solo una? Allora tanto vale fermarsi appena la si trova, oppure devi usare qualche altro metodo per segnarti le posizioni, altrimenti registrerai solo l'ultima occorrenza.
A che serve `tempid` che assegni e non usi?
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
AndreITPS
Prode Principiante
Messaggi: 8
Iscrizione: domenica 15 maggio 2016, 13:27
Distribuzione: Ubuntu 15.10 x86_64
Sesso: Maschile

Re: Implementazione particolare funzione

Messaggio da AndreITPS »

Ragazzi, chiedo aiuto per questa "particolare funzione". La traccia del mio progetto è questa:
Gestione di un centro sportivo.
Archivi da creare:
· Corsi
· soci
· Iscrizioni e relativi pagamenti
· Ingressi al centro (orario di entrata ed uscita del socio)
Al momento dell’ingresso al centro, occorre verificare se il socio è in regola coi pagamenti.

Ho creato gli archivi richiesti dalla traccia, ma non so assolutamente fare quel pezzo della traccia che ho messo in grassetto e corsivo. Necessito di un aiuto per implementarla.
Allego il codice di riferimento:
INGRESSI

Codice: Seleziona tutto

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define max 20

struct Ingressi
{
	int numero;
	char nome[20];
	char cognome[20];
	char data_ingresso[20];
	char ora_ingresso[20];
	char ora_uscita[20];
	int cancellato;
};

struct Indice
{
	char chiave[30];
	int valore;
};

struct IndiceCodice
{
	int chiave;
	int valore;
};

int RicercaBin(char i[],int n,int searched,int *inIndice);
void OrdinaIndiceCodici(IndiceCodice in[],int n);
void crea_fileingressi();
void apri_fileingressi();
void inserisci_ingresso();
void visualizzaIngresso(Ingressi e);
void modifica_ingresso();
void elimina_ingresso();
int cerca_ingresso();
void leggi_fileingressi();

char ingressoAperto[20];
char indiceAperto[20];
char indiceCodiciAperto[20];

int main()
{
	int scelta;
	strcpy(ingressoAperto,"VUOTO");
	strcpy(indiceCodiciAperto,"VUOTO");
	
	do
	{
		system("CLS");
		
		printf("\t AREA INGRESSI AL CENTRO \t\n\n");
		
		printf("\t1- Crea nuovo file ingressi\n");
		printf("\t2- Apri file ingressi\n");
		printf("\t3- Inserisci ingresso\n");
		printf("\t4- Modifica ingresso\n");
		printf("\t5- Cancella ingresso\n");
		printf("\t6- Cerca ingresso\n");
		printf("\t7- Visualizza file ingressi\n");
		printf("\t8- Esci dal programma\n");
		
		printf("\nCosa vuoi fare? : ");
		scanf("%d", &scelta);
		
		int e1;
		switch(scelta)
		{
			case 1:
				crea_fileingressi();
				break;
			case 2:
				apri_fileingressi();
				break;
			case 3:
				inserisci_ingresso();
				break;
			case 4:
				modifica_ingresso();
				break;
			case 5:
				elimina_ingresso();
				break;
			case 6:
				
				e1 = cerca_ingresso();
				if(e1 == -1)
				{
					printf("\nIngresso non trovato\n");
				}
				break;
			case 7:
				leggi_fileingressi();
				break;
		}
		system("PAUSE");
	}while(scelta != 8);
	
	return 0;	
}

void OrdinaIndiceCodici(IndiceCodice in[],int n)
{
	IndiceCodice temp;
	int top;
	int scambio;
	int ultimoscambio;
	int i;
	top = 0;
	do
	{
		scambio = 0;
		for(i = n-1;i > top; i--)
		{
			if(in[i].chiave < in[i - 1].chiave)
			{
				temp = in[i];
				in[i] = in[i - 1];
				in[i - 1] = temp;
				
				scambio = 1;
				ultimoscambio = i;
			}
		}
		top = ultimoscambio;
	}while(scambio != 0);
}

int RicercaBin(char i[],int n,int cercato,int *inIndice)
{
	int left = 0;
	int mid;
	int right = n-1;
	FILE *indice;
	indice = fopen(i,"rb");
	do
	{
		mid = (left + right)/2;
		
		IndiceCodice x;
		fseek(indice,mid * sizeof(IndiceCodice),0);
		fread(&x,sizeof(IndiceCodice),1,indice);
		
		if(cercato == x.chiave)
		{
			//esci = 1;
			*inIndice = mid;
			fclose(indice);
			return x.valore; //restituisco la posizione nel file corso
		}
		else
		{
			if(cercato > x.chiave)
			{
				left = mid + 1;
			}
			else
			{
				right = mid - 1;
			}
		}
	
	}while(left <= right);
	*inIndice = -1;
	return -1;
}

void crea_fileingressi()
{
	system("CLS");
	FILE *f;
	char nomeFile[20];
	char nomeIndice[20];
	char nomeIndiceCod[20];
	
	printf("Inserire il nome del file: ");
	scanf("%s", &nomeFile);
	
	Ingressi e;
	
	strcpy(e.nome,"VUOTO");
	strcpy(e.cognome,"VUOTO");
	strcpy(e.data_ingresso,"VUOTO");
	strcpy(e.ora_ingresso,"VUOTO");
	strcpy(e.ora_uscita,"VUOTO");
	e.numero = -1;
	e.cancellato = 1;
	
	strcpy(nomeIndice,nomeFile);
	strcat(nomeIndice,".txt");
	strcpy(nomeIndiceCod,nomeIndice);
	strcat(nomeIndiceCod,"e");
	
	strcat(nomeFile,".date");
	
	f = fopen(nomeFile,"rb");
	
	if(f == NULL)
	{
		fclose(f);
		f = fopen(nomeFile,"wb");
		int i;
		for(i=0;i<max;i++)
		{
			fwrite(&e,sizeof(Ingressi),1,f);
		}
		fclose(f);
		printf("File scritto correttamente!\n");
		
		FILE *indice;
		Indice x;
		
		strcpy(x.chiave,"VUOTO");
		
		indice = fopen(nomeIndice,"wb");
		for(i=0;i<max;i++)
		{
			x.valore = i;
			fwrite(&x,sizeof(Indice),1,indice);
		}
		fclose(indice);
		printf("File indice del corso scritto correttamente\n");
		
		indice = fopen(nomeIndiceCod,"wb");
		IndiceCodice y;
		y.chiave = -1;
		y.valore = -1;
		for(i=0;i<max;i++)
		{
			fwrite(&y,sizeof(IndiceCodice),1,indice);
		}
		fclose(indice);
	}
	else
	{
		char s;
		printf("File già esistente. Vuoi sovrascriverlo? (s/n): ");
		scanf("%s", &s);
		if(s == 's' || s == 'S')
		{
			f = fopen(nomeFile,"wb");
			int i;
			for(i=0;i<max;i++)
			{
				fwrite(&e,sizeof(Ingressi),1,f);
			}
			fclose(f);
			printf("File scritto correttamente!\n");
			
			FILE *indice;
			Indice x;
			
			strcpy(x.chiave,"VUOTO");
			
			indice = fopen(nomeIndice,"wb");
			for(i=0;i<max;i++)
			{
				x.valore = i;
				fwrite(&x,sizeof(Indice),1,indice);
			}
			fclose(indice);
			printf("File indice del corso scritto correttamente\n");
			
			indice = fopen(nomeIndiceCod,"wb");
			IndiceCodice y;
			y.chiave = -1;
			y.valore = -1;
			for(i=0;i<max;i++)
			{
				fwrite(&y,sizeof(IndiceCodice),1,indice);
			}
			fclose(indice);
		}
	}
	printf("Operazione completata\n");
}

void apri_fileingressi()
{
	char nomeFile[20];
    char nomeIndice[20];
    char nomeIndiceCod[20];
    FILE *f;
    FILE *fI;
    do
    {
        /**/

        printf("Nome del file da aprire: ");
        scanf("%s", &nomeFile);

        strcpy(nomeIndice,nomeFile);
        strcat(nomeIndice,".txt");
        strcat(nomeFile,".date");
        strcpy(nomeIndiceCod,nomeIndice);
        strcat(nomeIndiceCod,"e");

        f = fopen(nomeFile,"r+b");
        if(f == NULL)
        {
            printf("Errore nell'apertura del file\n");
        }
        else
        {
            printf("File aperto correttamente!\n");
            strcpy(ingressoAperto,nomeFile);

            fI = fopen(nomeIndice,"r+b");
            if(fI == NULL)
            {
                printf("Errore nell'apertura dell'indice\n");
            }
            else
            {
                strcpy(indiceAperto,nomeIndice);
                printf("Indice Aperto correttamente!\n");
                fclose(fI);
            }


            fI = fopen(nomeIndiceCod,"r+b");
            if(fI == NULL)
            {
                printf("Errore nell'apertura dell'indice\n");
            }
            else
            {
                strcpy(indiceCodiciAperto,nomeIndiceCod);
                printf("Indice Aperto correttamente!\n");
                fclose(fI);
            }
        }
    }while(f == NULL || fI == NULL);
    fclose(f);
}

void inserisci_ingresso()
{
	Ingressi e;
	Ingressi eTemp;
	FILE *fIng; //file corso
	FILE *fInd; //file indice del corso
	
	printf("Numero: ");
	scanf("%d", &e.numero);
	printf("Nome: ");
	scanf("%s", &e.nome);
	printf("Cognome: ");
	scanf("%s", &e.cognome);
	printf("Data: ");
	scanf("%s", &e.data_ingresso);
	printf("Ora di ingresso(HH:MM): ");
	scanf("%s", &e.ora_ingresso);
	printf("Ora di uscita(HH:MM): ");
	scanf("%s", &e.ora_uscita);
	e.cancellato = 0;
	
	int cont = 0;
	
	fIng = fopen(ingressoAperto,"r+b");
	
	fread(&eTemp,sizeof(Ingressi),1,fIng);
	
	while(eTemp.cancellato != 1)
	{
		fread(&eTemp,sizeof(Ingressi),1,fIng);
		cont++;
	}
	
	int posInIngresso = cont;
	
	fseek(fIng,cont * sizeof(Ingressi),0);
	fwrite(&e,sizeof(Ingressi),1,fIng);
	fclose(fIng);
	
	Indice x;
	Indice xTemp;
	
	strcpy(x.chiave,e.cognome);
	x.valore = e.numero;
	
	fInd = fopen(indiceAperto,"r+b");
	
	cont = 0;
	fread(&xTemp,sizeof(Indice),1,fInd);
	
	while(strcmp(xTemp.chiave,"VUOTO") != 0)
	{
		fread(&xTemp,sizeof(Indice),1,fInd);
		cont++;
	}
	
	fseek(fInd,cont * sizeof(Indice),0);
	fwrite(&x,sizeof(Indice),1,fInd);
	fclose(fInd);
	
	IndiceCodice y;
	IndiceCodice yTemp;
	
	y.chiave = e.numero;
	y.valore = posInIngresso;
	
	fInd = fopen(indiceCodiciAperto,"r+b");
	
	cont = 0;
	fread(&yTemp,sizeof(IndiceCodice),1,fInd);
	
	while(yTemp.chiave != -1)
	{
		fread(&yTemp,sizeof(IndiceCodice),1,fInd);
		cont++;
	}
	
	fseek(fInd,cont * sizeof(IndiceCodice),0);
	fwrite(&y,sizeof(IndiceCodice),1,fInd);
	fclose(fInd);
	
	IndiceCodice ind[max];
	fInd = fopen(indiceCodiciAperto,"rb");
	
	int i;
	for(i = 0; i < max; i++)
	{
		fread(&ind[i],sizeof(IndiceCodice),1,fInd);
	}
	
	fclose(fInd);
	
	OrdinaIndiceCodici(ind,max);
	
	fInd = fopen(indiceCodiciAperto,"wb");
	
	for(i = 0; i < max; i++)
	{
		fwrite(&ind[i],sizeof(IndiceCodice),1,fInd);
	}
	fclose(fInd);
	printf("Aggiornamento indici completato.\n");
}

void modifica_ingresso()
{
	char cognome[20];
	FILE *f;
	Indice cognLetto;
	
	printf("Cognome: ");
	scanf("%s", &cognome);
	
	f = fopen(indiceAperto,"r+b");
	fread(&cognLetto,sizeof(Indice),1,f);
	
	int posCogn = 0;
	while(!feof(f) && strcmp(cognLetto.chiave,cognome) != 0)
	{
		fread(&cognLetto,sizeof(Indice),1,f);
		posCogn++;
	}
	
	if(feof(f))
	{
		printf("\n\nIngresso non trovato\n\n");
		fclose(f);
	}
	else
	{
		Indice x;
		printf("Inserire nuovo cognome: ");
		scanf("%s", &x.chiave);
		x.valore = cognLetto.valore;
		
		fseek(f,posCogn * sizeof(Indice),0);
		fwrite(&x,sizeof(Indice),1,f);
		fclose(f);
		
		f = fopen(indiceCodiciAperto,"r+b");
		
		int nellIndice;
		int posizione = RicercaBin(indiceCodiciAperto,max,cognLetto.valore,&nellIndice);
		if(posizione > -1)
		{
			f = fopen(ingressoAperto,"r+b");
			fseek(f,posizione * sizeof(Ingressi),0);
			
			Ingressi e;
			fread(&e,sizeof(Ingressi),1,f);
			visualizzaIngresso(e);
			
			printf("\nInserire i nuovi dati: \n");
			strcpy(e.cognome, x.chiave);
			
			printf("\nNumero: ");
			scanf("%d", &e.numero);
			
			printf("\nNome: ");
			scanf("%s", &e.nome);
			
			printf("\nData ingresso: ");
			scanf("%s", &e.data_ingresso);
			
			printf("\nOra ingresso: ");
			scanf("%s", &e.ora_ingresso);
			
			printf("\nOra uscita: ");
			scanf("%s", &e.ora_uscita);
			
			e.numero = cognLetto.valore;
			e.cancellato = 0;
			
			fseek(f,posizione * sizeof(Ingressi),0);
			fwrite(&e,sizeof(Ingressi),1,f);
			fclose(f);
			
			printf("\n\nIngresso aggiornato con successo\n");
		}
		else
		{
			printf("\n\nIngresso NON trovato\n\n");
			fclose(f);
		}
	}
}

void elimina_ingresso()
{
	char cognome[20];
	FILE *f;
	Indice cognLetto;
	
	printf("Cognome: ");
	scanf("%s", &cognome);
	
	f = fopen(indiceAperto,"r+b");
	fread(&cognLetto,sizeof(Indice),1,f);
	
	int posCogn = 0;
	while(!feof(f) && strcmp(cognLetto.chiave,cognome) != 0)
	{
		fread(&cognLetto,sizeof(Indice),1,f);
		posCogn++;
	}
	
	if(feof(f))
	{
		printf("\n\nIngresso non trovato\n\n");
		fclose(f);
	}
	else
	{
		Indice x;
		strcpy(x.chiave,"VUOTO");
		x.valore = posCogn;
		
		fseek(f,posCogn * sizeof(Indice),0);
		fwrite(&x,sizeof(Indice),1,f);
		fclose(f);
		
		f = fopen(indiceCodiciAperto,"r+b");
		
		int nellIndice;
		int posizione = RicercaBin(indiceCodiciAperto,max,cognLetto.valore,&nellIndice);
		if(posizione > -1)
		{
			fseek(f,nellIndice * sizeof(IndiceCodice),0);
			IndiceCodice k;
			k.chiave = -1;
			k.valore = -1;
			fwrite(&k,sizeof(IndiceCodice),1,f);
			fclose(f);
			
			FILE *fInd;
			IndiceCodice ind[max];
			fInd = fopen(indiceCodiciAperto,"rb");
			
			int i;
			for(i=0;i<max;i++)
			{
				fread(&ind[i],sizeof(IndiceCodice),1,fInd);
			}
			
			fclose(fInd);
			
			OrdinaIndiceCodici(ind,max);
			
			fInd = fopen(indiceCodiciAperto,"wb");
			
			for(i=0;i<max;i++)
			{
				fwrite(&ind[i],sizeof(IndiceCodice),1,fInd);
			}
			fclose(fInd);
			
			f = fopen(ingressoAperto,"r+b");
			fseek(f,posizione * sizeof(Ingressi),0);
			Ingressi e;
			
			strcpy(e.cognome,"VUOTO");
			strcpy(e.nome,"VUOTO");
			strcpy(e.data_ingresso,"VUOTO");
			strcpy(e.ora_ingresso,"VUOTO");
			strcpy(e.ora_uscita,"VUOTO");
			e.numero = -1;
			e.cancellato = 1;
			
			fwrite(&e,sizeof(Ingressi),1,f);
			fclose(f);
			
			printf("\nIngresso cancellato con successo\n");
		}
		else
		{
			printf("\n\nIngresso NON trovato\n\n");
			fclose(f);
		}
	}
}

void visualizzaIngresso(Ingressi e)
{
	printf("\n");
	printf("Numero: %d\n", e.numero);
	printf("Nome: %s\n", e.nome);
	printf("Cognome: %s\n", e.cognome);
	printf("Data ingresso: %s\n", e.data_ingresso);
	printf("Ora ingresso: %s\n", e.ora_ingresso);
	printf("Ora uscita: %s\n", e.ora_uscita);
	printf("\n");
}

int cerca_ingresso()
{
	char cognome[20];
	FILE *f;
	Indice cognomeLetto;
	
	printf("Cognome: ");
	scanf("%s", &cognome);
	
	f = fopen(indiceAperto,"rb");
	fread(&cognomeLetto,sizeof(Indice),1,f);
	
	while(!feof(f) && strcmp(cognomeLetto.chiave,cognome) != 0)
	{
		fread(&cognomeLetto,sizeof(Indice),1,f);
	}
	fclose(f);
	
	if(feof(f))
	{
		return -1;
	}
	else
	{
		IndiceCodice x;
		f = fopen(indiceCodiciAperto,"rb");
		
		int aCaso;
		int posizione = RicercaBin(indiceCodiciAperto,max,cognomeLetto.valore,&aCaso);
		if(posizione > -1)
		{
			f = fopen(ingressoAperto,"rb");
			fseek(f,posizione * sizeof(Ingressi),0);
			Ingressi e;
			fread(&e,sizeof(Ingressi),1,f);
			fclose(f);
			visualizzaIngresso(e);
			return posizione;
		}
		else
		{
			return -1;
		}
	}
}

void leggi_fileingressi()
{
	FILE *f;
	f = fopen(ingressoAperto,"rb");
	
	int i;
	Ingressi e;
	
	for(i=0;i<max;i++)
	{
		fread(&e,sizeof(Ingressi),1,f);
		if(e.cancellato != 1)
		{
			visualizzaIngresso(e);
		}
	}
}
ISCRIZIONI

Codice: Seleziona tutto

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define max 20

struct Iscrizioni
{
	char cognome[20];
	int codice;
	char data[20];
	int prezzo;
	int cancellato;
};

struct Indice_iscrizioni
{
	char chiave[30];
	int valore;
};

struct IndiceCodice_iscrizioni
{
	int chiave;
	int valore;
};

void creaIscrizione();
void apriIscrizione();
void inserisciIscrizione();
void visualizzaIscrizione(Iscrizioni r);
int cercaIscrizione();
void cancellaIscrizione();
void modificaIscrizione();
void leggiIscrizione();
int RicercaBin(char i[],int n,int cercato,int *inIndice);
void OrdinaIndiceCodici(IndiceCodice_iscrizioni in[],int n);

char IscrizioniAperto[20];
char indiceAperto_iscrizioni[20];
char indiceCodiciAperto_iscrizioni[20];

int main()
{
	int scelta;
	strcpy(IscrizioniAperto,"VUOTO");
	strcpy(indiceAperto_iscrizioni,"VUOTO");
	
	do
	{
		system("CLS");
		
		printf("\t AREA ISCRIZIONI/PAGAMENTI \t\n\n");
		
		printf("\t1- Crea file iscrizione\n");
		printf("\t2- Apri file iscrizione\n");
		printf("\t3- Inserisci iscrizione\n");
		printf("\t4- Modifica iscrizione\n");
		printf("\t5- Cancella iscrizione\n");
		printf("\t6- Cerca iscrizione\n");
		printf("\t7- Visualizza file iscrizione\n");
		printf("\t8- Esci dal programma\n");
		
		printf("\nCosa vuoi fare? : ");
		scanf("%d", &scelta);
		
		int r1;
		switch(scelta)
		{
			case 1:
				creaIscrizione();
				break;
			case 2:
				apriIscrizione();
				break;
			case 3:
				inserisciIscrizione();
				break;
			case 4:
				modificaIscrizione();
				break;
			case 5:
				cancellaIscrizione();
				break;
			case 6:
				
				r1 = cercaIscrizione();
				if(r1 == -1)
				{
					printf("\nIscrizione non trovata\n");
				}
				break;
			case 7:
				leggiIscrizione();
				break;
		}
		system("PAUSE");
	}while(scelta != 8);
	
	return 0;
}

void creaIscrizione()
{
	system("CLS");
	FILE *f;
	char nomeFile[20];
	char nomeIndice[20];
	char nomeIndiceCod[20];
	
	printf("Nome del file da creare: ");
	scanf("%s", &nomeFile);
	
	Iscrizioni r;
	
	strcpy(r.cognome,"VUOTO");
	strcpy(r.data,"VUOTO");
	r.codice = -1;
	r.prezzo = -1;
	r.cancellato = 1;
	
	strcpy(nomeIndice,nomeFile);
	strcat(nomeIndice,".txt");
	strcpy(nomeIndiceCod,nomeIndice);
	strcat(nomeIndiceCod,"i");
	
	strcat(nomeFile,".dati");
	
	f = fopen(nomeFile,"rb");
	
	if(f == NULL)
	{
		fclose(f);
		f = fopen(nomeFile,"wb");
		int i;
		for(i=0;i<max;i++)
		{
			fwrite(&r,sizeof(Iscrizioni),1,f);
		}
		fclose(f);
		printf("File scritto correttamente\n");
		
		FILE *indice;
		Indice_iscrizioni x;
		
		strcpy(x.chiave,"VUOTO");
		
		indice = fopen(nomeIndice,"wb");
		for(i=0;i<max;i++)
		{
			x.valore = i;
			fwrite(&x,sizeof(Indice_iscrizioni),1,indice);
		}
		fclose(indice);
		printf("File indice del corso scritto correttamente\n");
		
		indice = fopen(nomeIndiceCod,"wb");
		IndiceCodice_iscrizioni y;
		y.chiave = -1;
		y.valore = -1;
		for(i=0;i<max;i++)
		{
			fwrite(&y,sizeof(IndiceCodice_iscrizioni),1,indice);
		}
		fclose(indice);
	}
	else
	{
		char s;
		printf("File gia' esistente.Vuoi sovrascriverlo? (s/n): ");
		scanf("%s", &s);
		if(s == 's' || s == 'S')
		{
			f = fopen(nomeFile,"wb");
			int i;
			for(i=0;i<max;i++)
			{
				fwrite(&r,sizeof(Iscrizioni),1,f);
			}
			fclose(f);
			printf("File scritto correttamente!\n");
			
			FILE *indice;
			Indice_iscrizioni x;
			
			strcpy(x.chiave,"VUOTO");
			
			indice = fopen(nomeIndice,"wb");
			for(i=0;i<max;i++)
			{
				x.valore = i;
				fwrite(&x,sizeof(Indice_iscrizioni),1,indice);
			}
			fclose(indice);
			printf("File indice dei soci scritto correttamente\n");
			
			indice = fopen(nomeIndiceCod,"wb");
			IndiceCodice_iscrizioni y;
			y.chiave = -1;
			y.valore = -1;
			for(i=0;i<max;i++)
			{
				fwrite(&y,sizeof(IndiceCodice_iscrizioni),1,indice);
			}
			fclose(indice);
		}
	}
	printf("Operazione completata\n");
}

void apriIscrizione()
{
	char nomeFile[20];
	char nomeIndice[20];
	char nomeIndiceCod[20];
	FILE *f;
	FILE *fI;
	do
	{
		/**/
		
		printf("Nome file da aprire: ");
		scanf("%s", &nomeFile);
		
		strcpy(nomeIndice,nomeFile);
		strcat(nomeIndice,".txt");
		strcat(nomeFile,".dati");
		strcpy(nomeIndiceCod,nomeIndice);
		strcat(nomeIndiceCod,"i");
		
		f = fopen(nomeFile,"r+b");
		if(f == NULL)
		{
			printf("Errore nell'apertura del file\n");
		}
		else
		{
			printf("File iscrizione aperto correttamente!\n");
			strcpy(IscrizioniAperto,nomeFile);
			
			fI = fopen(nomeIndice,"r+b");
			if(fI == NULL)
			{
				printf("Errore nell'apertura dell'indice\n");
			}
			else
			{
				strcpy(indiceAperto_iscrizioni,nomeIndice);
				printf("Indice aperto correttamente.\n");
				fclose(fI);
			}
			
			fI = fopen(nomeIndiceCod,"r+b");
			if(fI == NULL)
			{
				printf("Errore nell'apertura dell'indice.\n");
			}
			else
			{
				strcpy(indiceCodiciAperto_iscrizioni,nomeIndiceCod);
				printf("Indice aperto correttamente.\n");
				fclose(fI);
			}
		}
	}while(f == NULL || fI == NULL);
	fclose(f);
}

void inserisciIscrizione()
{
	Iscrizioni r;
	Iscrizioni rTemp;
	FILE *fIsc;
	FILE *fInd;
	
	printf("Cognome: ");
	scanf("%s", &r.cognome);
	printf("Codice: ");
	scanf("%d", &r.codice);
	printf("Data: ");
	scanf("%s", &r.data);
	printf("Prezzo: ");
	scanf("%d", &r.prezzo);
	r.cancellato = 0;
	
	int cont = 0;
	
	fIsc = fopen(IscrizioniAperto,"r+b");
	
	fread(&rTemp,sizeof(Iscrizioni),1,fIsc);
	
	while(rTemp.cancellato != 1)
	{
		fread(&rTemp,sizeof(Iscrizioni),1,fIsc);
		cont++;
	}
	
	int posInIsc = cont;
	
	fseek(fIsc,cont * sizeof(Iscrizioni),0);
	fwrite(&r,sizeof(Iscrizioni),1,fIsc);
	fclose(fIsc);
	
	Indice_iscrizioni x;
	Indice_iscrizioni xTemp;
	
	strcpy(x.chiave,r.cognome);
	x.valore = r.codice;
	
	fInd = fopen(indiceAperto_iscrizioni,"r+b");
	
	cont = 0;
	fread(&rTemp,sizeof(Indice_iscrizioni),1,fInd);
	
	while(strcmp(xTemp.chiave,"VUOTO") != 0)
	{
		fread(&xTemp,sizeof(Indice_iscrizioni),1,fInd);
		cont++;
	}
	
	fseek(fInd,cont * sizeof(Indice_iscrizioni),0);
	fwrite(&x,sizeof(Indice_iscrizioni),1,fInd);
	fclose(fInd);
	
	IndiceCodice_iscrizioni y;
	IndiceCodice_iscrizioni yTemp;
	
	y.chiave = r.codice;
	y.valore = posInIsc;
	
	fInd = fopen(indiceCodiciAperto_iscrizioni,"r+b");
	
	cont = 0;
	fread(&yTemp,sizeof(IndiceCodice_iscrizioni),1,fInd);
	
	while(yTemp.chiave != -1)
	{
		fread(&yTemp,sizeof(IndiceCodice_iscrizioni),1,fInd);
		cont++;
	}
	
	fseek(fInd,cont * sizeof(IndiceCodice_iscrizioni),0);
	fwrite(&y,sizeof(IndiceCodice_iscrizioni),1,fInd);
	fclose(fInd);
	
	IndiceCodice_iscrizioni ind[max];
	fInd = fopen(indiceCodiciAperto_iscrizioni,"rb");
	
	int i;
	for(i = 0; i < max; i++)
	{
		fread(&ind[i],sizeof(IndiceCodice_iscrizioni),1,fInd);
	}
	
	fclose(fInd);
	
	OrdinaIndiceCodici(ind,max);
	
	fInd = fopen(indiceCodiciAperto_iscrizioni,"wb");
	
	for(i = 0; i < max; i++)
	{
		fwrite(&ind[i],sizeof(IndiceCodice_iscrizioni),1,fInd);
	}
	fclose(fInd);
	printf("Aggiornamento indici completato.\n");
}

void modificaIscrizione()
{
	char cognomeIscritto[20];
	FILE *f;
	Indice_iscrizioni cognomeLetto;
	
	printf("Cognome: ");
	scanf("%s", &cognomeIscritto);
	
	f = fopen(indiceAperto_iscrizioni,"r+b");
	fread(&cognomeLetto,sizeof(Indice_iscrizioni),1,f);
	
	int posCognome = 0;
	while(!feof(f) && strcmp(cognomeLetto.chiave,cognomeIscritto) != 0)
	{
		fread(&cognomeLetto,sizeof(Indice_iscrizioni),1,f);
		posCognome++;
	}
	
	if(feof(f))
	{
		printf("\n\nIscrizione non trovata\n\n");
		fclose(f);
	}
	else
	{
		Indice_iscrizioni x;
		printf("Inserire nuovo cognome: ");
		scanf("%s", &x.chiave);
		
		x.valore = cognomeLetto.valore;
		
		//Modifico record da indice nomi
		
		fseek(f,posCognome * sizeof(Indice_iscrizioni),0);
		fwrite(&x,sizeof(Indice_iscrizioni),1,f);
		fclose(f);
		
		f = fopen(indiceCodiciAperto_iscrizioni,"r+b");
		
		int inIndice;
		int posizione = RicercaBin(indiceCodiciAperto_iscrizioni,max,cognomeLetto.valore,&inIndice);
		if(posizione > -1)
		{	
			f = fopen(IscrizioniAperto,"r+b");
			fseek(f,posizione * sizeof(Iscrizioni),0);
			
			Iscrizioni r;
			fread(&r,sizeof(Iscrizioni),1,f);
			visualizzaIscrizione(r);
			
			printf("\nInserire i nuovi dati: \n");
			strcpy(r.cognome, x.chiave);
			
			printf("\nCodice: ");
			scanf("%d", &r.codice);
			
			printf("\nData: ");
			scanf("%s", &r.data);
			
			printf("\nPrezzo: ");
			scanf("%d", &r.prezzo);
			
			r.codice = cognomeLetto.valore;
			r.cancellato = 0;
			
			fseek(f,posizione * sizeof(Iscrizioni),0);			
			fwrite(&r,sizeof(Iscrizioni),1,f);
			fclose(f);

			printf("\nIscrizione aggiornata con successo\n");
		}
		else
		{
			printf("\n\nIscrizione NON trovata\n\n");
			fclose(f);
		}	
	}
}

void cancellaIscrizione()
{
	char cognomeIscritto[20];
	FILE *f;
	Indice_iscrizioni cognomeLetto;
	
	printf("Cognome: ");
	scanf("%s", &cognomeIscritto);
	
	f = fopen(indiceAperto_iscrizioni,"r+b");
	fread(&cognomeLetto,sizeof(Indice_iscrizioni),1,f);
	
	int posCognome = 0;
	while(!feof(f) && strcmp(cognomeLetto.chiave,cognomeIscritto) != 0)
	{
		fread(&cognomeLetto,sizeof(Indice_iscrizioni),1,f);
		posCognome++;
	}
	
	if(feof(f))
	{
		printf("Cognome non trovato\n\n");
		fclose(f);
	}
	else
	{
		Indice_iscrizioni x;
		strcpy(x.chiave,"VUOTO");
		x.valore = posCognome;
		
		fseek(f,posCognome * sizeof(Indice_iscrizioni),0);
		fwrite(&x,sizeof(Indice_iscrizioni),1,f);
		fclose(f);
		
		f = fopen(indiceCodiciAperto_iscrizioni,"r+b");
		
		int nellIndice;
		int posizione = RicercaBin(indiceCodiciAperto_iscrizioni,max,cognomeLetto.valore,&nellIndice);
		if(posizione > -1)
		{
			fseek(f,nellIndice * sizeof(IndiceCodice_iscrizioni),0);
			IndiceCodice_iscrizioni k;
			k.chiave = -1;
			k.valore = -1;
			fwrite(&k,sizeof(IndiceCodice_iscrizioni),1,f);
			fclose(f);
			
			FILE *fInd;
			IndiceCodice_iscrizioni ind[max];
			fInd = fopen(indiceCodiciAperto_iscrizioni,"rb");
			
			int i;
			for(i = 0; i < max; i++)
			{
				fread(&ind[i],sizeof(IndiceCodice_iscrizioni),1,fInd);
			}
			
			fclose(fInd);
			
			OrdinaIndiceCodici(ind,max);
			
			fInd = fopen(indiceCodiciAperto_iscrizioni,"wb");
			for(i = 0; i < max; i++)
			{
				fwrite(&ind[i],sizeof(IndiceCodice_iscrizioni),1,fInd);
			}
			fclose(fInd);
			
			f = fopen(IscrizioniAperto,"r+b");
			fseek(f,posizione * sizeof(Iscrizioni),0);
			Iscrizioni r;
			
			strcpy(r.cognome,"VUOTO");
			strcpy(r.data,"VUOTO");
			r.codice = -1;
			r.prezzo = -1;
			r.cancellato = 1;
			
			fwrite(&r,sizeof(Iscrizioni),1,f);
			fclose(f);
			
			printf("\nIscrizione cancellata con successo\n");
		}
		else
		{
			printf("\n\nIscrizione non trovata\n\n");
			fclose(f);
		}
	}
}

int cercaIscrizione()
{
	char cognomeIscritto[20];
	FILE *f;
	Indice_iscrizioni cognomeLetto;
	
	printf("Cognome: ");
	scanf("%s", &cognomeIscritto);
	
	f = fopen(indiceAperto_iscrizioni,"rb");
	fread(&cognomeLetto,sizeof(Indice_iscrizioni),1,f);
	
	while(!feof(f) && strcmp(cognomeLetto.chiave,cognomeIscritto) != 0)
	{
		fread(&cognomeLetto,sizeof(Indice_iscrizioni),1,f);
	}
	fclose(f);
	
	if(feof(f))
	{
		return -1;
	}
	else
	{
		IndiceCodice_iscrizioni x;
		f = fopen(indiceCodiciAperto_iscrizioni,"rb");
		
		int aCaso;
		int posizione = RicercaBin(indiceCodiciAperto_iscrizioni,max,cognomeLetto.valore,&aCaso);
		if(posizione > -1)
		{
			f = fopen(IscrizioniAperto,"rb");
			fseek(f,posizione * sizeof(Iscrizioni),0);
			Iscrizioni r;
			fread(&r,sizeof(Iscrizioni),1,f);
			fclose(f);
			visualizzaIscrizione(r);
			return posizione;
		}
		else
		{
			return -1;
		}
	}
}

void leggiIscrizione()
{
	FILE *f;
	f = fopen(IscrizioniAperto,"rb");
	
	int i;
	Iscrizioni r;
	
	for(i = 0; i < max; i++)
	{
		fread(&r,sizeof(Iscrizioni),1,f);
		if(r.cancellato != 1)
		{
			visualizzaIscrizione(r);
		}
	}
}

void visualizzaIscrizione(Iscrizioni r)
{
	printf("\n");
	printf("Cognome: %s\n", r.cognome);
	printf("Codice: %d\n", r.codice);
	printf("Data: %s\n", r.data);
	printf("Prezzo: %d\n", r.prezzo);
	printf("\n");
}

void OrdinaIndiceCodici(IndiceCodice_iscrizioni in[],int n)
{
	IndiceCodice_iscrizioni temp;
	int top;
	int scambio;
	int ultimoscambio;
	int i;
	top = 0;
	
	do
	{
		scambio = 0;
		for(i = n-1; i > top; i--)
		{
			if(in[i].chiave < in[i - 1].chiave)
			{
				temp = in[i];
				in[i] = in[i-1];
				in[i-1] = temp;
				
				scambio = 1;
				ultimoscambio = i;
			}
		}
		top = ultimoscambio;
	}while(scambio != 0);
}

int RicercaBin(char i[],int n,int cercato,int *inIndice)
{
	int left = 0;
	int mid;
	int right = n-1;
	FILE *indice;
	indice = fopen(i,"rb");
	do
	{
		mid = (left + right)/2;
		
		IndiceCodice_iscrizioni x;
		fseek(indice,mid * sizeof(IndiceCodice_iscrizioni),0);
		fread(&x,sizeof(IndiceCodice_iscrizioni),1,indice);
		
		if(cercato == x.chiave)
		{
			*inIndice = mid;
			fclose(indice);
			return x.valore;
		}
		else
		{
			if(cercato > x.chiave)
			{
				left = mid + 1;
			}
			else
			{
				right = mid - 1;
			}
		}
	}while(left <= right);
	*inIndice = -1;
	return -1;
}
Aiutatemi perfavore!! :cry: :cry:
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Google [Bot] e 4 ospiti