Pages

segunda-feira, 11 de julho de 2016

Sistema para um cartório de registros usando estruturas em C

Um cartório de registros de imóveis, que atua em uma determinada região, há muitos anos, tem um sério problema, o acumulo de documentos antigos. Isso acaba gerando um outro problema ainda maior, a demora em localizar documentos, principalmente aqueles de data muito antiga.

Com o objetivo de acabar com esses problemas, você foi contratado para desenvolver um software que permita ao tabelião manter uma organização dos documentos. Sobre estes documentos, deve-se registrar:
             Número do documento – Inteiro, sequencial e sem repetição.
             Ano de registro – Inteiro.
            Tipo de Imóvel – Caractere, que pode ter os valores: C-Casa, T-Terreno, S-Sítio e F- Fazenda.
            Valor do imóvel – Decimal.
           Área do imóvel – Decimal, deve ser informado em m².
           Nome do proprietário – Texto.
           Responsável pelo registro.
           Sobre os responsáveis pelo registro:
           Nome – Texto.
           Registro – Inteiro, informado pelo usuário, não pode ser repetido.
           Senha – Texto.
Seu sistema deve exibir para o usuário o seguinte menu:
       1-Cadastrar responsável
       2-Cadastrar imóvel
       3-Exibir Registros (Ao fim de cada filtro exibir o total de registros encontrados.)
           1-Por número (Exibe todos os dados dos registros, cujo número de registro seja um número                    maior ou igual ao informado.)
           2-Por tipo (Exibe todos os dados dos registros, cujo tipo seja igual ao informado.)
          3-Por ano de registro (Exibe todos os dados dos registros, cujo ano de registro seja um número                maior ou igual ao informado.)
         4-Por proprietário (Exibe todos os dados dos registros, cujo nome do proprietário seja igual ao i           nformado.)
     0-Sair

#include<stdio.h>
#include<string.h>
#define T 3
#define ERRO_V "\n\n\t\t NAO HA ESPACO SUFICEINTE PARA CADASTRAR\n"
#define ERRO_M  "\n\n\t\t OPCAO INVALIDA"
#define ERRO_C   "\n\n\t\t ERRO NA HORA DE CADASTRAR\n"
#define CADASTROU "\n\n\t\t CADASTRO REALIZADO COM SUCESSO\n\n"
#define CADASTRO_N "\n\n\t\t NAO FORAM ENCONTRADO NENHUM REGISTRO\n"

struct Responsavel{
char nomeResponsavel[20],senha[20];
int registro,cod;
};
struct Imovel{
int numDocumento,anoRegistro;
char tipoImovel,nomeProprietario[20],responsavelRegistro[20];
float valorImovel,areaImovel;
};

int menu();
int subMenu();
char menuTipoImovel();
int VerificarNegativos(int num);
float VerificarNegativos2(float num);
struct Responsavel CadastrarResponsavel(int cod, int reg[T], int cont);
struct Imovel CadastrarImovel(int cont1, struct Responsavel r[T], int cont,int resp);
void exibirResponsavel(struct Responsavel r);
void exibirImovel(struct Imovel i);
void exibirImovelNumero(struct Imovel i[T], int cont);
void exibirImovelTipo(struct Imovel i[T], int cont);
void exibirImovelAno(struct Imovel i[T], int cont);
void exibirImovelProprietario(struct Imovel i[T], int cont);
int verificarResp(int resp, struct Responsavel r ); 
int filtarNumero(int reg, struct Imovel i);
int filtarTipo(char tipo, struct Imovel i);
int filtarAno(int ano, struct Imovel i);
int verificarSenha(struct Responsavel r[T], int cont);

int main(){
struct Responsavel r[T];
struct Imovel i[T];
int op,opSub,cont=0,cont1=0,aux,reg[T];
do{
op = menu();
switch(op){
case 1:
if(cont < T){
r[cont] = CadastrarResponsavel(cont+1,reg,cont); 
reg[cont] = r[cont].registro;
printf(CADASTROU);
getchar();
cont++;
}
else{
printf(ERRO_V);
getchar();
}
break;
case 2:{
int codResp;
if(cont > 0){
if(cont1 < T){
codResp = verificarSenha(r,cont);
if((codResp) >= 0 ){
i[cont1] = CadastrarImovel( cont1+1,r,cont,codResp);
printf(CADASTROU);
getchar();
cont1++;
}
}
else{
printf(ERRO_V);
getchar();
}
}
else{
printf("\n\n\t\tNAO TEM NENHUM RESPONSAVEL CADASTRADO AINDA! ");
getchar();
}
break;
}
case 3:
if(cont1 > 0){
do{
opSub = subMenu();
switch(opSub){
case 1:
exibirImovelNumero(i, cont1);
break;
case 2:
exibirImovelTipo(i,cont1);
break;
case 3:
exibirImovelAno(i,cont1);
break;
case 4:
exibirImovelProprietario(i,cont1);
break;
case 0:
break;
default:
printf(ERRO_M);
break;
}
}while(opSub !=0);
}
else{
printf(CADASTRO_N);
getchar();
}
break;
case 0:
break;
default :
printf(ERRO_M);
getchar();
break;
}
system("cls");
}while(op !=0);
return 0;
}

int menu(){
int op;
printf("\n\t\t\tBEM VINDO AO SISTEMA CAD_MOVEIS");
printf("\n________________________________________________________________________________\n\n");
printf("\t1-Cadastrar responsavel\n\t2-Cadastrar imovel\n\t3-Exibir Registros\n\t0-sair: ");
printf("\n________________________________________________________________________________\n\n");
scanf("\t%d",&op);
getchar();
return op;
}
int subMenu(){
int op;
system("cls");
printf("\n\t\t\tPESQUISAR IMOVEIS");
printf("\n________________________________________________________________________________\n\n");
printf("\n\t\t1-Por numero\n\t\t2-Por tipo\n\t\t3-Por ano de registro\n\t\t4-Por proprietário\n\t\t0-sair: ");
scanf("%d",&op);
getchar();
return op;
}
char menuTipoImovel(){
char tipo;
do{
printf("\n\tC-Casa, T-Terreno, S-Sitio e F- Fazenda: ");
tipo = toupper(getchar());
if(tipo != 'C' && tipo !='T' && tipo !='S' && tipo !='F'){
printf(ERRO_M);
getchar();
}
}while(tipo != 'C' && tipo !='T' && tipo !='S' && tipo !='F');
return tipo;
}

int VerificarNegativos(int num){
do{
if(num <= 0){
printf("\n\n\t\tInforme um Valor Positivo ");
scanf("%d",&num);
}
}while(num<=0);
return num;
}

float VerificarNegativos2(float num){
do{
if(num <= 0){
printf("\n\n\t\tInforme um Valor Positivo ");
scanf("%f",&num);
}
}while(num<=0);
return num;
}
int verificarResp(int resp, struct Responsavel r ){
return r.cod == resp;
}
int filtarNumero(int reg,struct Imovel i){
return i.numDocumento >= reg;
}
int filtarTipo(char tipo,struct Imovel i){
return i.tipoImovel == tipo;
}
int filtarAno(int ano, struct Imovel i){
return i.anoRegistro <= ano;
}

int verificarSenha(struct Responsavel r[T], int cont){
int sair=1,aux,resp;
char senha[20];
do{
printf("\tInforme o Codigo do Responsavel: ");
for(aux=0;aux<cont;aux++){
exibirResponsavel(r[aux]);
}
scanf("%d",&resp);
getchar();
for(aux=0;aux<cont;aux++){
if(verificarResp(resp, r[aux])){
printf("\tInforme a senha do responsavel: ");
strupr(gets(senha));
if(strcmp(senha,r[aux].senha)==0){
sair=resp;
}
else{
printf("\n\n\t\tUSUARIO OU SENHA INCORRETA");
printf("\n\tDeseja continuar  Sim -1 Nao -2: ");
scanf("%d",&sair);
getchar();
system("cls");
}
}
else{
printf(CADASTRO_N);
getchar();
sair = -1;
system("cls");
}
}
}while(sair == -1);
return sair;
}
struct Responsavel CadastrarResponsavel(int cod,int reg[T], int cont){
struct Responsavel r;
int aux,cont1=0;
r.cod = cod;
system("cls");
printf("\n\t\t\tCADASTRAR RESPONSAVEL");
printf("\n________________________________________________________________________________\n\n");
printf("\tInforme o nome do Responsavel: ");
gets(r.nomeResponsavel);
do{
cont1=0;
printf("\tInforme um numero de Registro: ");
scanf("%d",&r.registro);
r.registro = VerificarNegativos(r.registro);
getchar();
for(aux=0;aux<cont;aux++){
if(r.registro == reg[aux])
cont1++;
}
if(cont1 != 0)
printf("\n\n\t\tEste registro ja esta cadastrado!\n");
else
reg[cont]=r.registro;
}while(cont1!=0);
printf("\tInforme uma senha: ");
strupr(gets(r.senha));
exibirResponsavel(r);
return r;
}

struct Imovel CadastrarImovel(int cont1, struct Responsavel r[T], int cont, int resp){
int aux;
struct Imovel i;
i.numDocumento = cont1;
system("cls");
printf("\t\t\tCADASTRAR IMOVEIS");
printf("\n________________________________________________________________________________\n\n");
for(aux=0;aux<cont;aux++){
if(verificarResp(resp, r[aux]))
strcpy(i.responsavelRegistro,r[aux].nomeResponsavel);
}
printf("\tInforme o Ano de Registro: ");
scanf("%d",&i.anoRegistro);
getchar();
i.anoRegistro = VerificarNegativos(i.anoRegistro);
printf("\tInforme o tipo do Imovel ");
i.tipoImovel = menuTipoImovel();
printf("\tInforme o valor do Imovel: ");
scanf("%f",&i.valorImovel);
getchar();
i.valorImovel = VerificarNegativos2(i.valorImovel);
printf("\tInforme a Area do Imovel em m2: ");
scanf("%f",&i.areaImovel);
getchar();
i.areaImovel = VerificarNegativos2(i.areaImovel);
printf("\tInforme o nome do Proprietario do Imovel: ");
strupr(gets(i.nomeProprietario));
exibirImovel(i);
return i;
}

void exibirResponsavel(struct Responsavel r){
printf("\n\n\tCod   Nome  Registro  \n \t%d\t%s\t%d",r.cod,r.nomeResponsavel,r.registro);
printf("\n________________________________________________________________________________\n\n");
}
void exibirImovel(struct Imovel i){
printf("\n\nNum Reg\tAno Reg\tTipo\tValor\tArea\tProprietario\tResponsavel\n%d\t%d\t%c\t%.2f\t%.2f\t%s\t%s",i.numDocumento,i.anoRegistro,i.tipoImovel,
i.valorImovel,i.areaImovel,i.nomeProprietario,i.responsavelRegistro);
}

void exibirImovelNumero(struct Imovel i[T], int cont){
int reg,aux,total=0;
system("cls");
printf("\n\t\t\tPESQUISAR IMOVEIS POR NUMERO");
printf("\n________________________________________________________________________________\n\n");
printf("\n\tInforme um numero de Registro: ");
scanf("%d",&reg);
getchar();
for(aux=0;aux<cont;aux++){
if(filtarNumero(reg,i[aux])){
exibirImovel(i[aux]);
total++;
}
}
if(total > 0)
printf("\n\n\t\tFORAM ENCONTRADOS %d IMOVEIS CADASTRADOS\n",total);
else
printf(CADASTRO_N);
printf("\n________________________________________________________________________________\n\n");
getchar();
}

void exibirImovelTipo(struct Imovel i[T], int cont){
int aux,total=0;
char tipo;
system("cls");
printf("\n\t\t\tPESQUISAR IMOVEIS POR TIPO");
printf("\n________________________________________________________________________________\n\n");
printf("\n\tInforme o tipo de Imovel: ");
tipo = menuTipoImovel();
getchar();
for(aux=0;aux<cont;aux++){
if(filtarTipo(tipo,i[aux])){
exibirImovel(i[aux]);
total++;
}
}
if(total > 0)
printf("\n\n\t\tFORAM ENCONTRADOS %d IMOVEIS CADASTRADOS\n",total);
else
printf(CADASTRO_N);
printf("\n________________________________________________________________________________\n\n");
getchar();
}

void exibirImovelAno(struct Imovel i[T], int cont){
int ano,aux,total=0;
system("cls");
printf("\n\t\t\tPESQUISAR IMOVEIS POR ANO");
printf("\n________________________________________________________________________________\n\n");
printf("\n\tInforme o Ano de Registro: ");
scanf("%d",&ano);
getchar();
for(aux=0;aux<cont;aux++){
if(filtarAno(ano,i[aux])){
exibirImovel(i[aux]);
total++;
}
}
if(total > 0)
printf("\n\n\t\tFORAM ENCONTRADOS %d IMOVEIS CADASTRADOS\n",total);
else
printf(CADASTRO_N);
printf("\n________________________________________________________________________________\n\n");
getchar();
}

void exibirImovelProprietario(struct Imovel i[T], int cont){
int aux,total=0;
char prop[20];
system("cls");
printf("\n\t\t\tPESQUISAR IMOVEIS POR PROPRIETARIO");
printf("\n________________________________________________________________________________\n\n");
printf("\n\tInforme o nome do Proprietario: ");
strupr(gets(prop));
for(aux=0;aux<cont;aux++){
if(strcmp(prop,i[aux].nomeProprietario)==0){
exibirImovel(i[aux]);
total++;
}
}
if(total > 0)
printf("\n\n\t\t\tFORAM ENCONTRADOS %d IMOVEIS CADASTRADOS\n",total);
else
printf(CADASTRO_N);
printf("\n________________________________________________________________________________\n\n");
getchar();
}

Duvidas ou Trabalhos para fazer entre em Contato: marcofernando71@gmail.com

0 comentários:

Postar um comentário