Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - arcanu

#1
Programación C/C++ / Problema con eof, de fstream
22 Noviembre 2010, 05:31 AM
Bueno tengo este codigo, y lo q pasa es q el final cuando estoy en el menu de mostrar datos, siempre me muesta el ultimo dato registrado dos veces, como si en la parte de agregar lo agregara dos veces.

este es el while ubicado casi al finalq  repite el numero de veces al mostar  y me muestra un valor mas. while (reg && !reg.eof()) tmb lo cambie por
while ( !reg.eof()) y me da lo mismo, gracias.

#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
struct datos
{
  char nombre[50];
  int telefono;
  char direccion[50];
  char email[50];
  int valido;       //valido=1->si existe        valido=0->no existe
  int valido2;  //checara si el registro es correcto... siempre sera igual a 1706887114
};
int menu()
{
  int n=0;
  system("cls");
  cout<<endl<<endl;
  cout<<"                 ==========================================="<<endl;
  cout<<"                 ||            AGENDA PERSONAL            ||"<<endl;
  cout<<"                 ==========================================="<<endl;
  cout<<"                 ||      1. AGREGAR NUEVO REGISTRO        ||"<<endl;
  cout<<"                 ||      2. BUSCAR REGISTRO               ||"<<endl;
  cout<<"                 ||      3. MOSTRAR TODOS LOS REGISTROS   ||"<<endl;
  cout<<"                 ||      4. SALIR                         ||"<<endl;
  cout<<"                 ==========================================="<<endl<<endl;
  while ((n<1) || (n>4))
    { cout<<"          Introduce un numero de las opciones listadas arriba [1-4]: "; cin>>n; }
  cout<<endl;
  return n;
}
void agregar(struct datos d)
{
  char na='s';        //na=preguntar si kiere nuevo registro
  while (na=='s')
    {
    char nn='x';  //nn=verificacion para agregar el registro
    system ("cls"); //borramos pantalla
    //guardamos los datos temporalmente en el struct
    cout<<"Nombre: "; cin>> d.nombre;
    cout<<"Telefono: "; cin>> d.telefono;
    cout<<"Direccion: "; cin>> d.direccion;
    cout<<"Email: "; cin>> d.email; cout<<endl;
    d.valido=1;   //decimos que el registro si existe
    d.valido2=1706887114; //con esto garantizamos que es uno de nuestros registros
    //verificamos si kiere agregar el nuevo registro
    while ((nn!='s') && (nn!='n'))
      { cout<<endl<<"Deseas agregar el nuevo registro? [s-n]: "; cin>>nn; }
    //agregamos
    if (nn=='s')
      {
       ofstream reg("registros.dat", ios::app | ios::binary); //activamos el archivo en modo de escritura  tomando en cuenta el parametro "app" para agregar en la ultima posicion del archivo
       if(!reg)                         //si no se pudo abrir el archivo
         { cout <<"No se puede abrir el fichero."; }
       reg.seekp(0, ios::end); // Colocar el cursor al final del archivo
       reg.write((char *) &d, sizeof(d));  //escribimos el nuevo registro
       reg.close();  //cerramos el archivo
       cout<<endl<<"Registro agregado exitosamente"<<endl;
       system("pause");
      }
    else
      {
       //borramos los datos temporales del struct
       strcpy(d.nombre,"");
       d.telefono=0;
       strcpy(d.direccion,"");
       strcpy(d.email,"");
       d.valido=0;
       d.valido2=0;
       cout<<endl<<"El Registro NO fue agregado"<<endl;
       system("pause");
      }
    na='x';
    while ((na!='s') && (na!='n'))
      { cout<<endl<<endl<<"Deseas agregar un registro nuevo? [s-n]: "; cin>>na; } //la validacion se hace en el while inicial
  }//endwhile
}
void modificar(struct datos d, int nm)
{
   char nnm='x';
   system ("cls"); //borramos pantalla
   //guardamos los datos temporalmente en el struct
   cout<<"Nombre: "; cin>> d.nombre;
   cout<<"Telefono: "; cin>> d.telefono;
   cout<<"Direccion: "; cin>> d.direccion;
   cout<<"Email: "; cin>> d.email; cout<<endl;
   d.valido=1; //decimos que si existe
   d.valido2=1706887114;
   //verificamos si kiere modificar el registro
   while ((nnm!='s') && (nnm!='n'))
     { cout<<endl<<"Deseas modificar este registro? [s-n]: "; cin>>nnm; }
   //agregamos
   if (nnm=='s')
     {
      ofstream reg("registros.dat", ios::out | ios::binary); //activamos el archivo en modo de escritura  (creamos el objeto 'reg')
      if(!reg)                         //si no se pudo abrir el archivo
        { cout <<"No se puede abrir el fichero."; }
      reg.seekp((nm-1)*sizeof(d));     //colocamos el apuntador en la posicion inicial del registro a modificar
      reg.write((char *) &d, sizeof(d));  //escribimos el nuevo registro
      reg.close();  //cerramos el archivo
      cout<<endl<<"Registro modificado exitosamente"<<endl;
     }
   else
     {
      //borramos los datos temporales del struct
      strcpy(d.nombre,"");
      d.telefono=0;
      strcpy(d.direccion,"");
      strcpy(d.email,"");
      d.valido=1;
      d.valido2=0;
      cout<<endl<<"El Registro NO fue modificado"<<endl;
     }
   system("pause");
}
void eliminar(struct datos d, int ne)
{
   system ("cls"); //borramos pantalla
   d.valido=0;   //modificamos "valid0" del struct para decir que ese registro no sera tomado en cuenta
   d.valido2=1706887114; //agregamos nuestra garantia de registro
   //ahora actualizamos el registro
   ofstream reg("registros.dat", ios::out | ios::binary); //activamos el archivo en modo de escritura  (creamos el objeto 'reg')
   if(!reg)                         //si no se pudo abrir el archivo
      { cout <<"No se puede abrir el fichero."<<endl; system("pause");}
   reg.seekp((ne-1)*sizeof(d));     //colocamos el apuntador en la posicion inicial del registro a modificar
   reg.write((char *) &d, sizeof(d));  //escribimos el nuevo registro
   reg.close();  //cerramos el archivo
   cout<<endl<<"Registro eliminado"<<endl;
   system("pause");
}
void buscar(struct datos d)
{
  int nb1=0, nb=-2;  //nb1=variable auxiliar para saber si kiere volver a buskar o salir  nb=variable que guarda el #de registro buskado
  while (nb1<4)
    {
    if (nb1==2)
      { modificar(d, nb); }
    else
      {
       if (nb1==3)
         { eliminar(d, nb); }
      }
    system("cls"); //borramos pantalla
    int nb=-2;
    while (nb<0)
      { cout<<"Introduce el registro a buscar [0 para salir]: "; cin>>nb; }
    if (nb!=0) //si kiere buskar...
      {
      ifstream reg("registros.dat", ios::in | ios::binary);      //activa el archivo en modo de lectura (creamos el objeto 'reg')
      reg.seekg((nb-1)*sizeof(d));     //colocamos el apuntador en la posicion inicial del registro encontrado
      reg.read((char *) &d, sizeof d);        //leemos el registro encontrado
      //verificamos que el registro es correcto
      if ((d.valido==1) && (d.valido2==1706887114))
        {
        cout<<endl<<endl<<"--------Registro encontrado--------"<<endl;
        cout<<"Nombre: "<<d.nombre<<endl<<"Telefono: "<<d.telefono<<endl<<"Direccion: "<<d.direccion<<endl<<"Email: "<<d.email<<endl<<endl;
        cout<<endl;    //imprimimos menu de opciones
        cout<<"                 ================================"<<endl;
        cout<<"                 ||          OPCIONES          ||"<<endl;
        cout<<"                 ================================"<<endl;
        cout<<"                 ||    1. NUEVA BUSQUEDA       ||"<<endl;
        cout<<"                 ||    2. MODIFICAR REGISTRO   ||"<<endl;
        cout<<"                 ||    3. ELIMINAR REGISTRO    ||"<<endl;
        cout<<"                 ||    4. SALIR                ||"<<endl;
        cout<<"                 ================================"<<endl<<endl;
        nb1=0;
        while ((nb1<1) || (nb1>4))
          { cout<<"     Introduce un numero de las opciones listadas arriba [1-4]: "; cin>>nb1; }
        cout<<endl;
        }//endif ((d.valido==1) && (d.valido2==1706887114))
      else //si el registro encontrado no es correcto
        {
         cout<<endl<<"El registro buscado no existe"<<endl;
         system("pause");
         nb1=1;
        }
      }//endif (nb!=0)
    else     //si ya se kiere salir
      { nb1=4; } //igualamos la bandera a 4 para que se salga
    } //endwhile
}
void mostrar(struct datos d)
{
  int nb11=0,con=0,nme=0,bandera=0;  //nb1=variable auxiliar para saber si kiere volver a buskar o salir  nb=variable que guarda el #de registro buskado
  while (nb11<3)
    {
    if (nb11==1)
      { modificar(d, nme); }
    else
      {
       if (nb11==2)
         { eliminar(d, nme); }
      }
    system("cls"); //borramos pantalla
    ifstream reg("registros.dat", ios::in | ios::binary);      //activa el archivo en modo de lectura (creamos el objeto 'reg')
    con=0;
    bandera=0;
    while (reg && !reg.eof()) //aca el problema
      {
       reg.seekg((con)*sizeof(d));     //colocamos el apuntador en la posicion inicial del registro encontrado
       reg.read((char *) &d, sizeof d);        //leemos el registro encontrado
       con++; //incrementamos contador del registro
       //verificamos que el registro es correcto
       if ((d.valido==1) && (d.valido2==1706887114))
         {
         bandera=1;
         cout<<endl<<"--------Registro "<<con<<"--------"<<endl;
         cout<<"Nombre: "<<d.nombre<<endl<<"Telefono: "<<d.telefono<<endl<<"Direccion: "<<d.direccion<<endl<<"Email: "<<d.email<<endl<<endl;
         }//endif
      }//endwhile
    if (bandera==1)
     {
      cout<<endl<<endl;    //imprimimos menu de opciones
      cout<<"                 ================================"<<endl;
      cout<<"                 ||          OPCIONES          ||"<<endl;
      cout<<"                 ================================"<<endl;
      cout<<"                 ||    1. MODIFICAR REGISTRO   ||"<<endl;
      cout<<"                 ||    2. ELIMINAR REGISTRO    ||"<<endl;
      cout<<"                 ||    3. SALIR                ||"<<endl;
      cout<<"                 ================================"<<endl<<endl;
      nb11=0;
      //preguntamos por que opcion kiere realizar
      while ((nb11<1) || (nb11>3))
        { cout<<"     Introduce un numero de las opciones listadas arriba [1-4]: "; cin>>nb11; }
      nme=0;
      while ((nme<1) && (nb11<3))
        { cout<<"     Introduce el numero del registro: "; cin>>nme; }
     }//endif bandera=1
    else
      { cout<<"No existen registros!"<<endl; system("pause"); nb11=3;}
    } //endwhile
}
int main()
{
  struct datos d;
  int x=0;
  fstream ("registros.dat", ios::out | ios::in | ios::binary);   //creamos el archivo
  int n=0,band=0;
  while (band==0)
    {
     n=menu();
     switch (n)
       {
        case 1: agregar(d); break;
        case 2: buscar(d); break;
        case 3: mostrar(d); break;
        case 4: band=1; break;
       }
    }
  system("PAUSE");
  return 0;
}
#2
gracias por el primerlink lo vere, creo q es la solucion, aunque creo que lo q hace es con una unidad extraible (usb,cd) vere si funciona con una particon de disco duro, y en cuanto ala vacuna, es para los autorun de usb, tendras por hay una par auna particion o funciona de la misma forma como si la particion fuera de usb?
#3
Dudas Generales / Administrar unidades de disco duro
24 Septiembre 2010, 20:13 PM
Bueno  tengo un problemita, tengo unas cabinas de internet, en la cual, vienen muchos jovenes a jugar, juegos como audition, rakion, o gunbound, y como sabran estos juegos se actulizan costantemente, io lo que tenia hace tiempo fue 3 unidades de disco  c: d: e:, en le e se guardaban archivos, de los clientes, las demas unidades c: y d: estan con deep freeze , pero un dia se metio un virus pr dicha unidad unidades, y tuve q formatear todas las pcs, ahora, quiero tratar de ver si puedo hacer para q esta unidad este en modo invisible y q nadie la pueda ver , y solo pueda guardar dichos juegos, para q se actulisen, claro teniendo congeladas las otras unidades.

Adjunto:
-He descargado el program No drives manager, pero no veo como configurarlo. y si ademas sera seguro o no., segun lei es para esconder el disco y ponerlo en form ainvisible, pero puedo ejercutar porgrmas de esta forma ?, que tan seguro puedo ser ?
-Actualmente uso el windows 7.

gracias de antemano por las respuestas.
#4
Windows / Administrar arranque del sistema operativo .
11 Septiembre 2010, 16:37 PM
Bueno, el problem q me da mi pc, es q hace unos meses instale win 7 , pero la pc era muy baja para poder correrla, entonces decidi eliminarlo, formate la unidad donde estaba instalado, pero ahora el problema recide q al prenden la pc, me sale el mensaje de escojer entre  win xp sp2 y win 7 , al darle en 7 no , aranca nada, me sale otro, menu donde tengo laopcion de reparar, pero al darle se reinicia , la pc:
Qusiera saber como borrar, ese mensaje de incio, por q ya no tengo el 7, ia intente en msconfig boot,inn, me sale una serie de comandos, comproe y esta bien, le di click derecho a mp, y inicio y recuperacion, y seleccione sistema, pero solo sale 1, gracias de antemano.
#5
Asu muchas gracias por sus respuestas, ia lo entendi , ahora no c q me paso, pero no logro donde copiar el menu.cpp, debe estar junto al main.cpp, del cual lo llamo? en la carpeta debug o afuerita o en la carpeta del compilador??, y si no necesita el main, principl darle una ruta, de como llama al menu, o como asi es q lo llama, al manu?.

De Todos mocdos , muchas gracias por las respuestas.Saludos.

EI: juntando mensajes.

Bueno, estuve tratando de ver en dond eponerlo, y encontre una solucion algo, defectuosa pero en su caso me sirvio.
Lo ejecute en cod block y funciono:

y aqui va..1 primero fue donde el compilar de code blocks. c/archivo.../codeblocks/win.., una ves aqui, entre a la carpeta, libreria, hay hay una serie de librerias , agarre una la copie, le modifique el monbre , por menu, y lo abri, le cambie su contenido por el metodo, de la chika q poste en el inicio, y guarde cambios, y como puso rob, use su menu, asi:

Citar#include "menu.h"
#include "iostream"

int main()
{
    char r = 's';
    while(r == 's')
    {
        menu();  //Mandamos llamar a la funcion
        cout << "Imprimir menu s/n"; cin >> r;
    }
    return 0;
}
y juas, q compilo, y lo llamo la metood q tenia en dicha libreria, es un metodo, no eficiente, peor para el caso como dije me sirvio, D , gracias por sus repsestas,

Tema solucionado..
#6
Muchas, gracias por responder, pero podrias ser algo mas especifico, como darme un ejemplo de como hacerlo y ese nuevo main alque le cambio de nombre donde deve estar guardado. mil gasias.
#7
Programación C/C++ / Ejercutar main desde otro main.
10 Septiembre 2010, 03:10 AM
Holas, me gustaria que me puedan gracias por adentado:
Weno me dejaron hacer un programa una especi de presentacion, donde mostraba lo siguien
Citar#include <iostream>
#include <conio2.h>
#include <windows.h>
#include <intro.cpp>
using namespace std;

int main()
{
    char op;
    do{
    char soundfile[] = "f:/presentacio.wav" ;
  //  PlaySound((LPCSTR)soundfile, NULL, SND_FILENAME | SND_ASYNC );
    textcolor(CYAN);
cout<<"       ?Sexy"<<endl;
cout<<"____?Sexy?Sexy"<<endl;
cout<<"___y?Sexy?Sexy?"<<endl;
cout<<"___?Sexy?Sexy?S"<<endl;
cout<<"___?Sexy?Sexy?S               PRODUCCIONES "<<endl;
cout<<"__?Sexy?Sexy?Se"<<endl;
cout<<"_?Sexy?Sexy?Se                ***** Un Ingeniero no es un  "<<endl;
cout<<"_?Sexy?Sexy?Se_"<<endl;
cout<<"_?Sexy?Sexy?Sexy?                    ser calculador y frio, "<<endl;
cout<<"?Sexy?Sexy?Sexy?Sexy "<<endl;
cout<<"?Sexy?Sexy?Sexy?Sexy?Se                 simplemente su cerebro es   "<<endl;
cout<<"?Sexy?Sexy?Sexy?Sexy?Sex"<<endl;
cout<<"_?Sexy?__?Sexy?Sexy?Sex                     mas fuerte que su corazon. *****"<<endl;
cout<<"___?Sex____?Sexy?Sexy?"<<endl;
cout<<"___?Sex_____?Sexy?Sexy"<<endl;
cout<<"___?Sex_____?Sexy?Sexy"<<endl;
cout<<"____?Sex____?Sexy?Sexy"<<endl;
cout<<"_____?Se____?Sexy?Sex"<<endl;
cout<<"______?Se__?Sexy?Sexy"<<endl;
cout<<"_______?Sexy?Sexy?Sex"<<endl;
cout<<"________?Sexy?Sexy?sex                  Tu controlas "<<endl;
cout<<"_______?Sexy?Sexy?Sexy?Se"<<endl;
cout<<"_______?Sexy?Sexy?Sexy?Sexy?                    Tu      "<<endl;
cout<<"_______?Sexy?Sexy?Sexy?Sexy?Sexy"<<endl;
cout<<"_______?Sexy?Sexy?Sexy?Sexy?Sexy?S             Destino "<<endl;
cout<<"________?Sexy?Sexy____?Sexy?Sexy?se"<<endl;
cout<<"_________?Sexy?Se_______?Sexy?Sexy?"<<endl;
cout<<"_________?Sexy?Se_____?Sexy?Sexy?"<<endl;
cout<<"_________?Sexy?S____?Sexy?Sexy"<<endl;
cout<<"_________?Sexy?S_?Sexy?Sexy"<<endl;
cout<<"________?Sexy?Sexy?Sexy"<<endl;
cout<<"________?Sexy?Sexy?S              DUDAS O PREGUNTAS "<<endl;
cout<<"________?Sexy?Sexy"<<endl;
cout<<"_______?Sexy?Se         ANGEL1D@HOTMAIL.COM  "<<endl;
cout<<"_______?Sexy?"<<endl;
cout<<"______?Sexy?"<<endl;
cout<<"______?Sexy?"<<endl;
cout<<"______?Sexy"<<endl;
cout<<"______?Sexy"<<endl;
cout<<"_______?Sex"<<endl;
cout<<"_______?Sex"<<endl;
cout<<"_______?Sex"<<endl;
cout<<"______?Sexy"<<endl;
cout<<"Repetir sonido s/n"<<endl;
cin>>op;
system("cls");
    }while(op=='s');
    return 0;
    system("pause");

}


Ahora  lo que m e pidieron hacer es, que este menu, me salga cada ves q cree un programita, bueno lo pondria despues de declarar variables, con un copia y pega,pega, pero lo que tengo q hacer es guarlo de alguna forma que lo llame desde un main de otro programa, he tenido la idia de guardarlo en una especie de libreria, y de hay llamarlo como un metodo, pero no logro conseguir, si alguien me podria ayudar estaria muy agradecido .
No inporta el compilador, me puedo adaptar, actualmente uso code blocks, gracias.