Android Studio实现选课系统

  • Post author:
  • Post category:其他




一、项目概述

本次选课系统项目,用户角色分为学生和管理员。学生在用账号和密码登录成功后,会看到自己的课表信息,然后在选课列表里面进行选课,还可以查看和修改自己的个人信息。管理员有固定的账号和密码,成功登录后可以查看所有课程信息,可以添加或者删除课程信息,可以修改学生每门课的成绩,还可以添加新的学生信息。


底部导航栏,页面跳转传值,登录及注册界面,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实现图书馆订座系统

其实我们只是想找一个谈得来、合脾性、在一起舒坦、分开久了有点想念、安静久了想闹腾一下、吵架了又立马会后悔认输的人 。爱情如此,友情同理 ​​​​。



版权声明:本文为qq_42257666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。