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