Guest User

Untitled

a guest
Feb 19th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.87 KB | None | 0 0
  1.  
  2. program ReparaElectros;
  3. uses
  4. crt,dos;
  5. const
  6. Esc=#27;
  7. type
  8. ST30 = String[30]; //Cadena de 30 caractéres
  9. TRegRepUt=Record //Registro Tipo Repuesto, con dos campos
  10. codigo:word;
  11. cant:word;
  12. end;
  13. TVecRep=array[1..10] of TRegRepUt; //Vector de 10 posiciones de Tipo Repuesto
  14. TRegPed=record //Registro Tipo Pedido, 3 campos.
  15. NroPed:word;
  16. FechaP:longint;
  17. electro:ST30;
  18. end;
  19. TRegRepa=record //Registro Tipo Reparados, 3 campos.
  20. NroPed:word;
  21. FechaR:longint;
  22. RepUt:TVecRep;
  23. end;
  24. TRegRepu=record
  25. Codigo:word;
  26. descrip:ST30;
  27. stock:word;
  28. end;
  29. TArchPed = file of TRegPed;
  30. TArchRepa = file of TRegRepa;
  31. TArchRepu = file of TRegRepu;
  32. var
  33. RegAux3,AuxPed, RegPed:TRegPed;
  34. RegRepa, RegAux2:TRegRepa;
  35. RegAux1, RegRepu:TRegRepu;
  36. ArchAux, ArchPed:TArchPed;
  37. ArchRepa:TArchRepa;
  38. ArchRepu:TArchRepu;
  39. r, start:char;
  40. dia,mes,anio,a,me,d,ds:word;
  41. fec:longint;
  42. electro:string[30];
  43. NroPed,numped:word;
  44. VecAux:TVecRep;
  45. i:byte;
  46. fin, Hay:boolean;
  47.  
  48. function fech:longint; //{obtiene la fecha}
  49. begin;
  50. getdate(a,me,d,ds);
  51. fech:=(a*10000)+(me*100)+d
  52. end;
  53.  
  54. Procedure descompone_fecha(f:longint; var dia:word; var mes:word; var anio:word);
  55. begin
  56. dia:=f mod 100;
  57. mes:=(f mod 10000)div 100;
  58. anio:= f div 10000;
  59. end;
  60.  
  61. Procedure Mostrar_menu;
  62. begin
  63. writeln('--- Elije alguna opcion para continuar ---');
  64. Writeln('');
  65. writeln(' 1 - Agregar nuevo pedido de reparacion');
  66. writeln(' 2 - Registrar reparacion');
  67. writeln(' 3 - Ver faltante de repuestos');
  68. writeln(' 4 - Salir');
  69.  
  70. end;
  71.  
  72. Procedure Leer_Esp(var Arch:TArchPed; var Reg:TregPed; var FIN:Boolean);
  73. begin
  74. if Eof(Arch) then
  75. begin
  76. FIN:=True;
  77. end
  78. else
  79. begin
  80. FIN:=False;
  81. Read(Arch,Reg);
  82. end
  83. end;
  84.  
  85. procedure Abrir_Archivos(var ArchPed:TArchPed; var ArchRepu:TArchRepu;var ArchRepa:TarchRepa);
  86. begin
  87. clrscr;
  88. Assign(ArchPed, 'e:\TP1\Pedidos.dat');
  89. Reset(ArchPed);
  90. Assign(ArchRepu, 'e:\TP1\Repuestos.dat');
  91. Reset(ArchRepu);
  92. Assign(ArchRepa, 'e:\TP1\Reparados.dat');
  93. Reset(ArchRepa);
  94. end;
  95.  
  96. Procedure Tomar_Pedido_Mostrar(var ArchPed:TArchPed; var RegPed:TRegPed; Fin:boolean);
  97. var
  98.  
  99. NroPed:word;
  100. FechaP:longint;
  101. Electro:ST30;
  102. begin
  103. if eof(ArchPed) then
  104. begin
  105. fin:=True
  106. end
  107. else
  108. begin
  109. Fin:=false;
  110. read(ArchPed, RegPed);
  111. nroped:=Regped.nroped;
  112. fechap:=regped.fechap;
  113. electro:=regped.electro;
  114. read();
  115. end;
  116. if fin then
  117. begin
  118. Writeln('No hay electrodomestico para reparar')
  119. end
  120. else
  121. begin
  122. Descompone_Fecha(fechap,dia,mes,anio);
  123. textcolor(white);
  124. Writeln('El pedido a reparar es: ');
  125. textcolor(white);
  126. writeln('-----------------------------------------------------------------------');
  127. textcolor(white);
  128. Writeln('Nro de Pedido Fecha Electrodomestico');
  129. textcolor(6);
  130. Writeln(' ',nroped,' ',dia,'/',mes,'/',anio,' ',electro);
  131. textcolor(white);
  132. writeln('-----------------------------------------------------------------------');
  133. readln();
  134. end;
  135. end;
  136.  
  137. Procedure Ingresar_Repuestos(Var VecAux:TVecRep;var i:byte;var Fin:boolean);
  138. var
  139. CodRep:Word;
  140. Cant:Word;
  141. begin
  142. if (not fin) then
  143. begin
  144. i:=0;
  145. textcolor(white); Writeln('--- Para dejar de ingresar repuestos ingrese Cantidad=0 ---');
  146. writeln('');
  147. writeln(' Como maximo puede ingresar 10 repuestos');
  148. repeat
  149. i:=i+1;
  150. writeln('');
  151. textcolor(white);
  152. Write('Por favor ingrese codigo de Repuesto Solicitado: ');
  153. Readln(Codrep);
  154. Writeln('');
  155. Write('Por favor ingrese cantidad necesaria: ');
  156. Readln(Cant);
  157. Writeln('');
  158. VecAux[i].codigo:=CodRep;
  159. VecAux[i].Cant:=Cant;
  160. clrscr;
  161. writeln('Usted lleva ingresados ',i,' repuestos');
  162. writeln('');
  163. until (Cant=0) or (i=10);
  164. end
  165. else
  166. begin
  167. end;
  168. end;
  169.  
  170. Procedure Verificar_Stock_Actualizar(VecAux:TVecRep; RegAux1:TRegRepu; i:byte;var ArchRepu:TarchRepu; var Hay:boolean);
  171.  
  172. Var
  173. j,k:word;
  174. Stock:word;
  175. p:word;
  176. Begin
  177. Hay:=True;
  178. For j:=1 to i do
  179. begin
  180. p:=VecAux[j].codigo;
  181. Seek(ArchRepu, p);
  182. Read(ArchRepu,RegRepu);
  183. if (RegRepu.stock>=VecAux[j].cant) then
  184. begin
  185. end
  186. else
  187. begin
  188. Hay:=False;
  189. end;
  190. end;
  191. If Hay then
  192. begin
  193. for k:=1 to i-1 do
  194. begin
  195. Seek(ArchRepu, VecAux[k].codigo);
  196. Read(ArchRepu,RegRepu);
  197. Stock:=RegRepu.Stock;
  198. Stock:=Stock - VecAux[k].cant;
  199. RegAux1.Stock:=Stock;
  200. RegAux1.codigo:=VecAux[k].Codigo;
  201. Seek(ArchRepu, Filepos(ArchRepu)-1);
  202. Write(ArchRepu,RegAux1);
  203. textcolor(6);
  204. end;
  205. Writeln('*** Reparacion realizada ***');
  206. read();
  207. textcolor(white);
  208. end
  209. else
  210. begin
  211. textcolor(6);
  212. Writeln('*** No se puede realizar la reparacion ***');
  213. textcolor(white);
  214. end;
  215. end;
  216.  
  217. Procedure Registrar_Reparacion(VecAux:TvecRep;RegAux2:TRegRepa;i:byte;RegPed:TRegPed ;var ArchRepa:TArchRepa; Hay:boolean);
  218. Var
  219. NroPed:Word;
  220. Fecha:Longint;
  221. x:byte;
  222. begin
  223. read();
  224. if Hay then
  225. begin
  226. NroPed:=RegPed.NroPed;
  227. Fecha:=Fech;
  228. RegAux2.NroPed:=NroPed;
  229. RegAux2.FechaR:=Fecha;
  230. for x:=1 to i do
  231. begin
  232. RegAux2.RepUt[x].Codigo:=VecAux[x].Codigo;
  233. RegAux2.RepUt[x].Cant:=VecAux[x].Cant;
  234. end;
  235. Seek(ArchRepa, filesize(ArchRepa));
  236. Write(ArchRepa,RegAux2);
  237. end
  238. else
  239. begin
  240. end
  241. end;
  242.  
  243. Procedure Borrar_Registro_Pedidos(var ArchPed:TArchPed; RegAux3:TRegPed; var ArchAux:TArchPed; Hay:boolean);
  244.  
  245.  
  246. begin
  247. if Hay then
  248. begin
  249. Assign(ArchAux,'e:\TP1\ArchAux.dat');
  250. Rewrite(ArchAux);
  251. Seek(ArchPed, 1);
  252. Leer_Esp(ArchPed, RegPed, Fin);
  253. Repeat
  254. If (NOT FIN) then
  255. begin
  256. RegAux3.NroPed:=RegPed.NroPed;
  257. RegAux3.FechaP:=RegPed.FechaP;
  258. RegAux3.Electro:=RegPed.Electro;
  259. Write(ArchAux, RegAux3);
  260. Leer_Esp(ArchPed, RegPed, Fin);
  261. end
  262. else
  263. begin
  264. end
  265. until (Fin);
  266. Close(ArchPed);
  267. Close(ArchAux);
  268. Erase(ArchPed);
  269. Assign(ArchAux,'e:\TP1\ArchAux.dat');
  270. Rename(ArchAux,'e:\TP1\Pedidos.dat');
  271. read();
  272. end
  273. else
  274. begin
  275. end;
  276. read();
  277. Writeln('');
  278. Writeln('Presione Enter para volver al menu');
  279. readln();
  280. clrscr;
  281. end;
  282.  
  283. Procedure Abrir_Archivo(var ArchPed:TArchPed);
  284. begin
  285. Assign(ArchPed, 'e:\TP1\Pedidos.dat');
  286. Reset(ArchPed);
  287. end;
  288.  
  289. Procedure Agregar_Pedido(var ArchPed:TArchPed);
  290. var
  291. AuxPed:TRegPed;
  292. electro:ST30;
  293.  
  294. NumPed:word;
  295. begin
  296. writeln('--- Pedidos de reparaciones ---');
  297. Writeln('');
  298. write('Electrodomestico a reparar: ');
  299. read(electro);
  300. writeln('');
  301. fec:=fech;
  302. seek(ArchPed, filesize(ArchPed)-1);
  303. read(ArchPed,RegPed);
  304. NumPed:=RegPed.NroPed+1;
  305. AuxPed.NroPed:=NumPed;
  306. AuxPed.fechaP:=fec;
  307. AuxPed.electro:=electro;
  308. Write(ArchPed,AuxPed);
  309. seek(ArchPed, filesize(ArchPed)-1);
  310. read(ArchPed, RegPed);
  311. NumPed:=RegPed.NroPed;
  312. fec:=RegPed.fechaP;
  313. electro:=RegPed.electro;
  314. descompone_fecha(fec,dia,mes,anio);
  315. Writeln('El pedido agregado es: ');
  316. textcolor(white);
  317. Writeln('---------------------------------------------------------------');
  318. Writeln('Nro de Pedido Fecha Electrodomestico');
  319. textcolor(6);
  320. Writeln(' ',NumPed,' ',dia,'/',mes,'/',anio,' ',electro);
  321. textcolor(white);
  322. Writeln('---------------------------------------------------------------');
  323.  
  324. Writeln('');
  325. read();
  326. Writeln('Presione Enter para volver al menu');
  327. writeln('');
  328. readln();
  329. r:=readkey;
  330. clrscr;
  331. close(ArchPed);
  332. end;
  333.  
  334.  
  335. label menu;
  336.  
  337. begin
  338.  
  339. menu:
  340. clrscr;
  341. textcolor(white);
  342. Mostrar_Menu;
  343. repeat
  344.  
  345. start:=readkey;
  346.  
  347. case start of
  348. '1':
  349. begin
  350. clrscr;
  351. Abrir_Archivo(ArchPed);
  352. Agregar_Pedido(ArchPed);
  353. Mostrar_Menu;
  354.  
  355. end;
  356.  
  357.  
  358.  
  359.  
  360. '2':
  361. begin
  362. writeln('--- Electrodomesticos a reparar ---');
  363. Abrir_Archivos(ArchPed,ArchRepu,ArchRepa);
  364. Tomar_Pedido_Mostrar(ArchPed, RegPed,Fin);
  365. Ingresar_Repuestos(VecAux,i,Fin);
  366. Verificar_Stock_Actualizar(VecAux, RegAux1, i, ArchRepu, Hay);
  367. Registrar_Reparacion(VecAux,RegAux2,i,RegPed, ArchRepa,Hay);
  368. Borrar_Registro_Pedidos(ArchPed,RegAux3,ArchAux,Hay);
  369. Mostrar_Menu;
  370. end;
  371. '3':
  372. begin
  373. writeln('Stock de repuestos');
  374. //Pendiente 2da parte.
  375. end;
  376. else
  377. begin
  378. writeln('Esc para volver al menu');
  379. end;
  380. end;
  381.  
  382. until (start='4');
  383.  
  384. end.
Add Comment
Please, Sign In to add comment