Dev - C++ - Problema con Sintaxis [Ficheros]

 
Vista:
Imágen de perfil de Omar

Problema con Sintaxis [Ficheros]

Publicado por Omar (14 intervenciones) el 09/11/2015 19:09:26
Disculpen los mensajes repetidos anteriormente, la pagina me devolvia un error y repeti el proceso varias veces sin darme cuenta.
mi problema es el siguiente:
Agregue un submenu de busquedas (que estoy completando aun) cuando entro al menu buscar y salgo de ahi jala correctamente pero ya en el menu principal y si intento salir me pregunta el codigo para modificar, por que paso directamente hasta halla?
Alguien me podria orientar en la sintaxis del codigo?

Estaba pensando en hacer una funcion llamada menu y ahi adentro incluir el switch con los codigos para buscar, sera buena idea?

INCLUI UNA FOTO AL FINAL

Gracias por su tiempo





#include<cstdlib>
#include<iostream>
#include<fstream>
#include<string.h>
#include<windows.h>
#include<cstring>


using namespace std;
void altas();
void bajas();
void buscarclave();
void buscarnombre();
void consultas();
void modificaciones();
void salir();
void menu();

//Variables Globales
char auxNombre[30];
char nombre[30], aula[10], materia[20], hora[10], dia[20], resp[1];
int i, semestre=0, edad=0, clave=0, auxClave=0;
bool encontrado=false;
char auxGrupo[10];
int op=0;

/*EN LA LINEA SIGUIENTE LAS CADENAS CHAR REQUIEREN
EL ESPACIO EN BLANCO PARA QUE SEA UNA SINTAXIS CORRECTA*/

char mensaje[9]={'D','A','T','A',' ','B','A','S','E'};
char mensaje2[9]={'C','O','M','P','L','E','T','E','D'};
char mensaje3[14]={'L','A','B','O','R','A','T','O','R','I','O',' ','D','E'};
char mensaje4[16]={'E','L','E','C','T','R','O','N','I','C','A',' ','L','E','A','C'};
int main(){
system("color 60");
menu();
return 0;
system("PAUSE");
}
void menu(){
int opcion=0;
do{
cout <<"\n\n\t\t";
for (i=0; i<14; i++){
cout <<mensaje3[i];
Sleep(50);
}
cout <<"\n\t\t";
for (i=0; i<16; i++){
cout <<mensaje4[i];
Sleep(50);
}
cout <<"\n";
cout<<"\n\t\t C++" <<endl;
cout<<"\n\t\t1. Capturar Datos"<<endl;
cout<<"\t\t2. Eliminar Datos"<<endl;
cout<<"\t\t3. Consultar Datos"<<endl;
cout<<"\t\t4. Buscar Datos"<<endl;
cout<<"\t\t5. Modificar un Dato"<<endl;
cout<<"\t\t6. Salir"<<endl;
cout<<"\t\tQue deseas hacer? ";
cin>>opcion;
switch(opcion){
case 1:
altas();
break;
case 2:
bajas();
break;
case 3:
consultas();
break;
case 4:
cout <<"\n\t\tEstas en Buscar";
cout <<"\n\t\t1.Buscar por Nombre";
cout <<"\n\t\t2.Buscar por Codigo";
cout <<"\n\t\t3.Buscar por Aula";
cout <<"\n\t\t4.Buscar por Semestre";
cout <<"\n\t\t5.Salir";
cout <<"\n\t\tElige una Opcion...";
cin >>op;
switch(op){
case 1:
buscarnombre();
break;
case 2:
buscarclave();
break;
case 3:
break;
case 4:
break;
case 5:
menu();
break;
default:
cout<<"\n\t\t¡Opcion Incorrecta!"<<endl;
}

case 5:
modificaciones();
break;
case 6:
salir();
break;
default:
cout<<"\n\t\t¡Opcion Incorrecta!"<<endl;
}
}while(opcion!=6);
}//Fin funcion menu

void altas(){
ofstream escritura;
ifstream consulta;
bool repetido=false;

escritura.open("alumnos.txt",ios::out|ios::app);
consulta.open("alumnos.txt",ios::in);
if(escritura.is_open() && consulta.is_open()){ //VALIDACION
do{
cout<<"\n\t\tALUMNOS";
cout<<"\n\t\tIngresa la Clave del Alumno: ";
cin>>auxClave;
consulta>>clave;
while(!consulta.eof()){
consulta>>nombre>>semestre>>aula>>edad>>materia>>hora>>dia;
if(clave==auxClave){
cout<<"\n\t\tYa Existe un Registro con esta Clave"<<endl;
repetido=true;
break;
}
consulta>>clave;
}
if(repetido==false){
cout<<"\n\t\tIngresa el nombre: ";
cin>>nombre;
cout<<"\n\t\tIngresa el Semestre: ";
cin>>semestre;
cout<<"\n\t\tIngresa el Aula: ";
cin>>aula;
cout<<"\n\t\tIngresa la Edad: ";
cin>>edad;
cout<<"\n\t\tIngresa la Materia: ";
cin>>materia;
cout<<"\n\t\tIngresa la Hora de Registro: ";
cin>>hora;
cout<<"\n\t\tIngresa el Dia de Registro: ";
cin>>dia;
escritura<<auxClave<<" "<<nombre<<" "<<semestre<<" "<<aula<<" "<<edad<<" "<<materia<<" "<<hora<<" "<<dia <<endl;
cout<<"\n\t\tRegistro Ageragado"<<endl;
cout<<"\n\tDesea agregar otro Alumno?";
cin>>resp;

}
}while(resp[0]=='S'|resp[0]=='s');

}
else{
cout<<"Error, el Archivo No se Pudo Abrir o No ha sido Creado"<<endl;
}
escritura.close();
consulta.close();
}//Fin funcion altas

void consultas(){
ifstream lectura;
lectura.open("alumnos.txt",ios::out|ios::in);
if(lectura.is_open()){
cout<<"\n\t\tRegistros del Archivo alumnos.txt"<<endl;
lectura>>clave;
while(!lectura.eof()){
lectura>>nombre>>semestre>>aula>>edad>>materia>>hora>>dia;
cout<<"\t\t________________________________"<<endl;
cout<<"\n\t\tClave: "<<clave<<endl;
cout<<"\t\tNombre: "<<nombre<<endl;
cout<<"\t\tSemestre: "<<semestre<<endl;
cout<<"\t\tGrupo: "<<aula<<endl;
cout<<"\t\tEdad: "<<edad<<endl;
cout<<"\t\tMateria:"<<materia<<endl;
cout<<"\t\tHora:"<<hora<<endl;
cout<<"\t\tDia:"<<dia<<endl;
lectura>>clave;
cout<<"\t\t________________________________"<<endl;
}
}else{
cout<<"\n\t\tError, el Archivo No se Pudo Abrir, No ha sido creado"<<endl;
}
lectura.close();
}//Fin funcion consultas

void bajas(){
ofstream aux;
ifstream lectura;
encontrado=false;
auxClave=0;
aux.open("auxiliar.txt",ios::out);
lectura.open("alumnos.txt",ios::in);
if (aux.is_open() && lectura.is_open()){
cout <<"\n\tIngresa la Clave del Alumno que deseas Eliminar:";
cin >>auxClave;
lectura>>clave;
while(!lectura.eof()){
lectura>>nombre>>semestre>>aula>>edad>>materia>>hora>>dia;
if(auxClave==clave){
encontrado=true;
cout <<"\n\tRegistro Eliminado";
}else{
aux<<clave<<" "<<nombre<<" "<<semestre<<" "<<aula<<" "<<edad<<" "<<materia<<" "<<hora<<" "<<dia <<endl;
}
lectura>>clave;
}
}else{
cout<<"\n\tNo se pudo Abrir el Archivo, o aun no ha sido Creado"<<endl;
}
if(encontrado==false){
cout <<"\n\tNo se encontro ningun Registro con Clave:" <<auxClave;
}
aux.close();
lectura.close();
remove("alumnos.txt");
rename("auxiliar.txt","alumnos.txt");
}
//**********************BUSCAR POR NOMBRE*********************************
void buscarnombre(){
ifstream lectura;//CREANDO VARIABLE TIPO LECTURA
lectura.open("alumnos.txt",ios::out|ios::in);//ABRIMOS EL ARCHIVO
if (lectura.is_open()){
cout <<"\n\tIngresa el Nombre del Alumno que deseas Buscar:";
cin >>auxNombre;
lectura>>nombre;//LECTURA ADELANTADA
encontrado=false;
while(!lectura.eof())
{
lectura >>clave>>semestre >>aula >>edad >>materia >>hora >>dia;
//COMPARAR CADA REGISTRO
if (strcmp(auxNombre,nombre)==0){
cout <<"\n\tNombre:" <<nombre;
cout <<"\n\tSemestre:" <<semestre;
cout <<"\n\tGrupo:" <<aula;
cout <<"\n\tEdad:" <<edad;
cout <<"\n\tMateria:"<<materia;
cout <<"\n\tHora:"<<hora;
cout <<"\n\tDia:"<<dia;
cout <<"\n______________________________";
encontrado = true;
}
lectura>>nombre;//LECTURA ADELANTADA

}
if (encontrado==false){
cout <<"\n\tNo hay registros con el Grupo" <<auxGrupo;
}
}
else{
cout <<"\n\tNo se pudo abrir el Archivo, aun no ha sido Creado";
}
//***************CERRANDO ARCHIVO***************
lectura.close();


}
//**********************BUSCAR POR CLAVE**********************************
void buscarclave(){

ifstream lectura;//Creamos la variable de tipo lectura
lectura.open("alumnos.txt",ios::out|ios::in);//Abrimos el archivo
//validando la apertura del archivo
encontrado=false;
if(lectura.is_open()){
cout<<"\n\t\tIngresa la Clave del Alumno que deseas Buscar: ";
cin>>auxClave;
lectura>>clave;//lectura adelantada

while(!lectura.eof()){
lectura>>nombre>>semestre>>aula>>edad>>materia>>hora>>dia;//leyendo los campos del registro
//Comparar cada registro para ver si es encontrado
if(auxClave==clave){
cout<<"\n\t\t______________________________"<<endl;
cout<<"\t\tClave: "<<clave<<endl;
cout<<"\t\tNombre: "<<nombre<<endl;
cout<<"\t\tSemestre: "<<semestre<<endl;
cout<<"\t\tGrupo: "<<aula<<endl;
cout<<"\t\tEdad: "<<edad<<endl;
cout<<"\t\tMateria:"<<materia<<endl;
cout<<"\t\tHora:"<<hora<<endl;
cout<<"\t\tDia:"<<dia<<endl;
cout<<"\t\t______________________________"<<endl;
encontrado=true;
}

lectura>>clave;//lectura adelantada
}
if(encontrado==false){
cout<<"\n\t\tNo hay registros con la Clave "<<auxClave<<endl;
}
}else{
cout<<"\n\t\tNo se pudo Abrir el Archivo, aun no ha sido Creado"<<endl;
}
//cerrando el archivo
lectura.close();

}
void modificaciones(){
ofstream aux;
ifstream lectura;
encontrado=false;
auxClave=0;
char auxNombre[30];
aux.open("auxiliar.txt",ios::out);
lectura.open("alumnos.txt",ios::in);
if (aux.is_open() && lectura.is_open()){
cout <<"\n\tIngresa la Clave del Alumno que deseas Modificar:";
cin >>auxClave;
lectura>>clave;
while(!lectura.eof()){
lectura>>nombre>>semestre>>aula>>edad>>materia>>hora>>dia;
if(auxClave==clave){
encontrado=true;
cout <<"\n\t________________________________";
cout <<"\n\tClave:" <<clave;
cout <<"\n\tNombre:" <<nombre;
cout <<"\n\tSemestre:" <<semestre;
cout <<"\n\tGrupo:" <<aula;
cout <<"\n\tEdad:" <<edad;
cout<<"\n\tMateria:"<<materia;
cout<<"\n\tHora:"<<hora;
cout<<"\n\tDia:"<<dia;
cout <<"\n\tIngresa el Nuevo Nombre del Alumno con Clave:" <<clave <<endl;
cout <<"\n\t";
cin >>auxNombre;
aux<<clave<<" "<<auxNombre<<" "<<semestre<<" "<<aula<<" "<<edad<<" "<<materia<<" "<<hora<<" "<<dia <<endl;
cout <<"\n\tRegistro Modificado";
}else{
aux<<clave<<" "<<nombre<<" "<<semestre<<" "<<aula<<" "<<edad<<" "<<materia<<" "<<hora<<" "<<dia <<endl;
}
lectura>>clave;
}
}else{
cout<<"\n\tNo se pudo Abrir el Archivo, o aun no ha sido Creado"<<endl;
}
if(encontrado==false){
cout <<"\n\tNo se encontro ningun Registro con Clave:" <<auxClave;
}
aux.close();
lectura.close();
remove("alumnos.txt");
rename("auxiliar.txt","alumnos.txt");
}
void salir(){
i=0;
cout <<"\n\n\t\t";
for (i=0; i<9; i++){
cout <<mensaje[i];
Sleep(100);
}
cout <<"\n\t\t ";
for (i=0; i<9; i++){
cout <<mensaje2[i];
Sleep(100);
}
cout <<"\n\n\n";
}
222
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
Imágen de perfil de Omar

Problema con Sintaxis [Ficheros]

Publicado por Omar (14 intervenciones) el 09/11/2015 19:29:52
Intente lo que comente, borre las funciones de buscarclave y buscarnombre y cree solo una de buscar y adentro de esa implemento los modulos dentro de un switch, pero me da un error:

error:j ump to case label [-fpermisive]

Tambien tengo duda sobre la llamada de la funcion "menu" en el case 5, para retornar al menu principal, no me parece que sea la mejor manera.


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
void buscar(){
                cout <<"\n\t\tEstas en Buscar";
                cout <<"\n\t\t1.Buscar por Nombre";
                cout <<"\n\t\t2.Buscar por Codigo";
                cout <<"\n\t\t3.Buscar por Aula";
                cout <<"\n\t\t4.Buscar por Semestre";
                cout <<"\n\t\t5.Salir";
                cout <<"\n\t\tElige una Opcion...";
                cin >>op;
                switch(op){
                case 1:
                   ifstream lectura;//CREANDO VARIABLE TIPO LECTURA
    lectura.open("alumnos.txt",ios::out|ios::in);//ABRIMOS EL ARCHIVO
    if (lectura.is_open()){
        cout <<"\n\tIngresa el Nombre del Alumno que deseas Buscar:";
        cin >>auxNombre;
        lectura>>nombre;//LECTURA ADELANTADA
        encontrado=false;
        while(!lectura.eof())
        {
            lectura >>clave>>semestre >>aula >>edad >>materia >>hora >>dia;
            //COMPARAR CADA REGISTRO
            if (strcmp(auxNombre,nombre)==0){
                    cout <<"\n\tNombre:" <<nombre;
                    cout <<"\n\tSemestre:" <<semestre;
                    cout <<"\n\tGrupo:" <<aula;
                    cout <<"\n\tEdad:" <<edad;
                    cout <<"\n\tMateria:"<<materia;
                    cout <<"\n\tHora:"<<hora;
                    cout <<"\n\tDia:"<<dia;
                    cout <<"\n______________________________";
                    encontrado = true;
            }
            lectura>>nombre;//LECTURA ADELANTADA
 
        }
        if (encontrado==false){
              cout <<"\n\tNo hay registros con el Grupo" <<auxGrupo;
        }
    }
    else{
        cout <<"\n\tNo se pudo abrir el Archivo, aun no ha sido Creado";
    }
//***************CERRANDO ARCHIVO***************
lectura.close();
 
                break;
                case 2:
 
//**********************BUSCAR POR CLAVE**********************************
                    ifstream lectura;//Creamos la variable de tipo lectura
            lectura.open("alumnos.txt",ios::out|ios::in);//Abrimos el archivo
            //validando la apertura del archivo
            encontrado=false;
            if(lectura.is_open()){
            cout<<"\n\t\tIngresa la Clave del Alumno que deseas Buscar: ";
            cin>>auxClave;
            lectura>>clave;//lectura adelantada
 
            while(!lectura.eof()){
            lectura>>nombre>>semestre>>aula>>edad>>materia>>hora>>dia;//leyendo los campos del registro
            //Comparar cada registro para ver si es encontrado
            if(auxClave==clave){
                cout<<"\n\t\t______________________________"<<endl;
                cout<<"\t\tClave: "<<clave<<endl;
                cout<<"\t\tNombre: "<<nombre<<endl;
                cout<<"\t\tSemestre: "<<semestre<<endl;
                cout<<"\t\tGrupo: "<<aula<<endl;
                cout<<"\t\tEdad: "<<edad<<endl;
                cout<<"\t\tMateria:"<<materia<<endl;
                cout<<"\t\tHora:"<<hora<<endl;
                cout<<"\t\tDia:"<<dia<<endl;
                cout<<"\t\t______________________________"<<endl;
                encontrado=true;
            }
 
            lectura>>clave;//lectura adelantada
            }
            if(encontrado==false){
                 cout<<"\n\t\tNo hay registros con la Clave "<<auxClave<<endl;
            }
        }else{
        cout<<"\n\t\tNo se pudo Abrir el Archivo, aun no ha sido Creado"<<endl;
        }
        //cerrando el archivo
       lectura.close();
 
       }
 
 
                break;
                case 3:
                break;
                case 4:
                break;
                case 5:
                    menu();
                break;
                default:
                cout<<"\n\t\t¡Opcion Incorrecta!"<<endl;
                }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con Sintaxis [Ficheros]

Publicado por Hector (45 intervenciones) el 10/11/2015 02:15:27
Hice revisión del primer código que enviaste.

La primera cosa a notar es que te falto agregar una sentencia, el break del case 4 del menu(), luego de eso se genera un problema mas interesante. Se cierra dos veces el menu(), porque pasa eso.

Veras amigo eso que haces de llamar la función menu() al elegir la opción 5, es el empleo de funciones re-cursivas, funciones re-cursivas significa llamar la misma función una y otra vez acumulando sentencias hasta poder cumplir un objetivo.

Piénsalo como una pila de bloques, en donde cada bloque simboliza la función menu(), cuando hiciste la llamada al elegir la opción 5, se volvió a llamar a otro menú el cual realiza lo mismo que codificaste, sin embargo recuerda que todavía quedan sentencias de la primera llamada que hiciste de menu, es decir, tienes dos funciones menu() acumuladas, por lo que cuando cierres el menú que te salga, todavía te quedara pendiente la porción restante del otro código.

Lo que puedes hacer es crear una función llamada menu_buscar() que sera el menú de buscar, y tendrá su respectivo ciclo verificador, lo agregas en el case 4 y asi no tendras que preocuparte por llamar menu ya que cuando salga del menu_buscar, volvera al ciclo del menu principal.

Otra cosa, no te recomiendo meter todo el código en una sola función ya que es una mala practica y a la larga te generara muchos problemas, te puedes saltar elementos, si tienes un error no podrás identificar mas rápido en que área del código esta el problema.

Divide el problema en pequeñas porciones y eso te facilitara el desarrollo del programa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Omar

Problema con Sintaxis [Ficheros]

Publicado por Omar (14 intervenciones) el 10/11/2015 02:42:04
Te he entendido a la perfeccion! te agradezco mucho tu tiempo y tu esfuerzo por contestarme, con seccionar el codigo te refieres por ejemplo a utilizar headers? para meter ahi por ejemplo todas las funciones y solo invocarlas en el main.cpp

Ya estoy en eso del menu_buscar().. pero, me recomiendas meter tambien cada tipo de busqueda en una funcion por separado como, buscar_codigo(), buscar_nombre(), buscar_sem...? o solo con el menu_buscar implemento el switch dentro y cada codigo a su respectivo case?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con Sintaxis [Ficheros]

Publicado por Hector (45 intervenciones) el 10/11/2015 14:39:21
No es lo que quería decir con separar el programa pero no es una mala idea, puedes tener un header menú y un header buscar, el objetivo es que se pueda entender el programa.

Te recomiendo crear una función por cada tipo de búsqueda, para que en caso de tener un error ya tengas una referencia sobre en que área puede estar el problema, y así evitas tener que mezclar códigos, mantener por separado el código de menú del de buscar, y solo relacionarlos haciendo llamadas de sus funciones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar