Guest User

Untitled

a guest
Dec 8th, 2019
74
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROGRAM Vending;
  2. CONST
  3. LONGCODIGO = 4; {longitud del c?digo de usuario}
  4. LONGFECHA = 10; {longitud de la fecha}
  5. MAXUSUARIOS = 100; {n?mero m?ximo de usuarios}
  6. MAXPRODUCTOS = 50; {n?mero m?ximo de productos}
  7. MAXVENTAS = 120; {n?mero m?ximo de ventas}
  8. TYPE
  9. tCodigoTarjeta = string[LONGCODIGO];
  10. tFecha = string[LONGFECHA];
  11. {tipo usuario}
  12. tUsuario = RECORD
  13. nombre: string;
  14. codigoTarjeta: tCodigoTarjeta;
  15. saldo: real;
  16. END;
  17. {tipo producto}
  18. tProducto = RECORD
  19. nombre, marca: string;
  20. precio: real;
  21. stock: integer;
  22. END;
  23. {tipo venta}
  24. tVenta = RECORD
  25. nombreProducto: string;
  26. codigoTarjeta: tCodigoTarjeta;
  27. fecha : tFecha;
  28. END;
  29. {tipo lista de usuarios}
  30. tIndiceUsuarios = 1..MAXUSUARIOS;
  31. tListaUsuarios = ARRAY [tIndiceUsuarios] OF tUsuario;
  32. {Array parcialmente lleno para usuarios}
  33. tUsuarios = RECORD
  34. usuarios: tListaUsuarios;
  35. tope: integer;
  36. END;
  37. {tipo lista de productos}
  38. tIndiceProductos = 1..MAXPRODUCTOS;
  39. tListaProductos = ARRAY [tIndiceProductos] OF tProducto;
  40. {Array parcialmente lleno para productos}
  41. tProductos = RECORD
  42. productos: tListaProductos;
  43. tope: integer;
  44. END;
  45. {tipo lista de ventas}
  46. tIndiceVentas = 1..MAXVENTAS;
  47. tListaVentas= ARRAY [tIndiceVentas] OF tVenta;
  48. {Array parcialmente lleno para ventas}
  49. tVentas = RECORD
  50. ventas: tListaVentas;
  51. tope: integer;
  52. END;
  53. {tipo archivos binarios}
  54. tArchivoUsuarios = FILE OF tUsuario;
  55. tArchivoProductos = FILE OF tProducto;
  56. tArchivoVentas = FILE OF tVenta;
  57. VAR
  58. todosLosUsuarios:tUsuarios;
  59. todosLosProductos:tProductos;
  60. todasLasVentas:tVentas;
  61. ventaHoy:tVenta;{se hace necesaria para poder tener una fecha general para todo el programa del comprador}
  62. posicionUsuario:integer;{la posicion en el array de tListaUsuarios}
  63. comprobante1:integer;{pivote usado para operaciones internas,innecesario?}
  64. codigoIdentificacion:string;
  65. menuGlobal,menuComprador,menuReponedor:boolean;
  66. eleccion:char;
  67.  
  68. FUNCTION Comprobarcodigo(codigo:string;listaUsuarioss:tUsuarios):integer;
  69. {-1 para el reponedor,0 para identificacion no encontrada,i para identidad encontrada en la posicion "i" del array}
  70. VAR
  71. i,comprobante2:integer;
  72. BEGIN
  73. comprobante2:=0;
  74. FOR i:=1 TO listaUsuarioss.tope DO
  75. BEGIN
  76. IF(codigo=listaUsuarioss.usuarios[i].codigoTarjeta)THEN
  77. BEGIN
  78. ComprobarCodigo:=i;
  79. comprobante2:=1;
  80. END;
  81. END;
  82. IF (codigo='0000') THEN
  83. ComprobarCodigo:=-1;
  84. IF (codigo<>'0000')AND(comprobante2=0)THEN
  85. ComprobarCodigo:=0; {hacer un bucle o resetear el menu?de momento resetea el menu}
  86. END;
  87. PROCEDURE VentaTarjeta(VAR listaUsuarios:tUsuarios);
  88. VAR
  89. codigo:integer;
  90. comprobante2:integer;
  91. listaUsuariosOriginal:tUsuarios;
  92. BEGIN
  93. comprobante2:=0;
  94. listaUsuariosOriginal:=listaUsuarios;
  95. listaUsuarios.tope:=listaUsuarios.tope+1;
  96. writeln('Escriba el nombre');
  97. readln(listaUsuarios.usuarios[listaUsuarios.tope].nombre);
  98. writeln('Escriba el saldo inicial');
  99. readln(listaUsuarios.usuarios[listaUsuarios.tope].saldo);
  100. writeln('Asigne un codigo al usuario');
  101. readln(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta);
  102. comprobante2:=ComprobarCodigo(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta,listaUsuariosOriginal);{se pone la original antes de ser modificada dado que tiene que comparar con si ya existia anteriormente}
  103. WHILE(comprobante2<>0)OR(ord(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta[0])<>4)DO
  104. BEGIN
  105. writeln('Error,escriba un codigo numerico de 4 digitos superior a 0000');
  106. readln(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta);
  107. comprobante2:=Comprobarcodigo(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta,listaUsuariosOriginal);
  108. END;
  109. END;
  110. PROCEDURE BajaTarjeta(VAR listaUsuarios:tUsuarios);
  111. VAR
  112. comprobante2:integer;
  113. codigoBuscado:string;
  114. BEGIN
  115.  
  116. writeln('Escriba el codigo del usuario que desea eliminar');
  117. readln(codigoBuscado);
  118. comprobante2:=ComprobarCodigo(codigoBuscado,listaUsuarios);
  119. IF(comprobante2<=0)THEN
  120. writeln('Error.El codigo introducido no existe')
  121. ELSE
  122. BEGIN
  123. listaUsuarios.usuarios[comprobante2]:=listaUsuarios.usuarios[listaUsuarios.tope];
  124. listaUsuarios.tope:=listaUsuarios.tope-1;
  125. END;
  126. END;
  127. {******************* Insertar un nuevo producto a la lista ********************}
  128. PROCEDURE insertarProducto (VAR productos3: tProductos; nombProd:string);
  129. BEGIN
  130. IF productos3.tope < MAXPRODUCTOS THEN
  131. BEGIN
  132. productos3.tope := productos3.tope + 1;
  133. productos3.productos[productos3.tope].nombre:= nombProd;
  134. writeln('Por favor, introduzca su marca');
  135. readln(productos3.productos[productos3.tope].marca);
  136. writeln('A continuacion, indique su precio');
  137. readln(productos3.productos[productos3.tope].precio);
  138. writeln('Por ultimo, introduzca el stock');
  139. readln(productos3.productos[productos3.tope].stock);
  140. writeln ('El producto se ha registrado correctamente')
  141. END
  142. ELSE
  143. writeln('La lista est? llena');
  144. END;
  145.  
  146. {******************* Modificar alg?n dato del producto *********************}
  147. PROCEDURE modificarStock (VAR productosMod:tProductos; posicionMod:integer);
  148. VAR
  149. stockNuevo:integer;
  150. BEGIN
  151. writeln ('El stock actual de este producto es de: ', (productosMod.productos[posicionMod].stock), ' unidades.');
  152. writeln ('Introduzca el nuevo stock: ');
  153. readln (stockNuevo);
  154. IF (stockNuevo = productosMod.productos[posicionMod].stock) THEN
  155. writeln ('El stock introducido coincide con el anterior')
  156. ELSE
  157. BEGIN
  158. productosMod.productos[posicionMod].stock:= stockNuevo;
  159. writeln('El stock se ha actualizado correctamente');
  160. END;
  161. END;
  162. {******************* Comprobaci?n de la repeticion del mismo producto ********************}
  163. FUNCTION compRepetido (nombre:string; productos2:tProductos):integer;
  164. VAR encontrado, num, contador: integer;
  165. BEGIN
  166. encontrado := 0;
  167. num := productos2.tope;
  168. contador := 1;
  169. WHILE (encontrado = 0) AND (contador <= num) DO
  170. BEGIN
  171. IF (productos2.productos[contador].nombre = nombre) THEN
  172. encontrado:= contador;
  173. contador:= contador + 1;
  174. END;
  175. compRepetido:= encontrado;
  176. END;
  177.  
  178. PROCEDURE AgregarProducto(VAR arrayProductos:tProductos);
  179. VAR
  180. nombreProducto:string;
  181. repetido:integer;
  182. BEGIN
  183. writeln ('Por favor, introduzca el nombre del producto:');
  184. readln (nombreProducto);
  185. repetido:=compRepetido(nombreProducto, arrayProductos);
  186. IF (repetido <> 0) THEN
  187. modificarStock (arrayProductos, repetido)
  188. ELSE
  189. insertarProducto(arrayProductos, nombreProducto);
  190. END;
  191. PROCEDURE crearNuevoProducto (VAR producto1:tProducto; VAR nombreProd:string);
  192. BEGIN
  193. producto1.nombre:= nombreProd;
  194. writeln('Por favor, introduzca su marca');
  195. readln(producto1.marca);
  196. writeln('A continuacion, indique su precio');
  197. readln(producto1.precio);
  198. writeln('Por ultimo, introduzca el stock');
  199. readln(producto1.stock);
  200. END;
  201. BEGIN
  202. {DATOS INTRODUCIDOS SOLO PARA PRUEBASSSSSSS}
  203. todosLosUsuarios.usuarios[1].nombre:='Mufasa';
  204. todosLosUsuarios.usuarios[1].saldo:=1000;
  205. todosLosUsuarios.usuarios[1].codigoTarjeta:='0001';
  206. todosLosUsuarios.usuarios[2].nombre:='Sayan';
  207. todosLosUsuarios.usuarios[2].saldo:=9000;
  208. todosLosUsuarios.usuarios[2].codigoTarjeta:='0002';
  209. todosLosUsuarios.usuarios[3].nombre:='Pokemon';
  210. todosLosUsuarios.usuarios[3].saldo:=150;
  211. todosLosUsuarios.usuarios[3].codigoTarjeta:='0003';
  212. todosLosUsuarios.usuarios[4].nombre:='Se?or Pi';
  213. todosLosUsuarios.usuarios[4].saldo:=314.1592;
  214. todosLosUsuarios.usuarios[4].codigoTarjeta:='0004';
  215. todosLosUsuarios.tope:=4;
  216. todosLosProductos.productos[1].nombre := 'Fanta Naranja';
  217. todosLosProductos.productos[1].marca := 'Coca Cola';
  218. todosLosProductos.productos[1].precio := 1.50;
  219. todosLosProductos.productos[1].stock := 30;
  220. todosLosProductos.productos[2].nombre := 'Fanta Limon';
  221. todosLosProductos.productos[2].marca := 'Coca Cola';
  222. todosLosProductos.productos[2].precio := 1.50;
  223. todosLosProductos.productos[2].stock := 25;
  224. todosLosProductos.productos[3].nombre := 'Patatas Fritas';
  225. todosLosProductos.productos[3].marca := 'Matutano';
  226. todosLosProductos.productos[3].precio := 1;
  227. todosLosProductos.productos[3].stock := 15;
  228. todosLosProductos.productos[4].nombre := 'Kikos';
  229. todosLosProductos.productos[4].marca := 'Churruca';
  230. todosLosProductos.productos[4].precio := 0.70;
  231. todosLosProductos.productos[4].stock := 2;
  232. todosLosProductos.productos[5].nombre := 'Galletas chocolate';
  233. todosLosProductos.productos[5].marca := 'Principe';
  234. todosLosProductos.productos[5].precio := 1.25;
  235. todosLosProductos.productos[5].stock := 5;
  236. todosLosProductos.productos[6].nombre := 'Batido';
  237. todosLosProductos.productos[6].marca := 'Cacaolat';
  238. todosLosProductos.productos[6].precio := 1.25;
  239. todosLosProductos.productos[6].stock := 7;
  240. todosLosProductos.tope := 6;
  241. todasLasVentas.ventas[1].nombreProducto:='Fanta Naranja';
  242. todasLasVentas.ventas[1].codigoTarjeta:='0001';
  243. todasLasVentas.ventas[1].fecha:='22-01-2050';
  244. todasLasVentas.ventas[2].nombreProducto:='Patatas Fritas';
  245. todasLasVentas.ventas[2].codigoTarjeta:='0001';
  246. todasLasVentas.ventas[2].fecha:='72-01-1911';
  247. {pues eso mismo de arriba chaaaaaacho,datos para pruebas}
  248.  
  249. menuGlobal:=TRUE;
  250. menuComprador:=TRUE;
  251. menuReponedor:=TRUE;
  252. REPEAT
  253. writeln('Indique que dia es hoy');
  254. readln(VentaHoy.fecha);{comprobar fecha correctamente introducida}
  255. writeln('Introduzca su codigo');
  256. readln(codigoIdentificacion);
  257. posicionUsuario:=ComprobarCodigo(codigoIdentificacion,todosLosUsuarios);
  258. IF(posicionUsuario>0)THEN{Comprador}
  259. BEGIN
  260. writeln ('-------------------------------------------------------');
  261. writeln ('Bienvenido/a ', todosLosUsuarios.usuarios[posicionUsuario].nombre);
  262. writeln ('Su saldo acumulado es de ', todosLosUsuarios.usuarios[posicionUsuario].saldo:5:2);
  263. writeln ('-------------------------------------------------------');
  264. REPEAT
  265. writeln('**********************MENU**************************');
  266. writeln('a)Comprar producto');
  267. writeln('b)Introducir saldo');
  268. writeln('c)Finalizar');
  269. writeln('**********************MENU**************************');
  270. readln(eleccion);
  271. CASE (eleccion)OF
  272. 'a','A':{comprar productos}
  273. writeln('b');
  274. 'b','B':{introducir saldo}
  275. writeln('b');
  276. 'c','C':{finalizar}
  277. menuComprador:=FALSE
  278. ELSE
  279. writeln('Opcion incorrecta');
  280. END;{case of}
  281. UNTIL(menuComprador=FALSE);
  282. END
  283. {menu-Comprador}
  284. ELSE IF posicionUsuario=0 THEN
  285. writeln('codigo incorrecto')
  286. ELSE IF posicionUsuario=-1 THEN{reponedor}
  287. BEGIN
  288. REPEAT
  289. writeln('**********************MENU REPONEDOR**************************');
  290. writeln('a)Venta de tarjeta');
  291. writeln('b)Baja tarjeta');
  292. writeln('c)A?adir producto');
  293. writeln('d)Eliminar producto');
  294. writeln('e)Lista de productos');
  295. writeln('f)Lista de usuarios');
  296. writeln('g)Lista de ventas');
  297. writeln('h)Lista de usuarios que no han comprado');
  298. writeln('i)Lista de productos que han sido vendidos');
  299. writeln('j)Hacer backup');
  300. writeln('k)Restaurar backup');
  301. writeln('l)Guardar ventas');
  302. writeln('m)Cerrar sesion');
  303. writeln('n)Apagar maquina');
  304. writeln('**********************MENU REPONEDOR**************************');
  305. readln(eleccion);
  306. CASE (eleccion)OF
  307. 'a','A':{Venta de tarjeta}
  308. VentaTarjeta(todosLosUsuarios);
  309. 'b','B':{Baja de tarjeta}
  310. BajaTarjeta(todosLosUsuarios);
  311. 'c','C':{A?adir producto}
  312. AgregarProducto(todosLosProductos);
  313. 'd','D':{}
  314. BEGIN
  315. writeln('d');
  316. END;
  317. 'e','E':{}
  318. BEGIN
  319. writeln('e');
  320. END;
  321. 'f','F':{}
  322. BEGIN
  323. writeln('f');
  324. END;
  325. 'g','G':{}
  326. BEGIN
  327. writeln('g');
  328. END;
  329. 'h','H':{}
  330. BEGIN
  331. writeln('h');
  332. END;
  333. 'i','I':{}
  334. BEGIN
  335. writeln('i');
  336. END;
  337. 'j','J':{}
  338. BEGIN
  339. writeln('j');
  340. END;
  341. 'k','K':{}
  342. BEGIN
  343. writeln('k');
  344. END;
  345. 'l','L':{}
  346. BEGIN
  347. writeln('l');
  348. END;
  349. 'm','M':{cerrar menu reponedor}
  350. menuReponedor:=FALSE;
  351. 'n','N':{apagar maquina}
  352. BEGIN
  353. menuReponedor:=FALSE;
  354. menuGlobal:=FALSE;
  355. END;
  356. ELSE
  357. writeln('Opcion incorrecta');
  358. END;{case of}
  359. UNTIL(menuReponedor=FALSE);
  360. END;
  361. UNTIL (menuGlobal=FALSE);
  362. END.
RAW Paste Data