-1
I’m having difficulty doing this activity. If possible, give me tips and solutions to improve the code. And explain to me why the compiler can run the program but when arriving at the end of the option REGISTER it error. Who can run the program in your compiler to test and see what I mean , I thank you very much.I suspect that the problem is with pointers or with the dynamic allocation made.
Make a program that performs the customer registration of a bank. Each customer has a name, a surname, an address, an email, a phone, a Cpf and an identifier. A customer may have one of the four account types allowed by the bank: current, salary, savings and university. For each of the types, there are different types of clients. For the university account, the client must student and must have registration, registration date, completion forecast, course and university. For the savings account, the information on when the customer deposited the money and how much he made in the last month. For the salary account, the client must have a salary, agency in which he works, position, date of employment. Current account is for other cases and does not have a specific information. All accounts shall contain an agency and a number.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct{
int dia,mes,ano;
}data;
typedef struct {
char matricula[10];
data _matricula;
data _conclusao;
char curso[25];
char universidade[50];
}universitario;
typedef struct {
data _deposito;
float renda;
}poupanca;
typedef struct {
float salario;
char orgao_trabalha[50];
char cargo[12];
data _contratacao;
}salario;
typedef struct{
}corrente;
typedef struct {
char nome [25];
char sobrenome[25];
char endereco[50];
char email[25];
char telefone[12];
char CPF[12];
int ID;
int agencia;
int numero;
union {
universitario u;
poupanca p;
salario s;
corrente c;
}conta_tipo;
}cadastro;
// VARIAVEL GLOBAL
cadastro *c1;
int k=1;
// ENUM
enum funcao_menu{cadastrar=1,remover,alterar_cliente,alterar_conta,saque_deposito,rendimento,exibir
};
enum saque_deposito{saque=1,deposito
};
enum conta_tipo{univer=1,poup,salar,corren
};
// PROTOTIPAGEM DE FUNÇOES
void funcao_menu ();
void ler_codigo(int n);
void preencher_cadastro (cadastro *p,int tipo_conta,int k);
void exibir_cliente (cadastro *p,int k);
//FUNCAO PRINCIPAL
int main () {
int funcao;
// INICIO DO MENU PRINCIPAL
funcao_menu();
scanf ("%i",&funcao);
ler_codigo(funcao);
system ("pause");
return 0;
}
// Funcao Menu
void funcao_menu (){
printf ("Banco Caraca\n\n");
printf ("-Cadastro de Clientes-\n\n");
printf ("Menu Principal\n--------------\n");
printf ("1-Cadastrar Cliente\n");
printf ("2-Remover Cliente\n");
printf ("3-Alterar Cliente\n");
printf ("4-Alterar Tipo De Conta\n");
printf ("5-Realizar Saque ou Deposito\n");
printf ("6-Calcular Rendimento da Poupanca\n");
printf ("7-Exibir clientes cadastrados\n");
printf ("---------------------------------\n");
printf ("Insira o codigo numerico da funcao: ");
}
// Funcao de leitura e preenchimento de dados
void ler_codigo(int n){
int opcao;
c1 = (cadastro *) malloc(sizeof(cadastro));
switch (n){
case 1:{
int tipo_conta;
printf ("Cadastrar Cliente\n");
printf ("-----------------\n");
printf("Insira o codigo numerico do tipo de conta:\n");
printf("1-Universitario\n");
printf("2-Poupanca\n");
printf("3-Salario\n");
printf("4-Corrente\n");
printf("--------------\n");
printf("Opcao Escolhida: ");
scanf ("%i",&tipo_conta);
switch (tipo_conta){
case univer:{
printf ("Conta Universitario\n");
printf ("-------------------\n");
preencher_cadastro (c1,tipo_conta,k);
break;
}
case poup:{
printf ("Conta Poupanca\n");
printf ("--------------\n");
preencher_cadastro (c1,tipo_conta,k);
break;
}
case salar:{
printf ("Conta Salario\n");
printf ("-------------\n");
preencher_cadastro (c1,tipo_conta,k);
break;
}
case corren:{
printf ("Conta Corrente\n");
printf ("--------------\n");
preencher_cadastro (c1,tipo_conta,k);
break;
}
}
break;
}
case 2:{
printf("Remover Cliente\n");
printf("---------------\n");
break;
}
case 3:{
printf ("Alterar Cliente\n");
printf ("----------------\n");
break;
}
case 4: {
printf ("Alterar Tipo De Conta\n");
printf ("---------------------\n");
break;
}
case 5:{
printf ("Realizar Saque ou Deposito\n");
printf ("Insira a opcao:\n");
printf ("1-Saque\n");
printf ("2-Deposito\n");
printf ("----------\n");
printf("Opcao Escolhida: ");
scanf ("%i",&opcao);
if (opcao==saque){
printf ("Realizar Saque\n");
printf ("--------------\n");
}
else if(opcao==deposito){
printf("Realizar Deposito\n");
printf("-----------------\n");
}
else if (opcao!=deposito||opcao!=saque){
printf("Opcao Invalida.Tente Novamente.");
}
break;
}
case 6:{
printf ("Calcular Rendimento Da Poupança\n");
printf ("-------------------------------\n");
break;
}
case 7:{
printf ("Exibir clientes cadastrados\n");
printf ("-------------------------------\n");
exibir_cliente(c1,k);
break;
}
default :{
printf ("Opcao Invalida.Tente Novamente.\n");
break;
}
}
}
// FUNÇÃO DE EXIBIR CLIENTES
void exibir_cliente (cadastro *p,int k){
int i;
printf("Clientes cadastrados: \n ----------------------------------------- \n");
printf("Nome\n");
for (i=1;i<=k;i++){
printf("%s",(p+i)->nome);
}
}
// FUNÇÃO DE PREENCHIMENTO GERAL DO CADASTRO
void preencher_cadastro (cadastro *p,int tipo_conta,int k){
printf ("Insira o nome do cliente a ser cadastrado: ");
setbuf (stdin,NULL);
fgets ((p+k)->nome,25,stdin);
printf("Insira o sobrenome do cliente a ser cadastrado: ");
setbuf (stdin,NULL);
fgets ((p+k)->sobrenome,25,stdin);
setbuf (stdin,NULL);
printf("Insira o endereco do cliente a ser cadastrado: ");
fgets ((p+k)->endereco,50,stdin);
setbuf (stdin,NULL);
printf("Insira o e-mail do cliente a ser cadastrado: ");
setbuf (stdin,NULL);
fgets ((p+k)->email,25,stdin);
setbuf (stdin,NULL);
printf("Insira o telefone (com DD) do cliente a ser cadastrado: ");
setbuf (stdin,NULL);
fgets ((p+k)->telefone,12,stdin); b
setbuf (stdin,NULL);
printf("Insira o CPF do cliente a ser cadastrado: ");
fgets ((p+k)->CPF,12,stdin);
setbuf (stdin,NULL);
switch (tipo_conta){
case univer:{
printf ("Insira o nome da universidade do cliente a ser cadastrado: ");
fgets ((p+k)->conta_tipo.u.universidade,50,stdin);
setbuf (stdin,NULL);
printf ("Insira o curso de graducao do cliente a ser cadastrado: ");
fgets ((p+k)->conta_tipo.u.curso,25,stdin);
setbuf (stdin,NULL);
printf ("Insira a matricula institucional do cliente a ser cadastrado: ");
fgets ((p+k)->conta_tipo.u.matricula,10,stdin);
printf ("Insira a data de matricula do curso do cliente a ser cadastrado: ");
setbuf (stdin,NULL);
scanf("%i%i%",&(p+k)->conta_tipo.u._matricula.dia,&(p+k)->conta_tipo.u._matricula.mes,&(p+k)->conta_tipo.u._matricula.ano);
setbuf (stdin,NULL);
printf ("Insira a data de conclusao de curso do cliente a ser cadastrado: ");
scanf("%i%i%",&(p+k)->conta_tipo.u._conclusao.dia,&(p+k)->conta_tipo.u._conclusao.mes,&(p+k)->conta_tipo.u._conclusao.ano);
setbuf (stdin,NULL);
break;
}
case poup:{
printf ("Insira a data do deposito: ");
scanf ("%i%i%i",&(p+k)->conta_tipo.p._deposito.dia,&(p+k)->conta_tipo.p._deposito.mes,&(p+k)->conta_tipo.p._deposito.ano);
// chamar a funcao pra calcular o quanto rendeu (JOAO VITOR);
break;
}
case salar:{
printf("Insira o valor em reais do salario: R$ ");
scanf("%f",(p+k)->conta_tipo.s.salario);
printf("Insira o nome do orgao em que o cliente trabalha: ");
fgets((p+k)->conta_tipo.s.orgao_trabalha,50,stdin);
printf("Insira o cargo profissional ocupado pelo cliente: ");
fgets((p+k)->conta_tipo.s.cargo,12,stdin);
printf("Insira a data de contracao profissional do cliente: ");
scanf("%i%i%i",&(p+k)->conta_tipo.s._contratacao.dia,&(p+k)->conta_tipo.s._contratacao.mes,&(p+k)->conta_tipo.s._contratacao.ano);
break;
}
case corren:{
break;
}
default :{
printf("Opcao Invalida.Tente Novamente.");
break;
}
}
c1 = (cadastro *) realloc(c1, (k+1)*sizeof(cadastro));
}
better your answer to make it easier to understand
– Um Programador