Jump to content

Programa de clube de video para iniciantes


JoaoNascimento
 Share

Recommended Posts

O seguinte programa gera um clube de video, ou algo parecido, permite ao utilizador que ele faça pesquisas sobre os dados em memoria...

O programa pode ser melhorado isto é apenas o básico para os que tem menos experiencia possam ver...

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

void pesquisa_nome(char nome[100][50],char categoria[100][50],float preco[100],int ano[100],char editora[100][50],char realizador[100][50],int N)
{
char nome_ref[50];
int i;

fflush(stdin);
printf("Insira o nome do filme que quer procurar: "); gets(nome_ref);

for (i=0;i<N;i++)
{
	if (!strcmp(nome[i],nome_ref))
	{
		printf("-------------------------------------------------------------------------------\n");
		printf("Nome filme:%s\nCategoria:%s\nPreço:%.2f\nAno:%d\nEditora:%s\nRealizador:%s\n",nome[i],categoria[i],preco[i],ano[i],editora[i],realizador[i]);
		printf("-------------------------------------------------------------------------------\n\n");
	}
	else
		puts("O ficheiro que pretende visulizar não se encontra no registo: ");
}
system("pause");
}

void pesquisa_categoria(char nome[100][50],char categoria[100][50],float preco[100],int ano[100],char editora[100][50],char realizador[100][50],int N)
{
char categoria_ref[50];
int i;

fflush(stdin);
puts("Insira a categoria do filme que quer procurar: "); gets(categoria_ref);

for (i=0;i<N;i++)
{
	if (!strcmp(categoria[i],categoria_ref))
	{
		printf("-------------------------------------------------------------------------------\n");
		printf("Nome filme:%s\nCategoria:%s\nPreço:%.2f\nAno:%d\nEditora:%s\nRealizador:%s\n",nome[i],categoria[i],preco[i],ano[i],editora[i],realizador[i]);
		printf("-------------------------------------------------------------------------------\n\n");
	}
	else
		puts("O ficheiro que pretende visulizar não se encontra no registo: ");
}
system("pause");
}

void pesquisa_ano(char nome[100][50],char categoria[100][50],float preco[100],int ano[100],char editora[100][50],char realizador[100][50],int N)
{
int ano_ref[100];
int i;

fflush(stdin);
puts("Insira o ano do filme que quer procurar: "); scanf("%d",&ano_ref);

for (i=0;i<N;i++)
{
	if (ano_ref==ano[i])
	{
		printf("-------------------------------------------------------------------------------\n");
		printf("Nome filme:%s\nCategoria:%s\nPreço:%.2f\nAno:%d\nEditora:%s\nRealizador:%s\n",nome[i],categoria[i],preco[i],ano[i],editora[i],realizador[i]);
		printf("-------------------------------------------------------------------------------\n\n");
	}
	else
		puts("O ficheiro que pretende visulizar não se encontra no registo: ");
}
system("pause");
}

void pesquisa_editora(char nome[100][50],char categoria[100][50],float preco[100],int ano[100],char editora[100][50],char realizador[100][50],int N)
{
char editora_ref[50];
int i;

fflush(stdin);
puts("Insira o nome do filme que quer procurar: "); gets(editora_ref);

for (i=0;i<N;i++)
{
	if (!strcmp(editora[i],editora_ref))
	{
		printf("-------------------------------------------------------------------------------\n");
		printf("Nome filme:%s\nCategoria:%s\nPreço:%.2f\nAno:%d\nEditora:%s\nRealizador:%s\n",nome[i],categoria[i],preco[i],ano[i],editora[i],realizador[i]);
		printf("-------------------------------------------------------------------------------\n\n");
	}
	else
		puts("O ficheiro que pretende visulizar não se encontra no registo: ");
}
system("pause");
}

void pesquisa_realizador(char nome[100][50],char categoria[100][50],float preco[100],int ano[100],char editora[100][50],char realizador[100][50],int N)
{
char realizador_ref[50];
int i;

fflush(stdin);
puts("Insira o nome do filme que quer procurar: "); gets(realizador_ref);

for (i=0;i<N;i++)
{
	if (!strcmp(realizador[i],realizador_ref))
	{
		printf("-------------------------------------------------------------------------------\n");
		printf("Nome filme:%s\nCategoria:%s\nPreço:%.2f\nAno:%d\nEditora:%s\nRealizador:%s\n",nome[i],categoria[i],preco[i],ano[i],editora[i],realizador[i]);
		printf("-------------------------------------------------------------------------------\n\n");
	}
	puts("O ficheiro que pretende visulizar não se encontra no registo: ");
}
system("pause");
}

int main()
{
int op=0,i,N,op2=0;
int ano[100];
char nome[100][50], categoria[100][50], editora[100][50], realizador[100][50];
float preco[100];

while (op!=3)
{
	system("cls");
	printf("\t\t\tSistema de Apoio a Clube de Video\n");
	printf("\t\t\t\t\t\t\t\t\t\t\t\t\t");
	printf("----------------------------------");
	printf("\n\t\t\t|1 Inserir dados de filmes       |\n");
	printf("\n\t\t\t|2 Pesquisas                     |\n");
	printf("\n\t\t\t|3 Sair                          |\n");
	printf("\t\t\t\t\t\t\t\t\t\t\t\t\t");
	printf("----------------------------------");
	puts("\nInsira a opçao pretendida: ");
	scanf("%d",&op);

	system("cls");
	switch (op)
	{
	case 1:
		{
			puts("Quantos filmes quer introduzir: ");	scanf("%d",&N);
			system("cls");
			for(i=0;i<N;i++)
			{
				fflush(stdin);
				puts("Insira o nome do filme: ");
				gets(nome[i]);

				fflush(stdin);
				puts("Insira a categoria do filme: ");
				gets(categoria[i]);

				fflush(stdin);
				puts("Insira o preço do filme: ");
				scanf("%f",&preco[i]);

				fflush(stdin);
				puts("Insira o ano do filme: ");
				scanf("%d",&ano[i]);

				fflush(stdin);
				puts("Insira a editora do filme: ");
				gets(editora[i]);

				fflush(stdin);
				puts("Insira o nome do realizador: ");
				gets(realizador[i]);
				system("cls");

				printf("Ja introduziu %d de %d\n",i+1,N);

			}
			system("cls");

			for(i=0; i<N; i++)
			{
				printf("-------------------------------------------------------------------------------\n");
				printf("Nome filme:%s\nCategoria:%s\nPreço:%.2f\nAno:%d\nEditora:%s\nRealizador:%s\n",nome[i],categoria[i],preco[i],ano[i],editora[i],realizador[i]);
				printf("-------------------------------------------------------------------------------\n\n");
			}
			fflush(stdin);
			system("pause");
			break;
		}

	case 2: 
		{
			system("cls");
			printf("\t\tSistema de Apoio a Clube de Video - Pesquisas\n");
			printf("\t\t\t\t\t\t\t\t\t\t\t\t\t");
			printf("----------------------------");
			printf("\n\t\t\t|1 Nome filme              |\n");
			printf("\n\t\t\t|2 Categoria               |\n");
			printf("\n\t\t\t|3 Ano Edição              |\n");
			printf("\n\t\t\t|4 Editora                 |\n");
			printf("\n\t\t\t|5 Realizador              |\n");
			printf("\n\t\t\t|6 Sair                    |\n");
			printf("\t\t\t\t\t\t\t\t\t\t\t\t\t");
			printf("----------------------------");
			fflush(stdin);
			puts("\nInsira a opçao pretendida: ");
			scanf("%d",&op2);


			switch (op2)
			{
			case 1:
				{
					system("cls");
					pesquisa_nome(nome,categoria,preco,ano,editora,realizador,N);
					break;
				}
			case 2:
				{
					system("cls");
					pesquisa_categoria(nome,categoria,preco,ano,editora,realizador,N);
					break;
				}
			case 3:
				{
					system("cls");
					pesquisa_ano(nome,categoria,preco,ano,editora,realizador,N);
					break;
				}
			case 4:
				{
					system("cls");
					pesquisa_editora(nome,categoria,preco,ano,editora,realizador,N);
					break;
				}
			case 5:
				{
					system("cls");
					pesquisa_realizador(nome,categoria,preco,ano,editora,realizador,N);
					break;
				}

			}


		}
	}

}

}

Atenção:O seguinte codigo não está coemantado, quer necessitar dele comentado que avise.

Link to comment
Share on other sites

no entanto fgets eh dirigido a ficheiros, não vai ler ah consola...

já agora, se poderes, posta um exemplo igual a este

#include 

int main(void) {
char s_1[8], s_2[8], s_3[8];
gets(s_1);
gets(s_2);
gets(s_3);
printf("%s\n%s\n%s\n", s_1, s_2, s_3);
return 0;
}

em que uses outra função mas segura

(neste caso substituir gets -> fgets)

"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Link to comment
Share on other sites

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

int main(void) {
char s_1[9], s_2[9], s_3[9];

fgets(s_1,8,stdin);
fgets(s_2,8,stdin);
fgets(s_3,8,stdin);

s_1[strlen(s_1)-1]='\0';
s_2[strlen(s_2)-1]='\0';
s_3[strlen(s_3)-1]='\0';

printf("%s\n%s\n%s\n", s_1, s_2, s_3);
return 0;
}

com o fgets o último caracter é '\n' portanto tens de substituir por '\0'

Link to comment
Share on other sites

Ah a minha unica duvida era que ficheiro utilizar, mas o stdin faz todo o sentido 😄

Seja como for devias ter postado logo... Dar um exemplo de como esta errado E de como esta correcto eh sempre bom para as pessoas entenderem melhor e corrigirem os habitos

Já agora, les 8+1 (9) caracteres no fgets?

Rasão especial? Eu tb já trabalhei com isto mas agora estou um bocadinho esquecido

fgets(s_1,9,stdin);

Supostamente ele iria ler 7 caracteres mais o \0

Se ultrapassar, em vez de ter \n ou \0 teria o 8º caracter, não?

(depois arranja-se o ultimo caracter, como tu fizeste)

"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Link to comment
Share on other sites

Fica aí então joão!

No fundo, o gets faz o mesmo que o fgets, mas no gets vai logo buscar ao stdin, enquanto no fgets podes especificar o ficheiro

ADICIONALMENTE o fgets controla o numero de caracteres que lês, portanto evita o stack overflow...

ou seja, o gets eh um fgets ao stdin...

Ja agora... isto não devia ser postado nalgum sitio para dicas para melhor programação ou assim? Bem que eh algo importante!

"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Link to comment
Share on other sites

Fica aí então joão!

No fundo, o gets faz o mesmo que o fgets, mas no gets vai logo buscar ao stdin, enquanto no fgets podes especificar o ficheiro

ADICIONALMENTE o fgets controla o numero de caracteres que lês, portanto evita o stack overflow...

ou seja, o gets eh um fgets ao stdin...

Ja agora... isto não devia ser postado nalgum sitio para dicas para melhor programação ou assim? Bem que eh algo importante!

Primeiro, o que querias dizer era buffer overflow, stack overflow acontece quando a *stack* fica preenchida, buffer overflow ocorre quando o *buffer* fica preenchido. Não confundas as coisas.

Depois não percebi a afirmação de que a função gets é a função fgets ao stdin.

here since 2009

Link to comment
Share on other sites

obrigado pela correcção

eu gosto de inventar, eh mais divertido xDDDDD

jk... mas tds aprendemos um bocado, penso que tava distraido a escrever isso

"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Link to comment
Share on other sites

sempre tive a noção que o stdin é , no fundo, o buffer do input

fazer um fgets ao stdin seria o mesmo que fazer exactamente o mesmo que gets

apesar de o fgets tambem ler o \n, mas isso é apenas um promenor a ser considerado

como tambem disse, o fgets serve para ler uma string de um ficheiro, o gets eh para ler da consola...

no entanto, podemos usar o fgets para ler da consola tambem, indo buscar ao stdin

Penso eu... estou errado?

"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.