一、项目概述
本次选课系统项目,用户角色分为学生和管理员。学生在用账号和密码登录成功后,会看到自己的课表信息,然后在选课列表里面进行选课,还可以查看和修改自己的个人信息。管理员有固定的账号和密码,成功登录后可以查看所有课程信息,可以添加或者删除课程信息,可以修改学生每门课的成绩,还可以添加新的学生信息。
底部导航栏,页面跳转传值,登录及注册界面,ListView,前后台,数据表的增删改查,涉及知识点很多。 |
---|
二、开发环境
Android Studio的版本只要在3.6.1及以上都行,打开项目之后自动构建好就能运行。
Android Studio会利用Gradle工具自动构建好项目,非常快,如图所示:
三、项目结构
在Android视图下,可以看到项目的包名为com.android.student,结构图如下:
- Activity包是修改密码、修改学生信息和添加课程的活动。
- Adapter包放的是适配器文件,有列表的地方就有适配器,列表中每个子项怎么排列的,就是靠适配器来设置。
- App包是登录活动、应用管理类。
- Dao包放的java文件,主要进行数据库的增删改查操作,课程、成绩、学生和用户。
- DataBase是数据库帮助类,在这里建库建表,初始化数据等。
- Entity存放所有的实体类,也就是每一张数据表的结构。
-
ManFragment是管理员的三个碎片,StuFragment是学生的三个碎片。
每一个Activity或Fragment都对应一个layout文件,比较简单,主要逻辑其实都在Java文件中,layout只是布局显示。
四、详细设计
1、主页面
主页面非常简单,就是引用的Google推荐的BottomNavigationView作为底部导航栏,然后中间是ViewPager,也可以放Fragment,就是用来切换碎片。完整代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.android.student.Activity.MainActivity">
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@drawable/bottom_navigation_color_selector"
app:itemTextColor="@drawable/bottom_navigation_color_selector"
app:menu="@menu/menu_bottom_navigation" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottom_navigation"
android:layout_alignParentTop="true"
/>/ app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</RelativeLayout>
2、学生修改信息
学生有3个页面,这里介绍下修改信息页面。具体实现很简单,使用列表形式显示学生的个人信息,所以最上面是RecyclerView,然后是一个Button,用来触发修改的事件。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:orientation="vertical"
tools:context="com.android.student.StuFragment.ThirdFragment">
<!-- TODO: Update blank fragment layout -->
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/click"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="修改个人信息"
android:textSize="25sp"
android:layout_marginBottom="30dp"
android:textColor="@color/DarkCyan"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
3、管理员修改成绩
父布局是LinearLayout,顶部是个TextView,下面是3个LinearLayout竖直对齐放置,每个LinearLayout内部的对齐方式是horizontal,包含一个TextView和一个EditText。inputType都是textPersonName,即汉字输入。底部是个LinearLayout,两个Button设置了textSize和textColor。每个LinearLayout都设置了margin,让布局看起来更加合适。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:orientation="vertical"
tools:context="com.android.student.Activity.StudentChangeActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="修改学生成绩"
android:textSize="20sp"
android:layout_marginBottom="100dp"
android:layout_gravity="center_horizontal"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="学 号:" />
<EditText
android:id="@+id/editText"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="课程号:" />
<EditText
android:id="@+id/editText2"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="成 绩:" />
<EditText
android:id="@+id/editText3"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:layout_marginTop="50dp">
<Button
android:id="@+id/commit"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="提交"
android:textSize="20sp"
android:textColor="@color/DarkCyan" />
<Button
android:id="@+id/cancel_s"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="重输"
android:textSize="20sp"
android:textColor="@color/DarkCyan" />
</LinearLayout>
</LinearLayout>
4、数据库
选课系统一共四张表:学生表、课程表、成绩表、日志表。在MyDatabaseHelper中将建表语句定义好,并且将待插入的数据准备好,在成功登录到主界面时,就会创建好数据库,插入数据到表中,然后进行我们的增删改查功能。建表语句如下:
private static final int DB_VERSION = 1;
private static final String DB_NAME = "StudentSystem.db";
public static final String CREATE_STUDENT = "create table student(" +
"id int primary key," +
"name text not null," +
"sex text not null," +
"age int not null,"+
"phone text not null)";
public static final String CREATE_COURSE = "create table course(" +
"course_id int primary key," +
"course_name text unique," +
"credit int not null)" ;
public static final String CREATE_SCORE = "create table score(" +
"student_id int not null," +
"course_id int not null," +
"grade int," +
"constraint score_PK primary key(student_id,course_id)," +
"constraint fk_SID foreign key(student_id) references student(id)on delete cascade," +
"constraint fk_CID foreign key(course_id) references course(course_id)on delete cascade)";
public static final String CREATE_LOG = "create table log(" +
"student_id int primary key," +
"password text not null," +
"constraint fk_ID foreign key(student_id) references student(id) on delete cascade)";
五、项目演示
1、运行项目,经过Starting AVD、Install、Launch succeeded一系列过程后,模拟器弹出应用的登录界面:
2、输入学生身份的账号和密码,所有的账号和密码都在
MyDatabaseHelper.java
文件里面。这里选取一位学生(
账号:10001,密码:123456
),然后点击登录,进入系统主界面,可以看到每门课的名称、学号、学分和成绩:
3、点击下面菜单栏的【选课】,进入选课界面,这里可以看到自己没有选择过的课程的所有信息,点击一门课就可以将它选择进自己的课表:
4、点击下面菜单栏的【个人信息】,进入个人信息界面:
5、点击【修改个人信息】,进入修改界面,输入信息后保存即可:
6、退出系统,重新打开应用,用管理员的账号和密码登录进去(账号:00000,密码:000000),然后会显示【课表】界面:
7、点击【添加/删除课程】,可以对课程信息进行增删操作,课程号不能为空:
8、进入【选课】界面,在这里输入学生学号和课程号还有这门课的成绩,然后提交即可修改学生成绩,点击【重输】会清空当前输入的内容:
9、进入【个人信息】界面,在这里可以添加学生信息,作为管理员肯定可以添加用户的。输入完信息后点击【添加学生】则添加成功,点击【重输】是清空当前输入的内容:
六、源码获取
♻️下面两种方式都可以获取源代码 |
---|
1️⃣ 点击直接下载 Android Studio 选课系统 |
2️⃣ 关注公众号《 萌新加油站 》,后台回复: 选课 |
🚀这有你错过的精彩内容 |
---|
Android Studio实现健身系统 |
Android Studio实现外卖订餐系统 |
Android Studio实现考试管理系统 |
Android Studio实现天气预报系统 |
Android Studio实现图书馆订座系统 |
其实我们只是想找一个谈得来、合脾性、在一起舒坦、分开久了有点想念、安静久了想闹腾一下、吵架了又立马会后悔认输的人 。爱情如此,友情同理 。