From 2f3f6a11f3d4309323942225d069316b6f6d21fb Mon Sep 17 00:00:00 2001 From: Kevin Pfannenstiel Date: Mon, 30 Jan 2023 12:23:17 +0100 Subject: [PATCH] =?UTF-8?q?Login=20Validate=20ge=C3=A4ndert=20und=20f?= =?UTF-8?q?=C3=BCr=20javaFx=20angepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/vpr_javafx/Data.java | 72 ++++----- .../example/vpr_javafx/HelloController.java | 148 ++++++++---------- .../java/com/example/vpr_javafx/User.java | 4 - .../classes/com/example/vpr_javafx/Data.class | Bin 9207 -> 9209 bytes .../example/vpr_javafx/HelloController.class | Bin 5397 -> 5362 bytes .../classes/com/example/vpr_javafx/User.class | Bin 1705 -> 1061 bytes user.txt | 4 +- 7 files changed, 98 insertions(+), 130 deletions(-) diff --git a/src/main/java/com/example/vpr_javafx/Data.java b/src/main/java/com/example/vpr_javafx/Data.java index 5b3dc5b..09fa8c0 100644 --- a/src/main/java/com/example/vpr_javafx/Data.java +++ b/src/main/java/com/example/vpr_javafx/Data.java @@ -1,5 +1,7 @@ package com.example.vpr_javafx; +import javafx.scene.control.Alert; + import java.io.File; import java.io.FileWriter; import java.io.IOException; @@ -252,9 +254,8 @@ public class Data { * @return boolean inputValid * @author Kevin Maier */ - private boolean validateData(String password, String phoneNumber) + public boolean validateData(String password, String phoneNumber) { - boolean inputValid = false; boolean phoneNumberMatchFound; boolean passwordMatchFound; boolean phoneNumberValid = false; @@ -263,16 +264,12 @@ public class Data { Pattern phoneNumberPattern = Pattern.compile("[0-9]*"); Pattern passwordPattern = Pattern.compile("^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$"); - Scanner reader = new Scanner(System.in); - - while(password.isEmpty() || phoneNumber.isEmpty()) + if (password.isEmpty() || phoneNumber.isEmpty()) { - System.out.println("Login fehlgeschlagen. Eingabe ist leer, versuchen Sie es erneut."); - System.out.println(""); - System.out.print("Telefonnummer: "); - phoneNumber = reader.nextLine(); - System.out.print("Passwort: "); - password = reader.nextLine(); + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setContentText("Login fehlgeschlagen. Die eingegebene Handynummer ist nicht valide."); + alert.show(); + return false; } Matcher phoneNumberMatcher = phoneNumberPattern.matcher(phoneNumber); @@ -281,36 +278,35 @@ public class Data { phoneNumberMatchFound = phoneNumberMatcher.find(); passwordMatchFound = passwordMatcher.find(); - while (!inputValid) { - if (!phoneNumberMatchFound || phoneNumber.length() != 15) { - System.out.println("Login fehlgeschlagen. Die eingegebene Handynummer ist nicht valide."); - System.out.println(""); - System.out.print("Telefonnummer: "); - phoneNumber = reader.nextLine(); - System.out.print("Passwort: "); - password = reader.nextLine(); - } else { - phoneNumberValid = true; - } - - if (!passwordMatchFound || password.length() < 6 || password.length() > 20) { - System.out.println("Login fehlgeschlagen. Das eingegebene Passwort ist nicht valide."); - System.out.println(""); - System.out.print("Telefonnummer: "); - phoneNumber = reader.nextLine(); - System.out.print("Passwort: "); - password = reader.nextLine(); - } else { - passwordValid = true; - } - - if (phoneNumberValid && passwordValid) { - inputValid = true; - } + if (!phoneNumberMatchFound || phoneNumber.length() >= 15) + { + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setContentText("Login fehlgeschlagen. Die eingegebene Handynummer ist nicht valide."); + alert.show(); + return false; } - return inputValid; + else + { + phoneNumberValid = true; + } + + if (!passwordMatchFound || password.length() <8) + { + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setContentText("Login fehlgeschlagen. Das eingegebene Passwort ist nicht valide."); + alert.show(); + return false; + } + else + { + passwordValid = true; + } + + return phoneNumberValid && passwordValid; } + + /** * The method changes the orders.txt file by removing canceled orders * diff --git a/src/main/java/com/example/vpr_javafx/HelloController.java b/src/main/java/com/example/vpr_javafx/HelloController.java index 88da7c6..c7e06b4 100644 --- a/src/main/java/com/example/vpr_javafx/HelloController.java +++ b/src/main/java/com/example/vpr_javafx/HelloController.java @@ -70,133 +70,109 @@ public class HelloController { { LoginDatei file = new LoginDatei("user.txt"); HashMap users = file.readFile(); - Alert alert = new Alert(Alert.AlertType.INFORMATION); - if (users.containsKey(tfPhone.getText())) + String phoneNumber = tfPhone.getText(); + String password = pfPassword.getText(); + + Data data = new Data("user.txt"); + boolean inputValid = data.validateData(password, phoneNumber); + + if (users.containsKey(phoneNumber) && inputValid) { - if (users.containsValue(pfPassword.getText())) + if (users.get(phoneNumber).equals(password)) { Parent root = FXMLLoader.load(getClass().getResource("MenuSelect-view.fxml")); stage = (Stage)((Node)event.getSource()).getScene().getWindow(); scene = new Scene(root); stage.setScene(scene); stage.show(); - } - else - { - alert.setContentText("Falsche Werte"); - alert.show(); + FillLabels(); } } - else - { - alert.setContentText("Falsche Werte"); - alert.show(); - } - } +} @FXML protected void FillLabels() { try { + List menu = Files.readAllLines(Paths.get("menue.txt")); - List menu = Files.readAllLines(Paths.get("menue.txt")); + for (int i = 0; i < menu.size(); i++) + { + String[] parts = menu.get(i).split(";"); - for (int i = 0; i < menu.size(); i++) - { - String[] parts = menu.get(i).split(";"); + String dish = parts[1]; + String sideDish = parts[2]; - String dish = parts[1]; - String sideDish = parts[2]; + String dayMenu = dish+"\n"+sideDish; - String dayMenu = dish+"\n"+sideDish; - - if (i == 0) - { + switch (i) { + case 0: lMonH1.setText(dayMenu); - } - else if (i == 1) - { + break; + case 1: lMonD1.setText(dayMenu); - } - else if (i == 2) - { + break; + case 2: lMonH2.setText(dayMenu); - } - else if (i == 3) - { + break; + case 3: lMonD2.setText(dayMenu); - } - else if (i == 4) - { + break; + case 4: lTueH1.setText(dayMenu); - } - else if (i == 5) - { + break; + case 5: lTueD1.setText(dayMenu); - } - else if (i == 6) - { + break; + case 6: lTueH2.setText(dayMenu); - } - else if (i == 7) - { + break; + case 7: lTueD2.setText(dayMenu); - } - else if (i == 8) - { + break; + case 8: lWednH1.setText(dayMenu); - } - else if (i == 9) - { + break; + case 9: lWednD1.setText(dayMenu); - } - else if (i == 10) - { + break; + case 10: lWednH2.setText(dayMenu); - } - else if (i == 11) - { + break; + case 11: lWednD2.setText(dayMenu); - } - else if (i == 12) - { + break; + case 12: lThurH1.setText(dayMenu); - } - else if (i == 13) - { + break; + case 13: lThurD1.setText(dayMenu); - } - else if (i == 14) - { + break; + case 14: lThurH2.setText(dayMenu); - } - else if (i == 15) - { + break; + case 15: lThurD2.setText(dayMenu); - } - else if (i == 16) - { + break; + case 16: lFriH1.setText(dayMenu); - } - else if (i == 17) - { + break; + case 17: lFriD1.setText(dayMenu); - } - else if (i == 18) - { + break; + case 18: lFriH2.setText(dayMenu); - } - else if (i == 19) - { + break; + case 19: lFriD2.setText(dayMenu); - } - + break; } } - catch (IOException e) { - e.printStackTrace(); - } + } + catch (IOException e) { + e.printStackTrace(); + } } } \ No newline at end of file diff --git a/src/main/java/com/example/vpr_javafx/User.java b/src/main/java/com/example/vpr_javafx/User.java index 50da10a..e321a06 100644 --- a/src/main/java/com/example/vpr_javafx/User.java +++ b/src/main/java/com/example/vpr_javafx/User.java @@ -80,8 +80,4 @@ public class User { * @return a String with nameParent1, nameparent2, billAdress, phonenumber, nameChildren, password * @author Madeleine Vigier */ - @Override - public String toString() { - return nameParent1 + ";" + nameParent2 + ";" + billAddress + ";" + phoneNumber + ";" + nameChildren + ";" + password; - } } diff --git a/target/classes/com/example/vpr_javafx/Data.class b/target/classes/com/example/vpr_javafx/Data.class index ccc128d1d221a6b54e59c63f828025d01aa392c1..c101f465e4932fbbacdb1ff8633443a63bfe6885 100644 GIT binary patch delta 3011 zcmaJ@2~j?MY)^ zo5oa6E49a(T3e+dIT~miG1xSwHno~o6HQuUx}<4rVybPW-+RMM?dhpAbKczf|NGzn zF5ms`d|G{@+WzXTW5WPSWz7-$JyyR3Ck2V?TOVlc=*#PA_jGyk+Pz)9K5u7UMW@Ht zYr`l`S@1I_Ud7J^>Hl9dUDvPQ-0cxqmQ^fXShKKNFs1g6Cn|V_cBI6P5uA3ygx3XG znRh-EJd@R6#Tm8PHm6WK{e~02LXRN4$J1NM5IkMI^`5?7ZR^)goP$|l>{;u5(2gOz z>BMjFTlI|fUfV^yWx?A{TvC&48AX0ob z{;I&?^{w{!dZy?0Y8QMSe{kZD>XOF~OjC;@HqS7%YQ+&G-yu^a^s{@dx689|)5bQBPdy!xs7SMVCE}5R4UvyY_!7I+ z%TkLp@K#y&lxswq)RQi+ELRJnb8IaFMZ_wr)OFDrE`cpnUW>E~CaXVb8hS9gePEdY!=j_{X)Px%aIj6focNP-Q?_&a~a1+;MkH~EX_ z;D8gt_doDY?p;@#W48OX(}f7*b22e9g;FNpS;$8YiZB(WxEqzoMGf*$hiO>KosF1| zZp_ec>890u%)-BLi|31IYmB#;d2X73l7*+UMJQQmBV80qHd>k>21<564JL?@qJ!7Y z784~So$-ykZNf$|i-k^y!Na84m^(Z7wcrAKj?kWyds-k-P;Mc{f>;ZpEJ(VEm#`))L#56kcI89XTE=#zQaBKP4TX~M(Oj;*pDe(_9Nq1$DR+&#J(UheAX0bxaLO#*?Fq~o@DUANLkvEK zoAj5=9!kM=q|zyk__BF@%55&Bjl1APyxc9hbRh;2x1~_?Ah4n*juyx+V>D~9z-o~^ zG6{%C|3Tw8kK{9-(`5#ak(ZTt#_8mtVMC$GP-u1?dl4@cTU;+|U)G#K6g&(2RDSJ7 z%5jV|9mOjz;I(3#+vfVkAb#n#4dSffklR9)^IX+VoG-R(%NNSrc0LP@DZAmEI_Ssc z$cTOaWyIlj1dKRzBgR5gtdY7jaXHf3|39j~*X|3dnqy5=jWzFv#drWl!y$%X(1*!- z4iXT722zq)NRq5oj5z$5M0(9-4hqPm#bnZ1Y~(7oaIM5)F?+R1+~|-ba#u1o6X073 z?QJrN+%y@xh>X3&#D1dSpk(8FEW}~*n^v$Vh{9Zi%S+^y@!mt!F^$G#oDMcho13B0u_fRrYJ}$+SOa$qRQbNhh);S`xq?8zn!E;hZ$x5c* zBA+F}+Q{!dsi0)nr${BNW0(Y+h5@AWQ_7?e21EP+?lEM+5!w^J0$UbbE?(#pAAz2C<9ZvBqQgn|d>Kf{yk! zB=FL?uu2W9Fb|PZ%K|Jwk<{^j<|0&bAk@fW)X5SwN>Ph- zGMkcvHLKEz%1ma6kU3J##BRe}nM-#~9Cjw11xzf|*$@kyWf)q+S@D|8*GPax8P%K7 zz*ZlTT83xjh))X4_<&k!NXCyS27ELi}pr&S!=ml+GMqK!2NI6e@tNj delta 3003 zcma)8YjjlA75?^}_hdpsG6_sV;)DQ!Bn$~k0s$hAgzySP6TMWN5p5xs{+{Znjoo84XA5F!C=R_ zb!xcG>%?O?@51Y77g*ZDt-**LZwQ<<{`U5JLxaK*eaZ>^+J(39wib2FaP;6^8!o!= zo_5ZWH}p3y{1%r5)_@vpjWq2_Q_-ugR1LMYtC=*IgZ8zN3@ z#YZmu0iA-xKxgvoOdD|GU-&nlx|IMI7##kC&p38XyW)N@s;@3VBJa7dU<9pE7>zs> zV+=}>kEtlYOcY`c#$q9SScGv{ha$9bhQ3Q1y%u8%KF1eaUrJxsxr>$Sitr^Z8&~J! zD_VB?7=i!Na?n#Y{zuDMLx)3ggJuG^twbL!Gu?*!!?s`@Bi4gXger=dcpCb+o?L9q zGB9T4m`xj(o<7*l8HzZ#&>2hhXnp!YMbA~rxi?VG#kbSt3~pM%_^TNCY{oo?(az<4 z9%of!3GZuAgS$}6JnOK5!9IY+*v^q1Sc=_PjssYMXR#75U^R|&_9^&r0gdQE6W)i4 zkI{_3p@nDO8fA8OixmMG#H@xQB)6bV@^Ft7vrs0YL#AQ9%*6(|0~=*2?vqB`FLz;+ zgt1xf#};`ITjgOqAdllA*@JJ()7U0Q@Ev&(+vNnlE3e{v@&>*y7x9Sn;!*hoJLD=J zlk4~)xe$F^v16x_f+rLYb}2d7trTFdG9FJVW!R@wV81dC2b5a;SXqf@lqUQ{37|_^ zk7t!lIIL)RPT7eg2I}__redWbj=Hi!bZ!xKrCwaLh`LfEiL{8iGM5Px^(Yo96_P~L zi6zQpNhYodbe%4P`ObyW%H47Nl_%o(D_R_X6%$ROac8gPq;mV=%r#M4EC zp6+sPY{xRmV3s=H7a5s<&G*Tj4YWV6V3b*^CVUP!C5_RI090IbJ|LSD8p+yG83N)BZ$3;pCnbKk8Vvi*ljX~#|hFXdeGc|o&^lFP{wlEHR{V#%#*q)nWl16iPcnM zOF8xn{IblR^0NML9LMIR&tuEav8~Km(2WVZ;4I{$6XT!9_LS4z*r7kq^gqvbZoE@s_PF$iC2JRUr_Kxt+Ov+F7N7V&N@t7 zOwgOmPK@MX>D|l>i&$Xi(I)X=)2Y$JDH=r-iHTH)X_AcDRD=bRf_h2C>L_cpnROIm z-K>`k%Hc4|U>3V&Hhx47?h`M%BnQutc`uS{CuJmFBHWi`40^BkE~M|w@1cF5wls3XQY^x8JqB=jHhK` zM(K1}#KN#kDjgS*uSw#P2~xtEP8W-m(sE!puFFIQ>ttJaK_*EVZLbGAvZ zb~q<5`uk(7YINgUU4555mTr8ilkP7u%A}c(v0-s=M;DxB7Jc|o;ZMo=4xGh#9Aw%$ zoDFQ-koiovno6($$x;I!8&|2+@;kE*Gi4FxNIe$HVl0s*L~j|wvVu)+HKJQ&4fcp1 zhok{V*yWB&6ON0Dv(kd|vKAMl8E;Fg0nHxQLtL#CuOyi!(}~9x@@j_6gk>2!w8c;=3p447qmCY_;9?XctZMDn#gil$y4(DAHcj+asU7T diff --git a/target/classes/com/example/vpr_javafx/HelloController.class b/target/classes/com/example/vpr_javafx/HelloController.class index 27fbb26054fb4c1feaaebbfab225c6fc5d4651a4..51c0379aa749cc8fbf773eefa3f5b7cb8257dade 100644 GIT binary patch literal 5362 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