Ir ao conteúdo
  • Cadastre-se

C Structs em C (como ordenar vários registros)


Émylle Andressa

Posts recomendados

Galera, bom dia!

Preciso da ajuda de vocês aqui, vou explicar o contexto:

Eu preciso que meu código seja capaz de cadastrar os cursos de uma universidade. E para cada curso, exista a possibilidade de cadastrar 10 propostas (no máximo). Para cada proposta o usuário deve informar o TÍTULO, DATA, HORÁRIO, TIPO e PROPONENTES (no máximo 5, que podem ser tanto alunos como professores). Sendo que para um mesmo curso, não pode existir mais de uma propostas cadastrada.

No final, tem que ser exibido todas as propostas de cada curso, de uma forma organizada. O que eu preciso fazer?

Por enquanto meu código está assim:

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

struct propostas
{
    char titulo[200];
    char data[200];
    char horario[200];
    char tipoDeApres[200];
    int cod; 
}logP[10];

struct responsaveis
{
	char proponentes[200];
}logR[5];

struct cursosUniv
{
    char cursos[200];
    struct propostas realizar;
    struct responsaveis componentes;
}log[27];

//typedef struct cursosUEFS log;

//Declaração das funções a serem utilizadas
int menu_por_area(); //Função do menu por área de conhecimento
int sub_menu(char tabela_de_cursos[][200], int menor, int maior, int j); //Função que exibe o sub menu das Áreas de Conhecimento
void EscolhaData(int a, char data[][11]); //Função que guarda a data escolhida pelo usuário
void EscolhaHorario(int a, char tabela_de_horarios[][200]); //Função que guarda o horário escolhido pelo usuário
void EscolhaTipo(int a, char tipoDeApres[][12]); //Função que guarda o tipo de apresentação escolhido pelo usuário
void EscolhaTitulo(int a); //Função que guarda o título da proposta digitado pelo usuário

int main(){

	setlocale(LC_ALL, "Portuguese"); //Função da biblioteca <locale.h> que permite suporte a língua portuguesa
	char tabela_de_horarios[18][200] = {"8:00Hs às 9:00Hs","9:00Hs às 10:00Hs","10:00Hs às 11:00Hs", "11:00Hs às 12:00Hs", "13:00Hs às 14:00Hs","14:00Hs às 15:00Hs", "15:00Hs às 16:00Hs", "16:00Hs às 17:00Hs", "18:00Hs às 19:00Hs", "19:00Hs às 20:00Hs"}; //matriz com os horários disponíveis para apresentação
	char data[2][11]={"23/10/2017", "24/10/2017"}; //Matriz com as datas disponíveis para apesentação
	char tipoDeApres[4][12]={"ORAL", "OFICINA", "PÔSTER", "LABORATÓRIO"}; //Matriz com os tipos de apresentação da proposta
	char tabela_de_cursos[28][200] = {"Lic. em Letras com Francês", "Lic. em Letras com Inglês", "Lic. em Letras Vernáculas", "Lic. em Letras: Português e Espanhol", "Lic. em Música", "Administração", "Ciências Contábeis", "Ciências Econômicas", "Direito", "Lic. e Bach. em Filosofia", "Lic. e Bach. em Geografia", "Lic. em História", "Lic. em Pedagogia", "Psicologia", "Engenharia Civil", "Engenharia de Alimentos", "Engenharia de Computação", "Lic. em Química", "Lic. e Bach. em Física", "Lic. em Matemática", "Agronomia", "Bach. em Ciências Biológicas","Enfermagem","Farmácia","Lic. em Ciências Biológicas","Lic. em Educação Física","Medicina","Odontologia"};
    int cod, cods = 0; //Varíavel que guarda o número correspondente a escolha do usuário ao curso
	int i,j=0, es, apr, hora, a=0, opcao;
	//struct cursosUniv log[27];
	
	do{
  	cod = menu_por_area(); // variável recebe retorno da função Menu por Área de Conhecimento
  	
  	//Neste bloco o usuário é direcionado para o sub menu dos cursos da área de conhecimento escolhida
	if(cod==1){ 
		cods = sub_menu(tabela_de_cursos, 0, 4, j);
	}
	
	else if(cod==2){
	  	cods = sub_menu(tabela_de_cursos, 5, 13, j);
	}
	
	else if(cod==3){
	  	cods = sub_menu(tabela_de_cursos, 13, 19, j);
	}
	
	else if(cod==4){
		cods = sub_menu(tabela_de_cursos, 20, 26, j);	
	}
	//Fim das condições de escolha do menu cursos
	//Criar uma condição de repetição para sair do curso cadastrado e escolher outro, voltando para o menu inicial
	
	EscolhaData(a, data);
	//Aqui jaz a parte em guarda a data da proposta
	
	EscolhaHorario(a, tabela_de_horarios);
	//Aqui jaz a escolha de horários
	
	EscolhaTipo(a, tipoDeApres);
	//Aqui jaz a escolha do tipo de apresentação

	EscolhaTitulo(a);
	//Aqui jaz a escolha do título da proposta
	printf("Cadastrar novamente? 1-NÃO / 2-SIM");
	scanf("%d", &opcao);
	system("cls");
	a++;
	j++;
	}while(opcao==2);
	
	system("cls");
	

	
	for(j=0; j<=1; j++){
		if(log[j].cursos!=""){
			printf("CURSO cadastrado = %s\n", log[j].cursos);
		}
			for(a=0; a<=1; a++){
				printf("TÍTULO da PROPOSTA = %s\n", log[a].realizar.titulo);
				printf("DATA = %s\n", log[a].realizar.data);
				printf("HORÁRIO = %s\n", log[a].realizar.horario);
				printf("TIPO = %s\n", log[a].realizar.tipoDeApres);
			}
	}	
			

	
	system("pause");
	
	//printf("Deseja continuar cadastradando?");
	//scanf("%d", &escolha);
	//}while(escolha==1);
	
	return 1;
} //FIM DA MAIN

int menu_por_area(){
	int cod;
	//Início do menu das áreas de conhecimento
	printf("\t\t||||||||||||1º FEIRA DE GRADUAÇÃO|||||||||||||||\n");
	printf("\t|||||UNIVERSIDADE ESTUADUAL DE FEIRA DE SANTANA - UEFS|||||\n");
  	printf("\n<1> - LETRAS E ARTES\n<2> - CIÊNCIAS HUMANAS E FILOSOFIA\n<3> - TECNOLOGIA E CIÊNCIAS EXATAS\n<4> - CIÊNCIAS NATURAIS E DA SAÚDE\n");
  	scanf("%d", &cod);
  	system("cls");	
  	return (cod);
}

int sub_menu(char tabela_de_cursos[][200], int menor, int maior, int j){
	int i, cods;
	for(i=menor;i<=maior;i++){
		printf("<%d> - %s\n",i, tabela_de_cursos[i]);
	}
	printf("Selecione sua opção:\n");
	scanf("%d", &cods);
	//verificar se já cadastraram o curso escolhido
	
/*int verificacao(char tabela_de_cursos[][200]){
	int cont = 0;
    while ( cont <= 27)
    {
        if ( log[cont].cursos == tabela_de_cursos[cods]){
        	return cont;	
		}
        cont++;
    }
	return(1);
} */
	strcpy(log[j].cursos, tabela_de_cursos[cods]);
	
	tabela_de_cursos[cods]
	
	
	j++; //era um j aqui
	return cods;
}

void EscolhaData(int a, char data[][11]){
	int i, j;
	system("cls");
	printf("Faça o cadastro da sua proposta!\n");
	printf("Data de Apresentações:\n");
	for(i=0;i<=1;i++){
		printf("<%d> - %s\n", i, data[i]);
	}
	printf("Escolha sua opção:\n");
	scanf("%d", &j);
	strcpy(log[a].realizar.data, data[j]);
	a++;
}

void EscolhaHorario(int a, char tabela_de_horarios[][200]){
	int i, hora;
	system("cls");
	printf("Horários das Propostas:\n");
	for(i=0;i<=9;i++){
		printf("<%d> - %s\n", i, tabela_de_horarios[i]);
	}
	printf("Escolha sua opção:\n");
	scanf("%d", &hora);
	strcpy(log[a].realizar.horario, tabela_de_horarios[hora]);
}

void EscolhaTipo(int a, char tipoDeApres[][12]){
	int i, es;
	system("cls");
	printf("Tipos das Propostas:\n");
	for(i=0;i<=3;i++){
		printf("<%d> - %s\n", i, tipoDeApres[i]);
	}
	printf("Escolha sua opção:\n");
	scanf("%d", &es);
	strcpy(log[a].realizar.tipoDeApres, tipoDeApres[es]);
}

void EscolhaTitulo(int a){
	system("cls");
	printf("Digite o título da proposta: ");
	fflush(stdin);
	gets(log[a].realizar.titulo);
}

 

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

@Émylle Andressa Seu código precisa de uma organizada, tente focar nas etapas e como simplifica-las. Um código organizado e limpo sempre vai ser bem reconhecido. Enfim, segue algumas etapas para você começar:

 

1 - Determinar como vai ser armazenado/cadastrado/acessado:

     a - cursos

     b - propostas

 

Dica: não misture struct's com vetores, escolha apenas um. Já que você apenas precisa cadastrar cursos, talvez até remover.

 

2 - Criar 'menu principal' em duas fases:

     a - Cadastro de Cursos

     b - Cadastro de Propostas

 

3 - Criar função para cadastrar cursos.

Dica: Use struct, pois você poderá acrescentar mais informações sobre o curso.

 

4 - Criar função para cadastrar propostas.

Dica: Primeiro peça ao usuário a quantidade de propostas, depois use do...while.

 

Se você seguir essas etapas você vai conseguir entender melhor como proceder.

  • 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...