Dev - C++ - Ayuda en eliminación lógica de registro en un archivo

 
Vista:

Ayuda en eliminación lógica de registro en un archivo

Publicado por Héctor Miguel (1 intervención) el 26/10/2020 18:34:11
Hola, necesito ayuda ya que tengo un programa que realiza altas, consultas y bajas de registros en un archivo .txt, la cuestión es que en las bajas lo tenia de tal forma que se eliminaba de manera tanto lógica como física pero se me solicito que el borrado del registro solo fuera lógico y que en el archivo .txt el registro borrado se mantenga pero con un asterisco al inicio para simbolizar su eliminación y que en el archivo lógico ese registro apareciera con un "Registro eliminado" pero la verdad no se como hacerlo, si alguien pudiera ayudarme se lo agradecería.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include<iostream>
#include<fstream>
#include<conio.h>
#include<windows.h>
#include<cctype>
 
using namespace std;
 
int menu(){
	int x;
	system("cls");
	cout<<"<<-------Bienvenido------>>"<<endl<<endl;
	cout<<"1.-Agregar Registro"<<endl;
	cout<<"2.-Ver Registro"<<endl;
	cout<<"3.-Buscar Registro"<<endl;
	cout<<"4.-Eliminar Registro"<<endl;
	cout<<"5.-Salir "<<endl;
	cout<<"Opcion: ";
	cin>>x;
 
	return x;
}
 
bool verifica(string clave){
	ifstream leer("Prueba.txt", ios::in);
	string Nombre;
	string Clave;
	string Desc;
	leer>>Clave;
	while(!leer.eof()){
		leer>>Nombre;
		leer>>Desc;
		if(Clave==clave){
			leer.close();
			return false;
		}
		leer>>Clave;
	}
	leer.close();
	return true;
}
 
void agregar(ofstream &es){
	system("cls");
	string Nombre;
	string Clave;
	string Desc;
	es.open("Prueba.txt", ios::out | ios::app);//Prueba.txt es el nombre del fichero que se creara como ejemplo
	cout<<"Digite la clave: ";
	cin>>Clave;
	cout<<"Digite el Nombre: ";
	cin>>Nombre;
	cout<<"Digite la descripcion: ";
	cin>>Desc;
	if(verifica(Clave))
		es<<Clave<<" "<<Nombre<<" "<<Desc<<"\n";
	es.close();
}
 
void verRegistros(ifstream &Lec){
	system("cls");
	string nombre;
	string clave;
	string desc;
	Lec.open("Prueba.txt", ios::in);
	cout<<"--------Registros guardados--------"<<endl<<endl;
	Lec>>clave;
	while(!Lec.eof()){
		Lec>>nombre;
		Lec>>desc;
		cout<<clave<<"|"<<nombre<<"|"<<desc<<"\n";
		cout<<"-------------------"<<endl;
		Lec>>clave;
	}
	Lec.close();
	system("pause");
}
 
void buscarRegistro(ifstream &Lec){
	system("cls");
	Lec.open("Prueba.txt", ios::in);
	string nombre, desc, clave, claveaux;
	bool encontrado=false;
	cout<<"Digite la cedula: ";
	cin>>claveaux;
	Lec>>clave;
	while(!Lec.eof() && !encontrado){
		Lec>>nombre;
		Lec>>desc;
		if(clave==claveaux){
			cout<<"\n"<<clave<<"|"<<nombre<<"|"<<desc<<endl;
			encontrado=true;
		}
		Lec>>clave;
	}
	Lec.close();
	if(!encontrado)
		cout<<"Registro no encontrado"<<endl;
	system("pause");
}
 
void eliminar(ifstream &Lec){
	system("cls");
	string nombre;
	string desc;
	string clave;
	string claveaux;
	Lec.open("Prueba.txt", ios::in);
//	ofstream aux("auxiliar.txt", ios::out);
	if(Lec.is_open()){
		cout<<"Digite la clave: ";
		cin>>claveaux;
		Lec>>clave;
		while(!Lec.eof()){
			Lec>>nombre;
			Lec>>desc;
			if(clave==claveaux){
				cout<<"Registro eliminado";
				Sleep(1500);
			}else{
//				aux<<clave<<" "<<nombre<<" "<<desc<<"\n";
			}
			Lec>>clave;
		}
		Lec.close();
//		aux.close();
 
	}else
	cout<<"Error"<<endl;
//	remove("Prueba.txt");
//	rename("auxiliar.txt","Prueba.txt");
}
 
int main(){
	ofstream Esc;
	ifstream Lec;
	int op;
	do{
		system("cls");
		op=menu();
		switch(op){
			case 1:
				agregar(Esc);
			break;
			case 2:
				verRegistros(Lec);
			break;
			case 3:
				buscarRegistro(Lec);
			break;
			case 4:
				eliminar(Lec);
			break;
			case 5:
			break;
		}
	}while(op!=5);
 
	return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder