diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..15a15b2
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/render.experimental.xml b/.idea/render.experimental.xml
new file mode 100644
index 0000000..8ec256a
--- /dev/null
+++ b/.idea/render.experimental.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index caa2f61..75f3c15 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -27,6 +27,10 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
+ api 'com.hankcs:hanlp:portable-1.7.2'
+ implementation 'com.google.android.material:material:1.0.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
diff --git a/app/src/main/java/Schema/InitSchema.java b/app/src/main/java/Schema/InitSchema.java
new file mode 100644
index 0000000..4880e71
--- /dev/null
+++ b/app/src/main/java/Schema/InitSchema.java
@@ -0,0 +1,13 @@
+package Schema;
+
+import java.sql.Connection;
+
+public class InitSchema {
+
+ /**
+ * 连接到数据库
+ */
+ public static Connection getConnect(){
+ return null;
+ }
+}
diff --git a/app/src/main/java/Schema/OperaSchema.java b/app/src/main/java/Schema/OperaSchema.java
new file mode 100644
index 0000000..4895cde
--- /dev/null
+++ b/app/src/main/java/Schema/OperaSchema.java
@@ -0,0 +1,70 @@
+package Schema;
+
+import android.content.DialogInterface;
+import android.gesture.Prediction;
+
+import androidx.appcompat.app.AlertDialog;
+
+import com.example.cmknowledgegraph.LoginActivity;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class OperaSchema {
+
+ /**
+ * 连接数据库,进行登录,参数是手机号(string),密码(string)
+ * 用户表(UserInfo),手机号,用户名,密码
+ * 登陆成功返回true,登陆失败返回false
+ */
+ public static boolean longin(String tel,String password){
+ Connection conn=InitSchema.getConnect();
+ ResultSet rst;
+ PreparedStatement pstmt;
+ try {
+ pstmt=conn.prepareStatement("select paw\n" +
+ "from UserInfo\n" +
+ "where tel='"+tel+"'");
+ rst=pstmt.executeQuery();
+ String paw=rst.getString("paw");
+ if(password.equals(paw)){
+ return true;
+ }
+ else return false;
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ /**
+ * 注册方法,参数是手机号,昵称,密码
+ * @return 注册成功返回true,失败返回false
+ */
+ public static boolean register(String tel,String nickname,String password){
+
+ Connection conn=InitSchema.getConnect();
+ PreparedStatement pstmt;
+ ResultSet rst;
+ try {
+ pstmt=conn.prepareStatement("select paw\n" +
+ "from UserInfo\n" +
+ "where tel='"+tel+"'");
+ rst=pstmt.executeQuery();
+ if(rst==null){//注册成功
+ //把用户信息填入表中
+ pstmt=conn.prepareStatement("insert into UserInfo(tel,nickname,paw) values(?,?,?)");
+ pstmt.setString(1,tel);
+ pstmt.setString(2,nickname);
+ pstmt.setString(3,password);
+ pstmt.executeUpdate();
+ return true;
+ }else return false;
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+}
diff --git a/app/src/main/java/com/example/cmknowledgegraph/LoginActivity.java b/app/src/main/java/com/example/cmknowledgegraph/LoginActivity.java
new file mode 100644
index 0000000..a36970f
--- /dev/null
+++ b/app/src/main/java/com/example/cmknowledgegraph/LoginActivity.java
@@ -0,0 +1,69 @@
+package com.example.cmknowledgegraph;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import Schema.OperaSchema;
+
+public class LoginActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_login);
+
+ final EditText tel_edit=findViewById(R.id.id_edit);
+ final EditText password_edit=findViewById(R.id.password_edit);
+
+ /**
+ * 登录按钮,传递参数:手机号(int)、密码(string)
+ */
+ Button login_btn=findViewById(R.id.login_btn);
+ login_btn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+
+ //获取手机号和密码
+ String tel=tel_edit.getText().toString().trim();
+ String password=password_edit.getText().toString();
+ //调用数据库类中的方法进行登录
+ boolean isLogin= OperaSchema.longin(tel,password);
+ /**
+ * 登陆成功,返回上一个界面,即个人中心界面,刷新个人中心界面
+ * 即,改变登录按钮为欢迎按钮
+ */
+ if(isLogin) {
+ finish();//返回个人中心Activity
+ //刷新个人中心Activity
+
+ }else{//登陆失败提醒
+ AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
+ builder.setTitle("登陆提醒");// 设置标题
+ builder.setMessage("登陆失败");// 为对话框设置内容
+ builder.create().show();// 使用show()方法显示对话框
+ }
+ }
+ });
+
+ //TextView注册跳转
+ TextView register_text=findViewById(R.id.register_text);
+ register_text.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ //跳转到注册页面
+ Intent intent=new Intent();
+ intent.setClass(LoginActivity.this,RegisterActivity.class);
+ startActivity(intent);
+ }
+ });
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/cmknowledgegraph/MainContent.java b/app/src/main/java/com/example/cmknowledgegraph/MainContent.java
new file mode 100644
index 0000000..b9182bd
--- /dev/null
+++ b/app/src/main/java/com/example/cmknowledgegraph/MainContent.java
@@ -0,0 +1,19 @@
+package com.example.cmknowledgegraph;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.fragment.app.Fragment;
+
+public class MainContent extends Fragment {
+
+ //创建视图
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate( R.layout.activity_main, container, false ); //要加载的layout文件
+ }
+}
diff --git a/app/src/main/java/com/example/cmknowledgegraph/PersonContent.java b/app/src/main/java/com/example/cmknowledgegraph/PersonContent.java
new file mode 100644
index 0000000..cfc4df8
--- /dev/null
+++ b/app/src/main/java/com/example/cmknowledgegraph/PersonContent.java
@@ -0,0 +1,17 @@
+package com.example.cmknowledgegraph;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.fragment.app.Fragment;
+
+public class PersonContent extends Fragment {
+
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate( R.layout.activity_personality_center, container, false ); //要加载的layout文件
+ }
+}
diff --git a/app/src/main/java/com/example/cmknowledgegraph/PersonalityCenterActivity.java b/app/src/main/java/com/example/cmknowledgegraph/PersonalityCenterActivity.java
new file mode 100644
index 0000000..d4c64da
--- /dev/null
+++ b/app/src/main/java/com/example/cmknowledgegraph/PersonalityCenterActivity.java
@@ -0,0 +1,28 @@
+package com.example.cmknowledgegraph;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+
+public class PersonalityCenterActivity extends AppCompatActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_personality_center);
+
+ Button longin_pc_btn=(Button) findViewById(R.id.login_pc_button);
+ longin_pc_btn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ //跳转到LoginActivity
+ Intent intent=new Intent();
+ intent.setClass(PersonalityCenterActivity.this,LoginActivity.class);
+ startActivity(intent);
+ System.out.println("点击个人中心的登录按钮");
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/example/cmknowledgegraph/RegisterActivity.java b/app/src/main/java/com/example/cmknowledgegraph/RegisterActivity.java
new file mode 100644
index 0000000..b28defd
--- /dev/null
+++ b/app/src/main/java/com/example/cmknowledgegraph/RegisterActivity.java
@@ -0,0 +1,65 @@
+package com.example.cmknowledgegraph;
+
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import Schema.OperaSchema;
+
+public class RegisterActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_register);
+
+ final EditText tel_edit=findViewById(R.id.tel_register_edit);
+ final EditText password_edit=findViewById(R.id.password_edit);
+ final EditText nickname_edit=findViewById(R.id.nickname_register_edit);
+
+ /**
+ * 注册按钮,传递参数:手机号(int),密码(string),昵称(string)
+ */
+ Button register =findViewById(R.id.register_btn);
+ register.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ //获取手机号,密码,昵称
+ String tel=tel_edit.getText().toString().trim();
+ String password=password_edit.getText().toString();
+ String NickName=nickname_edit.getText().toString();
+ //调用数据库类方法进行注册
+ boolean isRegister= OperaSchema.register(tel,NickName,password);
+ if(isRegister){
+ //注册成功,对话框提醒
+ AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
+ builder.setTitle("注册提醒");// 设置标题
+ // builder.setIcon(R.drawable.ic_launcher);//设置图标
+ builder.setMessage("注册成功");// 为对话框设置内容
+ builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface arg0, int arg1) {
+ // TODO Auto-generated method stub
+ //返回登录页面
+ finish();
+ }
+ });
+ builder.create().show();// 使用show()方法显示对话框
+ }else{//注册失败
+ //注册失败提醒
+ AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
+ builder.setTitle("注册提醒");// 设置标题
+ // builder.setIcon(R.drawable.ic_launcher);//设置图标
+ builder.setMessage("注册失败");// 为对话框设置内容
+ }
+
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/example/cmknowledgegraph/SearchActivity.java b/app/src/main/java/com/example/cmknowledgegraph/SearchActivity.java
new file mode 100644
index 0000000..ebc88a3
--- /dev/null
+++ b/app/src/main/java/com/example/cmknowledgegraph/SearchActivity.java
@@ -0,0 +1,14 @@
+package com.example.cmknowledgegraph;
+
+import android.os.Bundle;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+public class SearchActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_search);
+ }
+}
diff --git a/app/src/main/java/com/example/cmknowledgegraph/SearchContent.java b/app/src/main/java/com/example/cmknowledgegraph/SearchContent.java
new file mode 100644
index 0000000..9b0614b
--- /dev/null
+++ b/app/src/main/java/com/example/cmknowledgegraph/SearchContent.java
@@ -0,0 +1,19 @@
+package com.example.cmknowledgegraph;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.fragment.app.Fragment;
+
+public class SearchContent extends Fragment {
+
+
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate( R.layout.activity_search, container, false ); //要加载的layout文件
+ }
+
+}
diff --git a/app/src/main/res/drawable/ic_dashboard_black_24dp.xml b/app/src/main/res/drawable/ic_dashboard_black_24dp.xml
new file mode 100644
index 0000000..46fc8de
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dashboard_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_home_black_24dp.xml b/app/src/main/res/drawable/ic_home_black_24dp.xml
new file mode 100644
index 0000000..f8bb0b5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_home_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_notifications_black_24dp.xml b/app/src/main/res/drawable/ic_notifications_black_24dp.xml
new file mode 100644
index 0000000..78b75c3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notifications_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/person.png b/app/src/main/res/drawable/person.png
new file mode 100644
index 0000000..186112f
Binary files /dev/null and b/app/src/main/res/drawable/person.png differ
diff --git a/app/src/main/res/drawable/search.png b/app/src/main/res/drawable/search.png
new file mode 100644
index 0000000..91f18a8
Binary files /dev/null and b/app/src/main/res/drawable/search.png differ
diff --git a/app/src/main/res/drawable/search_back.jpg b/app/src/main/res/drawable/search_back.jpg
new file mode 100644
index 0000000..c9440f1
Binary files /dev/null and b/app/src/main/res/drawable/search_back.jpg differ
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
new file mode 100644
index 0000000..4030adf
--- /dev/null
+++ b/app/src/main/res/layout/activity_login.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index c1a7c19..a70c2b1 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -2,18 +2,29 @@
-
+
+
+ app:menu="@menu/bottom_nav_menu" />