Ir para conteúdo
Fórum Script Brasil
  • 0

não consigo fazer o resto...


Willianm

Pergunta

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 ";

}

}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...