From 252e0d3506440a5f83f5829b8e20171de5910bd0 Mon Sep 17 00:00:00 2001 From: Santiago Veiga <santiagoveiga229@gmail.com> Date: Wed, 17 Aug 2022 16:34:01 -0300 Subject: [PATCH] hola --- .checkstyle | 7 + .classpath | 6 + .project | 17 ++ .settings/org.eclipse.jdt.core.prefs | 11 + .../UsuarioNoExisteException.class | Bin 0 -> 387 bytes .../UsuarioRepetidoException.class | Bin 0 -> 387 bytes bin/logica/ControladorUsuario.class | Bin 0 -> 2128 bytes bin/logica/DataUsuario.class | Bin 0 -> 1568 bytes bin/logica/Fabrica.class | Bin 0 -> 591 bytes bin/logica/IControladorUsuario.class | Bin 0 -> 456 bytes bin/logica/ManejadorUsuario.class | Bin 0 -> 1837 bytes bin/logica/Usuario.class | Bin 0 -> 1060 bytes bin/presentacion/ConsultarUsuario$1.class | Bin 0 -> 786 bytes bin/presentacion/ConsultarUsuario$2.class | Bin 0 -> 804 bytes bin/presentacion/ConsultarUsuario.class | Bin 0 -> 3353 bytes bin/presentacion/CrearUsuario$1.class | Bin 0 -> 767 bytes bin/presentacion/CrearUsuario$2.class | Bin 0 -> 780 bytes bin/presentacion/CrearUsuario.class | Bin 0 -> 5237 bytes bin/presentacion/ListaUsuarios$1.class | Bin 0 -> 899 bytes bin/presentacion/ListaUsuarios.class | Bin 0 -> 2435 bytes bin/presentacion/Principal$1.class | Bin 0 -> 838 bytes bin/presentacion/Principal$2.class | Bin 0 -> 843 bytes bin/presentacion/Principal$3.class | Bin 0 -> 820 bytes bin/presentacion/Principal$4.class | Bin 0 -> 828 bytes bin/presentacion/Principal$5.class | Bin 0 -> 863 bytes bin/presentacion/Principal.class | Bin 0 -> 3562 bytes src/excepciones/UsuarioNoExisteException.java | 15 ++ src/excepciones/UsuarioRepetidoException.java | 16 ++ src/logica/ControladorUsuario.java | 56 ++++ src/logica/DataUsuario.java | 57 ++++ src/logica/Fabrica.java | 27 ++ src/logica/IControladorUsuario.java | 35 +++ src/logica/ManejadorUsuario.java | 52 ++++ src/logica/Usuario.java | 44 ++++ src/presentacion/ConsultarUsuario.java | 158 +++++++++++ src/presentacion/CrearUsuario.java | 247 ++++++++++++++++++ src/presentacion/ListaUsuarios.java | 94 +++++++ src/presentacion/Principal.java | 135 ++++++++++ 38 files changed, 977 insertions(+) create mode 100644 .checkstyle create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 bin/excepciones/UsuarioNoExisteException.class create mode 100644 bin/excepciones/UsuarioRepetidoException.class create mode 100644 bin/logica/ControladorUsuario.class create mode 100644 bin/logica/DataUsuario.class create mode 100644 bin/logica/Fabrica.class create mode 100644 bin/logica/IControladorUsuario.class create mode 100644 bin/logica/ManejadorUsuario.class create mode 100644 bin/logica/Usuario.class create mode 100644 bin/presentacion/ConsultarUsuario$1.class create mode 100644 bin/presentacion/ConsultarUsuario$2.class create mode 100644 bin/presentacion/ConsultarUsuario.class create mode 100644 bin/presentacion/CrearUsuario$1.class create mode 100644 bin/presentacion/CrearUsuario$2.class create mode 100644 bin/presentacion/CrearUsuario.class create mode 100644 bin/presentacion/ListaUsuarios$1.class create mode 100644 bin/presentacion/ListaUsuarios.class create mode 100644 bin/presentacion/Principal$1.class create mode 100644 bin/presentacion/Principal$2.class create mode 100644 bin/presentacion/Principal$3.class create mode 100644 bin/presentacion/Principal$4.class create mode 100644 bin/presentacion/Principal$5.class create mode 100644 bin/presentacion/Principal.class create mode 100644 src/excepciones/UsuarioNoExisteException.java create mode 100644 src/excepciones/UsuarioRepetidoException.java create mode 100644 src/logica/ControladorUsuario.java create mode 100644 src/logica/DataUsuario.java create mode 100644 src/logica/Fabrica.java create mode 100644 src/logica/IControladorUsuario.java create mode 100644 src/logica/ManejadorUsuario.java create mode 100644 src/logica/Usuario.java create mode 100644 src/presentacion/ConsultarUsuario.java create mode 100644 src/presentacion/CrearUsuario.java create mode 100644 src/presentacion/ListaUsuarios.java create mode 100644 src/presentacion/Principal.java diff --git a/.checkstyle b/.checkstyle new file mode 100644 index 0000000..5783bc0 --- /dev/null +++ b/.checkstyle @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false"> + <fileset name="all" enabled="true" check-config-name="Google Checks" local="false"> + <file-match-pattern match-pattern="." include-pattern="true"/> + </fileset> +</fileset-config> diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..51a8bba --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/.project b/.project new file mode 100644 index 0000000..f55b383 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>swingDemo</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..3a21537 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/bin/excepciones/UsuarioNoExisteException.class b/bin/excepciones/UsuarioNoExisteException.class new file mode 100644 index 0000000000000000000000000000000000000000..b21d317568f7adf393fdb93e0bf3de19f6d1f7e2 GIT binary patch literal 387 zcma)1O-sW-5PcJ4qOrAF(VGWB#1AkRZ<Su8o<c9x-nVh7BXL)<8|mNjBzW)#_@l(x zD0&dV9T@h#c{}gz+xyEafHU+{M1+04DD^|h)@YYsyGGS)$9A+}=k+Lzyo^%BgsnUE zsPamgdHy{hB<F0{4+-0c#gAa(Yc})2(UcHh*c+W;39B6}BO&w(HhSFL&vbpIW|b!N z3tOscD%Jsik+HvJM>r_{6L26wT<aOO{mMbeCbp?deaXRZ_pg7RhL_j_N!)NqN-|4N s1q~5N0m<>nGghAD79o?KwQN_E>sS-K^Ql4yT|uH3zSr*B5ENna16g}s<NyEw literal 0 HcmV?d00001 diff --git a/bin/excepciones/UsuarioRepetidoException.class b/bin/excepciones/UsuarioRepetidoException.class new file mode 100644 index 0000000000000000000000000000000000000000..09e8ff121cf8c1867af82e29cdd9689f2766b109 GIT binary patch literal 387 zcma)1O-sW-5Pg%zq{h~2MQ<Ji5kJ6Oyj6M;Jp~U|d*7x*U5UFT*@%D3Q^A8jz#k>f zM$tnN+<{@=o451czJI*F0XRcHMnKr-=bY!cwuY<puBuh3?G4Y_>8ZW+BPXL6Az|x5 zJ*l)%W|sa82+_GV+6@WYhuN=S<VtO3gQGDays%SF(86j5D~JfaOdGzgA17Sis!73w zer9u3jK$jHZ!&cEx*{B8{|PvdAXVe(w=Lx$BqLjwIbUh-xBJ&WPyI{mfh4X!Bqf=p t$AX3kq=4x7WP$dJ+yW%hlZNezavf`ecfM5Upeso9!uOh88-fCCegb<<Ukd;L literal 0 HcmV?d00001 diff --git a/bin/logica/ControladorUsuario.class b/bin/logica/ControladorUsuario.class new file mode 100644 index 0000000000000000000000000000000000000000..9d931845fe46779b820c3fc4f5b6fe3cb37843f2 GIT binary patch literal 2128 zcma)7T~`}L7=DIqSQ-K?fsj&KNReWIgp`k>B^7J~C;~xCL9y1lWT&_oc5{+VkKX%7 zywXd(fgU-wcN~xZz#mibnaytC5Io0=o!ObZ^S;l=yOY2E`TaG38SLq35$G#9dsflN z<{jIuI3>e$DqGc>QL!8yn!vSv<E4=;8TMXwV|QN`T^+3gH~d2@&8GxfA6T~K&I^Q6 zquT;n-Z5naA+$%KqfOxInq|vE?O<0{o*26&DG*z8ibiRhMb+Bh)ZA~aszCqRe*(-A zUPbO%RkvaUpat%y*3K|*x)sab%l)4ng*CGDeNmQO%dx9EdIW~0S{J#N)vPbeV_BB2 zWjc+}2zqf{M?xUsLtQs)xqnW{DEe?ipnZ=A?W$|oMUw7MjRw>%#^+SZn^D}tfIz3S z>q=Xm5gfjRU?Y_eGN&U+JQsy{RI^H^th8Z>XqHOJTHWbn1cMk>_S_MOUzUDbMZ6nD z3ZpdGD3_&e3S=$|ZPMB=nrp+jKzH&7BPpptGH}jxRPIa^6UYj*xlY|PfgTEUkpPwH z#;}el>f(#-Gmc;qGm1i&5^pw&_wYUqHB8eFVC_^Oc%YK<T-d4sn+gfE7-bGci^D;U zA4+hz$t~vK@7IFggX97oo32s(Zrv#RE#3K2R#xm6P6JWuQUQHpi-v0ixpXXD-i-zJ zAwK}w=tdnMkxz39rO!$fpD2;9un`N+!ES}$<s{akSXaBMJs*~3sl?`1`x{Yws`g{t z&r7pbGFD7!v-J%#f@RFKVUq$UZ6_%`2oWq|xSqy`&CfTH8hsiFbDoeg>5C|~u%moA ziwOv~;i<r2A;@h9ty(?TH%zb9sufOMjT*sunr70Jc;koj#Rc?Qz4K`u{S_-Zp6Pf_ zI-5?dQk2V<x|R~nx7&p36Wj(bH$GwBqZ(&kYaFj|HO*OY4v!rn@*7`T5ak%*40JHK zlOwq21#xwiEA|e$7!l*UO4seB`jhEfxs!i|_?*_KWe(9l7w!w6AbE`Lons8{#BLwq z9qy0B#yA`zeT2Jjjxo72p3WR$n$cQc_z?FLkdOytfLOs|VHWFPp%{9Qr4>0O@CesE zaP#%DJ~#rveav})^NgGGsO0g0Zz1NH#|L~go}9%3KIG0rR%nNKi>!`bosA@zI)9Ge zqQ~zShH4C5AiwqWIN234CrBJ)d54rf=CjJDaD>l(J;vf0Uq+6^9tV7%ylHUjWkR5z zNpDi{Tf{$rAtXIcWA#!EP75A>_752;{4G3j&%+-&!#~u(zlH54{BJ3x@@Iqi*9hwK z_4EmH>DPZ?xe%HS|BR7zJUlh0W#VDQsZS#*HLR*Z(c1hmEaKtx>z_{l&Uh4KUmoEc zpD|(r?hxY$1xt~~C>@*Ne@T`X=3TlnL0PA<MC7We>b`CG95t+Z%v4`4<10KPfo@FU xYdoiKgVg66x~0+k3=Hi0zNHX4Wr0>5!XsbQVJho~PTAt2#xAP~NRBOd@h{uO=i2}P literal 0 HcmV?d00001 diff --git a/bin/logica/DataUsuario.class b/bin/logica/DataUsuario.class new file mode 100644 index 0000000000000000000000000000000000000000..1edee88d04843638a66c4f4c1158453fcdd70fd6 GIT binary patch literal 1568 zcmZ`(Yg5xu5Ir|7eQ}|swgnWmMZh)%qJSV4Q6Azr!@viW8NQjev4#l^Q&N7H&M0+c z#vkC1a@<WLt!emjA1AwKch7F_?>|3(0a(G?C=`LTWjD;4uI=iM{^6pnw@f>Vut4fm zztlBLZ#J~U>Zwt41R_oQtlBcjXTSIH$Z46)Mnxc|pBt8C)@^}g&8W96{axK?I%Zw3 zlk0}rG@VU>P_c9@5Z<xtMgk#>NW_tdBKcpyE@uLx7)gM_N!&q3Abw#u2VM%<;$RM? zW46vojI;GHS#NnMF+M4Am+>^=JO2EV`)1QPXrEP$)_c8bxi#7~-8v>c`0jyW=d*bs zkl7y;jTBf9$Z0UkL4*~FH+r>YilsrLIF;~7Vh9l`jg0@5#`v5>l<_p-zS8(}Ng~Fd zV~*WbHi~(HaeoiD+on}FTCCNg#A6h=0Z$~JVo4x+satL1@Dl~=ud+KDm4JK`C}V}Y zn~7mnK*<*wc`mVz7c>w0`MJ@g!C2^L^JZy~%}cGqxot?~QHX(tN#q%LEiuEuHUT9L zvMZsYAdon++pU_hXL3JNeFMJ8rK3Q;A^H<SP*_$vDJ-MAlU}s5cr>204%6);Sqj?c z)DEP2jnR`1QXP!-j@jOE;;YMZkJcQq14)FDqIHa>FpXK7=qW;Fml5~zfNmV^p%=}f zY{G<P+-PNvGv7g0UFcwdJ4=>1@*Ss!O%U^>%dK|(J#J!htK<qYZk>vI;!3$L($tHr z(au&w>NiY(p@RZ0BjSQneQ6Kfq)qw<IM4c>^MTGZX#vhfzw=C>Gd0?CKJnV4U88)W zUSZ(}v<{Zj&#tgW*9vXvm)-L#K5x--g<wwJ(h36{zt0<AvEIIas-fTK<mdUY8Rt zx=0#pE<>(sb)$a7Q(xiNDTr&<&$UDz%eQdxoYGIlFIo^+(a*I?Tx+**@dR+k-?**b F`wJH708an_ literal 0 HcmV?d00001 diff --git a/bin/logica/Fabrica.class b/bin/logica/Fabrica.class new file mode 100644 index 0000000000000000000000000000000000000000..f03ef7c2660ad481b52af7a1353b5bc9da44fa10 GIT binary patch literal 591 zcmZvY%S*#R5XQf4(xyq%r?n3i!CULWf_kfXDHepPhibv&CWg8-W+hGiyL=o97Q71n zQQ~YG@OjzUnf>NB-_HBT%PW9=Y#2x}6nr@rF7NcY6H+vwGn6L$o_Bm6j5}w}#B(DC zQv}n92d?1sJowquWyl<eKtzWOTB|)`(0lUAv!Eeo!$6jyI1qt%I=gke@SHoo$50ta zm-{0g3Y8~CJ-QZChTPbTj+gV4veo`Q&;*rjq>-`cmSe~dBktau@Vf+5Q-q!jqEPz$ zN`@EH8BLN5n_sYh-n#}G49(<wfBP-e)ii4;XQAu$h5Cq{Y;H#_4O`?#qxF(V*`u3= zl-dDROv?5sGK%T#Ijl#zq+ru&Q3UePQJ@o4i$#<vgoz?b3E(JJ0@Wv!-;iH`UCy!c zj56g9q}5_xAvRH_?h18QW2Tx=jTKD6R#8ikyM$EZvJ2D+)>N3KtxQ~Re6y5IEHSLb Gs`XE9yl`;< literal 0 HcmV?d00001 diff --git a/bin/logica/IControladorUsuario.class b/bin/logica/IControladorUsuario.class new file mode 100644 index 0000000000000000000000000000000000000000..94beba85207a459a09d9ca7376ed209fe992a705 GIT binary patch literal 456 zcma)&y-or_6ot<PWE2$9Mq_QU+qjL5p%hI>2qqG3tj6WK8M2unvjg$jEPMbT%6Lge z*<uT;x#!E7`*Xg&KRy9m<5ZzVxF}s=a-B_XoekcVdg1(2wbtG^g$`l3)Ek|Z+7{Wv z>yq;z$a7(;;PtPOaFa}TzIpJ*7Nh@=^qJ7Rd(U|ljI))(0pXIjIv34V7FT)X6$i6$ ze^$a^!+v7lTyzkUh8@yrJa4Rnj?R(7QS+3U^q0f9Hl<&1i2o|WS(3gqb(ACKZtZiv vHzgC!8^XNW=F=q*+LAudmTdRX6|F>d<lPt2L%&82g$!_9CsGf^-@?fcNiKmV literal 0 HcmV?d00001 diff --git a/bin/logica/ManejadorUsuario.class b/bin/logica/ManejadorUsuario.class new file mode 100644 index 0000000000000000000000000000000000000000..8b04b215f1604fdb03fcb253d3f726041db99aad GIT binary patch literal 1837 zcmZ`(%TgOh6g{m617eVQNFd^1Y;3S3gh^~doJb+IWE|rNoJ2Nxtr}@c9x|Sxq#0Lv zpP$Gwt8AU8%W;LuE>-!Ctn&%6PtUXv2uG@t=63fz=iGDq&fow2eh6R<4-CWvW*o0= zH|6TKbgg~a@;VQ?f$Z3xfrP;LzI-fK9qG1L@9phdO<y1tMEl*^mcW^Mcp&g?hX4m< zfsuyYcBLP5EP-n$cPmjCqBZ=E?Y7HxO|Ci18w$a8yS{XrwiKA{9T-%{bHkOUW4pG$ zArQ|Ob_EhOuVsyZs!WU^rPSH3wG%wrvpV<Xo<l{Gb+0L%UDl^!y*N|}VN!@AV`37f zfoXw>er0!L_aUoGA&ZQ{pEZ%h5DEQ<c2{7uZTVU=DbD5#|0_Dh<cz>r!<Wr(h^Pgm zWUHke5SYsM(tD;9c2iiuB?A`)(kBfwv4|y>MFlmh6*zLMWx2lHk}VQZNWXpB@KNMZ zG*F<3etlG8Vi_eGc@VJ0*Yn2`qrR6<uN+6$hX}yi!D};Ef<UZkEBj9gVoBbfZ@E_Q z-U(bfPOo(zdD=5Y6|!dH9jud-<qIqwPt$^4t5Nk!!?1f(`NG$OauxXdCd#M?7<PB_ z(SiRYyk%dhoedKo;)cM`W9bAIA#y#Z!#SvVj>Ac@J-0lHDsCC5u^D~0`}-y~ahnXj zceB%xWXLKleT$A<O$6Nzd8VViK^6hwv5wbf4znL>nwdRus!S%bDS~r6eR3|I9Q0;G zdpbZ_88mF8Y~ZeeI$sYBFX%L_+qN3F?BLj5QN`f`#~{vEP>f#=5+fswhLKW(%jY2s zV-zNL#uzQ~Uwx9|XQY4RLk#2mRf*u!M7W|>IlDTgN`i2=_zY9U7s!733^TtX*UwIe z5+;$r6wV+MqNr?z_(mvV1ZVN4#@i&i`ec4W`Y(*VfFR%;<uHEA^?0Z#!knS99OKy| zW#_^ZVw_;}IIkhUV3KlSa``u0*e?EpTxt0^F30itpvXD8bdF&2A>er}JQB%#tl$bU zlk{p8Z&9eg+qkM(s*IKNv?3t>wHW@yf|7jP#Dx%fIy$M#XHJO68-jOnUE}>j!;;Ld zD!k`-PvATD<!KasAW$dAO@Zyw;U8GoiLWPqz{E;6QOYK+lDF|~LNGY|{^h?bN<$*F zZHZk6me{<@<Sfv<B5Pe{-%I>m!8-qMurk%?wTNA7R3|^e9cr7$MQq_ND_F!FK1Q7` u<%zV79kSeGrfP0<{u4f_mgEpmzhsM(284mCflm#5#v3rk{Ra1Axc>^kK8X1M literal 0 HcmV?d00001 diff --git a/bin/logica/Usuario.class b/bin/logica/Usuario.class new file mode 100644 index 0000000000000000000000000000000000000000..e7dfde5820d507fdb11dc58b40f65bed84358462 GIT binary patch literal 1060 zcma)3O>fgc6r8owq)trId=(0mQfRBheB{CffhwU&NJvpR6ms9#R@ln5tHkN=0*MHT z13!Qtg_vDiO-Wpd%kI3lZ)V?{_xsP!UjSa=r~*r%9wigy%faW_TuxO|K}lfiTwcjR zB;(28<M=%EQ-N}vT#TooKx?>sJWHo4p1cv*l$T)?sUQ((_+c=Q<cA=PQx(X7)VC^D z>9N4;-a7YxGX0T2=_ColDs0?w;h-*H_xd9T?A65v${Mv?R5H|Yv57K!8LBuuonMT@ z=_fgkO!tW|qY)?7ah@!tU(}3B!+)*dTp|{*<RuSZ2{@B5J<V<C^!n?q3)EQh?%InM zqmxxToY_*PTi}SEw#J$pGK|(_s%Oc3>WA-@9?Q+Q_fqc$`!vJmifvfh8zM_PV{ZDw zyTS?wRh~6Q5#LL^JKhht-m?W7-tz^T-irm=-wdnEbDLT~os|u8w}_f(qs2VnWqjPl zJw{Z*4*wAb-6ygPdO&0|`w+YN&ja4NYQy`E##aIh`m2oEHPUWYkV^|ZDkL{o$vcJQ zy+U$(mAqR>er$}@h8?p{JyO}2wX~>evimgZiBZ_js;+G*=e7vG>m{veHCMF`sdaRV emNr(~_q15+#_F=Z`qc7n(bB8YS_ftahkpUR9-`L( literal 0 HcmV?d00001 diff --git a/bin/presentacion/ConsultarUsuario$1.class b/bin/presentacion/ConsultarUsuario$1.class new file mode 100644 index 0000000000000000000000000000000000000000..a8bf4c65affe58021b24949afc0893178fdd1509 GIT binary patch literal 786 zcmah{+invv5Is&pmMjYi1;VYRwB#X8C6-FO6(N<VNEO?H1mxZEn$*?CMz*(n7ZMkV z2R?w0LX6#T5kg@lTlVbu%sFS~+xIVD0X)PYL4#rat(8t{&xJBN9~<rJ%5(eL)!ZsG z*h$c0=$-IWo>yGY^5@eNDSU!9!&;2;cRrV=gpltEPZ))AUTSF>+WuI%!2_yMEG@E2 zsgIOa{xQSm@ISd*6Nc8<l(GYciy0D}Ptim-LkB&E<}f653#H{zJ)cVZicc%auu>So zs|jfe_eHQ32r_IeFFDvDf?XcPy^!{ev2$6HsA2I>{rka--K|NA8@QF=Ci%2feTLiU z6P%crPiiNAS%2o{9|al7SY1|=A$@6TE96rZBwzcxnfC)<lCrNwWt`HpL+OuA8JydU zdMYzhg69YH&|6dS()^qQ(!-D)XzJ^@;?7BjyX1e9);X|VFSLP%szIxRl%f~nh&5s) z9c_O^Hu{W9?_<to+S`-^Ji`j@Sv;q>f~#~R;^;3B_UL`Y9DP8x{R!891ElfCA(cIf kApNt%1xTQ=iZz01;tqi}uug=57Byu9_vjQz1`7230OVi52><{9 literal 0 HcmV?d00001 diff --git a/bin/presentacion/ConsultarUsuario$2.class b/bin/presentacion/ConsultarUsuario$2.class new file mode 100644 index 0000000000000000000000000000000000000000..11ba1413a56c58f8a735c0cfda33398c048d5e01 GIT binary patch literal 804 zcmah{+iDa+5Iwy!?qtU?J4TJS#F)71WCcfpZxKP32!Zhe#(nUux3}GNm~_i@?|S(w z!5cpK0e+NN-L42CYeV0Ps#E7w)%PD?zX7<5B0-B`<5eTA)Q$^fbU85EPHV@T=XS~) zWqLaaVut*P&v;pLJt?1zj-+r2+6?Q#%3r%u&IqA=ARJ*-$~viK!_anz%J%M1j%s0& zU2?srv~u?uwu=AwZVwsaff>sV7*1tKu#_S~H$w+GLsWQ&Zl$z*JUt%C=75iC$*@ux z!RsMu^8dLp_5>L=7pLs)5Wy}F;-1RprD=}km_!xTKlShVTI_BQQ(VBM1Q)4J3)N@1 zjFe%C3n49)%g3!}xPlFa)Jiv0Rs{)h@xp6kq-JeVY6^R1rj3vfl~;c5@1EZFv`NvP z7PYZTPaa8kXvV&PH-fC%OqAf|J_WkQ)O>7yj|0hK$o4h0cTjU{rNvchLqz)oSf2ZC z&}_A6caW0xWSF#8u%!K4ACdJxWBGmXIZbDqe1I8N=*+@9#TlHX9}&mu9HF9kkD2#B zAp3&z{)#?f?GMf}aRA;>{<rAjUBFxY6*I@9XyUp_h!M8Pw}ory(H&E{uj3}YJYUa- F)=z^WzRLgr literal 0 HcmV?d00001 diff --git a/bin/presentacion/ConsultarUsuario.class b/bin/presentacion/ConsultarUsuario.class new file mode 100644 index 0000000000000000000000000000000000000000..0dcd6b8d04c9f30c4384a23815468d002a832cef GIT binary patch literal 3353 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 D9G_f4 literal 0 HcmV?d00001 diff --git a/bin/presentacion/CrearUsuario$1.class b/bin/presentacion/CrearUsuario$1.class new file mode 100644 index 0000000000000000000000000000000000000000..15d031c3bf34e1d7e9d3336fa672cfd5f4e92881 GIT binary patch literal 767 zcmaJ<+iuf95Iviim>5IS0)f&y<RMKZOeNlmkgBLimCQw4^1iVLcPnQXt)22E2z~>J zi^KyTz(*lww?XuQ)Y7hY$1`WnIkUfh|M&^uA^IU20;}&VRitZ~DWj8-C28MOGijCS z?}Z2ix+n5fCZ*Ix@_ceaSskJ!u<oPseVx!LS0@Kq&Go6OYSLr{TJ^E2`VSaCUD#ls z(;g|U>c;{bgA4L@#sa~}<kW`1)fgczM`)rGqm8aWbKnv>snYapHl2`tEhi-jET<-u z<(Rd&`#cypV$6SWyZ#;%>qsx?1=+X8PAM1I9Hjr%eCYJ=?~Ehd#+?u=0xJs@$5=&A zU^|=UFR5U&teKmA=HIz?fwTqNw{}ref#{W)*^Hhjr+4Z6^zJ*dtm9B;rKyxIo>F~m za%b6HFQznw%4BjhGMZ_WGB<w*&te4PBh7;xm9na+!WJ9f<aG(6+jai)3u^FcBjV^4 z|DGB?5)F61A|8Inwa-3hiT4)g03Wc-d+g5<uHy#Z1a6`?M>ybmk2(B;c=sD_{R4>n pkB{8;lLzUYCC)({jWw(@OcNUn+Q23g1_GYQHtzAsk#rRJ`vbvcxAXu2 literal 0 HcmV?d00001 diff --git a/bin/presentacion/CrearUsuario$2.class b/bin/presentacion/CrearUsuario$2.class new file mode 100644 index 0000000000000000000000000000000000000000..931245bffcb7eb94804fe84f880e1e157e51b32c GIT binary patch literal 780 zcmaJ<U2oGc6g_T2vxcx{0|sMXe3UKgB!VX1hLBJ-q)FjJV)TJGH#ME7%tp35e$fOx zB5i<p;0N%d5Z9py9_S)Dwy*9v_ndqE<L9^U03INV&|p}4YlIcb@ltA)_l)4?l^t^< zb!R(5$dDfLW1d%Bjq>M%Ls7a2O@@^^%HO$M91}W!Tsp!R(mJ7pVQ9JoX*>6cznEHJ zhteKOCEX*2)$E+S%|1ie(?ih$!=(ffW?}?rCukvM2r{40E~FCA#zzBT_W7U^4D*F9 zdDSN`{yqtYUKr`0UaqrE!rHtx^g@_7+8l`?!&+AS*YmFTzq8qoaUC}zEHW%kb(~-c zF~bZmOJS)!9<!2Q6>AK!6|OI>tfhz9YwwAXi{<mm66~cOn^HWH-tpYO^SkHel9OFk zR@zE6dMez39{Q%O*LEsBk|odgdRjT7D?ZeJMo)Gal08ME>{Z-aVR4gMAJDo0mZp9J z^oAO=T8Jrnv3^mFIuduc&X9D!VD?j;Ge`d><p3v`r+-qPV_e1+x-neE!i1q9yyr~2 zr%1lyn%{!YSpLg1OB#UpRR06o_*nBT{Kic92u)gV5o3Vcl-s}^bZ8H$)pxN$C$HD5 Gq3;)i`Lvq= literal 0 HcmV?d00001 diff --git a/bin/presentacion/CrearUsuario.class b/bin/presentacion/CrearUsuario.class new file mode 100644 index 0000000000000000000000000000000000000000..9c3f527dcf813ebbc99e707c74aa7d9caff31ce3 GIT binary patch literal 5237 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 literal 0 HcmV?d00001 diff --git a/bin/presentacion/ListaUsuarios$1.class b/bin/presentacion/ListaUsuarios$1.class new file mode 100644 index 0000000000000000000000000000000000000000..15292aecc6b54a6016a2ce6e90a25a45d9de91df GIT binary patch literal 899 zcmaJ<ZEq4m5Pp_JuAC=et5qv~QBi?v&nEf_V^T>qv}jFQ`QW$ZSlexmTXVb6{w))& z#t;4gf0S`{A<>wYOLlK|GV{zc&&;piKYjvuiVYt*hU%wGXptHoOO-}lsSSUxM?8~C z*EW6R87jwo%%g;-htXdDSj5IhfnnKs`H6|dn9`%I*bsot7pce?3g$@a+7l|!y|_Y) z;-1S?nimYK^;v<99z(vZ2BHXtD<OQ$1@KS~QACBotJ{EbSEl0aXxJCo0q-Y*VZN(k zp7f|4`<^=UmKwv#jC!?AqE_avr*|UzsIs9LIF9GGy=^6EHF^PVV#&uXhNX*}4sjb* zhB+R`LOY3`&2GJGYo12>MA8U$+G^NWFV$%)zzWuUtTJ3bHz33vD@`dALp2s#NzyT5 zs4c~NA!@kK5NKg~QcEXQzW%{#$Vj!Ss~G)1+)0;|wy#E6EMCcp!vC(!hGjy^ZKrXf zH1T~S%#j+{DLr!XCF)SdJnFPnYBH7Zfy$=qM)EO)os_nxop7y%#v0AqqjL$YQn4ea zz0J`nA|UT&x5YW<37YF)5jMY}^x4H+rMo~ez-!FY9XdO}0<O`E6vN^aVUO}H=0fue z!tc0ohGlDcXSn+pszfw^4wc;@xLpUiI7ypA5&$0HA%S|RQ)~_mH0hrwx!3WSEKAuE GqVEsXV%j7C literal 0 HcmV?d00001 diff --git a/bin/presentacion/ListaUsuarios.class b/bin/presentacion/ListaUsuarios.class new file mode 100644 index 0000000000000000000000000000000000000000..a3e10ea38806cccd708171621adcfb2d1a0caa50 GIT binary patch literal 2435 zcmai0Yf}?f7=D(3iD6X;f>tS_#hOGhYO7VTR*0b31T9E3YON<>jjPKp?rs$AMSHPV z|3QC1+i!KIglU=S59p8T^m%u)44DB-X3p-O_x_yceGmWq``6z9-o?u}+BEE1a1GC} zeN{CbJ6AA0U(I@T<(iHcM?2;B)g!f-^B$XaEq7_s_6^ro)`Y9(4GqbvWBaaS&3dke z{(|My%&N*w=EGez=eSK@BO1D@&V0oga~31_8g>*~oadVgRNg#e)@<e1T?QFmU+YX1 z?z~z}dE_i@JFN;63QN$iz16y)DuyKiD!!dJTvsvi-d2^dy6-zSbvB(bZPP!iVNW`W zwO(nNl7{xYGiM|bLywMa*sdX#&XhJoL!XWgY)bNNr;azUOM~ti{<PtlPgTWYb?xaJ znUcu+b-XF^t&~p^SM#nZ8Y0@GV=xjG)uK5c8jEP3j<+yG@3cB^+*NhU&s&aXTwX9- z<?~1-!ekiXZ5;>1O(%6lN!%xpAx1nfkCw_EtlNW4?8N&)9fvTiAwi3)rZ4&SrUSHc zmLeZ!e3!Hs3Ek&(9KlgSOXV@AZqIod;^|5Lh4OcFlI}PQtT8+pLegDPHeL3mGoerQ z*w2YXnYQ7M#PJ@(2}5!s7<1e?!!4*MPTf!91WpOkr!{migakN)vvItyA+>6;>Pp84 zI2R@s+H2U|EJHkpdqrid8pCEvaf~(HtnxmfO#<hMRYa}9X`{w&amjKoiBU{QKErb6 z7j<+(m%U3mK9tkxBP16c*L*6)S)&%oJ<swJC^G*k$Mx??{+D%J!AIndnw!&*S(70< zW5Ka$F|r2y%a!{^)erKWX#%yHZ`4XjOru9~D(Q$Lk-&A*I!{N28^;X|JuM9wGCzS^ zfs!;w5@k$?{U<uMU~3$TMBR8|3>{744yu9#D`4AftQwG}jJrB&xTm3;HIG(>urh)S zo<F(01_9#{lg_nj&_x3GiQo(=K_A-+<jqulzGApn!{$mAoT{=)oM!Uf+-&#nnWSd_ z>yqOknAJMDT2*dMMN^Cuk!cOC#VqQ%=IAPN3|O7;@hA?O@7j1G>UfMr_9B}hViX5r zI&(7`HEYLO5)biIQ2kW8<>q=Mkdyvg#}{}Owrh}yhJg^nh!_zs0%<^<FEtDqi&bMm z=D*?Pn#oK#<BM_-<01;@NXNVs$72b?M;_M$fU~o&75OI%5&9?p*LuUjzGa5D)Ptg0 zXdYxjRjY>Q4IR;N{Pk38iFqjkfoUd59k*&sm@?W@Ew|rcIcARQNt<NMTgvkc4|~}P zG2Wi-Xp_0lw>If3?rsj=ll*4y2k-0`K4X+^Ll@U>K-*8NHtznGT}CQ<a0$KH_6Byy zvRjq`S@z1ZKbuN7kj-`tbPaTChq~q(IGk<Z*a}XRW3gqNY+xk2g3)p+zl`xET*&@` z3$X?!MM>UMg$AamF<oB9)g{a}_h(br!u@hNb#oaXFX1+|Z?E7^nK@M&Fq(?DQzjK( z1*JUTI)xst2UvQB#U5gD!`wNHoyhUxI)Z&TiZqVlIDg|fMLM3w4UDk8&%xy^e1-|U z#0C6}B7UVei{AP|Ffb3BUxWn?LDl$M!1fR_ydZ=E`M?SumYHhrpJ4Yc<4J)Zvj-da z>=(2bUr`&pVEgf$8A`q>K7kTpzsCLR%<<Nmm;=q2-8`<Z@HMT!p|&2xl${rR`<6TW zAL&+{KD!e54&Mi2U_YM{u0t~ToiA-cM9CbysiiVG<Tm^etUux>KIJ~W!zcg#1Ar-Y Awg3PC literal 0 HcmV?d00001 diff --git a/bin/presentacion/Principal$1.class b/bin/presentacion/Principal$1.class new file mode 100644 index 0000000000000000000000000000000000000000..edd5656548b2b44e6d9455c31bbcc48e386ce665 GIT binary patch literal 838 zcmZ`&TTc@~7(LT2-MTEd7O>!jq7_=IttP(J_(CAj6eX54QJ<#U2@Gy$o87JO;Q#TN z7ciRm1N>3Ov)iU<BAd+p%=y0WoY`N$zyAdA98DV;fzmKkkutILbYPl?p*Ef#O26{V zh9$6gDnHAnFU@iDZSPchv5lNS;d=Mo$Qar4l|b%=HadPOkge9b0@iNOR}Qk6bzvhf zu+Y{<y%`O9Dm)tBD6|7l`du07WIfrm;u9SSthaB<tHlW6$k-?dto|S5U<tEHx8h<I zw*~Uj^Hda7o(eRoH!!zq?WC;pW^|@m?(6+f4phs*8t&LwpA`M?sf)X~C*VXX?&?UV zGFa6QwXTB=Y}zOb6tAV)JNMKurphiJq=F17cHE)zpN>N5B@!}nKRBZ)H{~cGh+9cB z9osTxr7m+R*?}BRv~)VbDD>36PW+jldfP~Hq9J?6^Mi=R9;o;v=(~7~Cp2y#wV|}t zkAFq!#LV@$l^E;3GDd~FzKkLjp$yu=Hp3^CVWZVt-QujtQE;5uxq@?%9=q&w>E<Tp zICsYY%wvHozP9P*FC<Io)_!2={S}Js`Zp|FmneNjzFoh>{fqSKB8pTxOCr$dB!>zq z9+7AZ%h*N<wKPzf7?Mo_<%xMnq#(v3dW*Adp7Vd`*x0ZLu5y{-<sFU|A5t9+&Kv@h HlKA}rnY6ar literal 0 HcmV?d00001 diff --git a/bin/presentacion/Principal$2.class b/bin/presentacion/Principal$2.class new file mode 100644 index 0000000000000000000000000000000000000000..bdf396d5e05f2d3e0c285d181b78b3a03c6d8abb GIT binary patch literal 843 zcmaJ<U2oGc6g_T2vj)?a0cGqPD3Es0pozC4Bs6UjD8K}$4?G~bso6ZGNo8jn;$I=b zKs@jR_)&;!Q-P3LBH6L8?>+aNd+(2*-@XHQfL?$K!_q`cBlA+Es>tJgt@2b&MAqI8 z;4?Ij#EFPAksrh_hDS0j15_E-oK>8bu{@#B_;FfNaH32pbEz4s<)Jd|`vjiMM(>l) zLzS!Y5yMI}zD@OO%ltbySIM}UP89vU1qG#R|eIy4fM%jd`Aq13O%Fp~_6Ns)?d zAhfdgsnNHT7?$VcYHt&zhHyIerG8iFu^cgMM9EC4yH<9;GYGMS<p9?hTC;_6tYDR4 zL8PfPt|Yzra$T<Xu{l*#?x%ZNjAcK>IyM7rkSxpO-&c<7xWNz_Sq_v@PQ4$!vAovN z=D20c6pWOa6ov}p3w=OMS^b|TLVHyl>s0P3Tg&>Nf#})vRHNNI%?d*dpULvD7;)US zNkZF9B{KDag7}l1#$YEC#z=!rYMw{y99Xkydq~4qp;bdj*7I%@E6x&jw?2b+zo7on z`CO#EN<P3_EYi;1Im9JgrW?Z*w5A9zDc)kXx}U(m;;MIswdwH;H~*s5i3uPm>yV;T khuZobIYlK5+{PWk^$?M71s!zh?^CC@aF0%wwdF+LFMip>;Q#;t literal 0 HcmV?d00001 diff --git a/bin/presentacion/Principal$3.class b/bin/presentacion/Principal$3.class new file mode 100644 index 0000000000000000000000000000000000000000..80299e95a153815e6bd6338517503d5f5d752624 GIT binary patch literal 820 zcmaJ<U2oGc6g_T3vj($v1Ij+x#==NDiGT)AMM$U&2`R8ius-nSre^b&Ig_0ZiGPK} zmw4a@@S_mdp#mngM6zRFpL^~-_ud~rzkLVr0NXw)3=3yQTB!?>s$9qWM(I?Yi7edl z;W0Fi#kq(xp%3G|!LdvWA2o*6(kk8+u{<Z&_(@ujbE0e^wKNR1;z-%>9+4-L*}H^! zq_ip?Gb~5bK<z$**UN{p4u&fnK4t<`(cq|~$xw|PpphsoUye=((!3UfOft+Tc`CBL zFv{J>M$e_hurwuBxI-y5M5$w6nzy+*l|zQLD48gA*U9d-`vDfP<YSScHCZUfGFBL7 zM4C!#!}|;mr^~&VThB;g4(y0@<lO)_vF>AyVevwse?c4@xWy1yS@e}vWi7nujVltP zvaI}13c0<?M<$ielq=!vpE<be^iyeeb(-Z?>BASYILe0{ZP$Xp^-zgSy(cIBTvPXZ znXpz`tW(dbv@U@)o33><a}`>31Z2HjPGF_91fA_q;GHj+{ZL}&Xs;0lIKe#aygUcE zifeRZxQ^DC;VJn$PTu(l{uMX8&shD-5tMJ5V&x@I>o<1H<9Ig_5>pkoiKBuo+@Zfm OEsfBjlgra(LEkSF?!u%1 literal 0 HcmV?d00001 diff --git a/bin/presentacion/Principal$4.class b/bin/presentacion/Principal$4.class new file mode 100644 index 0000000000000000000000000000000000000000..7935acec4f9db52486f8d058e6a086d4c1b7126c GIT binary patch literal 828 zcmaJ<U2oGc6g_T3vj($vAC$2VHXwtvlgNbnf{Kt(84^-}NkAWXb5pZ<%A6^7H^jd} zVt{zy2k@g1*P#LpwM24a-<*4V&$;)<&u`xWbg|>3!mx5uNF%issmgV{Unrfb6On~o zA09*VNSul|6Z#;2IXsf7^-*KkD5K)c#`2U><HxC`<U|=OwJaEF_E4E{m&lXp>^;If zR9e|b3~SLWP<z1O_4ARegW(E?kGTL<G&t&LGE^f6Xe3I@7vtlhEMALYCK(o!JQdkM z6v~|^LC=-MusY+euuCO1M5$w67Vq-nSdJJrqhzYoJtw=@9t2pys*mdot?5EJ*09bn zC(=|J6W(WdFk9}$+WNUR<IIZUjTw`cycggGwtQ@o{}(R%7szoFw-^E=?LZk-dg4WI zomq_RS^u9TN_&-$i&Q>U&dT{e^Kj4kKo;%kG|P?B2hXKF%tst;*NVXPQi)7`pd|iG z(-ibGVT?4`qTW?$T>@)1T?=XUDzxedD0;b^#7Y?nIy>j!oiCXGSYj6FT_X%&u}E)T z?gK1gnNAE>(V8$kp?t^5JD<S6;+ppv8-F>1^4}TV^}gh3{l-ps9Pe#}#8kyLaa3>z Scj@a<Ya?`M=jwD-(DMtmnZ{-S literal 0 HcmV?d00001 diff --git a/bin/presentacion/Principal$5.class b/bin/presentacion/Principal$5.class new file mode 100644 index 0000000000000000000000000000000000000000..5685dd74bb68433099dba78d0cace2ef60cf0d10 GIT binary patch literal 863 zcmaJ<U279T6g`uy*=8M+ST)vu*s7~;Qtb*_Um}8(3PP;Kk39G`nT+X_?QGfER1kbn zf03Y7eDDYOqr^LFR04?$Gdpv+=gd9l-XA}|eFty{8$L=53x}Dq%H%@o)Wo})Hc}so zB;54jF*NqYk%$vvhVhgBzLL3*3d2ef6|eJH9T7BsAaeqDwat}L8AB!C(>A<C<lX7) z9m=_<jn3~gEJd@DT0I7DD;=mR7*28cm<v!woui5dLpgE@^{zH*XLQh4*>llP6vKQs zl_KehOuPFy=(&;@7H7N_Zc<5gQRvuJ*{d`=Py>e5s5@2awv*jy^#Uwl(Z>ab=5(PP zOIT)@6H+Q`!`lpZXUm<e&Dkkl*b(VSZ70A*toc|a2@@|(WN}<_#?++9h9dieb<isu zA+9n6R^>fybzzhjy>t#T@@)BkItlhH9c5BI)Xv}9-yzv>=8$jOMkcA%X82g;d+C7V zhASg*4b~#jZwSO685)hPL|CgV)~KOnS|`974cAv1$P%q80*an2#<NsJg7*4n@b(wf zJ{CErX|GTY@D}s5^Wq%f49?Px;T)P{hNpygoXz$p@UJ+3jFs`pJI3XIY&EI`ct<b4 oC-jGcwfP%4W+e_>!*${<Bcj|AT4>YXqwcTcCY@Z>t|t0^0SlSU#sB~S literal 0 HcmV?d00001 diff --git a/bin/presentacion/Principal.class b/bin/presentacion/Principal.class new file mode 100644 index 0000000000000000000000000000000000000000..f6bdbd855c43b181848381294b28b31179e21e5e GIT binary patch literal 3562 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 VXU5%J<##7oh;s0|8?N_)^?y_~r%wO? literal 0 HcmV?d00001 diff --git a/src/excepciones/UsuarioNoExisteException.java b/src/excepciones/UsuarioNoExisteException.java new file mode 100644 index 0000000..f972d3e --- /dev/null +++ b/src/excepciones/UsuarioNoExisteException.java @@ -0,0 +1,15 @@ +package excepciones; + +/** + * Excepción utilizada para indicar la inexistencia de un usuario en el sistema. + * + * @author TProg2017 + * + */ +@SuppressWarnings("serial") +public class UsuarioNoExisteException extends Exception { + + public UsuarioNoExisteException(String string) { + super(string); + } +} diff --git a/src/excepciones/UsuarioRepetidoException.java b/src/excepciones/UsuarioRepetidoException.java new file mode 100644 index 0000000..5eee866 --- /dev/null +++ b/src/excepciones/UsuarioRepetidoException.java @@ -0,0 +1,16 @@ +package excepciones; + +/** + * Excepción utilizada para indicar la existencia de un usuario repetido en el sistema. + * + * @author TProg2017 + * + */ +@SuppressWarnings("serial") +public class UsuarioRepetidoException extends Exception { + + public UsuarioRepetidoException(String string) { + super(string); + } + +} diff --git a/src/logica/ControladorUsuario.java b/src/logica/ControladorUsuario.java new file mode 100644 index 0000000..0e9b280 --- /dev/null +++ b/src/logica/ControladorUsuario.java @@ -0,0 +1,56 @@ +package logica; + +import excepciones.UsuarioNoExisteException; +import excepciones.UsuarioRepetidoException; + +/** + * Controlador de usuarios. + * @author TProg2017 + * + */ +public class ControladorUsuario implements IControladorUsuario { + + public ControladorUsuario() { + } + + public void registrarUsuario(String n, String ap, String ci) throws UsuarioRepetidoException { + ManejadorUsuario mu = ManejadorUsuario.getinstance(); + Usuario u = mu.obtenerUsuario(ci); + if (u != null) + throw new UsuarioRepetidoException("El usuario " + ci + " ya esta registrado"); + + u = new Usuario(n, ap, ci); + mu.addUsuario(u); + } + + public DataUsuario verInfoUsuario(String ci) throws UsuarioNoExisteException { + ManejadorUsuario mu = ManejadorUsuario.getinstance(); + Usuario u = mu.obtenerUsuario(ci); + if (u != null) + return new DataUsuario(u.getNombre(), u.getApellido(), u.getCedulaIdentidad()); + else + throw new UsuarioNoExisteException("El usuario " + ci + " no existe"); + + } + + public DataUsuario[] getUsuarios() throws UsuarioNoExisteException { + ManejadorUsuario mu = ManejadorUsuario.getinstance(); + Usuario[] usrs = mu.getUsuarios(); + + if (usrs != null) { + DataUsuario[] du = new DataUsuario[usrs.length]; + Usuario usuario; + + // Para separar lógica de presentación, no se deben devolver los Usuario, + // sino los DataUsuario + for (int i = 0; i < usrs.length; i++) { + usuario = usrs[i]; + du[i] = new DataUsuario(usuario.getNombre(), usuario.getApellido(), usuario.getCedulaIdentidad()); + } + + return du; + } else + throw new UsuarioNoExisteException("No existen usuarios registrados"); + + } +} diff --git a/src/logica/DataUsuario.java b/src/logica/DataUsuario.java new file mode 100644 index 0000000..00c17a4 --- /dev/null +++ b/src/logica/DataUsuario.java @@ -0,0 +1,57 @@ +package logica; + +/** + * Datatype para transportar la información de un usuario entre capa lógica y de presentación. + * En Java los datatypes se definen con setters y getters, y se denominan JavaBean. + * @author TProg2017 + * + */ +public class DataUsuario { + + private String nombre; + private String apellido; + private String cedulaIdentidad; + + public DataUsuario() { + this.setNombre(new String()); + this.setApellido(new String()); + this.setCedulaIdentidad(new String()); + } + + public DataUsuario(String nombre, String apellido, String cedulaIdentidad) { + this.setNombre(nombre); + this.setApellido(apellido); + this.setCedulaIdentidad(cedulaIdentidad); + } + + public String getNombre() { + return nombre; + } + + public String getApellido() { + return apellido; + } + + public String getCedulaIdentidad() { + return cedulaIdentidad; + } + + /* Sirve para mostrar textualmente la información del usuario, por ejemplo en un ComboBox + */ + public String toString() { + return getCedulaIdentidad() + " (" + getNombre() + " " + getApellido() + ")"; + } + + private void setNombre(String nombre) { + this.nombre = nombre; + } + + private void setApellido(String apellido) { + this.apellido = apellido; + } + + private void setCedulaIdentidad(String cedulaIdentidad) { + this.cedulaIdentidad = cedulaIdentidad; + } + +} diff --git a/src/logica/Fabrica.java b/src/logica/Fabrica.java new file mode 100644 index 0000000..f2bd57d --- /dev/null +++ b/src/logica/Fabrica.java @@ -0,0 +1,27 @@ +package logica; + +/** + * Fábrica para la construcción de un controlador de usuarios (uno distinto para cada invocación). + * Se implementa en base al patrón Singleton. + * @author TProg2017 + * + */ +public class Fabrica { + + private static Fabrica instancia; + + private Fabrica() { + }; + + public static Fabrica getInstance() { + if (instancia == null) { + instancia = new Fabrica(); + } + return instancia; + } + + public IControladorUsuario getIControladorUsuario() { + return new ControladorUsuario(); + } + +} diff --git a/src/logica/IControladorUsuario.java b/src/logica/IControladorUsuario.java new file mode 100644 index 0000000..c75000b --- /dev/null +++ b/src/logica/IControladorUsuario.java @@ -0,0 +1,35 @@ +package logica; + +import excepciones.UsuarioNoExisteException; +import excepciones.UsuarioRepetidoException; + +/** + * @author TProg2017 + * + */ +public interface IControladorUsuario { + + /** + * Registra al usuario en el sistema. + * @param n Nombre del usuario. + * @param ap Apellido del usuario. + * @param ci Cédula del usuario. + * @throws UsuarioRepetidoException Si la cédula del usuario se encuentra registrada en el sistema. + */ + public abstract void registrarUsuario(String n, String ap, String ci) throws UsuarioRepetidoException; + + /** + * Retorna la información de un usuario con la cédula indicada. + * @param ci Cédula del usuario. + * @return Información del usuario. + * @throws UsuarioNoExisteException Si la cédula del usuario no está registrada en el sistema. + */ + public abstract DataUsuario verInfoUsuario(String ci) throws UsuarioNoExisteException; + + /** + * Retorna la información de todos los usuarios registrados en el sistema. + * @return Información de los usuarios del sistema. + * @throws UsuarioNoExisteException Si no existen usuarios registrados en el sistema. + */ + public abstract DataUsuario[] getUsuarios() throws UsuarioNoExisteException; +} diff --git a/src/logica/ManejadorUsuario.java b/src/logica/ManejadorUsuario.java new file mode 100644 index 0000000..59906d3 --- /dev/null +++ b/src/logica/ManejadorUsuario.java @@ -0,0 +1,52 @@ +package logica; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * Clase que conserva la colección global de los usuarios del sistema. + * Los usuarios se identifican por su cédula de identidad. + * Se implementa en base al patrón Singleton. + * @author TProg2017 + * + */ +public class ManejadorUsuario { + private Map<String, Usuario> usuariosCI; + private static ManejadorUsuario instancia = null; + + private ManejadorUsuario() { + usuariosCI = new HashMap<String, Usuario>(); + } + + public static ManejadorUsuario getinstance() { + if (instancia == null) + instancia = new ManejadorUsuario(); + return instancia; + } + + public void addUsuario(Usuario usu) { + String ci = usu.getCedulaIdentidad(); + usuariosCI.put(ci, usu); + } + + public Usuario obtenerUsuario(String ci) { + return ((Usuario) usuariosCI.get(ci)); + } + + public Usuario[] getUsuarios() { + if (usuariosCI.isEmpty()) + return null; + else { + Collection<Usuario> usrs = usuariosCI.values(); + Object[] o = usrs.toArray(); + Usuario[] usuarios = new Usuario[o.length]; + for (int i = 0; i < o.length; i++) { + usuarios[i] = (Usuario) o[i]; + } + + return usuarios; + } + } + +} diff --git a/src/logica/Usuario.java b/src/logica/Usuario.java new file mode 100644 index 0000000..5a08ffc --- /dev/null +++ b/src/logica/Usuario.java @@ -0,0 +1,44 @@ +package logica; + +/** + * Representa a un usuario en el sistema con nombre, apellido y cédula de identidad. + * @author TProg2017 + * + */ +public class Usuario { + + private String nombre; + private String apellido; + private String cedulaIdentidad; + + public Usuario(String n, String ap, String ci) { + this.nombre = n; + this.apellido = ap; + this.cedulaIdentidad = ci; + } + + public String getNombre() { + return nombre; + } + + public String getApellido() { + return apellido; + } + + public String getCedulaIdentidad() { + return cedulaIdentidad; + } + + public void setNombre(String n) { + nombre = n; + } + + public void setApellido(String ap) { + apellido = ap; + } + + public void setCedulaIdentidad(String ci) { + cedulaIdentidad = ci; + } + +} diff --git a/src/presentacion/ConsultarUsuario.java b/src/presentacion/ConsultarUsuario.java new file mode 100644 index 0000000..6b3c75f --- /dev/null +++ b/src/presentacion/ConsultarUsuario.java @@ -0,0 +1,158 @@ +package presentacion; + +import javax.swing.JInternalFrame; + +import excepciones.UsuarioNoExisteException; +import logica.DataUsuario; +import logica.IControladorUsuario; + +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JTextField; +import javax.swing.JButton; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; + +/** + * JInternalFrame que permite consultar la información de un usuario del sistema. + * @author TProg2017 + * + */ +@SuppressWarnings("serial") +public class ConsultarUsuario extends JInternalFrame { + + // Controlador de usuarios que se utilizará para las acciones del JFrame + private IControladorUsuario controlUsr; + + // Los componentes gráficos se agregan como atributos de la clase + // para facilitar su acceso desde diferentes métodos de la misma. + private JTextField textFieldCI; + private JTextField textFieldNombre; + private JTextField textFieldApellido; + private JLabel lblIngresoCI; + private JButton btnBuscar; + private JLabel lblNombre; + private JLabel lblApellido; + private JButton btnCerrar; + private JLabel lblInfoUsuario; + + /** + * Create the frame. + */ + public ConsultarUsuario(IControladorUsuario icu) { + // Se inicializa con el controlador de usuarios + controlUsr = icu; + + // Propiedades del JInternalFrame como dimensión, posición dentro del frame, etc. + setResizable(true); + setIconifiable(true); + setMaximizable(true); + setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); + setClosable(true); + setTitle("Consultar un Usuario"); + setBounds(30, 30, 400, 280); + + // En este caso usaremos el Absolute Layout y deberemos indicar + // la posición absoluta de todos los componentes + getContentPane().setLayout(null); + + // Una etiqueta (JLabel) indicando que en el siguiente campo debe ingresarse + // la cédula del usuario. + lblIngresoCI = new JLabel("Ingrese CI:"); + lblIngresoCI.setBounds(10, 24, 170, 14); + getContentPane().add(lblIngresoCI); + + // Una campo de texto (JTextField) para ingresar la cédula de un usuario. + textFieldCI = new JTextField(); + textFieldCI.setBounds(104, 17, 140, 30); + getContentPane().add(textFieldCI); + + // Un botón (JButton) con un evento asociado que permite buscar un usuario. + // Dado que el código de registro tiene cierta complejidad, conviene delegarlo + // a otro método en lugar de incluirlo directamente de el método actionPerformed + btnBuscar = new JButton("Buscar"); + btnBuscar.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + cmdBuscarUsuarioActionPerformed(e); + } + }); + btnBuscar.setBounds(256, 16, 95, 30); + getContentPane().add(btnBuscar); + + // Una etiqueta (JLabel) indicando que a continuación se verá la + // información del usuarios buscado. + lblInfoUsuario = new JLabel("Información de Usuario"); + lblInfoUsuario.setBounds(104, 70, 180, 14); + getContentPane().add(lblInfoUsuario); + + // Una etiqueta (JLabel) indicando que en el siguiente campo se verá + // el nombre del usuario encontrado. + lblNombre = new JLabel("Nombre:"); + lblNombre.setBounds(10, 114, 65, 14); + getContentPane().add(lblNombre); + + // Una campo de texto (JTextField) para mostrar el nombre del usuario. + // El campo se hace no editable para impedir que se modifique. + textFieldNombre = new JTextField(); + textFieldNombre.setEditable(false); + textFieldNombre.setBounds(80, 107, 271, 30); + getContentPane().add(textFieldNombre); + + // Una etiqueta (JLabel) indicando que en el siguiente campo se verá + // el apellido del usuario encontrado. + lblApellido = new JLabel("Apellido"); + lblApellido.setBounds(10, 156, 65, 14); + getContentPane().add(lblApellido); + + // Una campo de texto (JTextField) para mostrar el apellido del usuario. + // El campo se hace no editable para impedir que se modifique. + textFieldApellido = new JTextField(); + textFieldApellido.setEditable(false); + textFieldApellido.setBounds(80, 149, 271, 30); + getContentPane().add(textFieldApellido); + + // Un botón (JButton) con un evento asociado que permite cerrar el formulario (solo ocultarlo). + // Dado que antes de cerrar se limpia el formulario, se invoca un método reutilizable para ello. + btnCerrar = new JButton("Cerrar"); + btnCerrar.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + limpiarFormulario(); + setVisible(false); + } + }); + btnCerrar.setBounds(262, 191, 89, 23); + getContentPane().add(btnCerrar); + } + + // Este método es invocado al querer buscar un usuario, funcionalidad + // provista por la operación del sistem verInfoUsuario(). + // En caso de que haya un error de búsqueda se despliega + // un mensaje utilizando un panel de mensaje (JOptionPane). + // No es necesario verificar que el campo con la cédula sea un número ya + // que internamente el sistema almacena la cédula como un string. + protected void cmdBuscarUsuarioActionPerformed(ActionEvent e) { + DataUsuario du; + try { + du = controlUsr.verInfoUsuario(textFieldCI.getText()); + textFieldNombre.setText(du.getNombre()); + textFieldApellido.setText(du.getApellido()); + } catch (UsuarioNoExisteException e1) { + // Si el usuario no existe, se muestra mensaje de error y se limpia el + // formulario. + JOptionPane.showMessageDialog(this, e1.getMessage(), "Buscar Usuario", JOptionPane.ERROR_MESSAGE); + limpiarFormulario(); + } + + } + + // Permite borrar el contenido de un formulario antes de cerrarlo. + // Recordar que las ventanas no se destruyen, sino que simplemente + // se ocultan, por lo que conviene borrar la información para que + // no aparezca al mostrarlas nuevamente. + private void limpiarFormulario() { + textFieldNombre.setText(""); + textFieldApellido.setText(""); + textFieldCI.setText(""); + } +} diff --git a/src/presentacion/CrearUsuario.java b/src/presentacion/CrearUsuario.java new file mode 100644 index 0000000..096ccf3 --- /dev/null +++ b/src/presentacion/CrearUsuario.java @@ -0,0 +1,247 @@ +package presentacion; + +import javax.swing.JInternalFrame; + +import excepciones.UsuarioRepetidoException; +import logica.IControladorUsuario; + +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.SwingConstants; +import javax.swing.JTextField; +import javax.swing.JButton; +import java.awt.GridBagLayout; +import java.awt.GridBagConstraints; +import java.awt.Insets; +import javax.swing.JFrame; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; + +/** + * JInternalFrame que permite registrar un nuevo usuario al sistema. + * + * @author TProg2017 + * + */ +@SuppressWarnings("serial") +public class CrearUsuario extends JInternalFrame { + + // Controlador de usuarios que se utilizará para las acciones del JFrame + private IControladorUsuario controlUsr; + + // Los componentes gráficos se agregan como atributos de la clase + // para facilitar su acceso desde diferentes métodos de la misma. + private JTextField textFieldNombre; + private JTextField textFieldApellido; + private JTextField textFieldCI; + private JLabel lblIngreseNombre; + private JLabel lblIngreseApellido; + private JLabel lblIngreseCi; + private JButton btnAceptar; + private JButton btnCancelar; + + /** + * Create the frame. + */ + public CrearUsuario(IControladorUsuario icu) { + // Se inicializa con el controlador de usuarios + controlUsr = icu; + + // Propiedades del JInternalFrame como dimensión, posición dentro del frame, + // etc. + setResizable(true); + setIconifiable(true); + setMaximizable(true); + setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); + setClosable(true); + setTitle("Registrar un Usuario"); + setBounds(10, 40, 360, 150); + + // En este caso utilizaremos el GridBagLayout que permite armar una grilla + // en donde las filas y columnas no son uniformes. + // Conviene trabajar este componente desde la vista de diseño gráfico y sólo + // manipular los valores para ajustar alguna cosa. + GridBagLayout gridBagLayout = new GridBagLayout(); + gridBagLayout.columnWidths = new int[] { 100, 120, 120, 0 }; + gridBagLayout.rowHeights = new int[] { 30, 30, 30, 0, 0 }; + gridBagLayout.columnWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE }; + gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; + getContentPane().setLayout(gridBagLayout); + + // Una etiqueta (JLabel) indicandp que en el siguiente campo debe ingresarse + // el nombre del usuario. El texto está alineado horizontalmente a la derecha para + // que quede casi pegado al campo de texto. + lblIngreseNombre = new JLabel("Nombre:"); + lblIngreseNombre.setHorizontalAlignment(SwingConstants.RIGHT); + GridBagConstraints gbc_lblIngreseNombre = new GridBagConstraints(); + gbc_lblIngreseNombre.fill = GridBagConstraints.BOTH; + gbc_lblIngreseNombre.insets = new Insets(0, 0, 5, 5); + gbc_lblIngreseNombre.gridx = 0; + gbc_lblIngreseNombre.gridy = 0; + getContentPane().add(lblIngreseNombre, gbc_lblIngreseNombre); + + // Una campo de texto (JTextField) para ingresar el nombre del usuario. + // Por defecto es posible ingresar cualquier string. + textFieldNombre = new JTextField(); + GridBagConstraints gbc_textFieldNombre = new GridBagConstraints(); + gbc_textFieldNombre.gridwidth = 2; + gbc_textFieldNombre.fill = GridBagConstraints.BOTH; + gbc_textFieldNombre.insets = new Insets(0, 0, 5, 0); + gbc_textFieldNombre.gridx = 1; + gbc_textFieldNombre.gridy = 0; + getContentPane().add(textFieldNombre, gbc_textFieldNombre); + textFieldNombre.setColumns(10); + + // Una etiqueta (JLabel) indicandp que en el siguiente campo debe ingresarse + // el apellido del usuario. El texto está alineado horizontalmente a la derecha para + // que quede casi pegado al campo de texto. + lblIngreseApellido = new JLabel("Apellido:"); + lblIngreseApellido.setHorizontalAlignment(SwingConstants.RIGHT); + GridBagConstraints gbc_lblIngreseApellido = new GridBagConstraints(); + gbc_lblIngreseApellido.fill = GridBagConstraints.BOTH; + gbc_lblIngreseApellido.insets = new Insets(0, 0, 5, 5); + gbc_lblIngreseApellido.gridx = 0; + gbc_lblIngreseApellido.gridy = 1; + getContentPane().add(lblIngreseApellido, gbc_lblIngreseApellido); + + // Una campo de texto (JTextField) para ingresar el apellido del usuario. + // Por defecto es posible ingresar cualquier string. + textFieldApellido = new JTextField(); + GridBagConstraints gbc_textFieldApellido = new GridBagConstraints(); + gbc_textFieldApellido.gridwidth = 2; + gbc_textFieldApellido.fill = GridBagConstraints.BOTH; + gbc_textFieldApellido.insets = new Insets(0, 0, 5, 0); + gbc_textFieldApellido.gridx = 1; + gbc_textFieldApellido.gridy = 1; + getContentPane().add(textFieldApellido, gbc_textFieldApellido); + textFieldApellido.setColumns(10); + + // Una etiqueta (JLabel) indicando que en el siguiente campo debe ingresarse + // la cédula del usuario. El texto está alineado horizontalmente a la derecha para + // que quede casi pegado al campo de texto. + lblIngreseCi = new JLabel("C.I.:"); + lblIngreseCi.setHorizontalAlignment(SwingConstants.RIGHT); + GridBagConstraints gbc_lblIngreseCi = new GridBagConstraints(); + gbc_lblIngreseCi.fill = GridBagConstraints.BOTH; + gbc_lblIngreseCi.insets = new Insets(0, 0, 5, 5); + gbc_lblIngreseCi.gridx = 0; + gbc_lblIngreseCi.gridy = 2; + getContentPane().add(lblIngreseCi, gbc_lblIngreseCi); + + // Una campo de texto (JTextField) para ingresar la cédula del usuario. + // Por defecto es posible ingresar cualquier string. + // Al campo se le incluye un Tooltip que, al pasar el mouse por encima, despliega un mensaje. + textFieldCI = new JTextField(); + textFieldCI.setToolTipText("Ingrese un número sin puntos ni guiones"); + textFieldCI.setColumns(10); + GridBagConstraints gbc_textFieldCI = new GridBagConstraints(); + gbc_textFieldCI.gridwidth = 2; + gbc_textFieldCI.fill = GridBagConstraints.BOTH; + gbc_textFieldCI.insets = new Insets(0, 0, 5, 0); + gbc_textFieldCI.gridx = 1; + gbc_textFieldCI.gridy = 2; + getContentPane().add(textFieldCI, gbc_textFieldCI); + + // Un botón (JButton) con un evento asociado que permite registrar el usuario. + // Dado que el código de registro tiene cierta complejidad, conviene delegarlo + // a otro método en lugar de incluirlo directamente de el método actionPerformed + btnAceptar = new JButton("Aceptar"); + btnAceptar.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent arg0) { + cmdRegistroUsuarioActionPerformed(arg0); + } + }); + + GridBagConstraints gbc_btnAceptar = new GridBagConstraints(); + gbc_btnAceptar.fill = GridBagConstraints.BOTH; + gbc_btnAceptar.insets = new Insets(0, 0, 0, 5); + gbc_btnAceptar.gridx = 1; + gbc_btnAceptar.gridy = 3; + getContentPane().add(btnAceptar, gbc_btnAceptar); + + // Un botón (JButton) con un evento asociado que permite cerrar el formulario (solo ocultarlo). + // Dado que antes de cerrar se limpia el formulario, se invoca un método reutilizable para ello. + btnCancelar = new JButton("Cancelar"); + btnCancelar.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + limpiarFormulario(); + setVisible(false); + } + }); + GridBagConstraints gbc_btnCancelar = new GridBagConstraints(); + gbc_btnCancelar.fill = GridBagConstraints.BOTH; + gbc_btnCancelar.gridx = 2; + gbc_btnCancelar.gridy = 3; + getContentPane().add(btnCancelar, gbc_btnCancelar); + } + + // Este método es invocado al querer registrar un usuario, funcionalidad + // provista por la operación del sistem registrarUsuario(). + // Previamente se hace una verificación de los campos, particularmente que no sean vacÃos + // y que la cédula sea un número. + // Tanto en caso de que haya un error (de verificación o de registro) o no, se despliega + // un mensaje utilizando un panel de mensaje (JOptionPane). + protected void cmdRegistroUsuarioActionPerformed(ActionEvent arg0) { + // TODO Auto-generated method stub + + // Obtengo datos de los controles Swing + String nombreU = this.textFieldNombre.getText(); + String apellidoU = this.textFieldApellido.getText(); + String ciU = this.textFieldCI.getText(); + + if (checkFormulario()) { + try { + controlUsr.registrarUsuario(nombreU, apellidoU, ciU); + + // Muestro éxito de la operación + JOptionPane.showMessageDialog(this, "El Usuario se ha creado con éxito", "Registrar Usuario", + JOptionPane.INFORMATION_MESSAGE); + + } catch (UsuarioRepetidoException e) { + // Muestro error de registro + JOptionPane.showMessageDialog(this, e.getMessage(), "Registrar Usuario", JOptionPane.ERROR_MESSAGE); + } + + // Limpio el internal frame antes de cerrar la ventana + limpiarFormulario(); + setVisible(false); + } + } + + // Permite validar la información introducida en los campos e indicar + // a través de un mensaje de error (JOptionPane) cuando algo sucede. + // Este tipo de chequeos se puede realizar de otras formas y con otras librerÃas de Java, + // por ejemplo impidiendo que se escriban caracteres no numéricos al momento de escribir en + // en el campo de la cédula, o mostrando un mensaje de error apenas el foco pasa a otro campo. + private boolean checkFormulario() { + String nombreU = this.textFieldNombre.getText(); + String apellidoU = this.textFieldApellido.getText(); + String ciU = this.textFieldCI.getText(); + + if (nombreU.isEmpty() || apellidoU.isEmpty() || ciU.isEmpty()) { + JOptionPane.showMessageDialog(this, "No puede haber campos vacÃos", "Registrar Usuario", + JOptionPane.ERROR_MESSAGE); + return false; + } + + try { + Integer.parseInt(ciU); + } catch (NumberFormatException e) { + JOptionPane.showMessageDialog(this, "La CI debe ser un numero", "Registrar Usuario", + JOptionPane.ERROR_MESSAGE); + return false; + } + + return true; + } + + // Permite borrar el contenido de un formulario antes de cerrarlo. + // Recordar que las ventanas no se destruyen, sino que simplemente + // se ocultan, por lo que conviene borrar la información para que + // no aparezca al mostrarlas nuevamente. + private void limpiarFormulario() { + textFieldNombre.setText(""); + textFieldApellido.setText(""); + textFieldCI.setText(""); + } +} diff --git a/src/presentacion/ListaUsuarios.java b/src/presentacion/ListaUsuarios.java new file mode 100644 index 0000000..dd0f454 --- /dev/null +++ b/src/presentacion/ListaUsuarios.java @@ -0,0 +1,94 @@ +package presentacion; + +import javax.swing.JFrame; +import javax.swing.JInternalFrame; + +import excepciones.UsuarioNoExisteException; +import logica.DataUsuario; +import logica.IControladorUsuario; + +import java.awt.BorderLayout; +import javax.swing.JLabel; +import javax.swing.SwingConstants; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JButton; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; +import javax.swing.JComboBox; + +/** + * JInternalFrame que permite listar todos los usuarios del sistema. + * @author TProg2017 + * + */ +@SuppressWarnings("serial") +public class ListaUsuarios extends JInternalFrame { + + // Controlador de usuarios que se utilizará para las acciones del JFrame + private IControladorUsuario controlUsr; + + // Los componentes gráficos se agregan como atributos de la clase + // para facilitar su acceso desde diferentes métodos de la misma. + private JComboBox<DataUsuario> comboBoxUsuarios; + private JLabel lblUsuarios; + private JButton btnCerrar; + + /** + * Create the frame. + */ + public ListaUsuarios(IControladorUsuario icu) { + // Se inicializa con el controlador de usuarios + controlUsr = icu; + + // Propiedades del JInternalFrame como dimensión, posición dentro del frame, etc. + setResizable(true); + setIconifiable(true); + setMaximizable(true); + setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); + setClosable(true); + setTitle("Consultar un Usuario"); + setBounds(30, 30, 300, 100); + + // En este caso se utiliza un BorderLayout en donde los componentes se ubican según una orientación. + getContentPane().setLayout(new BorderLayout(0, 0)); + + // Una etiqueta (JLabel) muestra el tÃtulo de la lista que vendrá después. + // Se ubica al norte del layout y el texto se centra horizontalmente. + lblUsuarios = new JLabel("Usuarios Registrados"); + lblUsuarios.setHorizontalAlignment(SwingConstants.CENTER); + getContentPane().add(lblUsuarios, BorderLayout.NORTH); + + // Un combo (JComboBox) muestra la lista de usuarios registrados en el sistema. + // Es posible utilizar otros componentes gráficos, esta es sólo una opción. + // Se ubica al centro del layout. + comboBoxUsuarios = new JComboBox<DataUsuario>(); + getContentPane().add(comboBoxUsuarios, BorderLayout.CENTER); + + // Un botón (JButton) con un evento asociado que permite limpiar la lista + // de usuarios y cerrar la ventana (sólo la oculta). + // Se ubica al sur del layout. + btnCerrar = new JButton("Cerrar"); + btnCerrar.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + comboBoxUsuarios.removeAllItems(); + setVisible(false); + } + }); + getContentPane().add(btnCerrar, BorderLayout.SOUTH); + } + + // Método que permite cargar un nuevo modelo para el combo con la información + // actualizada de usuarios, provista por la operación del sistema getUsuarios(). + // Se invoca el método antes de hacer visible el JInternalFrame + public void cargarUsuarios() { + DefaultComboBoxModel<DataUsuario> model; + try { + model = new DefaultComboBoxModel<DataUsuario>(controlUsr.getUsuarios()); + comboBoxUsuarios.setModel(model); + } catch (UsuarioNoExisteException e) { + // No se imprime mensaje de error sino que simplemente no se muestra ningún elemento + } + + } + +} diff --git a/src/presentacion/Principal.java b/src/presentacion/Principal.java new file mode 100644 index 0000000..c5289ea --- /dev/null +++ b/src/presentacion/Principal.java @@ -0,0 +1,135 @@ +package presentacion; + +import java.awt.EventQueue; + +import javax.swing.JFrame; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; + +import logica.Fabrica; +import logica.IControladorUsuario; + +import javax.swing.JMenu; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * Clase principal (Frame) con el método Main. + * @author TProg2017 + * + */ +public class Principal { + + private JFrame frmGestionDeUsuarios; + private IControladorUsuario ICU; + private CrearUsuario creUsrInternalFrame; + private ConsultarUsuario conUsrInternalFrame; + private ListaUsuarios lisUsrInternalFrame; + + /** + * Launch the application. + */ + public static void main(String[] args) { + EventQueue.invokeLater(new Runnable() { + public void run() { + try { + Principal window = new Principal(); + window.frmGestionDeUsuarios.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + /** + * Create the application. + */ + public Principal() { + initialize(); + + // Inicialización + Fabrica fabrica = Fabrica.getInstance(); + ICU = fabrica.getIControladorUsuario(); + + // Se crean los tres InternalFrame y se incluyen al Frame principal ocultos. + // De esta forma, no es necesario crear y destruir objetos lo que enlentece la ejecución. + // Cada InternalFrame usa un layout diferente, simplemente para mostrar distintas opciones. + creUsrInternalFrame = new CrearUsuario(ICU); + creUsrInternalFrame.setVisible(false); + + conUsrInternalFrame = new ConsultarUsuario(ICU); + conUsrInternalFrame.setVisible(false); + + lisUsrInternalFrame = new ListaUsuarios(ICU); + lisUsrInternalFrame.setVisible(false); + frmGestionDeUsuarios.getContentPane().setLayout(null); + + frmGestionDeUsuarios.getContentPane().add(conUsrInternalFrame); + frmGestionDeUsuarios.getContentPane().add(creUsrInternalFrame); + frmGestionDeUsuarios.getContentPane().add(lisUsrInternalFrame); + } + + /** + * Initialize the contents of the frame. + */ + private void initialize() { + + // Se crea el Frame con las dimensiones indicadas. + frmGestionDeUsuarios = new JFrame(); + frmGestionDeUsuarios.setTitle("Gestion de Usuarios 1.0"); + frmGestionDeUsuarios.setBounds(100, 100, 450, 400); + frmGestionDeUsuarios.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + // Se crea una barra de menú (JMenuBar) con dos menú (JMenu) desplegables. + // Cada menú contiene diferentes opciones (JMenuItem), los cuales tienen un + // evento asociado que permite realizar una acción una vez se seleccionan. + JMenuBar menuBar = new JMenuBar(); + frmGestionDeUsuarios.setJMenuBar(menuBar); + + JMenu menuSistema = new JMenu("Sistema"); + menuBar.add(menuSistema); + + JMenuItem menuSalir = new JMenuItem("Salir"); + menuSalir.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent arg0) { + // Salgo de la aplicación + frmGestionDeUsuarios.setVisible(false); + frmGestionDeUsuarios.dispose(); + } + }); + menuSistema.add(menuSalir); + + JMenu menuUsuarios = new JMenu("Usuarios"); + menuBar.add(menuUsuarios); + + JMenuItem menuItemRegistrar = new JMenuItem("Registrar Usuario"); + menuItemRegistrar.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + // Muestro el InternalFrame para registrar un usuario + creUsrInternalFrame.setVisible(true); + } + }); + menuUsuarios.add(menuItemRegistrar); + + JMenuItem menuItemVerInfo = new JMenuItem("Ver Información"); + menuItemVerInfo.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + // Muestro el InternalFrame para ver información de un usuario + conUsrInternalFrame.setVisible(true); + } + }); + menuUsuarios.add(menuItemVerInfo); + + JMenuItem mntmListaUsuarios = new JMenuItem("ListarUsuarios"); + mntmListaUsuarios.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + // Muestro el InternalFrame para ver la lista de todos los usuarios, + // cargando previamente la lista + lisUsrInternalFrame.cargarUsuarios(); + lisUsrInternalFrame.setVisible(true); + } + }); + menuUsuarios.add(mntmListaUsuarios); + } +} -- GitLab