wilsonppjr
(usa Ubuntu)
Enviado em 10/09/2010 - 20:22h
Esse é um código incicial para um cadastro de alunos, estamos com problemas na visualização dos dados que passam pela função InsereInicio, e InsereDepois, onde os dados que são strings do tipo char depois de serem inseridos no programa, não conseguem ser visualizados na função PercorreLista, se alguem puder ajudar, grato desde já, abraço.
/* Wilson Pedroso email: wilsonppjr@gmail.com
Universidade de Franca */
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
struct aluno //Declaração da estrutura aluno
{
int codigo;
char nome[50], endereco[50], curso[50], periodo[50]; //Atributos da estrutura aluno
struct aluno *proximo;
};
struct aluno *inicio; //Primeiro Matricula
////////////////////////////////////////////////////////////////////////////////
//SubRotinas Utilizadas
void insereInicio(int codigo, char nome[50], char endereco, char curso, char periodo);
void removeInicio();
void insereDepois(struct aluno *a, int co, char n, char e, char c, char p);
void remove_depois(struct aluno *a);
void percorreLista();
void insereOrdenado(int codigo,char nome,char endereco,char curso,char periodo);
void remove_ordenado(int codigo);
void cadastra();
void escreveArquivo(int codigo, char nome, char endereco, char curso, char periodo);
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
main(){
struct aluno *a; //Declaração da Estrutura Aluno
int x = 1;
int codigo = 0;
char nome[50], endereco[50], curso[50], periodo[50]; //Declaração dos atributos
a = (struct aluno*)malloc(sizeof(struct aluno)); //Alocando espaço na memória para a estrutura Aluno
while(x != 6)
{
printf("\n*************** Matricula de Aluno ***************\n\n\n");
//Menu
printf("Para cadastrar um novo aluno Ordenadamente.......Digite 1:\n\n");
printf("Para imprimir a lista de alunos..................Digite 2:\n\n");
printf("Para remover um Aluno............................Digite 3:\n\n");
printf("Para sair........................................Digite 4:\n\n");
printf("Escolha: ");
scanf("%d", &x);
system("cls"); //Limpa a Tela
if(x == 1) //Insere um novo cadastro ordenadamente
cadastra();
if(x == 2)//Imprime a lista de alunos
percorreLista();
if(x == 3)// Remove Aluno Ordenadamente
{
printf("Digite o codigo: ");
scanf("%d", &codigo);
remove_ordenado(codigo);
}
if(x == 4)// Sair
{
system("cls"); //Limpa a Tela
printf("\n\nPressione qualquer tecla para sair....");
getch();
}
if(x != 1 && x != 2 && x != 3 && x != 4)
{
system("cls"); //Limpa a Tela
printf("\n\nValor Invalido!\n\nDigite Novamente\n\n");
}
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void insereInicio(int codigo, char nome, char endereco, char curso, char periodo){// Insere um novo Aluno no ínicio da Fila, Passando todos atributos por referência
struct aluno *aux;
aux =(struct aluno*)malloc(sizeof(struct aluno));
fflush(stdin);
aux->codigo = codigo;
fflush(stdin);
aux->nome = nome;
fflush(stdin);
aux->endereco = endereco;
fflush(stdin);
aux->curso = curso;
fflush(stdin);
aux->periodo = periodo;
fflush(stdin);
aux->proximo = inicio;
inicio = aux;
}
void removeInicio(){ // Remove o primeiro registro
struct aluno *aux;
aux = inicio;
inicio = inicio->proximo;
free(aux);
}
////////////////////////////////////////////////////////////////////////////////
void insereDepois(struct aluno *a, int codigo, char nome, char endereco, char curso, char periodo){ //Insere uma matrícula após outra matrícula específica
struct aluno *aux,c;
aux =(struct aluno*)malloc(sizeof(struct aluno));
fflush(stdin);
aux->codigo = codigo;
fflush(stdin);
aux->nome = nome;
fflush(stdin);
aux->endereco = endereco;
fflush(stdin);
aux->curso = curso;
fflush(stdin);
aux->periodo = periodo;
fflush(stdin);
aux->proximo = a->proximo;
a->proximo = aux;
}
void remove_depois(struct aluno *a){ // Remove uma matrícula após outra matrícula específica
struct aluno *aux;
aux = a->proximo;
a->proximo = aux->proximo;
free(aux);
}
////////////////////////////////////////////////////////////////////////////////
void percorreLista() //Faz a listagem de todas matriculas da Estrutura, e as imprimem
{
struct aluno *p;
p = inicio;
printf("\n*************** Alunos Matriculados ***************\n\n\n");
while(p != NULL)
{
fflush(stdin);
printf("Codigo = %d \n\n", p->codigo);
fflush(stdin);
printf("Nome = %s\n\n" ,p->nome);
fflush(stdin);
printf("Endereco = %s \n\n" , p->endereco);
fflush(stdin);
printf("Curso = %s \n\n", p->curso);
fflush(stdin);
printf("Periodo = %s \n\n", p->periodo);
fflush(stdin);
}
getch();
}
////////////////////////////////////////////////////////////////////////////////
void insereOrdenado(int codigo, char nome, char endereco, char curso, char periodo)
/*Insere um valor na lista de alunos de acordo com seu código*/
{
struct aluno *p, *q;
p = inicio;
if((p == NULL)||(codigo < p->codigo))
{
insereInicio(codigo, nome[50], endereco, curso, periodo);
return;
}
q = p;
while((q != NULL) && (q->codigo < codigo))
{
p = q;
q = p->proximo;
}
if((q == NULL) || (q->codigo > codigo))
insereDepois(p,codigo, nome, endereco, curso, periodo);
else
printf("\nElemento já Existe");
}
void remove_ordenado(int codigo)
{
struct aluno *p, *q;
p = inicio;
if (p == NULL)
{
printf("\nLista Vazia!");
getch();
return;
}
if (codigo == p->codigo)
{
removeInicio();
return;
}
q = p;
while(q != NULL && q->codigo < codigo)
{
p = q;
q = p->proximo;
}
if (q!=NULL && q->codigo == codigo)
remove_depois(p);
else
{
printf("\nElemento nao Cadastrado!");
}
}
////////////////////////////////////////////////////////////////////////////////
void escreveArquivo(int co, char n, char e, char c, char pe)
{
FILE *f1;
struct aluno *p;
if((f1 = fopen("C:\\Aluno.txt","w")) == NULL)
{
printf("Arquivo nao pode ser aberto.");
getch();
}
fprintf(f1, "%d\n" ,co);
fprintf(f1, "%s\n" ,n);
fprintf(f1, "%s\n" ,e);
fprintf(f1, "%s\n" ,c);
fprintf(f1, "%s\n" ,pe);
printf("Cadastrado com Sucesso");
fclose(f1);
getch();
}
////////////////////////////////////////////////////////////////////////////////
void cadastra(){
int codigo;
char nome[50], endereco[50], curso[50], periodo[50];
printf("\n*************** Matricula de Aluno ***************\n\n\n");
fflush(stdin);
printf("Digite o codigo: ");
scanf("%d", &codigo);
fflush(stdin);
printf("Digite o Nome: ");
gets(nome);
fflush(stdin);
printf("Digite o Curso: ");
gets(curso);
fflush(stdin);
printf("Digite o Endereco: ");
gets(endereco);
printf("Digite o Periodo: ");
gets(periodo);
fflush(stdin);
system("cls"); //Limpa a Tela
insereOrdenado(codigo, nome[50],endereco[50], curso[50], periodo[50]);
//escreveArquivo(codigo, nome[50], endereco[50], curso[50], periodo[50]);
}