Hola amigos de elhacker.net XD
(Voy empezando en esto de la programación porfavor no insultos todos fueron como yo alguna ves). Bueno el caso es que estoy siguiendo un tutorial que me encontré en Internet de aprender c++ y dentro de este viene un ejemplo de una agenda el codigo es el siguiente:
#include <fstream> // Biblioteca para el manejo de ficheros
#include <iostream> // Biblioteca para la entrada-salida estándar
#include <cstdlib> // Biblioteca estándar de C
using namespace std;
// Ejemplo de una agenda de teléfonos con toda la información en disco.
//CONSTANTES
const char FINCAD = char(0);
const int MAXCAD = 80;
const int ENTER = '\n';
const char SP = ' ';
//TIPOS
typedef char TCadena[MAXCAD+1]; // MAXCAD caracteres + FINCAD
struct TPersona
{
TCadena nombre;
TCadena apellido1;
TCadena apellido2;
int telefono;
};
// CABECERA DE PROCEDIMIENTOS Y FUNCIONES
char menu();
void pausa();
void borrar_pantalla();
bool confirmar_salida();
void LeerPersona(TPersona &p);
void EscribirPersona(TPersona p);
// Algoritmos de Manejo de Ficheros de Texto
void insertarPersonaTXT(TCadena nombreFichero, TPersona p);
void listarAgendaTXT(TCadena nombreFichero);
void LeePersonaFicheroTXT(ifstream &fichero, TPersona &p);
void EscribePersonaFicheroTXT(ofstream &fichero, TPersona p);
// PROGRAMA PRINCIPAL
int main()
{
TPersona p;;
char opcion;
int num;
bool fin,encontrado;
TCadena nomFich;
fin = false;
do
{
borrar_pantalla();
opcion = menu();
switch(opcion)
{
case 'A': cout << "Nombre del Fichero: ";
cin >> nomFich;
LeerPersona(p);
insertarPersonaTXT(nomFich,p);
break;
case 'B': cout << "Nombre del Fichero: ";
cin >> nomFich;
listarAgendaTXT(nomFich);
break;
case 'X': fin = confirmar_salida();
break;
}
if (!fin)
{
pausa();
}
} while (!fin);
pausa();
return 0;
}
// IMPLEMENTACIÓN DE PROCEDIMIENTOS Y FUNCIONES
void pausa() //Funcion que hace una pausa en el sistema no retorna un valor
{
system("PAUSE");}
void borrar_pantalla()//Funcion que borra la pantalla no retorna un valor
{
system("CLS");
}
char menu() // Funcion que escribe el meni principal
{
char op;
cout << "AGENDA EN FICHERO" << endl;
cout << "-----------------" << endl;
cout << "Autor: <Apellidos> <Nombre>" << endl;
cout << "A. Insertar Persona TXT" << endl;
cout << "B. Listar TXT" << endl;
cout << "X. Salir del Programa." << endl;
cout << endl;
cout << "Introduzca Opción:";
cin >> op;
op = toupper(op);
while( ((op<'A') || (op>'B')) && (op!='X') )
{
cout << "... Opcion Incorrecta ..." << endl;
cout << endl;
cout << "Introduzca Opción:";
cin >> op;
op = toupper(op);
}
return op;
}
void LeerPersona(TPersona &p) //Funcion que pregunta al usauario los datos de la persona a guardar i los almacena en variables
{
cout << "Nombre : " ;
cin >> p.nombre;
cout << "Apellidos1: " ;
cin >> p.apellido1;
cout << "Apellidos2: " ;
cin >> p.apellido2;
cout << "Teléfono : ";
cin >> p.telefono;
}
void EscribirPersona(TPersona p) //Funcion que escribe en pantalla los datos de la variable
{
cout << "Nombre : " << p.nombre << endl;
cout << "Apellidos : " << p.apellido1
<< " " << p.apellido2 << endl;
cout << "Teléfono : " << p.telefono << endl;
}
bool confirmar_salida() //Funcion que saca al usuario de donde esta
{
char car;
cout << "¿Está seguro de salir (S/N)?";
cin >> car;
car = toupper(car);
return (car=='S');
}
// Algoritmos de Manejo de Ficheros de Texto
void insertarPersonaTXT(TCadena nombreFichero, TPersona p)
{
ofstream out;
out.open(nombreFichero,ios::app);
// Abro el fichero para añadir
if (out.bad())
{ // El fichero no existe ... lo creo
out.open(nombreFichero);
}
EscribePersonaFicheroTXT(out,p);
out.close();
}
void listarAgendaTXT(TCadena nombreFichero)
{ ifstream in;
TPersona persona;
in.open(nombreFichero);
if (in.bad())
{
cout << "Error al abrir el fichero: "
<< nombreFichero << endl;
}
else
{
LeePersonaFicheroTXT(in,persona);
while (!in.eof())
{
EscribirPersona(persona);
LeePersonaFicheroTXT(in,persona);
pausa();
}
in.close();
}
}
void LeePersonaFicheroTXT(ifstream &fichero, TPersona &p)
{
fichero >> p.nombre;
fichero >> p.apellido1;
fichero >> p.apellido2;
fichero >> p.telefono;
}
void EscribePersonaFicheroTXT(ofstream &fichero, TPersona p)
{
fichero << p.nombre << SP;
fichero << p.apellido1 << SP;
fichero << p.apellido2 << SP;
fichero << p.telefono << endl;
}
Bueno mi problema es que no entiendo varias partes de el código y me gustaría que me alludaran a comprender
Duda1: "const char FINCAD = char(0);" Como es que se declara esta variable se que es una constante del tipo char pero eso de "= char(0);" que significa por que hace eso???????????
Duda2: "typedef char TCadena[MAXCAD+1];" Esta linea tampoco la entiendo bien creo que es la asignacion de una varible pero no me queda claro que es lo que hace
Duda3: "void EscribirPersona(TPersona p);" En la declaración de esta función por que entre "TPersona" y "p" no hay una coma??????
( según creo eso es para que al llamar a esa variable en la función no se tenga que escribir el nombre completo y solo se escriba la "p" pero no estoy seguro corrijanme si estoy mal)
Duda4: "void LeerPersona(TPersona &p);" En esta función por que el parámetro "p" tiene una "&" antes?????????
Duda5: "TPersona p;;" En verdad esta linea no la entiendo nada :S si aguien me pudiera iluminar un poco en porque el doble punto y coma al final y que es lo que hace
Duda6: "TCadena nomFich;" Igual como la anterior pero sin el doble punto y como pero que hace???????????
Bueno seria dos y agradecería mucho su ayuda y sus respuestas desde ya muchísimas gracias y se que mis dudas pueden ser tontas pero es que ya busque y busque en el tutorial y no viene nada de eso :'( no lo explica :'(