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
Pergunta
Willianm
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
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.