/* Autor: Carlos Henrique de Oliveira Monteiro André Contato: carloschoma@gmail.com Exercício: Prática 9 _ 1e2 Data: 2017-06-06 */ #include #include #include typedef struct aluno { char nome[20]; int idade; }tAluno; //a) Criar/abrir um arquivo tipado. Este procedimento deve perguntar para o usuário o nome do arquivo. FILE *CriarAbrirArquivo() { FILE *arquivo; char nomeArquivo[20]; printf("Informe o Nome do Arquivo: "); scanf("%s", nomeArquivo); arquivo = fopen(nomeArquivo, "a+"); if (arquivo == NULL) { printf ("Houve um erro ao abrir o arquivo.\n"); } else { printf ("Arquivo Criado/Aberto com sucesso!\n"); } return arquivo; } //b) Inserir registros em um arquivo (já aberto anteriormente). O usuário deve poder escrever quantos registros desejar até um número máximo de 50 registros. void escreverArquivo(FILE *arquivo, int *qtd) { tAluno novo; char op; do{ printf("Informe o nome: "); scanf("%s", novo.nome); printf("Informe a idade: "); scanf("%d",&novo.idade); fwrite(&novo, sizeof(tAluno), 1, arquivo); qtd++; printf("Deseja continuar (s/n)? "); scanf(" %c", &op); }while (op == 's'); } //c) Imprimir na tela o conteúdo de um determinado arquivo de registros. void imprimirArquivo(FILE *arquivo) { tAluno aux; printf("NOME\tIDADE\n"); fseek(arquivo, 0, SEEK_SET); // move para o início while(fread(&aux, sizeof(tAluno), 1, arquivo) == 1){ printf("%s\t%d\n",aux.nome,aux.idade); } } //d) Ordenar os registros do arquivo em ordem alfabética pelo nome. //e) Buscar pelo nome no arquivo, retornando o registro. Mostra depois o nome e a idade em forma de tabela. void pesquisarArquivo(FILE *arquivo) { tAluno aux; int ok=0; char nomeBusca[20]; fseek(arquivo, 0, SEEK_SET); // move para o início printf("Informe o nome para Buscar: "); scanf("%s", nomeBusca); printf("NOME\tIDADE\n"); while(fread(&aux, sizeof(tAluno), 1, arquivo) == 1){ if(strcmp(nomeBusca, aux.nome) == 0){ printf("--%s\t%d\n",aux.nome,aux.idade); ok++; } } if(ok==0) { printf("Nada foi encontrado!"); } } //f) Acrescentar um novo registro ao arquivo de forma ordenada. (não vale ordenar depois!) //g) Apagar um registro específico do arquivo. /*programa principal*/ int main () { /*variaveis do programa principal*/ FILE *arquivo = NULL; int qtd = 0; char opcao; /*menu*/ do { printf("== MENU == \n"); if (arquivo == NULL) { printf("a) Criar/abrir um arquivo.\n"); } else { printf("a) Fechar arquivo.\n"); } printf("b) Inserir Registros.\n"); printf("c) Imprimir Registros.\n"); printf("d) Ordernar Registros pelo Nome.\n"); printf("e) Buscar pelo Nome.\n"); printf("f) Acrescentar de forma ordenada. \n"); printf("g) Sair. \n"); printf("Digite uma das opcoes: "); scanf(" %c",&opcao); switch(opcao) { case 'a': /*Criar/abrir um arquivo*/ if (arquivo == NULL) { arquivo = CriarAbrirArquivo(); } else { fclose(arquivo); arquivo = NULL; printf ("Arquivo fechado com sucesso!\n"); } break; case 'b': /*inserir*/ escreverArquivo(arquivo, &qtd); break; case 'c': /*imprimir*/ imprimirArquivo(arquivo); break; case 'd': /*ordenar*/ break; case 'e': /*Buscar pelo Nome*/ pesquisarArquivo(arquivo); break; case 'f': /*Acrescentar Ordendado*/ break; case 'g': /*sair*/ printf("Saindo...\n\n"); break; default: printf("opcao inválida! \n"); break; } }while(opcao != 'g'); return 0; }