All pastes #804602 Raw Edit

Something

public c v1 · immutable
·published 2007-12-03 16:31 UTC
rendered paste body
/********************************************************** Tekijät:												 ** Jaakko Reinman  000001 TIE07							 ** Joni Lehmuksela 000002 TIE07							 ** Juho Peltonen   000003 TIE07							 ** Ohjelmaversio: 1.5									 ** jne.													 **														 ***********************************************************///Luokkakirjastot#include <stdio.h>#include <conio.h>#include <string.h>#include <ctype.h>#include <windows.h>//Definet#define MAX_PITUUS 50#define INT_MAX 65535#define ANNAINT_MIN -1#define ANNAINT_MAX INT_MAX#define ANNADOUBLE_MIN 0#define ANNADOUBLE_MAX INT_MAX#define BUF_KOKO 50#define TAVARAT_KOKO 100//Tietueettypedef struct tavara{	char nimi[MAX_PITUUS+1];	double hinta;	long kpl;}Tavara;//Globaalit tietotyypit ja muuttujat//muutamia funktioiden muuttujia on täällä --> optimointia, kun ei tarvitse joka kohdassa uudelleenmääritelläTavara tavarat[TAVARAT_KOKO] = {0};int temp=0;int ok=0;int i=0;char puskuri[MAX_PITUUS+1];char vastaus;double yhthinta=0;int yhtmaara=0;//Funktioiden esittelytvoid trim(char* s);void annaIntLuku(int* luku);		//haluaa muuttujan osoitteenvoid annaDoubleLuku(double* luku);	//haluaa muuttujan osoitteenvoid annaTeksti(char* merkkijono);	//haluaa muuttujan osoitteenint vertaa(char* jono1, char* jono2);	//haluaa vertailtavien muuttujien osoitteetvoid lataus(); //testimielessävoid paavalikko();void tulostus(Tavara* tuote, double yhthinta, int yhtmaara);int valinta_KE();int lisays(Tavara tavarat[]);int poista(Tavara tavarat[]);void lopetus(void);//****************************************pääfunktio**************************************void main(void){	lataus();	paavalikko();	lopetus();} // ***************************************************************************************//Funktioiden määrittelyt//Tehtävänannossa annettu funktio, "trimmaa" merkkijonon alusta tyhjät merkit poisvoid trim(char* s){	char* p;	for(p=s; *p && isspace(*p); p++);	if (p>s)		strcpy(s,p);	for(p=s+strlen(s); p>s && (isspace(*p) || *p=='\0'); p--)		*p='\0';}//annaIntLuku pyytää käyttäjältä kokonaisluvun ja sisältää syötteen virheentarkistuksen//haluaa muuttujan osoitteenvoid annaIntLuku(int* luku){	//char puskuri[20];	ok=0;	temp=0;	do  //kysyt\x84\x84n kokonaislukua	{		fgets(puskuri,20,stdin);		ok=sscanf(puskuri,"%d",&temp);		fflush(stdin);		if(ok<1)			printf("Virheellinen syote, yrita uudelleen!\n");		if(temp<ANNAINT_MIN || temp>ANNAINT_MAX )		{			printf("Anna luku alueelta %d - %d :",ANNAINT_MIN,ANNAINT_MAX);			ok=0;		}	}while(ok<1);	*luku=temp; //tallennetaan vasta kunnollinen arvo}//annaDoubleLuku pyytää käyttäjältä desimaaliluvun ja sisältää syötteen virheentarkistuksen//haluaa muuttujan osoitteenvoid annaDoubleLuku(double* luku){	//char puskuri[20];	double temp2=0;	ok=0;	do  //kysyt\x84\x84n desimaalilukua	{		fgets(puskuri,20,stdin);		ok=sscanf(puskuri,"%lf",&temp2);		fflush(stdin);		if(ok<1)			printf("Virheellinen syöte, yrit\x84 uudelleen!\n");		if(temp2<ANNADOUBLE_MIN || temp2>ANNADOUBLE_MAX)		{			printf("Anna luku alueelta %d - %d :",ANNADOUBLE_MIN,ANNADOUBLE_MAX);			ok=0;		}	}while(ok<1);	*luku=temp2; //tallennetaan vasta kunnollinen arvo}//annaTeksti pyytää käyttältä syötteen, joka on maksimissaan 50 merkkiä pitkä//haluaa muuttujan osoitteenvoid annaTeksti(char* merkkijono){	//char puskuri[MAX_PITUUS+1];	ok=0;	do	{		fgets(puskuri,MAX_PITUUS,stdin);		fflush(stdin);		trim(puskuri);		if( strlen(puskuri)==0 )			printf("Nimi ei kelpaa, anna uusi nimi:");		else		//{		//	printf("Annoit: %s. \nHyväksytäänkö? (k/e)",puskuri);		//	vastaus=_getch();		//	fflush(stdin);		//	if(vastaus == 'k')				ok=1;		//	else		//		printf("\nAnna nimi: ");		//}	}while(ok!=1);	strncpy(merkkijono,puskuri,MAX_PITUUS);}//Vertailee kahta merkkijonoa. Jos jonot ovat samat, palautetaan 1, muutoin 0//haluaa vertailtavien muuttujien osoitteetint vertaa(char* jono1, char* jono2){	int pituus1=strlen(jono1);	temp=strlen(jono2);	if( pituus1 == temp )	{		for(i=0;i<pituus1;i++)		{			if( tolower(jono1[i])==tolower(jono2[i]) )				;			else				return 0;		}		return 1;	}	return 0;}void lataus() //testimielessä{	printf("\nLataus\n");	_getch();}void paavalikko(){	temp=0;	do	{		system("cls");		printf("\n*****Paavalikko*****\n");		printf("1. Lisaa tavara\n");		printf("2. Poista tavara\n");		printf("3. Tulosta kaikki tavarat ruudulle\n");		printf("4. Lataa tiedostosta\n");		printf("5. Tallenna tiedostoon\n");		printf("9. Lopetus\n");		printf(": ");		annaIntLuku(&temp);		if(temp<0 || temp>9)			printf("Virheellinen syote, yrit\x84 uudelleen!\n");		switch(temp)		{			case 1: if( lisays(tavarat) )					printf("\nLis\x84ys suoritettu.");				else					printf("\nTaulukko t\x84ynn\x84, lis\x84yst\x84 ei tehty.");				_getch();				break;			case 2: poista(tavarat);				_getch();				break;			case 3: //tulostus(tavarat);				printf("Tulostus\n");				_getch();				break;			case 4: printf("4. Lataa tiedostosta\n");					_getch();				break;			case 5: printf("5. Tallenna tiedostoon\n");					_getch();				break;		}	}while(temp !=9);}// Tulostusfunktiovoid tulostus(Tavara* tuote, double yhthinta, int yhtmaara){	int i;		printf("nimi \t\t hinta \t m\x84\x84r\x84\n"); 	// Tulostetaan otsikot	printf("============= \t ===== \t =====\n"); 	// Tulostetaan ensimmäiset väliviivat	for(i=0;i<100;i++) 				// Käydään läpi taulukko ja tulostetaan vain niiden alkioiden sisältö, joilla on nimi (=ei ole tyhjä)	{		if( strcmp(tuote[i].nimi,"")!=0)		printf("%s \t\t %2.2f \t %4d\n",tuote[i].nimi,tuote[i].hinta,tuote[i].kpl);	}	printf("============= \t ===== \t =====\n"); 	// Tulostetaan toiset väliviivat	printf("Yhteens\x84: \t %2.2f \t %4d\n",yhthinta,yhtmaara); // Tulostetaan Yhteensä -rivi}int valinta_KE(){	char c;	do	{		c = tolower(getch());		if(c == 'k')			return 1;		else if(c == 'e')			return 0;	} while(c != 'k'||c != 'e');}int lisays(Tavara tavarat[]){	double hinta;	int kpl;	int vanha = 0;	temp=0;	printf("Anna tavaran nimi: ");	annaTeksti(puskuri);	for(i=0; i<TAVARAT_KOKO; i++)	{		if(vertaa(tavarat[i].nimi, puskuri)) //Vertailufunktion pit\x84isi antaa 1 jos nimet on samoja!		{			vanha = 1; //Vanha nimi			break;		}	}	if(vanha==0) // Ei ole vanha nimi.(eli se on uusi...) Etsitään tyhjä paikka.	{		for(i=0; i<TAVARAT_KOKO; i++) //Onko käytössä?		{			if(strcmp(tavarat[i].nimi,"") == 0) //Ei ole käytössä				break;			if(i == TAVARAT_KOKO-1) //Kaikki paikat käytössä: palautetaan 0				printf("Tavaralista on t\x84ynn\x84!\n");				return 0;		}	}	strcpy(tavarat[i].nimi, puskuri);	if(vanha)	{		printf("Muutetaanko hintaa? (k/e) Vanha hinta on %d\n", tavarat[i].hinta);		temp = valinta_KE();	}	if(vanha==0 || temp)	{		printf("\nAnna tuotteen hinta: ");		annaDoubleLuku(&tavarat[i].hinta);	}	temp = 0;	if(vanha)	{		printf("Muutetaanko kappalem\x84\x84r\x84\x84? (k/e) Vanha m\x84\x84r\x84 on %d\n",tavarat[i].kpl);		temp = valinta_KE();	}	if(vanha==0 || temp)	{		printf("Anna tuotteiden m\x84\x84r\x84: ");		annaIntLuku(&tavarat[i].kpl);	}	return 1;}int poista(Tavara tavarat[]){	printf("Anna poistettavan tavaran nimi: ");	annaTeksti(puskuri);	for(i=0; i<TAVARAT_KOKO; i++)	{		if(vertaa(tavarat[i].nimi, puskuri)) /*Vertailua!*/		{			strcpy(tavarat[i].nimi, "");			printf("\nPoisto onnistui!\n");			return 1;		}	}	printf("\nPoisto ep\x84onnistui");	return 0;}void lopetus(void){		char osa1[] = {"Kiitos k\x84nnist"};	char osa2[] = {"ynnist\x84"};	int i;	for(i=0; i<strlen(osa1); i++)	{		putchar(osa1[i]);		Sleep(100);	}	for(i=0;i<5;i++)	{	Sleep(500);	putchar('\x08');	putchar('\x20');	putchar('\x08');	}	for(i=0; i<strlen(osa2); i++)	{		putchar(osa2[i]);		Sleep(100);	}	getchar();}