Estoy tratando de hacer un programa que registre datos de una veterinaria al ingresar el 2do cliente y luego pasar al reporte o trato de eliminar un cliente me tira un bucle infinito aqui esta el codigo ayuda por favor.
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <windows.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
//DEFINIENDO LAS VARIABLES NECESARIAS
string nombre, auxnombre, apellido, numero,nombreMascota,tipoMascota,edadMascota;
int clave = 0, auxclave = 0;
char grupo[10];
char opca;
bool encontrado = false;
void altas()
{
///Variables de la biblioteca fstream para el manejo de archivos
ofstream escritura;
ifstream consulta;
do {
escritura.open("alumnos.txt", ios::out | ios::app);//crea y escribe, si ya tiene texto une al final del archivo
consulta.open("alumnos.txt", ios::in);//solamente consulta o lee usando la variable sobre el archivo físico alumnos.txt
if (escritura.is_open() && consulta.is_open()) {
bool repetido = false;
cout << "\n";
cout << "\tIngresa el nit del cliente: ";
cin >> auxclave;
///A continuación se aplica el tipo de lectura de archivos secuencial
consulta >> clave;
while (!consulta.eof()) {
consulta >> nombre >> apellido >> grupo >> numero;
if (auxclave == clave) {
cout << "\t\tEl NIT ya esta registrado...\n";
repetido = true;
break;
}
consulta >> clave;
}
if (repetido == false) {
cout << "\tIngresa el nombre del cliente: ";
cin >> nombre;
cout << "\tIngresa el apellido del cliente: ";
cin >> apellido;
cout << "\tIngresa el telefono del cliente: ";
cin >> numero;
cout << "\t Ingrese el nombre de la mascota ";
cin >> nombreMascota;
cout << "\tIngrese el tipo de mascota ";
cin >> tipoMascota;
cout << "\t Edad de la mascota ";
cin >> edadMascota;
//ESCRIBIENDO LOS DATOS CAPTURADOS POR EL USUARIO EN EL ARCHIVO
escritura << auxclave << " " << nombre << " " << apellido << " " << numero << " " << nombreMascota << " " << tipoMascota << " " << edadMascota << endl;
cout << "\n\tRegistro agregado...\n";
}
cout << "\n\tDeseas ingresar otro cliente? (S/N): ";
cin >> opca;
}
else {
cout << "El archivo no se pudo abrir \n";
}
escritura.close();
consulta.close();
} while (opca == 'S' or opca == 's');
}
void bajas()
{
ofstream aux;
ifstream lectura;
encontrado = false;
aux.open("auxiliar.txt", ios::out);
lectura.open("alumnos.txt", ios::in);
if (aux.is_open() && lectura.is_open()) {
cout << "\n";
cout << "\tIngresa el nit del cliente que deseas eliminar: ";
cin >> auxclave;
///De nuevo se aplica el tipo de lectura de archivos secuencial, esto quiere decir que lee campo por campo hasta
///hasta llegar al final del archivo gracias a la función .eof()
lectura >> clave;
while (!lectura.eof()) {
lectura >> nombre >> apellido >> grupo >> numero;
if (auxclave == clave) {
encontrado = true;
cout << "\n";
cout << "\tNit: " << clave << endl;
cout << "\tNombre: " << nombre << endl;
cout << "\tSemestre: " << apellido << endl;
cout << "\tEdad: " << numero << endl;
cout << "\tNombre mascota" << nombreMascota << endl;
cout << "\tTipo mascota" << tipoMascota << endl;
cout << "\tEdad mascota" << edadMascota << endl;
cout << "\t________________________________\n\n";
cout << "\tRealmente deseas eliminar el registro actual (S/N)? ---> ";
cin >> opca;
if (opca == 'S' or opca == 's') {
cout << "\n\n\t\t\tRegistro eliminado...\n\n\t\t\a";
}
else {
aux << clave << " " << nombre << " " << apellido << " " << numero << " " << nombreMascota << " " << tipoMascota << " " << edadMascota << endl;
}
}
else {
aux << clave << " " << nombre << " " << apellido << " " << numero << " " << nombreMascota << " " << tipoMascota << " " << edadMascota << endl;
}
lectura >> clave;
}
}
else {
cout << "\n\tEl archivo no se pudo abrir \n";
}
if (encontrado == false) {
cout << "\n\tNo se encontro ningun registro con la clave: " << auxclave << "\n\n\t\t\t";
}
aux.close();
lectura.close();
remove("alumnos.txt");
rename("auxiliar.txt", "alumnos.txt");
}
void consultas()
{
//Lectura de archivos
ifstream lectura;
lectura.open("alumnos.txt", ios::out | ios::in);//CREA, ESCRIBE O LEE
if (lectura.is_open()) {
//LEYENDO Y MOSTRANDO CADA CAMPO DEL ARCHIVO DE FORMA SECUENCIAL
lectura >> clave;
while (!lectura.eof()) {
lectura >> nombre >> apellido >> grupo >> numero;
cout << "\n";
cout << "\tClave: " << clave << endl;
cout << "\tNombre: " << nombre << endl;
cout << "\tApellido: " << apellido << endl;
cout << "\tNumero: " << numero << endl;
cout << "\tNombre mascota" << nombreMascota << endl;
cout << "\tTipo mascota" << tipoMascota << endl;
cout << "\tEdad mascota" << edadMascota << endl;
lectura >> clave;
cout << "\t________________________________\n";
}
}
else {
cout << "El archivo no se pudo abrir \n";
}
lectura.close();
}
void buscar()
{
ifstream lectura;
lectura.open("alumnos.txt", ios::out | ios::in);
encontrado = false;
if (lectura.is_open()) {
cout << "\n\tIngresa la clave del alumno que deseas buscar: ";
cin >> auxclave;
lectura >> clave;
while (!lectura.eof()) {
lectura >> nombre >> apellido >> grupo >> numero;
//comparar cada registro para ver si es encontrado
if (auxclave == clave) {
cout << "\n";
cout << "\tNit: " << clave << endl;
cout << "\tNombre: " << nombre << endl;
cout << "\tApellido: " << apellido << endl;
cout << "\tNumero: " << numero << endl;
cout << "\tNombre mascota" << nombreMascota << endl;
cout << "\tTipo mascota" << tipoMascota << endl;
cout << "\tEdad mascota" << edadMascota << endl;
cout << "\t________________________________\n";
encontrado = true;
break;
}//fin del if mostrar encontrado
//lectura adelantada
lectura >> clave;
}//fin del while
if (encontrado == false) {
cout << "\n\n\tNo hay registros con la clave: " << auxclave << "\n\n\t\t\t";
}
}
else {
cout << "\n\tAun no se pudo abrir el archivo...";
}
lectura.close();
}
void modificar()
{
ofstream aux;
ifstream lectura;
encontrado = false;
aux.open("auxiliar.txt", ios::out);
lectura.open("alumnos.txt", ios::in);
if (aux.is_open() && lectura.is_open()) {
cout << "\n";
cout << "\tIngresa la clave del alumno que deseas modificar: ";
cin >> auxclave;
lectura >> clave;
while (!lectura.eof()) {
lectura >> nombre >> apellido >> grupo >> numero;
if (auxclave == clave) {
encontrado = true;
cout << "\n";
cout << "\tClave: " << clave << endl;
cout << "\tNombre: " << nombre << endl;
cout << "\tSemestre: " << apellido << endl;
cout << "\tGrupo: " << grupo << endl;
cout << "\tEdad: " << numero << endl;
cout << "\t________________________________\n\n";
cout << "\tIngresa el nuevo nombre del alumno con la clave: " << auxclave << "\n\n\t---> ";
cin >> auxnombre;
aux << clave << " " << auxnombre << " " << apellido << " " << numero << endl;
cout << "\n\n\t\t\tRegistro modificado...\n\t\t\a";
}
else {
aux << clave << " " << nombre << " " << apellido << " " << numero << endl;
}
lectura >> clave;
}
}
else {
cout << "\n\tEl archivo no se pudo abrir \n";
}
if (encontrado == false) {
cout << "\n\tNo se encontro ningun registro con la clave: " << auxclave << "\n\n\t\t\t";
}
aux.close();
lectura.close();
remove("alumnos.txt");
rename("auxiliar.txt", "alumnos.txt");
}
int main()
{
system("color f0");
int opc;
do {
system("cls");
cout << "\n\t Ingreso de datos Veterinaria\n\n";
cout << "\n\t1.-Altas";
cout << "\n\t2.-Eliminar";
cout << "\n\t3.-Consultas";
cout << "\n\t4.-Buscar un registro";
cout << "\n\t5.-Modificaciones";
cout << "\n\t6.-Salir";
cout << "\n\n\tElige una opcion: ";
cin >> opc;
switch (opc)
{
case 1: {
system("cls");
altas();
cout << "\n\t\t";
system("pause");
break;
}
case 2: {
system("cls");
bajas();
cout << "\n\t\t";
system("pause");
break;
}
case 3: {
system("cls");
consultas();
cout << "\n\t\t";
system("pause");
break;
}
case 4: {
system("cls");
buscar();
cout << "\n\t\t";
system("pause");
break;
}
case 5: {
system("cls");
modificar();
cout << "\n\t\t";
system("pause");
break;
}
case 6: {
cout << "\n\n\tHa elegido salir...\n\n\t\t"; system("pause");
break;
}
default: {
cout << "\n\n\tHa elegido una opcion inexistente...\n\n\t\t"; system("pause");
break;
}
}//fin switch
} while (opc != 6);
system("cls");
return 0;
}