O SISTEMA PARA BIBLIOTECA
Por: WillisonPinto • 3/12/2018 • Trabalho acadêmico • 1.947 Palavras (8 Páginas) • 242 Visualizações
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
// criacao de struct. Estrutura para receber os dados do usuario.
struct usuarios{
char nome[25], endereco[30];
int idade;
};
usuarios usuario; //declaracão de identificador do tipo usuarios (variavel global)...
// criacao da funcao abrir_arquivo. A funcao tem retorno do tipo boolean, pois a funcao vai verificar
// se o arquivo existe ou nao, ou se o sistema conseguiu cria-lo, em caso positivo, a funcao retorna true
// caso contrario, retorna false, isso servira para as demais funcoes verificarem se os usuarios ja estao ou nao no sistema.
// 1. É definida a funcao abrir_arquivo, do tipo e retorno boolean, nela espera-se dois argumentos
// 1.1 O argumento char diretorio[], é porque a funcao que soliticar o arquivo deverá informar onde ele esta, ou seja seu diretorio/endereco
// os colchetes vazios significa que nao se sabe o tamanho da string passada para a funcao
// 1.2 o argumento - modo - do tipo char espera somente um caractere que definira se o arquivo eh para leitura, gravação ou gravação no fim,
// o usuario nao tera acesso a esse argumento, entao nao eh necessario fazer testes e controles...
// 2 É criado um ponteiro que ira apontar para o endereco de um arquivo, (os arquivos sao necessarios, pois representarao os registros existentes ou nao)
// 3 A variavel char c, sera usada somente para receber os dados do arquivo, quando o modo for leitura
// 4. o comando de seleção ira selecionar a instrução, a depender do modo
// 4.1 caso o modo seja igual a 'l', significa leitura.
// 4.1.1 Se entrar no modo l, o arquivo sera aberto, nesse caso o arquivo devera existir
// 4.1.2 É feito um teste para saber se o arquivo foi encontrado - comando if(arquivo)
// 4.1.2.1 Existindo o arquivo, imediatamente sera feito um loop que percorrerar o arquivo todo ate o seu fim e salvara caractere por caractere na variavel c
// 4.1.2.1.1 Logo na sequencia sera impresso na tela o valor de c, ao final do loop sera impresso todo o conteudo do arquivo
// 4.1.2.2 entao o arquivo sera fechado
// 4.1.2.3 e sera retornado o valor true, isso significa que o arquivo foi lido
// 4.2 nao existindo o arquivo, sera retornado false, ou seja, nao ha o registro consultado.
// 5. caso o modo seja 'g', o arquivo sera aberto para gravação
// 5.1 o identificador arquivo recebera a abertura do arquivo no modo w, que é o modo de escrita, o arquivo sera criado. Se o arquivo ja existir, o sistema ira informar
// que ja tem um usuario cadastrado com esse nome, esta instrução esta definida no - case 'a' : - desta funcao.
// logo apos sera escrito nome, endereço e idade, no arquivo (ja tabulações definidas). As tabulações sao feitas para organizar as strings, porem ira depender do tamanho
// da string digitada pelo usuario. É necessario um tratamento mais bem elaborado para exiber as tabelas com perfeição, isso deixaria o codigo fonte bem mais complexo,
// portanto, foi descartada a hipotese desse tratamento.
// 5.2 Logo abaixo da linha do titulo das colunas, é escrito os respectivos dados do usuario, no arquivo. (função - fprintf)
// 5.3 eh retornado o valor true pela funcao, nesse caso nao eh necessario fazer desvios por seleção, visto que o diretorio sempre existira. Logo sempre sera criado o arquivo,
// entao nao ha necessidade de retornar false.
// 6. o caso 'a', eh para verificar se o arquivo ja existe, nesse caso o 'a' nada tem a ver com o parametro "a" da funcao fopen (escrita no final do arquivo).
// 6.1 o arquivo sera aberto para leitura, nesse caso, devera existir. Caso nao exista, o retorno para o identificador arquivo sera igual a NULL, logo isso pode ser usado
// para verificar se o arquivo existe ou nao.
// 6.2 O if testa se o arquivo vai retornar um valor diferente de NULL, se isso acontecer, é porque o arquivo existe.
// 6.2.1 existindo o arquivo que foi aberto, ele sera fechado.
// 6.2.2 Se o arquivo foi fechado, entao ele existe. Se ele existe, entao o retorno deve ser true.
//6.3 Se o arquivo nao foi lido, ele nao existe, logo retorna-se false.
bool abrir_arquivo(char diretorio[], char modo){
FILE* arquivo;
char c;
switch (modo){
case 'l' : // esta instrução ler e mostra os dados na tela.
arquivo = fopen (diretorio, "r");
if (arquivo){
while ((c = getc(arquivo))!=EOF)
printf ("%c",c);
fclose (arquivo);
return true;
}
else return false;
case 'g' :
arquivo = fopen (diretorio, "w");
fprintf (arquivo, "Nome\t\t\t\tEndereco\t\tIdade\n\n");
fprintf (arquivo, "%s\t\t%s\t%d\n", usuario.nome, usuario.endereco, usuario.idade);
fclose (arquivo);
return true;
...