Ir para conteúdo
Fórum Script Brasil

Willianm

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Tudo que Willianm postou

  1. Banco de Dados Os alunos de Sistemas de Informação do primeiro ano do curso ainda não tem aula de banco de dados. Movidos pela curiosidade, decidiram implementar em C um programa que simula um banco de dados. Para isso, resolveram criar um cadastro de clientes. Os dados de clientes deverão ser manipulados por meio de registros (structs) que devem ter os seguintes campos: – código – nome – endereço O endereço, por sua vez, é também um registro, com os seguintes campos: – rua (alfanumérico com 30 caracteres) – número (inteiro) – cidade (alfanumérico com 30 caracteres) – estado (sigla com 2 caracteres) Os estados estão gravados em um arquivo texto, com os pares sigla/extenso. Por exemplo, PR Paraná. Quando um cliente estiver sendo cadastrado, o programa deve validar a sigla (não permitir uma sigla inválida). Em todo banco de dados há um campo que é considerado a “chave” e, por isso, não pode ser repetido. No caso, o campo código é a chave do registro cliente. Portanto, não pode haver dois clientes com o mesmo código. O código do cliente é sequencial, sendo que o primeiro cliente cadastrado recebe o código 1, o segundo o código 2 e assim por diante. Uma restrição é que um código não pode ser reutilizado. Por exemplo, suponha que o último cliente seja o 44 e que ele seja excluído. Nesse caso, o próximo cliente deve receber o código 45, mesmo que no momento o último seja o 43. O programa deve gravar os dados em um arquivo de acesso randômico. Devem ser implementadas, no mínimo, as seguintes funcionalidades: – cadastrar, alterar e excluir cliente – consultar cliente por código – consultar cliente por nome exato – listar todos os clientes de uma determinada cidade – listar todos os clientes em ordem alfabética – buscar um cliente por parte de nome: por exemplo, se for digitado “%ana%”, o programa deve mostrar todos os clientes que possuem as 3 letras no nome, como Mariana, Joana, Anastácio, e assim por diante Quando o programa exibir o endereço de um cliente, ao invés de exibir a sigla do estado, deverá exibir o nome por extenso. O programa deve excluir fisicamente os clientes excluídos durante a execução, toda vez que for fechado. EU CONSEGUI FAZER APENAS ISTO E AINDA ESTA INCOMPLETO #include <iostream> #include <fstream> #include <locale> #include <cstdlib> //para usar system("cls") using namespace std; typedef struct Endereco{ char rua[30]; int num; char cidade[30]; char estado[2]; }; typedef struct Cadastro{ int codigo; char nome[30]; Endereco endereco; }; void cadastrar(fstream *); void listar(fstream *); void buscar(fstream *); void buscarcod(fstream *); void cadEstado(fstream *); void listarCidade(fstream *); void verificaCod(int ); int main(){ setlocale(LC_ALL,""); //colocar acentuação no programa int op, aux; Cadastro c; char estado[30]; fstream arquivo, estados; estados.open("C:\\Users\\Willian\\Desktop\\correção\\estados.dat", ios::out | ios::in | ios::binary | ios::app); if(estados.fail()){ cout << "Erro ao abrir\n"; } arquivo.open("C:\\Users\\Willian\\Desktop\\correção\\cadastro.dat", ios::out | ios::in | ios::binary | ios::app); if(arquivo.fail()){ cout << "Erro ao abrir\n"; } do{ arquivo.open ("teste.txt"); int aux = 0; while(arquivo >> c.codigo){ arquivo >> c.nome; aux++; } cout << "1 - cadastrar, alterar e excluir cliente\n"; cout << "2 - consultar cliente por código\n"; cout << "3 - consultar cliente por nome exato\n"; cout << "4 - listar todos os clientes de uma determinada cidade\n"; cout << "5 - listar todos os clientes em ordem alfabética\n"; cout << "6 - buscar um cliente por parte de nome\n"; cout << "7 - cadastrar estado\n\n"; cout << "Digite a opcao desejada\n"; cin >> op; switch(op){ case 1:cadastrar(&arquivo); break; case 2:buscarcod(&arquivo); break; case 3:buscar(&arquivo); break; case 4:listar(&arquivo); break; case 6:listarCidade(&arquivo); break; case 7:cadEstado(&estados); break; } }while(op!=8); arquivo.close(); return 0; } void cadastrar(fstream *arq){ system("cls"); //limpa a tela (*arq).clear(); //função mágica (*arq).seekg(0, ios::end); //vai para o final para acrescentar registro Cadastro c; int op; cout << "1 - Cadastrar cliente:\n"; cout << "2 - Alterar cliente:\n"; cout << "3 - Excluir cliente:\n\n"; cout << "Digite a opcao desejada\n"; cin >> op; switch(op){ int i; case 1: cout << "insira o codigo: "; cin >> i; verificaCod(i); //if(c.codigo==i){ // cout << "código invalido:\n\n "; //}else{ cout << "código nº.: " << endl; cin.ignore(); cout << "Insira o nome do cliente:\n"; fgets(c.nome, 30,stdin); cout << "Insira o endereço do cliente:\n"; cout << "Rua: \n"; fgets(c.endereco.rua, 30,stdin); cout << "Número: \n"; cin >> c.endereco.num; cin.ignore( ); cout << "Cidade: \n"; fgets(c.endereco.cidade, 30,stdin); cout << "Estado: \n"; fgets(c.endereco.estado, 30,stdin); (*arq).write((char *)&c, sizeof©); break; } } void buscar(fstream *arq){ system("cls"); //limpa a tela Cadastro c; string s1, s2; char aux[30]; (*arq).clear(); //função mágica (*arq).seekg(0); //posiciona o ponteiro no inicio do arquivo bool achou = false; cin.ignore(); cout << "\nNome: " ; fgets(aux, 30, stdin); s1 = aux; //transforma array de char em string while((*arq).read((char *)&c, sizeof©)){ s2 = c.nome; //transforma array de char em string if (s1 == s2){ achou = true; cout << "\n\nCódigo: " << c.codigo << endl; cout << "Nome: " << c.nome << endl; //a linha a seguir é totalmente desnecessária cout << "Posição no arquivo: " << (*arq).tellg()-sizeof© << " bytes a partir do inicio " << endl; } } if (!achou){ cout << "\n\nNao foi encontrado\n"; } } void buscarcod(fstream *arq){ system("cls"); //limpa a tela Cadastro c; int cod; (*arq).clear(); //função mágica (*arq).seekg(0); //posiciona o ponteiro no inicio do arquivo bool achou = false; cin.ignore(); cout << "\ncodigo: " ; cin >> cod; while((*arq).read((char *)&c, sizeof©)){ if (c.codigo == cod){ achou = true; cout << "\n\nCódigo: " << c.codigo << endl; cout << "Nome: " << c.nome << endl; //a linha a seguir é totalmente desnecessária cout << "Posição no arquivo: " << (*arq).tellg()-sizeof© << " bytes a partir do inicio " << endl; } } if (!achou){ cout << "\n\nNao foi encontrado\n"; } } void listar(fstream *arq){ system("cls"); //limpa a tela Cadastro c; (*arq).clear(); //função mágica (*arq).seekg(0, ios::beg); //posiciona o ponteiro no inicio do arquivo while((*arq).read((char *)&c, sizeof©)){ cout << "\nCodigo: " << c.codigo<<endl; cout << "Nome: " << c.nome; cout << "Rua: " << c.endereco.rua; cout << "Cidade: " << c.endereco.cidade; cout << "Cidade: " << c.endereco.estado<<endl; } } void cadEstado(fstream *est){ system("cls"); //limpa a tela (*est).clear(); //função mágica (*est).seekg(0, ios::end); //vai para o final para acrescentar registro char estado[30]; Cadastro c; cout << "insira a sigla e o nome do estado:\n "; fgets(estado, 30, stdin); cin.ignore(); (*est).write((char *)&c, sizeof©); } void listarCidade(fstream *arq){ system("cls"); //limpa a tela Cadastro c; (*arq).clear(); //função mágica (*arq).seekg(0, ios::beg); //posiciona o ponteiro no inicio do arquivo cin >> c.endereco.cidade; if(c.endereco.cidade==c.endereco.cidade){ while((*arq).read((char *)&c, sizeof©)){ cout << "\nCodigo: " << c.codigo; cout << "\nNome: " << c.nome; cout << "\nRua: " << c.endereco.rua; cout << "\nCidade: " << c.endereco.cidade; cout << "\nCidade: " << c.endereco.estado; } } } void verificaCod(int i){ Cadastro c; if (c.codigo==i){ cout << "código invalido:\n\n "; } }
×
×
  • Criar Novo...