Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <conio.h>
- #include "gotoxy.h"
- #include <time.h>
- #define arUsuario "usuario.DAT"
- #define arMusica "musica.DAT"
- ///ESTRUCTURAS__________________________________________________________________________________
- ///_____________________________________________________________________________________________
- typedef struct
- {
- int idUsuario;
- char nombreUsuario[30];
- char pass[20];
- int anioNacimiento;
- char genero;
- char pais[20];
- int playlist[50]; //Guarda los id de las canciones.
- int cantidad; // Es el válidos de la playlist.
- int eliminado; // indica 1 o 0 si el cliente fue eliminado
- } stUsuario;
- typedef struct
- {
- int idCancion;
- char titulo[30];
- char artista[20];
- int duracion;
- char album[20];
- int anio;
- char genero[20];
- char comentario[100];
- int eliminado; // indica 1 o 0 si la canción fue eliminada
- } stCancion;
- ///PROTOTIPADOS________________________________________________________________________________
- ///____________________________________________________________________________________________
- void banner();
- void cargaArchivoUsuario();
- int buscarUltimoId();
- void guardarUsuario(stUsuario a);
- int validarInicioSesion (char user[], char contra[]);
- void inicioSesion ();
- void menuPrimerPantalla();
- void mostrarRegistro();
- int existenciaNombreUsuario(char user[]);
- void mostrarUnUsuario(stUsuario a);
- void menuAdmin();
- char opcionesMenuAdmin();
- void mostrar(stUsuario a);
- void empaquetar(FILE **pArchUsuario);
- void mostrarUnUsuario(stUsuario a);
- void cargaDeMusica ();
- void mostrarCancion (stCancion b);
- void mostrarCanciones();
- void usuarioAdmin ();
- ///MAIN_________________________________________________________________________________________
- ///_____________________________________________________________________________________________
- int main()
- {
- ///Al inicio del programa, se muestra el banner y menu de opciones.
- menuPrimerPantalla();
- ///En este punto, el usuiario ya habrá ingresado al sistema.
- ///Habiendo creado su usuario si fuera necesario.
- ///Nota de desarrollo --->> Lo próximo es acomodar el inicio de sesión.
- return 0;
- }
- ///FUNCIONES____________________________________________________________________________________
- ///_____________________________________________________________________________________________
- void cargaArchivoUsuario()
- {
- char pass1[20], pass2[20];
- char caracter1=0;
- char caracter2=0;
- int existencia=0;
- stUsuario rgUsuarios;
- rgUsuarios.idUsuario = buscarUltimoId() + 1;
- do
- {
- system("cls");
- banner();
- printf("\n\n\t\t\t\t\t\t\t\t\t <<< REGISTRE UN USUARIO >>>\n");
- printf("\n\t\t\t\t\t\t\t\t\t%c Nombre de usuario.........: ",175);
- scanf("%s",rgUsuarios.nombreUsuario);
- existencia = existenciaNombreUsuario(rgUsuarios.nombreUsuario);
- if(existencia == 1)
- {
- printf("\t\t\t\t\t\t\t\t\tEl usuario ya existe, intente con otro nombre.\n");
- printf("\n\n");
- printf("\t\t\t\t\t\t\t\t\t");
- system("pause");
- }
- ///si existencia toma valor 1, el usuario debe pensar otro nombre hasta que existencia sea 0
- }
- while(existencia!=0);
- do
- {
- int i=0;
- printf("\n\t\t\t\t\t\t\t\t\t%c Contrase%ca................: ",175, 164);
- while (caracter1 != 13)
- {
- caracter1 = getch();
- if(caracter1 == 13)
- {
- pass1[i] = '\0';
- }
- else if (caracter1 == 8)
- {
- if (i > 0)
- {
- i--;
- printf("\b \b");
- }
- }
- else
- {
- printf("*");
- pass1[i] = caracter1;
- i++;
- }
- }
- i = 0;
- fflush(stdin);
- printf("\n\t\t\t\t\t\t\t\t\t%c Confirmar contrase%ca......: ",175, 164);
- while (caracter2 != 13)
- {
- caracter2 = getch();
- if(caracter2 == 13)
- {
- pass2[i] = '\0';
- }
- else if (caracter2 == 8)///si el caracter tiene ASCII 8 se trata de la tecla de borrado a la iz ( backslash)
- {
- if (i > 0)
- {
- i--;
- printf("\b \b");///el barra B es un caracter de backslash( lo que hace es mover el cursor
- } ///hacia la izquierda, luego un espacio en blanco para borrar *, y otro backslash
- } ///para volver a llevar el cursor a la izq, y usamos el i>0, para no borrar todo y que tenga un tope
- else
- {
- printf("*");
- pass2[i] = caracter2;
- i++;
- }
- }
- fflush(stdin);
- if(strcmp(pass1,pass2) != 0)
- printf("\n\t\t\t\t\t\t\t\t\tLas contrase%cas no coinciden. Intente de nuevo.\n", 164);
- }
- while(strcmp(pass1, pass2 ) != 0);
- strcpy (rgUsuarios.pass, pass1);
- do
- {
- printf("\n\n\t\t\t\t\t\t\t\t\tA%co de nacimiento ..........: ", 164);
- scanf("%d", &rgUsuarios.anioNacimiento);
- if(rgUsuarios.anioNacimiento > 2003)
- {
- printf("\t\t\t\t\t\t\t\t\tDebe ser mayor de 16 (dieciseis) a%cos para poder registrarse.\n", 165);
- }
- }
- while(rgUsuarios.anioNacimiento > 2003);
- do
- {
- printf("\n\n\t\t\t\t\t\t\t\t\t%c Genero ( F / M / O )......: ",175);
- fflush(stdin);
- scanf("%c", &rgUsuarios.genero);
- rgUsuarios.genero = toupper (rgUsuarios.genero);
- if((rgUsuarios.genero != 'M') && (rgUsuarios.genero != 'F') && (rgUsuarios.genero != 'O'))
- {
- printf("\t\t\t\t\t\t\t\t\tDato invalido.\n");
- }
- }
- while((rgUsuarios.genero != 'M') && (rgUsuarios.genero != 'F') && (rgUsuarios.genero != 'O'));
- printf("\n\t\t\t\t\t\t\t\t\t%c Pais......................: ",175);
- fflush(stdin);
- gets(rgUsuarios.pais);
- printf("\n\n\n\t\t\t\t\t\t\t\t\t\tUsuario creado exitosamente. ");
- printf("\n\t\t\t\t\t\t\t\t\t\t%cDisfrute de Jukebox!", 173);
- guardarUsuario(rgUsuarios);
- rgUsuarios.idUsuario ++;
- getch();
- system("cls");
- }
- int buscarUltimoId()
- {
- int id = 0;
- stUsuario rgUsuarios;
- FILE *pArchUsuario = fopen(arUsuario,"rb");
- if(pArchUsuario != NULL)
- {
- fseek(pArchUsuario, sizeof(stUsuario) * (-1), SEEK_END);
- if(fread(&rgUsuarios, sizeof(stUsuario), 1,pArchUsuario) > 0)
- {
- id = rgUsuarios.idUsuario;
- }
- }
- fclose(pArchUsuario);
- return id;
- }
- void guardarUsuario(stUsuario rgUsuarios)
- {
- FILE *pArchUsuario = fopen(arUsuario,"ab");
- if(pArchUsuario != NULL)
- {
- fwrite(&rgUsuarios, sizeof(stUsuario), 1,pArchUsuario);
- fclose(pArchUsuario);
- }
- }
- int validarInicioSesion (char user[], char contra[])
- {
- stUsuario us1;
- FILE *pArchUsuario = fopen(arUsuario,"rb");
- int flag = 0;
- int flag2 = 0;
- int corroborar = 0;
- if (pArchUsuario != NULL)
- {
- while( !flag && (fread(&us1, sizeof(stUsuario), 1, pArchUsuario) > 0) )
- {
- if (strcmpi(us1.nombreUsuario, user)== 0)
- flag++;
- }
- if (strcmpi(us1.pass, contra)== 0)
- flag2++;
- }
- /* if (!fclose(pArchUsuario)!= 0)
- {
- system("cls");
- printf("\nError al cerrar archivo.");
- }
- else
- {
- system("cls");
- printf("\nError al abrir el archivo.");
- }
- */
- if (flag == 0 && flag2 == 0)
- {
- printf("\n\t\t\t\t\t\t\t\tSu usuario o contrase%ca son incorrectos.",164);
- }
- else if(flag == 1 && flag2 == 0)
- {
- printf("\n\t\t\t\t\t\t\t\tSu contrase%ca es invalida.", 164);
- }
- else if(flag == 1 && flag2 == 1)
- {
- corroborar++;
- printf("\n\t\t\t\t\t\t\t\t\tINGRESO AL SISTEMA CORRECTAMENTE.\n\t\t\t\t\t\t\t\t\tBORRAR ESTO CUANDO HAYA SISTEMA.");
- }
- fclose(pArchUsuario);
- return corroborar ;
- ///corroborar fue inicializada en 0.
- ///Sólo tomará valor 1 en caso de que usuario y contraseña sean correctos.
- }
- void inicioSesion ()
- {
- char a[40];
- char b [40];
- char usAdmin= {"admin"};
- char psAdmin= {"admin"};
- int rta=0;
- int rtaAdm=0;
- char caracter=0;
- int i=0;
- do
- {
- system("cls");
- banner();
- printf("\n\n\n\t\t\t\t\t\t\t\t\t%c USUARIO: ", 175);
- fflush(stdin);
- gets(a);
- printf("\n\t\t\t\t\t\t\t\t\t%c CONTRASE%cA: ", 175, 165);
- fflush(stdin);
- while (caracter != 13)
- {
- caracter = getch();
- if(caracter == 13)
- {
- b[i]='\0';
- }
- else if(caracter==8)
- {
- if(i>0)
- {
- i--;
- printf("\b \b");
- }
- }
- else
- {
- printf("*");
- b[i]=caracter;
- i++;
- }
- fflush(stdin);
- }
- rta = validarUsuarioAdmin(a,b);
- if(rta == 1)
- {
- fflush(stdin);
- menuAdmin();
- }
- else
- {
- rta = validarInicioSesion(a,b);
- printf("\t\t\t\t\t\t\t\t\t");
- system("pause");
- }
- }
- while(rta != 1 && rta == 0);
- ///Ya que rta podría tener valor 0 o 1, puede ser redundante la condicion del while.
- ///Aún así, decido usarla igual para detectar el problema rapidamente en caso de error.
- if(rta != 0 && rta != 1)
- {
- printf("SE PRODUJO UN ERROR EN LA VALIDACION DEL INICIO DE SESION");
- }
- }
- void menuPrimerPantalla()
- {
- char option;
- ///Siempre al mostrar estas opciones, mostramos el banner.
- banner();
- printf("\n\n\n\t\t\t\t\t\t\t\t\t1. Iniciar Sesi%cn.", 162);
- printf("\n\t\t\t\t\t\t\t\t\t2. Registrarse.\n");
- printf("\n\t\t\t\t\t\t\t\t\t>> ");
- option = getche();
- switch(option)
- {
- case '1':
- inicioSesion ();
- break;
- case '2':
- cargaArchivoUsuario();
- inicioSesion ();
- break;
- }
- }
- void banner()
- {
- srand(time(NULL));
- color(rand()%14+1);
- printf("\n\n\n");
- printf("\t\t\t\t\t /$$$$$ /$$ /$$ \n");
- printf("\t\t\t\t\t |__ $$ | $$ | $$ \n");
- printf("\t\t\t\t\t | $$ /$$ /$$ | $$ /$$ /$$$$$$ | $$$$$$$ /$$$$$$ /$$ /$$\n");
- printf("\t\t\t\t\t | $$ | $$ | $$ | $$ /$$/ /$$__ $$ | $$__ $$ /$$__ $$ | $$ /$$/\n");
- printf("\t\t\t\t\t /$$ | $$ | $$ | $$ | $$$$$$/ | $$$$$$$$ | $$ \\ $$ | $$ \\ $$ \\ $$$$/ \n");
- printf("\t\t\t\t\t | $$ | $$ | $$ | $$ | $$_ $$ | $$_____/ | $$ | $$ | $$ | $$ >$$ $$ \n");
- printf("\t\t\t\t\t | $$$$$$/ | $$$$$$/ | $$ \\ $$ | $$$$$$$ | $$$$$$$/ | $$$$$$/ /$$/\\ $$\n");
- printf("\t\t\t\t\t \\______/ \\______/ |__/ \\__/ \\_______/ |_______/ \\______/ |__/ \\__/\n");
- color(15);
- }
- ///En las funciones de inicio de sesion no contemplo el archivo en el parametro, ya que lo tengo definido como const
- ///ahora en inic sesion es variable local, era antes un acoplamiento de funciones
- int existenciaNombreUsuario(char user[])
- {
- ///Cuando el valor de flag sea 1, quiere decir que el user ya esta creado.
- stUsuario us1;
- FILE *pArchUsuario = fopen(arUsuario,"rb");
- int flag=0;
- if (pArchUsuario != NULL)
- {
- while( !flag && (fread(&us1, sizeof(stUsuario), 1, pArchUsuario) > 0) )
- {
- if (strcmpi(us1.nombreUsuario, user)== 0)
- flag++;
- }
- }
- return flag;
- }
- /// ---------------------------------------- FUNCIONES ADMIN----------------------------------------------
- void menuAdmin()
- {
- FILE *pArchUsuario;
- stUsuario a;
- char option;
- long numero;
- pArchUsuario = fopen ("usuario.DAT", "rb+"); // Este modo permite leer y escribir
- if (!pArchUsuario)
- pArchUsuario = fopen ("usuario.DAT", "wb+"); // si el fichero no existe, lo crea.
- do
- {
- switch (option = opcionesMenuAdmin())
- {
- case '1': // Mostrar registro
- system ("cls");
- printf ("Mostrar registro: ");
- scanf ("%d", &numero);
- fseek (pArchUsuario,sizeof(stUsuario)*numero, SEEK_SET);
- fread (&a, sizeof (stUsuario), 1, pArchUsuario);
- mostrar (a);
- break;
- case '2': // Eliminar registro
- system ("cls");
- printf ("Eliminar registro: ");
- scanf ("%d", &numero);
- fseek (pArchUsuario, numero * sizeof (stUsuario), SEEK_SET);
- fread (&a, sizeof (stUsuario), 1, pArchUsuario);
- a.eliminado = 0;
- fseek (pArchUsuario, numero * sizeof (stUsuario), SEEK_SET);
- fwrite (&a, sizeof (stUsuario), 1, pArchUsuario);
- break;
- case '3': // Mostrar todo
- system("cls");
- mostrarRegistro();
- system ("PAUSE");
- break;
- case '4': // Eliminar marcados
- empaquetar(&pArchUsuario);
- break;
- case '5': // Cargar musica
- system("cls");
- cargaDeMusica();
- break;
- case '6': // Mostrar canciones
- system("cls");
- mostrarCanciones();
- system("pause");
- break;
- }
- }
- while (option != 0);
- fclose (pArchUsuario);
- }
- char opcionesMenuAdmin()
- {
- int respuesta;
- do
- {
- system ("cls");
- printf ("\n\n\n\tMENU PRINCIPAL\n\t --------------\n\n\t[ 1 ] - Mostrar registro\n\t");
- printf ("[ 2 ] - Eliminar registro\n\t[ 3 ] - Mostrar todo\n\t[ 4 ] - Eliminar registros marcados\n\t[ 5 ] - Cargar Musica\n\t[ 6 ] - Mostrar Canciones\n\t[ 0 ] - Salir\n\n\t");
- fflush (stdin);
- respuesta = getche ();
- }
- while (respuesta < '0' && respuesta > '7');
- return respuesta;
- }
- ///--------------------------------------------------- Muestra un registro por pantalla, si no está marcado como borrado --------------------------------------------------
- void mostrar(stUsuario a)
- {
- printf("\n Eliminado ..............: %d", a.eliminado);
- printf("\n Id ....................: %d",a.idUsuario);
- printf("\n Nombre ................: %s",a.nombreUsuario);
- printf("\n Contrase%ca ............: %s",164, a.pass);
- printf("\n A%co ...................: %d",164, a.anioNacimiento);
- printf("\n Genero ................: %c",a.genero);
- printf("\n Pais ..................: %s\n",a.pais);
- system ("PAUSE");
- }
- ///---------------------------------------------------------------- Elimina los registros marcados como borrados -----------------------------------------------------------------
- void empaquetar(FILE **pArchUsuario) /// Uso un puntero a puntero (doble puntero), para no retornar un
- {
- FILE *pArchEliminados; /// puntero desde la funcion (sería la otra manera de hacerlo).
- stUsuario a;
- pArchEliminados = fopen ("usuario.TMP", "wb");
- rewind (*pArchUsuario);
- while (fread (&a, sizeof (stUsuario), 1, *pArchUsuario) > 0)
- if (a.eliminado == 1) /// No uso llaves porque de cada condicion depende una sola linea de codigo
- fwrite (&a, sizeof (stUsuario), 1, pArchEliminados);
- fclose (pArchEliminados);
- fclose (*pArchUsuario); /// Lo cierro para poder trabajar en:
- remove("usuario.BAK"); /// Un poquito de administración de archivos desde consola DOS
- rename("usuario.DAT", "usuario.BAK");
- rename("usuario.TMP", "usuario.DAT");
- *pArchUsuario = fopen ("usuario.DAT", "r+b"); /// y lo abro, pues debo devolver la ejecución con el archivo abierto.
- }
- void mostrarRegistro()
- {
- stUsuario a;
- FILE *parchUsuario = fopen(arUsuario, "rb");
- if(parchUsuario != NULL)
- {
- while(fread(&a, sizeof(stUsuario),1,parchUsuario) > 0)
- {
- mostrarUnUsuario(a);
- }
- fclose(parchUsuario);
- }
- }
- void mostrarUnUsuario(stUsuario a)
- {
- printf("\n Eliminado .............: %d", a.eliminado);
- printf("\n Id ....................: %d",a.idUsuario);
- printf("\n Nombre ................: %s",a.nombreUsuario);
- printf("\n Contrase%ca ............: %s",164, a.pass);
- printf("\n A%co ...................: %d",164, a.anioNacimiento);
- printf("\n Genero ................: %c",a.genero);
- printf("\n Pais ..................: %s",a.pais);
- printf("\n ___________________________ \n");
- }
- void cargaDeMusica ()
- {
- FILE*pArchCancion;
- stCancion b;
- char continuar;
- pArchCancion=fopen("musica.DAT", "ab");
- if(pArchCancion!=NULL)
- {
- puts("---------------------------");
- printf("ingrese nombre del artista:\n");
- fflush(stdin);
- gets(b.artista );
- printf("ingrese titulo de la cancion:\n");
- fflush(stdin);
- gets(b.titulo);
- printf("ingrese la duracion de la cancion:\n");
- scanf("%d", &b.duracion);
- printf("ingrese el genero de la cancion:\n");
- fflush(stdin);
- gets(b.genero);
- printf("ingrese el a%co de la cancion:\n",164);
- scanf("%d", &b.anio);
- printf("ingrese el album de la cancion:\n");
- fflush(stdin);
- gets(b.album);
- printf("ingrese un comentario de la cancion:\n");
- fflush(stdin);
- gets(b.comentario);
- b.idCancion=1;
- puts("---------------------------");
- getch();
- }
- fwrite(&b, sizeof(stCancion),1,pArchCancion);
- fclose(pArchCancion);
- }
- void mostrarCancion (stCancion b)
- {
- puts("--------------------------------------");
- printf("\n Nombre del artista: %s", b.artista);
- printf("\n Titulo: %s", b.titulo);
- printf("\n Album: %s", b.album);
- printf("\n Genero: %s",b.genero);
- printf("\n Duracion: %dmin\n",b.duracion);
- printf("\n A%co: %i\n",164, b.anio);
- printf("\n Comentario: %s\n",b.comentario);
- puts("--------------------------------------");
- }
- void mostrarCanciones()
- {
- stCancion b;
- FILE *pArchCancion = fopen("musica.DAT", "rb");
- if(pArchCancion != NULL)
- {
- while(fread(&b, sizeof(stCancion),1,pArchCancion) > 0)
- {
- mostrarCancion(b);
- }
- }
- fclose(pArchCancion);
- }
- int validarUsuarioAdmin (char userAdm [], char contraAdm[])
- {
- stUsuario usAdm;
- FILE *pArchUsuario = fopen(arUsuario,"rb");
- int validar = 0;
- if (pArchUsuario != NULL)
- {
- fread(&usAdm, sizeof(stUsuario), 1, pArchUsuario);
- if(strcmpi(usAdm.nombreUsuario, userAdm)== 0 && (strcmpi(usAdm.pass, contraAdm)== 0))
- {
- validar++;
- }
- }
- return validar;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement