All pastes #494927 Raw Edit

Something

public text v1 · immutable
·published 2007-05-18 14:09 UTC
rendered paste body
#include <stdio.h>
#include <conio.h>
#include <string.h>

#define KOKO 100

FILE *f; //OSOITINMUUTTUJA TIEDOSTONKÄSITTELYÄ VARTEN
char TIEDOSTO[20];

//TIETUEMÄÄRITYS

typedef struct videokasettirekisteri
{
	char nimi[20];
	double hinta;
	int numero;
}videokasettirekisteri;

//TIETUETAULUKON MÄÄRITYS

struct videokasettirekisteri taulu [KOKO];

//ALIOHJELMIEN ESITTELYT

void syota(videokasettirekisteri taulu[],int lkm);
void tulosta(videokasettirekisteri taulu[],int lkm);
void tallenna(videokasettirekisteri taulu[],int lkm);
int luetiedosto(videokasettirekisteri taulu[]);
void aakkos(videokasettirekisteri taulu[],int lkm);
void hakuNimella(videokasettirekisteri taulu[],int lkm);
int etsintaNimella(videokasettirekisteri taulu[],char kohde[10],int lkm);
void hakuNumerolla(videokasettirekisteri taulu[],int lkm);
int etsiNumerolla(videokasettirekisteri taulu[],int kohde,int lkm);
void muuta(videokasettirekisteri taulu[],int lkm);
int tarkista(videokasettirekisteri taulu[],int lkm,int numero);

//PÄÄOHJELMA

void main (void)
{
	int toiminto=0;
	int lkm=0;
	while(toiminto!=9)	//JOS TOIMINTO ON ERI SUURI KUIN 9 VALIKKO TULEE NÄKYVIIN AINA UUDELLEEN
	{
		//VALIKKO

		printf("\n**********************************************\n");
		printf("\n												\n");
		printf("\n 1. Syota elokuvan nimi						\n");
		printf("\n 2. Tulosta aakkosittain						\n");
		printf("\n 3. Hae nimella								\n");
		printf("\n 4. Hae elokuvan numerolla					\n");
		printf("\n 5. Muuta elokuvan tietoja					\n");
		printf("\n 9. Lopetus									\n");
		printf("\n                                              \n");
		printf("\n**********************************************\n");

		printf("Valintasi on:   ");

		//LUETAAN KÄYTTÄJÄN VALIKOSTA VALITSEMA NUMERO MUUTTUJAAN

		scanf("%d",&toiminto);

		switch(toiminto)
		{
			case 1:

				printf("Montako elokuvaa syotat:  ");
				scanf("%d",&lkm);

				syota(taulu,lkm); //SYOTA ALIOHJELMAN KUTSU
				break;

			case 2:
				
				//KUTSUTAAN ALIOHJELMIA
				 lkm=luetiedosto(taulu);
				 aakkos(taulu,lkm);
				 tulosta(taulu,lkm); 
				break;
			case 3:

				//KUTSUTAAN ALIOHJELMIA
				lkm=luetiedosto(taulu);
				hakuNimella(taulu,lkm);
				
				break;

			case 4:

				//KUTSUTAAN ALIOHJELMIA
				lkm=luetiedosto(taulu);
				hakuNumerolla(taulu,lkm);
				break;

			case 5:
				
				//KUTSUTAAN ALIOHJELMIA
				lkm=luetiedosto(taulu);
				muuta(taulu,lkm);
				break;

			case 9: break;	//KUN VALITAAN VALIKOSTA 9,OHJELMA LOPETETAAN

			default: printf("Valinta ei ole kaytettavissa!");	

		} //SULKU JOKA LOPETTAA SWITCH-TOIMINNON
	} //SULKU JOKA LOPETTAA WHILE-TOIMINNON

	printf("\n\n Paina ENTER  ");

	getch();
} //PÄÄOHJELMAN LOPETUSSULKU

//---------------------------------------------------------------------------------------------------------------------
//ALIOHJELMA JOKA KYSYY ELOKUVAN NIMEÄ,HINTAA JA NUMEROA, JA LUKEE NE TIEDOSTOON

void syota(videokasettirekisteri taulu[],int lkm)
{
	int i,numero;

	for(i=0;i<lkm;i++)
	{
		printf("Anna elokuvan nimi:  ");
		scanf("%s",taulu[i].nimi);

		printf("Anna elokuvan hinta:  ");
		scanf("%lf",&taulu[i].hinta);

		printf("Anna elokuvan numero:  ");
		scanf("%d",&numero);
		
		tarkista(taulu,lkm,numero);
	} //for-SILMUKAN LOPETUSSULKU
	tallenna(taulu,lkm); //KUTSUTAAN tallenna-ALIOHJELMAA
}
//----------------------------------------------------------------------------------------------------------------------
void tulosta(videokasettirekisteri taulu[],int lkm)
{
	int i;


	for(i=0;i<lkm;i++)
	{
		printf("\n%s  : hinta %.2lf ja numero %d", taulu[i].nimi, taulu[i].hinta,taulu[i].numero);
	} //for-SILMUKAN LOPETUSSULKU
}
//------------------------------------------------------------------------------------------------------------------------
//ALIOHJELMA,JOKA TALLENTAA TIEDOT TIEDOSTOON

void tallenna(videokasettirekisteri taulu[],int lkm)
{
	int i;

	printf("Anna tiedoston nimi:  ");
	scanf("%s",TIEDOSTO);

	//AVATAAN TIEDOSTO TALLENNUSTA VARTEN

	if((f=fopen(TIEDOSTO,"ab"))==NULL)

	//JOS AVAAMINEN EI ONNISTU,HERJATAAN

	printf("Tiedoston avaaminen ei onnistu!");

	else //MUUTOIN for-SILMUKASSA TALLENNETAAN TIEDOT TIEDOSTOON
	{
		for(i=0;i<lkm;i++)
		{
			fwrite(&taulu[i],sizeof taulu[i],1,f);
		}
		fclose(f);
	}
}
//-----------------------------------------------------------------------------------------------------------------------
//ALIOHJELMA JOKA LUKEE TIEDOSTOSTA JA AVAA TIEDOSTON

int luetiedosto(videokasettirekisteri taulu[])
{
	int i=0;
	
	printf("Anna avattavan tiedoston nimi: ");
	scanf("%s",TIEDOSTO);

	if((f=fopen(TIEDOSTO,"rb"))==NULL)

	//JOS AVAAMINEN EI ONNISTU,HERJATAAN

	printf("Tiedoston avaaminen ei onnistunut!");

	else	//MUUTOIN AVATAAN TIEDOSTO
	{
		while(!feof(f))
		{
			fread(&taulu[i],sizeof taulu[i],1,f);
			i++;
		}
	}
	fclose(f);
	return(i-1);
}
//--------------------------------------------------------------------------------------------------------------------------
//ALIOHJELMA LAJITTELEE ELOKUVAT AAKKOSJÄRJESTYKSEEN

void aakkos(videokasettirekisteri taulu[],int lkm)
{
	
	int i, scan, min;
	videokasettirekisteri temp;
	for(i=0;i<lkm-1;i++)
	{
		min=i;
		for(scan=i+1;scan<lkm;scan++)
		{
			if(strcmp(taulu[scan].nimi,taulu[min].nimi)<0)
			min=scan;
		}
		temp=taulu[min];
		taulu[min]=taulu[i];
		taulu[i]=temp;
	}

}
//---------------------------------------------------------------------------------------------------------------------------
//ALIOHJELMA HAKEE ELOKUVAN TIEDOSTOSTA JA MIKÄLI LÖYTÄÄ SEN, TULOSTAA ELOKUVAN TIEDOT

void hakuNimella(videokasettirekisteri taulu[],int lkm)
{
	char elokuva[10];
	int paikka=0;

	printf("Anna haettavan elokuvan nimi: ");
	scanf("%s",elokuva);

	paikka=etsintaNimella(taulu,elokuva,lkm);	//KUTSUTAAN etsintaNimella-ALIOHJELMAA

	if(paikka<0)
	{
		printf("Elokuvan tietoja ei ole!"); //ELLEI ELOKUVAA OLE TALLENNETTUNA TULOSTUU EO. TEKSTI
	}
	else
	{
		printf("Elokuvan nimi on %s, hinta on %.2lf ja elokuvan numero on %d",taulu[paikka].nimi,taulu[paikka].hinta,taulu[paikka].numero);	//KUN ELOKUVA LÖYTTYY,TULOSTETAAN SEN TIEDOT
	}
}
//---------------------------------------------------------------------------------------------------------------------------
//ALIOHJELMA SUORITTAA HAUN ETSINNÄN JA PALAUTTAA TIEDON JOS SE LÖYTYY

int etsintaNimella(videokasettirekisteri taulu[],char kohde[10],int lkm)
{
	int i=0;
	int vertailu;

	while(i<lkm)
	{
		vertailu=strcmp(kohde,taulu[i].nimi);
		if(vertailu==0)
			return(i); //ELOKUVA LÖYTYI JA PALATAAN hakuNimella-ALIOHJELMAAN
		i++;
	}
	return(-1); //ELOKUVAA EI LÖYTYNYT,PALATAAN hakuNimella-ALIOHJELMAAN
}
//---------------------------------------------------------------------------------------------------------------------------
//ALIOHJELMA SUORITTAA ELOKUVAN HAUN ELOKUVAN NUMERON PERUSTEELLA

void hakuNumerolla(videokasettirekisteri taulu[],int lkm)
{
	int numero;
	int paikka=0;

	printf("Anna haettavan elokuvan numero:");
	scanf("%d",&numero);

	paikka=etsiNumerolla(taulu,numero,lkm); //etsiNumerolla-ALIOHJELMAN KUTSU

	if(paikka<0)
	{
		printf("Elokuvaa ei loydy!");	//ELLEI ELOKUVAN TIETOJA LÖYDY,TULOSTUU EO. TEKSTI
	}
	else
	{
		printf("Elokuvan nimi on %s, elokuvan hinta on %.2lf ja elokuvan numero on %d",taulu[paikka].nimi,taulu[paikka].hinta,taulu[paikka].numero); //ELOKUVAN LÖYDYTTÄESSÄ TULOSTUU EO. TEKSTI 
	}
}
//---------------------------------------------------------------------------------------------------------------------------
//ALIOHJELMA SUORITTAA NUMERO HAUN ETSINNÄN JA PALAUTTAA LÖYTYVÄN TIEDON
int etsiNumerolla(videokasettirekisteri taulu[],int kohde,int lkm)
{
	int i=0;

	while(i<lkm)
	{
		if(kohde==taulu[i].numero)

			return(i); //KOHDE LÖYTYI JA PALATAAN hakuNumerolla-ALIOHELMAAN
		i++;
	}
	return(-1);	//KOHDETTA EI LÖYTYNYT, PALATAAN hakuNumerolla-ALIOHJELMAAN
}
//--------------------------------------------------------------------------------------------------------------------------
void muuta(videokasettirekisteri taulu[],int lkm)
{
	int paikka=0,i=0,numero;

	printf("Anna muutettavan elokuvan numero: ");
	scanf("%d",&numero);

	while(i<lkm)
	{
		if(numero==taulu[i].numero)
		{
			printf("Tuotteen nimi on %s\n",taulu[i].nimi);
			printf("Anna uusi nimi:");
			scanf("%s",taulu[i].nimi);
			printf("Hinta on %.2lf\n" ,taulu[i].hinta);
			printf("Anna uusi hinta:");
			scanf("%lf", &taulu[i].hinta);

			if((f=fopen(TIEDOSTO, "wb"))==NULL)
				
				printf("Tiedoston avaaminen ei onnistunut!");

			else
			{
				for(i=0;i<lkm;i++)
				{
					fwrite(&taulu[i], sizeof taulu[i],1,f);
				}
				fclose(f);
			}
			paikka++;
		}
		i++;
	}
	printf("Elokuvan numero %d tiedot muutettiin",numero);

	if(paikka==0)
	{
		printf("Taulukossa ei ole haettavaa elokuvaa!");
	}
}
//-----------------------------------------------------------------------------------------------------------------------
int tarkista(videokasettirekisteri taulu[],int lkm,int numero)
{
	
	int i=0;
	
	

	while(i<lkm)
	{
		if(numero==taulu[i].numero)
		{
			printf("Numero on jo kaytossa!\n");
			printf("Anna uusi numero:");
			scanf("%d",&numero);
		}
	
		else
		{
			printf("Numero on vapaa ja hyvaksytaan!");
			scanf("%d",&numero);
			return(i);
		}
		i++;
	}
}
//--------------------------------------------------------------------------------------------------------------------