I need to physically delete a record created within a struct
defined in my program, but in every way I tried (Set it to NULL
, Create another struct
and save all records that were not deleted in it ).
I registered the following records within a vector ( struct
):
and when I delete the 3 - Jose
I need my vector to look like this:
Code:
// Definindo as bibliotecas padrao
#include <stdio.h>
#include <stdlib.h>
// Definindo as contantes utilizadas
#define MAX 10
// Definindo um tipo de estrutura com o nome movimento
typedef struct {
int id_doc;
char nome_doc[50];
char data_reg[10];
char nome_resp[50];
int num_orig;
char tipo_doc;
// Campo para definir se o registro esta habilitado ou nao
char status;
}movimento;
// Declarando as variaveis auxiliares
void inclui_dados(int, movimento *);
void novo_mov(int *, movimento *);
void imprime_registro(movimento *);
void modifica_registro(int *, movimento *);
void desabilita_registro(int *, movimento *);
void habilita_registro(int *, movimento *);
void excluir_registro(int *, movimento *);
// Inicio do programa
int main(){
// Declarando uma estrutura do tipo movimento
movimento reg_mov[MAX];
// Declarando as variaveis do tipo inteiro e caracter
int cont_registro = 0;
char ch, op, i;
// Definindo a formatacao da tela
system("color 1E");
// Faca
do{
// Limpando a tela
system("CLS");
// Exibindo horario e data de inicializacao do sistema
printf("Sistema iniciou em Data: %s\t\tHora: %s\n\n", __DATE__, __TIME__);
// Apresentando as opcoes para o usuario
puts("Entre com o operador:\n1 - Cadastro\n2 - Consulta\n3 - Modificar\n4 - Desativar\n5 - Habilitar\n6 - Excluir\ns - Sair\n");
// Armazena a opcao solicitada
ch = getchar(); fflush(stdin);
// Seleciona a opcao
switch (ch)
{
// Caso 1 chame a funcao para cadastrar novos registros
case '1':
// Funcao para cadastrar novo documento
novo_mov(&cont_registro, ®_mov[0]);
break;
// Caso 2 chame a funcao para imprimir os registros
case '2':
// De 0 ate o numero de registro cadastrados incremente em uma unidade
for (i = 0; i<cont_registro; i++){
// Se o status do registro for s faca
if ((reg_mov + i)->status == 's'){
// Funcao para imprimir os registros
imprime_registro(®_mov[i]);
// Verifica com o usuario se deseja imprimir mais um registro
printf("Imprime mais um(s/n)?");
// Armazena a opcao selecionada
op = getchar(); fflush(stdin);
// Se nao termine o laco
if (op == 'n')
break;
}
// Se nao
else{
}
}
break;
// Caso 3 chame a funcao para modificar os registros
case '3':
// Funcao para modificar os registros
modifica_registro(&cont_registro, ®_mov[0]);
ch = getchar(); fflush(stdin);
break;
// Caso 4 chame a funcao para desabilitar um registro
case '4':
// Funcao para desabilitar um registro
desabilita_registro(&cont_registro, ®_mov[0]);
ch = getchar(); fflush(stdin);
break;
// Caso 5 chame a funcao para desabilitar um registro
case '5':
// Funcao para habilitar um registro
habilita_registro(&cont_registro, ®_mov[0]);
ch = getchar(); fflush(stdin);
break;
// Caso 6 chame a funcao para excluir um registro
case '6':
// Funcao para habilitar um registro
excluir_registro(&cont_registro, ®_mov[0]);
ch = getchar(); fflush(stdin);
break;
}
}
// Enquanto
while (ch != 's');
// Retorna zero ou erro de execucao
return 0;
}
// Inicio da funcao para incluir um novo registro no vetor
void novo_mov(int *idx, movimento *pt_mov){
pt_mov += (*idx);
inclui_dados(0, pt_mov);
(*idx)++;
}
// Fim da funcao para incluir um novo registro no vetor
// Inicio da funcao para incluir os dados de um novo registro
void inclui_dados(int n, movimento *pt_mov){
// Limpa a tela
system("CLS");
// Cadastro do registro
printf("\nCadastra Registro\n\n");
// Se n for diferente de 0 pule a primeira etapa
if (n == 0){
// Solicita a identificacao do documento
printf("Identificador do documento:");
// Armazena a identificacao do documento
scanf_s("%d", &(pt_mov->id_doc)); fflush(stdin);
}
// Solicita e armazena os demais dados do documento
printf("Nome do documento:");
gets_s(pt_mov->nome_doc);
printf("Data do Registro:");
gets_s(pt_mov->data_reg);
printf("Nome do responsavel:");
gets_s(pt_mov->nome_resp);
printf("Numero do doc de origem:");
scanf_s("%d", &(pt_mov->num_orig)); fflush(stdin);
printf("Tipo do documento:");
scanf_s("%c", &(pt_mov->tipo_doc)); fflush(stdin);
// Define o status do documento como s para habilitado
pt_mov->status = 's';
}
// Fim da funcao para incluir os dados de um novo registro
// Inicio da funcao para imprimir um registro
void imprime_registro(movimento *pt_mov){
// Limpa a tela
system("CLS");
// Imprime o registro
printf("\nImprime Registro\n\n");
// Imprime os dados do registro
printf("Identificador do documento: %d\n", pt_mov->id_doc);
printf("Nome do documento: %s\n", pt_mov->nome_doc);
printf("Data do Registro: %s\n", pt_mov->data_reg);
printf("Nome do responsavel: %s\n", pt_mov->nome_resp);
printf("Numero do doc de origem: %d\n", pt_mov->num_orig);
printf("Tipo do documento: %c\n", pt_mov->tipo_doc);
printf("Status (S para habilitado e N para desabilitado): %c\n", pt_mov->status);
}
// Fim da funcao para imprimir um registro
// Inicio da funcao para modificar um registro
void modifica_registro(int *idx, movimento *pt_mov){
// Declara as variaveis do tipo inteiro e caractere
int i, id;
char op;
// Limpa a tela
system("CLS");
// Modifica o registro
printf("\nModifica Registro\n\n");
// Solicita o documento a ser modificado
printf("Entre com o codigo do documento:");
// Armazena o documento a ser modificado
scanf_s("%d", &id); fflush(stdin);
// De zero ate o valor de idx incremente em uma unidade
for (i = 0; i<(*idx); i++){
// Verifica se o registro existe
if ((pt_mov + i)->id_doc == id){
// Funcao para imprimir o registro
imprime_registro(pt_mov + i);
// Verifica se o registro impresso sera o mesmo a ser modificado
printf("Deseja modificar(s/n)?");
op = getchar(); fflush(stdin);
// Se nao retorne para o menu principal
if (op == 'n')
return;
// Se sim chame a funcao para incluir dados no registro
inclui_dados((int)1, (pt_mov + i));
}
}
}
// Fim da funcao para modificar um registro
// Inicio da funcao para desabilitar um registro
void desabilita_registro(int *idx, movimento *pt_mov){
// Declara as variaveis do tipo inteiro e caractere
int i, id;
char op;
// Limpa a tela
system("CLS");
// Desabilita o registro
printf("\nDesabilita Registro\n\n");
// Solicita o documento a ser desabilitado
printf("Entre com o codigo do documento:");
// Armazena o documento a ser desabilitado
scanf_s("%d", &id); fflush(stdin);
// De zero ate o valor de idx incremente em uma unidade
for (i = 0; i<(*idx); i++){
// Verifica se o registro existe
if ((pt_mov + i)->id_doc == id){
// Confirma se o mesmo deve ser desabilitado
printf("Deseja desativar(s/n)?");
op = getchar(); fflush(stdin);
// Se nao retorne para o menu principal
if (op == 'n'){
return;
}
else{
// Se sim confirme a operacao
(pt_mov + (id - 1))->status = 'n';
return;
}
}
}
}
// Fim da funcao para desabilitar um registro
// Inicio da funcao para habilitar um registro
void habilita_registro(int *idx, movimento *pt_mov){
// Declara as variaveis do tipo inteiro e caractere
int i, id;
char op;
// Limpa a tela
system("CLS");
// Desabilita o registro
printf("\nHabilita Registro\n\n");
// Solicita o documento a ser habilitado
printf("Entre com o codigo do documento:");
// Armazena o documento a ser habilitado
scanf_s("%d", &id); fflush(stdin);
// De zero ate o valor de idx incremente em uma unidade
for (i = 0; i<(*idx); i++){
// Verifica se o registro existe
if ((pt_mov + i)->id_doc == id){
// Confirma se o mesmo deve ser habilitado
printf("Deseja ativar(s/n)?");
op = getchar(); fflush(stdin);
// Se nao retorne para o menu principal
if (op == 'n'){
return;
}
else{
// Se sim confirme a operacao
(pt_mov + (id - 1))->status = 's';
return;
}
}
}
}
// Fim da funcao para habilitar um registro
// Inicio da funcao para excluir um registro
void excluir_registro(int *idx, movimento *pt_mov){
// Declara as variaveis do tipo inteiro e caractere
int i, id;
char op;
// Limpa a tela
system("CLS");
// Desabilita o registro
printf("\nExcluir Registro\n\n");
// Solicita o documento a ser desabilitado
printf("Entre com o codigo do documento:");
// Armazena o documento a ser desabilitado
scanf_s("%d", &id); fflush(stdin);
// De zero ate o valor de idx incremente em uma unidade
for (i = 0; i<(*idx); i++){
// Verifica se o registro existe
if ((pt_mov + i)->id_doc == id){
// Confirma se o mesmo deve ser desabilitado
printf("Deseja excluir(s/n)?");
op = getchar(); fflush(stdin);
// Se nao retorne para o menu principal
if (op == 'n')
return;
// Se sim altere o status do registro para N de desabilitado
else
{
// O que fazer para excluir o registro
}
}
}
}
// Fim da funcao para excluir um registro