Jump to content
Fórum Script Brasil
  • 0

não consigo fazer o resto...


Willianm

Question

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 to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...