Ir ao conteúdo
  • Cadastre-se

C Cadastro De Alunos em C


VitorOlivier22

Posts recomendados

Preciso criar um programa educacional onde uma das principais funcionalidades é o cadastro de alunos, porém estou com um bug onde a repetição for não quer funcionar corretamente, já tentei refazer de varias outras formas mas o mesmo bug continua e quando faço em outro arquivo a repetição funciona corretamente. (Anexei uma imagem de como deveria funcionar).

Obs: devo utilizar vetores e matrizes para o armazenamento de dados.

Entre com o usuário: secretaria e senha: secre123 e escolha a opção 1 para visualizar o bug(bug ou incompetência minha mesmo kkkk).

Por favor alguém me ajudeee :(

 

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



//_-_-_-_-_-_PROTÓTIPOS_-_-_-_-_-_//
void login(void);
	void cabec_login(void);
void area_aluno(void);
	void cabec_aluno(void);
void area_profe(void);
	void cabec_profe(void);
void area_secre(void);
	void cabec_secre(void);
void cad_aluno(void);
	void cabec_cad_aluno(void);
main() 
{
	system("cls");
	setlocale(LC_ALL,"");
//_-_-_-_-_-_VARIAVEIS(main)_-_-_-_-_-_//
	
//_-_-_-_-_-_PROCESSAMENTO_-_-_-_-_-_//
	cabec_login();
	login();
	
}

//_-_-_-_-_-_MENU LOGIN_-_-_-_-_-_//

void cabec_login(void)
{
	printf("*************************************************\n");
	printf("*                    ENTRAR                     *\n");
	printf("*************************************************\n");
}

void login(void)
{
	char usu[11] = "n";
	char senha[9] = "n";
	char aluno[11] = "aluno";
	char senha_aln[9] = "aluno123";
	char professor[11] = "professor";
	char senha_prof[9] = "profe123";
	char secretaria[11] = "secretaria";
	char senha_sct[9] = "secre123";
	printf("Usuario: ");
	scanf("%s",&usu);
	printf("Senha: ");
	scanf("%s",&senha);
	if(strcmp(usu,aluno)==0 && strcmp(senha,senha_aln)==0)
	{
		printf("Sou aluno\n\n");
		area_aluno();
		}else{
		if(strcmp(usu,professor)==0 && strcmp(senha,senha_prof)==0)
		{
			printf("Sou professor\n\n");
			area_profe();
		}else{
			if(strcmp(usu,secretaria)==0 && strcmp(senha,senha_sct)==0)
			{
				printf("Sou da secretaria\n\n");
				area_secre();
				
			}else{
				printf("usuario invalido");
			}
		}
	}
	
}

//_-_-_-_-_-_ALUNO_-_-_-_-_-_//

void cabec_aluno()
{
	system("cls");
	printf("*************************************************\n");
	printf("*                 AREA DO ALUNO                 *\n");
	printf("*************************************************\n");
	
	
}

void area_aluno(void)
{
	cabec_aluno();
	int escolha;
	
	do {
		printf("1 - Conteudo online\n");
		printf("2 - notas e faltas\n");
		printf("3 - media final\n");
		printf("4 - curso\n");
		printf("0 - sair\n");
		
		printf("Sua escolha: ");
		scanf("%d",&escolha);
		switch(escolha) 
		{
			case 1:
				printf("conteudo")	;
			break;
			
			case 2:
				printf("notas")	;
			break;
			
			case 3:
				printf("media")	;
			break;
			
			case 4:
				printf("curso")	;
			break;
			
		}
	} while(escolha !=0);
	
	system("cls");
	cabec_login();
	login();
}

//_-_-_-_-_-_PROFESSOR_-_-_-_-_-_//

void cabec_profe()
{
	system("cls");
	printf("*************************************************\n");
	printf("*               AREA DO PROFESSOR              *\n");
	printf("*************************************************\n");
	
	
}

void area_profe()
{
	cabec_profe();
	
	int escolha;
	
	do {
		printf("1 - LANÇAR NOTA E FALTAS\n");
		printf("2 - TURMAS\n");
		printf("3 - \n");
		printf("4 - \n");
		printf("0 - sair\n");
		
		printf("Sua escolha: ");
		scanf("%d",&escolha);
		switch(escolha) 
		{
			case 1:
				printf("conteudo")	;
			break;
			
			case 2:
				printf("notas")	;
			break;
			
			case 3:
				printf("media")	;
			break;
			
			case 4:
				printf("curso")	;
			break;
			
		}
	} while(escolha !=0);
	
	system("cls");
	cabec_login();
	login();
	
	
}

//_-_-_-_-_-_SECRETARIA_-_-_-_-_-_//

void cabec_secre()
{
	system("cls");
	printf("*************************************************\n");
	printf("*                   SECRETARIA                  *\n");
	printf("*************************************************\n");
	
	
}

void area_secre()
{
	cabec_secre();
	
	int escolha;
	
	do {
		printf("1 - CADASTRAR ALUNO\n");
		printf("2 - CADASTRAR PROFESSOR\n");
		printf("3 - CADASTRAR CURSO\n");
		printf("4 - CADASTRAR DISCIPLINA\n");
		printf("0 - sair\n");
		
		printf("Sua escolha: ");
		scanf("%d",&escolha);
		switch(escolha) 
		{
			case 1:
				cad_aluno();
			break;
			
			case 2:
				printf("notas")	;
			break;
			
			case 3:
				printf("media")	;
			break;
			
			case 4:
				printf("curso")	;
			break;
			
		}
	} while(escolha!=0);
	
	main();
}

void cabec_cad_aluno()
{
	system("cls");
	printf("*************************************************\n");
	printf("*                CADASTRAR ALUNO                *\n");
	printf("*************************************************\n");
}

void cad_aluno()
{
	cabec_cad_aluno();
	static char nome[2][50];
	static char cpf[2][13];
	int i;
	
	for (i=0;i<2;i++){
		printf("Nome: \n");
		gets(nome[i]);
		printf("CPF: ");
		gets(cpf[i]);
	}
	for (i=0;i<2;i++){
		puts(nome[i]);
		puts(cpf[i]);
	}
	
	
	system("pause");
}

 

 

 

Captura de tela 2022-11-12 153606.png

  • Amei 1
Link para o comentário
Compartilhar em outros sites

//_-_-_-_-_-_PROTÓTIPOS_-_-_-_-_-_//
void login(void);
	void cabec_login(void);
void area_aluno(void);
	void cabec_aluno(void);
void area_profe(void);
	void cabec_profe(void);
void area_secre(void);
	void cabec_secre(void);
void cad_aluno(void);
	void cabec_cad_aluno(void);
main() 
{
	system("cls");
	setlocale(LC_ALL,"");
//_-_-_-_-_-_VARIAVEIS(main)_-_-_-_-_-_//
	
//_-_-_-_-_-_PROCESSAMENTO_-_-_-_-_-_//
	cabec_login();
	login();	
}

 

Esse é o início de seu programa.

 

Para um programa que devia controlar cadastros de alunos, disciplinas, professores e tal, onde está o cadastro? Onde está o aluno? Onde está a lógica?

 

Você tem um livro sobre C? Seu curso adota um livro? Teve alguma aula sobre variáveis, escopo de variáveis, funções, argumentos?

 

main() retorna um int. Seu compilador não reclamou?

 

Seu programa tem dois comentários irrelevantes. O que eles acrescentam ao programa? E para que system()? para que setlocale()? O programa nem está pronto. Não faz nada mas já tem centenas de linhas. Não escreva assim.

 

NUNCA use void funcao(void). E você só usou isso. 10 vezes.  E a lógica do programa está escondida dentro de uma função chamada login()???

 

Entenda que valores declarados dentro dessas funções só existem dentro dessas funções. 

 

Eu tenho uma lista dos problemas comuns de se ver em programas de iniciantes, para poder copiar e colar em posts como esse. Seu programa tem quase todos os erros da lista.

 

Em especial, qual o sentido de chamar main() novamente?????? Tecnicamente é até possível, mas não tem sentido algum. Dentro de uma função void que não recebe argumento algum você chama main() de novo?

 

Sobre o código

 

  • Não use acentos em nomes de variáveis ou comentários. Evite em strings  a menos que o enunciado exija. Não vai aprender nada e só vai ter problemas
  • Não use system() para nada. Não estará fazendo nada. Não há praticamente nada que possa fazer com system() que não possa fazer em C ou C++. system() foi escrita em C e o sistema quase todo também. E em geral é proibido em empresas e escolas afinal: é um risco grande de segurança. E se tem algo que você não possa inicialmente fazer em C ou C++ talvez não deva mesmo fazer.
  • evite retornar void de funções: em geral é um desperdício. E muitas vezes um erro. Use argumentos nas funções, e retorne algo delas. É mais esperto e expressivo.
  • não use gets(). Nunca. Não há nenhuma razão. fgets() é muito mais prática e segura e você não precisa se preocupar em seu programa cancelar porque o cara digitou além do que cabia no campo. E em geral o uso de gets()  é proibido mesmo, pela empresa ou pela escola. Foi marcada como obsoleta há décadas e alguns compiladores nem aceitam mais.
  • Use alguma ordem em suas funções, como a ordem alfabética por exemplo. Vai gostar disso quando seu programa tiver 50 funções ao invés de umas poucas. Muitos IDE mostram uma lista das funções, em geral na ordem em que foram declaradas, de modo que você pode clicar no nome e o editor vai direto para o código, mas se estiverem em ordem é claro que você só ganha.
  • Nunca leia valores do teclado para alimentar seu programa antes dele estar rodando. Só vai te atrasar e não acrescenta absolutamente nada. Use constantes, use funções que retornam a estrutura preenchida. Leia de arquivos: é trivial em C. Ao terminar os  testes aí sim incorpore a leitura. Um programa interativo é chato para testar. Durante o desenvolvimento ninguém quer interagir com o programa. Nunca escreva um programa interativo, mesmo que seja o objetivo final.
  • Use nomes significativos para as variáveis e fuja de coisas como aux, aux1 e aux2. E não use nomes de variáveis enormes porque em uma expressão fica muito difícil de ler.
  • Se seu programa tem um menu, entenda que o menu() deve mostrar as opções e ler e retornar a opção. Um void menu() é um desperdício.
  • scanf() foi escrita para ler entrada formatada. Não use para ler do teclado, que claramente não é entrada formatada. Só vai dar mais trabalho. Muito mais trabalho.
  • Ao usar scanf() ou alguma função da família, como fscanf() entenda que ela retorna um valor. E teste. É ingênuo deixar o programa seguir sem testar. TESTE sempre. Exemplo: para 5 especificadores --- aquelas coisas com % na frente e que não tem um asterisco nem outro '%' --- como "%d %d %f %f %d" scanf() pode ler de 0 a 5 itens ou dar erro e retornar -1. Então teste o retorno que vai estar entre -1 e 5...
  • Nunca escreva um programa interativo. Não vai aprender nada. Não vai ganhar nada. Escreva e teste todas as funções. DEPOIS de tudo testado coloque a parte interativa. isso inclui claro o eventual menu.
  • evite ler do teclado a menos que seja o objetivo do problema. Ler de arquivos é muito mais simples, seguro e fácil de reproduzir. Não há razão para ficar parado em frente a tela minutos inventando nomes de campos e coisas assim: o efeito é que vai acabar não testando direito porque é difícil controlar e repetir testes.
  • Não misture entrada de dados ou formatação com a apresentação dos dados ou a lógica do programa, Isso é um desastre para manutenção e desenvolvimento
  • Um printf() de 6 linhas é muito, mas muito melhor que 6 printf() de 1 linha. E se só vai mostrar o texto puts() é ainda melhor e dezenas de vezes mais rápido que uma série de printf().

Sugiro reescrever, aos poucos, em torno dos dados. Comece por um cadastro.


 

 

 

 

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@arfneto Muito Obrigado pela total sinceridade e pontos não desenvolvidos, como sou um iniciante preciso disto. E respondendo sua pergunta em relação a faculdade, tive aulas sobre tudo isso e pelo que incrível que pareça o programa esta dentro da forma que me foi ensinado kkk, variáveis, escopos e etc me foram passados desta forma. Enfim, vou aplicar o que você me passou, obrigado novamente! 🙂

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

31 minutos atrás, VitorOlivier22 disse:

E respondendo sua pergunta em relação a faculdade, tive aulas sobre tudo isso e pelo que incrível que pareça o programa esta dentro da forma que me foi ensinado kkk, variáveis, escopos e etc me foram passados desta forma

 

Não acho estranho, e isso explica porque minha lista de 20 problemas se repete em programas com tanta facilidade. Existe um consenso aparente de como ensinar isso que é bem afastado da realidade de eficiência e de empresas e livros e toda a montanha de códigos abertos de qualidade a que a gente em acesso hoje em dia.

 

Está muito errado do modo te foi ensinado e vai ter, como está tendo, um trabalho do inferno para terminar programas simples. E pouco vai aproveitar para o proximo programa. Sugiro considerar as coisas que eu listei.

 

De volta ao programa

 

Seu programa tem um cadastro de alunos. Menciona conceitos como notas, media, professores e funcionários. E disciplinas. Onde está tudo isso em seu código? É por aí que começa seu programa. Deve construir um modelo que expresse essas coisas. Não menos.

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@arfnetoNa minha logica eu precisaria inicialmente cadastrar um aluno para depois ter quem para poder lançar notas e etc... vou citar os requisitos do trabalho. Seria de grande ajuda também a indicação de livros que podem me ajudar. 

Citação

1.5. DESENVOLVIMENTO DO PROGRAMA
O programa consiste em:
1) Telas para cadastros de cursos, disciplinas, turmas, alunos e
professores. Os dados podem ser armazenados em variáveis
simples, vetores ou matrizes (o ideal é armazenar todos cadastrados
em vetores ou matrizes). Considerem que o número de cursos é
de até 20. O número de disciplinas é de até 300. O número de
turma é de 100. A quantidade de alunos é de até 500. O número
de professores é de até 50.
a. Para cada curso deve ser registrado os seguintes dados:
código do curso, nome do curso, carga horária total, área de
conhecimento (As áreas do conhecimento podem ser:
Ciências Exatas e da Terra; Ciências Biológicas; Engenharias;
Ciências da Saúde; Ciências Agrárias; Linguística, Letras e
Artes; Ciências Sociais Aplicadas; e Ciências Humanas.).
b. Para cada disciplina deve ser registrado os seguintes
dados: código, nome da disciplina, carga horária semanal,
carga horária total, tipo (Presencial, EAD).
c. Para cada turma deve ser registrado os seguintes dados:
código da turma, nome da turma, período (manhã, tarde e
noite), limite máximo de alunos matriculados.
d. Para cada aluno deve ser registrados os seguintes dados:
número de matrícula, nome completo, RG, CPF, nome do pai,
nome da mãe, telefone, e e e-mail.
e. Para cada professor deve ser registrados os seguintes
dados: número da funcional, nome completo, titularidade

(especialista, mestre, doutor), RG, CPF, CPTS, telefone e e-
mail.

2) Permitir para cada cadastro, a escrita dos dados na tela para geração
de resultados.

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Se você tinha isso para começar como o seu programa chegou a quase 300 linhas e não tem nada desses dados? Comece pelos dados e não por sequencias de printf() ou limpando a tela e cuidando de coisas como acentuação. Só perde tempo assim. Não escreva um programa interativo. Apenas resolva as funções. Isso é o que importa. 

Seu curso não tem um livro-texto? Em geral os cursos tem algo assim.

Não sei que livro recomendar 😞. Mas posso passar adiante essa recomendação :
 

Programming in C, Fourth Edition
Stephen G. Kochan
Pearson Education, 2015
ISBN 0-321-77641-0

 

É o recomendado pelo curso CS50 de Harvard, e é provavelmente o mais conhecido no planeta. Se está bom para eles deve ser bem suficiente para todo mundo

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@VitorOlivier22 Veja se consegue esse de que falei então.

 

Quanto ao programa, como eu disse, você tem a definição: comece pelos dados. Não escreva uma linha de código sem os dados.

Sabe usar estruturas? Simples vetores de estruturas são o trivial para representar seus dados

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!