Advertisement
Guest User

proyecto

a guest
Jun 25th, 2019
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <conio.h>
  5. #include "gotoxy.h"
  6. #include <time.h>
  7.  
  8. #define arUsuario "usuario.DAT"
  9. #define arMusica "musica.DAT"
  10.  
  11. ///ESTRUCTURAS__________________________________________________________________________________
  12. ///_____________________________________________________________________________________________
  13.  
  14. typedef struct
  15. {
  16. int idUsuario;
  17. char nombreUsuario[30];
  18. char pass[20];
  19. int anioNacimiento;
  20. char genero;
  21. char pais[20];
  22. int playlist[50]; //Guarda los id de las canciones.
  23. int cantidad; // Es el válidos de la playlist.
  24. int eliminado; // indica 1 o 0 si el cliente fue eliminado
  25. } stUsuario;
  26.  
  27.  
  28. typedef struct
  29. {
  30. int idCancion;
  31. char titulo[30];
  32. char artista[20];
  33. int duracion;
  34. char album[20];
  35. int anio;
  36. char genero[20];
  37. char comentario[100];
  38. int eliminado; // indica 1 o 0 si la canción fue eliminada
  39. } stCancion;
  40.  
  41.  
  42. ///PROTOTIPADOS________________________________________________________________________________
  43. ///____________________________________________________________________________________________
  44. void banner();
  45. void cargaArchivoUsuario();
  46. int buscarUltimoId();
  47. void guardarUsuario(stUsuario a);
  48. int validarInicioSesion (char user[], char contra[]);
  49. void inicioSesion ();
  50. void menuPrimerPantalla();
  51. void mostrarRegistro();
  52. int existenciaNombreUsuario(char user[]);
  53. void mostrarUnUsuario(stUsuario a);
  54. void menuAdmin();
  55. char opcionesMenuAdmin();
  56. void mostrar(stUsuario a);
  57. void empaquetar(FILE **pArchUsuario);
  58. void mostrarUnUsuario(stUsuario a);
  59. void cargaDeMusica ();
  60. void mostrarCancion (stCancion b);
  61. void mostrarCanciones();
  62. void usuarioAdmin ();
  63.  
  64.  
  65. ///MAIN_________________________________________________________________________________________
  66. ///_____________________________________________________________________________________________
  67.  
  68. int main()
  69. {
  70. ///Al inicio del programa, se muestra el banner y menu de opciones.
  71. menuPrimerPantalla();
  72. ///En este punto, el usuiario ya habrá ingresado al sistema.
  73. ///Habiendo creado su usuario si fuera necesario.
  74.  
  75.  
  76. ///Nota de desarrollo --->> Lo próximo es acomodar el inicio de sesión.
  77.  
  78.  
  79. return 0;
  80.  
  81. }
  82.  
  83.  
  84. ///FUNCIONES____________________________________________________________________________________
  85. ///_____________________________________________________________________________________________
  86.  
  87. void cargaArchivoUsuario()
  88. {
  89. char pass1[20], pass2[20];
  90. char caracter1=0;
  91. char caracter2=0;
  92. int existencia=0;
  93. stUsuario rgUsuarios;
  94. rgUsuarios.idUsuario = buscarUltimoId() + 1;
  95.  
  96. do
  97. {
  98. system("cls");
  99. banner();
  100. printf("\n\n\t\t\t\t\t\t\t\t\t <<< REGISTRE UN USUARIO >>>\n");
  101. printf("\n\t\t\t\t\t\t\t\t\t%c Nombre de usuario.........: ",175);
  102. scanf("%s",rgUsuarios.nombreUsuario);
  103. existencia = existenciaNombreUsuario(rgUsuarios.nombreUsuario);
  104. if(existencia == 1)
  105. {
  106. printf("\t\t\t\t\t\t\t\t\tEl usuario ya existe, intente con otro nombre.\n");
  107. printf("\n\n");
  108. printf("\t\t\t\t\t\t\t\t\t");
  109. system("pause");
  110. }
  111. ///si existencia toma valor 1, el usuario debe pensar otro nombre hasta que existencia sea 0
  112. }
  113. while(existencia!=0);
  114.  
  115. do
  116. {
  117. int i=0;
  118. printf("\n\t\t\t\t\t\t\t\t\t%c Contrase%ca................: ",175, 164);
  119. while (caracter1 != 13)
  120. {
  121. caracter1 = getch();
  122.  
  123. if(caracter1 == 13)
  124. {
  125. pass1[i] = '\0';
  126. }
  127. else if (caracter1 == 8)
  128. {
  129. if (i > 0)
  130. {
  131. i--;
  132. printf("\b \b");
  133. }
  134. }
  135. else
  136. {
  137. printf("*");
  138. pass1[i] = caracter1;
  139. i++;
  140. }
  141. }
  142. i = 0;
  143. fflush(stdin);
  144. printf("\n\t\t\t\t\t\t\t\t\t%c Confirmar contrase%ca......: ",175, 164);
  145. while (caracter2 != 13)
  146. {
  147. caracter2 = getch();
  148.  
  149. if(caracter2 == 13)
  150. {
  151. pass2[i] = '\0';
  152. }
  153. else if (caracter2 == 8)///si el caracter tiene ASCII 8 se trata de la tecla de borrado a la iz ( backslash)
  154. {
  155. if (i > 0)
  156. {
  157. i--;
  158. printf("\b \b");///el barra B es un caracter de backslash( lo que hace es mover el cursor
  159. } ///hacia la izquierda, luego un espacio en blanco para borrar *, y otro backslash
  160. } ///para volver a llevar el cursor a la izq, y usamos el i>0, para no borrar todo y que tenga un tope
  161. else
  162. {
  163. printf("*");
  164. pass2[i] = caracter2;
  165. i++;
  166. }
  167. }
  168. fflush(stdin);
  169.  
  170. if(strcmp(pass1,pass2) != 0)
  171. printf("\n\t\t\t\t\t\t\t\t\tLas contrase%cas no coinciden. Intente de nuevo.\n", 164);
  172.  
  173. }
  174. while(strcmp(pass1, pass2 ) != 0);
  175. strcpy (rgUsuarios.pass, pass1);
  176.  
  177. do
  178. {
  179. printf("\n\n\t\t\t\t\t\t\t\t\tA%co de nacimiento ..........: ", 164);
  180. scanf("%d", &rgUsuarios.anioNacimiento);
  181.  
  182. if(rgUsuarios.anioNacimiento > 2003)
  183. {
  184. printf("\t\t\t\t\t\t\t\t\tDebe ser mayor de 16 (dieciseis) a%cos para poder registrarse.\n", 165);
  185. }
  186. }
  187. while(rgUsuarios.anioNacimiento > 2003);
  188.  
  189. do
  190. {
  191. printf("\n\n\t\t\t\t\t\t\t\t\t%c Genero ( F / M / O )......: ",175);
  192. fflush(stdin);
  193. scanf("%c", &rgUsuarios.genero);
  194. rgUsuarios.genero = toupper (rgUsuarios.genero);
  195.  
  196. if((rgUsuarios.genero != 'M') && (rgUsuarios.genero != 'F') && (rgUsuarios.genero != 'O'))
  197. {
  198. printf("\t\t\t\t\t\t\t\t\tDato invalido.\n");
  199. }
  200. }
  201. while((rgUsuarios.genero != 'M') && (rgUsuarios.genero != 'F') && (rgUsuarios.genero != 'O'));
  202.  
  203. printf("\n\t\t\t\t\t\t\t\t\t%c Pais......................: ",175);
  204. fflush(stdin);
  205. gets(rgUsuarios.pais);
  206.  
  207. printf("\n\n\n\t\t\t\t\t\t\t\t\t\tUsuario creado exitosamente. ");
  208. printf("\n\t\t\t\t\t\t\t\t\t\t%cDisfrute de Jukebox!", 173);
  209.  
  210. guardarUsuario(rgUsuarios);
  211. rgUsuarios.idUsuario ++;
  212. getch();
  213. system("cls");
  214. }
  215.  
  216.  
  217. int buscarUltimoId()
  218. {
  219. int id = 0;
  220. stUsuario rgUsuarios;
  221. FILE *pArchUsuario = fopen(arUsuario,"rb");
  222. if(pArchUsuario != NULL)
  223. {
  224. fseek(pArchUsuario, sizeof(stUsuario) * (-1), SEEK_END);
  225. if(fread(&rgUsuarios, sizeof(stUsuario), 1,pArchUsuario) > 0)
  226. {
  227. id = rgUsuarios.idUsuario;
  228. }
  229. }
  230. fclose(pArchUsuario);
  231. return id;
  232. }
  233.  
  234. void guardarUsuario(stUsuario rgUsuarios)
  235. {
  236. FILE *pArchUsuario = fopen(arUsuario,"ab");
  237. if(pArchUsuario != NULL)
  238. {
  239. fwrite(&rgUsuarios, sizeof(stUsuario), 1,pArchUsuario);
  240. fclose(pArchUsuario);
  241. }
  242. }
  243.  
  244. int validarInicioSesion (char user[], char contra[])
  245. {
  246. stUsuario us1;
  247. FILE *pArchUsuario = fopen(arUsuario,"rb");
  248. int flag = 0;
  249. int flag2 = 0;
  250. int corroborar = 0;
  251.  
  252. if (pArchUsuario != NULL)
  253. {
  254.  
  255. while( !flag && (fread(&us1, sizeof(stUsuario), 1, pArchUsuario) > 0) )
  256. {
  257. if (strcmpi(us1.nombreUsuario, user)== 0)
  258. flag++;
  259. }
  260. if (strcmpi(us1.pass, contra)== 0)
  261. flag2++;
  262. }
  263.  
  264. /* if (!fclose(pArchUsuario)!= 0)
  265. {
  266. system("cls");
  267. printf("\nError al cerrar archivo.");
  268. }
  269. else
  270. {
  271. system("cls");
  272. printf("\nError al abrir el archivo.");
  273. }
  274. */
  275. if (flag == 0 && flag2 == 0)
  276. {
  277. printf("\n\t\t\t\t\t\t\t\tSu usuario o contrase%ca son incorrectos.",164);
  278. }
  279. else if(flag == 1 && flag2 == 0)
  280. {
  281. printf("\n\t\t\t\t\t\t\t\tSu contrase%ca es invalida.", 164);
  282. }
  283. else if(flag == 1 && flag2 == 1)
  284. {
  285. corroborar++;
  286. 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.");
  287. }
  288.  
  289. fclose(pArchUsuario);
  290. return corroborar ;
  291. ///corroborar fue inicializada en 0.
  292. ///Sólo tomará valor 1 en caso de que usuario y contraseña sean correctos.
  293. }
  294.  
  295. void inicioSesion ()
  296. {
  297. char a[40];
  298. char b [40];
  299. char usAdmin= {"admin"};
  300. char psAdmin= {"admin"};
  301. int rta=0;
  302. int rtaAdm=0;
  303. char caracter=0;
  304. int i=0;
  305.  
  306. do
  307. {
  308. system("cls");
  309.  
  310. banner();
  311.  
  312. printf("\n\n\n\t\t\t\t\t\t\t\t\t%c USUARIO: ", 175);
  313. fflush(stdin);
  314. gets(a);
  315. printf("\n\t\t\t\t\t\t\t\t\t%c CONTRASE%cA: ", 175, 165);
  316. fflush(stdin);
  317. while (caracter != 13)
  318. {
  319. caracter = getch();
  320.  
  321. if(caracter == 13)
  322. {
  323. b[i]='\0';
  324. }
  325. else if(caracter==8)
  326. {
  327. if(i>0)
  328. {
  329. i--;
  330. printf("\b \b");
  331. }
  332.  
  333. }
  334. else
  335. {
  336. printf("*");
  337. b[i]=caracter;
  338. i++;
  339.  
  340. }
  341.  
  342. fflush(stdin);
  343. }
  344. rta = validarUsuarioAdmin(a,b);
  345. if(rta == 1)
  346. {
  347. fflush(stdin);
  348. menuAdmin();
  349. }
  350. else
  351. {
  352. rta = validarInicioSesion(a,b);
  353. printf("\t\t\t\t\t\t\t\t\t");
  354. system("pause");
  355. }
  356. }
  357. while(rta != 1 && rta == 0);
  358.  
  359.  
  360. ///Ya que rta podría tener valor 0 o 1, puede ser redundante la condicion del while.
  361. ///Aún así, decido usarla igual para detectar el problema rapidamente en caso de error.
  362.  
  363. if(rta != 0 && rta != 1)
  364. {
  365. printf("SE PRODUJO UN ERROR EN LA VALIDACION DEL INICIO DE SESION");
  366. }
  367. }
  368.  
  369.  
  370. void menuPrimerPantalla()
  371. {
  372. char option;
  373.  
  374.  
  375. ///Siempre al mostrar estas opciones, mostramos el banner.
  376. banner();
  377.  
  378. printf("\n\n\n\t\t\t\t\t\t\t\t\t1. Iniciar Sesi%cn.", 162);
  379. printf("\n\t\t\t\t\t\t\t\t\t2. Registrarse.\n");
  380. printf("\n\t\t\t\t\t\t\t\t\t>> ");
  381. option = getche();
  382.  
  383. switch(option)
  384. {
  385. case '1':
  386. inicioSesion ();
  387. break;
  388.  
  389. case '2':
  390. cargaArchivoUsuario();
  391. inicioSesion ();
  392. break;
  393. }
  394.  
  395. }
  396.  
  397. void banner()
  398. {
  399. srand(time(NULL));
  400. color(rand()%14+1);
  401. printf("\n\n\n");
  402. printf("\t\t\t\t\t /$$$$$ /$$ /$$ \n");
  403. printf("\t\t\t\t\t |__ $$ | $$ | $$ \n");
  404. printf("\t\t\t\t\t | $$ /$$ /$$ | $$ /$$ /$$$$$$ | $$$$$$$ /$$$$$$ /$$ /$$\n");
  405. printf("\t\t\t\t\t | $$ | $$ | $$ | $$ /$$/ /$$__ $$ | $$__ $$ /$$__ $$ | $$ /$$/\n");
  406. printf("\t\t\t\t\t /$$ | $$ | $$ | $$ | $$$$$$/ | $$$$$$$$ | $$ \\ $$ | $$ \\ $$ \\ $$$$/ \n");
  407. printf("\t\t\t\t\t | $$ | $$ | $$ | $$ | $$_ $$ | $$_____/ | $$ | $$ | $$ | $$ >$$ $$ \n");
  408. printf("\t\t\t\t\t | $$$$$$/ | $$$$$$/ | $$ \\ $$ | $$$$$$$ | $$$$$$$/ | $$$$$$/ /$$/\\ $$\n");
  409. printf("\t\t\t\t\t \\______/ \\______/ |__/ \\__/ \\_______/ |_______/ \\______/ |__/ \\__/\n");
  410. color(15);
  411. }
  412.  
  413. ///En las funciones de inicio de sesion no contemplo el archivo en el parametro, ya que lo tengo definido como const
  414. ///ahora en inic sesion es variable local, era antes un acoplamiento de funciones
  415.  
  416. int existenciaNombreUsuario(char user[])
  417. {
  418. ///Cuando el valor de flag sea 1, quiere decir que el user ya esta creado.
  419. stUsuario us1;
  420. FILE *pArchUsuario = fopen(arUsuario,"rb");
  421. int flag=0;
  422.  
  423.  
  424. if (pArchUsuario != NULL)
  425. {
  426. while( !flag && (fread(&us1, sizeof(stUsuario), 1, pArchUsuario) > 0) )
  427. {
  428. if (strcmpi(us1.nombreUsuario, user)== 0)
  429. flag++;
  430. }
  431. }
  432. return flag;
  433. }
  434.  
  435. /// ---------------------------------------- FUNCIONES ADMIN----------------------------------------------
  436. void menuAdmin()
  437. {
  438. FILE *pArchUsuario;
  439. stUsuario a;
  440. char option;
  441. long numero;
  442. pArchUsuario = fopen ("usuario.DAT", "rb+"); // Este modo permite leer y escribir
  443. if (!pArchUsuario)
  444. pArchUsuario = fopen ("usuario.DAT", "wb+"); // si el fichero no existe, lo crea.
  445. do
  446. {
  447. switch (option = opcionesMenuAdmin())
  448. {
  449. case '1': // Mostrar registro
  450. system ("cls");
  451. printf ("Mostrar registro: ");
  452. scanf ("%d", &numero);
  453. fseek (pArchUsuario,sizeof(stUsuario)*numero, SEEK_SET);
  454. fread (&a, sizeof (stUsuario), 1, pArchUsuario);
  455. mostrar (a);
  456. break;
  457. case '2': // Eliminar registro
  458. system ("cls");
  459. printf ("Eliminar registro: ");
  460. scanf ("%d", &numero);
  461. fseek (pArchUsuario, numero * sizeof (stUsuario), SEEK_SET);
  462. fread (&a, sizeof (stUsuario), 1, pArchUsuario);
  463. a.eliminado = 0;
  464. fseek (pArchUsuario, numero * sizeof (stUsuario), SEEK_SET);
  465. fwrite (&a, sizeof (stUsuario), 1, pArchUsuario);
  466. break;
  467. case '3': // Mostrar todo
  468. system("cls");
  469. mostrarRegistro();
  470. system ("PAUSE");
  471. break;
  472. case '4': // Eliminar marcados
  473. empaquetar(&pArchUsuario);
  474. break;
  475. case '5': // Cargar musica
  476. system("cls");
  477. cargaDeMusica();
  478. break;
  479. case '6': // Mostrar canciones
  480. system("cls");
  481. mostrarCanciones();
  482. system("pause");
  483. break;
  484. }
  485. }
  486. while (option != 0);
  487. fclose (pArchUsuario);
  488. }
  489.  
  490. char opcionesMenuAdmin()
  491. {
  492. int respuesta;
  493. do
  494. {
  495. system ("cls");
  496. printf ("\n\n\n\tMENU PRINCIPAL\n\t --------------\n\n\t[ 1 ] - Mostrar registro\n\t");
  497. 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");
  498. fflush (stdin);
  499. respuesta = getche ();
  500. }
  501. while (respuesta < '0' && respuesta > '7');
  502. return respuesta;
  503.  
  504. }
  505. ///--------------------------------------------------- Muestra un registro por pantalla, si no está marcado como borrado --------------------------------------------------
  506. void mostrar(stUsuario a)
  507. {
  508. printf("\n Eliminado ..............: %d", a.eliminado);
  509. printf("\n Id ....................: %d",a.idUsuario);
  510. printf("\n Nombre ................: %s",a.nombreUsuario);
  511. printf("\n Contrase%ca ............: %s",164, a.pass);
  512. printf("\n A%co ...................: %d",164, a.anioNacimiento);
  513. printf("\n Genero ................: %c",a.genero);
  514. printf("\n Pais ..................: %s\n",a.pais);
  515.  
  516. system ("PAUSE");
  517. }
  518. ///---------------------------------------------------------------- Elimina los registros marcados como borrados -----------------------------------------------------------------
  519. void empaquetar(FILE **pArchUsuario) /// Uso un puntero a puntero (doble puntero), para no retornar un
  520. {
  521. FILE *pArchEliminados; /// puntero desde la funcion (sería la otra manera de hacerlo).
  522. stUsuario a;
  523. pArchEliminados = fopen ("usuario.TMP", "wb");
  524. rewind (*pArchUsuario);
  525. while (fread (&a, sizeof (stUsuario), 1, *pArchUsuario) > 0)
  526. if (a.eliminado == 1) /// No uso llaves porque de cada condicion depende una sola linea de codigo
  527. fwrite (&a, sizeof (stUsuario), 1, pArchEliminados);
  528. fclose (pArchEliminados);
  529. fclose (*pArchUsuario); /// Lo cierro para poder trabajar en:
  530. remove("usuario.BAK"); /// Un poquito de administración de archivos desde consola DOS
  531. rename("usuario.DAT", "usuario.BAK");
  532. rename("usuario.TMP", "usuario.DAT");
  533. *pArchUsuario = fopen ("usuario.DAT", "r+b"); /// y lo abro, pues debo devolver la ejecución con el archivo abierto.
  534. }
  535. void mostrarRegistro()
  536. {
  537. stUsuario a;
  538. FILE *parchUsuario = fopen(arUsuario, "rb");
  539. if(parchUsuario != NULL)
  540. {
  541. while(fread(&a, sizeof(stUsuario),1,parchUsuario) > 0)
  542. {
  543. mostrarUnUsuario(a);
  544. }
  545. fclose(parchUsuario);
  546. }
  547. }
  548. void mostrarUnUsuario(stUsuario a)
  549. {
  550. printf("\n Eliminado .............: %d", a.eliminado);
  551. printf("\n Id ....................: %d",a.idUsuario);
  552. printf("\n Nombre ................: %s",a.nombreUsuario);
  553. printf("\n Contrase%ca ............: %s",164, a.pass);
  554. printf("\n A%co ...................: %d",164, a.anioNacimiento);
  555. printf("\n Genero ................: %c",a.genero);
  556. printf("\n Pais ..................: %s",a.pais);
  557. printf("\n ___________________________ \n");
  558. }
  559. void cargaDeMusica ()
  560. {
  561. FILE*pArchCancion;
  562. stCancion b;
  563. char continuar;
  564. pArchCancion=fopen("musica.DAT", "ab");
  565. if(pArchCancion!=NULL)
  566. {
  567. puts("---------------------------");
  568. printf("ingrese nombre del artista:\n");
  569. fflush(stdin);
  570. gets(b.artista );
  571. printf("ingrese titulo de la cancion:\n");
  572. fflush(stdin);
  573. gets(b.titulo);
  574. printf("ingrese la duracion de la cancion:\n");
  575. scanf("%d", &b.duracion);
  576. printf("ingrese el genero de la cancion:\n");
  577. fflush(stdin);
  578. gets(b.genero);
  579. printf("ingrese el a%co de la cancion:\n",164);
  580. scanf("%d", &b.anio);
  581. printf("ingrese el album de la cancion:\n");
  582. fflush(stdin);
  583. gets(b.album);
  584. printf("ingrese un comentario de la cancion:\n");
  585. fflush(stdin);
  586. gets(b.comentario);
  587. b.idCancion=1;
  588. puts("---------------------------");
  589. getch();
  590. }
  591. fwrite(&b, sizeof(stCancion),1,pArchCancion);
  592.  
  593. fclose(pArchCancion);
  594. }
  595. void mostrarCancion (stCancion b)
  596. {
  597. puts("--------------------------------------");
  598. printf("\n Nombre del artista: %s", b.artista);
  599. printf("\n Titulo: %s", b.titulo);
  600. printf("\n Album: %s", b.album);
  601. printf("\n Genero: %s",b.genero);
  602. printf("\n Duracion: %dmin\n",b.duracion);
  603. printf("\n A%co: %i\n",164, b.anio);
  604. printf("\n Comentario: %s\n",b.comentario);
  605. puts("--------------------------------------");
  606. }
  607. void mostrarCanciones()
  608. {
  609. stCancion b;
  610. FILE *pArchCancion = fopen("musica.DAT", "rb");
  611. if(pArchCancion != NULL)
  612. {
  613. while(fread(&b, sizeof(stCancion),1,pArchCancion) > 0)
  614. {
  615. mostrarCancion(b);
  616. }
  617. }
  618. fclose(pArchCancion);
  619. }
  620.  
  621. int validarUsuarioAdmin (char userAdm [], char contraAdm[])
  622. {
  623. stUsuario usAdm;
  624. FILE *pArchUsuario = fopen(arUsuario,"rb");
  625. int validar = 0;
  626.  
  627. if (pArchUsuario != NULL)
  628. {
  629. fread(&usAdm, sizeof(stUsuario), 1, pArchUsuario);
  630.  
  631. if(strcmpi(usAdm.nombreUsuario, userAdm)== 0 && (strcmpi(usAdm.pass, contraAdm)== 0))
  632. {
  633. validar++;
  634. }
  635. }
  636. return validar;
  637. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement