Ir ao conteúdo
  • Cadastre-se

meanmatheus

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

0
  1. @arfneto Eu dei uma arrumada no código, e agora eu consigo cadastrar uma disciplina do aluno e as avaliações da disciplina cadastrada, mas na hora de excluir um aluno ou uma disciplina do aluno a minha lógica não está dando certo. Se puder dar uma olhadinha, segue o código: aluno.h #ifndef ALUNO_H_INCLUDED #define ALUNO_H_INCLUDED #include "disciplinas.h" typedef struct AlunoNode { char nome[100], dataNascimento[11],matricula[10]; Disciplina * disciplinas; struct AlunoNode * next; struct AlunoNode * prev; }alunoNode; typedef struct Hnode { int size; struct AlunoNode * first; }hnode; void insertAluno(hnode * head, alunoNode * newnode); void show_list(hnode * head); void remove_node(hnode * head, alunoNode * nremove); hnode * initialize_list(hnode * head); hnode * new_list(void); alunoNode * new_node(char *matricula, char *nome, char *dataNascimento); alunoNode * search_node(hnode * head, char * matricula); #endif disciplina.h #ifndef DISCIPLINAS_H_INCLUDED #define DISCIPLINAS_H_INCLUDED #include "avaliacoes.h" typedef struct Avaliacoes { char nome[100]; int nota, valor; struct Avaliacoes * prox; }Avaliacao; typedef struct DisciplinasListas { char nome[100]; Avaliacao * avalicao; struct DisciplinasListas * prox; }Disciplina; Disciplina * removeDisciplina(Disciplina * headDisciplina); Disciplina * search_disciplina(Disciplina * disciplina, char * nome); int verificaNome(Disciplina *,char *); #endif disciplinas.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "disciplinas.h" int verificaNome(Disciplina * headDisciplina, char * disciplina) { struct DisciplinasListas * current = headDisciplina; int i=0; while(current != NULL ) { if(!strcmp(current->nome,disciplina)) return i; current = current->prox; i++; } return -1; } Disciplina * search_disciplina(Disciplina * headDisciplina, char * disciplina) { struct DisciplinasListas * current = headDisciplina; while(current != NULL ) { if(!strcmp(current->nome,disciplina)) return current; current = current->prox; } return NULL; } Disciplina * removeDisciplina(Disciplina * headDisciplina) { if(headDisciplina->prox == NULL) { printf("\nDisciplina removida!!!"); return NULL; } else { Disciplina *ultimo = headDisciplina->prox, *penultimo = headDisciplina; while(ultimo->prox != NULL) { penultimo = ultimo; ultimo = ultimo->prox; } penultimo->prox = NULL; return ultimo; } } aluno.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "aluno.h" void show_avaliacoes(Avaliacao * avaliacao) { if(avaliacao==NULL) return; Avaliacao * atual = NULL; for(atual = avaliacao; atual!= NULL; atual= atual->prox) { printf("\n%d-%d-%s",atual->valor,atual->nota,atual->nome); } } void show_disciplinas(Disciplina * disciplina) { if(disciplina==NULL) return; Disciplina * atual = NULL; for(atual = disciplina; atual!= NULL; atual= atual->prox) { printf("\n%s",atual->nome); if(atual->avalicao) show_avaliacoes(atual->avalicao); } } void show_node(alunoNode * no) { printf("\n[%s] ", no->matricula); } alunoNode * new_node(char *matricula, char *nome, char *dataNascimento) { alunoNode * newnode = (alunoNode*)malloc(sizeof(alunoNode)); if(!newnode) { printf("Memory allocation failed"); exit(1); } strcpy(newnode->dataNascimento,dataNascimento); strcpy(newnode->matricula,matricula); strcpy(newnode->nome,nome); newnode->disciplinas = NULL; newnode->prev = NULL; newnode->next = NULL; return newnode; } void insertAluno(hnode * head, alunoNode * newnode) { if (!head->first) { newnode->next = newnode->prev = newnode; head->first = newnode; } else { alunoNode * last = head->first->prev; newnode->next = head->first; head->first->prev = newnode; newnode->prev = last; last->next = newnode; } head->size+=1; return; } void remove_node(hnode * head, alunoNode * nremove) { if(head->first == nremove) { head->first = nremove->next; head->first->prev = nremove->prev; nremove->prev->next = nremove->next; } else { nremove->prev->next = nremove->next; nremove->next->prev = nremove->prev; } free(nremove); head->size-=1; return; } void show_list(hnode * head){ struct AlunoNode * current = head->first; if(current){ do{ show_node(current); if (current->disciplinas) show_disciplinas(current->disciplinas); current = current->next; }while(current != head->first); printf("\n"); } return; } alunoNode * search_node(hnode * head, char * matricula) { struct AlunoNode * current = head->first; if(current) { do { current = current->next; } while(current != head->first && strcmp(current->matricula,matricula)!=0); } if(current) { return current; } return NULL; } hnode * new_list(void) { hnode * newlist = (hnode *)malloc(sizeof(hnode)); initialize_list(newlist); return newlist; } hnode * initialize_list(hnode * head) { head->first = NULL; head->size = 0; return NULL; } main.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> #include "aluno.h" #include "disciplinas.h" void cadastrarAluno(hnode * head) { char matricula[10],nome[100],dataNascimento[11]; printf("\nForneca a matricula: "); fgets(matricula,10,stdin); setbuf(stdin,NULL); printf("\nForneca o nome: "); fgets(nome,100,stdin); setbuf(stdin,NULL); printf("\nForneca a data de nascimento: "); fgets(dataNascimento,11,stdin); setbuf(stdin,NULL); insertAluno(head,new_node(matricula,nome,dataNascimento)); } void cadastrarDisciplinas(hnode *head) { char matricula[10], disciplina[100]; printf("\nForneca a matricula do aluno: "); fgets(matricula,10,stdin); setbuf(stdin,NULL); alunoNode * busca; busca = search_node(head,matricula); if(busca) { do { printf("\nForneca o nome da disciplina: "); fgets(disciplina,100,stdin); setbuf(stdin,NULL); } while(verificaNome(busca->disciplinas,disciplina)!=-1); Disciplina * lDisciplina; if(busca->disciplinas==NULL) { Disciplina *temp = (Disciplina *)malloc(sizeof(Disciplina)); strcpy(temp->nome,disciplina); temp->avalicao =NULL; temp->prox = busca->disciplinas; busca->disciplinas = temp; } else { Disciplina *temp = (Disciplina *)malloc(sizeof(Disciplina)); strcpy(temp->nome,disciplina); temp->avalicao =NULL; lDisciplina = busca->disciplinas; temp->prox = lDisciplina->prox; lDisciplina->prox=temp; } } else { printf("\nAluno inexistente!!!"); } } void cadastrarAvaliacaoDisciplinas(hnode *head) { char matricula[10], disciplina[100], nomeAvaliacao[100]; int valor, nota; printf("\nForneca a matricula do aluno: "); fgets(matricula,10,stdin); setbuf(stdin,NULL); alunoNode * busca = search_node(head,matricula); if(busca) { printf("\nForneca o nome da disciplina: "); fgets(disciplina,100,stdin); setbuf(stdin,NULL); Disciplina * buscaDisciplina = search_disciplina(busca->disciplinas,disciplina); if(buscaDisciplina) { printf("\nForneca o nome da avaliacao: "); fgets(nomeAvaliacao,100,stdin); setbuf(stdin,NULL); printf("\nForneca o valor da avaliacao: "); scanf("%d",&valor); setbuf(stdin,NULL); do { printf("\nForneca a nota do aluno na avaliacao: "); scanf("%d",&nota); setbuf(stdin,NULL); } while(nota<0 || nota>valor); Avaliacao * lAvaliacao; if(busca->disciplinas->avalicao==NULL) { Avaliacao *temp = (Avaliacao *)malloc(sizeof(Avaliacao)); strcpy(temp->nome,nomeAvaliacao); temp->valor=valor; temp->nota=nota; temp->prox = busca->disciplinas->avalicao; busca->disciplinas->avalicao = temp; } else { Avaliacao *temp = (Avaliacao *)malloc(sizeof(Avaliacao)); strcpy(temp->nome,nomeAvaliacao); temp->valor=valor; temp->nota=nota; lAvaliacao = busca->disciplinas->avalicao; temp->prox = lAvaliacao->prox; lAvaliacao->prox=temp; } } else { printf("\nDisciplina inexistente!!!"); } } else { printf("\nAluno inexistente!!!"); } } void excluirAluno(hnode * head) { char matricula[10]; int opcao; printf("\nForneça a matricula do aluno:"); fgets(matricula, 10, stdin); setbuf(stdin,NULL); alunoNode * busca=search_node(head,matricula); if(busca!=NULL) { if(busca->disciplinas!=NULL) { printf("\nO aluno contem disciplinas cadastradas."); printf("\nDeseja continuar? 1-Sim 2-Não"); scanf("%d", &opcao); setbuf(stdin, NULL); if(opcao==1) { remove_node(head,busca); } } else { remove_node(head,busca); } } else { printf("\nAluno inexistente!!!"); } } void excluirDisciplinaAluno(hnode * head) { char matricula[10], disciplina[100]; int opcao; printf("\nForneça a matricula do aluno:"); fgets(matricula, 10, stdin); setbuf(stdin,NULL); alunoNode * busca= search_node(head,matricula); if(busca!=NULL) { printf("\nForneça a disciplina:"); fgets(disciplina, 100, stdin); setbuf(stdin,NULL); Disciplina * buscaDisciplina = search_disciplina(busca->disciplinas, disciplina); if(buscaDisciplina!=NULL) { if(buscaDisciplina->avalicao!=NULL) { printf("\nO aluno contem avaliações cadastradas."); printf("\nDeseja continuar? 1-Sim 2-Não"); scanf("%d", &opcao); setbuf(stdin, NULL); if(opcao==1) { buscaDisciplina = removeDisciplina(buscaDisciplina); } } else { buscaDisciplina = removeDisciplina(buscaDisciplina); } } else { printf("\nDisciplina inexistente!!!"); } } else { printf("\nAluno inexistente!!!"); } } int main() { hnode * list1 = new_list(); int opcao; setlocale(LC_ALL,"portuguese"); do { printf("\n1- Cadastrar aluno"); printf("\n2- Cadastrar disciplina do aluno"); printf("\n3- Cadastrar avaliação da disciplina"); printf("\n4- Listar"); printf("\n5- Excluir aluno"); printf("\n6- Excluir disciplina"); printf("\n7- Sair"); printf("\nForneca a sua opcao: "); scanf("%d", &opcao); setbuf(stdin,NULL); switch(opcao) { case 1: cadastrarAluno(list1); break; case 2: cadastrarDisciplinas(list1); break; case 3: cadastrarAvaliacaoDisciplinas(list1); break; case 4: show_list(list1); break; case 5: excluirAluno(list1); break; case 6: excluirDisciplinaAluno(list1); break; } } while(opcao!=7); return 0; }
  2. Eu estou fazendo um cadastro escolar onde eu crio uma lista duplamente encadeada circular para inserir os alunos, e uma lista simplesmente encadeada para inserir uma disciplina do aluno. Na parte de cadastrar aluno deu tudo certo, mas na hora de inserir a lista de disciplina na lista do aluno selecionado da erro. Quem puder me ajudar eu agradeço. Segue o codigo: aluno.h #ifndef ALUNO_H_INCLUDED #define ALUNO_H_INCLUDED typedef struct DisciplinasListas { char nome[100]; struct DisciplinasListas * prox; }Disciplina; struct AlunosLista{ char nome[100], dataNascimento[11],matricula[10]; Disciplina * disciplinas; struct AlunosLista * next; struct AlunosLista * prev; }; void cadastrarAluno(); void imprimirLista(); void cadastrarDisciplinas(); struct AlunosLista * buscaAluno(char *); #endif main.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include "aluno.h" typedef struct AlunosLista node; node *head = NULL, *tail = NULL; void cadastrarAluno() { node *newNode = (node *) malloc(sizeof(node)); printf("\nForneca a matricula: "); fgets(newNode->matricula,10,stdin); setbuf(stdin,NULL); printf("\nForneca o nome: "); fgets(newNode->nome,100,stdin); setbuf(stdin,NULL); printf("\nForneca a data de nascimento: "); fgets(newNode->dataNascimento,11,stdin); setbuf(stdin,NULL); newNode->disciplinas=NULL; newNode->next = newNode; newNode->prev = newNode; if(head==NULL) { head = newNode; tail = newNode; } else { tail->next = newNode; newNode->next = head; newNode->prev = tail; tail = newNode; head->prev = tail; } } void imprimirLista() { if(head==NULL) return; node *current = head; do { printf("\n%s", current->matricula); Disciplina *currentDisc = current->disciplinas; do { printf("\n%s", currentDisc->nome); currentDisc = currentDisc->prox; } while(currentDisc != current->disciplinas); current = current->next; } while(current != head); } struct AlunosLista * buscaAluno(char matricula[]) { if(head==NULL) return; node *current = head; do { if(!strcmp(current->matricula,matricula)) { return current; current = current->next; } } while(current != head); return 0; } void cadastrarDisciplinas() { char disciplina[100], matricula[10]; if(head==NULL) return; printf("\nForneça a matricula do aluno:"); fgets(matricula,10,stdin); setbuf(stdin,NULL); struct AlunosLista *busca = buscaAluno(matricula); if(busca!=0) { printf("\nForneça o nome da disciplina:"); fgets(disciplina,100,stdin); setbuf(stdin,NULL); node *current = head; do { if(current==busca) { if (!strcmp(current->matricula,matricula)) { Disciplina * lDisciplina = (Disciplina *)malloc(sizeof(Disciplina)); strcpy(lDisciplina->nome,disciplina); lDisciplina->prox = current->disciplinas; current->disciplinas->prox = lDisciplina; break; } } current = current->next; } while(current != head); } else printf("\nAluno inexistente!!!"); } int main(){ int opcao; do{ printf("\n1-cadastrar aluno"); printf("\n2-cadastrar disciplinas do aluno"); printf("\n3-listar"); printf("\n4-sair"); printf("\nForneca a sua opcao: "); scanf("%d",&opcao); setbuf(stdin,NULL); switch(opcao){ case 1: cadastrarAluno(); break; case 2: cadastrarDisciplinas(); break; case 3: imprimirLista(); break; } }while(opcao!=4); return 0; }
  3. Eu fiz uma função em C que substitui os acentos que determinada palavra passada pelo parâmetro tem. O código funciona e substitui os caracteres com acento, mas o programa em si é abortado quando executa. Quem puder me ajudar com melhorias ou sugestões eu agradeço. Segue o código: void retiraAcentos(char str[]) { char *pch; pch = strstr(str,"Á"); if (pch != NULL) strncpy(pch,"A",6); pch = strstr(str,"À"); if (pch != NULL) strncpy(pch,"A",6); pch = strstr(str,"Â"); if (pch != NULL) strncpy(pch,"A",6); pch = strstr(str,"Ã"); if (pch != NULL) strncpy(pch,"A",6); pch = strstr(str,"Ä"); if (pch != NULL) strncpy(pch,"A",6); pch = strstr(str,"É"); if (pch != NULL) strncpy(pch,"E",6); pch = strstr(str,"È"); if (pch != NULL) strncpy(pch,"E",6); pch = strstr(str,"Ê"); if (pch != NULL) strncpy(pch,"E",6); pch = strstr(str,"Ë"); if (pch != NULL) strncpy(pch,"E",6); pch = strstr(str,"Í"); if (pch != NULL) strncpy(pch,"I",6); pch = strstr(str,"Ì"); if (pch != NULL) strncpy(pch,"I",6); pch = strstr(str,"Î"); if (pch != NULL) strncpy(pch,"I",6); pch = strstr(str,"Ï"); if (pch != NULL) strncpy(pch,"I",6); pch = strstr(str,"Ó"); if (pch != NULL) strncpy(pch,"O",6); pch = strstr(str,"Ò"); if (pch != NULL) strncpy(pch,"O",6); pch = strstr(str,"Ô"); if (pch != NULL) strncpy(pch,"O",6); pch = strstr(str,"Õ"); if (pch != NULL) strncpy(pch,"O",6); pch = strstr(str,"Ö"); if (pch != NULL) strncpy(pch,"O",6); pch = strstr(str,"Ú"); if (pch != NULL) strncpy(pch,"U",6); pch = strstr(str,"Ù"); if (pch != NULL) strncpy(pch,"U",6); pch = strstr(str,"Û"); if (pch != NULL) strncpy(pch,"U",6); pch = strstr(str,"Ü"); if (pch != NULL) strncpy(pch,"U",6); pch = strstr(str,"Ç"); if (pch != NULL) strncpy(pch,"C",6); }

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