Advertisement
Guest User

eliminar

a guest
Jun 20th, 2019
991
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.39 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement