/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

base de datos con tres ficheros

 
      Índice del Foro elrincondelc.com -> Bases de datos en C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
dark_puzzle



Registrado: 29 Mar 2006
Mensajes: 5

MensajePublicado: 29/03/2006 10:35 am
Título: base de datos con tres ficheros

Muy buenas, tengo que hacer un proyecto para fin de asignatura de Programación, el cual tiene que consistir en crear tres ficheros en C y que interactuen entre ellos, a modo de base de datos, es decir crear una base de datos de estructura fija e introducir valores, ir almacenandolos en diferentes "fichas", y luego introducir opciones como buscar por letras, por número de registro etc, aun no tengo claro de que temática lo haré(presumiblemente debe de ser una empresa, de lo que sea), pero me gustaría que me indicaseis donde puedo encontrar ejemplos, material didactico, etc para realizar el proyecto.

Gracias por adelantado, un saludo
Volver arriba
wildcrue



Registrado: 06 Abr 2006
Mensajes: 45
Ubicación: Guanajuato

MensajePublicado: 07/04/2006 5:34 am
Título: A lo mejor te sirve mi chat

Hola, probablemente eztaz viendo manejo de ficheros de texto y .dat no? ando realizando un chat bazandome en ezto y puez hay variaz funcionez ke a lo mejor te pudieran zervir para komprender un poko maz acerka de komo modifikar ezte tipo de archivoz... te pongo el kodigo para ke lo chekez (lo hice en Microsoft Visual C++ por lo ke te pongo el .ccp y el .h):

// ARCHIVO .CPP


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
#include "chat.h"
#include "chat2.h"

int conts=0;

void main (void)
{
presentacion(); //Ventana ke dice CHAT v1
tusuario(); // Menu de eleccion de usuario
chat(); // Despues de autentificacion se pasa a esta parte ke ez el chat en si
}

// ARCHIVO CHAT.H



extern int conts;
// Prototipos
void presentacion (void);
//MENU
void tusuario (void);
//ABRIR Y CERRAR ARCHIVOS
FILE *sopen(void);
FILE *ropen(void);

//TIPOS DE USUARIOS
void nuser (FILE *, FILE *);
int luser (FILE *);
void closea (FILE *);
void leerusuarios (FILE *);

//AUTENTIFICAR ADMINISTRADOR
void admin (void);

//DEL CHAT
void chat (void);

struct datos
{
char usuario[20], pass[20];
};


void presentacion (void)
{
printf( "\n\n\t\t\t----------------\n");
printf( "\t\t\t| |\n");
printf( "\t\t\t| |\n");
printf( "\t\t\t| -----------\n");
printf( "\t\t\t| | \n");
printf( "\t\t\t| | \n");
printf( "\t\t\t| | \n");
printf( "\t\t\t| | \n");
printf( "\t\t\t| | \n");
printf( "\t\t\t| -----------\n");
printf( "\t\t\t| |\n");
printf( "\t\t\t| | H A T v1.0\n");
printf( "\t\t\t----------------\n");
printf( "\n\t\t\tPresione Enter para continuar");
getch();
system("cls");
}

// MENU
void tusuario (void)
{
char select=' ';
int conta=0;
while( conta==0 )
{
cik:
printf( "\nSeleccione su tipo de usuario:\n\n");
printf( "a) Usuario nuevo\n");
printf( "b) Usuario ya registrado (loggearse)\n");
printf( "c) Administrador: Checar base de datos\n");
printf( "d) Salir del sistema\n");
printf( "Escriba el inciso que le corresponda: ");
select=getche();
if( select=='a' || select=='A' )
{
FILE *apf=NULL;
FILE *apf2=NULL;
system("cls");
apf2=ropen();
apf=sopen();
nuser(apf, apf2);
closea(apf);
closea(apf2);
goto cik;
}
if( select=='b' || select=='B' )
{
FILE *apf=NULL;
char resp=' ';
int dam=0;
system("cls");
apf=ropen();
dam= luser(apf);
closea(apf);
conts++;
if( dam==1 )
{
printf( "\nDesea ir al chat? >> s=ir a chat | n=ir al menu\nRespuesta=");
resp=getche();
if( resp=='s' || resp=='S')
{
printf("\n");
conta++;
}
if(resp=='n' || resp=='N')
{
printf( "\n");
goto cik;
}
}
else
{
goto cik;
}

}
if( select=='d' || select=='D' )
{
printf( "Saliendo del sistema\n");
system( "pause");
exit(0);
}
if( select=='c' || select=='C')
{
FILE *apf=NULL;
admin();
apf=ropen();
leerusuarios(apf);
closea(apf);
}

}
}

FILE *sopen (void)
{
FILE *apf=fopen("user.dat", "ab");
if(apf==NULL)
{
printf( "\nNo se pudo abrir el .dat\n");
}
return apf;
}

FILE *ropen (void)
{
FILE *apf=fopen("user.dat", "rb");
if(apf==NULL)
{
printf( "\nNo se pudo abrir el .dat\n");
}
return apf;
}

void nuser (FILE *apf, FILE *apf2)
{
datos user, usem;
int cont=0;
strcpy(user.pass," ");
strcpy(user.usuario, " ");
printf( "Nombre de usuario: ");
gets(user.usuario);
while(!feof(apf2))
{
fread(&usem, sizeof(datos), 1, apf2);
if (strcmp(user.usuario, usem.usuario)==0)
{
printf( "Nombre de usuario en existencia, el programa se cerrara\n");
system("pause");
exit(0);
fseek(apf2, -sizeof(datos), SEEK_CUR);
break;
}
}
fflush(stdin);
printf( "Password: ");
gets(user.pass);
fwrite(&user, sizeof(datos), 1, apf);
}

void closea (FILE *apf)
{
fclose(apf);
}

int luser (FILE *apf)
{
datos lusers;
char dat1[20], dat2[20];
int cont=0;
printf( "Ingrese su nombre de usuario: ");
gets(dat1);
while(!feof(apf))
{
fread(&lusers, sizeof(datos), 1, apf);
if( strcmp(dat1, lusers.usuario) == 0)
{
printf( "\nNombre de usuario correcto\n");
printf( "Ingrese su contraseña: ");
gets(dat2);
if( strcmp(dat2, lusers.pass) ==0)
{
printf( "Contraseña correcta!, ahora puede accesar al chat...\n");
cont++;
return 1;
fseek(apf, -sizeof(datos), SEEK_CUR);
break;
}
else
{
printf( "Contraseña incorrecta\n");
system("pause");
exit(0);
}
fseek(apf, -sizeof(datos), SEEK_CUR);
break;
}
}
printf( "Nombre de usuario invalido!\n");
return 0;
}

void leerusuarios(FILE *apf)
{
datos rusers;
while(!feof(apf))
{
fread(&rusers, sizeof(datos), 1, apf);
printf( "Usuario\t\tPassword\n");
printf( "%s\t\t", rusers.usuario);
printf( "%s\n", rusers.pass);
printf( "\n");
}
}

void admin (void)
{
char rec[11]={' '};
char correcta[11]="admin";
printf( "\nIngrese contraseña de administrador:");
gets(rec);
if( strcmp(rec,correcta)==0)
{
printf( "\nContraseña correcta!\n");
}
else
{
printf( "Contraseña no valida!\n");
system("pause");
exit(0);
}
}


// ARCHIVO DEL CHAT2.H

extern x=0;
//Prototipos
void separacion(void);
FILE *leerdata(void);
void mostrardata(FILE *, char *nick);
void cerrardata(FILE *);

FILE *abrirchat(void);
void escribirenchat (FILE *, char *nick);
void cerrarchat (FILE *);
int decision (void);

struct chater
{
char mensaje[100];
};

void chat (void)
{
FILE *chat=NULL;
FILE *leer=NULL;
int asd=0, x=0;
char nick[10]={' '};
printf( "Ingrese su nick: ");
gets(nick);
while(asd==0)
{
chat=abrirchat();
escribirenchat(chat, nick);
cerrarchat(chat);

separacion();
leer= leerdata();
mostrardata(leer, nick);
separacion();
cerrardata(leer);

asd=decision();
}
}

FILE *abrirchat (void)
{
FILE *chat=fopen("chat.dat", "ab");
if(chat==NULL)
{
printf( "Error: No se pudo abrir el .dat\n");
exit(0);
}
return chat;
}


void escribirenchat(FILE *chat, char *nick)
{
chater captura;
strcpy(captura.mensaje, " ");
fflush(stdin);
puts(nick);
gets(captura.mensaje);
printf( "\n" );
fwrite(&captura, sizeof(chater), 1, chat);
}

void cerrarchat (FILE *chat)
{
fclose(chat);
}

int decision (void)
{
char letra=' ';
printf( "Menu>> c=Limpiar pantalla - s=Seguir con chat - e=salir del chat - a=admin\n");
printf( "Ingrese la letra que corresponda a su decision: ");
letra=getche();
if(letra=='s' || letra=='s')
{
printf("\n");
return 0;
}
if(letra=='c' || letra=='C')
{
system("cls");
return 0;
}
if(letra=='e' || letra=='E')
{
return 1;
}
if(letra=='a' || letra=='A')
{
printf("\n");
system("limpiarchat.exe");
}
}




// separacion


struct paleer
{
char msg[100];
};

void separacion(void)
{
printf( "\n------------------------------------------------\n\n");
}

FILE *leerdata(void)
{
FILE *leer=fopen("chat.dat", "rb");
if(leer==NULL)
{
printf( "Error: No se pudo tener acceso al .dat\n");
exit(0);
}
return leer;
}

void mostrardata(FILE *leer, char *nick)
{
paleer tu;
while(!feof(leer))
{
fread(&tu, sizeof(paleer), 1, leer);
if(feof(leer))break;
printf( "+ %s\n", tu.msg);
}
}

void cerrardata(FILE *leer)
{
fclose(leer);
}

Eso es lo ke llevo pues no ezta terminado, ezpero ke te zirva a ti o algun otro uzuario de ezte foro, digo ke no ezta terminado puez aun le kiero meter muchaz maz kozaz (aparte ke le pongo varioz goto ke kreo no zon necezarioz, jeje) pero para ezo necezito aprender programacion en C a bajo nivel puez kiero manejar direccionez ip y kozaz azi. Este chat funciona de la siguiente manera:

-Tu puedez poner el ejekutable generado en una karpeta en red y ahi, puez kada perzona ke lo abra va a poder modifikar el .dat accezando al .exe (zi me explike? :S) lo ke parecera komo zi ze trataze de un chat real.
- En teoria (lo ke keria hacer) puedez inztalarlo en una komputadora ke ezte konfigurada para trabajar komo zervidor ftp y loz uzuarioz tendrian accezo a ezte zoftware a travez de internet (zegun yo zuena bien, ke opinan?).

Si enkuentraz maneraz de mejorar mi programa (o alguien maz) agradeceria ke lo publikara en ezte foro, puez el konocimiento debe zer kompartido (lo poko ke ze, ze loz aporto, jeje) y zi alguien zabe de programacion a bajo nivel, ke me heche una mano!

Zuerte kon tu proyecto! Noz vemoz! (ezkribe rezpuezta en ezte foro para zaber zi tienez maz dudaz y kon guzto te tratare de ayudar).
_________________
Atte.
Wildcrue
Volver arriba
      Índice del Foro elrincondelc.com -> Bases de datos en C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com