SHARE
TWEET

eliminar

a guest Jun 20th, 2019 147 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <conio.h>
  5.  
  6. #define arUsuario "usuario.DAT"
  7.  
  8. ///ESTRUCTURAS________
  9.  
  10. typedef struct
  11. {
  12.     int idUsuario;
  13.     char nombreUsuario[30];
  14.     char pass[20];
  15.     int anioNacimiento;
  16.     char genero;
  17.     char pais[20];
  18.     int playlist[50]; //Guarda los id de las canciones.
  19.     int cantidad; // Es el válidos de la playlist.
  20.     int eliminado;   // indica 1 o 0 si el cliente fue eliminado
  21. } stUsuario;
  22.  
  23.  
  24. typedef struct
  25. {
  26.     int idCancion;
  27.     char titulo[30];
  28.     char artista[20];
  29.     int duracion;
  30.     char album[20];
  31.     int anio;
  32.     char genero[20];
  33.     char comentario[100];
  34.     int eliminado;  // indica 1 o 0 si la canción fue eliminada
  35. } stCancion;
  36.  
  37.  
  38. ///PROTOTIPADOS______________________________________
  39. void cargaArchivoUsuario();
  40. int buscarUltimoId();
  41. void guardarUsuario(stUsuario a);
  42. void validarInicioSesion (char b[], char c[] );
  43. void inicioSesion ( char a[40],char b[40]);
  44. void eliminarUsuario();
  45. char menu();
  46. void mostrar(stUsuario a);
  47. void listar(long n, stUsuario *a);
  48. void empaquetar(FILE **pArchUsuario);
  49. void mostrarRegistro();
  50. void mostrarUnUsuario(stUsuario a);
  51.  
  52. ///MAIN_____________________________________________
  53.  
  54. int main()
  55. {
  56.     //char a[40],b[40];
  57.     //cargaArchivoUsuario();
  58.     //inicioSesion (a,b);
  59.     //eliminarUsuario();
  60.  
  61.     return 0;
  62. }
  63.  
  64. ///FUNCIONES_________________________________________________
  65.  
  66. void cargaArchivoUsuario()
  67. {
  68.     char pass1[20], pass2[20];
  69.     char caracter1=0;
  70.     char caracter2=0;
  71.     stUsuario a;
  72.     a.idUsuario = buscarUltimoId() + 1;
  73.     system("cls");
  74.     printf("\n\t <<< REGISTRO DE USUARIO >>>\n");
  75.     printf("\nNombre de usuario .................:");
  76.     gets(a.nombreUsuario); /// scanf("%s",a.nombre)
  77.  
  78.     do
  79.     {
  80.         int  i=0;
  81.         printf("\nContrase%ca:...............:", 164);
  82.         while (caracter1 = getch())
  83.         {
  84.             if(caracter1 == 13)
  85.             {
  86.                 pass1[i] = '\0';
  87.                 break;
  88.             }
  89.             else if (caracter1 == 8)
  90.             {
  91.                 if (i > 0)
  92.                 {
  93.                     i--;
  94.                     printf("\b \b");
  95.                 }
  96.             }
  97.             else
  98.             {
  99.                 printf("*");
  100.                 pass1[i] = caracter1;
  101.                 i++;
  102.             }
  103.         }
  104.         i = 0;
  105.         fflush(stdin);
  106.         printf("\nConfirmar contrase%ca:...............:", 164);
  107.         while (caracter2 = getch())
  108.         {
  109.             if(caracter2 == 13)
  110.             {
  111.                 pass2[i] = '\0';
  112.                 break;
  113.             }
  114.             else if (caracter2 == 8)
  115.             {
  116.                 if (i > 0)
  117.                 {
  118.                     i--;
  119.                     printf("\b \b");
  120.                 }
  121.             }
  122.             else
  123.             {
  124.                 printf("*");
  125.                 pass2[i] = caracter2;
  126.                 i++;
  127.             }
  128.         }
  129.         fflush(stdin);
  130.  
  131.         if(strcmp(pass1,pass2) != 0)
  132.             printf("\nLas contrase%cas no coinciden. Intente de nuevo.\n", 164);
  133.  
  134.     }
  135.     while(strcmp(pass1, pass2 ) != 0);
  136.  
  137.     strcpy (a.pass, pass1);
  138.  
  139.  
  140.     printf("\nA%co de nacimiento ....................:", 164);
  141.     scanf("%d", &a.anioNacimiento);
  142.     printf("\nGenero ( F / M / O ) ....................:");
  143.     fflush(stdin);
  144.     scanf("%c",&a.genero);
  145.     a.genero = toupper (a.genero);
  146.     while((a.genero != 'M') && (a.genero != 'F') && (a.genero != 'O'))
  147.     {
  148.         printf("Dato invalido.\n");
  149.         printf("\nGenero ( F / M / O ) ....................:");
  150.         fflush(stdin);
  151.         scanf("%c", &a.genero);
  152.         a.genero = toupper (a.genero);
  153.     }
  154.     printf("\nPais....................:");
  155.     fflush(stdin);
  156.     gets(a.pais);
  157.     printf("\n");
  158.     printf("Usuario creado exitosamente.");
  159.     printf("Disfrute de Spotify.");
  160.  
  161.     guardarUsuario(a);
  162.     a.idUsuario ++;
  163.     getch();
  164.     system("cls");
  165. }
  166.  
  167.  
  168. int buscarUltimoId()
  169. {
  170.     int id = 0;
  171.     stUsuario a;
  172.     FILE *pArchUsuario = fopen(arUsuario,"rb");
  173.     if(pArchUsuario != NULL)
  174.     {
  175.         fseek(pArchUsuario, sizeof(stUsuario) * (-1), SEEK_END);
  176.         if(fread(&a,sizeof(stUsuario),1,pArchUsuario) > 0)
  177.         {
  178.             id = a.idUsuario;
  179.         }
  180.     }
  181.     fclose(pArchUsuario);
  182.     return id;
  183. }
  184.  
  185. void guardarUsuario(stUsuario a)
  186. {
  187.     FILE *pArchUsuario = fopen(arUsuario,"ab");
  188.     if(pArchUsuario != NULL)
  189.     {
  190.         fwrite(&a, sizeof(stUsuario), 1,pArchUsuario);
  191.         fclose(pArchUsuario);
  192.     }
  193. }
  194. void eliminarUsuario()
  195. {
  196.     FILE *pArchUsuario;
  197.     stUsuario a;
  198.     char option;
  199.     long numero;
  200.     pArchUsuario = fopen ("usuario.DAT", "rb+"); // Este modo permite leer y escribir
  201.     if (!pArchUsuario)
  202.         pArchUsuario = fopen ("usuario.DAT", "wb+"); // si el fichero no existe, lo crea.
  203.     do
  204.     {
  205.         switch (option = menu ())
  206.         {
  207.         case '1': // Mostrar registro
  208.             system ("cls");
  209.             printf ("Mostrar registro: ");
  210.             scanf ("%d", &numero);
  211.             fseek (pArchUsuario,sizeof(stUsuario)*numero, SEEK_SET);
  212.             fread (&a, sizeof (stUsuario), 1, pArchUsuario);
  213.             mostrar (a);
  214.             break;
  215.         case '2': // Eliminar registro
  216.             system ("cls");
  217.             printf ("Eliminar registro: ");
  218.             scanf ("%d", &numero);
  219.             fseek (pArchUsuario, numero * sizeof (stUsuario), SEEK_SET);
  220.             fread (&a, sizeof (stUsuario), 1, pArchUsuario);
  221.             a.eliminado = 'n';
  222.             fseek (pArchUsuario, numero * sizeof (stUsuario), SEEK_SET);
  223.             fwrite (&a, sizeof (stUsuario), 1, pArchUsuario);
  224.             break;
  225.         case '3': // Mostrar todo
  226.             system("cls");
  227.             mostrarRegistro();
  228.             system ("PAUSE");
  229.             break;
  230.         case '4': // Eliminar marcados
  231.             empaquetar(&pArchUsuario);
  232.             break;
  233.         }
  234.     }
  235.     while (option != '0');
  236.     fclose (pArchUsuario);
  237. }
  238. char menu()
  239. {
  240.     char respuesta;
  241.     do
  242.     {
  243.         system ("cls");
  244.         printf ("\n\n\n\tMENU PRINCIPAL\n\t --------------\n\n\t[ 1 ] - Mostrar registro\n\t");
  245.         printf ("[ 2 ] - Eliminar registro\n\t[ 3 ] - Mostrar todo\n\t[ 4 ] - Eliminar registros marcados\n\t[ 0 ] - Salir\n\n\t");
  246.         fflush (stdin);
  247.         respuesta = getche ();
  248.     }
  249.     while (respuesta < '0' && respuesta > '5');
  250.     return respuesta;
  251. }
  252. //--------------------------------------------------- Muestra un registro por pantalla, si no está marcado como borrado --------------------------------------------------
  253. void mostrar(stUsuario a)
  254. {
  255.         printf ("\n Eliminado ....................: %d", a.eliminado);
  256.         printf("\n Id ....................: %d",a.idUsuario);
  257.         printf("\n Nombre ................: %s",a.nombreUsuario);
  258.         printf("\n Contrase%ca ............: %s",164, a.pass);
  259.         printf("\n A%co ...................: %d",164, a.anioNacimiento);
  260.         printf("\n Genero ................: %c",a.genero);
  261.         printf("\n Pais ..................: %s\n",a.pais);
  262.  
  263.     system ("PAUSE");
  264. } //---------------- Muestra los registros por pantalla, en forma de listado, si no están marcados como borrados ------------------------------------------------
  265. void listar(long n, stUsuario *a)
  266. {
  267.     if (a -> eliminado == 's')
  268.     {
  269.         printf (" %4d ", n);
  270.         printf (" %-34s", a -> nombreUsuario);
  271.         printf (" %4d\n", a -> idUsuario);
  272.     }
  273. } //---------------------------------------------------------------- Elimina los registros marcados como borrados -----------------------------------------------------------------
  274. void empaquetar(FILE **pArchUsuario)   // Uso un puntero a puntero (doble puntero), para no retornar un
  275. {
  276.     FILE *pArchEliminados; // puntero desde la funcion (sería la otra manera de hacerlo).
  277.     stUsuario a;
  278.     pArchEliminados = fopen ("usuario.TMP", "wb");
  279.     rewind (*pArchUsuario);
  280.     while (fread (&a, sizeof (stUsuario), 1, *pArchUsuario) > 0)
  281.         if (a.eliminado == 's') // No uso llaves porque de cada condicion depende una sola linea de codigo
  282.             fwrite (&a, sizeof (stUsuario), 1, pArchEliminados);
  283.     fclose (pArchEliminados);
  284.     fclose (*pArchUsuario); // Lo cierro para poder trabajar en:
  285.     remove("usuario.BAK"); // Un poquito de administración de archivos desde consola DOS
  286.     rename("usuario.DAT", "usuario.BAK");
  287.     rename("usuario.TMP", "usuario.DAT");
  288.     *pArchUsuario = fopen ("usuario.DAT", "r+b"); // y lo abro, pues debo devolver la ejecución con el archivo abierto.
  289. }
  290. void mostrarRegistro()
  291. {
  292.     stUsuario a;
  293.     FILE *parchUsuario = fopen(arUsuario, "rb");
  294.     if(parchUsuario != NULL)
  295.     {
  296.         while(fread(&a, sizeof(stUsuario),1,parchUsuario) > 0)
  297.         {
  298.             mostrarUnUsuario(a);
  299.         }
  300.         fclose(parchUsuario);
  301.     }
  302. }
  303. void mostrarUnUsuario(stUsuario a)
  304. {
  305.     printf ("\n Eliminado ....................: %d", a.eliminado);
  306.     printf("\n Id ....................: %d",a.idUsuario);
  307.     printf("\n Nombre ................: %s",a.nombreUsuario);
  308.     printf("\n Contrase%ca ............: %s",164, a.pass);
  309.     printf("\n A%co ...................: %d",164, a.anioNacimiento);
  310.     printf("\n Genero ................: %c",a.genero);
  311.     printf("\n Pais ..................: %s",a.pais);
  312.     printf("\n ___________________________ ");
  313.  
  314. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top