C/Visual C - Pasante

 
Vista:

Pasante

Publicado por Ivan Alonso (1 intervención) el 08/08/2005 19:08:41
Hola, necesito ayuda con un programa en c++ donde manejo un archivo secuencial usando ofstream e ifstream el problema es que no se como realizar una busqueda en el archivo y con base en esa busqueda hacer modificaciones a un registro o bien dar de baja un registro por favor ayudenme hasta ahora solo tengo esto pero en la funcion cambios se cicla y ya no puedo hacer mas.

#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <process.h>
#include <stdio.h>
#include <string.h>
#include <iomanip.h>

int menu_prin(); //Prototipo de la funcion que llama al menu principal
void alta_usr();
void tipo_srv(char [14]);
void consulta();
void cambios();
void modif();
void display(char *, char *, char *, char *, char *, char *, char *);

struct
{
char tel[11];
char nombre[30];
char paterno[20];
char materno[20];
char tipo_serv[14];
char username[30];
char pwd[20];
}user={{' '},{' '},{' '},{' '},{' '},{' '},{' '}};

void main()
{
int sel;
char opc;
do
{
system("cls");
sel = menu_prin();
switch(sel)
{
case 1: alta_usr();
break;
case 2: consulta();
break;
case 3: modif();
break;
case 4: exit(0);
break;
default: cout << "\tOpcion Invalida" << endl;
break;
}
cout << "\n\t\tVolver a menu principal? (S/N) ";
cin >> opc;
}
while(opc == 'S' || opc == 's');
}

int menu_prin()
{
int sel;
cout << "\tSistema de Administracion de usuarios Prodigy Infinitum de Telmex"<< endl;
cout << "\t\tConectate en Infinitum al doble de velocidad" << endl;
cout << "\t\t\t\tElige una opcion";
cout << "\n\n\t\t\t1. Alta de usuarios" << endl;
cout << "\n\t\t\t2. Mostrar Usuarios" << endl;
cout << "\n\t\t\t3. Modificaciones" << endl;
cout << "\n\t\t\t4. Salir" << endl;
cin >> sel;
return sel;
}

//Realiza el alta de los usuarios del servicio de internet
void alta_usr()
{
char opt;
// constructor ofstream abre el archivo users.dat
ofstream outUsrFile( "users.dat", ios::app );
if ( !outUsrFile )
{ // operador ! sobrecargado
cerr << "No se puede abrir el archivo" << endl;
exit( 1 ); // prototipo en stdlib.h
}
do
{
system("cls");
cout << "\t\tAlta de usuarios Prodigy Infinitum de Telmex"<< endl;
cout << "\t\tConectate en Infinitum al doble de velocidad" << endl;
printf("\n\t\t\tDatos del contacto:\n\t");
printf("\n\tIntroduce el numero de Telefono con clave LADA (10 digitos)\n\t");
gets(user.tel);
outUsrFile.clear(); // reset eof for next input
printf("\n\tApellido Paterno:\n\t");
gets(user.paterno);
printf("\n\tApellido Materno:\n\t");
gets(user.materno);
printf("\n\tNombre (s) (mas de uno usa (_)):\n\t");
gets(user.nombre);
printf("\n\tTipo de servicio:\n\t");
tipo_srv(user.tipo_serv);
printf("\n\tNombre de usuario:\n\t");
gets(user.username);
printf("\n\tContrasena:\n\t");
gets(user.pwd);
outUsrFile << user.tel << ' '
<< user.paterno << ' '
<< user.materno << ' '
<< user.nombre << ' '
<< user.tipo_serv << ' '
<< user.username << ' '
<< user.pwd << '\n';
cout << "\n\t\tDeseas capturar otro usuario? (s/n)\t";
cin >> opt;
}
while (opt == 'S' || opt == 's');
outUsrFile.close();
}

void tipo_srv(char tipo[14])
{
int sel;
do
{
cout << "\n\tSelecciona el tipo de servicio" << endl;
cout << "\t\t\t1. Infinitum 512" << endl;
cout << "\t\t\t2. Infinitum 1MB" << endl;
cout << "\t\t\t3. Infinitum 2MB" << endl;
cin >> sel;
switch(sel)
{
case 1:
strcpy(tipo, "Infinitum_512");
break;
case 2:
strcpy(tipo, "Infinitum_1MB");
break;
case 3:
strcpy(tipo, "Infinitum_2MB");
break;
default: cout << "\tOpcion Invalida" << endl;
break;
}
}
while (sel < 1 || sel > 3);
}

void consulta()
{
system("cls");
// ifstream constructor opens the file
ifstream inUsrFile( "users.dat", ios::in );
if ( !inUsrFile )
{
cerr << "File could not be opened\n";
exit( 1 );
}
cout << setiosflags( ios::left )
<< setw(11) << "Telefono"
<< setw(11) << "A. Paterno"
<< setw(11) << "A. Materno"
<< setw(11) << "Nombre"
<< setw(14) << "Servicio"
<< setw(11) << "Username"
<< "Password\n";
while ( inUsrFile >> user.tel
>> user.paterno
>> user.materno
>> user.nombre
>> user.tipo_serv
>> user.username
>> user.pwd)
display(user.tel, user.paterno, user.materno, user.nombre, user.tipo_serv, user.username, user.pwd);
inUsrFile.close();
}

void display(char *tl, char *pat, char *mat, char *nm, char *tip, char *un, char *pw)
{
cout << setiosflags( ios::left )
<< setw(11) << tl
<< setw(11) << pat
<< setw(11) << mat
<< setw(11) << nm
<< setw(14) << tip
<< setw(11) << un
<< pw << '\n';
}

void modif()
{
int sel;
do
{
cout << "\n\tSelecciona el tipo de servicio" << endl;
cout << "\n\t\t\t1. Cambiar datos" << endl;
cout << "\t\t\t2. Eliminar Registro" << endl;
cin >> sel;
switch(sel)
{
case 1:
cambios();
break;
case 2:
cout << "En desarrollo" << endl;
break;
default: cout << "\tOpcion Invalida" << endl;
break;
}
}
while (sel < 1 || sel > 2);
}

void cambios()
{
int sel;
char phone[11];
system("cls");
fstream UsrFile( "users.dat", ios::in | ios::out );
if ( !UsrFile )
{ // operador ! sobrecargado
cerr << "No se puede abrir el archivo" << endl;
exit( 1 ); // prototipo en stdlib.h
}
do
{
cout << "\tCriterio de Busqueda" << endl;
cout << "\n\t\t1. Telefono" << endl;
cout << "\t\t2. Username" << endl;
cin >> sel;

switch(sel)
{
case 1:
{
printf("Teclea el numero de telefono (10 digitos): ");
gets(phone);
UsrFile >> user.tel
>> user.paterno
>> user.materno
>> user.nombre
>> user.tipo_serv
>> user.username
>> user.pwd;
while(!UsrFile.eof())
{
do
{
cout << "No existe el registro" << endl;
}
while(strcmp(phone,user.tel)!= 0);
display(user.tel, user.paterno, user.materno, user.nombre, user.tipo_serv, user.username, user.pwd);
UsrFile >> user.tel
>> user.paterno
>> user.materno
>> user.nombre
>> user.tipo_serv
>> user.username
>> user.pwd;
// cout << "Dato a modificar";

}
UsrFile.clear(); // reset eof for next input
UsrFile.seekg( 0 ); // move to beginning of file

}
break;
case 2:
cout << "En desarrollo" << endl;
break;
default: cout << "\tOpcion Invalida" << endl;
break;
}
}
while (sel < 1 || sel > 2);
}
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