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>
- #define arUsuario "usuario.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 cargaArchivoUsuario();
- int buscarUltimoId();
- void guardarUsuario(stUsuario a);
- void validarInicioSesion (char b[], char c[] );
- void inicioSesion ( char a[40],char b[40]);
- void eliminarUsuario();
- char menu();
- void mostrar(stUsuario a);
- void listar(long n, stUsuario *a);
- void empaquetar(FILE **pArchUsuario);
- void mostrarRegistro();
- void mostrarUnUsuario(stUsuario a);
- ///MAIN_____________________________________________
- int main()
- {
- //char a[40],b[40];
- //cargaArchivoUsuario();
- //inicioSesion (a,b);
- //eliminarUsuario();
- return 0;
- }
- ///FUNCIONES_________________________________________________
- void cargaArchivoUsuario()
- {
- char pass1[20], pass2[20];
- char caracter1=0;
- char caracter2=0;
- stUsuario a;
- a.idUsuario = buscarUltimoId() + 1;
- system("cls");
- printf("\n\t <<< REGISTRO DE USUARIO >>>\n");
- printf("\nNombre de usuario .................:");
- gets(a.nombreUsuario); /// scanf("%s",a.nombre)
- do
- {
- int i=0;
- printf("\nContrase%ca:...............:", 164);
- while (caracter1 = getch())
- {
- if(caracter1 == 13)
- {
- pass1[i] = '\0';
- break;
- }
- else if (caracter1 == 8)
- {
- if (i > 0)
- {
- i--;
- printf("\b \b");
- }
- }
- else
- {
- printf("*");
- pass1[i] = caracter1;
- i++;
- }
- }
- i = 0;
- fflush(stdin);
- printf("\nConfirmar contrase%ca:...............:", 164);
- while (caracter2 = getch())
- {
- if(caracter2 == 13)
- {
- pass2[i] = '\0';
- break;
- }
- else if (caracter2 == 8)
- {
- if (i > 0)
- {
- i--;
- printf("\b \b");
- }
- }
- else
- {
- printf("*");
- pass2[i] = caracter2;
- i++;
- }
- }
- fflush(stdin);
- if(strcmp(pass1,pass2) != 0)
- printf("\nLas contrase%cas no coinciden. Intente de nuevo.\n", 164);
- }
- while(strcmp(pass1, pass2 ) != 0);
- strcpy (a.pass, pass1);
- printf("\nA%co de nacimiento ....................:", 164);
- scanf("%d", &a.anioNacimiento);
- printf("\nGenero ( F / M / O ) ....................:");
- fflush(stdin);
- scanf("%c",&a.genero);
- a.genero = toupper (a.genero);
- while((a.genero != 'M') && (a.genero != 'F') && (a.genero != 'O'))
- {
- printf("Dato invalido.\n");
- printf("\nGenero ( F / M / O ) ....................:");
- fflush(stdin);
- scanf("%c", &a.genero);
- a.genero = toupper (a.genero);
- }
- printf("\nPais....................:");
- fflush(stdin);
- gets(a.pais);
- printf("\n");
- printf("Usuario creado exitosamente.");
- printf("Disfrute de Spotify.");
- guardarUsuario(a);
- a.idUsuario ++;
- getch();
- system("cls");
- }
- int buscarUltimoId()
- {
- int id = 0;
- stUsuario a;
- FILE *pArchUsuario = fopen(arUsuario,"rb");
- if(pArchUsuario != NULL)
- {
- fseek(pArchUsuario, sizeof(stUsuario) * (-1), SEEK_END);
- if(fread(&a,sizeof(stUsuario),1,pArchUsuario) > 0)
- {
- id = a.idUsuario;
- }
- }
- fclose(pArchUsuario);
- return id;
- }
- void guardarUsuario(stUsuario a)
- {
- FILE *pArchUsuario = fopen(arUsuario,"ab");
- if(pArchUsuario != NULL)
- {
- fwrite(&a, sizeof(stUsuario), 1,pArchUsuario);
- fclose(pArchUsuario);
- }
- }
- void eliminarUsuario()
- {
- 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 = menu ())
- {
- 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 = 'n';
- 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;
- }
- }
- while (option != '0');
- fclose (pArchUsuario);
- }
- char menu()
- {
- char 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[ 0 ] - Salir\n\n\t");
- fflush (stdin);
- respuesta = getche ();
- }
- while (respuesta < '0' && respuesta > '5');
- 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");
- } //---------------- Muestra los registros por pantalla, en forma de listado, si no están marcados como borrados ------------------------------------------------
- void listar(long n, stUsuario *a)
- {
- if (a -> eliminado == 's')
- {
- printf (" %4d ", n);
- printf (" %-34s", a -> nombreUsuario);
- printf (" %4d\n", a -> idUsuario);
- }
- } //---------------------------------------------------------------- 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 == 's') // 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 ___________________________ ");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement