Baixe o app para aproveitar ainda mais
Prévia do material em texto
/* PIM ADS Pinheiros dez/2018 Grupo: 16 Participantes -------------------------------------------------------------------- Nome: Eduardo Gomes Duques da Silva RA: D6708J-9 2º Sem Nome: Fabricio de Assiz Sousa RA: N3205E-8 2º Sem Nome: Gabriel Vieira Toledo Leme RA: T8287F-2 1º Sem Nome: Yuri de Oliveira Amorim RA:D63AJF9 2º Sem Outras Observacoes ----------------------------------------------------------- O primeiro código foi realizado em parceria com o Grupo 14, e auxílios externos, porém o mesmo apresenta alguns problemas de execução, dependendo do computador que está sendo utilizado. Por essa razão anexamos o segundo código, que está totalmente executável, porém ainda falta alguns dos requisitos. */ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <windows.h> #include <pch.h> #include <ctype.h> /* 0 1 2 3 4 5 6 7 8 */ typedef enum { BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, /* nome das cores */ LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE } COLORS; /* 9 10 11 12 13 14 15 */ static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/ static int __FOREGROUND = LIGHTGRAY; void textcolor(int letras, int fundo) {/*para mudar a cor de fundo mude o background*/ __FOREGROUND = letras; __BACKGROUND = fundo; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), letras + (__BACKGROUND << 4)); } struct participantes { char data[11], hora[9]; int cpf, acento; char nome[30]; int tipo; //Professor=0, Convidado=1, Aluno=2 int portador; //Não=0, Sim=1 }/*MP[200]*/; //Matriz participantes struct participantes MP[200]; void tela1(); int tela2(); void tela3(); int MA[10], cont; int carac[8] = { 179,47,196,92,179,47,196,92 }; void gotoxy(int x, int y) { COORD c; c.X = x; c.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c); } int localizapart(int x) { return 0; } void inicia_participa() { MP[0].cpf = 12345; strcpy(MP[0].nome, "João Santos"); MP[0].tipo = 2; MP[0].portador = 0; MP[1].cpf = 13245; strcpy(MP[1].nome, "Fernanda Tavares"); MP[1].tipo = 2; MP[1].portador = 0; MP[2].cpf = 14245; strcpy(MP[2].nome, "Fernando Silva"); MP[2].tipo = 2; MP[2].portador = 0; MP[3].cpf = 14255; strcpy(MP[3].nome, "Juliano Sousa"); MP[3].tipo = 2; MP[3].portador = 1; MP[4].cpf = 12255; strcpy(MP[4].nome, "Silvio Santos"); MP[4].tipo = 2; MP[4].portador = 0; MP[5].cpf = 12555; strcpy(MP[5].nome, "Augusto Silva"); MP[5].tipo = 2; MP[5].portador = 0; MP[6].cpf = 32555; strcpy(MP[6].nome, "Joaquina Soares"); MP[6].tipo = 2; MP[6].portador = 1; } void inicia_particp() { int MA[10][10]; } void inicia_auditorio() { int i, j, MA[10]; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) MA[j] = 0; } } void listar() { int i, j; printf("Listando todos participantes :\n"); for (j = 0; j < cont; j++) { printf("Nome -----: %s\n", MP[j].nome); printf("cpf ---------: %d\n", MP[j].cpf); printf("Tipo -------: %d\n", MP[j].tipo); printf("Portador -: %d\n", MP[j].portador); printf("Acento ---: %d\n", MP[j].acento); printf("Data ------: %s\n", MP[j].data); printf("Hora ------: %s\n\n", MP[j].hora); } } void espera(int r) { int j, w, x, y; /* variáveis simples */ HANDLE hOut; /* controle dos dispositivos do pc */ hOut = GetStdHandle(STD_OUTPUT_HANDLE); /* pega a saída padrão */ CONSOLE_SCREEN_BUFFER_INFO SBInfo; /* informações sobre a buffer da tela */ GetConsoleScreenBufferInfo(hOut, &SBInfo);/* pega a posição do cursor do console */ x = SBInfo.dwCursorPosition.X; /* X será a posição x do cursor no console */ y = SBInfo.dwCursorPosition.Y; /* Y será a posição y do cursor no console */ gotoxy(x + 2, y); for (j = 0; j < 10; j++) { textcolor(12, 0); printf(" %d", 9 - j); textcolor(10, 0); for (w = 0; w < 8; w++) { if (kbhit()) { j = 10; break; } gotoxy(x + 1, y); printf("%c", carac[w]);/* gira o caractere na tela */ Sleep(r / 25); /* dorme um tempinho */ } } gotoxy(x, y); textcolor(7, 0); printf(" \n\n"); } void tela() { int opcao; do { printf("1 - Cadastro\n"); printf("2 - Reserva\n"); printf("3 - Sorteio\n"); printf("4 - Listar\n"); printf("5 - Sair\n"); scanf("%d", &opcao); switch (opcao) { case 1: tela1();/* cadastro */ break; case 2: tela2();/* reserva */ break; case 3: tela3();/* sorteio */ break; case 4: listar(); break; case 5: printf("Saindo do programa !"); espera(1200); break; default: printf("Opcao invalida !\n\n"); } } while (opcao != 5); } /*==================== inicio do programa =============================================*/ int main() { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO SBInfo; GetConsoleScreenBufferInfo(hOut, &SBInfo);/* SBInfo é do tipo int e pega a posição do cursor */ tela(); return 0; } /*================================ fim do proframa =============================================*/ /* funções abaixo da main precisam ser declaradas lá no início antes do início */ /* acima da main não precisam ser declaradas */ void tela1() {/* cadastrar */ char aux; textcolor(14, 0); printf("Aqui cadastrar participantes"); espera(1200); textcolor(7, 0); printf("\nInforme os dados do participante\n"); printf("o cpf : "); fflush(stdin); scanf("%d", &MP[cont].cpf); printf("o nome : "); fflush(stdin); scanf("%s", &MP[cont].nome); printf("o tipo : "); fflush(stdin); scanf("%d", &MP[cont].tipo); printf("portador 1 ou 0 : "); fflush(stdin); scanf("%d", &MP[cont].portador); printf("numero do acento : "); fflush(stdin); scanf("%d", &MP[cont].acento); _strdate(MP[cont].data);/* pega a data em inglês */ _strtime(MP[cont].hora);/* pega a hora atual */ aux = MP[cont].data[3]; MP[cont].data[3] = MP[cont].data[0]; MP[cont].data[0] = aux; aux = MP[cont].data[4]; MP[cont].data[4] = MP[cont].data[1]; MP[cont].data[1] = aux; aux = MP[cont].data[7]; MP[cont].data[9] = MP[cont].data[7]; MP[cont].data[8] = MP[cont].data[6]; MP[cont].data[6] = '2'; MP[cont].data[7] = 'O';/* data formato português */ MP[cont].data[10] = '\0';/* sinaliza o final da string */ cont++; } int tela2(int cpf) {/* reserva */ int part, i, inicio, fim, posicao = -1; /*part = localizapart(cpf);*/ if (MP[part].portador == 1) { inicio = 99; if (MP[part].tipo <= 1) fim = 0; else fim = 20; } else { if (MP[part].tipo <= 1) inicio = 0; else inicio = 20; fim = 94; } if (inicio > fim) { i = inicio; do { if (MA != 0) //i é bidimensional posicao = i; else i--; } while (posicao != -1 && i >= fim); } else { i = inicio; do { if (MA != 0) posicao = i; else i++; } while (posicao != -1 && (i <= fim)); } if (posicao != -1) MA[posicao] = MP[part].cpf; else printf("Auditorio sem lugar disponivel"); localizapart(cpf); /*int posicao = -1;*/ /*int i = 0;*/ while (posicao == -1 && i < 200) { if (MP[1].cpf == cpf) posicao = i;i++; } return posicao; } void tela3() { char aux[2]; textcolor(14, 0); printf("Aqui sortear participantes"); espera(1200); textcolor(7, 0); } */ Código 2 – Está rodando, porém falta adicionar algumas opções #ifdef __WIN32 #define limpar_tela "cls" #else #define limpar_tela "clear" #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXNOME 100 #define MAXCPF 12 #define MAXCARGO 15 #define MAXPNE 3 #define MAXPOS 100 #define COL 10 #define ROW 10 #define FALSE 0 #define TRUE 1 // definição da struct assento typedef struct assento { // campos da struct assento int id; int id_cliente; } t_assento; // definição da struct cliente typedef struct cliente { // campos da struct cliente int id; char nome[MAXNOME]; char cpf[MAXCPF]; char cargo[MAXCARGO]; char pne[MAXPNE]; int assento; } t_cliente; int colunaY(); int linhaX(); // protótipos de funções /** * Exibe o menu com todas as opções do programa * retorno: um caractere do número correspondente a opção */ char menu(); /** * Cadastro um cliente pedindo apenas o nome */ void cadastrar_cliente(); /** * Exibe todos os clientes cadastrados */ void listar_clientes(); /** * Procura um cliente pelo seu id * * Parâmetros: * arq_clientes: ponteiro para um arquivo aberto * id_cliente: ID do cliente que será buscado * retorno: um ponteiro para o cliente encontrado ou NULL caso o ID não exista */ t_cliente *obter_cliente(FILE *arq_clientes, int id_cliente); /** * Pesquisa um cliente e exibe suas informações */ void pesquisar_cliente(); /** * Procura um cliente pelo seu id e informa se ele foi encontrado * * Parâmetros: * arq_clientes: ponteiro para um arquivo aberto * id_cliente: ID do cliente que será buscado * retorno: 1 se o cliente existe ou 0 caso o ID não exista */ int existe_cliente(FILE *arq_clientes, int id_cliente); /** * Exclui um cliente do arquivo */ void excluir_cliente(); /** * Inicializa a matriz de assentos */ void inicializa(char matriz[ROW][COL]); /** * Mostra o painel de assentos */ void mostrarPainel(char matriz[ROW][COL]); /** * Ocupa o Assento */ void reserva(char matriz[ROW][COL]); /** * Exibe a legenda dos assentos */ void legenda(); /** * Informa se a string é um número * * Parâmetros: * str: ponteiro para uma cadeia de caracteres * retorno: 1 se a string só conter números ou 0 caso contrário */ int str_somente_numeros(char str[]); int main(int argc, char *argv[]) { char resp; char matriz[ROW][COL]; inicializa(matriz); //Iniciliza a matriz com valores .(Livre) // loop infinito do programa while(1) { // obtém a escolha do usuário resp = menu(); // testa o valor de "resp" if(resp == '1') cadastrar_cliente(); else if(resp == '2') listar_clientes(); else if(resp == '3') pesquisar_cliente(); else if(resp == '4') excluir_cliente(); else if(resp == '5') mostrarPainel(matriz); else if(resp == '6'){ mostrarPainel(matriz); reserva(matriz); } else if(resp == '0') // se for igual a 0, então sai do loop while break; else { printf("\nOpcao invalida! Pressione <Enter> para continuar..."); scanf("%*c"); // uma forma de "limpar" o buffer de entrada fseek(stdin, 0, SEEK_END); // não recomendável o uso } system(limpar_tela); } printf("\nVolte sempre!\n");//Despedida return 0; } // função que exibe o menu e retorna a opção escolhida pelo usuário char menu() { char resp[2]; printf("------------------------------ Reserva de Assentos ------------------------------"); printf("\n\n1 - Cadastrar um cliente\n"); printf("2 - Listar todos os clientes\n"); printf("3 - Pesquisar por cliente\n"); printf("4 - Excluir cliente\n"); printf("5 - Mostrar painel\n"); printf("6 - Reservar assento\n"); printf("0 - Sair\n"); printf("Digite o numero da opcao: "); scanf("%1s%*c", resp); // o *c pega o Enter e descarta // uma forma de "limpar" o buffer de entrada fseek(stdin, 0, SEEK_END); // não recomendável o uso // se chegou aqui, é porque a opção é válida return resp[0]; } // função que verifica se uma string contém somente números int str_somente_numeros(char str[]) { int i = 0; int len_str = strlen(str); for(i = 0; i < len_str; i++) { if(str[i] < '0' || str[i] > '9') return 0; } return 1; } // função para cadastrar cliente void cadastrar_cliente() { // abre o arquivo para escrita // a+b => acrescenta dados ao final do arquivo ou cria // um arquivo binária para leitura e escrita FILE *arq_clientes = fopen("clientes.bin", "a+b"); // testa a abertura do arquivo if(arq_clientes == NULL) { printf("\nFalha ao abrir arquivo(s)!\n"); exit(1); // aborta o programa } int cont_bytes = 0; // cont irá guardar o número total de bytes // seta o ponteiro do arquivo para o final do arquivo fseek(arq_clientes, 0, SEEK_END); // pegamos a quantidade de bytes com a função ftell cont_bytes = ftell(arq_clientes); t_cliente cliente; if(cont_bytes == 0) { // se for 0, então não existe cliente cadastrado // coloco o ID começando de 1 cliente.id = 1; } else { t_cliente ultimo_cliente; // utilizo a função fseek para posicionar o arquivo // cont_bytes - sizeof(t_cliente) serve para posicionar // para que possamos pegar o último cliente cadastrado fseek(arq_clientes, cont_bytes - sizeof(t_cliente), SEEK_SET); // ler o cliente fread(&ultimo_cliente, sizeof(t_cliente), 1, arq_clientes); // o ID do cliente é o ID do último cliente acrescido em 1 cliente.id = ultimo_cliente.id + 1; } // obtém os dados do cliente // ^\n indica para pegar até a quebra de linha (enter) // %*c descarta o enter printf("\nDigite o nome do cliente: "); scanf("%99[^\n]%*c", cliente.nome); printf("\nDigite o CPF do cliente: "); scanf("%99[^\n]%*c", cliente.cpf); printf("\nDigite o cargo do cliente: "); scanf("%99[^\n]%*c", cliente.cargo); printf("\nDigite se o cliente e pne: "); scanf("%99[^\n]%*c", cliente.pne); // uma forma de "limpar" o buffer de entrada fseek(stdin, 0, SEEK_END); // não recomendável o uso // se o ponteiro não estiver no final do arquivo nada é escrito fseek(arq_clientes, 0, SEEK_END); // escreve no arquivo fwrite(&cliente, sizeof(t_cliente), 1, arq_clientes); // fecha o arquivo fclose(arq_clientes); printf("\nCliente \"%s\" cadastrado com sucesso!\n", cliente.nome); printf("\nPressione <Enter> para continuar..."); scanf("%*c"); // pega o Enter e descarta // uma forma de "limpar" o buffer de entrada fseek(stdin, 0, SEEK_END); // não recomendável o uso } // função para listar todos os clientes void listar_clientes() { // rb => abre arquivo binário para leitura apenas FILE *arq_clientes = fopen("clientes.bin", "rb"); // testa a abertura do arquivo if(arq_clientes == NULL) { printf("\nFalha ao abrir arquivo(s)ou "); printf("Nenhum cliente cadastrado.\n"); printf("\nPressione <Enter> para continuar..."); scanf("%*c"); // pega o Enter e descarta // uma forma de "limpar" o buffer de entrada fseek(stdin, 0, SEEK_END); // não recomendável o uso return; } // variável que indica se encontrou pelo menos 1 cliente int encontrou_clientes = 0; t_cliente cliente; printf("\nListando todos os clientes...\n"); // loop para percorrer o arquivo while(1) { // fread retorna o número de elementos lidos com sucesso size_t result = fread(&cliente, sizeof(t_cliente), 1, arq_clientes); // se for 0, é porque não há mais elemento, então sai do loop if(result == 0) break; // atualiza a variável indicando que encontrou // pelo menos um cliente encontrou_clientes = 1; // mostra os dados do cliente printf("\nID do cliente: %d\n", cliente.id); printf("Nome do cliente: %s\n", cliente.nome); printf("CPF do cliente: %s\n", cliente.cpf); printf("Cargo do cliente: %s\n", cliente.cargo); printf("E pne? %s\n", cliente.pne); } if(encontrou_clientes == 0) printf("\nNenhum cliente cadastrado.\n"); fclose(arq_clientes); printf("\nPressione <Enter> para continuar..."); scanf("%*c"); // uma forma de "limpar" o buffer de entrada fseek(stdin, 0, SEEK_END); // não recomendável o uso } // função que obtém um cliente pelo ID t_cliente *obter_cliente(FILE *arq_clientes, int id_cliente) { // vai para o início do arquivo rewind(arq_clientes); t_cliente *cliente; // loop para percorrer o arquivo // busca linear O(n), como o ID é crescente é possível fazer uma busca binária O(log(n)) // aloca espaço mesmo sem saber se o cliente existe cliente = (t_cliente *)malloc(sizeof(t_cliente)); while(1) { // fread retorna o número de elementos lidos com sucesso size_t result = fread(cliente, sizeof(t_cliente), 1, arq_clientes); // se for 0, é porque não há mais elemento, então sai do loop if(result == 0) { free(cliente); // libera a mémoria, pois o cliente não foi encontrado return NULL; } // verifica se os ID's são iguais if(cliente->id == id_cliente) break; } return cliente; } // função para pesquisar por algum cliente void pesquisar_cliente() { char cpf[MAXCPF]; int encontrou_cliente = 0; // rb+ => abre para leitura somente FILE *arq_clientes = fopen("clientes.bin", "rb"); // testa a abertura do arquivo if(arq_clientes == NULL) { printf("\nFalha ao abrir arquivo(s)!\n"); exit(1); // aborta o programa } printf("\nDigite o cpf do cliente: "); scanf("%99[^\n]%*c", cpf); printf("\nClientes com o cpf \"%s\":\n\n", cpf); // loop para percorrer o arquivo t_cliente cliente; while(1) { // fread retorna o número de elementos lidos com sucesso size_t result = fread(&cliente, sizeof(t_cliente), 1, arq_clientes); // se for 0, é porque não há mais elemento, então sai do loop if(result == 0) break; char cpf_aux[MAXNOME]; // faz uma cópia para não alterar cliente->nome strcpy(cpf_aux, cliente.cpf); // verifica se é igual if(strcmp(strupr(cpf_aux), strupr(cpf)) == 0) { // mostra os dados do cliente printf("ID do cliente: %d\n\n", cliente.id); encontrou_cliente = 1; } } if(encontrou_cliente == 0) printf("Nenhum cliente encontrado.\n\n"); // fecha o arquivo fclose(arq_clientes); printf("Pressione <Enter> para continuar..."); scanf("%*c"); // uma forma de "limpar" o buffer de entrada fseek(stdin, 0, SEEK_END); // não recomendável o uso } // função que verifica se um cliente existe // retorna 0 se NÃO existe e 1 caso contrário int existe_cliente(FILE *arq_clientes, int id_cliente) { // vai para o início do arquivo rewind(arq_clientes); t_cliente cliente; // loop para percorrer o arquivo // busca linear O(n), como o ID é crescente é possível fazer uma busca binária O(log(n)) while(1) { // fread retorna o número de elementos lidos com sucesso size_t result = fread(&cliente, sizeof(t_cliente), 1, arq_clientes); // se for 0, é porque não há mais elemento, então sai do loop if(result == 0) break; // verifica se o ID é igual if(cliente.id == id_cliente) return 1; } // se chegou aqui é porque NÃO existe o cliente, então retorna 0 return 0; } // função responsável por excluir clientes void excluir_cliente() { char str_id_cliente[10]; int id_cliente; printf("\nDigite o ID do cliente: "); scanf("%10s%*c", str_id_cliente); fseek(stdin, 0, SEEK_END); // não recomendável o uso // verifica se str_id_cliente só contém números if(str_somente_numeros(str_id_cliente) == 1) { // se chegou aqui é porque o ID do cliente é válido sscanf(str_id_cliente, "%d", &id_cliente); // rb abre para leitura (o arquivo deve existir) FILE *arq_clientes = fopen("clientes.bin", "rb"); if(arq_clientes == NULL) { printf("\nFalha ao abrir arquivo(s)!\n"); exit(1); // aborta o programa } // verifica se o cliente existe if(existe_cliente(arq_clientes, id_cliente) == 1) { char nome_cliente[MAXNOME]; // abre um novo arquivo temporário FILE *arq_temp = fopen("temp_clientes.bin", "a+b"); if(arq_temp == NULL) { printf("\nFalha ao criar arquivo temporario!\n"); fclose(arq_clientes); exit(1); // aborta o programa } rewind(arq_clientes); // vai para o início do arquivo t_cliente cliente; while(1) // loop para percorrer o arquivo { // fread retorna o número de elementos lidos com sucesso size_t result = fread(&cliente, sizeof(t_cliente), 1, arq_clientes); // se for 0, é porque não há mais elemento, então sai do loop if(result == 0) break; // só copia pro novo arquivo se for diferente if(cliente.id != id_cliente) { // escreve no arquivo temporário fwrite(&cliente, sizeof(t_cliente), 1, arq_temp); } else strcpy(nome_cliente, cliente.nome); } // antes de fazer operações de remover arquivo e renomear, // é preciso fechar os dois arquivos fclose(arq_clientes); fclose(arq_temp); // depois de fechar o arquivo, então tentamos remover if(remove("clientes.bin") != 0) printf("\nErro ao deletar o arquivo \"clientes.bin\"\n"); else { // renomeia o arquivo int r = rename("temp_clientes.bin", "clientes.bin"); if(r != 0) { printf("\nPermissao negada para renomear o arquivo!\n"); printf("Feche esse programa bem como o arquivo \"temp_clientes.bin\" e renomeie manualmente para \"clientes.bin\"\n"); } else printf("\nCliente \"%s\" removido com sucesso!\n", nome_cliente); } } else { fclose(arq_clientes); printf("\nNao existe cliente com o ID \"%d\".\n", id_cliente); } } else printf("\nO ID so pode conter numeros!\n"); printf("\nPressione <Enter> para continuar..."); scanf("%*c"); fseek(stdin, 0, SEEK_END); // não recomendável o uso } void inicializa(char matriz[ROW][COL]){ int i,j; for(i=1;i<=ROW;i++)for(j=1;j<=COL;j++) matriz[i][j] = '.'; } void mostrarPainel(char matriz[ROW][COL]){ int i,j; printf("\n\n %c PAINEL DE OCUPACOES %c\n\n",16,17); printf(" "); for(i=1;i<=COL;i++) printf("%d ",i); for(i=1;i<=ROW;i++){ printf("\n\n %d",i); for(j=1;j<=COL;j++) printf(" (%c)",matriz[i][j]); } legenda(); system ("pause"); } //apresenta a legenda na tela void legenda(){ printf("\n\n\n .-Livre X-Ocupado\n"); printf(" Assentos da linha 1 sao destinados a pessoas com pne\n"); printf(" Assentos das linhas 2 e 3 sao destinados a professores\n\n"); } //efetica a compra da cadeira void reserva(char matriz[ROW][COL]){ int row, col; printf("\n Reserva de Assentos\n\n"); row = linhaX(); col = colunaY(); if(matriz[row][col]=='.'){ matriz[row][col] = 'X'; printf("\n\n RESERVA EFETIVADA COM SUCESSO !!"); } else if (matriz[row][col]=='X') printf("\n\n CADEIRA JA OCUPADA!! ESCOLHA OUTRA !!\n\n"); else if(matriz[row][col]=='R') printf("\n\n CADEIRA JA RESERVADA!! ESCOLHA OUTRA !!\n\n"); } //ler a linha oferecida pelo usuario int linhaX(){ int row; printf(" Linha: "); scanf("%d",&row); if(row>10) { printf("\t\n Esta cadeira nao existe!!! "); } return row; } //ler a coluna oferecida pelo usuario int colunaY(){ int col; printf(" Coluna: "); scanf("%d",&col); if(col>10) { printf("\t\n Esta cadeira nao existe!!! "); } return col; } /*// função responsável pelo reserva de acentos void reserva(char matriz[ROW][COL]) { char str_id_cliente[10]; int id_cliente; // rb+ abre para leitura/atualização FILE *arq_reserva = fopen("reserva.bin", "rb+"); FILE *arq_clientes = fopen("clientes.bin", "rb+"); // se não conseguiu abrir, então cria o arquivo // wb+ abre para escrita/atualização (cria o arquivo se ele NÃO existir) if(arq_reserva == NULL) { arq_reserva = fopen("reserva.bin", "wb+"); if(arq_reserva == NULL) { printf("\nFalha ao criar arquivo(s)!\n"); exit(1); // aborta o programa } } if(arq_clientes == NULL) { arq_clientes = fopen("clientes.bin", "wb+"); if(arq_clientes == NULL) { printf("\nFalha ao criar arquivo(s)!\n"); exit(1); // aborta o programa } } // obtém o ID do cliente printf("\nDigite o ID do cliente: "); scanf("%10s%*c", str_id_cliente); fseek(stdin, 0, SEEK_END); // não recomendável o uso if(str_somente_numeros(str_id_cliente) == 1) { // se caiu aqui é porque o ID possui somente números, então // preenche a variável "id_cliente" com o valor de "str_id_cliente" sscanf(str_id_cliente, "%d", &id_cliente); // verifica se o ID do do cliente existe if(existe_cliente(arq_clientes, id_cliente)) { char str_id_assento[100]; int id_assento; int row, col; printf("\n Reserva de Assentos\n\n"); row = linhaX(); col = colunaY(); str_id_assento = row * col; fseek(stdin, 0, SEEK_END); // não recomendável o uso t_assento assento; if(str_somente_numeros(str_id_assento) == 1) { // se chegou aqui é porque o ID do assento é válido sscanf(str_id_assento, "%d", &id_assento); // testa se o filme existe... if(assento != NULL) { if(matriz[row][col]=='.'){ matriz[row][col] = 'X'; printf("\n\n RESERVA EFETIVADA COM SUCESSO !!"); } else if (matriz[row][col]=='X') printf("\n\n CADEIRA JA OCUPADA!! ESCOLHA OUTRA !!\n\n"); else if(matriz[row][col]=='R') printf("\n\n CADEIRA JA RESERVADA!! ESCOLHA OUTRA !!\n\n"); } free(assento); // libera o filme alocado } else printf("\nNao existe assento com o ID \"%d\".\n", id_assento); } else printf("\nO ID so pode conter numeros!\n"); } else printf("\nNao existe cliente com o ID \"%d\".\n", id_cliente); } else printf("\nO ID so pode conter numeros!\n"); // fecha os arquivos fclose(arq_clientes); fclose(arq_assento); printf("\nPressione <Enter> para continuar..."); scanf("%*c"); fseek(stdin, 0, SEEK_END); // não recomendável o uso }*/ */
Compartilhar