diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..603b140
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,14 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..bb9c7ae
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+PENGPERSONAL
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..fb7f4a8
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..d3b1fde
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..a5f05cd
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..6199cc2
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules/modules.plantuml b/.idea/modules/modules.plantuml
new file mode 100644
index 0000000..922d387
--- /dev/null
+++ b/.idea/modules/modules.plantuml
@@ -0,0 +1,32 @@
+@startuml
+
+title __PENGPERSONAL's Class Diagram__\n
+
+ namespace com.zhang.pengpersonal {
+ class com.zhang.pengpersonal.ExampleInstrumentedTest {
+ }
+ }
+
+
+ namespace com.zhang.pengpersonal {
+ class com.zhang.pengpersonal.ExampleUnitTest {
+ }
+ }
+
+
+ namespace com.zhang.pengpersonal {
+ class com.zhang.pengpersonal.MainActivity {
+ }
+ }
+
+
+
+
+right footer
+
+
+PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
+For more information about this tool, please contact philippe.mesmeur@gmail.com
+endfooter
+
+@enduml
diff --git a/PENGPERSONAL.plantuml b/PENGPERSONAL.plantuml
new file mode 100644
index 0000000..d2113c0
--- /dev/null
+++ b/PENGPERSONAL.plantuml
@@ -0,0 +1,29 @@
+@startuml
+
+title __PENGPERSONAL's Component Diagram__\n
+
+ component "PENGPERSONAL.bms.unitTest" {
+ [PENGPERSONAL.bms.main]
+ component "PENGPERSONAL.bms.main" {
+ [PENGPERSONAL.bms.androidTest]
+ component "PENGPERSONAL.bms.androidTest" {
+ [PENGPERSONAL.bms]
+ }
+
+
+ }
+
+
+ }
+
+
+
+
+right footer
+
+
+PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
+For more information about this tool, please contact philippe.mesmeur@gmail.com
+endfooter
+
+@enduml
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..91f3d2e
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,33 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 29
+ buildToolsVersion "29.0.3"
+
+ defaultConfig {
+ applicationId "com.zhang.pengpersonal"
+ minSdkVersion 14
+ targetSdkVersion 29
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+
+}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/zhang/pengpersonal/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/zhang/pengpersonal/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..2a73b8a
--- /dev/null
+++ b/app/src/androidTest/java/com/zhang/pengpersonal/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.zhang.pengpersonal;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.zhang.pengpersonal", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/zhang/pengpersonal/pengpersonal.plantuml b/app/src/androidTest/java/com/zhang/pengpersonal/pengpersonal.plantuml
new file mode 100644
index 0000000..fc8657d
--- /dev/null
+++ b/app/src/androidTest/java/com/zhang/pengpersonal/pengpersonal.plantuml
@@ -0,0 +1,21 @@
+@startuml
+
+title __PENGPERSONAL's Class Diagram__\n
+
+ namespace com.zhang.pengpersonal {
+ class com.zhang.pengpersonal.ExampleInstrumentedTest {
+ + useAppContext()
+ }
+ }
+
+
+
+
+right footer
+
+
+PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
+For more information about this tool, please contact philippe.mesmeur@gmail.com
+endfooter
+
+@enduml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..b46f8bd
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/zhang/pengpersonal/MainActivity.java b/app/src/main/java/com/zhang/pengpersonal/MainActivity.java
new file mode 100644
index 0000000..bf47db9
--- /dev/null
+++ b/app/src/main/java/com/zhang/pengpersonal/MainActivity.java
@@ -0,0 +1,14 @@
+package com.zhang.pengpersonal;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.os.Bundle;
+
+public class MainActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zhang/pengpersonal/pengpersonal.plantuml b/app/src/main/java/com/zhang/pengpersonal/pengpersonal.plantuml
new file mode 100644
index 0000000..0f67ff7
--- /dev/null
+++ b/app/src/main/java/com/zhang/pengpersonal/pengpersonal.plantuml
@@ -0,0 +1,21 @@
+@startuml
+
+title __PENGPERSONAL's Class Diagram__\n
+
+ namespace com.zhang.pengpersonal {
+ class com.zhang.pengpersonal.MainActivity {
+ # onCreate()
+ }
+ }
+
+
+
+
+right footer
+
+
+PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
+For more information about this tool, please contact philippe.mesmeur@gmail.com
+endfooter
+
+@enduml
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..4fc2444
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..a571e60
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..61da551
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c41dd28
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..db5080a
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..6dba46d
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..da31a87
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..15ac681
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..b216f2d
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..f25a419
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..e96783c
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..4faecfa
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,6 @@
+
+
+ #6200EE
+ #3700B3
+ #03DAC5
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..2ce9953
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ PENGPERSONAL
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..fac9291
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/test/java/com/zhang/pengpersonal/ExampleUnitTest.java b/app/src/test/java/com/zhang/pengpersonal/ExampleUnitTest.java
new file mode 100644
index 0000000..60d76a6
--- /dev/null
+++ b/app/src/test/java/com/zhang/pengpersonal/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.zhang.pengpersonal;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/app/src/test/java/com/zhang/pengpersonal/pengpersonal.plantuml b/app/src/test/java/com/zhang/pengpersonal/pengpersonal.plantuml
new file mode 100644
index 0000000..0524f2f
--- /dev/null
+++ b/app/src/test/java/com/zhang/pengpersonal/pengpersonal.plantuml
@@ -0,0 +1,21 @@
+@startuml
+
+title __PENGPERSONAL's Class Diagram__\n
+
+ namespace com.zhang.pengpersonal {
+ class com.zhang.pengpersonal.ExampleUnitTest {
+ + addition_isCorrect()
+ }
+ }
+
+
+
+
+right footer
+
+
+PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
+For more information about this tool, please contact philippe.mesmeur@gmail.com
+endfooter
+
+@enduml
diff --git a/bms-__BMS_s_Class_Diagram____.png b/bms-__BMS_s_Class_Diagram____.png
new file mode 100644
index 0000000..c793a0e
Binary files /dev/null and b/bms-__BMS_s_Class_Diagram____.png differ
diff --git a/bms/.gitignore b/bms/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/bms/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/bms/build.gradle b/bms/build.gradle
new file mode 100644
index 0000000..f7ad7d4
--- /dev/null
+++ b/bms/build.gradle
@@ -0,0 +1,33 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 29
+ buildToolsVersion "29.0.3"
+
+ defaultConfig {
+ applicationId "com.zhang.bms"
+ minSdkVersion 14
+ targetSdkVersion 29
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+
+}
diff --git a/bms/proguard-rules.pro b/bms/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/bms/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/bms/src/androidTest/java/com/zhang/bms/ExampleInstrumentedTest.java b/bms/src/androidTest/java/com/zhang/bms/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..ef30273
--- /dev/null
+++ b/bms/src/androidTest/java/com/zhang/bms/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.zhang.bms;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.zhang.bms", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/AndroidManifest.xml b/bms/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..ddecf1c
--- /dev/null
+++ b/bms/src/main/AndroidManifest.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/ic_launcher-playstore.png b/bms/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..0206a91
Binary files /dev/null and b/bms/src/main/ic_launcher-playstore.png differ
diff --git a/bms/src/main/java/com/zhang/bms/MainActivity.java b/bms/src/main/java/com/zhang/bms/MainActivity.java
new file mode 100644
index 0000000..5da5939
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/MainActivity.java
@@ -0,0 +1,84 @@
+package com.zhang.bms;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.TextView;
+
+import com.zhang.bms.ui.LoginActivity;
+import com.zhang.bms.ui.ManageIndexActivity;
+import com.zhang.bms.ui.ShowBooksActivity;
+
+public class MainActivity extends AppCompatActivity {
+ private TextView tv;
+ private Runnable mRunnable;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ //取消状态栏
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ tv = findViewById(R.id.countdown);
+ final SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+
+ MyCountDownTimer myCountDownTimer = new MyCountDownTimer(6000,1000); // 5000代表5秒后进入主页面
+ myCountDownTimer.start();
+ handler.postDelayed(mRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if (!sharedPreferences.getString("username","").equals("")){
+ Intent intent = new Intent(MainActivity.this, ShowBooksActivity.class);
+ startActivity(intent);
+ }else {
+ Intent intent = new Intent(MainActivity.this, LoginActivity.class);
+ startActivity(intent);
+ }
+
+ finish();
+ }
+ },6000);
+ tv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (!sharedPreferences.getString("username","").equals("")){
+ Intent intent = new Intent(MainActivity.this, ShowBooksActivity.class);
+ startActivity(intent);
+ }else {
+ Intent intent = new Intent(MainActivity.this, LoginActivity.class);
+ startActivity(intent);
+ }
+ finish();
+ if(mRunnable!=null){ // 判断消息handler消息如果消息不是空就把handler消息remove 清除掉 这样防止点过 跳过 之后还会出现在次开启一个Activity
+ handler.removeCallbacks(mRunnable);
+ }
+ }
+ });
+
+
+
+ }
+ private Handler handler = new Handler();
+ class MyCountDownTimer extends CountDownTimer {
+
+ public MyCountDownTimer(long millisInFuture, long countDownInterval){
+ super(millisInFuture,countDownInterval);
+
+ }
+ @Override
+ public void onTick(long millisUntilFinished) {
+ tv.setText("跳过 "+millisUntilFinished /1000);
+ }
+
+ @Override
+ public void onFinish() {
+ tv.setText("正在跳转");
+ }
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/bms.plantuml b/bms/src/main/java/com/zhang/bms/bms.plantuml
new file mode 100644
index 0000000..417d12f
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/bms.plantuml
@@ -0,0 +1,30 @@
+@startuml
+
+title __BMS's Class Diagram__\n
+
+ namespace com.zhang.bms {
+ class com.zhang.bms.MainActivity {
+ - handler : Handler
+ - mRunnable : Runnable
+ - tv : TextView
+ # onCreate()
+ }
+ }
+
+
+
+
+
+ com.zhang.bms.MainActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.MainActivity +-down- com.zhang.bms.MainActivity.MyCountDownTimer
+ com.zhang.bms.MainActivity.MyCountDownTimer -up-|> android.os.CountDownTimer
+
+
+right footer
+
+
+PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
+For more information about this tool, please contact philippe.mesmeur@gmail.com
+endfooter
+
+@enduml
diff --git a/bms/src/main/java/com/zhang/bms/control/BookTableHelper.java b/bms/src/main/java/com/zhang/bms/control/BookTableHelper.java
new file mode 100644
index 0000000..a93ec6b
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/control/BookTableHelper.java
@@ -0,0 +1,194 @@
+package com.zhang.bms.control;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.widget.ArrayAdapter;
+
+import com.zhang.bms.model.Book;
+
+import java.util.ArrayList;
+
+public class BookTableHelper {
+ //添加图书
+ public boolean AddBook(DBHelper dbHelper,Book book){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ ContentValues values = new ContentValues();
+ values.put("ISBN",book.getISBN());
+ values.put("bookname",book.getBookname());
+ values.put("author",book.getAuthor());
+ values.put("press",book.getPress());
+ values.put("publicationtime",book.getPublicationtime());
+ values.put("category",book.getCategory());
+ values.put("synopsis",book.getSynopsis());
+ values.put("inventory",book.getinventory());
+ values.put("page",book.getPage());
+ long id = db.insert("book",null,values);
+ db.close();
+ boolean flag;
+ if (id != -1){
+ flag = true;
+ }else {
+ flag = false;
+ }
+ return flag;
+ }
+ //图书grid展示
+ public ArrayList BookGrid(DBHelper dbHelper){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.query("book",new String[]{"id","bookname","author","inventory"},
+ null,null,null,null,"id desc");
+ ArrayList list = new ArrayList<>();
+ if (cursor != null && cursor.getCount() > 0){
+ while (cursor.moveToNext()){
+ String id = cursor.getString(cursor.getColumnIndex("id"));
+ String bookname = cursor.getString(cursor.getColumnIndex("bookname"));
+ String author = cursor.getString(cursor.getColumnIndex("author"));
+ int inventory = cursor.getInt(cursor.getColumnIndex("inventory"));
+ Book book = new Book(id,bookname,author,inventory,2);
+ list.add(book);
+ }
+ }
+ db.close();
+ return list;
+ }
+ //图书管理列表
+ public ArrayList BookList(DBHelper dbHelper){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.query("book",new String[]{"id","bookname","author","category"},
+ null,null,null,null,"id desc");
+ ArrayList list = new ArrayList<>();
+ if (cursor != null && cursor.getCount() > 0){
+ while (cursor.moveToNext()){
+ String id = cursor.getString(cursor.getColumnIndex("id"));
+ String bookname = cursor.getString(cursor.getColumnIndex("bookname"));
+ String author = cursor.getString(cursor.getColumnIndex("author"));
+ String category = cursor.getString(cursor.getColumnIndex("category"));
+ Book book = new Book(id,bookname,author,category);
+ list.add(book);
+ }
+ }
+ db.close();
+ return list;
+ }
+ //图书管理详情页
+ public ArrayList BookDetails(DBHelper dbHelper,String bid){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.query("book",new String[]{"ISBN","bookname","author","press",
+ "publicationtime","category","synopsis","inventory","page"},"id = ?",
+ new String[]{bid + ""},null,null,null);
+ ArrayList list = new ArrayList<>();
+ if (cursor != null && cursor.getCount() > 0){
+ while (cursor.moveToNext()){
+ String ISBN = cursor.getString(cursor.getColumnIndex("ISBN"));
+ String bookname = cursor.getString(cursor.getColumnIndex("bookname"));
+ String author = cursor.getString(cursor.getColumnIndex("author"));
+ String press = cursor.getString(cursor.getColumnIndex("press"));
+ String publicationtime = cursor.getString(cursor.getColumnIndex("publicationtime"));
+ String category = cursor.getString(cursor.getColumnIndex("category"));
+ String synopsis = cursor.getString(cursor.getColumnIndex("synopsis"));
+ int inventory = cursor.getInt(cursor.getColumnIndex("inventory"));
+ int page = cursor.getInt(cursor.getColumnIndex("page"));
+ Book book = new Book(ISBN,bookname,author,press,publicationtime,category,synopsis,inventory,page);
+ list.add(book);
+ }
+ }
+ db.close();
+ return list;
+ }
+ //删除图书
+ public boolean DeleteBook(DBHelper dbHelper,String id){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ int flag = db.delete("book","id=?",new String[]{id + ""});
+ db.close();
+ boolean result;
+ if (flag == -1){
+ result = false;
+ }else {
+ result = true;
+ }
+ return result;
+ }
+ //修改图书
+ public boolean UpdateBook(DBHelper dbHelper,String id,String ISBN,String bookname,String author,String press,String publicationtime,
+ String categoty,String synopsis,int inventory,int page){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ ContentValues values = new ContentValues();
+ values.put("ISBN",ISBN);
+ values.put("bookname",bookname);
+ values.put("author",author);
+ values.put("press",press);
+ values.put("publicationtime",publicationtime);
+ values.put("category",categoty);
+ values.put("synopsis",synopsis);
+ values.put("inventory",inventory);
+ values.put("page",page);
+ int flag = db.update("book",values,"id = ?",new String[]{id});
+ boolean result;
+ if (flag == -1){
+ result = false;
+ }else {
+ result = true;
+ }
+ db.close();
+ return result;
+ }
+ //图书搜索功能
+ public ArrayList SearchBook(DBHelper dbHelper,String searcher){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.query("book",new String[]{"id","bookname","author","inventory"},
+ "bookname like ? or author like ?",new String[]{"%"+searcher+"%","%"+searcher+"%"},
+ null,null,null);
+ ArrayList list = new ArrayList<>();
+ if (cursor != null && cursor.getCount() > 0){
+ while (cursor.moveToNext()){
+ String bid = cursor.getString(cursor.getColumnIndex("id"));
+ String bookname = cursor.getString(cursor.getColumnIndex("bookname"));
+ String author = cursor.getString(cursor.getColumnIndex("author"));
+ int inventory = cursor.getInt(cursor.getColumnIndex("inventory"));
+ Book book = new Book(bid,bookname,author,inventory,2);
+ list.add(book);
+ }
+ }
+ db.close();
+ return list;
+ }
+ //已收藏图书查询
+ public ArrayList SearchCollection(DBHelper dbHelper,String searcher){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.rawQuery("select * from book where id in ("+searcher+")",null);
+ ArrayList list = new ArrayList<>();
+ if (cursor != null && cursor.getCount() > 0){
+ while (cursor.moveToNext()){
+ String id = cursor.getString(cursor.getColumnIndex("id"));
+ String bookname = cursor.getString(cursor.getColumnIndex("bookname"));
+ String author = cursor.getString(cursor.getColumnIndex("author"));
+ int inventory = cursor.getInt(cursor.getColumnIndex("inventory"));
+ Book book = new Book(id,bookname,author,inventory,2);
+ list.add(book);
+ }
+ }
+ db.close();
+ return list;
+ }
+ //借阅图书/还书
+ public void BorrowBook(DBHelper dbHelper,String bid,int new_inventory){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ ContentValues values = new ContentValues();
+ values.put("inventory",new_inventory);
+ db.update("book",values,"id=?",new String[]{bid});
+ db.close();
+ }
+ //查询馆藏
+ public int FindInventory(DBHelper dbHelper,String bid){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.rawQuery("select inventory from book where id = ?",new String[]{bid});
+ int number = 0;
+ if (cursor != null && cursor.getCount() > 0){
+ while (cursor.moveToNext()){
+ number = cursor.getInt(0);
+ }
+ }
+ return number;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/control/BorrowTableHelper.java b/bms/src/main/java/com/zhang/bms/control/BorrowTableHelper.java
new file mode 100644
index 0000000..b59e43c
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/control/BorrowTableHelper.java
@@ -0,0 +1,80 @@
+package com.zhang.bms.control;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+
+import com.zhang.bms.model.Borrow;
+
+import java.util.ArrayList;
+
+public class BorrowTableHelper {
+ //新增借阅信息
+ public boolean AddBorrow(DBHelper dbHelper, Borrow borrow){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ ContentValues values = new ContentValues();
+ values.put("botime",borrow.getBotime());
+ values.put("bookid",borrow.getBookid());
+ values.put("userid",borrow.getUserid());
+ values.put("bostate",borrow.getBostate());
+ long id = db.insert("borrow",null,values);
+ db.close();
+ boolean flag;
+ if (id != -1){
+ flag = true;
+ }else {
+ flag = false;
+ }
+ return flag;
+ }
+ //查询借阅记录
+ public ArrayList ShowBorrow(DBHelper dbHelper,String uid){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.rawQuery("select * from borrow where userid = ? order by boid desc",new String[]{uid});
+ ArrayList list = new ArrayList<>();
+ if (cursor != null && cursor.getCount() > 0){
+ while (cursor.moveToNext()){
+ String bookid = cursor.getString(cursor.getColumnIndex("bookid"));
+ String botime = cursor.getString(cursor.getColumnIndex("botime"));
+ int bostate = cursor.getInt(cursor.getColumnIndex("bostate"));
+ String backtime = cursor.getString(cursor.getColumnIndex("backtime"));
+ String reviewer = cursor.getString(cursor.getColumnIndex("reviewer"));
+ Borrow borrow = new Borrow(botime,bookid,bostate,backtime,reviewer);
+ list.add(borrow);
+ }
+ }
+ db.close();
+ return list;
+ }
+ //所有借阅记录
+ public ArrayList AllBorrow(DBHelper dbHelper){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.rawQuery("select * from borrow order by boid desc",null);
+ ArrayList list = new ArrayList<>();
+ if (cursor != null && cursor.getCount() > 0){
+ while (cursor.moveToNext()){
+ String boid = cursor.getString(cursor.getColumnIndex("boid"));
+ String bookid = cursor.getString(cursor.getColumnIndex("bookid"));
+ String botime = cursor.getString(cursor.getColumnIndex("botime"));
+ String userid = cursor.getString(cursor.getColumnIndex("userid"));
+ int bostate = cursor.getInt(cursor.getColumnIndex("bostate"));
+ String backtime = cursor.getString(cursor.getColumnIndex("backtime"));
+ String reviewer = cursor.getString(cursor.getColumnIndex("reviewer"));
+ Borrow borrow = new Borrow(boid,botime,bookid,userid,bostate,backtime,reviewer);
+ list.add(borrow);
+ }
+ }
+ db.close();
+ return list;
+ }
+ //还书
+ public void ReturnBook(DBHelper dbHelper,String boid,String backtime,String reviewer){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ ContentValues values = new ContentValues();
+ values.put("bostate",1);
+ values.put("backtime",backtime);
+ values.put("reviewer",reviewer);
+ db.update("borrow",values,"boid=?",new String[]{boid});
+ db.close();
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/control/DBHelper.java b/bms/src/main/java/com/zhang/bms/control/DBHelper.java
new file mode 100644
index 0000000..a0d26e0
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/control/DBHelper.java
@@ -0,0 +1,39 @@
+package com.zhang.bms.control;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+import androidx.annotation.Nullable;
+
+public class DBHelper extends SQLiteOpenHelper {
+ private Context mcontext;
+ private final static String CREATE_USER = "CREATE TABLE user(id INTEGER PRIMARY KEY " +
+ "AUTOINCREMENT,username VARCHAR(20),password VARCHAR(20),passlock VARCHAR(20)" +
+ ",passkey VARCHAR(20),role VARCHAR(20),borrowlist VARCHAR(20),collection VARCHAR(20))";
+ private final static String CREATE_BOOK = "CREATE TABLE book(id INTEGER PRIMARY KEY " +
+ "AUTOINCREMENT,ISBN VARCHAR(20),bookname VARCHAR(20),author VARCHAR(20),press VARCHAR(20)" +
+ ",publicationtime VARCHAR(20),category VARCHAR(20),synopsis VARCHAR(50),page INTEGER" +
+ ",inventory INTEGER)";
+ private final static String CREATE_BORROW = "CREATE TABLE borrow(boid INTEGER PRIMARY KEY " +
+ "AUTOINCREMENT,botime VARCHAR(20),bookid VARCHAR(20),userid VARCHAR(20),bostate INTEGER" +
+ ",backtime VARCHAR(20),reviewer VARCHAR(20))";
+
+ public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version){
+ super(context, name, factory, version);
+ this.mcontext = context;
+ }
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ db.execSQL(CREATE_USER);
+ db.execSQL(CREATE_BOOK);
+ db.execSQL(CREATE_BORROW);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ db.execSQL("drop table if exists user");
+ db.execSQL("drop table if exists book");
+ db.execSQL("drop table if exists borrow");
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/control/UserTableHelper.java b/bms/src/main/java/com/zhang/bms/control/UserTableHelper.java
new file mode 100644
index 0000000..0ea5ee8
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/control/UserTableHelper.java
@@ -0,0 +1,229 @@
+package com.zhang.bms.control;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+
+import com.zhang.bms.model.User;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class UserTableHelper {
+ //注册
+ public void Register(DBHelper dbHelper,String username,String password,String passlock,
+ String passkey,String role,String collection){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ ContentValues values = new ContentValues();
+ values.put("username",username);
+ values.put("password",password);
+ values.put("passlock",passlock);
+ values.put("passkey",passkey);
+ values.put("role",role);
+ values.put("collection",collection);
+ db.insert("user",null,values);
+ db.close();
+ }
+ //检测用户名是否重复
+ public boolean CheckUsername(DBHelper dbHelper,String username){
+ SQLiteDatabase db = dbHelper.getReadableDatabase();
+ Cursor cursor = db.query("user",new String[]{"username"},"username=?",
+ new String[]{username + ""},null,null,null);
+ int count = cursor.getCount();
+ boolean result;
+ if (count == 0){
+ result = true;
+ }else {
+ result = false;
+ }
+ db.close();
+ return result;
+ }
+ //登录
+ public boolean Login(DBHelper dbHelper,String username,String password){
+ SQLiteDatabase db = dbHelper.getReadableDatabase();
+ Cursor cursor = db.query("user",new String[]{"username","password"},
+ "username=? and password=?",new String[]{username + "",password + ""},
+ null,null,null);
+ int count = cursor.getCount();
+ boolean result;
+ if (count != 0){
+ result = true;
+ }else {
+ result = false;
+ }
+ db.close();
+ return result;
+ }
+ //用户管理列表
+ public ArrayList UserList(DBHelper dbHelper){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.query("user",new String[]{"id","username","role"},
+ null,null,null,null,"id desc");
+ ArrayList list = new ArrayList<>();
+ if (cursor != null && cursor.getCount() > 0){
+ while (cursor.moveToNext()){
+ String id = cursor.getString(cursor.getColumnIndex("id"));
+ String username = cursor.getString(cursor.getColumnIndex("username"));
+ String role = cursor.getString(cursor.getColumnIndex("role"));
+ User user = new User(id,username,role);
+ list.add(user);
+ }
+ }
+ db.close();
+ return list;
+ }
+ //用户管理详情页
+ public ArrayList UserDetails(DBHelper dbHelper,String uid){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.query("user",new String[]{"id","username","passlock","passkey","role"},
+ "id = ?",new String[]{uid + ""},null,null,null);
+ ArrayList list = new ArrayList<>();
+ if (cursor != null && cursor.getCount() > 0){
+ while (cursor.moveToNext()){
+ String id = cursor.getString(cursor.getColumnIndex("id"));
+ String username = cursor.getString(cursor.getColumnIndex("username"));
+ String passlock = cursor.getString(cursor.getColumnIndex("passlock"));
+ String passkey = cursor.getString(cursor.getColumnIndex("passkey"));
+ String role = cursor.getString(cursor.getColumnIndex("role"));
+ User user = new User(id,username,passlock,passkey,role);
+ list.add(user);
+ }
+ }
+ db.close();
+ return list;
+ }
+ //修改用户密码
+ public boolean UpdatePassword(DBHelper dbHelper,String new_password,String uid){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ ContentValues values = new ContentValues();
+ values.put("password",new_password);
+ int flag = db.update("user",values,"id=?",new String[]{uid});
+ boolean result;
+ if (flag == -1){
+ result = false;
+ }else {
+ result = true;
+ }
+ db.close();
+ return result;
+ }
+ //删除用户
+ public boolean DeleteUser(DBHelper dbHelper,String id){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ int flag = db.delete("user","id=?",new String[]{id + ""});
+ db.close();
+ boolean result;
+ if (flag == -1){
+ result = false;
+ }else {
+ result = true;
+ }
+ return result;
+ }
+ //修改用户组
+ public boolean UpdateRole(DBHelper dbHelper,String new_role,String uid){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ ContentValues values = new ContentValues();
+ values.put("role",new_role);
+ int flag = db.update("user",values,"id=?",new String[]{uid});
+ boolean result;
+ if (flag == -1){
+ result = false;
+ }else {
+ result = true;
+ }
+ db.close();
+ return result;
+ }
+ //用户登录数据
+ public ArrayList UserList(DBHelper dbHelper,String username){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.query("user",new String[]{"id","username","passlock","passkey","role"},
+ "username = ?",new String[]{username + ""},null,null,null);
+ ArrayList list = new ArrayList<>();
+ if (cursor != null && cursor.getCount() > 0){
+ while (cursor.moveToNext()){
+ String id = cursor.getString(cursor.getColumnIndex("id"));
+ String passlock = cursor.getString(cursor.getColumnIndex("passlock"));
+ String passkey = cursor.getString(cursor.getColumnIndex("passkey"));
+ String role = cursor.getString(cursor.getColumnIndex("role"));
+ User user = new User(id,username,passlock,passkey,role);
+ list.add(user);
+ }
+ }
+ db.close();
+ return list;
+ }
+ //修改密码
+ public boolean ChangePass(DBHelper dbHelper,String username,String newpass){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ ContentValues values = new ContentValues();
+ values.put("password",newpass);
+ int flag = db.update("user",values,"username=?",new String[]{username});
+ boolean result;
+ if (flag == -1){
+ result = false;
+ }else {
+ result = true;
+ }
+ db.close();
+ return result;
+ }
+ //密保验证
+ public boolean PassLock(DBHelper dbHelper,String username,String passlock,String passkey){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.query("user",new String[]{"username","passlock","passkey"},
+ "username=? and passlock=? and passkey=?",new String[]{username+"",passlock+"",passkey+""},
+ null,null,null);
+ int count = cursor.getCount();
+ boolean result;
+ if (count != 0){
+ result = true;
+ }else {
+ result = false;
+ }
+ db.close();
+ return result;
+ }
+ //查询密保问题
+ public String FindPassLock(DBHelper dbHelper,String username){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.query("user",new String[]{"passlock"},
+ "username = ?",new String[]{username+""},null,null,null);
+ String passlock = ""+-1;
+ if (cursor != null && cursor.getCount() >0){
+ while (cursor.moveToNext()) {
+ passlock = cursor.getString(cursor.getColumnIndex("passlock"));
+ }
+ }else {
+ passlock = ""+-1;
+ }
+ db.close();
+ return passlock;
+ }
+ //收藏图书
+ public void CollectBook(DBHelper dbHelper,String uid,String collection){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ ContentValues values = new ContentValues();
+ values.put("collection",collection);
+ db.update("user",values,"id=?",new String[]{uid});
+ db.close();
+ }
+ //查询已收藏的书
+ public String FindCollectionBooks(DBHelper dbHelper,String uid){
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Cursor cursor = db.query("user",new String[]{"collection"},
+ "id = ?",new String[]{uid+""},null,null,null);
+ String collections = "";
+ if (cursor !=null && cursor.getCount() >0){
+ while (cursor.moveToNext()){
+ collections = cursor.getString(cursor.getColumnIndex("collection"));
+ }
+ }else {
+ collections = "";
+ }
+ db.close();
+ return collections;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/control/control.plantuml b/bms/src/main/java/com/zhang/bms/control/control.plantuml
new file mode 100644
index 0000000..186e873
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/control/control.plantuml
@@ -0,0 +1,82 @@
+@startuml
+
+title __CONTROL's Class Diagram__\n
+
+ namespace com.zhang.bms {
+ namespace control {
+ class com.zhang.bms.control.BookTableHelper {
+ + AddBook()
+ + BookDetails()
+ + BookGrid()
+ + BookList()
+ + BorrowBook()
+ + DeleteBook()
+ + FindInventory()
+ + SearchBook()
+ + SearchCollection()
+ + UpdateBook()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace control {
+ class com.zhang.bms.control.BorrowTableHelper {
+ + AddBorrow()
+ + AllBorrow()
+ + ReturnBook()
+ + ShowBorrow()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace control {
+ class com.zhang.bms.control.DBHelper {
+ {static} - CREATE_BOOK : String
+ {static} - CREATE_BORROW : String
+ {static} - CREATE_USER : String
+ - mcontext : Context
+ + DBHelper()
+ + onCreate()
+ + onUpgrade()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace control {
+ class com.zhang.bms.control.UserTableHelper {
+ + ChangePass()
+ + CheckUsername()
+ + CollectBook()
+ + DeleteUser()
+ + FindCollectionBooks()
+ + FindPassLock()
+ + Login()
+ + PassLock()
+ + Register()
+ + UpdatePassword()
+ + UpdateRole()
+ + UserDetails()
+ + UserList()
+ + UserList()
+ }
+ }
+ }
+
+
+ com.zhang.bms.control.DBHelper -up-|> android.database.sqlite.SQLiteOpenHelper
+
+
+right footer
+
+
+PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
+For more information about this tool, please contact philippe.mesmeur@gmail.com
+endfooter
+
+@enduml
diff --git a/bms/src/main/java/com/zhang/bms/model/Book.java b/bms/src/main/java/com/zhang/bms/model/Book.java
new file mode 100644
index 0000000..cac3b23
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/Book.java
@@ -0,0 +1,130 @@
+package com.zhang.bms.model;
+
+public class Book {
+ private String id;
+ private String ISBN;
+ private String bookname;
+ private String author;
+ private String press;
+ private String publicationtime;
+ private String category;
+ private String synopsis;
+ private int page;
+ private int inventory;
+
+ public int getPage() {
+ return page;
+ }
+
+ public void setPage(int page) {
+ this.page = page;
+ }
+
+ public String getISBN() {
+ return ISBN;
+ }
+
+ public void setISBN(String ISBN) {
+ this.ISBN = ISBN;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getBookname() {
+ return bookname;
+ }
+
+ public void setBookname(String bookname) {
+ this.bookname = bookname;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+ public String getPress() {
+ return press;
+ }
+
+ public void setPress(String press) {
+ this.press = press;
+ }
+
+ public String getPublicationtime() {
+ return publicationtime;
+ }
+
+ public void setPublicationtime(String publicationtime) {
+ this.publicationtime = publicationtime;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public String getSynopsis() {
+ return synopsis;
+ }
+
+ public void setSynopsis(String synopsis) {
+ this.synopsis = synopsis;
+ }
+
+ public int getinventory() {
+ return inventory;
+ }
+
+ public void setinventory(int inventory) {
+ this.inventory = inventory;
+ }
+
+ public Book(String id, String bookname, String author, String category) {
+ this.id = id;
+ this.bookname = bookname;
+ this.author = author;
+ this.category = category;
+ }
+
+ public Book() {
+ }
+
+ public Book(String ISBN,String bookname, String author, String press, String publicationtime, String category,
+ String synopsis, int inventory,int page) {
+ this.ISBN = ISBN;
+ this.bookname = bookname;
+ this.author = author;
+ this.press = press;
+ this.publicationtime = publicationtime;
+ this.category = category;
+ this.synopsis = synopsis;
+ this.inventory = inventory;
+ this.page = page;
+ }
+
+ public Book(String bookname, String author, int inventory) {
+ this.bookname = bookname;
+ this.author = author;
+ this.inventory = inventory;
+ }
+
+ public Book(String id, String bookname, String author, int inventory,int version) {
+ this.id = id;
+ this.bookname = bookname;
+ this.author = author;
+ this.inventory = inventory;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/BookGridAdapter.java b/bms/src/main/java/com/zhang/bms/model/BookGridAdapter.java
new file mode 100644
index 0000000..695fcc2
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/BookGridAdapter.java
@@ -0,0 +1,61 @@
+package com.zhang.bms.model;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import com.zhang.bms.R;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+
+public class BookGridAdapter extends BaseAdapter {
+ private Context mcontext;
+ private ArrayList mBookList;
+ public BookGridAdapter(Context context,ArrayList book_list){
+ mcontext = context;
+ mBookList = book_list;
+ }
+ @Override
+ public int getCount() {
+ return mBookList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mBookList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder;
+ if (convertView == null){
+ holder = new ViewHolder();
+ convertView = LayoutInflater.from(mcontext).inflate(R.layout.sq_bookgrid,null);
+ holder.booklist_bookname = convertView.findViewById(R.id.bookname);
+ holder.booklist_author = convertView.findViewById(R.id.author);
+ holder.booklist_inventory = convertView.findViewById(R.id.price);
+ convertView.setTag(holder);
+ }else {
+ holder = (ViewHolder)convertView.getTag();
+ }
+ Book book = mBookList.get(position);
+ holder.booklist_bookname.setText(book.getBookname());
+ holder.booklist_author.setText("主编/作者:" + book.getAuthor());
+ holder.booklist_inventory.setText("馆存:" + book.getinventory()+" 本");
+ return convertView;
+ }
+ public final class ViewHolder {
+ public TextView booklist_bookname;
+ public TextView booklist_author;
+ public TextView booklist_inventory;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/BookListAdapter.java b/bms/src/main/java/com/zhang/bms/model/BookListAdapter.java
new file mode 100644
index 0000000..33be6bb
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/BookListAdapter.java
@@ -0,0 +1,64 @@
+package com.zhang.bms.model;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import com.zhang.bms.R;
+
+import java.util.ArrayList;
+
+public class BookListAdapter extends BaseAdapter {
+ private Context mcontext;//声明一个上下文对象
+ private ArrayList mBookList;//声明一个用户信息队列
+ //用户适配器的构造函数,传入上下文与用户队列
+ public BookListAdapter(Context context, ArrayList book_list){
+ mcontext = context;
+ mBookList = book_list;
+ }
+ @Override
+ public int getCount() {
+ return mBookList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mBookList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder;
+ if (convertView == null){
+ holder = new ViewHolder();
+ convertView = LayoutInflater.from(mcontext).inflate(R.layout.sq_booklist,null);
+ holder.booklist_bookname = convertView.findViewById(R.id.booklist_bookname);
+ holder.booklist_author = convertView.findViewById(R.id.booklist_author);
+ holder.booklist_category = convertView.findViewById(R.id.booklist_category);
+ //将视图持有者保存到转换视图当中
+ convertView.setTag(holder);
+ }else {//转换视图非空
+ //从转换视图中获取之前保存的视图持有者
+ holder = (ViewHolder)convertView.getTag();
+ }
+ Book book = mBookList.get(position);
+ holder.booklist_bookname.setText("《"+book.getBookname()+"》");
+ holder.booklist_author.setText(book.getAuthor());
+ holder.booklist_category.setText(book.getCategory());
+ return convertView;
+ }
+ //定义一个试图持有者,以便重用列表项的试图资源
+ public final class ViewHolder {
+ public TextView booklist_bookname;
+ public TextView booklist_author;
+ public TextView booklist_category;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/Borrow.java b/bms/src/main/java/com/zhang/bms/model/Borrow.java
new file mode 100644
index 0000000..08172ea
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/Borrow.java
@@ -0,0 +1,88 @@
+package com.zhang.bms.model;
+
+public class Borrow {
+ private String boid;
+ private String botime;
+ private String bookid;
+ private String userid;
+ private int bostate;
+ private String backtime;
+ private String reviewer;
+
+ public String getBacktime() {
+ return backtime;
+ }
+
+ public void setBacktime(String backtime) {
+ this.backtime = backtime;
+ }
+
+ public String getReviewer() {
+ return reviewer;
+ }
+
+ public void setReviewer(String reviewer) {
+ this.reviewer = reviewer;
+ }
+
+ public String getBoid() {
+ return boid;
+ }
+
+ public void setBoid(String boid) {
+ this.boid = boid;
+ }
+
+ public String getBotime() {
+ return botime;
+ }
+
+ public void setBotime(String botime) {
+ this.botime = botime;
+ }
+
+ public String getBookid() {
+ return bookid;
+ }
+
+ public void setBookid(String bookid) {
+ this.bookid = bookid;
+ }
+
+ public String getUserid() {
+ return userid;
+ }
+
+ public void setUserid(String userid) {
+ this.userid = userid;
+ }
+
+ public int getBostate() {
+ return bostate;
+ }
+
+ public void setBostate(int bostate) {
+ this.bostate = bostate;
+ }
+
+ public Borrow(String botime, String bookid, int bostate,String backtime,String reviewer) {
+ this.botime = botime;
+ this.bookid = bookid;
+ this.bostate = bostate;
+ this.backtime = backtime;
+ this.reviewer = reviewer;
+ }
+
+ public Borrow() {
+ }
+
+ public Borrow(String boid, String botime, String bookid, String userid, int bostate, String backtime, String reviewer) {
+ this.boid = boid;
+ this.botime = botime;
+ this.bookid = bookid;
+ this.userid = userid;
+ this.bostate = bostate;
+ this.backtime = backtime;
+ this.reviewer = reviewer;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/BorrowListAdapter.java b/bms/src/main/java/com/zhang/bms/model/BorrowListAdapter.java
new file mode 100644
index 0000000..0947478
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/BorrowListAdapter.java
@@ -0,0 +1,86 @@
+package com.zhang.bms.model;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.ForegroundColorSpan;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BookTableHelper;
+import com.zhang.bms.control.DBHelper;
+
+import java.util.ArrayList;
+
+public class BorrowListAdapter extends BaseAdapter {
+ private Context mcontext;
+ private ArrayList mBorrowList;
+ private BookTableHelper bookTableHelper = new BookTableHelper();
+ private ArrayList bookArrayList;
+ public BorrowListAdapter(Context context,ArrayList borrow_list){
+ mcontext = context;
+ mBorrowList = borrow_list;
+ }
+ @Override
+ public int getCount() {
+ return mBorrowList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mBorrowList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder;
+ if (convertView == null){
+ holder = new ViewHolder();
+ convertView = LayoutInflater.from(mcontext).inflate(R.layout.borrowlist,null);
+ holder.borrow_bookname = convertView.findViewById(R.id.borrow_bookname);
+ holder.borrow_time = convertView.findViewById(R.id.borrow_time);
+ holder.borrow_state = convertView.findViewById(R.id.borrow_state);
+ holder.backtime = convertView.findViewById(R.id.backtime);
+ holder.reviewer = convertView.findViewById(R.id.reviewer);
+ convertView.setTag(holder);
+ }else {
+ holder = (ViewHolder)convertView.getTag();
+ }
+ final DBHelper dbHelper= new DBHelper(mcontext,"bms",null,1);
+ Borrow borrow = mBorrowList.get(position);
+ String bid = borrow.getBookid();
+ bookArrayList = bookTableHelper.BookDetails(dbHelper,bid);
+ holder.borrow_bookname.setText(bookArrayList.get(0).getBookname());
+ holder.borrow_time.setText("借阅日期:" + borrow.getBotime());
+ if (borrow.getBostate() == 0){
+ String needreturn = "未还";
+ holder.borrow_state.setText(needreturn);
+ holder.backtime.setText("还书日期:--");
+ holder.reviewer.setText("审核人:--");
+ }else {
+ String needreturn = "已还";
+ SpannableString spannableString = new SpannableString(needreturn);
+ spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#404146")),0,spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ holder.borrow_state.setText(spannableString);
+ holder.backtime.setText("还书日期:"+borrow.getBacktime());
+ holder.reviewer.setText("审核人:"+borrow.getReviewer());
+ }
+ return convertView;
+ }
+ public final class ViewHolder{
+ public TextView borrow_bookname;
+ public TextView borrow_time;
+ public TextView borrow_state;
+ public TextView backtime;
+ public TextView reviewer;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/BorrowManageListAdapter.java b/bms/src/main/java/com/zhang/bms/model/BorrowManageListAdapter.java
new file mode 100644
index 0000000..0a3cc9e
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/BorrowManageListAdapter.java
@@ -0,0 +1,91 @@
+package com.zhang.bms.model;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.ForegroundColorSpan;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BookTableHelper;
+import com.zhang.bms.control.DBHelper;
+
+import java.util.ArrayList;
+
+public class BorrowManageListAdapter extends BaseAdapter {
+ private Context mcontext;
+ private ArrayList mBorrowList;
+ private BookTableHelper bookTableHelper = new BookTableHelper();
+ private ArrayList bookArrayList;
+ public BorrowManageListAdapter(Context context, ArrayList borrow_list){
+ mcontext = context;
+ mBorrowList = borrow_list;
+ }
+ @Override
+ public int getCount() {
+ return mBorrowList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mBorrowList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder;
+ if (convertView == null){
+ holder = new ViewHolder();
+ convertView = LayoutInflater.from(mcontext).inflate(R.layout.borrowlist_manage,null);
+ holder.borrow_bookname = convertView.findViewById(R.id.borrow_bookname);
+ holder.borrow_time = convertView.findViewById(R.id.borrow_time);
+ holder.borrow_state = convertView.findViewById(R.id.borrow_state);
+ holder.borrow_boid = convertView.findViewById(R.id.borrow_boid);
+ holder.backtime = convertView.findViewById(R.id.backtime);
+ holder.userid = convertView.findViewById(R.id.userid);
+ holder.reviewer = convertView.findViewById(R.id.reviewer);
+ convertView.setTag(holder);
+ }else {
+ holder = (ViewHolder)convertView.getTag();
+ }
+ final DBHelper dbHelper= new DBHelper(mcontext,"bms",null,1);
+ Borrow borrow = mBorrowList.get(position);
+ String bid = borrow.getBookid();
+ bookArrayList = bookTableHelper.BookDetails(dbHelper,bid);
+ holder.borrow_bookname.setText(bookArrayList.get(0).getBookname());
+ holder.borrow_time.setText("借阅日期:" + borrow.getBotime());
+ holder.borrow_boid.setText("借阅ID:"+ borrow.getBoid());
+ holder.userid.setText("借阅者ID:" + borrow.getUserid());
+ if (borrow.getBostate() == 0){
+ holder.borrow_state.setText("还书");
+ holder.backtime.setText("还书日期:--");
+ holder.reviewer.setText("审核人:--");
+ }else {
+ String needreturn = "已还";
+ SpannableString spannableString = new SpannableString(needreturn);
+ spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#404146")),0,spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ holder.borrow_state.setText(spannableString);
+ holder.backtime.setText("还书日期:" + borrow.getBacktime());
+ holder.reviewer.setText("审核人:" + borrow.getReviewer());
+ }
+ return convertView;
+ }
+ public final class ViewHolder{
+ public TextView borrow_bookname;
+ public TextView borrow_time;
+ public TextView borrow_state;
+ public TextView borrow_boid;
+ public TextView backtime;
+ public TextView reviewer;
+ public TextView userid;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/CustomEditTextDialog.java b/bms/src/main/java/com/zhang/bms/model/CustomEditTextDialog.java
new file mode 100644
index 0000000..ee81a4a
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/CustomEditTextDialog.java
@@ -0,0 +1,57 @@
+package com.zhang.bms.model;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+
+import com.zhang.bms.R;
+
+public class CustomEditTextDialog extends Dialog {
+ Context mContext;
+ private TextView btnSure;
+ private TextView btnCancle;
+ private TextView title;
+ private EditText editText;
+
+ public CustomEditTextDialog(@NonNull Context context) {
+ super(context, R.style.Dialog_Msg);
+ this.mContext = context;
+ initView();
+ }
+
+ //初始化
+ public void initView() {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.edit_dialog, null);
+ title = (TextView) view.findViewById(R.id.title);
+ editText = (EditText) view.findViewById(R.id.edittext);
+ btnSure = (TextView) view.findViewById(R.id.dialog_confirm_sure);
+ btnCancle = (TextView) view.findViewById(R.id.dialog_confirm_cancle);
+ super.setContentView(view);
+ }
+
+
+ public CustomEditTextDialog setTile(String s) {
+ title.setText(s);
+ return this;
+ }
+
+ //获取当前输入框对象
+ public View getEditText() {
+ return editText;
+ }
+
+ //确定键监听器
+ public void setOnSureListener(View.OnClickListener listener) {
+ btnSure.setOnClickListener(listener);
+ }
+
+ //取消键监听器
+ public void setOnCanlceListener(View.OnClickListener listener) {
+ btnCancle.setOnClickListener(listener);
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/CustomSpinnerDialog.java b/bms/src/main/java/com/zhang/bms/model/CustomSpinnerDialog.java
new file mode 100644
index 0000000..44985a0
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/CustomSpinnerDialog.java
@@ -0,0 +1,59 @@
+package com.zhang.bms.model;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.EditText;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+
+import com.zhang.bms.R;
+
+public class CustomSpinnerDialog extends Dialog {
+ Context mContext;
+ private TextView btnSure;
+ private TextView btnCancle;
+ private TextView title;
+ private Spinner spinner;
+
+ public CustomSpinnerDialog(@NonNull Context context) {
+ super(context, R.style.Dialog_Msg);
+ this.mContext = context;
+ initView();
+ }
+
+ //初始化
+ public void initView() {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.spinner_dialog, null);
+ title = (TextView) view.findViewById(R.id.title);
+ spinner = (Spinner) view.findViewById(R.id.spinner);
+ btnSure = (TextView) view.findViewById(R.id.dialog_confirm_sure);
+ btnCancle = (TextView) view.findViewById(R.id.dialog_confirm_cancle);
+ super.setContentView(view);
+ }
+
+
+ public CustomSpinnerDialog setTile(String s) {
+ title.setText(s);
+ return this;
+ }
+
+ //获取当前输入框对象
+ public View getSpinnerItem() {
+ return spinner;
+ }
+
+ //确定键监听器
+ public void setOnSureListener(View.OnClickListener listener) {
+ btnSure.setOnClickListener(listener);
+ }
+
+ //取消键监听器
+ public void setOnCanlceListener(View.OnClickListener listener) {
+ btnCancle.setOnClickListener(listener);
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/GetTime.java b/bms/src/main/java/com/zhang/bms/model/GetTime.java
new file mode 100644
index 0000000..9d3177d
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/GetTime.java
@@ -0,0 +1,17 @@
+package com.zhang.bms.model;
+
+import java.util.Calendar;
+
+public class GetTime {
+ Calendar c = Calendar.getInstance();
+ int year = c.get(Calendar.YEAR);
+ int month = c.get(Calendar.MONTH) + 1;
+ int date = c.get(Calendar.DATE);
+ int hour = c.get(Calendar.HOUR_OF_DAY);
+ int minute = c.get(Calendar.MINUTE);
+ int second = c.get(Calendar.SECOND);
+ String time;
+ public String BorrowTime(){
+ return time = year+"-"+month+"-"+date;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/SqTipsDialog.java b/bms/src/main/java/com/zhang/bms/model/SqTipsDialog.java
new file mode 100644
index 0000000..cd2a308
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/SqTipsDialog.java
@@ -0,0 +1,68 @@
+package com.zhang.bms.model;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+
+import com.zhang.bms.R;
+
+public class SqTipsDialog extends Dialog {
+ Context mContext;
+ private TextView btnSure;
+ private TextView btnCancle;
+ private TextView title;
+ private TextView tips;
+
+ public SqTipsDialog(@NonNull Context context) {
+ super(context, R.style.Dialog_Msg);
+ this.mContext = context;
+ initView();
+ }
+
+ //初始化
+ public void initView() {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.sq_dialog_tips, null);
+ title = (TextView) view.findViewById(R.id.title);
+ tips = (TextView) view.findViewById(R.id.tips);
+ btnSure = (TextView) view.findViewById(R.id.dialog_confirm_sure);
+ btnCancle = (TextView) view.findViewById(R.id.dialog_confirm_cancle);
+ super.setContentView(view);
+ }
+
+ public SqTipsDialog setSurebtnVisible(boolean b){
+ if (b == false){
+ btnSure.setVisibility(View.GONE);
+ }
+ return this;
+ }
+
+ public SqTipsDialog setCancelbtnVisible(boolean b){
+ if (b == false){
+ btnCancle.setVisibility(View.GONE);
+ }
+ return this;
+ }
+
+ public SqTipsDialog setTile(String s) {
+ title.setText(s);
+ return this;
+ }
+ public SqTipsDialog setMsg(String s) {
+ tips.setText(s);
+ return this;
+ }
+
+ //确定键监听器
+ public void setOnSureListener(View.OnClickListener listener) {
+ btnSure.setOnClickListener(listener);
+ }
+
+ //取消键监听器
+ public void setOnCanlceListener(View.OnClickListener listener) {
+ btnCancle.setOnClickListener(listener);
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/StringTrans.java b/bms/src/main/java/com/zhang/bms/model/StringTrans.java
new file mode 100644
index 0000000..bb93564
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/StringTrans.java
@@ -0,0 +1,15 @@
+package com.zhang.bms.model;
+
+public class StringTrans {
+ String temp1 = null;
+ String temp2 = null;
+ public String StringTrans(String o_str){
+ if (o_str.contains("//")){
+ temp1 = o_str.replace("//",",");
+ }else {
+ temp1 = o_str;
+ }
+ temp2 = temp1.replace("/","");
+ return temp2;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/User.java b/bms/src/main/java/com/zhang/bms/model/User.java
new file mode 100644
index 0000000..edb0a0b
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/User.java
@@ -0,0 +1,84 @@
+package com.zhang.bms.model;
+
+public class User {
+ private String id;
+ private String username;
+ private String password;
+ private String passlock;
+ private String passkey;
+ private String role;
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getPasslock() {
+ return passlock;
+ }
+
+ public void setPasslock(String passlock) {
+ this.passlock = passlock;
+ }
+
+ public String getPasskey() {
+ return passkey;
+ }
+
+ public void setPasskey(String passkey) {
+ this.passkey = passkey;
+ }
+
+ public String getRole() {
+ return role;
+ }
+
+ public void setRole(String role) {
+ this.role = role;
+ }
+
+ public User(String id, String username, String password, String passlock, String passkey, String role) {
+ this.id = id;
+ this.username = username;
+ this.password = password;
+ this.passlock = passlock;
+ this.passkey = passkey;
+ this.role = role;
+ }
+ public User(String id, String username, String password,String role) {
+ this.id = id;
+ this.username = username;
+ this.password = password;
+ this.role = role;
+ }
+ public User(String id, String username,String role) {
+ this.id = id;
+ this.username = username;
+ this.role = role;
+ }
+ public User(String id, String username, String passlock, String passkey, String role) {
+ this.id = id;
+ this.username = username;
+ this.passlock = passlock;
+ this.passkey = passkey;
+ this.role = role;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/UserListAdapter.java b/bms/src/main/java/com/zhang/bms/model/UserListAdapter.java
new file mode 100644
index 0000000..4d4108e
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/UserListAdapter.java
@@ -0,0 +1,64 @@
+package com.zhang.bms.model;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import com.zhang.bms.R;
+
+import java.util.ArrayList;
+
+public class UserListAdapter extends BaseAdapter {
+ private Context mcontext;//声明一个上下文对象
+ private ArrayList mUserList;//声明一个用户信息队列
+ //用户适配器的构造函数,传入上下文与用户队列
+ public UserListAdapter(Context context,ArrayList user_list){
+ mcontext = context;
+ mUserList = user_list;
+ }
+ @Override
+ public int getCount() {
+ return mUserList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mUserList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder;
+ if (convertView == null){
+ holder = new ViewHolder();
+ convertView = LayoutInflater.from(mcontext).inflate(R.layout.sq_userlist,null);
+ holder.userlist_id = convertView.findViewById(R.id.userlist_id);
+ holder.userlist_username = convertView.findViewById(R.id.userlist_username);
+ holder.userlist_role = convertView.findViewById(R.id.userlist_role);
+ //将视图持有者保存到转换视图当中
+ convertView.setTag(holder);
+ }else {//转换视图非空
+ //从转换视图中获取之前保存的视图持有者
+ holder = (ViewHolder)convertView.getTag();
+ }
+ User user = mUserList.get(position);
+ holder.userlist_id.setText(user.getId());
+ holder.userlist_username.setText(user.getUsername());
+ holder.userlist_role.setText(user.getRole());
+ return convertView;
+ }
+ //定义一个试图持有者,以便重用列表项的试图资源
+ public final class ViewHolder {
+ public TextView userlist_id;
+ public TextView userlist_username;
+ public TextView userlist_role;
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/model/model.plantuml b/bms/src/main/java/com/zhang/bms/model/model.plantuml
new file mode 100644
index 0000000..bb063fb
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/model.plantuml
@@ -0,0 +1,323 @@
+@startuml
+
+title __MODEL's Class Diagram__\n
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.Book {
+ - ISBN : String
+ - author : String
+ - bookname : String
+ - category : String
+ - id : String
+ - inventory : int
+ - page : int
+ - press : String
+ - publicationtime : String
+ - synopsis : String
+ + Book()
+ + Book()
+ + Book()
+ + Book()
+ + Book()
+ + getAuthor()
+ + getBookname()
+ + getCategory()
+ + getISBN()
+ + getId()
+ + getPage()
+ + getPress()
+ + getPublicationtime()
+ + getSynopsis()
+ + getinventory()
+ + setAuthor()
+ + setBookname()
+ + setCategory()
+ + setISBN()
+ + setId()
+ + setPage()
+ + setPress()
+ + setPublicationtime()
+ + setSynopsis()
+ + setinventory()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.BookGridAdapter {
+ - mBookList : ArrayList
+ - mcontext : Context
+ + BookGridAdapter()
+ + getCount()
+ + getItem()
+ + getItemId()
+ + getView()
+ }
+ }
+ }
+
+
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.BookListAdapter {
+ - mBookList : ArrayList
+ - mcontext : Context
+ + BookListAdapter()
+ + getCount()
+ + getItem()
+ + getItemId()
+ + getView()
+ }
+ }
+ }
+
+
+
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.Borrow {
+ - backtime : String
+ - boid : String
+ - bookid : String
+ - bostate : int
+ - botime : String
+ - reviewer : String
+ - userid : String
+ + Borrow()
+ + Borrow()
+ + Borrow()
+ + getBacktime()
+ + getBoid()
+ + getBookid()
+ + getBostate()
+ + getBotime()
+ + getReviewer()
+ + getUserid()
+ + setBacktime()
+ + setBoid()
+ + setBookid()
+ + setBostate()
+ + setBotime()
+ + setReviewer()
+ + setUserid()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.BorrowListAdapter {
+ - bookArrayList : ArrayList
+ - mBorrowList : ArrayList
+ - mcontext : Context
+ + BorrowListAdapter()
+ + getCount()
+ + getItem()
+ + getItemId()
+ + getView()
+ }
+ }
+ }
+
+
+
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.BorrowManageListAdapter {
+ - bookArrayList : ArrayList
+ - mBorrowList : ArrayList
+ - mcontext : Context
+ + BorrowManageListAdapter()
+ + getCount()
+ + getItem()
+ + getItemId()
+ + getView()
+ }
+ }
+ }
+
+
+
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.CustomEditTextDialog {
+ ~ mContext : Context
+ - btnCancle : TextView
+ - btnSure : TextView
+ - editText : EditText
+ - title : TextView
+ + CustomEditTextDialog()
+ + getEditText()
+ + initView()
+ + setOnCanlceListener()
+ + setOnSureListener()
+ + setTile()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.CustomSpinnerDialog {
+ ~ mContext : Context
+ - btnCancle : TextView
+ - btnSure : TextView
+ - spinner : Spinner
+ - title : TextView
+ + CustomSpinnerDialog()
+ + getSpinnerItem()
+ + initView()
+ + setOnCanlceListener()
+ + setOnSureListener()
+ + setTile()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.GetTime {
+ ~ c : Calendar
+ ~ date : int
+ ~ hour : int
+ ~ minute : int
+ ~ month : int
+ ~ second : int
+ ~ time : String
+ ~ year : int
+ + BorrowTime()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.SqTipsDialog {
+ ~ mContext : Context
+ - btnCancle : TextView
+ - btnSure : TextView
+ - tips : TextView
+ - title : TextView
+ + SqTipsDialog()
+ + initView()
+ + setCancelbtnVisible()
+ + setMsg()
+ + setOnCanlceListener()
+ + setOnSureListener()
+ + setSurebtnVisible()
+ + setTile()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.StringTrans {
+ ~ temp1 : String
+ ~ temp2 : String
+ + StringTrans()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.User {
+ - id : String
+ - passkey : String
+ - passlock : String
+ - password : String
+ - role : String
+ - username : String
+ + User()
+ + User()
+ + User()
+ + User()
+ + getId()
+ + getPasskey()
+ + getPasslock()
+ + getPassword()
+ + getRole()
+ + getUsername()
+ + setId()
+ + setPasskey()
+ + setPasslock()
+ + setPassword()
+ + setRole()
+ + setUsername()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.UserListAdapter {
+ - mUserList : ArrayList
+ - mcontext : Context
+ + UserListAdapter()
+ + getCount()
+ + getItem()
+ + getItemId()
+ + getView()
+ }
+ }
+ }
+
+
+
+
+
+ namespace com.zhang.bms {
+ namespace model {
+ class com.zhang.bms.model.simpleArrayAdapter {
+ + getCount()
+ + simpleArrayAdapter()
+ }
+ }
+ }
+
+
+ com.zhang.bms.model.BookGridAdapter -up-|> android.widget.BaseAdapter
+ com.zhang.bms.model.BookGridAdapter +-down- com.zhang.bms.model.BookGridAdapter.ViewHolder
+ com.zhang.bms.model.BookListAdapter -up-|> android.widget.BaseAdapter
+ com.zhang.bms.model.BookListAdapter +-down- com.zhang.bms.model.BookListAdapter.ViewHolder
+ com.zhang.bms.model.BorrowListAdapter -up-|> android.widget.BaseAdapter
+ com.zhang.bms.model.BorrowListAdapter o-- com.zhang.bms.control.BookTableHelper : bookTableHelper
+ com.zhang.bms.model.BorrowListAdapter +-down- com.zhang.bms.model.BorrowListAdapter.ViewHolder
+ com.zhang.bms.model.BorrowManageListAdapter -up-|> android.widget.BaseAdapter
+ com.zhang.bms.model.BorrowManageListAdapter o-- com.zhang.bms.control.BookTableHelper : bookTableHelper
+ com.zhang.bms.model.BorrowManageListAdapter +-down- com.zhang.bms.model.BorrowManageListAdapter.ViewHolder
+ com.zhang.bms.model.CustomEditTextDialog -up-|> android.app.Dialog
+ com.zhang.bms.model.CustomSpinnerDialog -up-|> android.app.Dialog
+ com.zhang.bms.model.SqTipsDialog -up-|> android.app.Dialog
+ com.zhang.bms.model.UserListAdapter -up-|> android.widget.BaseAdapter
+ com.zhang.bms.model.UserListAdapter +-down- com.zhang.bms.model.UserListAdapter.ViewHolder
+ com.zhang.bms.model.simpleArrayAdapter -up-|> android.widget.ArrayAdapter
+
+
+right footer
+
+
+PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
+For more information about this tool, please contact philippe.mesmeur@gmail.com
+endfooter
+
+@enduml
diff --git a/bms/src/main/java/com/zhang/bms/model/simpleArrayAdapter.java b/bms/src/main/java/com/zhang/bms/model/simpleArrayAdapter.java
new file mode 100644
index 0000000..244a18b
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/model/simpleArrayAdapter.java
@@ -0,0 +1,21 @@
+package com.zhang.bms.model;
+
+import android.content.Context;
+import android.widget.ArrayAdapter;
+
+import java.util.List;
+
+public class simpleArrayAdapter extends ArrayAdapter {
+ //构造方法
+ public simpleArrayAdapter(Context context, int resource, List objects) {
+ super(context, resource, objects);
+ }
+ //复写这个方法,使返回的数据没有最后一项
+ @Override
+ public int getCount() {
+ // don't display last item. It is used as hint.
+ int count = super.getCount();
+ return count > 0 ? count - 1 : count;
+ }
+
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/AddBookActivity.java b/bms/src/main/java/com/zhang/bms/ui/AddBookActivity.java
new file mode 100644
index 0000000..fdd333a
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/AddBookActivity.java
@@ -0,0 +1,128 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.Spinner;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BookTableHelper;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.model.Book;
+import com.zhang.bms.model.SqTipsDialog;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class AddBookActivity extends AppCompatActivity implements View.OnClickListener {
+ private ImageView back;
+ private Button add;
+ private EditText ISBN;
+ private EditText bookname;
+ private EditText author;
+ private EditText press;
+ private EditText publicationtime;
+ private Spinner category;
+ private EditText synopsis;
+ private EditText inventory;
+ private EditText page;
+ final DBHelper dbHelper= new DBHelper(AddBookActivity.this,"bms",null,1);
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_add_book);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ }
+
+ private void InitView(){
+ add = findViewById(R.id.addbook_btn_add);
+ add.setOnClickListener(this);
+ ISBN = findViewById(R.id.addbook_ISBN);
+ bookname = findViewById(R.id.addbook_bookname);
+ author = findViewById(R.id.addbook_author);
+ press = findViewById(R.id.addbook_press);
+ publicationtime = findViewById(R.id.addbook_publicationtime);
+ category = findViewById(R.id.addbook_category);
+ synopsis = findViewById(R.id.addbook_synopsis);
+ inventory = findViewById(R.id.addbook_price);
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ page = findViewById(R.id.addbook_page);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.addbook_btn_add:
+ final SqTipsDialog sqTipsDialog = new SqTipsDialog(this);
+ sqTipsDialog.setTitle("提示");
+ sqTipsDialog.setCancelbtnVisible(false);
+ String str_ISBN = ISBN.getText().toString();
+ String str_bookname = bookname.getText().toString();
+ String str_author = author.getText().toString();
+ String str_press = press.getText().toString();
+ String str_publicationtime = publicationtime.getText().toString();
+ String str_category = category.getSelectedItem().toString();
+ String str_synopsis = synopsis.getText().toString();
+ int str_inventory = Integer.parseInt(inventory.getText().toString());
+ int str_page = Integer.parseInt(page.getText().toString());
+ if (!str_bookname.isEmpty() && !str_author.isEmpty() && !str_press.isEmpty() &&
+ !str_publicationtime.isEmpty() && !str_category.isEmpty() && !str_synopsis.isEmpty() &&
+ !inventory.getText().toString().isEmpty() && !page.getText().toString().isEmpty()){
+ Book book = new Book();
+ book.setISBN(str_ISBN);
+ book.setBookname(str_bookname);
+ book.setAuthor(str_author);
+ book.setPress(str_press);
+ book.setPublicationtime(str_publicationtime);
+ book.setCategory(str_category);
+ book.setSynopsis(str_synopsis);
+ book.setinventory(str_inventory);
+ book.setPage(str_page);
+ BookTableHelper bookTableHelper = new BookTableHelper();
+ boolean AddFlag = bookTableHelper.AddBook(dbHelper,book);
+ if (AddFlag == true){
+ sqTipsDialog.setMsg("插入成功!");
+ sqTipsDialog.setOnSureListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent back = new Intent(AddBookActivity.this,ManageIndexActivity.class);
+ startActivity(back);
+ }
+ });
+ sqTipsDialog.show();
+ }else {
+ sqTipsDialog.setMsg("插入失败!");
+ sqTipsDialog.setSurebtnVisible(false);
+ sqTipsDialog.show();
+ }
+ }else {
+ sqTipsDialog.setMsg("图书信息不完整!");
+ sqTipsDialog.setSurebtnVisible(false);
+ sqTipsDialog.show();
+ }
+ break;
+ case R.id.iv_back:
+ Intent intent = new Intent(AddBookActivity.this,BookManageActivity.class);
+ startActivity(intent);
+ break;
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent intent = new Intent(AddBookActivity.this,BookManageActivity.class);
+ startActivity(intent);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/BookActivity.java b/bms/src/main/java/com/zhang/bms/ui/BookActivity.java
new file mode 100644
index 0000000..a716c74
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/BookActivity.java
@@ -0,0 +1,175 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BookTableHelper;
+import com.zhang.bms.control.BorrowTableHelper;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.control.UserTableHelper;
+import com.zhang.bms.model.Book;
+import com.zhang.bms.model.Borrow;
+import com.zhang.bms.model.GetTime;
+import com.zhang.bms.model.SqTipsDialog;
+
+import java.util.ArrayList;
+
+public class BookActivity extends AppCompatActivity implements View.OnClickListener {
+ private TextView page;
+ private TextView bookname;
+ private TextView author;
+ private TextView category;
+ private TextView inventory;
+ private TextView synopsis;
+ private TextView press;
+ private TextView publicationtime;
+ private ImageView back;
+ private Button collect;
+ private Button collected;
+ private Button borrow;
+ private Button borrownull;
+ private String bid;
+ private String uid;
+ private String collections;
+ final DBHelper dbHelper= new DBHelper(this,"bms",null,1);
+ BookTableHelper bookTableHelper = new BookTableHelper();
+ UserTableHelper userTableHelper = new UserTableHelper();
+ BorrowTableHelper borrowTableHelper = new BorrowTableHelper();
+ private ArrayList bookArrayList;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_book);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ uid = sharedPreferences.getString("uid","-1");
+ Intent intent = getIntent();
+ bid = intent.getStringExtra("bid");
+
+ collections = userTableHelper.FindCollectionBooks(dbHelper,uid);
+ if (collections.contains("/"+bid+"/")){
+ collect.setVisibility(View.GONE);
+ collected.setVisibility(View.VISIBLE);
+ }else {
+ collected.setVisibility(View.GONE);
+ collect.setVisibility(View.VISIBLE);
+ }
+ bookArrayList = bookTableHelper.BookDetails(dbHelper,bid);
+ bookname.setText(bookArrayList.get(0).getBookname());
+ author.setText(bookArrayList.get(0).getAuthor());
+ category.setText(bookArrayList.get(0).getCategory());
+ inventory.setText("馆存:"+bookArrayList.get(0).getinventory()+"");
+ synopsis.setText("\t\t\t\t" + bookArrayList.get(0).getSynopsis());
+ press.setText(bookArrayList.get(0).getPress());
+ publicationtime.setText(bookArrayList.get(0).getPublicationtime());
+ page.setText(bookArrayList.get(0).getPage()+" 页");
+ if (bookArrayList.get(0).getinventory() != (0)){
+ borrow.setVisibility(View.VISIBLE);
+ borrownull.setVisibility(View.GONE);
+ }else {
+ borrownull.setVisibility(View.VISIBLE);
+ borrow.setVisibility(View.GONE);
+ }
+ }
+ private void InitView(){
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ bookname = findViewById(R.id.book_bookname);
+ author = findViewById(R.id.book_author);
+ category = findViewById(R.id.book_category);
+ inventory = findViewById(R.id.book_price);
+ synopsis = findViewById(R.id.book_synopsis);
+ press = findViewById(R.id.book_press);
+ publicationtime = findViewById(R.id.book_publicationtime);
+ page = findViewById(R.id.book_page);
+ collect = findViewById(R.id.collect);
+ collect.setOnClickListener(this);
+ collected = findViewById(R.id.collected);
+ collected.setOnClickListener(this);
+ borrow = findViewById(R.id.borrow);
+ borrow.setOnClickListener(this);
+ borrownull = findViewById(R.id.borrownull);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.borrow:
+ final SqTipsDialog sqTipsDialog = new SqTipsDialog(this);
+ sqTipsDialog.setTile("提示").setMsg("是否确定借阅此书。书本借阅后需在一个月之内归还。")
+ .setOnCanlceListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ sqTipsDialog.dismiss();
+ }
+ });
+ sqTipsDialog.setOnSureListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ int new_inventory = bookArrayList.get(0).getinventory() - 1;
+ bookTableHelper.BorrowBook(dbHelper,bid,new_inventory);
+ Borrow borrow = new Borrow();
+ borrow.setBookid(bid);
+ borrow.setUserid(uid);
+ borrow.setBostate(0);
+ GetTime getTime = new GetTime();
+ borrow.setBotime(getTime.BorrowTime());
+ borrowTableHelper.AddBorrow(dbHelper,borrow);
+ sqTipsDialog.dismiss();
+ Intent intent = new Intent(BookActivity.this,BorrowSuccessActivity.class);
+ intent.putExtra("bid",bid);
+ startActivity(intent);
+ }
+ });
+ sqTipsDialog.show();
+ break;
+ case R.id.collected:
+ String uncollection = "/"+bid+"/";
+ String new_collection = collections.replace(uncollection,"");
+ userTableHelper.CollectBook(dbHelper,uid,new_collection);
+ collected.setVisibility(View.GONE);
+ collect.setVisibility(View.VISIBLE);
+ Toast.makeText(BookActivity.this,"取消收藏成功",Toast.LENGTH_SHORT).show();
+ break;
+ case R.id.collect:
+ String collection = "/"+bid+"/";
+ userTableHelper.CollectBook(dbHelper,uid,collections+collection);
+ collect.setVisibility(View.GONE);
+ collected.setVisibility(View.VISIBLE);
+ Toast.makeText(BookActivity.this,"收藏成功",Toast.LENGTH_SHORT).show();
+ break;
+ case R.id.iv_back:
+ Back();
+ break;
+ }
+ }
+ private void Back(){
+ Intent intent = getIntent();
+ String code = intent.getStringExtra("startActivityCode");
+ if (code.equals("favorite")){
+ Intent back = new Intent(this,FavoriteActivity.class);
+ startActivity(back);
+ }else {
+ finish();
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();//注释掉这行,back键不退出activity
+ Back();
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/BookManageActivity.java b/bms/src/main/java/com/zhang/bms/ui/BookManageActivity.java
new file mode 100644
index 0000000..c1fd717
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/BookManageActivity.java
@@ -0,0 +1,101 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BookTableHelper;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.model.Book;
+import com.zhang.bms.model.BookListAdapter;
+
+import java.util.ArrayList;
+
+public class BookManageActivity extends AppCompatActivity implements View.OnClickListener {
+ private LinearLayout back;
+ private LinearLayout um;
+ private LinearLayout bom;
+ private ArrayList booklist;
+ private ListView listView;
+ private ImageView add;
+ final DBHelper dbHelper= new DBHelper(BookManageActivity.this,"bms",null,1);
+ private BookTableHelper bookTableHelper = new BookTableHelper();
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_book_manage);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ InitBookList();
+ }
+
+ public void InitView(){
+ listView = findViewById(R.id.booklist_listview);
+ add = findViewById(R.id.btn_addbook);
+ add.setOnClickListener(this);
+ back = findViewById(R.id.back);
+ back.setOnClickListener(this);
+ um = findViewById(R.id.goto_um);
+ um.setOnClickListener(this);
+ bom = findViewById(R.id.goto_bom);
+ bom.setOnClickListener(this);
+ }
+
+ private void InitBookList(){
+ booklist = bookTableHelper.BookList(dbHelper);
+ BookListAdapter adapter = new BookListAdapter(this,booklist);
+ ListView book = findViewById(R.id.booklist_listview);
+ book.setAdapter(adapter);
+ book.setOnItemClickListener(new BookOnClickListener());
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.goto_bom:
+ Intent goto_bom = new Intent(this,BorrowManageActivity.class);
+ startActivity(goto_bom);
+ break;
+ case R.id.goto_um:
+ Intent goto_um = new Intent(this,UserManageActivity.class);
+ startActivity(goto_um);
+ break;
+ case R.id.back:
+ Intent back = new Intent(this,PersonalCenterActivity.class);
+ startActivity(back);
+ break;
+ case R.id.btn_addbook:
+ Intent goto_ABA = new Intent(BookManageActivity.this,AddBookActivity.class);
+ startActivity(goto_ABA);
+ break;
+ }
+ }
+
+ private class BookOnClickListener implements AdapterView.OnItemClickListener{
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ String bid = booklist.get(position).getId();
+ Intent intent = new Intent(BookManageActivity.this,ManageBookDetailsActivity.class);
+ intent.putExtra("bid",bid);
+ startActivity(intent);
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ // super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent goto_MIA = new Intent(BookManageActivity.this,ManageIndexActivity.class);
+ startActivity(goto_MIA);
+ }
+}
diff --git a/bms/src/main/java/com/zhang/bms/ui/BorrowManageActivity.java b/bms/src/main/java/com/zhang/bms/ui/BorrowManageActivity.java
new file mode 100644
index 0000000..e0addf0
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/BorrowManageActivity.java
@@ -0,0 +1,121 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BookTableHelper;
+import com.zhang.bms.control.BorrowTableHelper;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.model.Borrow;
+import com.zhang.bms.model.BorrowListAdapter;
+import com.zhang.bms.model.BorrowManageListAdapter;
+import com.zhang.bms.model.GetTime;
+import com.zhang.bms.model.SqTipsDialog;
+
+import java.util.ArrayList;
+
+public class BorrowManageActivity extends AppCompatActivity implements View.OnClickListener {
+ private ListView list;
+ private LinearLayout back;
+ private LinearLayout um;
+ private LinearLayout bm;
+ final DBHelper dbHelper= new DBHelper(this,"bms",null,1);
+ private BorrowTableHelper borrowTableHelper = new BorrowTableHelper();
+ private BookTableHelper bookTableHelper = new BookTableHelper();
+ private ArrayList arrayList;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_borrow_manage);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ InitList();
+ }
+
+ private void InitView(){
+ list = findViewById(R.id.borrowmanage_list);
+ }
+
+ private void InitList(){
+ arrayList = borrowTableHelper.AllBorrow(dbHelper);
+ BorrowManageListAdapter adapter = new BorrowManageListAdapter(this,arrayList);
+ ListView book = findViewById(R.id.borrowmanage_list);
+ book.setAdapter(adapter);
+ book.setOnItemClickListener(new BackBook());
+ back = findViewById(R.id.back);
+ back.setOnClickListener(this);
+ um = findViewById(R.id.goto_um);
+ um.setOnClickListener(this);
+ bm = findViewById(R.id.goto_bm);
+ bm.setOnClickListener(this);
+ }
+ private class BackBook implements AdapterView.OnItemClickListener{
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ final String boid = arrayList.get(position).getBoid();
+ final String bid = arrayList.get(position).getBookid();
+ int state = arrayList.get(position).getBostate();
+ final SqTipsDialog sqTipsDialog = new SqTipsDialog(BorrowManageActivity.this);
+ if (state == 0){
+ sqTipsDialog.setTile("提示").setMsg("请确认用户是否还书。")
+ .setOnCanlceListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ sqTipsDialog.dismiss();
+ }
+ });
+ sqTipsDialog.setOnSureListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ String reviewer = sharedPreferences.getString("username","-1");
+ GetTime getTime = new GetTime();
+ String backtime = getTime.BorrowTime();
+ borrowTableHelper.ReturnBook(dbHelper,boid,backtime,reviewer);
+ int inventory = bookTableHelper.FindInventory(dbHelper,bid) + 1;
+ bookTableHelper.BorrowBook(dbHelper,bid,inventory);
+ Intent intent = new Intent(BorrowManageActivity.this,ReturnSuccessActivity.class);
+ startActivity(intent);
+ sqTipsDialog.dismiss();
+ }
+ });
+ sqTipsDialog.show();
+ }
+ }
+ }
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.back:
+ Intent back = new Intent(this,PersonalCenterActivity.class);
+ startActivity(back);
+ break;
+ case R.id.goto_um:
+ Intent goto_um = new Intent(this,UserManageActivity.class);
+ startActivity(goto_um);
+ break;
+ case R.id.goto_bm:
+ Intent goto_bm = new Intent(this,BookManageActivity.class);
+ startActivity(goto_bm);
+ break;
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ //super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent intent = new Intent(this,ManageIndexActivity.class);
+ startActivity(intent);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/BorrowSuccessActivity.java b/bms/src/main/java/com/zhang/bms/ui/BorrowSuccessActivity.java
new file mode 100644
index 0000000..72cbcd5
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/BorrowSuccessActivity.java
@@ -0,0 +1,44 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ImageView;
+
+import com.zhang.bms.R;
+
+public class BorrowSuccessActivity extends AppCompatActivity implements View.OnClickListener {
+ private String bid;
+ private String code;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_borrow_success);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ Intent intent = getIntent();
+ bid = intent.getStringExtra("bid");
+ code = intent.getStringExtra("startActivityCode");
+ InitView();
+ }
+ private void InitView(){
+
+ }
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent intent = new Intent(this,ShowBooksActivity.class);
+ startActivity(intent);
+ }
+
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/ChangePasswordActivity.java b/bms/src/main/java/com/zhang/bms/ui/ChangePasswordActivity.java
new file mode 100644
index 0000000..448982e
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/ChangePasswordActivity.java
@@ -0,0 +1,104 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.control.UserTableHelper;
+
+public class ChangePasswordActivity extends AppCompatActivity implements View.OnClickListener {
+ private ImageView back;
+ private Button commit;
+ private EditText original_pass;
+ private EditText new_pass;
+ private EditText new_pass2;
+ private TextView forget;
+ final DBHelper dbHelper = new DBHelper(ChangePasswordActivity.this,"bms",null,1);
+ UserTableHelper userTableHelper = new UserTableHelper();
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_change_password);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ }
+ private void InitView(){
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ commit = findViewById(R.id.btn_commit);
+ commit.setOnClickListener(this);
+ original_pass = findViewById(R.id.original_pass);
+ new_pass = findViewById(R.id.new_pass);
+ new_pass2 = findViewById(R.id.new_pass2);
+ forget = findViewById(R.id.forget_password);
+ forget.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.forget_password:
+ Intent intent2 = new Intent(ChangePasswordActivity.this,ForgetPassActivity.class);
+ startActivity(intent2);
+ break;
+ case R.id.btn_commit:
+ String opass = original_pass.getText().toString();
+ String npass = new_pass.getText().toString();
+ String npass2 = new_pass2.getText().toString();
+ if (npass.equals(npass2)){
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ final SharedPreferences.Editor editor = sharedPreferences.edit();
+ String username = sharedPreferences.getString("username","-1");
+ boolean able_change = userTableHelper.Login(dbHelper,username,opass);
+ if (able_change == true){
+ userTableHelper.ChangePass(dbHelper,username,npass);
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("修改成功").setMessage("密码修改成功!\n请重新登录。");
+ builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ editor.clear();
+ editor.commit();
+ Intent intent1 = new Intent(ChangePasswordActivity.this,LoginActivity.class);
+ startActivity(intent1);
+ }
+ });
+ builder.show();
+ }else {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("修改失败").setMessage("原密码不正确。");
+ builder.show();
+ }
+ }else {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("修改失败").setMessage("两次输入的新密码不一致。");
+ builder.show();
+ }
+ break;
+ case R.id.iv_back:
+ Intent intent = new Intent(ChangePasswordActivity.this,PersonalCenterActivity.class);
+ startActivity(intent);
+ break;
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent intent = new Intent(ChangePasswordActivity.this,PersonalCenterActivity.class);
+ startActivity(intent);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/Change_synopsisActivity.java b/bms/src/main/java/com/zhang/bms/ui/Change_synopsisActivity.java
new file mode 100644
index 0000000..c43049b
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/Change_synopsisActivity.java
@@ -0,0 +1,55 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.zhang.bms.R;
+
+public class Change_synopsisActivity extends AppCompatActivity implements View.OnClickListener {
+ private ImageView back;
+ private EditText synopsis;
+ private TextView save;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_change_synopsis);
+ //状态栏
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ Intent intent = getIntent();
+ String o_synopsis = intent.getStringExtra("o_synopsis");
+ synopsis.setText(o_synopsis);
+ }
+ private void InitView(){
+ synopsis = findViewById(R.id.synopsis);
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ save = findViewById(R.id.save);
+ save.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.save:
+ String n_synopis = synopsis.getText().toString();
+ Intent intent = new Intent();
+ intent.putExtra("n_synopsis",n_synopis);
+ setResult(1,intent);
+ finish();
+ break;
+ case R.id.iv_back:
+ finish();
+ break;
+ }
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/FavoriteActivity.java b/bms/src/main/java/com/zhang/bms/ui/FavoriteActivity.java
new file mode 100644
index 0000000..db72f90
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/FavoriteActivity.java
@@ -0,0 +1,97 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.graphics.Color;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.GridView;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BookTableHelper;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.control.UserTableHelper;
+import com.zhang.bms.model.Book;
+import com.zhang.bms.model.BookGridAdapter;
+import com.zhang.bms.model.StringTrans;
+
+import java.util.ArrayList;
+
+public class FavoriteActivity extends AppCompatActivity implements View.OnClickListener {
+ private ImageView isnull;
+ private ImageView back;
+ private GridView list;
+ final DBHelper dbHelper= new DBHelper(this,"bms",null,1);
+ private BookTableHelper bookTableHelper = new BookTableHelper();
+ UserTableHelper userTableHelper = new UserTableHelper();
+ private ArrayList bookArrayList;
+ private String uid;
+ private String collections;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_favorite);
+ //状态栏
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ uid = sharedPreferences.getString("uid","-1");
+ collections = userTableHelper.FindCollectionBooks(dbHelper,uid);
+ InitList();
+ }
+ private void InitView(){
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ list = findViewById(R.id.collectionlist);
+ isnull = findViewById(R.id.isnull);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.iv_back:
+ Intent back = new Intent(this,PersonalCenterActivity.class);
+ startActivity(back);
+ break;
+ }
+ }
+ private void InitList(){
+ StringTrans stringTrans = new StringTrans();
+ String searcher="";
+ if (!collections.equals("")){
+ isnull.setVisibility(View.INVISIBLE);
+ searcher = stringTrans.StringTrans(collections);
+ }
+ bookArrayList = bookTableHelper.SearchCollection(dbHelper,searcher);
+ BookGridAdapter adapter = new BookGridAdapter(this,bookArrayList);
+ GridView book = findViewById(R.id.collectionlist);
+ book.setAdapter(adapter);
+ book.setOnItemClickListener(new BookOnClickListener());
+ }
+ private class BookOnClickListener implements AdapterView.OnItemClickListener{
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ String bid = bookArrayList.get(position).getId();
+ Intent intent = new Intent(FavoriteActivity.this,BookActivity.class);
+ intent.putExtra("bid",bid);
+ intent.putExtra("startActivityCode","favorite");
+ startActivity(intent);
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent intent = new Intent(this,PersonalCenterActivity.class);
+ startActivity(intent);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/ForgetPassActivity.java b/bms/src/main/java/com/zhang/bms/ui/ForgetPassActivity.java
new file mode 100644
index 0000000..b6ce6c6
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/ForgetPassActivity.java
@@ -0,0 +1,131 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.control.UserTableHelper;
+import com.zhang.bms.model.SqTipsDialog;
+
+public class ForgetPassActivity extends AppCompatActivity implements View.OnClickListener {
+ private TextView passlock;
+ private EditText passkey;
+ private EditText newpass;
+ private EditText renewpass;
+ private ImageView back;
+ private Button commit;
+ final DBHelper dbHelper = new DBHelper(ForgetPassActivity.this,"bms",null,1);
+ UserTableHelper userTableHelper = new UserTableHelper();
+ private String update_username;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_forget_pass);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ Intent get_username = getIntent();
+ String o_username = get_username.getStringExtra("o_username");
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ String username = sharedPreferences.getString("username","-1");
+ if (username.equals("-1")){
+ update_username = o_username;
+ }else {
+ update_username = username;
+ }
+ String str_passlock = userTableHelper.FindPassLock(dbHelper,update_username);
+ if (!str_passlock.equals("-1") && !str_passlock.equals("请选择密保问题(非必选)")){
+ passlock.setText(str_passlock);
+ }else{
+ final SqTipsDialog sqTipsDialog = new SqTipsDialog(this);
+ sqTipsDialog.setCancelable(false);
+ sqTipsDialog.setOnSureListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ sqTipsDialog.dismiss();
+ }
+ });
+ sqTipsDialog.setOnCanlceListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ sqTipsDialog.dismiss();
+ }
+ });
+ sqTipsDialog.setTile("提示")
+ .setMsg("用户不存在或未设置密保问题,请联系管理员修改密码。")
+ .show();
+ }
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.iv_back:
+ ForgetPassActivity.this.finish();
+ break;
+ case R.id.btn_commit:
+ String str_passlock = passlock.getText().toString();
+ String str_passkey = passkey.getText().toString();
+ String str_pass = newpass.getText().toString();
+ String str_pass2 = renewpass.getText().toString();
+ if (str_pass.equals(str_pass2)){
+ boolean result = userTableHelper.PassLock(dbHelper,update_username,str_passlock,str_passkey);
+ if (result == true){
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ final SharedPreferences.Editor editor = sharedPreferences.edit();
+ userTableHelper.ChangePass(dbHelper,update_username,str_pass);
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("修改成功").setMessage("密码修改成功!\n请重新登录。");
+ builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ editor.clear();
+ editor.commit();
+ Intent intent1 = new Intent(ForgetPassActivity.this,LoginActivity.class);
+ startActivity(intent1);
+ }
+ });
+ builder.show();
+ }else {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("修改失败").setMessage("密保答案不正确。");
+ builder.show();
+ }
+ }else {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("修改失败").setMessage("两次输入的新密码不一致。");
+ builder.show();
+ }
+
+ break;
+ }
+ }
+
+ private void InitView(){
+ passlock = findViewById(R.id.passlock);
+ passkey = findViewById(R.id.passkey);
+ newpass = findViewById(R.id.new_pass);
+ renewpass = findViewById(R.id.new_pass2);
+ commit = findViewById(R.id.btn_commit);
+ commit.setOnClickListener(this);
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/InputUsernameActivity.java b/bms/src/main/java/com/zhang/bms/ui/InputUsernameActivity.java
new file mode 100644
index 0000000..5acb885
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/InputUsernameActivity.java
@@ -0,0 +1,69 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+
+import com.zhang.bms.R;
+import com.zhang.bms.model.SqTipsDialog;
+
+public class InputUsernameActivity extends AppCompatActivity implements View.OnClickListener {
+ private ImageView back;
+ private EditText username;
+ private Button commit;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_input_username);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ }
+ private void InitView(){
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ username = findViewById(R.id.username);
+ commit = findViewById(R.id.btn_commit);
+ commit.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.btn_commit:
+ String str_username = username.getText().toString();
+ if (!str_username.isEmpty()){
+ Intent goto_update = new Intent(this,ForgetPassActivity.class);
+ goto_update.putExtra("o_username",str_username);
+ startActivity(goto_update);
+ }else {
+ final SqTipsDialog sqTipsDialog = new SqTipsDialog(this);
+ sqTipsDialog.setCancelable(true);
+ sqTipsDialog.setCancelbtnVisible(false)
+ .setSurebtnVisible(false)
+ .setTile("提示")
+ .setMsg("请填写需要申诉的账号用户名。")
+ .show();
+ }
+ break;
+ case R.id.iv_back:
+ Intent intent = new Intent(InputUsernameActivity.this,LoginActivity.class);
+ startActivity(intent);
+ break;
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent intent = new Intent(InputUsernameActivity.this,LoginActivity.class);
+ startActivity(intent);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/LoginActivity.java b/bms/src/main/java/com/zhang/bms/ui/LoginActivity.java
new file mode 100644
index 0000000..6c00a21
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/LoginActivity.java
@@ -0,0 +1,161 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.control.UserTableHelper;
+import com.zhang.bms.model.SqTipsDialog;
+import com.zhang.bms.model.User;
+
+import java.util.ArrayList;
+
+public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
+ private Button login;
+ private TextView forget;
+ private EditText username;
+ private EditText password;
+ private CheckBox save;
+ private TextView goto_regist;
+ private ArrayList userArrayList;
+ final DBHelper dbHelper = new DBHelper(LoginActivity.this,"bms",null,1);
+ UserTableHelper userTableHelper = new UserTableHelper();
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_login);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ InitAccount();
+ }
+
+ private void InitView(){
+ login = findViewById(R.id.login_btn_login);
+ login.setOnClickListener(this);
+ username = findViewById(R.id.login_username);
+ password = findViewById(R.id.login_password);
+ save = findViewById(R.id.login_saveup);
+ goto_regist = findViewById(R.id.login_to_regist);
+ goto_regist.setOnClickListener(this);
+ forget = findViewById(R.id.forget_password);
+ forget.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.forget_password:
+ Intent intent2 = new Intent(LoginActivity.this,InputUsernameActivity.class);
+ startActivity(intent2);
+ break;
+ case R.id.login_btn_login:
+ final SqTipsDialog sqTipsDialog = new SqTipsDialog(this);
+ sqTipsDialog.setSurebtnVisible(false);
+ sqTipsDialog.setCancelbtnVisible(false);
+ String str_username = username.getText().toString();
+ String str_password = password.getText().toString();
+ if (!str_username.isEmpty() && !str_password.isEmpty()){
+ if (str_username.equals("admin") && str_password.equals("123456")){
+ SaveUP("admin","123456");
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putString("role","MANAGERS");
+ editor.commit();
+ Toast.makeText(LoginActivity.this,"欢迎您!管理员!",Toast.LENGTH_SHORT).show();
+ Intent goto_ManagePage = new Intent(LoginActivity.this,ShowBooksActivity.class);
+ startActivity(goto_ManagePage);
+ }else {
+ boolean loginResult = userTableHelper.Login(dbHelper,str_username,str_password);
+ if (loginResult == true){
+ userArrayList = userTableHelper.UserList(dbHelper,str_username);
+ String user_role = userArrayList.get(0).getRole();
+ String user_uid = userArrayList.get(0).getId();
+ String user_passlock = userArrayList.get(0).getPasslock();
+ SaveUP(str_username,str_password,user_uid,user_role,user_passlock);
+ Toast.makeText(LoginActivity.this,"登录成功!",Toast.LENGTH_SHORT).show();
+ if (user_role.equals("MANAGERS")){
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putString("role","MANAGERS");
+ editor.commit();
+ Intent goto1 = new Intent(LoginActivity.this,ShowBooksActivity.class);
+ startActivity(goto1);
+ }else {
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putString("role","USER");
+ editor.commit();
+ Intent goto2 = new Intent(LoginActivity.this,ShowBooksActivity.class);
+ startActivity(goto2);
+ }
+ }else {
+ sqTipsDialog.setMsg("登录失败!用户名不存在或密码错误!");
+ sqTipsDialog.show();
+ }
+ }
+ }else {
+ sqTipsDialog.setMsg("请填写用户名或密码!");
+ sqTipsDialog.show();
+ }
+ break;
+ case R.id.login_to_regist:
+ Intent intent = new Intent(LoginActivity.this,RegisterActivity.class);
+ startActivity(intent);
+ break;
+ }
+ }
+
+ private void SaveUP(String username,String password){
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putString("username",username);
+ editor.putString("password",password);
+ editor.commit();
+ if (save.isChecked()){
+ editor.putBoolean("savestate",true);
+ }
+ }
+ private void SaveUP(String username,String password,String uid,String role,String passlock){
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putString("username",username);
+ editor.putString("password",password);
+ editor.putString("uid",uid);
+ editor.putString("role",role);
+ editor.putString("passlock",passlock);
+ editor.commit();
+ if (save.isChecked()){
+ editor.putBoolean("savestate",true);
+ }
+ }
+
+ private void InitAccount(){
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ String save_username = sharedPreferences.getString("username","null");
+ String save_password = sharedPreferences.getString("password","null");
+ boolean savestate = sharedPreferences.getBoolean("savestate",false);
+ if (savestate == true){
+ username.setText(save_username);
+ password.setText(save_password);
+ save.setChecked(true);
+ }else {
+ save.setChecked(false);
+ }
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/ManageBookDetailsActivity.java b/bms/src/main/java/com/zhang/bms/ui/ManageBookDetailsActivity.java
new file mode 100644
index 0000000..0f21a46
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/ManageBookDetailsActivity.java
@@ -0,0 +1,215 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BookTableHelper;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.model.Book;
+import com.zhang.bms.model.CustomEditTextDialog;
+import com.zhang.bms.model.CustomSpinnerDialog;
+import com.zhang.bms.model.SqTipsDialog;
+
+import java.util.ArrayList;
+
+public class ManageBookDetailsActivity extends AppCompatActivity implements View.OnClickListener {
+ private ImageView back;
+ private EditText bookname;
+ private EditText ISBN;
+ private EditText author;
+ private EditText page;
+ private EditText press;
+ private EditText publicationtime;
+ private EditText category;
+ private TextView synopsis;
+ private EditText inventory;
+ private String get_bid;
+ private String o_ISBN;
+ private String o_bookname;
+ private String o_author;
+ private String o_press;
+ private String o_publicationtime;
+ private String o_category;
+ private String o_synopsis;
+ private String o_inventory;
+ private String o_page;
+ private Button save;
+ private Button delete;
+ private RelativeLayout change_synopsis;
+ final DBHelper dbHelper= new DBHelper(this,"bms",null,1);
+ BookTableHelper bookTableHelper = new BookTableHelper();
+ private ArrayList bookArrayList;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_manage_book_details);
+
+ InitView();
+ Intent intent = getIntent();
+ //状态栏
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ //取bid,查询图书详细信息
+ get_bid = intent.getStringExtra("bid");
+ bookArrayList = bookTableHelper.BookDetails(dbHelper,get_bid);
+ bookname.setText(bookArrayList.get(0).getBookname());
+ ISBN.setText(bookArrayList.get(0).getISBN());
+ author.setText(bookArrayList.get(0).getAuthor());
+ page.setText(bookArrayList.get(0).getPage()+"");
+ press.setText(bookArrayList.get(0).getPress());
+ publicationtime.setText(bookArrayList.get(0).getPublicationtime());
+ category.setText(bookArrayList.get(0).getCategory());
+ synopsis.setText(bookArrayList.get(0).getSynopsis());
+ inventory.setText(bookArrayList.get(0).getinventory()+"");
+ //原数据缓存
+ o_ISBN = ISBN.getText().toString();
+ o_bookname = bookname.getText().toString();
+ o_author = author.getText().toString();
+ o_press = press.getText().toString();
+ o_publicationtime = publicationtime.getText().toString();
+ o_category = category.getText().toString();
+ o_synopsis = synopsis.getText().toString();
+ o_inventory = inventory.getText().toString();
+ o_page = page.getText().toString();
+ }
+
+ private void InitView(){
+ bookname = findViewById(R.id.bookdetails_bookname);
+ ISBN = findViewById(R.id.bookdetails_bid);
+ author = findViewById(R.id.bookdetails_author);
+ press = findViewById(R.id.bookdetails_press);
+ page = findViewById(R.id.bookdetails_page);
+ publicationtime = findViewById(R.id.bookdetails_publicationtime);
+ category = findViewById(R.id.bookdetails_category);
+ synopsis = findViewById(R.id.bookdetails_synopsis);
+ inventory = findViewById(R.id.bookdetails_price);
+ save = findViewById(R.id.bookdetails_btn_save);
+ save.setOnClickListener(this);
+ delete = findViewById(R.id.bookdetails_btn_delete);
+ delete.setOnClickListener(this);
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ change_synopsis = findViewById(R.id.change_synopsis);
+ change_synopsis.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ final SqTipsDialog sqTipsDialog = new SqTipsDialog(this);
+ switch (v.getId()){
+ case R.id.change_synopsis:
+ Intent change_s = new Intent(this,Change_synopsisActivity.class);
+ change_s.putExtra("o_synopsis",synopsis.getText().toString());
+ startActivityForResult(change_s,1);
+ break;
+ case R.id.iv_back:
+ Intent intent = new Intent(ManageBookDetailsActivity.this,BookManageActivity.class);
+ startActivity(intent);
+ break;
+ case R.id.bookdetails_btn_save:
+ final String s_ISBN = ISBN.getText().toString();
+ final String s_bookname = bookname.getText().toString();
+ final String s_author = author.getText().toString();
+ final String s_press = press.getText().toString();
+ final String s_publicationtime = publicationtime.getText().toString();
+ final String s_category = category.getText().toString();
+ final String s_page = page.getText().toString();
+ final String s_synopsis = synopsis.getText().toString();
+ final String s_inventory = inventory.getText().toString();
+ if (!s_bookname.equals(o_bookname) || !s_author.equals(o_author) || !s_press.equals(o_press)
+ || !s_publicationtime.equals(o_publicationtime) || !s_category.equals(o_category)
+ || !s_page.equals(o_page) || !s_synopsis.equals(o_synopsis)
+ || !s_inventory.equals(o_inventory) || !s_ISBN.equals(o_ISBN)){
+ sqTipsDialog.setTitle("提示");
+ sqTipsDialog.setMsg("您正在试图更改图书信息,是否保存更改?")
+ .setCancelable(true);
+ sqTipsDialog.setOnCanlceListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Toast.makeText(ManageBookDetailsActivity.this,"未作出任何修改。",Toast.LENGTH_SHORT).show();
+ Intent back = new Intent(ManageBookDetailsActivity.this,BookManageActivity.class);
+ startActivity(back);
+ }
+ });
+ sqTipsDialog.setOnSureListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ boolean result = bookTableHelper.UpdateBook(dbHelper,get_bid,s_ISBN,s_bookname,
+ s_author, s_press, s_publicationtime, s_category,s_synopsis,
+ Integer.parseInt(s_inventory), Integer.parseInt(s_page));
+ if (result == true){
+ Toast.makeText(ManageBookDetailsActivity.this,"修改成功!",Toast.LENGTH_SHORT).show();
+ Intent goto_list = new Intent(ManageBookDetailsActivity.this,BookManageActivity.class);
+ startActivity(goto_list);
+ }else {
+ Toast.makeText(ManageBookDetailsActivity.this,"修改失败!",Toast.LENGTH_SHORT).show();
+ }
+ }
+ });
+ sqTipsDialog.show();
+ }else {
+ Toast.makeText(ManageBookDetailsActivity.this,"未作出任何修改。",Toast.LENGTH_SHORT).show();
+ Intent back = new Intent(ManageBookDetailsActivity.this,BookManageActivity.class);
+ startActivity(back);
+ }
+ break;
+ case R.id.bookdetails_btn_delete:
+ sqTipsDialog.setTitle("提示");
+ sqTipsDialog.setMsg("确认删除《" +o_bookname+ "》?此操作不可逆!")
+ .setCancelable(true);
+ sqTipsDialog.setOnCanlceListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ sqTipsDialog.dismiss();
+ }
+ });
+ sqTipsDialog.setOnSureListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ bookTableHelper.DeleteBook(dbHelper,get_bid);
+ Toast.makeText(ManageBookDetailsActivity.this,"删除成功!",Toast.LENGTH_SHORT).show();
+ Intent back = new Intent(ManageBookDetailsActivity.this,BookManageActivity.class);
+ startActivity(back);
+ }
+ });
+ sqTipsDialog.show();
+ break;
+ }
+ }
+ @Override
+ protected void onActivityResult(int requestCode,int resultCode,Intent data) {
+
+ super.onActivityResult(requestCode, resultCode, data);
+ if (data != null){
+ if (requestCode == 1){
+ if (resultCode ==1){
+ String n_synopsis = (String) data.getSerializableExtra("n_synopsis");
+ synopsis.setText(n_synopsis);
+ }
+ }
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent intent = new Intent(ManageBookDetailsActivity.this,BookManageActivity.class);
+ startActivity(intent);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/ManageIndexActivity.java b/bms/src/main/java/com/zhang/bms/ui/ManageIndexActivity.java
new file mode 100644
index 0000000..775cd20
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/ManageIndexActivity.java
@@ -0,0 +1,187 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BookTableHelper;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.control.UserTableHelper;
+import com.zhang.bms.model.Book;
+import com.zhang.bms.model.SqTipsDialog;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class ManageIndexActivity extends AppCompatActivity implements View.OnClickListener {
+ private Button add_default;
+ private ImageView iv_back;
+ private LinearLayout back;
+ private LinearLayout bm;
+ private LinearLayout um;
+ private LinearLayout bom;
+ final DBHelper dbHelper= new DBHelper(ManageIndexActivity.this,"bms",null,1);
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_manage_index);
+ //状态栏文字改为黑色
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ //判断创建初始数据按钮是否可点击
+ SharedPreferences sharedPreferences = getSharedPreferences("system",MODE_PRIVATE);
+ boolean default_data = sharedPreferences.getBoolean("default_data",false);
+ if (default_data == true){
+ add_default.setVisibility(View.GONE);
+ }
+ }
+ //初始化控件
+ public void InitView(){
+ back = findViewById(R.id.back);
+ back.setOnClickListener(this);
+ iv_back = findViewById(R.id.iv_back);
+ iv_back.setOnClickListener(this);
+ bm = findViewById(R.id.goto_bm);
+ bm.setOnClickListener(this);
+ um = findViewById(R.id.goto_um);
+ um.setOnClickListener(this);
+ bom = findViewById(R.id.goto_bom);
+ bom.setOnClickListener(this);
+ add_default = findViewById(R.id.add_default_data);
+ add_default.setOnClickListener(this);
+ }
+ //点击事件
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.goto_bom:
+ Intent goto_Bom = new Intent(this,BorrowManageActivity.class);
+ startActivity(goto_Bom);
+ break;
+ case R.id.add_default_data:
+ String b1_ISBN = this.getString(R.string.dt_1_ISBN);
+ String b1_bn = this.getString(R.string.dt_1_bookname);
+ String b1_a = this.getString(R.string.dt_1_author);
+ String b1_ca = this.getString(R.string.dt_1_catogory);
+ String b1_p = this.getString(R.string.dt_1_press);
+ String b1_pt = this.getString(R.string.dt_1_publicationtime);
+ int b1_page = Integer.parseInt(this.getString(R.string.dt_1_page));
+ String b1_s = this.getString(R.string.dt_1_synopsis);
+ int b1_in = Integer.parseInt(this.getString(R.string.dt_1_inventory));
+
+ String b2_ISBN = this.getString(R.string.dt_2_ISBN);
+ String b2_bn = this.getString(R.string.dt_2_bookname);
+ String b2_a = this.getString(R.string.dt_2_author);
+ String b2_ca = this.getString(R.string.dt_2_catogory);
+ String b2_p = this.getString(R.string.dt_2_press);
+ String b2_pt = this.getString(R.string.dt_2_publicationtime);
+ int b2_page = Integer.parseInt(this.getString(R.string.dt_2_page));
+ String b2_s = this.getString(R.string.dt_2_synopsis);
+ int b2_in = Integer.parseInt(this.getString(R.string.dt_2_inventory));
+
+ String b3_ISBN = this.getString(R.string.dt_3_ISBN);
+ String b3_bn = this.getString(R.string.dt_3_bookname);
+ String b3_a = this.getString(R.string.dt_3_author);
+ String b3_ca = this.getString(R.string.dt_3_catogory);
+ String b3_p = this.getString(R.string.dt_3_press);
+ String b3_pt = this.getString(R.string.dt_3_publicationtime);
+ int b3_page = Integer.parseInt(this.getString(R.string.dt_3_page));
+ String b3_s = this.getString(R.string.dt_3_synopsis);
+ int b3_in = Integer.parseInt(this.getString(R.string.dt_3_inventory));
+
+ BookTableHelper bookTableHelper = new BookTableHelper();
+
+ Book book1 = new Book();
+ book1.setBookname(b1_bn);
+ book1.setAuthor(b1_a);
+ book1.setPress(b1_p);
+ book1.setPublicationtime(b1_pt);
+ book1.setCategory(b1_ca);
+ book1.setSynopsis(b1_s);
+ book1.setinventory(b1_in);
+ book1.setISBN(b1_ISBN);
+ book1.setPage(b1_page);
+ boolean AddFlag1 = bookTableHelper.AddBook(dbHelper,book1);
+
+ Book book2 = new Book();
+ book2.setBookname(b2_bn);
+ book2.setAuthor(b2_a);
+ book2.setPress(b2_p);
+ book2.setPublicationtime(b2_pt);
+ book2.setCategory(b2_ca);
+ book2.setSynopsis(b2_s);
+ book2.setinventory(b2_in);
+ book2.setISBN(b2_ISBN);
+ book2.setPage(b2_page);
+ boolean AddFlag2 = bookTableHelper.AddBook(dbHelper,book2);
+
+ Book book3 = new Book();
+ book3.setBookname(b3_bn);
+ book3.setAuthor(b3_a);
+ book3.setPress(b3_p);
+ book3.setPublicationtime(b3_pt);
+ book3.setCategory(b3_ca);
+ book3.setSynopsis(b3_s);
+ book3.setinventory(b3_in);
+ book3.setISBN(b3_ISBN);
+ book3.setPage(b3_page);
+ boolean AddFlag3 = bookTableHelper.AddBook(dbHelper,book3);
+
+ final SqTipsDialog sqTipsDialog = new SqTipsDialog(this);
+ sqTipsDialog.setTitle("提示");
+ sqTipsDialog.setCancelbtnVisible(false);
+ if (AddFlag1 == true && AddFlag2 == true && AddFlag3 == true){
+ sqTipsDialog.setMsg("插入成功!");
+ sqTipsDialog.setOnSureListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ SharedPreferences sharedPreferences = getSharedPreferences("system",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putBoolean("default_data",true);
+ editor.commit();
+ Intent back = new Intent(ManageIndexActivity.this,ShowBooksActivity.class);
+ startActivity(back);
+ }
+ });
+ sqTipsDialog.show();
+ }else {
+ sqTipsDialog.setMsg("插入失败!");
+ sqTipsDialog.setSurebtnVisible(false);
+ sqTipsDialog.show();
+ }
+ break;
+ case R.id.iv_back:
+ Intent ivback = new Intent(this,PersonalCenterActivity.class);
+ startActivity(ivback);
+ break;
+ case R.id.back:
+ Intent back = new Intent(this,PersonalCenterActivity.class);
+ startActivity(back);
+ break;
+ case R.id.goto_bm:
+ Intent goto_BMA = new Intent(this,BookManageActivity.class);
+ startActivity(goto_BMA);
+ break;
+ case R.id.goto_um:
+ Intent goto_UMA = new Intent(ManageIndexActivity.this,UserManageActivity.class);
+ startActivity(goto_UMA);
+ break;
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ //super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent back = new Intent(this,PersonalCenterActivity.class);
+ startActivity(back);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/ManageUserDetailsActivity.java b/bms/src/main/java/com/zhang/bms/ui/ManageUserDetailsActivity.java
new file mode 100644
index 0000000..06fab2e
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/ManageUserDetailsActivity.java
@@ -0,0 +1,221 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.control.UserTableHelper;
+import com.zhang.bms.model.CustomEditTextDialog;
+import com.zhang.bms.model.CustomSpinnerDialog;
+import com.zhang.bms.model.SqTipsDialog;
+import com.zhang.bms.model.User;
+
+import java.util.ArrayList;
+
+public class ManageUserDetailsActivity extends AppCompatActivity implements View.OnClickListener {
+ private ImageView back;
+ private TextView username;
+ private TextView id;
+ private TextView passlock;
+ private TextView passkey;
+ private TextView role;
+ private Button uppass;
+ private Button save;
+ private Button delete;
+ private RelativeLayout uprole;
+ private TextView newpass_tips;
+ private TextView newrole_tips;
+ private String uid;
+ final DBHelper dbHelper= new DBHelper(ManageUserDetailsActivity.this,"bms",null,1);
+ UserTableHelper userTableHelper = new UserTableHelper();
+ private ArrayList userArrayList;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_manage_user_details);
+ InitView();
+ Intent intent = getIntent();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ uid = intent.getStringExtra("uid");
+ userArrayList = userTableHelper.UserDetails(dbHelper,uid);
+ username.setText(userArrayList.get(0).getUsername());
+ id.setText(userArrayList.get(0).getId());
+ if (userArrayList.get(0).getPasslock().isEmpty() || userArrayList.get(0).getPasslock().equals("请选择密保问题(非必选)")){
+ passlock.setText("未设置");
+ passkey.setText("未设置");
+ }else {
+ passlock.setText(userArrayList.get(0).getPasslock());
+ passkey.setText(userArrayList.get(0).getPasskey());
+ }
+ role.setText(userArrayList.get(0).getRole());
+ }
+
+ private void InitView(){
+ username = findViewById(R.id.userdetails_username);
+ id = findViewById(R.id.userdetails_id);
+ passlock = findViewById(R.id.userdetails_passlock);
+ passkey = findViewById(R.id.userdetails_passkey);
+ role = findViewById(R.id.userdetails_role);
+ uppass = findViewById(R.id.userdetails_btn_updatepassword);
+ uppass.setOnClickListener(this);
+ newpass_tips = findViewById(R.id.tv_newpass);
+ newrole_tips = findViewById(R.id.tv_newrole);
+ save = findViewById(R.id.userdetails_btn_save);
+ save.setOnClickListener(this);
+ delete = findViewById(R.id.userdetails_btn_delete);
+ delete.setOnClickListener(this);
+ uprole = findViewById(R.id.userdetails_btn_updaterole);
+ uprole.setOnClickListener(this);
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.userdetails_btn_updatepassword:
+ UpdatePasswordDialog();
+ break;
+ case R.id.iv_back:
+ Intent intent = new Intent(ManageUserDetailsActivity.this,UserManageActivity.class);
+ startActivity(intent);
+ break;
+ case R.id.userdetails_btn_save:
+ final Intent back = new Intent(ManageUserDetailsActivity.this,UserManageActivity.class);
+ if (!newpass_tips.getText().equals("") || !newrole_tips.getText().toString().equals("")){
+ final SqTipsDialog sqTipsDialog = new SqTipsDialog(this);
+ sqTipsDialog.setTitle("提示");
+ sqTipsDialog.setMsg("您正在试图更改该用户的信息,是否保存更改?")
+ .setCancelable(false);
+ sqTipsDialog.setOnCanlceListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(back);
+ }
+ });
+ sqTipsDialog.setOnSureListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (!newpass_tips.getText().toString().equals("")){
+ String newpass = newpass_tips.getText().toString().replace("该用户的新密码将被重置为:","");
+ userTableHelper.UpdatePassword(dbHelper,newpass,uid);
+ }
+ String newrole = newrole_tips.getText().toString();
+ if (!newrole.equals("")){
+ userTableHelper.UpdateRole(dbHelper,newrole_tips.getText().toString().replace("该用户的用户组将被重置为:",""),uid);
+ }
+ Toast.makeText(ManageUserDetailsActivity.this,"修改成功!",Toast.LENGTH_SHORT).show();
+ startActivity(back);
+ }
+ });
+ sqTipsDialog.show();
+ }else {
+ startActivity(back);
+ }
+ break;
+ case R.id.userdetails_btn_delete:
+ final Intent back2 = new Intent(ManageUserDetailsActivity.this,UserManageActivity.class);
+ AlertDialog.Builder builder3 = new AlertDialog.Builder(ManageUserDetailsActivity.this);
+ builder3.setTitle("提示")
+ .setMessage("确认删除该用户?此操作不可逆!")
+ .setCancelable(false)
+ .setNegativeButton("取消", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ }
+ });
+ builder3.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ userTableHelper.DeleteUser(dbHelper,uid);
+ Toast.makeText(ManageUserDetailsActivity.this,"删除成功!",Toast.LENGTH_SHORT).show();
+ startActivity(back2);
+ }
+ });
+ builder3.show();
+ break;
+ case R.id.userdetails_btn_updaterole:
+ UpdateRoleDialog();
+ break;
+ }
+ }
+
+ public void UpdatePasswordDialog() {
+ final CustomEditTextDialog customDialog = new CustomEditTextDialog(this);
+ final EditText editText = (EditText) customDialog.getEditText();//方法在CustomDialog中实现
+ customDialog.setCancelable(false);
+ customDialog.setOnSureListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //判断是否填入字符串
+ if (editText.getText().toString().isEmpty()){//如果填入空字符串,则提示出不显示
+ newpass_tips.setText(editText.getText().toString());
+ }else {
+ newpass_tips.setText("该用户的新密码将被重置为:" + editText.getText().toString());
+ }
+ customDialog.dismiss();
+ }
+ });
+ customDialog.setOnCanlceListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ customDialog.dismiss();
+ }
+ });
+ customDialog.setTile("请输入新密码");
+ customDialog.show();
+ }
+ public void UpdateRoleDialog() {
+ final CustomSpinnerDialog customDialog = new CustomSpinnerDialog(this);
+ final Spinner spinner = (Spinner) customDialog.getSpinnerItem();//方法在CustomDialog中实现
+ String[] roleArray = {"USER","MANAGERS"};
+ ArrayAdapter roleAdapter = new ArrayAdapter(this,R.layout.support_simple_spinner_dropdown_item,roleArray);
+ roleAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
+ spinner.setAdapter(roleAdapter);
+ spinner.setSelection(0);
+ customDialog.setCancelable(false);
+ customDialog.setOnSureListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (!spinner.getSelectedItem().equals(userArrayList.get(0).getRole())){
+ newrole_tips.setText("该用户的用户组将被重置为:" + spinner.getSelectedItem().toString());
+ }else {
+ newrole_tips.setText("");
+ }
+ customDialog.dismiss();
+ }
+ });
+ customDialog.setOnCanlceListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ customDialog.dismiss();
+ }
+ });
+ customDialog.setTile("请选择用户组");
+ customDialog.show();
+ }
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent intent = new Intent(ManageUserDetailsActivity.this,UserManageActivity.class);
+ startActivity(intent);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/PersonalCenterActivity.java b/bms/src/main/java/com/zhang/bms/ui/PersonalCenterActivity.java
new file mode 100644
index 0000000..277ee5e
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/PersonalCenterActivity.java
@@ -0,0 +1,128 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.zhang.bms.R;
+import com.zhang.bms.model.SqTipsDialog;
+
+public class PersonalCenterActivity extends AppCompatActivity implements View.OnClickListener {
+ private LinearLayout favorite;
+ private LinearLayout book;
+ private LinearLayout borrow;
+ private RelativeLayout exit;
+ private RelativeLayout change;
+ private RelativeLayout manage;
+ private TextView nologin;
+ private TextView username;
+ private TextView role;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_personal_center);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ //根据当前登录用户的用户组来决定”管理中心“按钮是否可见
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ if (sharedPreferences.getString("role","-1").equals("USER")){
+ manage.setVisibility(View.GONE);
+ nologin.setVisibility(View.GONE);
+ role.setText("普通用户");
+ }else if (sharedPreferences.getString("role","-1").equals("MANAGERS")){
+ nologin.setVisibility(View.GONE);
+ role.setText("管理员");
+ }
+ username.setText(sharedPreferences.getString("username","null"));
+ if (username.getText().equals("admin")){
+ change.setVisibility(View.GONE);
+ role.setText("超级管理员");
+ }
+ }
+
+ private void InitView(){
+ exit = findViewById(R.id.exit_account);
+ exit.setOnClickListener(this);
+ manage = findViewById(R.id.manage_index);
+ manage.setOnClickListener(this);
+ nologin = findViewById(R.id.tv_nologin);
+ username = findViewById(R.id.center_username);
+ role = findViewById(R.id.center_role);
+ change = findViewById(R.id.changepassword);
+ change.setOnClickListener(this);
+ book = findViewById(R.id.goto_book);
+ book.setOnClickListener(this);
+ favorite = findViewById(R.id.favorite);
+ favorite.setOnClickListener(this);
+ borrow = findViewById(R.id.borrow);
+ borrow.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.borrow:
+ Intent borrow = new Intent(this,ShowBorrowActivity.class);
+ startActivity(borrow);
+ break;
+ case R.id.favorite:
+ Intent favorite = new Intent(this,FavoriteActivity.class);
+ startActivity(favorite);
+ break;
+ case R.id.goto_book:
+ Intent goto_book = new Intent(PersonalCenterActivity.this,ShowBooksActivity.class);
+ startActivity(goto_book);
+ break;
+ case R.id.changepassword:
+ Intent intent4 = new Intent(PersonalCenterActivity.this,ChangePasswordActivity.class);
+ startActivity(intent4);
+ break;
+ case R.id.iv_back:
+ Intent intent3 = new Intent(PersonalCenterActivity.this,ShowBooksActivity.class);
+ startActivity(intent3);
+ break;
+ case R.id.manage_index:
+ Intent intent2 = new Intent(PersonalCenterActivity.this,ManageIndexActivity.class);
+ startActivity(intent2);
+ break;
+ case R.id.exit_account:
+ final SqTipsDialog sqTipsDialog = new SqTipsDialog(this);
+ sqTipsDialog.setTitle("提示");
+ sqTipsDialog.setMsg("确认退出登录")
+ .setCancelable(true);
+ sqTipsDialog.setOnCanlceListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ sqTipsDialog.dismiss();
+ }
+ });
+ sqTipsDialog.setOnSureListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.clear();
+ editor.commit();
+ Intent intent1 = new Intent(PersonalCenterActivity.this,LoginActivity.class);
+ startActivity(intent1);
+ }
+ });
+ sqTipsDialog.show();
+ }
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/RegisterActivity.java b/bms/src/main/java/com/zhang/bms/ui/RegisterActivity.java
new file mode 100644
index 0000000..2aa7177
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/RegisterActivity.java
@@ -0,0 +1,130 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.control.UserTableHelper;
+import com.zhang.bms.model.SqTipsDialog;
+import com.zhang.bms.model.simpleArrayAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {
+ private Button register;
+ private EditText username;
+ private EditText password;
+ private EditText repassword;
+ private Spinner passlock;
+ private EditText passkey;
+ private TextView goto_login;
+ final DBHelper dbHelper = new DBHelper(RegisterActivity.this,"bms",null,1);
+ UserTableHelper userTableHelper = new UserTableHelper();
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_register);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ List data_list = new ArrayList();
+ data_list.add("您目前的姓名是?");
+ data_list.add("您配偶的生日是?");
+ data_list.add("您的学号(或工号)是?");
+ data_list.add("您母亲的生日是?");
+ data_list.add("您高中班主任的名字是?");
+ data_list.add("您父亲的姓名是?");
+ data_list.add("您小学班主任的名字是?");
+ data_list.add("您父亲的生日是?");
+ data_list.add("您配偶的姓名是?");
+ data_list.add("您初中班主任的名字是?");
+ data_list.add("您最熟悉的童年好友名字是?");
+ data_list.add("您最熟悉的学校宿舍舍友名字是?");
+ data_list.add("对您影响最大的人名字是?");
+ data_list.add("请选择密保问题(非必选)");
+ simpleArrayAdapter arrayAdapter = new simpleArrayAdapter<>(this,R.layout.support_simple_spinner_dropdown_item,data_list);
+ arrayAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
+ passlock.setAdapter(arrayAdapter);
+ passlock.setSelection(data_list.size()-1,true);
+ }
+
+ private void InitView(){
+ register = findViewById(R.id.regist_btn_register);
+ register.setOnClickListener(this);
+ username = findViewById(R.id.regist_username);
+ password = findViewById(R.id.regist_password);
+ repassword = findViewById(R.id.regist_repassword);
+ passkey = findViewById(R.id.regist_key);
+ goto_login = findViewById(R.id.register_goto_login);
+ goto_login.setOnClickListener(this);
+ passlock = findViewById(R.id.spinner_passlock);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.regist_btn_register:
+ final SqTipsDialog sqTipsDialog = new SqTipsDialog(this);
+ sqTipsDialog.setCancelable(true);
+ sqTipsDialog.setCancelbtnVisible(false);
+ sqTipsDialog.setSurebtnVisible(false);
+ sqTipsDialog.setTile("提示");
+ if (!username.getText().toString().isEmpty() && !password.getText().toString().isEmpty()
+ && !repassword.getText().toString().isEmpty()){
+ String str_password = password.getText().toString();
+ String str_repassword = repassword.getText().toString();
+ if (username.getText().toString().length()>=2){
+ if (str_password.equals(str_repassword)){
+ String str_username = username.getText().toString();
+ boolean usernamelock = userTableHelper.CheckUsername(dbHelper,str_username);
+ if (usernamelock == true){
+ String str_passlock = passlock.getSelectedItem().toString();
+ String str_passkey = passkey.getText().toString();
+ userTableHelper.Register(dbHelper,str_username,str_password,str_passlock,str_passkey,"USER","");
+ Toast.makeText(RegisterActivity.this,"注册成功",Toast.LENGTH_SHORT).show();
+ Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
+ startActivity(intent);
+ }else {
+ sqTipsDialog.setMsg("用户名已存在!");
+ sqTipsDialog.show();
+ }
+ }else {
+ sqTipsDialog.setMsg("两次输入密码不一致");
+ sqTipsDialog.show();
+ }
+ }else {
+ sqTipsDialog.setMsg("用户名不得少于两个字符");
+ sqTipsDialog.show();
+ }
+ }else {
+ sqTipsDialog.setMsg("信息填写不完整。");
+ sqTipsDialog.show();
+ }
+ break;
+ case R.id.register_goto_login:
+ Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
+ startActivity(intent);
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ //super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
+ startActivity(intent);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/ReturnSuccessActivity.java b/bms/src/main/java/com/zhang/bms/ui/ReturnSuccessActivity.java
new file mode 100644
index 0000000..d8b1138
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/ReturnSuccessActivity.java
@@ -0,0 +1,43 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ImageView;
+
+import com.zhang.bms.R;
+
+public class ReturnSuccessActivity extends AppCompatActivity implements View.OnClickListener {
+ private ImageView back;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_return_success);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ }
+ private void InitView(){
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.iv_back:
+ Intent back = new Intent(this,BorrowManageActivity.class);
+ startActivity(back);
+ break;
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent intent = new Intent(this,BorrowManageActivity.class);
+ startActivity(intent);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/SearchResultActivity.java b/bms/src/main/java/com/zhang/bms/ui/SearchResultActivity.java
new file mode 100644
index 0000000..9e98905
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/SearchResultActivity.java
@@ -0,0 +1,102 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Build;
+import android.os.Bundle;
+import android.text.SpannableString;
+import android.text.SpannableStringBuilder;
+import android.text.Spanned;
+import android.text.style.ForegroundColorSpan;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.GridView;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BookTableHelper;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.model.Book;
+import com.zhang.bms.model.BookGridAdapter;
+
+import java.util.ArrayList;
+
+public class SearchResultActivity extends AppCompatActivity implements View.OnClickListener {
+ private ArrayList bookArrayList;
+ private GridView gridView;
+ private String searcher;
+ private ImageView empty;
+ private TextView search_tips;
+ private ImageView back;
+ final DBHelper dbHelper= new DBHelper(this,"bms",null,1);
+ private BookTableHelper bookTableHelper = new BookTableHelper();
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_search_result);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ Intent intent = getIntent();
+ searcher = intent.getStringExtra("searcher");
+ if (!searcher.equals("")){
+ InitBookGrid();
+ }else {
+ empty.setImageResource(R.drawable.ill_nonedata);
+ empty.setVisibility(View.VISIBLE);
+ }
+ SpannableString spannableString = new SpannableString(searcher);
+ spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#278b69")),0,spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ search_tips.append(spannableString);
+ }
+ private void InitView(){
+ gridView = findViewById(R.id.book_gridview);
+ search_tips = findViewById(R.id.search_tips);
+ empty = findViewById(R.id.empty_image);
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ }
+ private void InitBookGrid(){
+ bookArrayList = bookTableHelper.SearchBook(dbHelper,searcher);
+ BookGridAdapter adapter = new BookGridAdapter(this,bookArrayList);
+ GridView book = findViewById(R.id.book_gridview);
+ book.setAdapter(adapter);
+ book.setOnItemClickListener(new BookOnClickListener());
+ if (bookArrayList.isEmpty()){
+ empty.setImageResource(R.drawable.ill_nonedata);
+ empty.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.iv_back:
+ Intent intent = new Intent(SearchResultActivity.this,ShowBooksActivity.class);
+ startActivity(intent);
+ break;
+ }
+ }
+ private class BookOnClickListener implements AdapterView.OnItemClickListener{
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ String bid = bookArrayList.get(position).getId();
+ Intent intent = new Intent(SearchResultActivity.this,BookActivity.class);
+ intent.putExtra("bid",bid);
+ intent.putExtra("startActivityCode","search");
+ startActivity(intent);
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ //注释掉这行,back键不退出activity
+ Intent intent = new Intent(SearchResultActivity.this,ShowBooksActivity.class);
+ startActivity(intent);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/ShowBooksActivity.java b/bms/src/main/java/com/zhang/bms/ui/ShowBooksActivity.java
new file mode 100644
index 0000000..1caf418
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/ShowBooksActivity.java
@@ -0,0 +1,90 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.GridView;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.Toast;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BookTableHelper;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.model.Book;
+import com.zhang.bms.model.BookGridAdapter;
+
+import java.util.ArrayList;
+
+public class ShowBooksActivity extends AppCompatActivity implements View.OnClickListener {
+ private LinearLayout me;
+ private ArrayList bookArrayList;
+ private GridView gridView;
+ private EditText search_edit;
+ private Button search_btn;
+ final DBHelper dbHelper= new DBHelper(this,"bms",null,1);
+ private BookTableHelper bookTableHelper = new BookTableHelper();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_show_books);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ InitBookGrid();
+ }
+ private void InitView(){
+ gridView = findViewById(R.id.book_gridview);
+ search_edit = findViewById(R.id.search_edit);
+ search_btn = findViewById(R.id.search_btn);
+ search_btn.setOnClickListener(this);
+ me = findViewById(R.id.goto_me);
+ me.setOnClickListener(this);
+ }
+ private void InitBookGrid(){
+ bookArrayList = bookTableHelper.BookGrid(dbHelper);
+ BookGridAdapter adapter = new BookGridAdapter(this,bookArrayList);
+ GridView book = findViewById(R.id.book_gridview);
+ book.setAdapter(adapter);
+ book.setOnItemClickListener(new BookOnClickListener());
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.goto_me:
+ Intent goto_me = new Intent(ShowBooksActivity.this,PersonalCenterActivity.class);
+ startActivity(goto_me);
+ break;
+ case R.id.search_btn:
+ String searcher = search_edit.getText().toString();
+ Intent s = new Intent(ShowBooksActivity.this,SearchResultActivity.class);
+ s.putExtra("searcher",searcher);
+ startActivity(s);
+ break;
+ }
+ }
+ private class BookOnClickListener implements AdapterView.OnItemClickListener{
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ String bid = bookArrayList.get(position).getId();
+ Intent intent = new Intent(ShowBooksActivity.this,BookActivity.class);
+ intent.putExtra("bid",bid);
+ intent.putExtra("startActivityCode","show");
+ startActivity(intent);
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ //super.onBackPressed();//注释掉这行,back键不退出activity
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/ShowBorrowActivity.java b/bms/src/main/java/com/zhang/bms/ui/ShowBorrowActivity.java
new file mode 100644
index 0000000..6c9d4ff
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/ShowBorrowActivity.java
@@ -0,0 +1,69 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.GridView;
+import android.widget.ImageView;
+import android.widget.ListView;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.BorrowTableHelper;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.model.BookGridAdapter;
+import com.zhang.bms.model.Borrow;
+import com.zhang.bms.model.BorrowListAdapter;
+import com.zhang.bms.model.StringTrans;
+
+import java.util.ArrayList;
+
+public class ShowBorrowActivity extends AppCompatActivity implements View.OnClickListener {
+ private ImageView isnull;
+ private ImageView back;
+ private ListView listView;
+ final DBHelper dbHelper= new DBHelper(this,"bms",null,1);
+ private BorrowTableHelper borrowTableHelper = new BorrowTableHelper();
+ private String uid;
+ private ArrayList arrayList;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_show_borrow);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ SharedPreferences sharedPreferences = getSharedPreferences("account",MODE_PRIVATE);
+ uid = sharedPreferences.getString("uid","-1");
+ InitView();
+ InitList();
+ }
+ private void InitView(){
+ listView = findViewById(R.id.borrow_list);
+ back = findViewById(R.id.iv_back);
+ back.setOnClickListener(this);
+ isnull = findViewById(R.id.isnull);
+ }
+ private void InitList(){
+ arrayList = borrowTableHelper.ShowBorrow(dbHelper,uid);
+ if (!arrayList.isEmpty()){
+ isnull.setVisibility(View.INVISIBLE);
+ }
+ BorrowListAdapter adapter = new BorrowListAdapter(this,arrayList);
+ ListView book = findViewById(R.id.borrow_list);
+ book.setAdapter(adapter);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.iv_back:
+ Intent intent = new Intent(this,PersonalCenterActivity.class);
+ startActivity(intent);
+ break;
+ }
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/UserManageActivity.java b/bms/src/main/java/com/zhang/bms/ui/UserManageActivity.java
new file mode 100644
index 0000000..df55f52
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/UserManageActivity.java
@@ -0,0 +1,94 @@
+package com.zhang.bms.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.Toast;
+
+import com.zhang.bms.R;
+import com.zhang.bms.control.DBHelper;
+import com.zhang.bms.control.UserTableHelper;
+import com.zhang.bms.model.User;
+import com.zhang.bms.model.UserListAdapter;
+
+import java.util.ArrayList;
+
+public class UserManageActivity extends AppCompatActivity implements View.OnClickListener {
+ private LinearLayout back;
+ private LinearLayout bm;
+ private LinearLayout bom;
+ private ArrayList userlist;
+ private ListView listView;
+ final DBHelper dbHelper= new DBHelper(UserManageActivity.this,"bms",null,1);
+ private UserTableHelper userTableHelper = new UserTableHelper();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_manage);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+ InitView();
+ InitUserList();
+ }
+
+ public void InitView(){
+ listView = findViewById(R.id.userlist_listview);
+ back = findViewById(R.id.back);
+ back.setOnClickListener(this);
+ bm = findViewById(R.id.goto_bm);
+ bm.setOnClickListener(this);
+ bom = findViewById(R.id.goto_bom);
+ bom.setOnClickListener(this);
+ }
+
+ private void InitUserList(){
+ userlist = userTableHelper.UserList(dbHelper);
+ UserListAdapter adapter = new UserListAdapter(this,userlist);
+ ListView user = findViewById(R.id.userlist_listview);
+ user.setAdapter(adapter);
+ user.setOnItemClickListener(new UserOnClickListener());
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.goto_bom:
+ Intent goto_bom = new Intent(this,BorrowManageActivity.class);
+ startActivity(goto_bom);
+ break;
+ case R.id.goto_bm:
+ Intent goto_bm = new Intent(this,BookManageActivity.class);
+ startActivity(goto_bm);
+ break;
+ case R.id.back:
+ Intent back = new Intent(this,PersonalCenterActivity.class);
+ startActivity(back);
+ break;
+ }
+ }
+
+ private class UserOnClickListener implements AdapterView.OnItemClickListener {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ String uid = userlist.get(position).getId();
+ Intent intent = new Intent(UserManageActivity.this,ManageUserDetailsActivity.class);
+ intent.putExtra("uid",uid);
+ startActivity(intent);
+ }
+ }
+ @Override
+ public void onBackPressed() {
+ //super.onBackPressed();//注释掉这行,back键不退出activity
+ Intent intent = new Intent(UserManageActivity.this,ManageIndexActivity.class);
+ startActivity(intent);
+ }
+}
\ No newline at end of file
diff --git a/bms/src/main/java/com/zhang/bms/ui/ui.plantuml b/bms/src/main/java/com/zhang/bms/ui/ui.plantuml
new file mode 100644
index 0000000..eb8b97b
--- /dev/null
+++ b/bms/src/main/java/com/zhang/bms/ui/ui.plantuml
@@ -0,0 +1,536 @@
+@startuml
+
+title __UI's Class Diagram__\n
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.AddBookActivity {
+ - ISBN : EditText
+ - add : Button
+ - author : EditText
+ - back : ImageView
+ - bookname : EditText
+ - category : Spinner
+ - inventory : EditText
+ - page : EditText
+ - press : EditText
+ - publicationtime : EditText
+ - synopsis : EditText
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.BookActivity {
+ - author : TextView
+ - back : ImageView
+ - bid : String
+ - bookArrayList : ArrayList
+ - bookname : TextView
+ - borrow : Button
+ - borrownull : Button
+ - category : TextView
+ - collect : Button
+ - collected : Button
+ - collections : String
+ - inventory : TextView
+ - page : TextView
+ - press : TextView
+ - publicationtime : TextView
+ - synopsis : TextView
+ - uid : String
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - Back()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.BookManageActivity {
+ - add : ImageView
+ - back : LinearLayout
+ - bom : LinearLayout
+ - booklist : ArrayList
+ - listView : ListView
+ - um : LinearLayout
+ + InitView()
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitBookList()
+ }
+ }
+ }
+
+
+
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.BorrowManageActivity {
+ - arrayList : ArrayList
+ - back : LinearLayout
+ - bm : LinearLayout
+ - list : ListView
+ - um : LinearLayout
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitList()
+ - InitView()
+ }
+ }
+ }
+
+
+
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.BorrowSuccessActivity {
+ - bid : String
+ - code : String
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.ChangePasswordActivity {
+ - back : ImageView
+ - commit : Button
+ - forget : TextView
+ - new_pass : EditText
+ - new_pass2 : EditText
+ - original_pass : EditText
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.Change_synopsisActivity {
+ - back : ImageView
+ - save : TextView
+ - synopsis : EditText
+ + onClick()
+ # onCreate()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.FavoriteActivity {
+ - back : ImageView
+ - bookArrayList : ArrayList
+ - collections : String
+ - isnull : ImageView
+ - list : GridView
+ - uid : String
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitList()
+ - InitView()
+ }
+ }
+ }
+
+
+
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.ForgetPassActivity {
+ - back : ImageView
+ - commit : Button
+ - newpass : EditText
+ - passkey : EditText
+ - passlock : TextView
+ - renewpass : EditText
+ - update_username : String
+ + onClick()
+ # onCreate()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.InputUsernameActivity {
+ - back : ImageView
+ - commit : Button
+ - username : EditText
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.LoginActivity {
+ - forget : TextView
+ - goto_regist : TextView
+ - login : Button
+ - password : EditText
+ - save : CheckBox
+ - userArrayList : ArrayList
+ - username : EditText
+ + onClick()
+ # onCreate()
+ - InitAccount()
+ - InitView()
+ - SaveUP()
+ - SaveUP()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.ManageBookDetailsActivity {
+ - ISBN : EditText
+ - author : EditText
+ - back : ImageView
+ - bookArrayList : ArrayList
+ - bookname : EditText
+ - category : EditText
+ - change_synopsis : RelativeLayout
+ - delete : Button
+ - get_bid : String
+ - inventory : EditText
+ - o_ISBN : String
+ - o_author : String
+ - o_bookname : String
+ - o_category : String
+ - o_inventory : String
+ - o_page : String
+ - o_press : String
+ - o_publicationtime : String
+ - o_synopsis : String
+ - page : EditText
+ - press : EditText
+ - publicationtime : EditText
+ - save : Button
+ - synopsis : TextView
+ + onBackPressed()
+ + onClick()
+ # onActivityResult()
+ # onCreate()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.ManageIndexActivity {
+ - add_default : Button
+ - back : LinearLayout
+ - bm : LinearLayout
+ - bom : LinearLayout
+ - iv_back : ImageView
+ - um : LinearLayout
+ + InitView()
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.ManageUserDetailsActivity {
+ - back : ImageView
+ - delete : Button
+ - id : TextView
+ - newpass_tips : TextView
+ - newrole_tips : TextView
+ - passkey : TextView
+ - passlock : TextView
+ - role : TextView
+ - save : Button
+ - uid : String
+ - uppass : Button
+ - uprole : RelativeLayout
+ - userArrayList : ArrayList
+ - username : TextView
+ + UpdatePasswordDialog()
+ + UpdateRoleDialog()
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.PersonalCenterActivity {
+ - book : LinearLayout
+ - borrow : LinearLayout
+ - change : RelativeLayout
+ - exit : RelativeLayout
+ - favorite : LinearLayout
+ - manage : RelativeLayout
+ - nologin : TextView
+ - role : TextView
+ - username : TextView
+ + onClick()
+ # onCreate()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.RegisterActivity {
+ - goto_login : TextView
+ - passkey : EditText
+ - passlock : Spinner
+ - password : EditText
+ - register : Button
+ - repassword : EditText
+ - username : EditText
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.ReturnSuccessActivity {
+ - back : ImageView
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.SearchResultActivity {
+ - back : ImageView
+ - bookArrayList : ArrayList
+ - empty : ImageView
+ - gridView : GridView
+ - search_tips : TextView
+ - searcher : String
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitBookGrid()
+ - InitView()
+ }
+ }
+ }
+
+
+
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.ShowBooksActivity {
+ - bookArrayList : ArrayList
+ - gridView : GridView
+ - me : LinearLayout
+ - search_btn : Button
+ - search_edit : EditText
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitBookGrid()
+ - InitView()
+ }
+ }
+ }
+
+
+
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.ShowBorrowActivity {
+ - arrayList : ArrayList
+ - back : ImageView
+ - isnull : ImageView
+ - listView : ListView
+ - uid : String
+ + onClick()
+ # onCreate()
+ - InitList()
+ - InitView()
+ }
+ }
+ }
+
+
+ namespace com.zhang.bms {
+ namespace ui {
+ class com.zhang.bms.ui.UserManageActivity {
+ - back : LinearLayout
+ - bm : LinearLayout
+ - bom : LinearLayout
+ - listView : ListView
+ - userlist : ArrayList
+ + InitView()
+ + onBackPressed()
+ + onClick()
+ # onCreate()
+ - InitUserList()
+ }
+ }
+ }
+
+
+
+
+
+ com.zhang.bms.ui.AddBookActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.AddBookActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.AddBookActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.BookActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.BookActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.BookActivity o-- com.zhang.bms.control.BookTableHelper : bookTableHelper
+ com.zhang.bms.ui.BookActivity o-- com.zhang.bms.control.BorrowTableHelper : borrowTableHelper
+ com.zhang.bms.ui.BookActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.BookActivity o-- com.zhang.bms.control.UserTableHelper : userTableHelper
+ com.zhang.bms.ui.BookManageActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.BookManageActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.BookManageActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.BookManageActivity o-- com.zhang.bms.control.BookTableHelper : bookTableHelper
+ com.zhang.bms.ui.BookManageActivity +-down- com.zhang.bms.ui.BookManageActivity.BookOnClickListener
+ com.zhang.bms.ui.BookManageActivity.BookOnClickListener .up.|> android.widget.AdapterView.OnItemClickListener
+ com.zhang.bms.ui.BorrowManageActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.BorrowManageActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.BorrowManageActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.BorrowManageActivity o-- com.zhang.bms.control.BookTableHelper : bookTableHelper
+ com.zhang.bms.ui.BorrowManageActivity o-- com.zhang.bms.control.BorrowTableHelper : borrowTableHelper
+ com.zhang.bms.ui.BorrowManageActivity +-down- com.zhang.bms.ui.BorrowManageActivity.BackBook
+ com.zhang.bms.ui.BorrowManageActivity.BackBook .up.|> android.widget.AdapterView.OnItemClickListener
+ com.zhang.bms.ui.BorrowSuccessActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.BorrowSuccessActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.ChangePasswordActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.ChangePasswordActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.ChangePasswordActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.ChangePasswordActivity o-- com.zhang.bms.control.UserTableHelper : userTableHelper
+ com.zhang.bms.ui.Change_synopsisActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.Change_synopsisActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.FavoriteActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.FavoriteActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.FavoriteActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.FavoriteActivity o-- com.zhang.bms.control.UserTableHelper : userTableHelper
+ com.zhang.bms.ui.FavoriteActivity o-- com.zhang.bms.control.BookTableHelper : bookTableHelper
+ com.zhang.bms.ui.FavoriteActivity +-down- com.zhang.bms.ui.FavoriteActivity.BookOnClickListener
+ com.zhang.bms.ui.FavoriteActivity.BookOnClickListener .up.|> android.widget.AdapterView.OnItemClickListener
+ com.zhang.bms.ui.ForgetPassActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.ForgetPassActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.ForgetPassActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.ForgetPassActivity o-- com.zhang.bms.control.UserTableHelper : userTableHelper
+ com.zhang.bms.ui.InputUsernameActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.InputUsernameActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.LoginActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.LoginActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.LoginActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.LoginActivity o-- com.zhang.bms.control.UserTableHelper : userTableHelper
+ com.zhang.bms.ui.ManageBookDetailsActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.ManageBookDetailsActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.ManageBookDetailsActivity o-- com.zhang.bms.control.BookTableHelper : bookTableHelper
+ com.zhang.bms.ui.ManageBookDetailsActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.ManageIndexActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.ManageIndexActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.ManageIndexActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.ManageUserDetailsActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.ManageUserDetailsActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.ManageUserDetailsActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.ManageUserDetailsActivity o-- com.zhang.bms.control.UserTableHelper : userTableHelper
+ com.zhang.bms.ui.PersonalCenterActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.PersonalCenterActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.RegisterActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.RegisterActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.RegisterActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.RegisterActivity o-- com.zhang.bms.control.UserTableHelper : userTableHelper
+ com.zhang.bms.ui.ReturnSuccessActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.ReturnSuccessActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.SearchResultActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.SearchResultActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.SearchResultActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.SearchResultActivity o-- com.zhang.bms.control.BookTableHelper : bookTableHelper
+ com.zhang.bms.ui.SearchResultActivity +-down- com.zhang.bms.ui.SearchResultActivity.BookOnClickListener
+ com.zhang.bms.ui.SearchResultActivity.BookOnClickListener .up.|> android.widget.AdapterView.OnItemClickListener
+ com.zhang.bms.ui.ShowBooksActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.ShowBooksActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.ShowBooksActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.ShowBooksActivity o-- com.zhang.bms.control.BookTableHelper : bookTableHelper
+ com.zhang.bms.ui.ShowBooksActivity +-down- com.zhang.bms.ui.ShowBooksActivity.BookOnClickListener
+ com.zhang.bms.ui.ShowBooksActivity.BookOnClickListener .up.|> android.widget.AdapterView.OnItemClickListener
+ com.zhang.bms.ui.ShowBorrowActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.ShowBorrowActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.ShowBorrowActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.ShowBorrowActivity o-- com.zhang.bms.control.BorrowTableHelper : borrowTableHelper
+ com.zhang.bms.ui.UserManageActivity .up.|> android.view.View.OnClickListener
+ com.zhang.bms.ui.UserManageActivity -up-|> androidx.appcompat.app.AppCompatActivity
+ com.zhang.bms.ui.UserManageActivity o-- com.zhang.bms.control.DBHelper : dbHelper
+ com.zhang.bms.ui.UserManageActivity o-- com.zhang.bms.control.UserTableHelper : userTableHelper
+ com.zhang.bms.ui.UserManageActivity +-down- com.zhang.bms.ui.UserManageActivity.UserOnClickListener
+ com.zhang.bms.ui.UserManageActivity.UserOnClickListener .up.|> android.widget.AdapterView.OnItemClickListener
+
+
+right footer
+
+
+PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
+For more information about this tool, please contact philippe.mesmeur@gmail.com
+endfooter
+
+@enduml
diff --git a/bms/src/main/res/drawable-v24/back.png b/bms/src/main/res/drawable-v24/back.png
new file mode 100644
index 0000000..f14121a
Binary files /dev/null and b/bms/src/main/res/drawable-v24/back.png differ
diff --git a/bms/src/main/res/drawable-v24/back2.png b/bms/src/main/res/drawable-v24/back2.png
new file mode 100644
index 0000000..ca44d3a
Binary files /dev/null and b/bms/src/main/res/drawable-v24/back2.png differ
diff --git a/bms/src/main/res/drawable-v24/ban_change.png b/bms/src/main/res/drawable-v24/ban_change.png
new file mode 100644
index 0000000..ea92b47
Binary files /dev/null and b/bms/src/main/res/drawable-v24/ban_change.png differ
diff --git a/bms/src/main/res/drawable-v24/ban_edit.png b/bms/src/main/res/drawable-v24/ban_edit.png
new file mode 100644
index 0000000..9790824
Binary files /dev/null and b/bms/src/main/res/drawable-v24/ban_edit.png differ
diff --git a/bms/src/main/res/drawable-v24/bg_card1.xml b/bms/src/main/res/drawable-v24/bg_card1.xml
new file mode 100644
index 0000000..8a82ae3
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/bg_card1.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/bg_card2.xml b/bms/src/main/res/drawable-v24/bg_card2.xml
new file mode 100644
index 0000000..5e3e15b
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/bg_card2.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/bms_logo.png b/bms/src/main/res/drawable-v24/bms_logo.png
new file mode 100644
index 0000000..c1229b5
Binary files /dev/null and b/bms/src/main/res/drawable-v24/bms_logo.png differ
diff --git a/bms/src/main/res/drawable-v24/book_pic.jpg b/bms/src/main/res/drawable-v24/book_pic.jpg
new file mode 100644
index 0000000..a583769
Binary files /dev/null and b/bms/src/main/res/drawable-v24/book_pic.jpg differ
diff --git a/bms/src/main/res/drawable-v24/btn_collected_sq.xml b/bms/src/main/res/drawable-v24/btn_collected_sq.xml
new file mode 100644
index 0000000..67cc9b2
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/btn_collected_sq.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/btn_dialog_cancel_sq.xml b/bms/src/main/res/drawable-v24/btn_dialog_cancel_sq.xml
new file mode 100644
index 0000000..eae1acb
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/btn_dialog_cancel_sq.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/btn_sq_dialog_cancel_normal.xml b/bms/src/main/res/drawable-v24/btn_sq_dialog_cancel_normal.xml
new file mode 100644
index 0000000..e73c347
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/btn_sq_dialog_cancel_normal.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/btn_sq_dialog_cancel_press.xml b/bms/src/main/res/drawable-v24/btn_sq_dialog_cancel_press.xml
new file mode 100644
index 0000000..2d52665
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/btn_sq_dialog_cancel_press.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/change.png b/bms/src/main/res/drawable-v24/change.png
new file mode 100644
index 0000000..e8933bc
Binary files /dev/null and b/bms/src/main/res/drawable-v24/change.png differ
diff --git a/bms/src/main/res/drawable-v24/changed.png b/bms/src/main/res/drawable-v24/changed.png
new file mode 100644
index 0000000..3d18a92
Binary files /dev/null and b/bms/src/main/res/drawable-v24/changed.png differ
diff --git a/bms/src/main/res/drawable-v24/default_avatar.jpg b/bms/src/main/res/drawable-v24/default_avatar.jpg
new file mode 100644
index 0000000..330d595
Binary files /dev/null and b/bms/src/main/res/drawable-v24/default_avatar.jpg differ
diff --git a/bms/src/main/res/drawable-v24/edit.png b/bms/src/main/res/drawable-v24/edit.png
new file mode 100644
index 0000000..0e31b04
Binary files /dev/null and b/bms/src/main/res/drawable-v24/edit.png differ
diff --git a/bms/src/main/res/drawable-v24/edit_sq_none.xml b/bms/src/main/res/drawable-v24/edit_sq_none.xml
new file mode 100644
index 0000000..a5662ee
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/edit_sq_none.xml
@@ -0,0 +1,16 @@
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/funbar_collection.png b/bms/src/main/res/drawable-v24/funbar_collection.png
new file mode 100644
index 0000000..7df7e5a
Binary files /dev/null and b/bms/src/main/res/drawable-v24/funbar_collection.png differ
diff --git a/bms/src/main/res/drawable-v24/funbar_history.png b/bms/src/main/res/drawable-v24/funbar_history.png
new file mode 100644
index 0000000..a73aa3b
Binary files /dev/null and b/bms/src/main/res/drawable-v24/funbar_history.png differ
diff --git a/bms/src/main/res/drawable-v24/funbar_msg.png b/bms/src/main/res/drawable-v24/funbar_msg.png
new file mode 100644
index 0000000..8fbfd2e
Binary files /dev/null and b/bms/src/main/res/drawable-v24/funbar_msg.png differ
diff --git a/bms/src/main/res/drawable-v24/funbar_order.png b/bms/src/main/res/drawable-v24/funbar_order.png
new file mode 100644
index 0000000..26ba2c2
Binary files /dev/null and b/bms/src/main/res/drawable-v24/funbar_order.png differ
diff --git a/bms/src/main/res/drawable-v24/ic_launcher_foreground.xml b/bms/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/icon_add.png b/bms/src/main/res/drawable-v24/icon_add.png
new file mode 100644
index 0000000..bcf6fec
Binary files /dev/null and b/bms/src/main/res/drawable-v24/icon_add.png differ
diff --git a/bms/src/main/res/drawable-v24/icon_role.png b/bms/src/main/res/drawable-v24/icon_role.png
new file mode 100644
index 0000000..34d706d
Binary files /dev/null and b/bms/src/main/res/drawable-v24/icon_role.png differ
diff --git a/bms/src/main/res/drawable-v24/ill_mi.png b/bms/src/main/res/drawable-v24/ill_mi.png
new file mode 100644
index 0000000..7a1c369
Binary files /dev/null and b/bms/src/main/res/drawable-v24/ill_mi.png differ
diff --git a/bms/src/main/res/drawable-v24/ill_nonedata.png b/bms/src/main/res/drawable-v24/ill_nonedata.png
new file mode 100644
index 0000000..f6761b2
Binary files /dev/null and b/bms/src/main/res/drawable-v24/ill_nonedata.png differ
diff --git a/bms/src/main/res/drawable-v24/ill_null.png b/bms/src/main/res/drawable-v24/ill_null.png
new file mode 100644
index 0000000..7be81bd
Binary files /dev/null and b/bms/src/main/res/drawable-v24/ill_null.png differ
diff --git a/bms/src/main/res/drawable-v24/ill_success.png b/bms/src/main/res/drawable-v24/ill_success.png
new file mode 100644
index 0000000..dc70df1
Binary files /dev/null and b/bms/src/main/res/drawable-v24/ill_success.png differ
diff --git a/bms/src/main/res/drawable-v24/list_bar1.xml b/bms/src/main/res/drawable-v24/list_bar1.xml
new file mode 100644
index 0000000..f7e522c
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/list_bar1.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/list_bar2.xml b/bms/src/main/res/drawable-v24/list_bar2.xml
new file mode 100644
index 0000000..c1d6ad3
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/list_bar2.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/list_bar3.xml b/bms/src/main/res/drawable-v24/list_bar3.xml
new file mode 100644
index 0000000..dafbcee
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/list_bar3.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/list_item_style1.xml b/bms/src/main/res/drawable-v24/list_item_style1.xml
new file mode 100644
index 0000000..6ca36f0
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/list_item_style1.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/list_item_style2.xml b/bms/src/main/res/drawable-v24/list_item_style2.xml
new file mode 100644
index 0000000..3f86089
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/list_item_style2.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/mixkit_bg1.png b/bms/src/main/res/drawable-v24/mixkit_bg1.png
new file mode 100644
index 0000000..0744b3a
Binary files /dev/null and b/bms/src/main/res/drawable-v24/mixkit_bg1.png differ
diff --git a/bms/src/main/res/drawable-v24/mixkit_bg2.png b/bms/src/main/res/drawable-v24/mixkit_bg2.png
new file mode 100644
index 0000000..5c02876
Binary files /dev/null and b/bms/src/main/res/drawable-v24/mixkit_bg2.png differ
diff --git a/bms/src/main/res/drawable-v24/navbar_back.png b/bms/src/main/res/drawable-v24/navbar_back.png
new file mode 100644
index 0000000..9e0e5eb
Binary files /dev/null and b/bms/src/main/res/drawable-v24/navbar_back.png differ
diff --git a/bms/src/main/res/drawable-v24/navbar_bm.png b/bms/src/main/res/drawable-v24/navbar_bm.png
new file mode 100644
index 0000000..49d99f3
Binary files /dev/null and b/bms/src/main/res/drawable-v24/navbar_bm.png differ
diff --git a/bms/src/main/res/drawable-v24/navbar_bm_press.png b/bms/src/main/res/drawable-v24/navbar_bm_press.png
new file mode 100644
index 0000000..dc21bd2
Binary files /dev/null and b/bms/src/main/res/drawable-v24/navbar_bm_press.png differ
diff --git a/bms/src/main/res/drawable-v24/navbar_book.png b/bms/src/main/res/drawable-v24/navbar_book.png
new file mode 100644
index 0000000..3871808
Binary files /dev/null and b/bms/src/main/res/drawable-v24/navbar_book.png differ
diff --git a/bms/src/main/res/drawable-v24/navbar_book_press.png b/bms/src/main/res/drawable-v24/navbar_book_press.png
new file mode 100644
index 0000000..6c51bb3
Binary files /dev/null and b/bms/src/main/res/drawable-v24/navbar_book_press.png differ
diff --git a/bms/src/main/res/drawable-v24/navbar_borrow.png b/bms/src/main/res/drawable-v24/navbar_borrow.png
new file mode 100644
index 0000000..ace2402
Binary files /dev/null and b/bms/src/main/res/drawable-v24/navbar_borrow.png differ
diff --git a/bms/src/main/res/drawable-v24/navbar_borrow_press.png b/bms/src/main/res/drawable-v24/navbar_borrow_press.png
new file mode 100644
index 0000000..5c1d7ea
Binary files /dev/null and b/bms/src/main/res/drawable-v24/navbar_borrow_press.png differ
diff --git a/bms/src/main/res/drawable-v24/navbar_me.png b/bms/src/main/res/drawable-v24/navbar_me.png
new file mode 100644
index 0000000..f16af7d
Binary files /dev/null and b/bms/src/main/res/drawable-v24/navbar_me.png differ
diff --git a/bms/src/main/res/drawable-v24/navbar_me_press.png b/bms/src/main/res/drawable-v24/navbar_me_press.png
new file mode 100644
index 0000000..382d521
Binary files /dev/null and b/bms/src/main/res/drawable-v24/navbar_me_press.png differ
diff --git a/bms/src/main/res/drawable-v24/navbar_um.png b/bms/src/main/res/drawable-v24/navbar_um.png
new file mode 100644
index 0000000..3244ed9
Binary files /dev/null and b/bms/src/main/res/drawable-v24/navbar_um.png differ
diff --git a/bms/src/main/res/drawable-v24/navbar_um_press.png b/bms/src/main/res/drawable-v24/navbar_um_press.png
new file mode 100644
index 0000000..25cccc5
Binary files /dev/null and b/bms/src/main/res/drawable-v24/navbar_um_press.png differ
diff --git a/bms/src/main/res/drawable-v24/new_account.png b/bms/src/main/res/drawable-v24/new_account.png
new file mode 100644
index 0000000..ab5802f
Binary files /dev/null and b/bms/src/main/res/drawable-v24/new_account.png differ
diff --git a/bms/src/main/res/drawable-v24/new_password.png b/bms/src/main/res/drawable-v24/new_password.png
new file mode 100644
index 0000000..5454955
Binary files /dev/null and b/bms/src/main/res/drawable-v24/new_password.png differ
diff --git a/bms/src/main/res/drawable-v24/newstart.png b/bms/src/main/res/drawable-v24/newstart.png
new file mode 100644
index 0000000..53fb780
Binary files /dev/null and b/bms/src/main/res/drawable-v24/newstart.png differ
diff --git a/bms/src/main/res/drawable-v24/selfie.png b/bms/src/main/res/drawable-v24/selfie.png
new file mode 100644
index 0000000..52ae560
Binary files /dev/null and b/bms/src/main/res/drawable-v24/selfie.png differ
diff --git a/bms/src/main/res/drawable-v24/sq_back.png b/bms/src/main/res/drawable-v24/sq_back.png
new file mode 100644
index 0000000..939d890
Binary files /dev/null and b/bms/src/main/res/drawable-v24/sq_back.png differ
diff --git a/bms/src/main/res/drawable-v24/sq_back2.png b/bms/src/main/res/drawable-v24/sq_back2.png
new file mode 100644
index 0000000..4483d90
Binary files /dev/null and b/bms/src/main/res/drawable-v24/sq_back2.png differ
diff --git a/bms/src/main/res/drawable-v24/sq_check_normal.png b/bms/src/main/res/drawable-v24/sq_check_normal.png
new file mode 100644
index 0000000..6a4544f
Binary files /dev/null and b/bms/src/main/res/drawable-v24/sq_check_normal.png differ
diff --git a/bms/src/main/res/drawable-v24/sq_check_normal2.png b/bms/src/main/res/drawable-v24/sq_check_normal2.png
new file mode 100644
index 0000000..2bd84d0
Binary files /dev/null and b/bms/src/main/res/drawable-v24/sq_check_normal2.png differ
diff --git a/bms/src/main/res/drawable-v24/sq_check_press.png b/bms/src/main/res/drawable-v24/sq_check_press.png
new file mode 100644
index 0000000..8a9813c
Binary files /dev/null and b/bms/src/main/res/drawable-v24/sq_check_press.png differ
diff --git a/bms/src/main/res/drawable-v24/sq_dialog_bg.xml b/bms/src/main/res/drawable-v24/sq_dialog_bg.xml
new file mode 100644
index 0000000..1c2dd09
--- /dev/null
+++ b/bms/src/main/res/drawable-v24/sq_dialog_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable-v24/sq_goin.png b/bms/src/main/res/drawable-v24/sq_goin.png
new file mode 100644
index 0000000..e33d9ac
Binary files /dev/null and b/bms/src/main/res/drawable-v24/sq_goin.png differ
diff --git a/bms/src/main/res/drawable-v24/sq_spinner.png b/bms/src/main/res/drawable-v24/sq_spinner.png
new file mode 100644
index 0000000..a71a9dd
Binary files /dev/null and b/bms/src/main/res/drawable-v24/sq_spinner.png differ
diff --git a/bms/src/main/res/drawable-v24/sq_spinner_2.png b/bms/src/main/res/drawable-v24/sq_spinner_2.png
new file mode 100644
index 0000000..8a98069
Binary files /dev/null and b/bms/src/main/res/drawable-v24/sq_spinner_2.png differ
diff --git a/bms/src/main/res/drawable-v24/sq_spinner_3.png b/bms/src/main/res/drawable-v24/sq_spinner_3.png
new file mode 100644
index 0000000..e492180
Binary files /dev/null and b/bms/src/main/res/drawable-v24/sq_spinner_3.png differ
diff --git a/bms/src/main/res/drawable-v24/sq_spinner_icon.png b/bms/src/main/res/drawable-v24/sq_spinner_icon.png
new file mode 100644
index 0000000..9fa26b2
Binary files /dev/null and b/bms/src/main/res/drawable-v24/sq_spinner_icon.png differ
diff --git a/bms/src/main/res/drawable-v24/start.png b/bms/src/main/res/drawable-v24/start.png
new file mode 100644
index 0000000..5646b82
Binary files /dev/null and b/bms/src/main/res/drawable-v24/start.png differ
diff --git a/bms/src/main/res/drawable-v24/undraw_add.png b/bms/src/main/res/drawable-v24/undraw_add.png
new file mode 100644
index 0000000..4f30d5c
Binary files /dev/null and b/bms/src/main/res/drawable-v24/undraw_add.png differ
diff --git a/bms/src/main/res/drawable-v24/undraw_setup.jpg b/bms/src/main/res/drawable-v24/undraw_setup.jpg
new file mode 100644
index 0000000..675bce7
Binary files /dev/null and b/bms/src/main/res/drawable-v24/undraw_setup.jpg differ
diff --git a/bms/src/main/res/drawable/bg_card3.xml b/bms/src/main/res/drawable/bg_card3.xml
new file mode 100644
index 0000000..5e3e15b
--- /dev/null
+++ b/bms/src/main/res/drawable/bg_card3.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/bg_card4.xml b/bms/src/main/res/drawable/bg_card4.xml
new file mode 100644
index 0000000..9ffa046
--- /dev/null
+++ b/bms/src/main/res/drawable/bg_card4.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/bg_dialog_confirm.xml b/bms/src/main/res/drawable/bg_dialog_confirm.xml
new file mode 100644
index 0000000..ea84a53
--- /dev/null
+++ b/bms/src/main/res/drawable/bg_dialog_confirm.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/bg_login.jpg b/bms/src/main/res/drawable/bg_login.jpg
new file mode 100644
index 0000000..072e618
Binary files /dev/null and b/bms/src/main/res/drawable/bg_login.jpg differ
diff --git a/bms/src/main/res/drawable/bg_regist.png b/bms/src/main/res/drawable/bg_regist.png
new file mode 100644
index 0000000..45742d6
Binary files /dev/null and b/bms/src/main/res/drawable/bg_regist.png differ
diff --git a/bms/src/main/res/drawable/btn_normal1.xml b/bms/src/main/res/drawable/btn_normal1.xml
new file mode 100644
index 0000000..9c404d1
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_normal1.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_normal2.xml b/bms/src/main/res/drawable/btn_normal2.xml
new file mode 100644
index 0000000..dafbcee
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_normal2.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_normal3.xml b/bms/src/main/res/drawable/btn_normal3.xml
new file mode 100644
index 0000000..bc9dcd4
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_normal3.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_normal4.xml b/bms/src/main/res/drawable/btn_normal4.xml
new file mode 100644
index 0000000..a985179
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_normal4.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_press1.xml b/bms/src/main/res/drawable/btn_press1.xml
new file mode 100644
index 0000000..126cf02
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_press1.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_press2.xml b/bms/src/main/res/drawable/btn_press2.xml
new file mode 100644
index 0000000..6f06b03
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_press2.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_press3.xml b/bms/src/main/res/drawable/btn_press3.xml
new file mode 100644
index 0000000..e930af9
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_press3.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_sq.xml b/bms/src/main/res/drawable/btn_sq.xml
new file mode 100644
index 0000000..1a62e48
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_sq.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_sq_borrownull.xml b/bms/src/main/res/drawable/btn_sq_borrownull.xml
new file mode 100644
index 0000000..d815351
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_sq_borrownull.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_sq_normal.xml b/bms/src/main/res/drawable/btn_sq_normal.xml
new file mode 100644
index 0000000..fc31cbe
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_sq_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_sq_press.xml b/bms/src/main/res/drawable/btn_sq_press.xml
new file mode 100644
index 0000000..ece776e
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_sq_press.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_style1.xml b/bms/src/main/res/drawable/btn_style1.xml
new file mode 100644
index 0000000..2022031
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_style1.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_style2.xml b/bms/src/main/res/drawable/btn_style2.xml
new file mode 100644
index 0000000..c8aeca1
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_style2.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_style3.xml b/bms/src/main/res/drawable/btn_style3.xml
new file mode 100644
index 0000000..63955bb
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_style3.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/btn_style_card.xml b/bms/src/main/res/drawable/btn_style_card.xml
new file mode 100644
index 0000000..14bceeb
--- /dev/null
+++ b/bms/src/main/res/drawable/btn_style_card.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/checkbox_normal.png b/bms/src/main/res/drawable/checkbox_normal.png
new file mode 100644
index 0000000..22e8611
Binary files /dev/null and b/bms/src/main/res/drawable/checkbox_normal.png differ
diff --git a/bms/src/main/res/drawable/checkbox_press.png b/bms/src/main/res/drawable/checkbox_press.png
new file mode 100644
index 0000000..ec6c8ab
Binary files /dev/null and b/bms/src/main/res/drawable/checkbox_press.png differ
diff --git a/bms/src/main/res/drawable/checkbox_sq.xml b/bms/src/main/res/drawable/checkbox_sq.xml
new file mode 100644
index 0000000..0fc5cba
--- /dev/null
+++ b/bms/src/main/res/drawable/checkbox_sq.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/checkbox_style1.xml b/bms/src/main/res/drawable/checkbox_style1.xml
new file mode 100644
index 0000000..6f7189e
--- /dev/null
+++ b/bms/src/main/res/drawable/checkbox_style1.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/default_book100.jpg b/bms/src/main/res/drawable/default_book100.jpg
new file mode 100644
index 0000000..6d2c3ad
Binary files /dev/null and b/bms/src/main/res/drawable/default_book100.jpg differ
diff --git a/bms/src/main/res/drawable/edit_sq.xml b/bms/src/main/res/drawable/edit_sq.xml
new file mode 100644
index 0000000..ef81404
--- /dev/null
+++ b/bms/src/main/res/drawable/edit_sq.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/edit_sq_normal.xml b/bms/src/main/res/drawable/edit_sq_normal.xml
new file mode 100644
index 0000000..6297021
--- /dev/null
+++ b/bms/src/main/res/drawable/edit_sq_normal.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/edit_sq_press.xml b/bms/src/main/res/drawable/edit_sq_press.xml
new file mode 100644
index 0000000..913e2a5
--- /dev/null
+++ b/bms/src/main/res/drawable/edit_sq_press.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/edit_style1.xml b/bms/src/main/res/drawable/edit_style1.xml
new file mode 100644
index 0000000..88124f4
--- /dev/null
+++ b/bms/src/main/res/drawable/edit_style1.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/edit_style1_normal.xml b/bms/src/main/res/drawable/edit_style1_normal.xml
new file mode 100644
index 0000000..6d76567
--- /dev/null
+++ b/bms/src/main/res/drawable/edit_style1_normal.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/edit_style1_press.xml b/bms/src/main/res/drawable/edit_style1_press.xml
new file mode 100644
index 0000000..65cca6c
--- /dev/null
+++ b/bms/src/main/res/drawable/edit_style1_press.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/edit_style2_normal.xml b/bms/src/main/res/drawable/edit_style2_normal.xml
new file mode 100644
index 0000000..48a55d2
--- /dev/null
+++ b/bms/src/main/res/drawable/edit_style2_normal.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/i_account.png b/bms/src/main/res/drawable/i_account.png
new file mode 100644
index 0000000..a6faf78
Binary files /dev/null and b/bms/src/main/res/drawable/i_account.png differ
diff --git a/bms/src/main/res/drawable/i_back.png b/bms/src/main/res/drawable/i_back.png
new file mode 100644
index 0000000..fea0803
Binary files /dev/null and b/bms/src/main/res/drawable/i_back.png differ
diff --git a/bms/src/main/res/drawable/i_passkey.png b/bms/src/main/res/drawable/i_passkey.png
new file mode 100644
index 0000000..d6423ac
Binary files /dev/null and b/bms/src/main/res/drawable/i_passkey.png differ
diff --git a/bms/src/main/res/drawable/i_passkey_2.png b/bms/src/main/res/drawable/i_passkey_2.png
new file mode 100644
index 0000000..52b9715
Binary files /dev/null and b/bms/src/main/res/drawable/i_passkey_2.png differ
diff --git a/bms/src/main/res/drawable/i_passlock.png b/bms/src/main/res/drawable/i_passlock.png
new file mode 100644
index 0000000..719c7dd
Binary files /dev/null and b/bms/src/main/res/drawable/i_passlock.png differ
diff --git a/bms/src/main/res/drawable/i_passlock_2.png b/bms/src/main/res/drawable/i_passlock_2.png
new file mode 100644
index 0000000..d5e0b3d
Binary files /dev/null and b/bms/src/main/res/drawable/i_passlock_2.png differ
diff --git a/bms/src/main/res/drawable/i_password.png b/bms/src/main/res/drawable/i_password.png
new file mode 100644
index 0000000..a135fe4
Binary files /dev/null and b/bms/src/main/res/drawable/i_password.png differ
diff --git a/bms/src/main/res/drawable/i_username.png b/bms/src/main/res/drawable/i_username.png
new file mode 100644
index 0000000..563e969
Binary files /dev/null and b/bms/src/main/res/drawable/i_username.png differ
diff --git a/bms/src/main/res/drawable/ic_launcher_background.xml b/bms/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..ca3826a
--- /dev/null
+++ b/bms/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bms/src/main/res/drawable/icon_username.png b/bms/src/main/res/drawable/icon_username.png
new file mode 100644
index 0000000..86fddfc
Binary files /dev/null and b/bms/src/main/res/drawable/icon_username.png differ
diff --git a/bms/src/main/res/drawable/result_null.png b/bms/src/main/res/drawable/result_null.png
new file mode 100644
index 0000000..d8b2af2
Binary files /dev/null and b/bms/src/main/res/drawable/result_null.png differ
diff --git a/bms/src/main/res/drawable/spinner.png b/bms/src/main/res/drawable/spinner.png
new file mode 100644
index 0000000..7884823
Binary files /dev/null and b/bms/src/main/res/drawable/spinner.png differ
diff --git a/bms/src/main/res/drawable/spinner2.png b/bms/src/main/res/drawable/spinner2.png
new file mode 100644
index 0000000..fca911d
Binary files /dev/null and b/bms/src/main/res/drawable/spinner2.png differ
diff --git a/bms/src/main/res/drawable/spinner3.png b/bms/src/main/res/drawable/spinner3.png
new file mode 100644
index 0000000..da36b53
Binary files /dev/null and b/bms/src/main/res/drawable/spinner3.png differ
diff --git a/bms/src/main/res/drawable/spinner_style.xml b/bms/src/main/res/drawable/spinner_style.xml
new file mode 100644
index 0000000..df5d16c
--- /dev/null
+++ b/bms/src/main/res/drawable/spinner_style.xml
@@ -0,0 +1,20 @@
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/sq_search_back.xml b/bms/src/main/res/drawable/sq_search_back.xml
new file mode 100644
index 0000000..13b65af
--- /dev/null
+++ b/bms/src/main/res/drawable/sq_search_back.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/drawable/sq_spinner_style.xml b/bms/src/main/res/drawable/sq_spinner_style.xml
new file mode 100644
index 0000000..82539db
--- /dev/null
+++ b/bms/src/main/res/drawable/sq_spinner_style.xml
@@ -0,0 +1,20 @@
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_add_book.xml b/bms/src/main/res/layout/activity_add_book.xml
new file mode 100644
index 0000000..99a275c
--- /dev/null
+++ b/bms/src/main/res/layout/activity_add_book.xml
@@ -0,0 +1,333 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_book.xml b/bms/src/main/res/layout/activity_book.xml
new file mode 100644
index 0000000..78b369d
--- /dev/null
+++ b/bms/src/main/res/layout/activity_book.xml
@@ -0,0 +1,212 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_book_manage.xml b/bms/src/main/res/layout/activity_book_manage.xml
new file mode 100644
index 0000000..22906ff
--- /dev/null
+++ b/bms/src/main/res/layout/activity_book_manage.xml
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_borrow_manage.xml b/bms/src/main/res/layout/activity_borrow_manage.xml
new file mode 100644
index 0000000..c490b04
--- /dev/null
+++ b/bms/src/main/res/layout/activity_borrow_manage.xml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_borrow_success.xml b/bms/src/main/res/layout/activity_borrow_success.xml
new file mode 100644
index 0000000..e53f96d
--- /dev/null
+++ b/bms/src/main/res/layout/activity_borrow_success.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_change_password.xml b/bms/src/main/res/layout/activity_change_password.xml
new file mode 100644
index 0000000..14d9d09
--- /dev/null
+++ b/bms/src/main/res/layout/activity_change_password.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_change_synopsis.xml b/bms/src/main/res/layout/activity_change_synopsis.xml
new file mode 100644
index 0000000..3e925ba
--- /dev/null
+++ b/bms/src/main/res/layout/activity_change_synopsis.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_favorite.xml b/bms/src/main/res/layout/activity_favorite.xml
new file mode 100644
index 0000000..9ec1631
--- /dev/null
+++ b/bms/src/main/res/layout/activity_favorite.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_forget_pass.xml b/bms/src/main/res/layout/activity_forget_pass.xml
new file mode 100644
index 0000000..574628e
--- /dev/null
+++ b/bms/src/main/res/layout/activity_forget_pass.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_input_username.xml b/bms/src/main/res/layout/activity_input_username.xml
new file mode 100644
index 0000000..36d1860
--- /dev/null
+++ b/bms/src/main/res/layout/activity_input_username.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_login.xml b/bms/src/main/res/layout/activity_login.xml
new file mode 100644
index 0000000..813a1dc
--- /dev/null
+++ b/bms/src/main/res/layout/activity_login.xml
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_main.xml b/bms/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..ae03ae6
--- /dev/null
+++ b/bms/src/main/res/layout/activity_main.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_manage_book_details.xml b/bms/src/main/res/layout/activity_manage_book_details.xml
new file mode 100644
index 0000000..85eaddd
--- /dev/null
+++ b/bms/src/main/res/layout/activity_manage_book_details.xml
@@ -0,0 +1,371 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_manage_index.xml b/bms/src/main/res/layout/activity_manage_index.xml
new file mode 100644
index 0000000..e768481
--- /dev/null
+++ b/bms/src/main/res/layout/activity_manage_index.xml
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_manage_user_details.xml b/bms/src/main/res/layout/activity_manage_user_details.xml
new file mode 100644
index 0000000..eda5738
--- /dev/null
+++ b/bms/src/main/res/layout/activity_manage_user_details.xml
@@ -0,0 +1,255 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_personal_center.xml b/bms/src/main/res/layout/activity_personal_center.xml
new file mode 100644
index 0000000..b8835ed
--- /dev/null
+++ b/bms/src/main/res/layout/activity_personal_center.xml
@@ -0,0 +1,305 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_register.xml b/bms/src/main/res/layout/activity_register.xml
new file mode 100644
index 0000000..dc981b8
--- /dev/null
+++ b/bms/src/main/res/layout/activity_register.xml
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_return_success.xml b/bms/src/main/res/layout/activity_return_success.xml
new file mode 100644
index 0000000..f70f3fc
--- /dev/null
+++ b/bms/src/main/res/layout/activity_return_success.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_search_result.xml b/bms/src/main/res/layout/activity_search_result.xml
new file mode 100644
index 0000000..8c93026
--- /dev/null
+++ b/bms/src/main/res/layout/activity_search_result.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_show_books.xml b/bms/src/main/res/layout/activity_show_books.xml
new file mode 100644
index 0000000..bc1a18a
--- /dev/null
+++ b/bms/src/main/res/layout/activity_show_books.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_show_borrow.xml b/bms/src/main/res/layout/activity_show_borrow.xml
new file mode 100644
index 0000000..918f7a5
--- /dev/null
+++ b/bms/src/main/res/layout/activity_show_borrow.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/activity_user_manage.xml b/bms/src/main/res/layout/activity_user_manage.xml
new file mode 100644
index 0000000..415e076
--- /dev/null
+++ b/bms/src/main/res/layout/activity_user_manage.xml
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/bookgrid.xml b/bms/src/main/res/layout/bookgrid.xml
new file mode 100644
index 0000000..7761b93
--- /dev/null
+++ b/bms/src/main/res/layout/bookgrid.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/booklist.xml b/bms/src/main/res/layout/booklist.xml
new file mode 100644
index 0000000..bd3eb05
--- /dev/null
+++ b/bms/src/main/res/layout/booklist.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/borrowlist.xml b/bms/src/main/res/layout/borrowlist.xml
new file mode 100644
index 0000000..b13f262
--- /dev/null
+++ b/bms/src/main/res/layout/borrowlist.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/borrowlist_manage.xml b/bms/src/main/res/layout/borrowlist_manage.xml
new file mode 100644
index 0000000..153ae03
--- /dev/null
+++ b/bms/src/main/res/layout/borrowlist_manage.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/edit_dialog.xml b/bms/src/main/res/layout/edit_dialog.xml
new file mode 100644
index 0000000..83cf3e3
--- /dev/null
+++ b/bms/src/main/res/layout/edit_dialog.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/spinner_dialog.xml b/bms/src/main/res/layout/spinner_dialog.xml
new file mode 100644
index 0000000..692235f
--- /dev/null
+++ b/bms/src/main/res/layout/spinner_dialog.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/sq_bookgrid.xml b/bms/src/main/res/layout/sq_bookgrid.xml
new file mode 100644
index 0000000..9e6c400
--- /dev/null
+++ b/bms/src/main/res/layout/sq_bookgrid.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/sq_booklist.xml b/bms/src/main/res/layout/sq_booklist.xml
new file mode 100644
index 0000000..9097bb8
--- /dev/null
+++ b/bms/src/main/res/layout/sq_booklist.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/sq_dialog_tips.xml b/bms/src/main/res/layout/sq_dialog_tips.xml
new file mode 100644
index 0000000..25ffbc0
--- /dev/null
+++ b/bms/src/main/res/layout/sq_dialog_tips.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/sq_userlist.xml b/bms/src/main/res/layout/sq_userlist.xml
new file mode 100644
index 0000000..64e22c9
--- /dev/null
+++ b/bms/src/main/res/layout/sq_userlist.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/layout/userlist.xml b/bms/src/main/res/layout/userlist.xml
new file mode 100644
index 0000000..10069be
--- /dev/null
+++ b/bms/src/main/res/layout/userlist.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/bms/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..c4a603d
--- /dev/null
+++ b/bms/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/bms/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..c4a603d
--- /dev/null
+++ b/bms/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/mipmap-hdpi/ic_launcher.png b/bms/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..6b8c1a4
Binary files /dev/null and b/bms/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/bms/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/bms/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..988b65e
Binary files /dev/null and b/bms/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/bms/src/main/res/mipmap-hdpi/ic_launcher_round.png b/bms/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..79aefae
Binary files /dev/null and b/bms/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/bms/src/main/res/mipmap-mdpi/ic_launcher.png b/bms/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..9bea25e
Binary files /dev/null and b/bms/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/bms/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/bms/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..97156cd
Binary files /dev/null and b/bms/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/bms/src/main/res/mipmap-mdpi/ic_launcher_round.png b/bms/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..f9465f8
Binary files /dev/null and b/bms/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/bms/src/main/res/mipmap-xhdpi/ic_launcher.png b/bms/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..91a20e1
Binary files /dev/null and b/bms/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/bms/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/bms/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..718a2a2
Binary files /dev/null and b/bms/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/bms/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/bms/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..7d86a0b
Binary files /dev/null and b/bms/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/bms/src/main/res/mipmap-xxhdpi/ic_launcher.png b/bms/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..201dc48
Binary files /dev/null and b/bms/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/bms/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/bms/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..f75bf53
Binary files /dev/null and b/bms/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/bms/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/bms/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..2598b2c
Binary files /dev/null and b/bms/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/bms/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/bms/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..1efe87f
Binary files /dev/null and b/bms/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/bms/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/bms/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..1d16787
Binary files /dev/null and b/bms/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/bms/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/bms/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..9e3988b
Binary files /dev/null and b/bms/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/bms/src/main/res/values/arrays.xml b/bms/src/main/res/values/arrays.xml
new file mode 100644
index 0000000..621bf74
--- /dev/null
+++ b/bms/src/main/res/values/arrays.xml
@@ -0,0 +1,40 @@
+
+
+
+ - 综合性图书
+ - 哲学、宗教
+ - 社会科学总论
+ - 政治、法律
+ - 军事
+ - 经济
+ - 文化、科学、教育、体育
+ - 语言、文字
+ - 文学
+ - 艺术
+ - 历史、地理
+ - 自然科学总论
+ - 数理科学和化学
+ - 生物科学
+ - 农业科学
+ - 工业技术
+ - 交通运输
+ - 航空、航天
+ - 环境科学、安全科学
+ - 马克思主义、列宁主义、毛泽东思想、邓小平理论
+
+
+ - 您目前的姓名是?
+ - 您配偶的生日是?
+ - 您的学号(或工号)是?
+ - 您母亲的生日是?
+ - 您高中班主任的名字是?
+ - 您父亲的姓名是?
+ - 您小学班主任的名字是?
+ - 您父亲的生日是?
+ - 您配偶的姓名是?
+ - 您初中班主任的名字是?
+ - 您最熟悉的童年好友名字是?
+ - 您最熟悉的学校宿舍舍友名字是?
+ - 对您影响最大的人名字是?
+
+
\ No newline at end of file
diff --git a/bms/src/main/res/values/colors.xml b/bms/src/main/res/values/colors.xml
new file mode 100644
index 0000000..3c6b997
--- /dev/null
+++ b/bms/src/main/res/values/colors.xml
@@ -0,0 +1,37 @@
+
+
+ #6200EE
+ #3700B3
+ #03DAC5
+ #000000
+ #FF0000
+ #E9EAF2
+ #B0B2C0
+ #2196F3
+ #2460da
+ #ffffff
+ #ceced4
+ #ffb815
+ #0000AA
+ #191970
+ #104E8B
+ #FFC107
+ #FFA000
+ #D32F2F
+ #FFCDD2
+ #F44336
+ #FF5252
+ #536DFE
+ #C5CAE9
+ #f0f0f0
+ #455A64
+ #23b382
+ #278b69
+ #404146
+ #ebecee
+ #404146
+ #f9f9fb
+ #a4a6b2
+ #f2f2f2
+ #c2c2c2
+
\ No newline at end of file
diff --git a/bms/src/main/res/values/strings.xml b/bms/src/main/res/values/strings.xml
new file mode 100644
index 0000000..e50c7a9
--- /dev/null
+++ b/bms/src/main/res/values/strings.xml
@@ -0,0 +1,36 @@
+
+ BMS
+ \t\t\t\t本书从初学者的角度出发,采用案例驱动式教学方法,对 Android 基础知识
+ 进行讲解。在案例设计上力求贴合实际需求,真正做到把书本上的知识应用到实际开发中,非常适合初学者联系。
+ 978-7-115-43938-3
+ AndroidStudio移动开发基础
+ 黑马程序员
+ 文化、科学、教育、体育
+ 人民邮电出版社
+ 2017.12
+ 262
+ 3
+ 本书从初学者的角度出发,采用案例驱动式教学方法,对Android基础知识进行讲解。
+ 在案例设计上力求贴合实际需求,真正做到把书本上的知识应用到实际开发中,非常适合初学者学习。
+ 978-7-5606-2157-9
+ 离散数学
+ 方世昌
+ 自然科学总论
+ 西安电子科技大学出版社
+ 2009.1
+ 328
+ 2
+ 本书介绍计算编辑专业最需要的离散数学基础知识,共8章,内容包括数理逻辑、
+ 集合、二元关系、函数、无限集合、代数、格与布尔代数、图论等,并含有较多的与计算机科学和工程有关的例题
+ 和习题。本书适合作为高等理工科院校计算机科学、计算机工程和计算机应用专业本科学生的教材,也可供相关工
+ 程技术人员参考使用。
+ 978-7-5606-3350-3
+ 计算机操作系统
+ 汤晓丹等
+ 自然科学总论
+ 西安电子科技大学出版社
+ 2014.5
+ 440
+ 5
+ 本教材对传统操作系统(OS)和现代操作系统均做了全面的介绍。全书共分12章。
+
\ No newline at end of file
diff --git a/bms/src/main/res/values/styles.xml b/bms/src/main/res/values/styles.xml
new file mode 100644
index 0000000..be77c81
--- /dev/null
+++ b/bms/src/main/res/values/styles.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bms/src/test/java/com/zhang/bms/ExampleUnitTest.java b/bms/src/test/java/com/zhang/bms/ExampleUnitTest.java
new file mode 100644
index 0000000..7f35d3e
--- /dev/null
+++ b/bms/src/test/java/com/zhang/bms/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.zhang.bms;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..6754c23
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,24 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath "com.android.tools.build:gradle:4.0.1"
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
\ No newline at end of file
diff --git a/control-__CONTROL_s_Class_Diagram____.png b/control-__CONTROL_s_Class_Diagram____.png
new file mode 100644
index 0000000..e2f59c6
Binary files /dev/null and b/control-__CONTROL_s_Class_Diagram____.png differ
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..92ed49c
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,20 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app"s APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+android.overridePathCheck=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..f6b961f
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..80e3c5c
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Tue Oct 27 18:12:58 CST 2020
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..cccdd3d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# 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
+ ;;
+ 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"
+ which java >/dev/null 2>&1 || 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
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..f955316
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@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=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@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=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+: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 %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="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!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/model-__MODEL_s_Class_Diagram____.png b/model-__MODEL_s_Class_Diagram____.png
new file mode 100644
index 0000000..9b09fb0
Binary files /dev/null and b/model-__MODEL_s_Class_Diagram____.png differ
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..eeee722
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,2 @@
+include ':bms'
+rootProject.name = "PENGPERSONAL"
\ No newline at end of file
diff --git a/ui-__UI_s_Class_Diagram____.png b/ui-__UI_s_Class_Diagram____.png
new file mode 100644
index 0000000..af24113
Binary files /dev/null and b/ui-__UI_s_Class_Diagram____.png differ