From b80a6601c3cb2c881639f599270ee35c723c8225 Mon Sep 17 00:00:00 2001 From: ehyunna Date: Mon, 26 May 2025 15:31:54 +0900 Subject: [PATCH] naehyun upload 1st --- Neul-main/README.md | 1 + Neul-main/build.gradle | 17 ++ .../classes/java/main/AnalysisPanel$1.class | Bin 0 -> 776 bytes .../classes/java/main/AnalysisPanel.class | Bin 0 -> 4662 bytes .../build/classes/java/main/AuthManager.class | Bin 0 -> 622 bytes .../classes/java/main/CurrentDateTime.class | Bin 0 -> 1502 bytes .../build/classes/java/main/DailyInfo.class | Bin 0 -> 2435 bytes .../build/classes/java/main/IntroPanel.class | Bin 0 -> 3783 bytes .../classes/java/main/LoginErrorPopup.class | Bin 0 -> 2557 bytes .../build/classes/java/main/LoginPanel.class | Bin 0 -> 3824 bytes .../classes/java/main/MainMenuPanel.class | Bin 0 -> 3032 bytes .../build/classes/java/main/MoonCircle.class | Bin 0 -> 1514 bytes .../build/classes/java/main/NEUL_MAIN.class | Bin 0 -> 1699 bytes .../classes/java/main/PanelManager.class | Bin 0 -> 3396 bytes .../classes/java/main/PasswordUtil.class | Bin 0 -> 1444 bytes .../classes/java/main/PwErrorPopup.class | Bin 0 -> 2535 bytes .../classes/java/main/PwLengErrorPopup.class | Bin 0 -> 2542 bytes .../java/main/RandomSleepInformation.class | Bin 0 -> 2199 bytes .../classes/java/main/ScreenController.class | Bin 0 -> 3532 bytes .../build/classes/java/main/SignupPanel.class | Bin 0 -> 4435 bytes .../classes/java/main/SleepCalculator.class | Bin 0 -> 1810 bytes .../classes/java/main/SleepCyclePanel.class | Bin 0 -> 5946 bytes .../java/main/SleepDataService$1.class | Bin 0 -> 654 bytes .../classes/java/main/SleepDataService.class | Bin 0 -> 8168 bytes .../classes/java/main/SleepDatabase.class | Bin 0 -> 2176 bytes .../classes/java/main/SleepInputPanel$1.class | Bin 0 -> 1780 bytes .../main/SleepInputPanel$AnalogClock.class | Bin 0 -> 2206 bytes .../classes/java/main/SleepInputPanel.class | Bin 0 -> 7641 bytes .../java/main/SleepRecommendationPanel.class | Bin 0 -> 6128 bytes .../build/classes/java/main/SleepRecord.class | Bin 0 -> 3578 bytes .../build/classes/java/main/SleepTime.class | Bin 0 -> 1612 bytes .../classes/java/main/TodayPanel$1.class | Bin 0 -> 1307 bytes .../build/classes/java/main/TodayPanel.class | Bin 0 -> 9747 bytes Neul-main/build/classes/java/main/User.class | Bin 0 -> 947 bytes .../classes/java/main/UserService$1.class | Bin 0 -> 615 bytes .../build/classes/java/main/UserService.class | Bin 0 -> 2313 bytes .../java/main/WakeRecommendationPanel.class | Bin 0 -> 6192 bytes .../build/classes/java/main/WakeTime.class | Bin 0 -> 1611 bytes .../resources/main/images/Emotion (1).png | Bin 0 -> 18051 bytes .../resources/main/images/Emotion (2).png | Bin 0 -> 20516 bytes .../build/resources/main/images/Emotion.png | Bin 0 -> 19697 bytes Neul-main/build/resources/main/images/img.png | Bin 0 -> 1402 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 21314 bytes Neul-main/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43583 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + Neul-main/gradlew | 252 ++++++++++++++++++ Neul-main/gradlew.bat | 94 +++++++ Neul-main/settings.gradle | 1 + Neul-main/sleep_data.json | 11 + Neul-main/src/main/java/AnalysisPanel.java | 124 +++++++++ Neul-main/src/main/java/AuthManager.java | 25 ++ Neul-main/src/main/java/CurrentDateTime.java | 33 +++ Neul-main/src/main/java/DailyInfo.java | 37 +++ Neul-main/src/main/java/IntroPanel.java | 86 ++++++ Neul-main/src/main/java/LoginErrorPopup.java | 44 +++ Neul-main/src/main/java/LoginPanel.java | 102 +++++++ Neul-main/src/main/java/MainMenuPanel.java | 96 +++++++ Neul-main/src/main/java/MoonCircle.java | 30 +++ Neul-main/src/main/java/NEUL_MAIN.java | 27 ++ Neul-main/src/main/java/PanelManager.java | 69 +++++ Neul-main/src/main/java/PasswordUtil.java | 22 ++ Neul-main/src/main/java/PwErrorPopup.java | 44 +++ Neul-main/src/main/java/PwLengErrorPopup.java | 44 +++ .../src/main/java/RandomSleepInformation.java | 41 +++ Neul-main/src/main/java/ScreenController.java | 38 +++ Neul-main/src/main/java/SignupPanel.java | 110 ++++++++ Neul-main/src/main/java/SleepCalculator.java | 37 +++ Neul-main/src/main/java/SleepCyclePanel.java | 140 ++++++++++ Neul-main/src/main/java/SleepDataService.java | 126 +++++++++ Neul-main/src/main/java/SleepDatabase.java | 51 ++++ Neul-main/src/main/java/SleepInputPanel.java | 229 ++++++++++++++++ .../main/java/SleepRecommendationPanel.java | 139 ++++++++++ Neul-main/src/main/java/SleepRecord.java | 90 +++++++ Neul-main/src/main/java/SleepTime.java | 30 +++ Neul-main/src/main/java/TodayPanel.java | 213 +++++++++++++++ Neul-main/src/main/java/User.java | 26 ++ Neul-main/src/main/java/UserService.java | 51 ++++ .../main/java/WakeRecommendationPanel.java | 141 ++++++++++ Neul-main/src/main/java/WakeTime.java | 30 +++ .../src/main/resources/images/Emotion (1).png | Bin 0 -> 18051 bytes .../src/main/resources/images/Emotion (2).png | Bin 0 -> 20516 bytes .../src/main/resources/images/Emotion.png | Bin 0 -> 19697 bytes Neul-main/src/main/resources/images/img.png | Bin 0 -> 1402 bytes Neul-main/users.json | 1 + 84 files changed, 2659 insertions(+) create mode 100644 Neul-main/README.md create mode 100644 Neul-main/build.gradle create mode 100644 Neul-main/build/classes/java/main/AnalysisPanel$1.class create mode 100644 Neul-main/build/classes/java/main/AnalysisPanel.class create mode 100644 Neul-main/build/classes/java/main/AuthManager.class create mode 100644 Neul-main/build/classes/java/main/CurrentDateTime.class create mode 100644 Neul-main/build/classes/java/main/DailyInfo.class create mode 100644 Neul-main/build/classes/java/main/IntroPanel.class create mode 100644 Neul-main/build/classes/java/main/LoginErrorPopup.class create mode 100644 Neul-main/build/classes/java/main/LoginPanel.class create mode 100644 Neul-main/build/classes/java/main/MainMenuPanel.class create mode 100644 Neul-main/build/classes/java/main/MoonCircle.class create mode 100644 Neul-main/build/classes/java/main/NEUL_MAIN.class create mode 100644 Neul-main/build/classes/java/main/PanelManager.class create mode 100644 Neul-main/build/classes/java/main/PasswordUtil.class create mode 100644 Neul-main/build/classes/java/main/PwErrorPopup.class create mode 100644 Neul-main/build/classes/java/main/PwLengErrorPopup.class create mode 100644 Neul-main/build/classes/java/main/RandomSleepInformation.class create mode 100644 Neul-main/build/classes/java/main/ScreenController.class create mode 100644 Neul-main/build/classes/java/main/SignupPanel.class create mode 100644 Neul-main/build/classes/java/main/SleepCalculator.class create mode 100644 Neul-main/build/classes/java/main/SleepCyclePanel.class create mode 100644 Neul-main/build/classes/java/main/SleepDataService$1.class create mode 100644 Neul-main/build/classes/java/main/SleepDataService.class create mode 100644 Neul-main/build/classes/java/main/SleepDatabase.class create mode 100644 Neul-main/build/classes/java/main/SleepInputPanel$1.class create mode 100644 Neul-main/build/classes/java/main/SleepInputPanel$AnalogClock.class create mode 100644 Neul-main/build/classes/java/main/SleepInputPanel.class create mode 100644 Neul-main/build/classes/java/main/SleepRecommendationPanel.class create mode 100644 Neul-main/build/classes/java/main/SleepRecord.class create mode 100644 Neul-main/build/classes/java/main/SleepTime.class create mode 100644 Neul-main/build/classes/java/main/TodayPanel$1.class create mode 100644 Neul-main/build/classes/java/main/TodayPanel.class create mode 100644 Neul-main/build/classes/java/main/User.class create mode 100644 Neul-main/build/classes/java/main/UserService$1.class create mode 100644 Neul-main/build/classes/java/main/UserService.class create mode 100644 Neul-main/build/classes/java/main/WakeRecommendationPanel.class create mode 100644 Neul-main/build/classes/java/main/WakeTime.class create mode 100644 Neul-main/build/resources/main/images/Emotion (1).png create mode 100644 Neul-main/build/resources/main/images/Emotion (2).png create mode 100644 Neul-main/build/resources/main/images/Emotion.png create mode 100644 Neul-main/build/resources/main/images/img.png create mode 100644 Neul-main/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 Neul-main/gradle/wrapper/gradle-wrapper.jar create mode 100644 Neul-main/gradle/wrapper/gradle-wrapper.properties create mode 100644 Neul-main/gradlew create mode 100644 Neul-main/gradlew.bat create mode 100644 Neul-main/settings.gradle create mode 100644 Neul-main/sleep_data.json create mode 100644 Neul-main/src/main/java/AnalysisPanel.java create mode 100644 Neul-main/src/main/java/AuthManager.java create mode 100644 Neul-main/src/main/java/CurrentDateTime.java create mode 100644 Neul-main/src/main/java/DailyInfo.java create mode 100644 Neul-main/src/main/java/IntroPanel.java create mode 100644 Neul-main/src/main/java/LoginErrorPopup.java create mode 100644 Neul-main/src/main/java/LoginPanel.java create mode 100644 Neul-main/src/main/java/MainMenuPanel.java create mode 100644 Neul-main/src/main/java/MoonCircle.java create mode 100644 Neul-main/src/main/java/NEUL_MAIN.java create mode 100644 Neul-main/src/main/java/PanelManager.java create mode 100644 Neul-main/src/main/java/PasswordUtil.java create mode 100644 Neul-main/src/main/java/PwErrorPopup.java create mode 100644 Neul-main/src/main/java/PwLengErrorPopup.java create mode 100644 Neul-main/src/main/java/RandomSleepInformation.java create mode 100644 Neul-main/src/main/java/ScreenController.java create mode 100644 Neul-main/src/main/java/SignupPanel.java create mode 100644 Neul-main/src/main/java/SleepCalculator.java create mode 100644 Neul-main/src/main/java/SleepCyclePanel.java create mode 100644 Neul-main/src/main/java/SleepDataService.java create mode 100644 Neul-main/src/main/java/SleepDatabase.java create mode 100644 Neul-main/src/main/java/SleepInputPanel.java create mode 100644 Neul-main/src/main/java/SleepRecommendationPanel.java create mode 100644 Neul-main/src/main/java/SleepRecord.java create mode 100644 Neul-main/src/main/java/SleepTime.java create mode 100644 Neul-main/src/main/java/TodayPanel.java create mode 100644 Neul-main/src/main/java/User.java create mode 100644 Neul-main/src/main/java/UserService.java create mode 100644 Neul-main/src/main/java/WakeRecommendationPanel.java create mode 100644 Neul-main/src/main/java/WakeTime.java create mode 100644 Neul-main/src/main/resources/images/Emotion (1).png create mode 100644 Neul-main/src/main/resources/images/Emotion (2).png create mode 100644 Neul-main/src/main/resources/images/Emotion.png create mode 100644 Neul-main/src/main/resources/images/img.png create mode 100644 Neul-main/users.json diff --git a/Neul-main/README.md b/Neul-main/README.md new file mode 100644 index 0000000..c72bdd5 --- /dev/null +++ b/Neul-main/README.md @@ -0,0 +1 @@ +# oop_project \ No newline at end of file diff --git a/Neul-main/build.gradle b/Neul-main/build.gradle new file mode 100644 index 0000000..45681ed --- /dev/null +++ b/Neul-main/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'java' +} + +group 'com.example' +version '1.0-SNAPSHOT' + +repositories { + mavenCentral() // 라이브러리 받을 저장소 +} + +dependencies { + implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2' + implementation 'com.fasterxml.jackson.core:jackson-core:2.15.2' + implementation 'com.fasterxml.jackson.core:jackson-annotations:2.15.2' + implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2' // ✅ 이 줄 추가 +} diff --git a/Neul-main/build/classes/java/main/AnalysisPanel$1.class b/Neul-main/build/classes/java/main/AnalysisPanel$1.class new file mode 100644 index 0000000000000000000000000000000000000000..37bbddd42f0e1af895f6b820cd1b16201e598ff7 GIT binary patch literal 776 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 b@><~+<)rWlMW}oS$h%I+>}hhvH~-!TsS3Yw literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/AuthManager.class b/Neul-main/build/classes/java/main/AuthManager.class new file mode 100644 index 0000000000000000000000000000000000000000..93f4587c4b3d9f77bc54860f112e0e6afa84fe4c GIT binary patch literal 622 zcmZ8eJ5Pg97(KV8MUXzM@7LhgI@rNcV>C@nOi%~4gWE0MAX>pt@GrSI_!vwa93A{o z#&ZiQk>Pvsod+MEUvKXKdRVnlLfM4jpn|GE^Ge>y?oft)_jqunyhNb79fU!$BT#O4 z`W7Z&nXny9!V#F))Zef9w3QG2_Ab1f=Id~-p T8w5XcC6mfNR0}MRiB`S=h_YkO literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/CurrentDateTime.class b/Neul-main/build/classes/java/main/CurrentDateTime.class new file mode 100644 index 0000000000000000000000000000000000000000..b0b9903c7ad3d07f0d06f5f351d8826c2cfb4c2a GIT binary patch literal 1502 zcma)6TT|0e5dKbENLvCel$(GeD5WhzMMaSUT1$~)3l6OyyfC2z2(&2^QW@U$m-yhT zid@tgXMFV^_*b0qvL{I|qB3?S&DlMBzWw&w&H3`~Ijb|&jw`C7Pcqm8!9^#W3^g+|WBI%rZqx}7Mbx8#q1QO6D|tD*QPA>| z9-fkPIYaieVd}ER;3{l9mULRG45NW$C0Sb66m>HaG+pPSL|pKqQ9zRjADS6Fv7)BQ zs$NP*S*GU~QqfE%zQAzxe-PbhMVo+j5f{+G;H#99EM%n|FM`Tf3;PUhfohKBZG%)7 zKYx*-r7CA7f+y(~aTz_NsVPxKg!3!5QW|ZsloD{IM6{?Yxo}j|q=Tfgr@PS$JD12W zq8|YUcPjdHHMSf}#?uTe!M8#p2KbgIlSswWtBJYQRATN)CeA4iiWowep>8)<+)F8H zQJ41^+5@wHue%PzxFO)Ch+7z8XfUKR7;!SBnzX)7id6U79IQxig~1Uktdq2!q@v1m z#r&GAWu&znd72E}79~yLw&ir_TMBV$OrGg@gz|36y5%*y)m-XRwP=K^$=O0aFRSZI z(vC5m1lUxHE%PQs=e`v{qA4^}C6nU4W`C=rTYu+!uv_A6&0jfo+&o*&YLc?mr*$d2 zlah9=QeA0fQ?$AHKQ9#iSG+>lg zq8W|57$b`zLI@^O)I#!wPSJ9N&d@vK@f_pQYYMG~^Fbgg6*ylRZUU1O$%%c2ost3* z7TiblE}zf^;F#!oi@uleb9`C`w_Y6M+T6e(**w>KT(@EAxsAR0`E`INb{KVBqLd(I z1a!cIPPC&7e$r`#))90YWI`0{r`>zxx1$ju+$ZID{Sy{J4}DEhJfMnW5Xj1iiI~=;LCuDzV*kd2{Fl`E8i}1?9g} Ac>n+a literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/DailyInfo.class b/Neul-main/build/classes/java/main/DailyInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..5d80c0f3dccf15c40a353fadb4c9c59567468eb1 GIT binary patch literal 2435 zcmaJ@+fx%)82=rTuwh++LVhshO*7hVhz{+Mf?ruP+z1!Bd z_CDkI;!9s@AAIOcCuwEcx6X7r<70jAb9w1M(CK$}L%I~EFtdBkcfRZI`+aBg+uwJ8 z29Uy6DjE<{5Y`YuBg2-9e4bzKcNTPWrhjZ$=Y}=I(D<}&>h7})p`PB!D54CpVXhmC zU8Cl-Wf!@tTc!#Xn-pjoHlvxL$y1Q$3{gk86S`{%hOIqm8KK|c^)54(l zyqKT_I%-k*g4>_6iY3bwrb}@ZJixFcSn`x^7OaJoWjZc5T}LL?so_C%F>E8}!(y73 z4L4<2juYM1$v8unT@ZGfFIr_+#V&-TuRR*}VjrO+6ZMWLejqtt zc7mIHM%Z40y$sEDpDD|*Y!yA&FWYs18bc6yp${^|gLRChc}^HA`tYz+ZC3CI!{)l9 z5zBO=c#IOsaMQ^MTc1{O2v11eC;!DO*d@OgeK@RP0E2#?q#FtxC_qZQyq{s%9!w}B z85O{_56@|MUgFwLSRA)(eThuDam3JP%p$c%#Sl^ohBX|;2ty+1%*S?w=UvNQBr@i0 z!Ci5*SaKKrBZgfPnbBU4ZL56Fc`d1RW>A82T*D~F{C=!jcKYRPY$W;ChqQ(hl8>^D z<0XEnETnW?!zsK-Fq3qM=jUc@t85l%rULkQ9VCFF$PmF#TDChYdGV5lNlejv@d6q2 zt}$4pYhZB3a~DP4$2t4o#-HM*Fch4t&2qow;xStst2l#KjmPOa z$Z5!f;&&AJoS#DI$rm84hm{Ab?fvl36e5out7{Sp~XCTGF~HPL_)~VNdv1OI%(f z#w53OxvvSs?yT-GY)aSfHkyM_ffEJe>-|f57($dL^df~&E|s~VyQJEZt8>F+14FBC z>=#KBPF|Y|L}+h@8QQ$#RX+NYO)6TR28J;38oo};laiL|b zn`;AItfdjxRD6h!6nre%be*BwyLCLq=;pjNCu;Y;Pq6wB-wd{~rsxMg&dq`$obI$` z&6P`o>yZvf))-DKmc$0?=K}hxlN1ouT%@>RWOP?Zq(@Ct*eQcMj&Kxw#;|8yO&g`E z;0uP%|5qg<`*qPLLVktTo`Cf zG)je6rSk)K!2zWTF`&qO-(Aes_EA!!%=IaHN98-2Xp9@=@H?uk0VR4~KnFb|2ty$x zqG+S46SV5YChVpk6$jBwAB-5r5XU)ep-^pv&sLPtjw@t)729zGJ8%m-afhsaLKl7^ zRPT}X@94%Q@_yb&5;h##5vFj-o_VWzT1ouxV}Vv7igg2*u}Jxh;X0P^8s&C_q*w4d xb>t3u@dn8hij%;bw2G3=TV&sWxA6|Wn`!j{`F_`XzK2gprqcdXe2y=X_y<-`jnV)B literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/IntroPanel.class b/Neul-main/build/classes/java/main/IntroPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..284a350b4c56c91a954af74df881ff0b937df831 GIT binary patch literal 3783 zcma)8>3jn!u~o}m~e%v=RvSr8Q#|Mqxa^HRD zo_Fqj?}Ptbeh)wtfA^vSE&*;4m8fFyAD5=3*-&mq(Z)lEh9pf^8LA?RrkGs}u3*zh zH9V*m;1#h6B7=88GY#D_^rm&*Q&rg@SMfyJkYz2pG8Pta6T{7Xi;y&9hI(`(BO7sP zPS2ZOY=+BAzH3GJv4x>JC!6*Z!!5!1$|8GgP|~Dv*$6j{2)LQyrj_ZauIh#tTd|Et zw4J~Q2L=Y3M!4%8B5uL044cVykCdJqH}t%gVc1gU-day?IWIc|>~ipyDCyB>OL*(C zn{Tm)Vf&i(nkgw7L9;fkK&=;hal3$hB7$gQ2$VByGZ2%~rf$qJ)DmHmDfecl%sG3C zVK>J=&}0!%LXonFbNCB$s4XH|(Ppz&T3K(y+ISHsF0}r<<5EgiJ=o7M8<{Y(YF8wq zOgH4rIaNNe&y;7)Hc3^+wa$jLteF&I!;F$KCpsJUcXaFx@9SDReZJx9+fOb(ccx+a z;;E(6&$dQVM%U8G^GmPKFJGX!OJ|l}KHIQ->ip6h?=)PSpTBl`Vd<$;kr3_D6$x28 z3b>PDM>$6cu0;}2&XhDW=S4g2=Dgp-Q0MTjN+i~VX^eBOW|Rts}h;#kpyMgBm8uZUBngju0VM1OmvxmU5O4_2f-c*E~2zkuJUR($(U^ z@`VL2Mv?H~lMLdu7v`5=JahHZ6U!H$=E?M^h{qr?)THw{Q_m_VWZT0^I+S$hc&1SO z6j5441~M%p%`3V#BpYM8k(DV6?+jjFFl^ad#K_YWcBtE06<2bm%yW$68y7JFg_1|g zWY$hI>?z}WLkAobLs|fpIg1Z#ub8UOl+t_>+jxTMBBtp*1P5g9$I7eBM@cMc?iWZI~=D|hcGem z*~w3))ixcL&8C!9R7%eXyGIyRDVxejjhZ~uNO#Tt4HAE~T$iV9FRuX>H;k~}dLyH? zyL1ry2|aJ5<(R_5tXUyuwT+Ls+?<#>-uDVDr}QceifFDIJ?;khv%l`a`XRx(%$mMYn_r+jyEc)YC_c~5C3Qxda8R~CrN~vgbf!%Zn6?EA!`qC?vT5f7r;x+od z4pdB_iY&k;nu}n~E$>2TUc}~P5j6$)sJS)id&HNl#q&kf6%bfN1Mo+8fZJMYan9v(EugUga?+mkceskU>qy&M_*enqwncO${RdsX?M3ty(A(xeTtM8i z8!F;xr#s-b4Fhh=@*%hHm~9zwJEo&aKLL59vvLvC`~+`SH3upS_*8SCioSu$mdi+i z)HfEWqULd{>A>$40>X6x@S(}1+jj>c%~A{jfxFX2>7N|(f4;TRx_}(-wzgScUvL3) zRx9AP2VyG&f;HgSH@EsfTfpbvq!XyX_vm|$3NcVk=i#NVNOgWQZikQFF10vF5C1`I z!7&6NV<%M9<8kbwo8>k!cVZCtvJScs?m?IxM1=L>0DBN!>|uK7Jw`9ParEE~LUq*E1ip_SP>fG#YX!YqT=+450vF-=CoWOTO-L@`O}s_wx`J2nHnpk<#Ryg)gy!eql?3C;cs1$=9D zgDNrr@yfZe9SKf0kuk;nQ_B(6z3Ux)cLPW5H*!RjF48s?_!)lgZ1+1Fdk?>)pWV7b Rtv}J6m$v&e{(`?D@LvHq2M_=N literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/LoginErrorPopup.class b/Neul-main/build/classes/java/main/LoginErrorPopup.class new file mode 100644 index 0000000000000000000000000000000000000000..1f21530b5bbed3d0caafb420a57bdea09027a99a GIT binary patch literal 2557 zcmaJ@TXPge6#hEdFv&8I-37wc5FkL3&9ast2w9>e5D0D{vN0IEcCwSrklE>VW;Pe_ zf*2I#MXR8U7c49RU(upANGzW%OaFl{zPig_usl7pB$JCg?DTf`Ij7J0zVGzR@Bcph z6+kCG4Wa^-3IZysu!13Uo{#ak!Ocwk^x%1I$YEHK&`sTGXQ*sy?pILFutpk9#O-mN z%uXKFxgj#u2$E@O`gZZobPx(u8E_TDuBN0Ll8-y_E{kWiHgE18k#Z~w(RQx6U%J$) z2qDa%*qW2lFK7%^P2Jtz-WnBav5ujJ_L6*3x&6v)VkL^(r=CBZEpl zXEa;Czy}Qq8fYq?w^_v&JjJj&qdA?zbTrfHP0XT;W>BB+nN1F_i zm`BL3H;<(l+EqM{7d*kqFa((oPr2gK5JQJbt#Z^;Ux#GOCMU^uS)E-fj^hM%2u~B4 zExsU~VvZEQq#iFSIJvl;I`WPq%xWY_P>;U6QM&mch;E#c<(wuVEQ5(udpFwUqa#9H zol?<BBpQ#Z=Ce?!Ha^6F92x}6iYrhrrKNs-abW0obX zUXjb^sBJq%ntHP~NxgU~pB>b!KCho6vN4Q)Zs~GfUJN)RI*}AkE{fAe5$q8$?nd^? zpVP=3EZ#lU+)oVTxJ7_4taaI2WI_9B_wplN7VejUrJ}N$ZPT5!B!b(Hlufl5^%!3g z!&@ek4F=B+rg`I{yc?;N_bpH8ywv=39FyFVq8S+Fv*k%fL{duRts$*TmsjT6MJVo( z-A6Br4j~-dv3RaWb4Enk4q=jE>;I_X@$t1Qa50Ft@Q#YNVbScpAl}C%1s|xmj1Ngp zZg0B{tD9qDREsBF0O$}tOqv!Jow73PpZ!rj)9>Wvbb^~{L$e!`LX75f%e;I%7?wKr zP39K7tIDZ(QJ=W!9qB)6sc*UE{Ks~3!$|3lMvSZ7CiPvX!EIZ!6@0|7a|tHPm8ak; zL;aIYNwgjo*hVB&(0u_^g5I@QLC-;&#c5C!jyJ3l~#i~ z1hE+_(Ll2Us6_%1y5QH~EPaHeu@2|y!@|KvOkoo~C(AGBE8sh_zDt-&cv?INpp&Hp z>uZd{Ab^e&;#rsksDr%_$e}V6lwII~hl4aqMyd#e*XL97kgs<`*LenRK(Zv-YzjuN g9^`3OfiaBJDEWDp)+TU)ep9p(q?If97@uI{f0WC_pa1{> literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/LoginPanel.class b/Neul-main/build/classes/java/main/LoginPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..18da855c7f7a4e8bf90601bc2ade1a6baa5715e1 GIT binary patch literal 3824 zcmb_f>w6Se9ez);o7o)(*bUc#76Js=EP| zUZ!C=bbNG^LNkAcLX@amk zc;yUTNidr=Y?<0#t7V&|?a7r!4R>H`iPL7e=N!#RUdqI5)9^mr#rPR1(h>ETk6VL7 zR@Rh0Wkc4Ji=9R`SEjE53xW)EtA@SUM^+E*YwKze2zh}r8JJZS zSSBBhQaqudU5cxTw!Qnh9@_iBo*otVqeH<5G(3P#0o@C;*|Jln-D)Hq%RWxyOj*M* z6X~p3S`lcNMVEBg)>|TLs!sY`8x17|7tTQq-8eKA5a~f+RmslWN^<)>l%KqCYVz{+ z;`#Fm4wES_(*0fLnA4gzGbt6lG77yi3J(cr#g|VNubwPkJN?g#41{q@AXvq@+$bTI zb&p8hBWP4$vNUFSXdZSPE2|=f)$-9OA7nO#&63`2)od9V4TH!EEF@!TE8Ah(M=g8M zWLovl-ro$|CO2SH`<@M_>FrIzlZfUBGqYij>nV}WIcAnELE;(G@DY&HFcW(AvcOtT zyyi3@tEm@`hGC4bPWnwpGApn+Qg-dFaus7ZuHd5@9+A=^$yb9%fX#yKU{EspF%2Kb zqXP42af)*;N9qp8rIk;}^#3IDIC3~HA)Lae6?{g+XK|W32Xm&)ydOy?85L=v&8-|c zT1Z@;WfE`-XEdC}=V>e>+poaJ@}@n=O0;{iHr4eic$|==H5HHHoP_kn_pD9OUjj4p zf`%vYWy0Ju>TD#TScL&ljJ&K6!S=9}qD?_BRp33Lx zEmquF$}8zqS(xA4suoy2+u?Mtkm5t5Q{qFTW%1i)i%+GiyGoUSi>TQl)+MtgOD%#T zTE-acOBuCUbF{Wm!2CZ|zw6Dt2zYC^MK%IANP^^+z`ui#Kt-C}sJdjxTMt|r8s&lA z>F{pQZVZ(Jsdie!cG7H3%eXC^iRKnr>P*&V%W`s#Z49-W&VZH5h46EM)$h<`rhqQ2 z!mIL1@=FZ`jC1swieKY(1;5eo27b#fHPcAa*%9lQ$%~KVlTM7IQ>W3qLGS1dZ;h9g zN|^S!#gnT|Sk|%Op*afQL&hw{uH!?dSNy#%mR!EOuD6|*Eys;arZerBGJ)E%Z0GR| zPbV{{;12@p-^R&Y+f(o-9;WXu%4=bX3#?%fDtK-&`0~QaZx#IR$2a)=CI|mO73U$w zqXmfQrW;VAB9Hme350t>heJJKTq%qNn<{0#>!xPhd??^*Uc@X94T;h;SUH zT%Mw#h$~!QAFjxRc82j+)J!VuL|uXmQ-jJO;4bgHa`?obcM4WVR0g~E{_kp zTYpfB2lRm4)|1onM=0MH3+h2ReZ8!ZoIr~EDd1>K)m5&D2jxm6kA7WsiH(H#=TbGG zt1j@g?$@jGc=!b_N7(Sw_A;uw&J^^zOWXZidV>i7)6hamsvVF9CE zgAgy*VZ>0)Tj3%c#$p&)hBSXDj6lZ;+>X;&#e-rszD?cnkHyhs|O>wuqIuLu}xUdmHW)_h6eyV7oZPyYf-oEyfTNCvlHB%`5Ra>=qYs zuXvjG-sf?jD4+w+5#>-R=ZN_VN6bDqH+eM|kK=hFsX$uXkMH0GRPuJvh!;8MBeMVE zyZ9cn_bvPs-{)Kv(Y!#^FF_%mCvc5(0U~+?KfrYaiOIkX(xiq|*@sFwk5_4{if(sD z^T_2f8e__h^=!)HL;)vb{&9Rt_sK;0+$AiZz+*jfRKOR;@dOk3;uQqzt1svAbxD0C zB=xJH@YzDzTd@@TNMaj*knG0}B(Mty+%4}axpcu&7`t7F!u=)-Qx@rNZt*5<25}cA z@I%5}%Ao#;-~5ojS1I*x>`*YqkDqd{aIOMBAsKQ_Fl3eZ8Ggb4-*HCe%{2BWH E0NyzpHUIzs literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/MainMenuPanel.class b/Neul-main/build/classes/java/main/MainMenuPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..1295681f843748c221a7114bd094eac257fe7be9 GIT binary patch literal 3032 zcma)8TT>iG6#g0(cA4!Bvl~gWNz6@RU;)V$6Nncei9r{FE`oR;*a=KB%;4;761>Gr zyhIc4_v@o?mRgmiN~$c&Dj&2gU-ZE$-~0(a>5JvpGq5ZK6DyVBobJ=7zyA6=r}xKy zzWxS4FFw^!h3Y6G5;dq5NS!cF8E4uHr!8lq{q{k_F>Qg`gO+3YHw#oZH4oPzhPo&; zi8!P{qTjHbe$y$=$7OqgC*^KcX?fmP+{Ue|U#4M|+1KsOLyQ(s?S^RP<2R$?8}gvHc7 z#`wtz&n-H6fz=i1gY`k$4a*OlHO5RkhHC{P1BdU@5BS-s&4h!guq=lzah<8csUf|$}>zN@3YG$v*K6He{_b6ft+*6S^&)$BC1L)*E z8+me;sld?dPEEUxsen{&xiA>TL2|rAJ3U3;cbyn0o7${9!AsWAh0W@-H-;X9$Qe!{ zpecq!0$Q(Oj~8vjS9jZmX7yPc!%-p}a`VQ_jzSE#3&gq|!=5Qvg%tIhmFUNSK)o^U zTdp%`ddFRF$|UwZO_xir0=apLM``a4R%NY%Z#op3+Hp|gPTVDsBm+yQ1-4c2v0{Se z;S>b2DV7vJ)u4Vxa8DGY68Ea&(wA3*fSfd(ylpNJG=lpj9#FAz!X0uK&Z_b}B=NAC zSfwTcM*5s-Md}E~B*x2Ai!=tBUA`rSL~-}Jd6TqdEyo-vPK}w~kTGU+B$ai?4SU$| zEalG+M*K;OLaEO#DfKR@(6@ZG>Y6|j<*pGF5vQdcTze=4f>|0B4l_&}3zQP-zJ5_% zf$UjaW4=>a$?-6J#LD}V0-}%mgd;~yYhse6BhFB9GdbVz=u}S_)6Bs`&1@tC#0#Dk;)L7nVbj;I@djxi^prS>9l^Qs#1Ql>ANXW)31u0?{ciFwv-L=%+ zNqTZ_(Hl39Si$`)xq=&1!BJK{uIm?k&zSBv{Yf`p(D9tW=KoOZ0@C_gyr4SfixN-a zF?ug4?`4Uzfp<}PuSh%@c&{n%b%{pqk=? zXR)cjbq-rcQ`bfG!C7oCp{eyNw3e{5HCZ*L=ab?!Jzv6}42NzUnM2oT>ZV!TGSH?s z>6`St-c-V^nYM6_S-KIXZb$*MygG3C`IaiK#C()2P-XFMHG zM@l%%KQ$#BNyi&v4RsB*4N;Xg9WU>Bn+ld`83xNRSO&q`!{vBcj_*_PiF6{2PlWLa z6<^b!O)joTs1@mW%h$LADB)OI(#(Zsg62?Qw$Zvfu)ZYWRXEP?C)mMn3=!1vU!0^% zY~gR340LqzneIjk$FQ2~*5Dzm#Yz4sc?26+S{rc=*Wx@j;UYHU4X%2Z*ZL6}@fo(` zb6k&0%>5mj@B>=#D_Ze8+VBTo{Xfx;zp-0Hut&tPSER5{H1aWT!G6(!1EQM`cNSe@ z7zZ&ybgzU`z$7es6h$BzzUrb4Cy1zu$o_(jDLzzZ@f#etJkL4&f@$tlLySKYvqwo? z#E&S@iW2Yl@M*<}`dbuf)e-v~PSMhMf-i8I`QpU=EY8r9M4Q75t%Rch($ literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/MoonCircle.class b/Neul-main/build/classes/java/main/MoonCircle.class new file mode 100644 index 0000000000000000000000000000000000000000..1d0aab129c16727cd210d6a729bd75b393224deb GIT binary patch literal 1514 zcmZWpU31e$6g?X$k)tfcc1Q>gv{0ZZj)|$uS8Mv=I5C(wc8Y_GX=zaG#RwEBl^jxd zWTt&BKcUaO!Gk?RW|%&9`X~BN+TN9n9Z$yNm2~gjbMHC#?*9GnyY~R{c&K9piUyTq z6k`nWC+0Krm$biUIj!{Vb<+_x!`KbWvD#lVD8_tEL!=j$Huu`;WouhFzU4YPH0Tm# zf??Ds7Uyd^j^L<TEk_PZVVyyO;W`6T(DP-6WBrnrOy6o$+n)PW=yVDSGBGt#H3}hWk>fU2 z!+8tCX!im7p{>V%jiVg!Z+hmQU?|JxhM~ zjB5L_MN`E~gA%+js$9a(q?fIFxLemd|WI8(_d z_q<9jbTPB=ClYI^w>bG0pLFnPY9GnEq9`(3s)KYY5{Vj7ql3@)akV}%A>A?j7sEeF z7uVz2cs8{B6~k+3>EcE?b+LnQQiKt13?O6pBZikULW1riU*}z{ba1O5R~m52P=&w* zG2%4lN9ZPt(oGP#`#yw;dh)2I4471JrDEMLnP^XHy;jA6Ow=-v9sr literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/NEUL_MAIN.class b/Neul-main/build/classes/java/main/NEUL_MAIN.class new file mode 100644 index 0000000000000000000000000000000000000000..e3f9c57ef0fa9f1fb3014ebc6a2dc84d0f5d6eb8 GIT binary patch literal 1699 zcma)7ZBtW66n-{9Ual7ipg<^E#b}d2h%aqzjn!&=LvNxbfTezLmSl;mH@nQ<8?3*l zzrZix$V`7gr@yJwvq^?Th>Rbyd(YW(p7ZRpXE*=+_vvo{CH&zaf}t3OU5p^gkbJ{; zdBNwZQFylXM$|%v=q;&ac$;A;liir4thkE=9I{PIF-&K&UN332r4--tMbUwa(HO>D zj3db~XG8uh1n(pvSM9hSN?(Rj1PrI7+SPA`$3tNlW-^2DvKui>62Gc1#Lj&l@~SYq zvL+l%SpH{-$SPNL-E0S}sBLYUJd|2FIBf%FZEnp7p-NhXM*F@n4rVZCH~tO7M8V>2Y zyt7pg&Whh8*cSR{-NI{ypFPYSb5Y=+u*itu-8tMw6vsBNT5nX+{j6Y9HmJpbSzKojaR#3 zcjeUOQ3~N%pu7qR6bSF~ZcDA4Qy)0|%>Te&K=Utf_-1x3%a+^YW9{tSd*^=l-tXR- zfB)~De*!4t?-_KV+d_|xP3RTKUXu&*`CN3}^=ETWpA2P93G^OyeK$TP&^b zuhnvm*!6O!WHdJ^>ls++-i$4*_mQ}dmRtc5Lo>KJ_t1_cJXk#z# zrLyZ^4O+?rrSsCC32MeTVjDm`J{T(8dTx1qS%- zgt{slUR?BoNS&>#&;SwW8A)}=Y>eXoJyEw5RL$q}%HwlEO$7q?qzL5oI9Cj6^}ttt zObixs%(qFm`6R=cl3WZLaRvvIf<0p6QG7@zz4eW5l6cmd6f8Wxo+75i89as~nn6zp z+}j2u@stvPV04WOHjd&W0-LovW6e|>Z!OvxX+dZ2xQ&nEVwr-2D4QeZJ zZCtc*0#7k8rmW&d?zFB{&&cJ`N*_MXI=Gr+7AB}Mp_geWr*K+_QZiNTpk7kBGd9lR z9D^XPL`7h90}gBymv(=i?!92v^({=%eMv7<_hp>!!$me-J2_6uyvBFN#!?Ejc2unG$r+_4U!}XEmQ@zr%bOm;#6}Qr*-FEwK0o1I?|2D zy`s}!zO?i|}c<`7V_R>*S7e#yp{af2;dlk`IB_@T8A7ob?x5sb$`EX<6HPPnG($f%-;$_ zlb}tZRoEW%it7rQttlttM#!E?Roch>(N1(mvaW}Z6$FltbPn*&Dg9ofc$8RriopzF zY%jUKI@734t8hx1X3pwK=v8Fs>i1OG6VJKK>9&%g_{#91d8lSxRxC^!mMRB`Z2f8R zemJ&rkgT3U#O0ggG2597ws&2heQeEg%=3c>WQs1MOR+LCcCvleBj7X~8STWyfT*kw zsn+qemwNAUfU)(nAt)8AkUrCSuG=at=9k(u^{ z@2jxr$tY5hg}(_r+!518P%XSEuNh>!U;$|;k*3(9wq-l5B~t^+<|bGVO_d|%}dBQV@ufKj4xrAb6^Pr zPWHYg_Bs8VZuj?~i3gqDCiXj`35PZZX>(`^hq-+0lJhnW-@%8MkaxJuH*xHu)6>M0 zZyNXC=Wm|(IbbW@ZXvL3*u~#L?7%*TGt9Sx*v*jk;0UEf-n7m$oGZ8w&*6UjfR;`I z7(c|Td?R#|2w_$_1v))a-_X#_Ab*4(r=h;iu)F!K;$%-QK@ zN>H@$SM=4B7>UfF?&A6;O8nIYI>vZR!A(V0z38hpFvgh1&8~YAt=6u+X;y^3Tcmrv zO3yk2d4`@DYeL;(Oy3*W7KDk8$SEE&F}gDTl|G@8Ls|{H}Dn){|_b! BS0w-d literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/PasswordUtil.class b/Neul-main/build/classes/java/main/PasswordUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..880a89019038dafa84f81702f012bc452db764fa GIT binary patch literal 1444 zcmaJ>OH&g;5dJ0!nYgS3q5qG>heWX`ye!F>tR}mu?8e7gk6x|f zpjDRT;*6oL}VPRQXPMp_s!XlXFoUkt&maQ2X!EiX7TFaES%es+EL~5qS00{-HXyXW| z*o4i$5v_$Y_$Wj2p)D*1PdGA_l=RwFbYKe=k#%Tz!&6D}acpJi_>)4iq8GBFtRMup z4?75Fe{bId1-sD6v0KF+>}6c52*t(|9c*U^wqFD9&aExJ( zb9XwIpFa8i;lm za`uL;7pPU|%q%s-pVAF6QYlW0@^x*xK$bwt%xHxPt*py;$LO*1I^C0&)OwHvf#x+U zU$;@^jnc2{lhYIiHcd~G!BwPo?D+3RrcXg85n1Q1x~62DMF63{kn1fYaH_;1v-*Mj zs}WR(ujGg$>tAchD&LK1Tg%)X)=E`9I4&|MX|qz!h#_5y)>hX*irXUrup1|7R>+?V zOil}06Z96NozdRZJrDN2>OMuQbj$TLt!nK625^SnHsCA<$wI-bl}`A`b}PUaupxD@ zdk+3N1cw(9nw-bBkwg8Skmqx}$sP9wy}_oJ=n8p)-Xn1y4Q%&(f@{(pq`;l&1?-zc z_~v6Td%N;2I)_8EsYUcn29C}n{-v6I4A;;LHzc<%;s7*LZWVqSUL9y5pC3cCr_e?x z0~n_{Be@UIsa~`rNz;^<3=q*m)&mGc?9kU9}So^_^WK68sEngwagQnpVl| zod=d0y#t=gtvn+a!qIb6q3CrA0;% zAqL4(?6i78VQA{>-wyhu>l(yWb!$q zSn35nrV*&GvwGfU8C&oeLvv2ClZI|9x;?~ovS{t>S`1q3a8)N%30ujymQB*o3^RZ> zY!j(&r|ciyXEqhi| z4)3;=89T}~HK!lS5CSE;J5m05u6*ZW`Nu2wuiyRW&c*if)tlwpm&;eL(2qUwF*8A9 z)N#~pxIR%Ni=0G(s}0#N<2X)`D0r6Y*X;pG8nrrjyXe89gp&^| zsIO?-hVDm-dg%V=*D7D%4PXGLL^`Lb_A78A8hii=@#zbbkkc}T@jOEd&xjToQp|C~ z%qtYxe%HI!2CiCrJq@l*QN?3N9LJPukqoH(0{N_r7cj~Yq7;{IGi>)Hydr=r!53w` zBqSK1{vA;*l>{i1{)&uO#cd;HRjXiFiUdwF9hyF7nua-K6p96sY0}7&7F$xJy;H^f zm|_mQ`V9*qXd~QI#k{)cvnN!lP;<%)(o62vgyF)viPyTLMu>YUb&U}B1#S`*3~Qab zJ!C=qS?8vsiY(o)QcCIM70aRvXc>Z|J&ML}OuDsRhT$%g$p($*$FjWRp}0FpxBFHu zEHsC9hI76c_c8o9>a`qn7(t zmF7J*$u%vl+6t9h9?(f{NsU{UVo7+PVdpYVR!UF86^6D)n^MQRTwog&p^mNzpdR$9 zqLIF1G>g&5Xl&@72m673)FDG(u?_f;rLXK7K*2c8nvlZ;t&lT|k)4m$zF&Ye+8u84 z&0|$65@H{R@K*`V5mrJtQeQ%Aq=ZciXd4aTw-Eje;qQ60m#`z!T|(CaqNCwh{XF&# z_AFrkX!t2#FgTAxB^>SvwguZlY&aM%;Yg&XgkxtHFfbZ^b{>PLq7RIl9pj;B2seT= z!J*)e5}u1hg>f`;4`+Z9Mk2lv&Ml_bj}V3Jr_`FziU2la720Wb04<0kO!xX4oTYy^ zvRH@n^e=>sjhMqGd_tC=(R=?bS>Gm31wGv^1yIRSko6@dp%FpHiSayiBGkrS7$~4V z7!WFO$-_Y!MMWBjgqIgXbD3{*pj%x72aqhOY!-phi-RJ~>M(_A8by8HqO}=Zpuag< N3DC-Ae1H$J@ju2mxOxBp literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/PwLengErrorPopup.class b/Neul-main/build/classes/java/main/PwLengErrorPopup.class new file mode 100644 index 0000000000000000000000000000000000000000..21769783a252cdbee29ff916a5a7082631e0bf4d GIT binary patch literal 2542 zcmaJ@ZF3V<6n<`-cGIxXB+&9|DNvwo8sZ2Rp)pDWg<=Yo)MD}VCfTM-H@k6n(-(XL zK}Gn2Gom;Sj?SQt-_&7Jq>i5*NB@Ce{A$Wya6ET6q}vzy(B0m9&w0){&vVY*{QmF# zUjZa>Er2@IOYq5PKqEu&JfGq*jqCZ?>CAa0Ycn*)Rb90c4E3E|qZ0fK>xI!w%$ioo z?Br3EYewFW0GTe_x>Nb)Rsa%Y0l1c7PiM-369C4PmXp;Hm$D`8(Xa!sZb&nTK7k29$83A>;r;yHDy-Lhvj z<>|e)GGj-%rsnm-Swf&<_a-VoU#a|XvGUW^2e-X26kJo>{l!)X~Kc!8mrXGM1mE9SUi78J^? z*Y&P-fIFytp59ibNbJ}V$1$Z^Gy$Z%Kt3zuMT{|osKlkm3_CpquL|H!-%B!H7Sk7? z)*V$Xm1a*2`KvNs6Bmt?Q>~(5DH1r{I>XZ`Mb95IO~V{Eilrh=Y0}8iC^n~P^iGuu z8O0oN$2TnIKpW+zD%RCapFN?HO5xOUpgw}ICX8tZ+9jaYB{gE)d#P)bG$?YDC}G&( z=(o&*&U4OXN6IWcuTo286%@;&J7@)hGk%nf-UO|otb*ZNr80E9=QAQ+F+9;V>Wk3~IWXp0I_lW@{o%#*KwrrCZhZK9l$XP+m zGHm~!hIkmixe;#$@H*a-@div%9vDQDTe_H!pEtt z4U?j*DR@_ZRAYLb+?-BuJ*O#FN6IiJOT|^bHZBh<9Y@)#WCPRj-Ik>00rZ;YC;|pv_sA;Ms_~h`)(f6Sa-O| zH-|N;NQm7C;jc2*MOYc(NPQWtkutW-qirmN-$M8^gumy|UdFCScNtyth>nG0^>f%i z)H9FXvG7yAU~mqH%Xqpc*cNOHv5{cBj3berGLD^{$KY7_xj77-ias=6=NJ!1L-;B< z6C4iiD&zS`R2WAi_i+X&V>IF`d#k+q5@>3-ot| Ob^^5XK0d@p*!&-psksjT literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/RandomSleepInformation.class b/Neul-main/build/classes/java/main/RandomSleepInformation.class new file mode 100644 index 0000000000000000000000000000000000000000..9a3b53a712e55dac3cdb15bbda4c945bdc16ff4b GIT binary patch literal 2199 zcmbVOYj+b>6y3Ke%`}X(Org9Kra(*DVypNA<5=$G8ro^$rz_nh1Q{m-BG0CXbe zLIoU7RLWR^Du&wA!B2zj;b5e{{b={;P)~xPszZxti9HMscXO8$(tRL*BBn+9CAb(i zmgX~jVT$L@^Xa0>lau;vLFK7TDL*1XW?0R$I>hid~Q~s8!@s;m0uSrtFZ=aov4?w4(l1}j|U^Y(LsMW6gumT^hINX!Gso# zFu3}o(cTjSBq+{McgnZyg(cG?VI!$uqNMWaQT^(ugeS#rdX%{F$?GZ~xxwdWBy1*e zG~o*~re+dgi7e=srzEK4m_C=ZOfwHG$BfY#W27KqD-k8DEYnB?pPp3p3p4!6tc302 z?9w&kQc=$(X~L(5Rf@&aNeN91>v$^1eN>S+T^akty)hv|SK$#V=l ztVP7IAy4a_AxZN%d5}oL{GC-kY+f6^|;`{e$lvZFl=y_opwgUVd`Bf zYEN^Q3kUJ06J8l_;Sj^x<%G*Hs&{96V5qMz93s}`q0B_hU4r#t8AouGp)#(0PB3~7 zye=HWaVPvTPT-wIG3M)WIG7k9%%DbnwZiT7HhV>glQP~#KqMRLw&bo6XJyoFVaISv z#{2kyo}ZZ6t!BRcl)N+AOUY||S|oI2Xs|mJI}z*_tQB9hCm8Mu#x$|EH!BkZ8fjba zdvwctNNj&7VI3YUYktN35GP6YWg8p_mpor&`W{P-G%#oUa#!66ZRMGE;w3?$iqj9)p9;`*W3unNg zRQm&!%1VD=h4O?yP^HxP15RbN{}0r))H*H127%Zl5Kjrj7J+E+2P9>iKTunxG!l5n z61YWxcM5Qu06!zZy9D@o6Z|59ci$uq75IpL6=DctRY@Ehu@c8oi;rnXws<0lZdx() zpqIW78sdZ%nj3G!6KE-*u83FX(dla~;y|mTs&xTAh9cfxK$in~0y@k@t7rsSQiBbs z!$vbny%oq#QiFPg&_~Jo2`LCzI|DS+Xr}_FX?EtZM0WfaB3mf9N<mO yknIRL@g5nn``*PfV;y3$X_wG%87=;|0GdeGjwssj#L=dHb3}?-6KKU0Gi^P%u literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/ScreenController.class b/Neul-main/build/classes/java/main/ScreenController.class new file mode 100644 index 0000000000000000000000000000000000000000..76d19c762ba6ac32ad17914a52433ddb4ae494be GIT binary patch literal 3532 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 A>Hq)$ literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/SleepCalculator.class b/Neul-main/build/classes/java/main/SleepCalculator.class new file mode 100644 index 0000000000000000000000000000000000000000..d4793b58508818d16ad4cc23f1f16df3ec3ac26e GIT binary patch literal 1810 zcmaJ?TUQ%Z6#fpGFeD7&5`^NVKua-1OT5)fgGiwuV1U{nwba`onZlIGOxDZ^%lh0t z`3H0@-+e_N(DuRQlMg=n8+=lKfopmB&P>2Ssj%i;_W91<-@crkpZ|XN1AsYvl13X6 zCJYNnvN^iTcwsps@D1r7V$8*%QKq5D>(TNVEOr$Mz!V<_t@P=~SLdgjU zHl1+3R#$f;^kxbfberh0(2G8Sz6h7&t!NQALb(iv29Iv75@R|%%AM^IIg;#J%V6Y~4?K$78 zNOi+eJ6wfIdW!T0a?6LtB6rFvaJ=oJiPr?W%dTzL=cHR{xN$&@IloHs-6hAfR~xl0 zJ6M-nE+u^>zarfY88~|16dG#Bp^4to2|Y!Y57CiU`^p}(wM`Y{xt3h%A}O941OZWH zxT?*%p#Gkd_XI5EE9o8uR4lUsWo+n3IB=Zu-TEQz@e}%{;{EYlOw)<3vXYhE6Yy1-b|hJ<}q3x<74KwAJnA!uljRMeaBfeZ?|TS58yC10?8d+BdnHMToakKarS8{j?a+S>IQo3S@o7Ry%$*>_C|@6@PsG)o=UvM#S$2_qyBhUK$&? zVd8yVV>boHqIVflalAc$*Dl1h6qntCtnf+lxqs1gq!k#OS(IMYwZpNJ@9#G1#W?D% zuC+*-7UGNR%-t#QTP^swM;%sFt8JFITV~5(KCLCsvx7NThM^sr_(0&oBR-u*)x<{v zXa66{_89wxQM}4ls{ayThS1LOb?yqB1?Ob`JBV+%Xu}&E^)X=JGDj;0pol5%Qg{>7 zMCr@F5Rv4(nEwe@{sByZFJXR*uKm;uw^@PJiw`iUr9)giE$|~UmyO{e;{YRa=Ieic z9VTo{;C^j(^n2v?smqA$pJVR=y7-@AbM8eJee6J4I?>Pb0sb@$M%?nmPZIkU&kfB4 zGq}Pzi%Xa#O7KhKD#rxoDUW^8s0Hrc=9hudmG}!ChKVzOvg0mN)`lhexr}#sU;BBp z>1Q^7fahm86zZXly1$d5vc^$ bA`RE@F6Ry!T<3Qko7|P)(NSjDL3yG+-%kJ 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 T?aCiAqWsN&YF1e)hK6qebQ~E> literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/SleepDatabase.class b/Neul-main/build/classes/java/main/SleepDatabase.class new file mode 100644 index 0000000000000000000000000000000000000000..b34c8067eaa2015538612897b86fbf6210aab379 GIT binary patch literal 2176 zcmb7FYf}?R6g>@rn91-E5Q9%dcO@YZpQr@li}kSvwTy-3$0q5*(U4G+2^LlUsNJev zu(WD_!2YPMJ>4^z3~?y%%VfH9`I=%3B5Cvk#7mAX>ftJ0Gdp5rLsF zXhXJ?K)TkA7Z@vte+L-FBu+BQY`;;}rdzWxigB%LLZCETHp)C_OBKq^s;rY<6(gIg zZC83uvk~l>6e^zUG&YObbuDnx#%W{(td`tSK7+tafEx|>rTG!&>=~R*;+&21xF9ed zql4Zwnx6$u&t@Zvx-upOBndx61WnB9~jd1oO+?`w7jB5%iEa8g1{uv z4uEu&uEZe4Ive#n>;O%1&Bk@yU>lNRt=X(~kc&Tw9BmAZd&|acEV2!V`%bA(^<9&| zQ&(<(5V#zJ9(7<%ZWjd-kDE1?W2Edf)XVnPhH~G^jXHP6Ov|iG*U{@>GvR%3Xzob& z#^?)0n89{SxzB6*SohWjEl(2OH$t9@wT-^C%pDGjComC-3ymbo7QG{tYi=Zu9q0^! zBkT;3epHxUr?_Z0bz+%os^V-mq}O(tz|s+x>ZV$b6JMf5CrQx3?R3C!Sh=8RFOFbf z(E@^KGaN=~Rhn(Ls-8Hepni9A^68o_=rVB%q&af|!6zpr-%jwI)0fXXTs=ZR-+GcZ(+(1=lsx+I2{tF4V{io8#-+lCtg7E zj6$?MmdP-`hs%F(@&{>&Hm{1tpe^ H5o`YggYo2C literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/SleepInputPanel$1.class b/Neul-main/build/classes/java/main/SleepInputPanel$1.class new file mode 100644 index 0000000000000000000000000000000000000000..04d11c197c98ae3568b4840d5b9350353d89e2e5 GIT binary patch literal 1780 zcma)6Yi|=r6g}g_*?2R>CWKcgA%JOP^Dt>?n_@}}hTza84Y4sTPfhGeShC)=cE>!v z@fVPw?cb(3hZ&?WU}2CWjUk5J zHBZXUoZsoH1>s9CKg}?t9=TEeENwb{yJZ{0$XKvBM!*^NJQhzxsjFPCRCn7ltcz%s z&R=kSS6yTnm?|_z$?YzVEOImtyFNoRj!N}MqK|%uqqv)WXQ08YCF6_BZC7tXknb=5WZx{_T|Tr zZhAqJayYyt#!J5Nf|ZKirobj}#KI)UQBA|4KA3#Mmca^TN4UPyzK?U{ae|m_xht*` zo`G}3lJpqHOvoGgT{o-b>1#|`C~y>Ua)WS1T$h}nDLl_?F?A;oO)n2Vq;N(iNglW6qkXp)wOJF9=0Ly1JPptu+Qwx zjwmLL?>N544k&RZyRT)RCW1GG3?zg=mzn< zMTg}AEe}?L7IB(&Twl(2+e=#2Bt~*$7;lKs)$`uspsp3Vmo0LcE;HnANcAXaEr?LG zB{4{b+!O7kmdH~j=nAuIK{ss5Syww4>yyzLofk!N)hAI##B~hEab1hfj+6+M5fH=h zyo^*eh$!9MWk~B3c}}9VwA+@?7t+fy+g6bs_TKkSoITYOa!WSA5R*Wmxe<6q)BFQNkAPGMq5Al4NMRWG&ohnAq8rDj;SClXNA+ z^ggm&PQS)98lZm!7is-x8tFboyPsm#EzrTj4T2@cOe2 z8p9PDr^)O^j*PS5)N0rn>h)o}_zqtH>)5>st5pKLLI!^uXnjTl8t7a~%cqC3NWtp8 z$>JNZH`u?1!|~|YI=&h`wT?4uIJbtGP3&DJz1M{HCywB+1pZ_%^fYD(F@_eWU>rUO9CxWMMX&$sZ=SJVw*H6Z6Hmttp(g*nheRb)0vo=Qg8z| ziXwIS;uk&cdi3Z~P(uav_}O3JukrZ2ldkj}+tYXMd-wa?``-Tj@2x)pr0_u)b?_;W zRrnE*&@iQ))6RD|bB0yyIC@;ObW=j$uwfZ)uLNJbWkMJPRfG_hu(_-mmYcF?%C@Cj zu7qvztZ>kw&AAVd4Oh=9%seyi0MG+j85c^Y8qxG6xYdk(a0r-@P=@r1U zhD9{xlwIIwi@4=xXD0Q^xHf5$)8Iiqp;ZiVUt-E`$zUPP+5ef~9tl#B&0C$OWxOb< zD|SkVZ4?noPR3kq?4=BsP05>c5*5NX%b-f0yG5^@T%ib{EV{qq@QzWSEnfk<&xF#{ zEwSm$Ab(yQ7Z{FjUQ`+|b*m^IO^DUyr!C!KG#|s#j=B<6!(+6~>qiWsAHAdaeWF<$ zmYnWzupC#xI|TF&B?)TAvh+&I)Eq~56uiqlu+rs?dxRNqe@Td}*$vpu*{t(M%*T_P z8WK!W9sEjy(|QxqbrN-$;VHzxN3eLRH3irx^CpYMO%9EvE2KA(S8Z*(38n2XM26dM zVABn3tzvs?6+3%*+}kBL$K*xq@tgJGLYKeUZ*~P@GEardRCu`E=c7gykMjPQxW@u9 ze<7xb!|yMNzbbkb(R(P^6s#g$A1KXthXgrTua@UM-h32C?R*s3>F!9YaG*3sV*bkw zxv6XQfhtCpcpmL@G-`R zm?I@K(%U#s%FlRj;sU7vqh7=dq!h*)#*26fLE87@WxPV{7r4SNl8VqHw@$4q_=k3) zD~U!qit*wiCb~nr<{JZzp+!73onPpRG%wwr6*sl*HqM-i1ux&kWEFbbuI5-IrdDCB z;pWM^(MS3#RMgAiP?+6OW;*fV)znxjXBF6 z^*SlxJApSS4Kl(3)-GymVwB6|Mfh#PJSmmdSEyTuw}_PZUd1(j8%QnipY?lkh(mrA H?<4phe@X2% literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/SleepInputPanel.class b/Neul-main/build/classes/java/main/SleepInputPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..d8635f0914a0a92ff45050d78b661146214fc43e GIT binary patch literal 7641 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 hdfCd~Yxv&5&o+c(-Tk{m@p^tBe^F6AlWexxU literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/SleepRecord.class b/Neul-main/build/classes/java/main/SleepRecord.class new file mode 100644 index 0000000000000000000000000000000000000000..ea2e322ef52fed58d4d14251cba51f0c1a735f8e GIT binary patch literal 3578 zcma)8YjYD-7=BKYX47=JrEN+9p(tRRf>Da1R12kCYihBz!9c@SotUYI(H}Vz3p3P65J!h7Df#idhZTTYt@&1A7G*W2Skk-)wU7%B$`&QM= z7o3t&Ib`@I4Q=Onfu8<>LW|eKX{^Q?4Qpk_bpjp5ifPuS%#!1l1xET?`a~8F)m_84 z9D6ueQ&5Y(YuU5I1Jmt{-KnDs-2#cS0@EGwUBWml4SRH~N3XytPaM30Mgis+cn&wV;i>9ZkdHfI04OfjyZMLQ?!mtk2`hrV}Njc zXTq}UzUiGXT=GxakEbvwuzGv>&-cIn{o3We?d3lfE~l{zcWKD$xEuHI?Q-V|jy=l^ z=Z#9;oSb2o`p3goD7NHlc3}v6G~BD>KJ0Dkdq5`pKI6Dmg8&`~dlIGkiAe2%P==!^ z!iJ>q0OJIpWx`<{58@$#RLQY@!?IcZ#%S=dIm0cQ&(%%4WDXCUkuLjn9KfhRn^&t? z1aoK9zR~w6ns80}j_Ejr!|WI3QDt8nf{Yd-Sv;!a7>*0H*9_M)1NORGeU)4I zSsjKXw|Ca`)fR3*I-+Fbo8=5on39e%$V^Ywm^a59yJYyMEPswO&o^wJ0vL~`44W5W z>y|4mm}5a>PMO)(6fE0(q+UI1x+jgZ6|Q8|)}J<9OFoB-34hKaf>njc5i~3?5F%+3)M>goKc$h96N6;8Rf_Me0UyAs-xegs->Lc;58vEc;- z`y8J3&5|dkjz&S$Q_!^ub%x8X1+$dz1X>eF7YV#%9f!w_rb>k+m=sh%RcYSoB1GV zur-btCEsx`3Va#e6ro{|>zHAeE2g)t;5hU3T8m3CqSGeFlNW1d3-c(GEjD}@V$7&i zik2^>q#w6!(;cfAo@aU*J{8!0Q%$X)YWQ4W^M9N2vIy$p8MT@pCP1A3yv;d_$;(=e zyn{LFpu&*k{|uk<9C`DiE%zhD_sVRR|ME4k3UmCI4m5y;a~!4fJpZM00SPAJy`5Wx zHn{UgtXhsBzmI@*Xh%jx=?g5wDDtkCuw>-4{5YVsjJz(4T;X$q@46(c+~5slayxGz zo7;5*8Zm*K$dxWSo(T&GO9$K3;dVzbtyVzzAlwnqU%zbHB|~rm4r+Y25=eF>kR2_6JSP(q zh|5vHgC7QJ0+n3}Y9~SMx&^4Z>X3}v!HDPid)^~?LSA5D@VA&!Heo1t9ob)z%xu0U zXA9^%5R5zCJebL~{fyY@_?AWNES^qmmBS)-%bMbf+>GkgZYp7jYT1L0xK|+xG&2;^ zlp%Q+aFOXZ62uFf#qpwwA<}38@)BMOK#Dz#uhH^S`)K>##9-$B1?>9@`_*J*U$QqD z-@Sl?i#RgcoBSp5EpG2kCU$4Wl~p#FXEraO5E$)Ee1}bg;ppBYfIV9UowoqvYTqj`Aa{NTN%e)$lMq zkFlrYthu1r86ovq+(VC-Ig3$*lARc1%`0{iwASznUga8VUlQ9TyvF?|6n7iY_7{#O z60!CFU=3m#R%`5m&~Qp?Md|B=v+~@yjtwi-IoU#;0&lP%fpe20Bl|hnCPh|o@)nAe zCxtw)E-wMuPc|j9-IQBq5l`k8@C>ILe!^K`C9uaMz`8?1;&_wpF}#JhIi?uwJ^tRo P6+Wdo`vjliDti9~yEZMg literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/SleepTime.class b/Neul-main/build/classes/java/main/SleepTime.class new file mode 100644 index 0000000000000000000000000000000000000000..568fa20aad030d45739f1d2d7e9bf50a72898d4d GIT binary patch literal 1612 zcma)6ZFdtz6n-X2v(0wf#+0^DTD4FiFG9rnf}~VyXl-#*JZvn|FPv$*v-O zuD`?&epOLGJ%=B_Z}69RjxW#5Zj*4J9>2`Yy>ss~&wcL9Jp22%rvR$hHjzNmK+3`h z(gN9g@+(-=x&Vn8j1 z69%4tP#MEnEE#yi!a1B5n9yo!qKYHCC-?USriW#WI$SC2j-ntivblMs)iP1Sn+7ge zxQMdAnL$&I>m#*m-~CL6Y^gusKTK`7{Nqq60^`-&ReSwTZEO4U`nn?^wv?~!cSGri zJF?kxlf1LL0%mRPi#s~lQ665~=gNu&DeMTOs_lJVo=MyD-R)j$&kgEwuSri%-+~<( zc*>5QsqoNa!^Z6XttKl&b%Ky8M~g9B8J&UKXt!Ffzkf^K*B6`!xqMu5Uw;CPejNv} zGLNDinT*dy$ivYy&l7ymIU*T9t$ysvi>y|am`*4g_iM5f*Oqa-17C){fW@DCf!;A7 z)`1)LwGfy+%F~x~@Qzs9N~0P75~kDc1r2w@Q!-EVvo9*`u*eseV9Qb*`Rurw!&|rn zfw#F%V43ziL-xBkr9K*+!5fPA82LUe8%d3mEk1@QmVScq1mnM8>PL-ond1Z_z|0iJ zF-hwKS~F1&uAo8-$YKRoi72p&54oq1A2Kh+dHHwD-hPZzcIxVUHvJuzia%p&KD&GP z?IX->moD(gM|kyDoJru;Hwp3mKYx^dU|I_5@HwP8=2+|$4>^Ga7F*)_5`PLsq{z4h zlKP00k}z=|Yur=9EXU+V8UHc=XMt<K!1H%RfQ!Aq*ufA2-Jcz@%ks(AvLj CKz649 literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/TodayPanel$1.class b/Neul-main/build/classes/java/main/TodayPanel$1.class new file mode 100644 index 0000000000000000000000000000000000000000..81fcdf5ef48e592e1fe6ee8e014152aa41ad1068 GIT binary patch literal 1307 zcmb_bOHUI~6#g!qcA!itf(6T4tXPIe!M7F=XfSFDA))Dl-R<-Wqth8Pa{=A?H*jfG z)+QDc7sjs)YTyL-83C2w!f5$gw1dTw6T=`_%#iX>E)>-jbA zP@eL18!(h7t~?d4$|-Y?fh2m*VFG?ALYP!LObbAtfqqw=vTKz<`rMLhmb5);CAMU{wp?L|WT(q|jSY z!jhsI=I+KZiEBDC2Cid@p}#G+L7lP!AvauJaa5L;-JLEo9AsO$x3}Cj+5h1>pP|Cl z3SLz(B#X8ywhn3);g=LKhQ6X_ai`3ETm7FKH8p95o))f|#XLjrrjYwyb({OVCZzBw zCQ0L^*=`H}IUT*~bUYh!&+#Lf6Nkc;xyJZ6l%7{)7~zimD~OJ`M(fv{IooCEl6Fm$ zxnmPXVn=f864r6={NVo%N=LEd9r%`bY^#=&&Fz_22S=6-*K)jo_Pf!bjwQ-z zhN<16tx08zJC-kmTku@zdyXUgu%FH?5y&TAAc^-=*A;%j;Xxn*OwhIu(2a}s_Nt2p zkfgg3O1c@Lq^l50T5*c(pf`;hB(tQINKzCg%-K4aIah~nrnNfaW;$9&!knq&lKB;> z&tc{?ePdwseGikq17WoZ%wU%OsEWEqXpD#{w3KKn8=jiCaWr3Mt$sErL5#X9m%+$SONi1$A`jxXWmtbWEO+vuPp6BrQGe aleGg62#&nSV;PS^OCGBv;{>DzPS0=RJ0<`C literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/TodayPanel.class b/Neul-main/build/classes/java/main/TodayPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..a12ffda1dcd97700d4063df7a1cb41bf8e9f4e6c GIT binary patch literal 9747 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 literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/User.class b/Neul-main/build/classes/java/main/User.class new file mode 100644 index 0000000000000000000000000000000000000000..313d16fc2f78f1095ced530e153568702b93a2ca GIT binary patch literal 947 zcmZuw+iuf95IvhFapKrc8(Jv$7J7-DihMv2FO`sx0#quEMBg^fDsge0)))9G9$Kjd z!~-9|MP?aY1T74=j@!>@$WxBe*xG>M@I=u8p;MLs0u8f$j`Ft%V6AnKRi)x zEKq&v1z!A0V5w~n>ZqZvK{wEVAy7VwR47nOXba@25@_`chQm1Yf^m;AmVqV%YG*Qv zzD&cBjuo^t+%d359=E48+d?+x3pxHkQQ~G zNIw!-n`O+D_UvO4v_Bn@ie}#n)Vt(#sKO6&=%>1-uJi{o^w`gX<#^%|S+&n?=n3r3 zvgYdN%d`gqjj@Uulr?R&y+BQtR5ZbKC(8X)__rkFm$3xX3(k_b$ZK#f)#wdJ1@yyd z61wWO$D-<7!V7*dY|KTc@SNqFR`8BZK9XM3C0VS2lUB zh*sbkp6AyTHC{oxprjIt8m)yjZY>0x|ASi#!Q0r$Z$8KcTAd$Qe(PMp-1~;RUvEm_ czYR2{6|B$bvTk%)*iGA4A@%KCmz|=WzafmNApigX literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/UserService$1.class b/Neul-main/build/classes/java/main/UserService$1.class new file mode 100644 index 0000000000000000000000000000000000000000..7bf9e3e5b79d25547e2742715d5335123f81786c GIT binary patch literal 615 zcmb7B%T60H6g>_}210=0RiG^ri!7iL9ay5EY@(u88W18hdo#HSh8Y{#4uV~OsVgKF zd;lMXxK3Ei7EAWM=bZbLU*Dcz0Cch4Km{`qs!h~T7ue5Ckqo8tWFLw=xslneGdjtP zrNlqpQF6)81r5oP&PbqsthDkSftlUCeuPTlh*yi3rXdQ6Nvcy7sO8(jm&ZU(F z@g|%-*Ha@c{n&DsVfv{hkJB4@FO#uXd2%Z6K432ODCv2t^r$@zC^MaQhv#VY%-Cjh zqQY)*Y5bp|BCqsIXSs1)VmfeyO@aARToYfzr!;dT2Pf7P(@L{vAOHf$CHK@riafCvF3YNfS?S}oN|jamh7C6I7O@|Ca-iwmmq69!IVKp?Zi6aojDadFDB&WIrcr*AeFW}H#E8VrhNJV#iohn;*v^n z*1$QOr;+sreZ810C5}rJx3hEql&a-|fhkps9+(?)-cyw*gwG9J#1}-UNg|y72tsjx zJ`LqPjn|Y_$0dAe;Ib;XT|RD@4tuo=R}5Um*96}5?NBb5PJ?O<#Xvi1@5fM``;9=) zj?c4qu0642J+zg*Gq`TxTUAcJPDjJJknK0`o0e48&l>m+Hx-E|b`S>9Iatzgi#{Yg zI(1G*1$R`Ne9vk|_xM*_P}J`kn8Un4hcC@)%>3?$%s<|`mgmb-__Qud^L*TsE7F(j zlk!K@R5mOacz_>BnMPlA9Dza%6P;Og=oF(I(j+ry*IYAf_>^&~soPG_bVA0s)%VX_ zrgxbcugdNDitWnVjrC>e&zsBY5ELq&WjYI{Z>#rsG83-aR58aEnQirZezdqpF&+kA z)~L7i1xAv6^q)+MO9Cmos!$`BlSh>4>ShpZdOp`XBY&wvOsLKAYPQSG^-Tdm+J~A6 z*iDHxVV&*j;7Vrb-CGweiBn~#EhoM$^*OKMTT-12_CummCKWr@e_ICOEveL^8pf>a zN`J;7Nf}^(-lTXxXV9;12965qPKCe{$0$yaaeeb9u5yL7LL5Z(bqUWwvE9p#;5QTpZ&}OqGiY;4}&t+JADuyA_`~U-Ee?T99i((4T z(3XA?y-vJEDUAnY^=ak>gVIr&0to?qq;v#FN$Lcjiq6SqqL>a-q6!&74q%0&6lzfp zq4ZmAF{pDvF&IfQI2ylvmcn~nn%KtlGiaIT$fS39G|M@Wz#eH~kF>ByV7IW_kQ%}ZAAs->GMonelPt6|3LEeqJUxa;509% z(TGMbbM;W3H9U&;^~Ho#;p~ii8fG#K;lED||BA^J{FH*;#*N>Q+1g?94wXgr&FyX6 zeUGtYyg*xR{he_~; L_Bqm{5eLA(F>CL- literal 0 HcmV?d00001 diff --git a/Neul-main/build/classes/java/main/WakeRecommendationPanel.class b/Neul-main/build/classes/java/main/WakeRecommendationPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..f508c243f908fd960804be30ec1919efdc4d186c GIT binary patch literal 6192 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 Cd3G%T literal 0 HcmV?d00001 diff --git a/Neul-main/build/resources/main/images/Emotion (1).png b/Neul-main/build/resources/main/images/Emotion (1).png new file mode 100644 index 0000000000000000000000000000000000000000..5432f09d074d9f833b9569a9bb5fdd2b834dea3f GIT binary patch literal 18051 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 literal 0 HcmV?d00001 diff --git a/Neul-main/build/tmp/compileJava/previous-compilation-data.bin b/Neul-main/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..6cd5fe808a03edabb0e6e40f171d71e808685d44 GIT binary patch literal 21314 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 literal 0 HcmV?d00001 diff --git a/Neul-main/gradle/wrapper/gradle-wrapper.jar b/Neul-main/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..a4b76b9530d66f5e68d973ea569d8e19de379189 GIT binary patch literal 43583 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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 GZ~q4|mN%#X literal 0 HcmV?d00001 diff --git a/Neul-main/gradle/wrapper/gradle-wrapper.properties b/Neul-main/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..9355b41 --- /dev/null +++ b/Neul-main/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/Neul-main/gradlew b/Neul-main/gradlew new file mode 100644 index 0000000..f5feea6 --- /dev/null +++ b/Neul-main/gradlew @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/Neul-main/gradlew.bat b/Neul-main/gradlew.bat new file mode 100644 index 0000000..9d21a21 --- /dev/null +++ b/Neul-main/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/Neul-main/settings.gradle b/Neul-main/settings.gradle new file mode 100644 index 0000000..236c7de --- /dev/null +++ b/Neul-main/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'Neul' diff --git a/Neul-main/sleep_data.json b/Neul-main/sleep_data.json new file mode 100644 index 0000000..dc8bff6 --- /dev/null +++ b/Neul-main/sleep_data.json @@ -0,0 +1,11 @@ +{ + "kimsubin" : [ { + "date" : "2025-05-24", + "mood" : "나쁨", + "sleepDuration" : "8시간 5분" + }, { + "date" : "2025-05-26", + "mood" : "보통", + "sleepDuration" : "8시간 0분" + } ] +} \ No newline at end of file diff --git a/Neul-main/src/main/java/AnalysisPanel.java b/Neul-main/src/main/java/AnalysisPanel.java new file mode 100644 index 0000000..e7876a8 --- /dev/null +++ b/Neul-main/src/main/java/AnalysisPanel.java @@ -0,0 +1,124 @@ +import javax.swing.*; +import java.awt.*; +import java.time.Duration; +import java.util.List; + +public class AnalysisPanel extends JPanel { + + private SleepDataService sleepDataService; + private RandomSleepInformation infoService; + public String userId = "default"; + private Duration averageDuration; // SleepCalculator에서 받아온 평균 + private ScreenController screenController; + private PanelManager panelManager; + + public AnalysisPanel(SleepDataService sleepDataService, + RandomSleepInformation infoService, + Duration averageDuration, + ScreenController screenController, + PanelManager panelManager) { + + this.sleepDataService = sleepDataService; + this.infoService = infoService; + this.averageDuration = averageDuration; + this.screenController = screenController; + this.panelManager = panelManager; + + //setTitle("NEUL - 수면 및 감정 분석"); + setSize(1440, 1024); + //setLocationRelativeTo(null); + //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLayout(null); + setBackground(Color.decode("#565686")); + + JLabel titleLabel = new JLabel("NEUL", SwingConstants.CENTER); + titleLabel.setFont(new Font("Serif", Font.PLAIN, 80)); + titleLabel.setForeground(Color.WHITE); + titleLabel.setBounds(0, 50, 1440, 80); + add(titleLabel); + + // Graph Panel (Left) + JPanel graphPanel = new JPanel() { + protected void paintComponent(Graphics g) { + super.paintComponent(g); + drawSleepGraph(g); + } + }; + graphPanel.setBounds(80, 150, 600, 750); + graphPanel.setBackground(Color.WHITE); + add(graphPanel); + + JLabel graphTitle = new JLabel("Sleep statistics", SwingConstants.CENTER); + graphTitle.setFont(new Font("Serif", Font.PLAIN, 26)); + graphTitle.setBounds(80, 120, 600, 30); + graphTitle.setForeground(Color.BLACK); + add(graphTitle); + + // Info Panel (Right) + JPanel infoPanel = new JPanel(null); + infoPanel.setBounds(760, 150, 600, 750); + infoPanel.setBackground(Color.WHITE); + add(infoPanel); + + JLabel infoTitle = new JLabel("Information about sleep"); + infoTitle.setFont(new Font("Serif", Font.PLAIN, 26)); + infoTitle.setBounds(20, 10, 500, 40); + infoPanel.add(infoTitle); + + JTextArea infoArea = new JTextArea(); + infoArea.setEditable(false); + infoArea.setFont(new Font("SansSerif", Font.PLAIN, 16)); + infoArea.setLineWrap(true); + infoArea.setWrapStyleWord(true); + + List goodThings = infoService.getRandomGoodThings(); + List badThings = infoService.getRandomBadThings(); + + StringBuilder infoText = new StringBuilder(); + infoText.append("좋은 요소\n"); + infoText.append(String.join(", ", goodThings)).append(" ...\n\n"); + infoText.append("나쁜 요소\n"); + infoText.append(String.join(", ", badThings)).append(" ..."); + + infoArea.setText(infoText.toString()); + + JScrollPane scrollPane = new JScrollPane(infoArea); + scrollPane.setBounds(20, 60, 550, 120); + infoPanel.add(scrollPane); + + JLabel commentLabel = new JLabel("Comment related to emotion"); + commentLabel.setFont(new Font("Serif", Font.PLAIN, 22)); + commentLabel.setBounds(20, 200, 500, 40); + infoPanel.add(commentLabel); + + JTextArea commentArea = new JTextArea(); + commentArea.setFont(new Font("SansSerif", Font.PLAIN, 16)); + commentArea.setEditable(false); + commentArea.setBackground(Color.WHITE); + commentArea.setBounds(20, 250, 550, 150); + infoPanel.add(commentArea); + + setVisible(true); + } + + private void drawSleepGraph(Graphics g) { + List weekly = sleepDataService.getLast7DaysSleepDurations(userId); // 월~일 리스트 + + int baseX = 60; + int baseY = 500; + int barWidth = 30; + int space = 60; + + g.setColor(Color.BLACK); + for (int i = 0; i < weekly.size(); i++) { + int barHeight = (int) (weekly.get(i).toMinutes() / 10); // scale + g.fillRect(baseX + i * (barWidth + space), baseY - barHeight, barWidth, barHeight); + } + + // 평균선 (SleepCalculator에서 받아온 값 사용) + g.setColor(new Color(160, 140, 255)); + int avgHeight = (int) (averageDuration.toMinutes() / 10); + g.drawLine(baseX, baseY - avgHeight, baseX + weekly.size() * (barWidth + space), baseY - avgHeight); + g.drawString("\uD3C9\uADE0", baseX + weekly.size() * (barWidth + space) + 5, baseY - avgHeight); + } +} diff --git a/Neul-main/src/main/java/AuthManager.java b/Neul-main/src/main/java/AuthManager.java new file mode 100644 index 0000000..b07d187 --- /dev/null +++ b/Neul-main/src/main/java/AuthManager.java @@ -0,0 +1,25 @@ +// 현재 로그인된 사용자 상태를 관리하는 클래스 + +public class AuthManager { + private static User currentUser; + + // 로그인된 사용자 저장 + public static void setCurrentUser(User user) { + currentUser = user; + } + + // 로그아웃 처리 + public static void logout() { + currentUser = null; + } + + // 로그인 여부 확인 + public static boolean isLoggedIn() { + return currentUser != null; + } + + // 현재 로그인된 사용자 반환 + public static User getCurrentUser() { + return currentUser; + } +} diff --git a/Neul-main/src/main/java/CurrentDateTime.java b/Neul-main/src/main/java/CurrentDateTime.java new file mode 100644 index 0000000..c4cf598 --- /dev/null +++ b/Neul-main/src/main/java/CurrentDateTime.java @@ -0,0 +1,33 @@ +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +public class CurrentDateTime { + //현재 시간 + public LocalTime now; + //MAX_TIME + public static int TIMES_IN_MINUTE = 90; + //MAX_CYCLE + public static int MAX_CYCLES = 6; + //시간 포맷 + public DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("HH:mm"); + + + //현재 시간 출력 + public String getCurrentTime() { + now = LocalTime.now(); + return now.format(FORMATTER); + } + + //현재 시간에서 1.5시간 사이클 계산 + public List recommendWakeTimes() { + now = LocalTime.now(); + List wakeTimes = new ArrayList<>(); + for (int i = 1; i <= MAX_CYCLES; i++) { + LocalTime wakeTime = now.plusMinutes(i * TIMES_IN_MINUTE); + wakeTimes.add(wakeTime.format(FORMATTER)); + } + return wakeTimes; + } +} diff --git a/Neul-main/src/main/java/DailyInfo.java b/Neul-main/src/main/java/DailyInfo.java new file mode 100644 index 0000000..91f9830 --- /dev/null +++ b/Neul-main/src/main/java/DailyInfo.java @@ -0,0 +1,37 @@ +import javax.swing.*; +import java.awt.*; + +public class DailyInfo extends JDialog { + public DailyInfo(String day, String sleepTime, String quality) { // 날짜, 취침시간, 수면의 질 넘겨받기 + + setTitle("Daily Information"); // 창 이름 + setSize(753, 418); // 창 크기 + setResizable(false); + setLocationRelativeTo(null); // 창을 화면 정중앙에 띄움 + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 창 닫기 + + setLayout(new BorderLayout()); + Color backgroundColor = new Color(200, 205, 225); // 창 전체에 사용할 색 + + // 날짜 + JLabel dateLabel = new JLabel(day); + dateLabel.setFont(new Font("SansSerif", Font.BOLD, 30)); // 글씨체 변경 + dateLabel.setHorizontalAlignment(SwingConstants.LEFT); // 왼쪽 + dateLabel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0)); // 여백 + dateLabel.setOpaque(true); // ← 배경색 적용 가능하게 + dateLabel.setBackground(backgroundColor); // ← contentPanel과 색 통일 + add(dateLabel, BorderLayout.NORTH); // 위쪽 + + // 취침 시간, 수면의 질 + JPanel contentPanel = new JPanel(new GridLayout(2, 1)); + contentPanel.setBackground(backgroundColor); // 바탕색 설정 + + JLabel sleepLabel = new JLabel(sleepTime + " 취침", SwingConstants.RIGHT); + JLabel qualityLabel = new JLabel("수면의 질: " + quality, SwingConstants.RIGHT); + + contentPanel.add(sleepLabel); + contentPanel.add(qualityLabel); + + add(contentPanel, BorderLayout.CENTER); + } +} diff --git a/Neul-main/src/main/java/IntroPanel.java b/Neul-main/src/main/java/IntroPanel.java new file mode 100644 index 0000000..731f41a --- /dev/null +++ b/Neul-main/src/main/java/IntroPanel.java @@ -0,0 +1,86 @@ + +import javax.swing.*; +import java.awt.*; + +public class IntroPanel extends JPanel { + private ScreenController controller; + + public IntroPanel(ScreenController controller) { + this.controller = controller; + setLayout(new BorderLayout()); + setBackground(new Color(91, 89, 153)); + + + // 중앙 텍스트 + 버튼 패널 + JPanel centerPanel = new JPanel(); + centerPanel.setBackground(new Color(91, 89, 153)); + centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.Y_AXIS)); + centerPanel.setBorder(BorderFactory.createEmptyBorder(300, 0, 0, 0)); + + // 부제목 + JLabel subtitle = new JLabel( + "
늘 곁에 있는,
나만의 감정 수면 파트너
", + SwingConstants.CENTER + ); + subtitle.setForeground(Color.WHITE); + subtitle.setFont(new Font("SansSerif", Font.PLAIN, 24)); + subtitle.setAlignmentX(Component.CENTER_ALIGNMENT); + + // 제목 + JLabel title = new JLabel("NEUL"); + title.setForeground(Color.WHITE); + title.setFont(new Font("Serif", Font.BOLD, 90)); + title.setAlignmentX(Component.CENTER_ALIGNMENT); + + // 버튼 + JButton loginBtn = new JButton("로그인"); + JButton signupBtn = new JButton("회원가입"); + + customizeButton(loginBtn); + customizeButton(signupBtn); + + // 각 버튼 클릭 시 새 창 열기 + loginBtn.addActionListener(e -> { + controller.changeScreen("login"); // 기존 창 닫고 카드 전환 + }); + + signupBtn.addActionListener(e -> { + controller.changeScreen("signup"); // 기존 창 닫고 카드 전환 + }); + + JPanel buttonPanel = new JPanel(); + buttonPanel.setBackground(new Color(91, 89, 153)); + buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 0)); + buttonPanel.add(loginBtn); + buttonPanel.add(signupBtn); + buttonPanel.setAlignmentX(Component.CENTER_ALIGNMENT); + + // 패널 구성 + centerPanel.add(subtitle); + centerPanel.add(Box.createVerticalStrut(40)); + centerPanel.add(title); + centerPanel.add(Box.createVerticalStrut(70)); + centerPanel.add(buttonPanel); + + add(centerPanel, BorderLayout.CENTER); + } + + private void customizeButton(JButton button) { + button.setPreferredSize(new Dimension(120, 40)); + button.setBackground(Color.WHITE); + button.setForeground(Color.BLACK); + button.setFocusPainted(false); + button.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); + button.setFont(new Font("SansSerif", Font.PLAIN, 16)); + } + + //public static void main(String[] args) { + //JFrame frame = new JFrame("Intro"); + //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + //frame.setSize(1440, 1024); + //frame.setLocationRelativeTo(null); + //frame.add(new IntroPanel()); + //frame.setVisible(true); + //} +} +//test 용 main임 주석처리하고 사용하기 diff --git a/Neul-main/src/main/java/LoginErrorPopup.java b/Neul-main/src/main/java/LoginErrorPopup.java new file mode 100644 index 0000000..b4c616c --- /dev/null +++ b/Neul-main/src/main/java/LoginErrorPopup.java @@ -0,0 +1,44 @@ +import javax.swing.*; +import java.awt.*; + +public class LoginErrorPopup { + + public static void showErrorDialog(JFrame parent) { + // 다이얼로그 생성 + JDialog dialog = new JDialog(parent, "오류", true); + dialog.setSize(400, 220); + dialog.setLayout(null); + dialog.setResizable(false); + dialog.getContentPane().setBackground(new Color(200, 205, 225)); + + // 중앙 정렬 + dialog.setLocationRelativeTo(parent); + + // 메시지 라벨 + JLabel message = new JLabel("
아이디나 비밀번호가 다릅니다.
다시 입력해주세요!
", SwingConstants.CENTER); + message.setFont(new Font("SansSerif", Font.BOLD, 16)); + message.setBounds(30, 30, 340, 60); + dialog.add(message); + + // 확인 버튼 + JButton okButton = new JButton("확인"); + okButton.setFont(new Font("SansSerif", Font.BOLD, 14)); + okButton.setBounds(160, 120, 80, 35); + dialog.add(okButton); + + // 버튼 클릭 시 창 닫기 + okButton.addActionListener(e -> dialog.dispose()); + + dialog.setVisible(true); + } + + // 테스트용 실행 + //public static void main(String[] args) { + //JFrame dummyParent = new JFrame(); + //dummyParent.setSize(400, 400); + //dummyParent.setLocationRelativeTo(null); + //dummyParent.setVisible(true); + + //showErrorDialog(dummyParent); + //} +} diff --git a/Neul-main/src/main/java/LoginPanel.java b/Neul-main/src/main/java/LoginPanel.java new file mode 100644 index 0000000..0034bfd --- /dev/null +++ b/Neul-main/src/main/java/LoginPanel.java @@ -0,0 +1,102 @@ +import javax.swing.*; +import java.awt.*; + +public class LoginPanel extends JPanel { + private ScreenController controller; + + public LoginPanel(ScreenController controller) { + this.controller = controller; + + setLayout(null); + setBackground(new Color(91, 89, 153)); // 짙은 보라 배경 + + // NEUL + 달 이미지 + JLabel title = new JLabel("NEUL"); + title.setFont(new Font("Serif", Font.BOLD, 60)); + title.setForeground(new Color(182, 153, 40)); // 금색 + title.setBounds(620, 60, 200, 80); + add(title); + + // 달 이미지 (그림) + MoonCircle moon = new MoonCircle(); + moon.setBounds(800, 70, 50, 50); + add(moon); + + // "로그인" 타이틀 + JLabel loginLabel = new JLabel("로그인", SwingConstants.CENTER); + loginLabel.setFont(new Font("SansSerif", Font.BOLD, 36)); + loginLabel.setBounds(620, 180, 200, 50); + add(loginLabel); + + // 로그인 폼 박스 + JPanel formPanel = new JPanel(); + formPanel.setLayout(null); + formPanel.setBackground(Color.WHITE); + formPanel.setBounds(470, 290, 500, 500); + formPanel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1, true)); + add(formPanel); + + // 아이디 입력 필드 + JLabel idLabel = new JLabel("아이디"); + idLabel.setBounds(60, 50, 100, 30); + JTextField idField = new JTextField(); + idField.setBounds(60, 80, 380, 35); + + // 비밀번호 입력 필드 + JLabel pwLabel = new JLabel("비밀번호"); + pwLabel.setBounds(60, 150, 100, 30); + JPasswordField pwField = new JPasswordField(); + pwField.setBounds(60, 180, 380, 35); + + // 로그인 버튼 + JButton loginBtn = new JButton("로그인"); + loginBtn.setBounds(60, 350, 380, 40); + loginBtn.setBackground(new Color(40, 40, 40)); + loginBtn.setForeground(Color.WHITE); + + // UserService 인스턴스 + UserService userService = UserService.getInstance(); + + // 버튼 클릭 이벤트 처리 + loginBtn.addActionListener(e -> { + String username = idField.getText(); + String password = new String(pwField.getPassword()); + + String result = String.valueOf(userService.login(username, password)); + + if (!result.equals("로그인이 완료되었습니다.")) { + // 로그인 실패 팝업 + LoginErrorPopup.showErrorDialog((JFrame) SwingUtilities.getWindowAncestor(this)); + } else { + // 로그인 성공 처리 + JOptionPane.showMessageDialog(this, "로그인 성공!"); + + // 현재 창 닫기 + Window window = SwingUtilities.getWindowAncestor(this); + if (window != null) { + window.dispose(); + } + + // 카드 기반 화면 전환 + controller.changeScreen("main"); + } + }); + + // 컴포넌트들을 formPanel에 추가 + formPanel.add(idLabel); + formPanel.add(idField); + formPanel.add(pwLabel); + formPanel.add(pwField); + formPanel.add(loginBtn); + } + + // 테스트용 실행 + // public static void main(String[] args) { + // JFrame frame = new JFrame("Login - NEUL"); + // frame.setSize(1440, 1024); + // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // frame.setLocationRelativeTo(null); + // frame.add(new LoginPanel(null)); // 테스트용으로 null 전달 + // frame.setVisible(true); + // } +} diff --git a/Neul-main/src/main/java/MainMenuPanel.java b/Neul-main/src/main/java/MainMenuPanel.java new file mode 100644 index 0000000..afef905 --- /dev/null +++ b/Neul-main/src/main/java/MainMenuPanel.java @@ -0,0 +1,96 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +// 프로젝트 내의 클래스 (패키지 경로에 따라 조정) +//import SleepInputPanel; +//import IntroPanel; + + +public class MainMenuPanel extends JPanel { + private ScreenController controller; + + public MainMenuPanel(ScreenController controller) { + this.controller = controller; + setLayout(null); + setBackground(new Color(91, 89, 153)); // 배경색 + + // 상단 NEUL 로고 + JLabel title = new JLabel("NEUL"); + title.setFont(new Font("Serif", Font.BOLD, 80)); + title.setForeground(Color.WHITE); + title.setBounds(610, 100, 400, 100); + add(title); + + // 왼쪽 상단 로그아웃 버튼 + JButton logoutButton = new JButton("Logout"); + logoutButton.setBounds(40, 30, 100, 40); + add(logoutButton); + + // 버튼 공통 스타일 + Font buttonFont = new Font("SansSerif", Font.BOLD, 24); + Color btnBackground = Color.WHITE; + int buttonWidth = 300; + int buttonHeight = 60; + int x = 580; + int yStart = 300; + int gap = 140; + + // Calculator 버튼 + JButton calculatorBtn = new JButton("Calculator"); + calculatorBtn.setFont(buttonFont); + calculatorBtn.setBackground(btnBackground); + calculatorBtn.setBounds(x, yStart, buttonWidth, buttonHeight); + add(calculatorBtn); + + // Today's 버튼 + JButton todayBtn = new JButton("Today's"); + todayBtn.setFont(buttonFont); + todayBtn.setBackground(btnBackground); + todayBtn.setBounds(x, yStart + gap, buttonWidth, buttonHeight); + add(todayBtn); + + // Analysis 버튼 + JButton analysisBtn = new JButton("Analysis"); + analysisBtn.setFont(buttonFont); + analysisBtn.setBackground(btnBackground); + analysisBtn.setBounds(x, yStart + 2 * gap, buttonWidth, buttonHeight); + add(analysisBtn); + + // 이벤트 리스너는 반드시 생성자 안에 있어야 함 + calculatorBtn.addActionListener(e -> { + JFrame sleepInputFrame = new JFrame("NEUL - Sleep Calculator"); + sleepInputFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + sleepInputFrame.setSize(1440, 1024); + sleepInputFrame.setLocationRelativeTo(null); + sleepInputFrame.setContentPane(new SleepInputPanel(controller)); + sleepInputFrame.setVisible(true); + }); + + logoutButton.addActionListener(e -> { + Window window = SwingUtilities.getWindowAncestor(this); + if (window != null) { + window.dispose(); + } + + JFrame introFrame = new JFrame("NEUL - Intro"); + introFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + introFrame.setSize(1440, 1024); + introFrame.setLocationRelativeTo(null); + introFrame.setContentPane(new IntroPanel(controller)); + introFrame.setVisible(true); + }); + } + +// public static void main(String[] args) { +// JFrame frame = new JFrame("Main Menu - NEUL"); +// frame.setSize(1440, 1024); +// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +// frame.setLocationRelativeTo(null); +// frame.add(new MainMenuPanel()); +// frame.setVisible(true); +// } + + //테스트용 메인이라 나중에 주석처리하거나 지워야됨 +} diff --git a/Neul-main/src/main/java/MoonCircle.java b/Neul-main/src/main/java/MoonCircle.java new file mode 100644 index 0000000..5a3611e --- /dev/null +++ b/Neul-main/src/main/java/MoonCircle.java @@ -0,0 +1,30 @@ +import javax.swing.*; +import java.awt.*; +public class MoonCircle extends JPanel { + public MoonCircle() { + setPreferredSize(new Dimension(50, 50)); + setOpaque(false); + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2d = (Graphics2D) g; + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + + // 그림자 + g2d.setColor(new Color(0, 0, 0, 50)); + g2d.fillOval(5, 5, 40, 40); + + // 달 본체 (그라데이션 음영) + GradientPaint gradient = new GradientPaint(0, 0, new Color(255, 223, 0), 40, 40, new Color(200, 170, 0)); + g2d.setPaint(gradient); + g2d.fillOval(0, 0, 40, 40); + + // 테두리 + g2d.setColor(new Color(160, 130, 0)); + g2d.setStroke(new BasicStroke(1f)); + g2d.drawOval(0, 0, 40, 40); + } +} + diff --git a/Neul-main/src/main/java/NEUL_MAIN.java b/Neul-main/src/main/java/NEUL_MAIN.java new file mode 100644 index 0000000..51c9c77 --- /dev/null +++ b/Neul-main/src/main/java/NEUL_MAIN.java @@ -0,0 +1,27 @@ +import javax.swing.SwingUtilities; + +public class NEUL_MAIN { + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + SleepDataService dataService = new SleepDataService(); + RandomSleepInformation infoService = new RandomSleepInformation(); + + // dummy controller 먼저 생성 + ScreenController controller = new ScreenController(null); + + // PanelManager 생성 시 controller는 일단 전달 + PanelManager manager = new PanelManager(controller, dataService, infoService); + + // controller 내부에 manager 연결 + controller.setMainWindow(manager); // setMainWindow() 메서드 필요 + + // controller 다시 PanelManager에 주입 (선택 사항) + manager.setController(controller); + + // 이제 controller가 살아 있으니 패널 등록 진행 + manager.registerScreens(dataService, infoService); + + controller.navigateTo("intro"); + }); + } +} diff --git a/Neul-main/src/main/java/PanelManager.java b/Neul-main/src/main/java/PanelManager.java new file mode 100644 index 0000000..bbe8281 --- /dev/null +++ b/Neul-main/src/main/java/PanelManager.java @@ -0,0 +1,69 @@ +import javax.swing.*; +import java.awt.*; +import java.util.HashMap; + +public class PanelManager extends JFrame{ + private ScreenController controller; + private CardLayout cardLayout; + private SleepDataService dataService; + private RandomSleepInformation infoService; + private JPanel cardPanel; + private HashMap screens = new HashMap<>(); + + public PanelManager(ScreenController controller, SleepDataService dataService, RandomSleepInformation infoService) { + this.controller = controller; + this.dataService = dataService; + this.infoService = infoService; + + // 화면 전환 중앙 통제용도임 + setTitle("Sleep Tracker - NEUL"); + setSize(1440, 1024); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLocationRelativeTo(null); // 화면 중앙 정렬 + + // CardLayout 기반 화면 전환용 패널 초기화 + cardLayout = new CardLayout(); + cardPanel = new JPanel(cardLayout); + add(cardPanel); + setVisible(true); + } + + public void registerScreens(SleepDataService dataService, RandomSleepInformation infoService) { + addScreen("intro", new IntroPanel(controller)); // 초기 화면 (로그인/회원가입 버튼있는 화면) + addScreen("login", new LoginPanel(controller)); // 로그인 화면 + addScreen("signup", new SignupPanel(controller)); // 회원가입 화면 + addScreen("main", new MainMenuPanel(controller)); // 메인(홈) 화면 + addScreen("calculator", new SleepInputPanel(controller)); // 시간계산기 화면 + //addScreen("sleepRecommendation", new SleepRecommendationPanel(controller)); + //addScreen("wakeRecommendation", new WakeRecommendationPanel(controller)); + //addScreen("sleepCycle", new SleepCyclePanel(controller)); + } + + public void setController(ScreenController controller) { + this.controller = controller; + } + + // 화면 등록 메서드: 이름과 패널을 매핑하여 cardPanel에 추가 + public void addScreen(String name, JPanel panel){ + if (screens.containsKey(name)) { + cardPanel.remove(screens.get(name)); // 이미 있는 패널 제거 + screens.remove(name); // 맵에서도 제거 + } + screens.put(name,panel); + cardPanel.add(panel,name); + } + + // 화면 전환 메서드: 이름을 기반으로 화면 전환 + public void showScreen(String name){ + System.out.println("🔁 전환 시도: " + name); + cardLayout.show(cardPanel, name); + } + + public SleepDataService getSleepDataService() { + return dataService; + } + + public RandomSleepInformation getInfoService() { + return infoService; + } +} diff --git a/Neul-main/src/main/java/PasswordUtil.java b/Neul-main/src/main/java/PasswordUtil.java new file mode 100644 index 0000000..235c4cc --- /dev/null +++ b/Neul-main/src/main/java/PasswordUtil.java @@ -0,0 +1,22 @@ +// 비밀번호 해시를 위한 유틸리티 클래스 + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class PasswordUtil { + + // SHA-256으로 비밀번호 해시 + public static String hashPassword(String password) { + try { + MessageDigest md = MessageDigest.getInstance("SHA-256"); + byte[] hashedBytes = md.digest(password.getBytes()); + StringBuilder sb = new StringBuilder(); + for (byte b : hashedBytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("SHA-256 알고리즘 오류 발생"); + } + } +} diff --git a/Neul-main/src/main/java/PwErrorPopup.java b/Neul-main/src/main/java/PwErrorPopup.java new file mode 100644 index 0000000..3733bcb --- /dev/null +++ b/Neul-main/src/main/java/PwErrorPopup.java @@ -0,0 +1,44 @@ +import javax.swing.*; +import java.awt.*; + +public class PwErrorPopup { + + public static void showErrorDialog(JFrame parent) { + // 다이얼로그 생성 + JDialog dialog = new JDialog(parent, "오류", true); + dialog.setSize(400, 220); + dialog.setLayout(null); + dialog.setResizable(false); + dialog.getContentPane().setBackground(new Color(200, 205, 225)); + + // 중앙 정렬 + dialog.setLocationRelativeTo(parent); + + // 메시지 라벨 + JLabel message = new JLabel("
비밀번호가 다릅니다.
다시 입력해주세요!
", SwingConstants.CENTER); + message.setFont(new Font("SansSerif", Font.BOLD, 16)); + message.setBounds(30, 30, 340, 60); + dialog.add(message); + + // 확인 버튼 + JButton okButton = new JButton("확인"); + okButton.setFont(new Font("SansSerif", Font.BOLD, 14)); + okButton.setBounds(160, 120, 80, 35); + dialog.add(okButton); + + // 버튼 클릭 시 창 닫기 + okButton.addActionListener(e -> dialog.dispose()); + + dialog.setVisible(true); + } + + // 테스트용 실행 + //public static void main(String[] args) { + //JFrame dummyParent = new JFrame(); + //dummyParent.setSize(400, 400); + //dummyParent.setLocationRelativeTo(null); + //dummyParent.setVisible(true); + + //showErrorDialog(dummyParent); + //} +} diff --git a/Neul-main/src/main/java/PwLengErrorPopup.java b/Neul-main/src/main/java/PwLengErrorPopup.java new file mode 100644 index 0000000..97a6156 --- /dev/null +++ b/Neul-main/src/main/java/PwLengErrorPopup.java @@ -0,0 +1,44 @@ +import javax.swing.*; +import java.awt.*; + +public class PwLengErrorPopup { + + public static void showErrorDialog(JFrame parent) { + // 다이얼로그 생성 + JDialog dialog = new JDialog(parent, "오류", true); + dialog.setSize(400, 220); + dialog.setLayout(null); + dialog.setResizable(false); + dialog.getContentPane().setBackground(new Color(200, 205, 225)); + + // 중앙 정렬 + dialog.setLocationRelativeTo(parent); + + // 메시지 라벨 + JLabel message = new JLabel("
비밀번호는 6글자
이상이어야 합니다!
", SwingConstants.CENTER); + message.setFont(new Font("SansSerif", Font.BOLD, 16)); + message.setBounds(30, 30, 340, 60); + dialog.add(message); + + // 확인 버튼 + JButton okButton = new JButton("확인"); + okButton.setFont(new Font("SansSerif", Font.BOLD, 14)); + okButton.setBounds(160, 120, 80, 35); + dialog.add(okButton); + + // 버튼 클릭 시 창 닫기 + okButton.addActionListener(e -> dialog.dispose()); + + dialog.setVisible(true); + } + + // 테스트용 실행 + //public static void main(String[] args) { + //JFrame dummyParent = new JFrame(); + //dummyParent.setSize(400, 400); + //dummyParent.setLocationRelativeTo(null); + //dummyParent.setVisible(true); + + //showErrorDialog(dummyParent); + //} +} diff --git a/Neul-main/src/main/java/RandomSleepInformation.java b/Neul-main/src/main/java/RandomSleepInformation.java new file mode 100644 index 0000000..e06d10c --- /dev/null +++ b/Neul-main/src/main/java/RandomSleepInformation.java @@ -0,0 +1,41 @@ +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class RandomSleepInformation { + private final String[] goodThings = { + "규칙적인 수면 시간", "자기 전 명상", "따뜻한 우유 한 잔", + "카페인과 니코틴 피하기", "낮에 햇빛 충분히 쬐기" + }; + + private final String[] badThings = { + "카페인 음료", "알코올 섭취", "취침 전 과한 운동", + "불규칙한 수면 패턴", "전자기기의 남용", "스트레스와 불안", "신체 활동량 부족" + }; + + private final String[] sleepWords = { + "잘 자야 마음도 편해져요.", "꿀잠은 좋은 감정의 시작!", "잠은 마음의 휴식 시간이에요.", + "잠이 부족하면 감정도 불안해져요.", "마음 편히 자면 감정도 안정돼요.", + "잘 자고 좋은 기분 만들기!", "좋은 잠이 좋은 하루를 만듭니다." + }; + + // 랜덤으로 좋은 요인 3개 + public List getRandomGoodThings() { + List list = new ArrayList<>(List.of(goodThings)); + Collections.shuffle(list); + return list.subList(0, Math.min(3, list.size())); + } + + // 랜덤으로 나쁜 요인 3개 + public List getRandomBadThings() { + List list = new ArrayList<>(List.of(badThings)); + Collections.shuffle(list); + return list.subList(0, Math.min(3, list.size())); + } + + // 랜덤 문구 1개 + public String getRandomSleepWord() { + int index = (int) (Math.random() * sleepWords.length); + return sleepWords[index]; + } +} diff --git a/Neul-main/src/main/java/ScreenController.java b/Neul-main/src/main/java/ScreenController.java new file mode 100644 index 0000000..4d8ae0c --- /dev/null +++ b/Neul-main/src/main/java/ScreenController.java @@ -0,0 +1,38 @@ +import javax.swing.*; + +public class ScreenController { + private final PanelManager panelManager; + + public ScreenController(PanelManager panelManager) { + this.panelManager = panelManager; + } + + // 화면 전환 요청 메서드 + public void changeScreen(String screenName) { + panelManager.showScreen(screenName); + } + + // 예시: 수면 추천 패널 열기 + public void showSleepRecommendation(SleepTime sleepTime) { + SleepRecommendationPanel panel = new SleepRecommendationPanel(this, sleepTime); // ✅ 이 부분은 생성자 수정된 상태일 때만 사용 + panelManager.addScreen("sleepRecommendation", panel); + changeScreen("sleepRecommendation"); + } + + // 예시: 기상 추천 패널 열기 + public void showWakeRecommendation(WakeTime wakeTime) { + WakeRecommendationPanel panel = new WakeRecommendationPanel(this, wakeTime); // ✅ 이 부분도 생성자 수정된 상태일 때만 사용 + panelManager.addScreen("wakeRecommendation", panel); + changeScreen("wakeRecommendation"); + } + + // 🔧 오류 해결된 부분: CurrentDateTime 기반 SleepCyclePanel + public void showSleepCycle() { + CurrentDateTime currentDateTime = new CurrentDateTime(); // ✅ 이 줄 추가 + SleepCyclePanel panel = new SleepCyclePanel(currentDateTime); // ✅ 고친 부분 + panelManager.addScreen("sleepCycle", panel); + changeScreen("sleepCycle"); + } + + // 필요시 다른 화면도 여기서 제어 가능 +} diff --git a/Neul-main/src/main/java/SignupPanel.java b/Neul-main/src/main/java/SignupPanel.java new file mode 100644 index 0000000..134a46d --- /dev/null +++ b/Neul-main/src/main/java/SignupPanel.java @@ -0,0 +1,110 @@ +import javax.swing.*; +import java.awt.*; + +public class SignupPanel extends JPanel { + private ScreenController controller; + + public SignupPanel(ScreenController controller) { + this.controller = controller; + + setLayout(null); + setBackground(new Color(91, 89, 153)); // 짙은 보라 배경 + + // NEUL 텍스트 + JLabel title = new JLabel("NEUL"); + title.setFont(new Font("Serif", Font.BOLD, 60)); + title.setForeground(new Color(182, 153, 40)); // 금색 + title.setBounds(620, 60, 200, 80); + add(title); + + // 달 원 컴포넌트 + MoonCircle moon = new MoonCircle(); + moon.setBounds(800, 70, 50, 50); + add(moon); + + // "회원가입" 타이틀 + JLabel registerLabel = new JLabel("회원가입", SwingConstants.CENTER); + registerLabel.setFont(new Font("SansSerif", Font.BOLD, 36)); + registerLabel.setBounds(620, 180, 200, 50); + add(registerLabel); + + // 회원가입 폼 박스 + JPanel formPanel = new JPanel(); + formPanel.setLayout(null); + formPanel.setBackground(Color.WHITE); + formPanel.setBounds(470, 290, 500, 500); + formPanel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1, true)); + add(formPanel); + + // 아이디 + JLabel idLabel = new JLabel("아이디"); + idLabel.setBounds(60, 40, 100, 30); + JTextField idField = new JTextField(); + idField.setBounds(60, 70, 380, 35); + + // 비밀번호 + JLabel pwLabel = new JLabel("비밀번호"); + pwLabel.setBounds(60, 130, 100, 30); + JPasswordField pwField = new JPasswordField(); + pwField.setBounds(60, 160, 380, 35); + + // 비밀번호 확인 + JLabel pwConfirmLabel = new JLabel("비밀번호 확인"); + pwConfirmLabel.setBounds(60, 220, 150, 30); + JPasswordField pwConfirmField = new JPasswordField(); + pwConfirmField.setBounds(60, 250, 380, 35); + + // 가입하기 버튼 + JButton registerBtn = new JButton("가입하기"); + registerBtn.setBounds(60, 330, 380, 40); + registerBtn.setBackground(new Color(40, 40, 40)); + registerBtn.setForeground(Color.WHITE); + + // 👉 회원가입 버튼 클릭 이벤트 + registerBtn.addActionListener(e -> { + String id = idField.getText(); + String pw = new String(pwField.getPassword()); + String pwConfirm = new String(pwConfirmField.getPassword()); + + if (!pw.equals(pwConfirm)) { + JOptionPane.showMessageDialog(this, "비밀번호가 일치하지 않습니다."); + return; + } + + // 실제 회원가입 처리 로직은 여기에 추가할 수 있음 + JOptionPane.showMessageDialog(this, "회원가입 완료!"); + + // 현재 창 닫기 + Window window = SwingUtilities.getWindowAncestor(this); + if (window != null) { + window.dispose(); + } + + // 로그인 화면으로 전환 (새 JFrame 말고 카드 전환이 좋지만, 현재 구조 유지) + JFrame loginFrame = new JFrame("로그인"); + loginFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + loginFrame.setSize(1440, 1024); + loginFrame.setLocationRelativeTo(null); + loginFrame.setContentPane(new LoginPanel(controller)); // ✅ controller 전달 + loginFrame.setVisible(true); + }); + + formPanel.add(idLabel); + formPanel.add(idField); + formPanel.add(pwLabel); + formPanel.add(pwField); + formPanel.add(pwConfirmLabel); + formPanel.add(pwConfirmField); + formPanel.add(registerBtn); + } + + // 테스트용 실행 + // public static void main(String[] args) { + // JFrame frame = new JFrame("Register - NEUL"); + // frame.setSize(1440, 1024); + // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // frame.setLocationRelativeTo(null); + // frame.add(new SignupPanel(null)); // 테스트 시 null 전달 + // frame.setVisible(true); + // } +} diff --git a/Neul-main/src/main/java/SleepCalculator.java b/Neul-main/src/main/java/SleepCalculator.java new file mode 100644 index 0000000..cce0434 --- /dev/null +++ b/Neul-main/src/main/java/SleepCalculator.java @@ -0,0 +1,37 @@ +import java.time.Duration; +import java.util.List; + +public class SleepCalculator { + + /** + * 수면 시간 목록(Duration 리스트)을 받아서 평균 수면 시간을 계산합니다. + * + * @param durations 수면 시간 리스트 + * @return 평균 수면 시간 (Duration 형태), 비어있으면 Duration.ZERO 반환 + */ + public static Duration calculateAverage(List durations) { + if (durations == null || durations.isEmpty()) { + return Duration.ZERO; + } + + long totalSeconds = 0; + for (Duration d : durations) { + totalSeconds += d.getSeconds(); + } + + long averageSeconds = totalSeconds / durations.size(); + return Duration.ofSeconds(averageSeconds); + } + + /** + * Duration을 사람이 읽기 좋은 문자열로 변환합니다. (예: "7시간 30분") + * + * @param duration Duration 객체 + * @return 포맷된 문자열 + */ + public static String formatDuration(Duration duration) { + long hours = duration.toHours(); + long minutes = duration.toMinutesPart(); // Java 9 이상에서 사용 가능 + return hours + "시간 " + minutes + "분"; + } +} diff --git a/Neul-main/src/main/java/SleepCyclePanel.java b/Neul-main/src/main/java/SleepCyclePanel.java new file mode 100644 index 0000000..e187255 --- /dev/null +++ b/Neul-main/src/main/java/SleepCyclePanel.java @@ -0,0 +1,140 @@ + +import javax.swing.*; +import java.awt.*; +import java.util.List; +import java.util.Objects; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; + + + +public class SleepCyclePanel extends JPanel { + + public SleepCyclePanel(CurrentDateTime backend) { + setLayout(null); + setBackground(new Color(91, 89, 153)); + + // 백엔드에서 시간 받아오기 + String currentTime = backend.getCurrentTime(); + List recommendedTimes = backend.recommendWakeTimes(); + + // NEUL 제목 + JLabel title = new JLabel("NEUL"); + title.setFont(new Font("Serif", Font.BOLD, 80)); + title.setForeground(Color.WHITE); + title.setBounds(640, 50, 300, 100); + add(title); + + // 홈 버튼 + System.out.println("이미지 경로: " + getClass().getResource("/res/images/img.png")); + + + // 홈 버튼 + ImageIcon imgIcon = new ImageIcon(Objects.requireNonNull(getClass().getResource("/res/images/img.png"))); + Image scaled = imgIcon.getImage().getScaledInstance(48, 48, Image.SCALE_SMOOTH); + ImageIcon resizedIcon = new ImageIcon(scaled); + + JButton imgButton = new JButton(resizedIcon); + imgButton.setBounds(1360, 20, 48, 48); + imgButton.setBorderPainted(false); + imgButton.setContentAreaFilled(false); + imgButton.setFocusPainted(false); + imgButton.setOpaque(false); + add(imgButton); + + // 🟡 홈 버튼 클릭 시 메인 메뉴로 이동 + imgButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Window window = SwingUtilities.getWindowAncestor(SleepCyclePanel.this); + if (window instanceof JFrame) { + JFrame frame = (JFrame) window; + frame.setContentPane(new MainMenuPanel()); // 메인 메뉴 패널로 전환 + frame.revalidate(); // 새로고침 + frame.repaint(); // 다시 그리기 + } + } + }); + + + + // 현재 시간 패널 + JPanel currentTimePanel = new JPanel(new BorderLayout()); + currentTimePanel.setBackground(Color.WHITE); + currentTimePanel.setBounds(640, 160, 200, 50); + JLabel timeText = new JLabel(currentTime, SwingConstants.CENTER); + timeText.setFont(new Font("Digital-7 Mono", Font.BOLD, 28)); + currentTimePanel.add(timeText, BorderLayout.CENTER); + add(currentTimePanel); + + // 안내 문구 + JLabel desc = new JLabel("
You should wake up at:
(1 cycle = 1.5hrs)
", SwingConstants.CENTER); + desc.setFont(new Font("SansSerif", Font.PLAIN, 18)); + desc.setForeground(Color.WHITE); + desc.setBounds(600, 250, 300, 60); + add(desc); + + // 수면 사이클 패널 + int x = 400, y = 380; + for (int i = 0; i < 6; i++) { + JPanel cyclePanel = new JPanel(); + cyclePanel.setLayout(new BoxLayout(cyclePanel, BoxLayout.Y_AXIS)); + cyclePanel.setBackground(Color.WHITE); + cyclePanel.setBounds(x, y, 200, 120); + + JLabel cycleLabel = new JLabel((i + 1) + " cycle" + (i == 0 ? "" : "s"), SwingConstants.CENTER); + JLabel hourLabel = new JLabel((1.5 * (i + 1)) + " hrs", SwingConstants.CENTER); + + cycleLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + hourLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + + // 디지털 시계 스타일 시간 박스 + JPanel digitalPanel = new JPanel(); + digitalPanel.setBackground(Color.WHITE); + digitalPanel.setMaximumSize(new Dimension(160, 40)); + JLabel timeLabel = new JLabel(recommendedTimes.get(i), SwingConstants.CENTER); + timeLabel.setFont(new Font("Digital-7 Mono", Font.BOLD, 20)); + timeLabel.setForeground(new Color(66, 133, 244)); + digitalPanel.add(timeLabel); + + digitalPanel.setAlignmentX(Component.CENTER_ALIGNMENT); + + cyclePanel.add(Box.createVerticalStrut(10)); + cyclePanel.add(cycleLabel); + cyclePanel.add(hourLabel); + cyclePanel.add(Box.createVerticalStrut(5)); + cyclePanel.add(digitalPanel); + + Color borderColor = (i < 2) ? Color.RED : (i < 4) ? Color.YELLOW : Color.GREEN; + cyclePanel.setBorder(BorderFactory.createLineBorder(borderColor, 3)); + add(cyclePanel); + + x += 240; + if (i == 2) { + x = 400; + y += 150; + } + } + + // 하단 추천 문구 + JLabel bottomText = new JLabel("We recommend to sleep for 5–6 cycles!!", SwingConstants.CENTER); + bottomText.setFont(new Font("SansSerif", Font.BOLD, 20)); + bottomText.setForeground(Color.WHITE); + bottomText.setBounds(440, 700, 600, 50); + add(bottomText); + } + // 테스트용 메인 + // public static void main(String[] args) { + //JFrame frame = new JFrame("Sleep Cycle Recommendation"); + //frame.setSize(1440, 1024); + //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + //frame.setLocationRelativeTo(null); + + // 백엔드 객체 생성 + //CurrentDateTime backend = new CurrentDateTime(); + //SleepCyclePanel panel = new SleepCyclePanel(backend); + + //frame.add(new SleepCyclePanel(backend)); + //frame.setVisible(true); + //} +} \ No newline at end of file diff --git a/Neul-main/src/main/java/SleepDataService.java b/Neul-main/src/main/java/SleepDataService.java new file mode 100644 index 0000000..7b5b0ce --- /dev/null +++ b/Neul-main/src/main/java/SleepDataService.java @@ -0,0 +1,126 @@ +// 각 클래스에서 필요한 데이터를 저장/조회하는 클래스 + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.databind.SerializationFeature; + +import java.io.File; +import java.io.IOException; +import java.time.Duration; +import java.time.LocalDate; +import java.util.*; + +public class SleepDataService { + + private static final String DATA_FILE = "sleep_data.json"; + private Map> userSleepMap; + private ObjectMapper objectMapper; + + public SleepDataService() { + objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + loadData(); + } + + // JSON 파일에서 사용자별 수면 기록 로드 + private void loadData() { + try { + File file = new File(DATA_FILE); + if (file.exists()) { + userSleepMap = objectMapper.readValue(file, + new TypeReference>>() {}); + } else { + userSleepMap = new HashMap<>(); + } + } catch (IOException e) { + e.printStackTrace(); + userSleepMap = new HashMap<>(); + } + } + + // 수면 기록을 JSON 파일에 저장 + private void saveData() { + try { + objectMapper + .writerWithDefaultPrettyPrinter() + .writeValue(new File(DATA_FILE), userSleepMap); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // 오늘 날짜로 수면기록 저장 (중복 날짜는 덮어쓰기) + public void saveRecord(String userId, SleepRecord record) { + List records = userSleepMap.computeIfAbsent(userId, k -> new ArrayList<>()); + records.removeIf(r -> r.getDate().equals(record.getDate())); + records.add(record); + saveData(); + } + + // SleepRecord에서 특정 날짜 기록 조회 -> SleepRecord 클래스 전체로 반환 (RecordPanel 팝업용) + public SleepRecord getRecordByDate(String userId, LocalDate date) { + List records = userSleepMap.getOrDefault(userId, new ArrayList<>()); + return records.stream() + .filter(r -> r.getDate().equals(date)) + .findFirst() + .orElse(null); + } + + // SleepRecord에서 수면 시간 조회 -> sleepDuration 리스트 형태로 반환 (SleepCalculation 평균 수면 시간 계산 용) + public List getLast7DaysSleepDurations(String userId) { + List records = userSleepMap.getOrDefault(userId, new ArrayList<>()); + LocalDate now = LocalDate.now(); + List durations = new ArrayList<>(); + + records.stream() + .filter(r -> !r.getDate().isAfter(now) && !r.getDate().isBefore(now.minusDays(6))) + .sorted(Comparator.comparing(SleepRecord::getDate)) + .forEach(r -> durations.add(r.getSleepDuration())); + + return durations; + } + + // 평균 계산 + public Duration getWeeklyAverage(String userId) { + List durations = getLast7DaysSleepDurations(userId); // 기존 메서드 재사용! + return SleepCalculator.calculateAverage(durations); + } + + // SleepRecord에서 수면 시간 조회 -> 그래프용 요일-수면시간 Map 형태로 반환 (AnalysisPanel 수면시간 그래프 용) + public Map getWeeklySleepGraph(String userId) { + Map graphData = new LinkedHashMap<>(); + List records = userSleepMap.getOrDefault(userId, new ArrayList<>()); + LocalDate now = LocalDate.now(); + + for (int i = 0; i < 7; i++) { + LocalDate targetDate = now.minusDays(6 - i); + String day = targetDate.getDayOfWeek().toString().substring(0, 3); // "MON", "TUE", ... + Duration duration = records.stream() + .filter(r -> r.getDate().equals(targetDate)) + .map(SleepRecord::getSleepDuration) + .findFirst() + .orElse(Duration.ZERO); + graphData.put(day, duration); + } + + return graphData; + } + + // SleepRrcord에서 수면 시간 조회 -> duration 객체로 반환 (SleepDataManager 수면의 질 계산 용) + public Duration getSleepDurationByDate(String userId, LocalDate date) { + SleepRecord r = getRecordByDate(userId, date); + return r != null ? r.getSleepDuration() : Duration.ZERO; + } + + public String getMoodByDate(String userId, LocalDate date) { + List records = userSleepMap.getOrDefault(userId, new ArrayList<>()); + for (SleepRecord record : records) { + if (record.getDate().equals(date)) { + return record.getMood(); + } + } + return null; + } +} diff --git a/Neul-main/src/main/java/SleepDatabase.java b/Neul-main/src/main/java/SleepDatabase.java new file mode 100644 index 0000000..b120126 --- /dev/null +++ b/Neul-main/src/main/java/SleepDatabase.java @@ -0,0 +1,51 @@ +// 사용자 정보가 앱 재시작 후에도 유지되도록 sleep_data.json을 관리하는 통합 클래스 + +import java.time.Duration; +import java.time.LocalDate; +import java.util.List; +import java.util.Map; + +public class SleepDatabase { + + private SleepDataService dataService; + + public SleepDatabase() { + this.dataService = new SleepDataService(); + } + + // 날짜 지정 기록 + public void addRecord(String userId, LocalDate date, Duration sleepDuration, String mood) { + SleepRecord record = new SleepRecord(date, sleepDuration, mood); + dataService.saveRecord(userId, record); + } + + // 오늘 날짜 자동 기록 (메서도 오버로딩) + public void addRecord(String userId, Duration sleepDuration, String mood) { + addRecord(userId, LocalDate.now(), sleepDuration, mood); + } + + // 특정 날짜 기록 조회 + public SleepRecord getRecordByDate(String userId, LocalDate date) { + return dataService.getRecordByDate(userId, date); + } + + // 최근 7일 수면 시간 리스트 반환 → SleepCalculator 용도 + public List getLast7DaysDurations(String userId) { + return dataService.getLast7DaysSleepDurations(userId); + } + + // 날짜별 수면 시간 → SleepDataManager 용도 + public Duration getDurationByDate(String userId, LocalDate date) { + return dataService.getSleepDurationByDate(userId, date); + } + + // 날짜별 감정 상태 → 이모티콘 표시용 + public String getMoodByDate(String userId, LocalDate date) { + return dataService.getMoodByDate(userId, date); + } + + // AnalysisPanel 그래프용 수면시간 데이터 + public Map getWeeklyGraph(String userId) { + return dataService.getWeeklySleepGraph(userId); + } +} diff --git a/Neul-main/src/main/java/SleepInputPanel.java b/Neul-main/src/main/java/SleepInputPanel.java new file mode 100644 index 0000000..55ee275 --- /dev/null +++ b/Neul-main/src/main/java/SleepInputPanel.java @@ -0,0 +1,229 @@ +import javax.swing.*; +import java.awt.*; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.Timer; +import java.util.TimerTask; + +public class SleepInputPanel extends JPanel { + + private JComboBox sleepHourCombo; + private JComboBox sleepMinuteCombo; + private AnalogClock clock; + private final JLabel digitalClockLabel; + private Timer timer; + private ScreenController controller; + + public SleepInputPanel(ScreenController controller) { + this.controller = controller; + setLayout(null); + setBackground(new Color(91, 89, 153)); + + // NEUL 제목 + JLabel title = new JLabel("NEUL"); + title.setFont(new Font("Serif", Font.BOLD, 80)); + title.setForeground(Color.WHITE); + title.setBounds(620, 40, 300, 100); + add(title); + + // 홈 버튼 + try { + ImageIcon homeIcon = new ImageIcon(getClass().getResource("/res/images/img.png")); + Image scaled = homeIcon.getImage().getScaledInstance(48, 48, Image.SCALE_SMOOTH); + ImageIcon resizedIcon = new ImageIcon(scaled); + JButton homeButton = new JButton(resizedIcon); + homeButton.setBounds(1360, 20, 48, 48); + homeButton.setBorderPainted(false); + homeButton.setContentAreaFilled(false); + homeButton.setFocusPainted(false); + homeButton.setOpaque(false); + add(homeButton); + + homeButton.addActionListener(e -> { + Window window = SwingUtilities.getWindowAncestor(SleepInputPanel.this); + if (window instanceof JFrame frame) { + frame.setContentPane(new MainMenuPanel()); + frame.revalidate(); + frame.repaint(); + } + }); + } catch (Exception e) { + System.err.println("홈 버튼 이미지 로드 실패: " + e.getMessage()); + } + + String[] hours = new String[24]; + for (int i = 0; i < 24; i++) hours[i] = String.valueOf(i); + String[] minutes = new String[60]; + for (int i = 0; i < 60; i++) minutes[i] = String.format("%02d", i); + + // 수면 입력 패널 (왼쪽) + JPanel sleepAtPanel = new JPanel(); + sleepAtPanel.setLayout(null); + sleepAtPanel.setBackground(Color.WHITE); + sleepAtPanel.setBounds(230, 180, 320, 600); + + JLabel sleepLabel = new JLabel("I will sleep at..", SwingConstants.CENTER); + sleepLabel.setFont(new Font("SansSerif", Font.BOLD, 20)); + sleepLabel.setBounds(30, 20, 260, 40); + sleepAtPanel.add(sleepLabel); + + sleepHourCombo = new JComboBox<>(hours); + sleepHourCombo.setBounds(40, 200, 100, 40); + sleepAtPanel.add(sleepHourCombo); + + sleepMinuteCombo = new JComboBox<>(minutes); + sleepMinuteCombo.setBounds(160, 200, 100, 40); + sleepAtPanel.add(sleepMinuteCombo); + + JButton sleepNextBtn = new JButton("▶ NEXT"); + sleepNextBtn.setBounds(110, 500, 100, 40); + sleepNextBtn.setFont(new Font("SansSerif", Font.PLAIN, 14)); + sleepAtPanel.add(sleepNextBtn); + + sleepNextBtn.addActionListener(e -> { + String hour = (String) sleepHourCombo.getSelectedItem(); + String minute = (String) sleepMinuteCombo.getSelectedItem(); + String timeStr = String.format("%02d:%02d", Integer.parseInt(hour), Integer.parseInt(minute)); + SleepTime sleepTime = new SleepTime(timeStr); + + Window window = SwingUtilities.getWindowAncestor(SleepInputPanel.this); + if (window instanceof JFrame frame) { + frame.setContentPane(new SleepRecommendationPanel(sleepTime)); + frame.revalidate(); + frame.repaint(); + } + }); + add(sleepAtPanel); + + // wake up at 패널 (중간) + JPanel wakeUpPanel = new JPanel(); + wakeUpPanel.setLayout(null); + wakeUpPanel.setBackground(Color.WHITE); + wakeUpPanel.setBounds(580, 180, 320, 600); + + JLabel wakeLabel = new JLabel("I will wake up at..", SwingConstants.CENTER); + wakeLabel.setFont(new Font("SansSerif", Font.BOLD, 20)); + wakeLabel.setBounds(30, 20, 260, 40); + wakeUpPanel.add(wakeLabel); + + JComboBox wakeHourCombo = new JComboBox<>(hours); + wakeHourCombo.setBounds(40, 200, 100, 40); + wakeUpPanel.add(wakeHourCombo); + + JComboBox wakeMinuteCombo = new JComboBox<>(minutes); + wakeMinuteCombo.setBounds(160, 200, 100, 40); + wakeUpPanel.add(wakeMinuteCombo); + + JButton wakeNextBtn = new JButton("▶ NEXT"); + wakeNextBtn.setBounds(110, 500, 100, 40); + wakeNextBtn.setFont(new Font("SansSerif", Font.PLAIN, 14)); + wakeUpPanel.add(wakeNextBtn); + + wakeNextBtn.addActionListener(e -> { + String hour = (String) wakeHourCombo.getSelectedItem(); + String minute = (String) wakeMinuteCombo.getSelectedItem(); + String timeStr = String.format("%02d:%02d", Integer.parseInt(hour), Integer.parseInt(minute)); + WakeTime wakeTime = new WakeTime(timeStr); + + Window window = SwingUtilities.getWindowAncestor(SleepInputPanel.this); + if (window instanceof JFrame frame) { + frame.setContentPane(new WakeRecommendationPanel(wakeTime)); + frame.revalidate(); + frame.repaint(); + } + }); + add(wakeUpPanel); + + // 시계 패널 (오른쪽) + JPanel clockPanel = new JPanel(); + clockPanel.setLayout(null); + clockPanel.setBackground(Color.WHITE); + clockPanel.setBounds(930, 180, 320, 600); + + JLabel clockLabel = new JLabel("Sleep now", SwingConstants.CENTER); + clockLabel.setFont(new Font("SansSerif", Font.BOLD, 20)); + clockLabel.setBounds(30, 20, 260, 40); + clockPanel.add(clockLabel); + + JPanel clockContainer = new JPanel(new BorderLayout()); + clockContainer.setOpaque(false); + clockContainer.setBounds(10, 70, 300, 400); + + clock = new AnalogClock(); + digitalClockLabel = new JLabel("", SwingConstants.CENTER); + digitalClockLabel.setFont(new Font("SansSerif", Font.BOLD, 20)); + digitalClockLabel.setForeground(Color.BLACK); + + clockContainer.add(clock, BorderLayout.CENTER); + clockContainer.add(digitalClockLabel, BorderLayout.SOUTH); + clockPanel.add(clockContainer); + + JButton playNow = new JButton("▶ NEXT"); + playNow.setBounds(110, 500, 100, 40); + playNow.setFont(new Font("SansSerif", Font.PLAIN, 14)); + clockPanel.add(playNow); + + playNow.addActionListener(e -> { + CurrentDateTime currentTimeBackend = new CurrentDateTime(); + Window window = SwingUtilities.getWindowAncestor(SleepInputPanel.this); + if (window instanceof JFrame frame) { + frame.setContentPane(new SleepCyclePanel(currentTimeBackend)); + frame.revalidate(); + frame.repaint(); + } + }); + + add(clockPanel); + startClock(); + } + + private void startClock() { + timer = new Timer(); + timer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + SwingUtilities.invokeLater(() -> { + clock.repaint(); + digitalClockLabel.setText(LocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm"))); + }); + } + }, 0, 1000); + } + + static class AnalogClock extends JPanel { + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + + int width = getWidth(); + int height = getHeight(); + int radius = Math.min(width, height) / 2 - 10; + int centerX = width / 2; + int centerY = height / 2; + + g2.setColor(Color.WHITE); + g2.fillRect(0, 0, width, height); + + g2.setColor(Color.BLACK); + g2.drawOval(centerX - radius, centerY - radius, radius * 2, radius * 2); + + LocalTime time = LocalTime.now(); + double minute = time.getMinute() * 6; + double hour = (time.getHour() % 12 + time.getMinute() / 60.0) * 30; + + drawHand(g2, centerX, centerY, hour, radius * 0.5f, 6); + drawHand(g2, centerX, centerY, minute, radius * 0.75f, 4); + } + + private void drawHand(Graphics2D g2, int cx, int cy, double angle, double length, int thickness) { + double rad = Math.toRadians(angle - 90); + int x = (int) (cx + length * Math.cos(rad)); + int y = (int) (cy + length * Math.sin(rad)); + g2.setStroke(new BasicStroke(thickness)); + g2.drawLine(cx, cy, x, y); + } + } + +} diff --git a/Neul-main/src/main/java/SleepRecommendationPanel.java b/Neul-main/src/main/java/SleepRecommendationPanel.java new file mode 100644 index 0000000..59fca85 --- /dev/null +++ b/Neul-main/src/main/java/SleepRecommendationPanel.java @@ -0,0 +1,139 @@ +import javax.swing.*; +import java.awt.*; +import java.text.MessageFormat; +import java.util.List; +import java.util.Objects; + +public class SleepRecommendationPanel extends JPanel { + private ScreenController controller; + + public SleepRecommendationPanel(ScreenController controller, SleepTime sleepTime) { + this.controller = controller; + setLayout(null); + setBackground(new Color(91, 89, 153)); + + // 백엔드에서 시간 받아오기 + String currentTime = sleepTime.getSleepTime().format(SleepTime.FORMATTER); + List recommendedTimes = sleepTime.recommendWakeTimes(); + + // NEUL 제목 + JLabel title = new JLabel("NEUL"); + title.setFont(new Font("Serif", Font.BOLD, 80)); + title.setForeground(Color.WHITE); + title.setBounds(640, 50, 300, 100); + add(title); + + // 홈 버튼 + try { + // 정확한 리소스 경로 사용 + System.out.println("이미지 경로: " + getClass().getResource("/res/images/img.png")); // ✅ 경로 확인용 로그 + + ImageIcon imgIcon = new ImageIcon(Objects.requireNonNull(getClass().getResource("/res/images/img.png"))); + Image scaled = imgIcon.getImage().getScaledInstance(48, 48, Image.SCALE_SMOOTH); + ImageIcon resizedIcon = new ImageIcon(scaled); + + JButton imgButton = new JButton(resizedIcon); + imgButton.setBounds(1360, 20, 48, 48); + imgButton.setBorderPainted(false); + imgButton.setContentAreaFilled(false); + imgButton.setFocusPainted(false); + imgButton.setOpaque(false); + add(imgButton); + + // 홈 버튼 클릭 시 MainMenuPanel로 이동 + imgButton.addActionListener(e -> { + Window window = SwingUtilities.getWindowAncestor(SleepRecommendationPanel.this); + if (window instanceof JFrame) { + JFrame frame = (JFrame) window; + frame.setContentPane(new MainMenuPanel()); + frame.revalidate(); + frame.repaint(); + } + }); + + } catch (Exception e) { + System.err.println("이미지 로드 실패: " + e.getMessage()); + } + + + // 현재 시간 패널 + JPanel currentTimePanel = new JPanel(new BorderLayout()); + currentTimePanel.setBackground(Color.WHITE); + currentTimePanel.setBounds(640, 160, 200, 50); + JLabel timeText = new JLabel(currentTime, SwingConstants.CENTER); + timeText.setFont(new Font("Digital-7 Mono", Font.BOLD, 28)); + currentTimePanel.add(timeText, BorderLayout.CENTER); + add(currentTimePanel); + + // 안내 문구 + JLabel desc = new JLabel("
You should wake up at:
(1 cycle = 1.5hrs)
", SwingConstants.CENTER); + desc.setFont(new Font("SansSerif", Font.PLAIN, 18)); + desc.setForeground(Color.WHITE); + desc.setBounds(600, 250, 300, 60); + add(desc); + + // 수면 사이클 패널 + int x = 400, y = 380; + for (int i = 0; i < 6; i++) { + JPanel cyclePanel = new JPanel(); + cyclePanel.setLayout(new BoxLayout(cyclePanel, BoxLayout.Y_AXIS)); + cyclePanel.setBackground(Color.WHITE); + cyclePanel.setBounds(x, y, 200, 120); + + JLabel cycleLabel = new JLabel((i + 1) + " cycle" + (i == 0 ? "" : "s"), SwingConstants.CENTER); + JLabel hourLabel = new JLabel((1.5 * (i + 1)) + " hrs", SwingConstants.CENTER); + + cycleLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + hourLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + + // 디지털 시계 스타일 시간 박스 + JPanel digitalPanel = new JPanel(); + digitalPanel.setBackground(Color.WHITE); + digitalPanel.setMaximumSize(new Dimension(160, 40)); + JLabel timeLabel = new JLabel(recommendedTimes.get(i), SwingConstants.CENTER); + timeLabel.setFont(new Font("Digital-7 Mono", Font.BOLD, 20)); + timeLabel.setForeground(new Color(66, 133, 244)); + digitalPanel.add(timeLabel); + + digitalPanel.setAlignmentX(Component.CENTER_ALIGNMENT); + + cyclePanel.add(Box.createVerticalStrut(10)); + cyclePanel.add(cycleLabel); + cyclePanel.add(hourLabel); + cyclePanel.add(Box.createVerticalStrut(5)); + cyclePanel.add(digitalPanel); + + Color borderColor = (i < 2) ? Color.RED : (i < 4) ? Color.YELLOW : Color.GREEN; + cyclePanel.setBorder(BorderFactory.createLineBorder(borderColor, 3)); + add(cyclePanel); + + x += 240; + if (i == 2) { + x = 400; + y += 150; + } + } + + // 하단 추천 문구 + JLabel bottomText = new JLabel("We recommend to sleep for 5–6 cycles!!", SwingConstants.CENTER); + bottomText.setFont(new Font("SansSerif", Font.BOLD, 20)); + bottomText.setForeground(Color.WHITE); + bottomText.setBounds(440, 700, 600, 50); + add(bottomText); + } + + // 테스트용 메인 + //public static void main(String[] args) { + //JFrame frame = new JFrame("Sleep Cycle Recommendation"); + //frame.setSize(1440, 1024); + //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + //frame.setLocationRelativeTo(null); + + // 수면 시간 설정 예: "22:00" + //SleepTime sleepTime = new SleepTime("22:00"); + //SleepRecommendationPanel panel = new SleepRecommendationPanel(); + + //frame.add(panel); + //frame.setVisible(true); + //} +} diff --git a/Neul-main/src/main/java/SleepRecord.java b/Neul-main/src/main/java/SleepRecord.java new file mode 100644 index 0000000..d57e85e --- /dev/null +++ b/Neul-main/src/main/java/SleepRecord.java @@ -0,0 +1,90 @@ +// 사용자가 TodayPanel에서 입력한 수면 정보와 감정을 날짜에 따라 저장하는 클래스 + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonIgnore; +import java.time.Duration; +import java.time.LocalDate; + +public class SleepRecord { + private LocalDate date; + private Duration sleepDuration; + private String mood; + + public SleepRecord() {} // 기본 생성자 (필수) + + // 오늘 날짜로 기록 + public SleepRecord(Duration sleepDuration, String mood) { + this(LocalDate.now(), sleepDuration, mood); + } + + // 날짜 지정해서 기록 + public SleepRecord(LocalDate date, Duration sleepDuration, String mood) { + this.date = date; + this.sleepDuration = sleepDuration; + this.mood = mood; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + // 내부 로직에서 사용할 Duration 객체 반환용 + @JsonIgnore + public Duration getSleepDuration() { + return sleepDuration; + } + + // 문자열 → Duration 역변환용 + @JsonProperty("sleepDuration") + public void setSleepDurationRaw(Duration duration) { + this.sleepDuration = duration; + } + + // 사용자에게 보여줄 문자열 반환용 + @JsonProperty("sleepDuration") + public String getSleepDurationFormatted() { + if (sleepDuration == null) return ""; + long hours = sleepDuration.toHours(); + long minutes = sleepDuration.toMinutesPart(); + return String.format("%d시간 %d분", hours, minutes); + } + + @JsonProperty("sleepDuration") + public void setSleepDurationFormatted(String durationStr) { + try { + // 예: "2시간 30분" → 시간과 분 추출 + long hours = 0; + long minutes = 0; + if (durationStr.contains("시간")) { + String[] split = durationStr.split("시간"); + hours = Long.parseLong(split[0].trim()); + if (split.length > 1 && split[1].contains("분")) { + minutes = Long.parseLong(split[1].replace("분", "").trim()); + } + } else if (durationStr.contains("분")) { + minutes = Long.parseLong(durationStr.replace("분", "").trim()); + } + this.sleepDuration = Duration.ofHours(hours).plusMinutes(minutes); + } catch (Exception e) { + // 파싱 실패 시 기본값 설정 (혹은 null 처리) + this.sleepDuration = Duration.ZERO; + } + } + + public String getMood() { + return mood; + } + + public void setMood(String mood) { + this.mood = mood; + } + + @Override + public String toString() { + return date + " | " + getSleepDurationFormatted() + " | 감정: " + mood; + } +} diff --git a/Neul-main/src/main/java/SleepTime.java b/Neul-main/src/main/java/SleepTime.java new file mode 100644 index 0000000..f2c50de --- /dev/null +++ b/Neul-main/src/main/java/SleepTime.java @@ -0,0 +1,30 @@ +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +public class SleepTime { + private LocalTime sleepTime; + private static final int CYCLE_MINUTES = 90; + private static final int MAX_CYCLES = 6; + public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("HH:mm"); + + public SleepTime(String timeStr) { + this.sleepTime = LocalTime.parse(timeStr, FORMATTER); + } + + // 1.5시간 단위로 기상 시간 추천 + public List recommendWakeTimes() { + List wakeTimes = new ArrayList<>(); + for (int i = 1; i <= MAX_CYCLES; i++) { + LocalTime wakeTime = sleepTime.plusMinutes(i * CYCLE_MINUTES); + wakeTimes.add(wakeTime.format(FORMATTER)); + } + return wakeTimes; + } + + public LocalTime getSleepTime() { + return sleepTime; + } +} + diff --git a/Neul-main/src/main/java/TodayPanel.java b/Neul-main/src/main/java/TodayPanel.java new file mode 100644 index 0000000..3bcc4a4 --- /dev/null +++ b/Neul-main/src/main/java/TodayPanel.java @@ -0,0 +1,213 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.time.*; + +public class TodayPanel extends JPanel { + private ScreenController controller; + private final User user; + + public TodayPanel(ScreenController controller) { + this.controller = controller; + + this.user = AuthManager.getCurrentUser(); + + if (this.user == null) { + JOptionPane.showMessageDialog(this, "로그인 정보가 없습니다. 다시 로그인해주세요."); + controller.navigateTo("login"); // 또는 적절한 초기 화면 + return; + } + + setBackground(Color.decode("#565686")); + setLayout(null); + + JLabel titleLabel = new JLabel("NEUL", SwingConstants.CENTER); + titleLabel.setFont(new Font("Serif", Font.PLAIN, 80)); + titleLabel.setForeground(Color.WHITE); + titleLabel.setBounds(0, 50, 1440, 80); + add(titleLabel); + + ImageIcon originalIcon = new ImageIcon(getClass().getResource("/images/img.png")); + Image resizedImage = originalIcon.getImage().getScaledInstance(32, 32, Image.SCALE_SMOOTH); + ImageIcon resizedIcon = new ImageIcon(resizedImage); + + JButton homeButton = new JButton(resizedIcon); + homeButton.setBounds(1375, 30, 32, 32); // 오른쪽 상단에 딱 맞게 + homeButton.setContentAreaFilled(false); + homeButton.setBorderPainted(false); + homeButton.setFocusPainted(false); + homeButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + + homeButton.addActionListener(e -> { + controller.navigateTo("main"); + }); + add(homeButton); + + JPanel sleepPanel = new JPanel(null); + sleepPanel.setBounds(100, 200, 600, 550); + sleepPanel.setBackground(Color.WHITE); + sleepPanel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1)); + add(sleepPanel); + + JLabel sleepLabel = new JLabel("오늘의 수면시간 입력", SwingConstants.CENTER); + sleepLabel.setBounds(150, 70, 300, 50); + sleepLabel.setFont(new Font("SansSerif", Font.PLAIN, 30)); + sleepPanel.add(sleepLabel); + + SpinnerNumberModel hourModel = new SpinnerNumberModel(8, 0, 23, 1); + JSpinner hourSpinner = new JSpinner(hourModel); + hourSpinner.setFont(new Font("SansSerif", Font.BOLD, 24)); + hourSpinner.setBounds(150, 200, 100, 60); + ((JSpinner.DefaultEditor) hourSpinner.getEditor()).getTextField().setEditable(false); + sleepPanel.add(hourSpinner); + + JLabel colon = new JLabel(":", SwingConstants.CENTER); + colon.setFont(new Font("SansSerif", Font.BOLD, 28)); + colon.setBounds(260, 200, 20, 60); + sleepPanel.add(colon); + + SpinnerNumberModel minModel = new SpinnerNumberModel(0, 0, 59, 1); + JSpinner minSpinner = new JSpinner(minModel); + minSpinner.setFont(new Font("SansSerif", Font.BOLD, 24)); + minSpinner.setBounds(290, 200, 100, 60); + ((JSpinner.DefaultEditor) minSpinner.getEditor()).getTextField().setEditable(false); + sleepPanel.add(minSpinner); + + JLabel hourLabel = new JLabel("Hour"); + hourLabel.setBounds(180, 270, 50, 20); + sleepPanel.add(hourLabel); + + JLabel minLabel = new JLabel("Minute"); + minLabel.setBounds(325, 270, 60, 20); + sleepPanel.add(minLabel); + + JPanel moodPanel = new JPanel(null); + moodPanel.setBounds(740, 200, 600, 550); + moodPanel.setBackground(Color.WHITE); + moodPanel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1)); + add(moodPanel); + + JLabel moodLabel = new JLabel("오늘의 기분", SwingConstants.CENTER); + moodLabel.setBounds(200, 70, 200, 30); + moodLabel.setFont(new Font("SansSerif", Font.PLAIN, 30)); + moodPanel.add(moodLabel); + + ImageIcon goodIcon = resizeIcon("images/Emotion.png"); + ImageIcon normalIcon = resizeIcon("images/Emotion (1).png"); + ImageIcon badIcon = resizeIcon("images/Emotion (2).png"); + + JToggleButton goodBtn = new JToggleButton(goodIcon); + JToggleButton normalBtn = new JToggleButton(normalIcon); + JToggleButton badBtn = new JToggleButton(badIcon); + + goodBtn.setBounds(50, 200, 140, 140); + normalBtn.setBounds(230, 200, 140, 140); + badBtn.setBounds(410, 200, 140, 140); + + Font moodFont = new Font("SansSerif", Font.BOLD, 18); + JLabel goodLabel = new JLabel("좋음", SwingConstants.CENTER); + goodLabel.setBounds(50, 350, 140, 30); + goodLabel.setFont(moodFont); + + JLabel normalLabel = new JLabel("보통", SwingConstants.CENTER); + normalLabel.setBounds(230, 350, 140, 30); + normalLabel.setFont(moodFont); + + JLabel badLabel = new JLabel("나쁨", SwingConstants.CENTER); + badLabel.setBounds(410, 350, 140, 30); + badLabel.setFont(moodFont); + + ButtonGroup moodGroup = new ButtonGroup(); + moodGroup.add(goodBtn); + moodGroup.add(normalBtn); + moodGroup.add(badBtn); + + for (JToggleButton btn : new JToggleButton[]{goodBtn, normalBtn, badBtn}) { + btn.setContentAreaFilled(false); + btn.setFocusPainted(false); + btn.setBorder(BorderFactory.createLineBorder(Color.GRAY, 3)); + } + + goodBtn.addActionListener(e -> { + goodBtn.setBorder(BorderFactory.createLineBorder(Color.GREEN, 3)); + normalBtn.setBorder(BorderFactory.createEmptyBorder()); + badBtn.setBorder(BorderFactory.createEmptyBorder()); + }); + + normalBtn.addActionListener(e -> { + goodBtn.setBorder(BorderFactory.createEmptyBorder()); + normalBtn.setBorder(BorderFactory.createLineBorder(Color.GREEN, 3)); + badBtn.setBorder(BorderFactory.createEmptyBorder()); + }); + + badBtn.addActionListener(e -> { + goodBtn.setBorder(BorderFactory.createEmptyBorder()); + normalBtn.setBorder(BorderFactory.createEmptyBorder()); + badBtn.setBorder(BorderFactory.createLineBorder(Color.GREEN, 3)); + }); + + moodPanel.add(goodBtn); + moodPanel.add(normalBtn); + moodPanel.add(badBtn); + moodPanel.add(goodLabel); + moodPanel.add(normalLabel); + moodPanel.add(badLabel); + + JButton saveBtn = new JButton("Save"); + saveBtn.setFont(new Font("SansSerif", Font.BOLD, 20)); + saveBtn.setBounds(637, 800, 166, 50); + saveBtn.setEnabled(true); + add(saveBtn); + + Action updateSaveState = new AbstractAction() { + public void actionPerformed(ActionEvent e) { + boolean moodSelected = goodBtn.isSelected() || normalBtn.isSelected() || badBtn.isSelected(); + boolean timeValid = true; // 시/분은 항상 유효한 Spinner 값이라 true로 설정 + saveBtn.setEnabled(moodSelected && timeValid); + } + }; + + goodBtn.addActionListener(updateSaveState); + normalBtn.addActionListener(updateSaveState); + badBtn.addActionListener(updateSaveState); + + saveBtn.addActionListener((ActionEvent e) -> { + int hour = (int) hourSpinner.getValue(); + int minute = (int) minSpinner.getValue(); + Duration duration = Duration.ofHours(hour).plusMinutes(minute); + + String mood = goodBtn.isSelected() ? "좋음" : + normalBtn.isSelected() ? "보통" : + badBtn.isSelected() ? "나쁨" : null; + + if (mood == null) { + JOptionPane.showMessageDialog(this, "기분을 선택해주세요."); + return; + } + + SleepRecord record = new SleepRecord(duration, mood); + SleepDataService dataService = new SleepDataService(); + dataService.saveRecord(user.getUsername(), record); + + JOptionPane.showMessageDialog(this, "저장되었습니다!"); + }); + + setVisible(true); + } + + private ImageIcon resizeIcon(String filePath) { + java.net.URL imageUrl = getClass().getResource("/" + filePath); // 리소스 경로 불러오기 + if (imageUrl == null) { + System.err.println("이미지 로딩 실패: " + filePath); + return null; + } + + Image img = new ImageIcon(imageUrl).getImage().getScaledInstance(140, 140, Image.SCALE_SMOOTH); + return new ImageIcon(img); + } + + //public static void main(String[] args) { + //SleepDataService service = new SleepDataService(); + //SwingUtilities.invokeLater(() -> new TodayPanel()); + //} +} \ No newline at end of file diff --git a/Neul-main/src/main/java/User.java b/Neul-main/src/main/java/User.java new file mode 100644 index 0000000..d7608d6 --- /dev/null +++ b/Neul-main/src/main/java/User.java @@ -0,0 +1,26 @@ +// 사용자 정보 클래스 (Jackson 직렬화용 POJO) +public class User { + private String username; + private String password; // 해시된 비밀번호 저장 + + public User() {} // Jackson 역직렬화를 위한 기본 생성자 + + public User(String username, String password) { + this.username = username; + this.password = password; + } + + public String getUsername() { + return username; + } + + public String getPassword() { + return password; + } + + // 입력받은 비밀번호가 저장된 해시와 일치하는지 확인 + public boolean checkPassword(String inputPassword) { + String hashedInput = PasswordUtil.hashPassword(inputPassword); + return this.password.equals(hashedInput); + } +} diff --git a/Neul-main/src/main/java/UserService.java b/Neul-main/src/main/java/UserService.java new file mode 100644 index 0000000..4a44f32 --- /dev/null +++ b/Neul-main/src/main/java/UserService.java @@ -0,0 +1,51 @@ +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class UserService { + private static final UserService instance = new UserService(); + private final Map userMap = new HashMap<>(); + private final ObjectMapper objectMapper = new ObjectMapper(); + private final File file = new File("users.json"); + + private UserService() { + loadFromFile(); + } + + public static UserService getInstance() { + return instance; + } + + public boolean register(String id, String password) { + if (userMap.containsKey(id)) return false; + userMap.put(id, password); + saveToFile(); + return true; + } + + public boolean login(String id, String pw) { + return userMap.containsKey(id) && userMap.get(id).equals(pw); + } + + private void saveToFile() { + try { + objectMapper.writeValue(file, userMap); // ✅ 한 줄로 JSON 저장 + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void loadFromFile() { + if (!file.exists()) return; + try { + Map loaded = objectMapper.readValue(file, new TypeReference<>() {}); + userMap.putAll(loaded); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/Neul-main/src/main/java/WakeRecommendationPanel.java b/Neul-main/src/main/java/WakeRecommendationPanel.java new file mode 100644 index 0000000..3b0feff --- /dev/null +++ b/Neul-main/src/main/java/WakeRecommendationPanel.java @@ -0,0 +1,141 @@ +import javax.swing.*; +import java.awt.*; +import java.util.List; +import java.time.format.DateTimeFormatter; +import java.util.Objects; + + +public class WakeRecommendationPanel extends JPanel { + private ScreenController controller; + + public WakeRecommendationPanel(ScreenController controller, WakeTime wakeTime) { + this.controller = controller; + setLayout(null); + setBackground(new Color(91, 89, 153)); + + // 백엔드에서 시간 받아오기 + String currentTime = wakeTime.getWakeTime().format(DateTimeFormatter.ofPattern("HH:mm")); + List recommendedTimes = wakeTime.recommendSleepTimes(); + + // NEUL 제목 + JLabel title = new JLabel("NEUL"); + title.setFont(new Font("Serif", Font.BOLD, 80)); + title.setForeground(Color.WHITE); + title.setBounds(640, 50, 300, 100); + add(title); + + // 홈 버튼 + try { + // 정확한 리소스 경로 사용 + System.out.println("이미지 경로: " + getClass().getResource("/res/images/img.png")); // ✅ 경로 확인용 로그 + + ImageIcon imgIcon = new ImageIcon(Objects.requireNonNull(getClass().getResource("/res/images/img.png"))); + Image scaled = imgIcon.getImage().getScaledInstance(48, 48, Image.SCALE_SMOOTH); + ImageIcon resizedIcon = new ImageIcon(scaled); + + JButton imgButton = new JButton(resizedIcon); + imgButton.setBounds(1360, 20, 48, 48); + imgButton.setBorderPainted(false); + imgButton.setContentAreaFilled(false); + imgButton.setFocusPainted(false); + imgButton.setOpaque(false); + add(imgButton); + + // ✅ 홈 버튼 클릭 시 MainMenuPanel로 이동 + imgButton.addActionListener(e -> { + Window window = SwingUtilities.getWindowAncestor(WakeRecommendationPanel.this); + if (window instanceof JFrame) { + JFrame frame = (JFrame) window; + frame.setContentPane(new MainMenuPanel()); + frame.revalidate(); + frame.repaint(); + } + }); + + } catch (Exception e) { + System.err.println("이미지 로드 실패: " + e.getMessage()); + } + + + // 현재 시간 패널 + JPanel currentTimePanel = new JPanel(new BorderLayout()); + currentTimePanel.setBackground(Color.WHITE); + currentTimePanel.setBounds(640, 160, 200, 50); + JLabel timeText = new JLabel(currentTime, SwingConstants.CENTER); + timeText.setFont(new Font("Digital-7 Mono", Font.BOLD, 28)); + currentTimePanel.add(timeText, BorderLayout.CENTER); + add(currentTimePanel); + + // 안내 문구 + JLabel desc = new JLabel("
You should sleep at:
(1 cycle = 1.5hrs)
", SwingConstants.CENTER); + desc.setFont(new Font("SansSerif", Font.PLAIN, 18)); + desc.setForeground(Color.WHITE); + desc.setBounds(600, 250, 300, 60); + add(desc); + + // 수면 사이클 패널 + int x = 400, y = 380; + for (int i = 0; i < 6; i++) { + JPanel cyclePanel = new JPanel(); + cyclePanel.setLayout(new BoxLayout(cyclePanel, BoxLayout.Y_AXIS)); + cyclePanel.setBackground(Color.WHITE); + cyclePanel.setBounds(x, y, 200, 120); + + JLabel cycleLabel = new JLabel((i + 1) + " cycle" + (i == 0 ? "" : "s"), SwingConstants.CENTER); + JLabel hourLabel = new JLabel((1.5 * (i + 1)) + " hrs", SwingConstants.CENTER); + + cycleLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + hourLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + + // 디지털 시계 스타일 시간 박스 + JPanel digitalPanel = new JPanel(); + digitalPanel.setBackground(Color.WHITE); + digitalPanel.setMaximumSize(new Dimension(160, 40)); + JLabel timeLabel = new JLabel(recommendedTimes.get(i), SwingConstants.CENTER); + timeLabel.setFont(new Font("Digital-7 Mono", Font.BOLD, 20)); + timeLabel.setForeground(new Color(66, 133, 244)); + digitalPanel.add(timeLabel); + + digitalPanel.setAlignmentX(Component.CENTER_ALIGNMENT); + + cyclePanel.add(Box.createVerticalStrut(10)); + cyclePanel.add(cycleLabel); + cyclePanel.add(hourLabel); + cyclePanel.add(Box.createVerticalStrut(5)); + cyclePanel.add(digitalPanel); + + Color borderColor = (i < 2) ? Color.RED : (i < 4) ? Color.YELLOW : Color.GREEN; + cyclePanel.setBorder(BorderFactory.createLineBorder(borderColor, 3)); + add(cyclePanel); + + x += 240; + if (i == 2) { + x = 400; + y += 150; + } + } + + // 하단 추천 문구 + JLabel bottomText = new JLabel("We recommend to sleep for 5–6 cycles!!", SwingConstants.CENTER); + bottomText.setFont(new Font("SansSerif", Font.BOLD, 20)); + bottomText.setForeground(Color.WHITE); + bottomText.setBounds(440, 700, 600, 50); + add(bottomText); + } +} + + // 테스트용 메인 +// public static void main(String[] args) { +// JFrame frame = new JFrame("Sleep Time Recommendation"); +// frame.setSize(1440, 1024); +// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +// frame.setLocationRelativeTo(null); +// +// // 기상 시간 설정 예: "07:00" +// WakeTime wakeTime = new WakeTime("07:00"); +// WakeRecommendationPanel panel = new WakeRecommendationPanel(wakeTime); +// +// frame.add(panel); +// frame.setVisible(true); +// } +//} diff --git a/Neul-main/src/main/java/WakeTime.java b/Neul-main/src/main/java/WakeTime.java new file mode 100644 index 0000000..ed91e33 --- /dev/null +++ b/Neul-main/src/main/java/WakeTime.java @@ -0,0 +1,30 @@ +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +public class WakeTime { + private LocalTime wakeTime; + private static final int CYCLE_MINUTES = 90; + private static final int MAX_CYCLES = 6; + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("HH:mm"); + + public WakeTime(String timeStr) { + this.wakeTime = LocalTime.parse(timeStr, FORMATTER); + } + + // 1.5시간 단위로 수면 시간 추천 + public List recommendSleepTimes() { + List sleepTimes = new ArrayList<>(); + for (int i = 1; i <= MAX_CYCLES; i++) { + LocalTime sleepTime = wakeTime.minusMinutes(i * CYCLE_MINUTES); + sleepTimes.add(sleepTime.format(FORMATTER)); + } + return sleepTimes; + } + + public LocalTime getWakeTime() { + return wakeTime; + } +} + diff --git a/Neul-main/src/main/resources/images/Emotion (1).png b/Neul-main/src/main/resources/images/Emotion (1).png new file mode 100644 index 0000000000000000000000000000000000000000..5432f09d074d9f833b9569a9bb5fdd2b834dea3f GIT binary patch literal 18051 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 literal 0 HcmV?d00001 diff --git a/Neul-main/users.json b/Neul-main/users.json new file mode 100644 index 0000000..171a56c --- /dev/null +++ b/Neul-main/users.json @@ -0,0 +1 @@ +{"kimsubin":"rlatnqls","7777":"777777"} \ No newline at end of file