Android学生管理系统
由android + mysql实现
1.需求分析
功能需求和页面需求两天没有细想,想到啥功能写啥功能想到啥界面写啥界面
2.系统设计
总体界面结构参照了微信的设计结构,主要功能包括管理员的注册和登录,所有学生信息的查询、单个学生信息的添加。
界面主要由两下方的按钮部分和上方的功能部分组成,每一个按钮又是一个不同的Fragment,每一个功能也是一个不同的Fragment。
2.1按钮
布局为垂直线性布局,从上到下依次是ImageButton以及TextView。
其余三个按钮类似,不做过多介绍。
2.2登陆/注册功能
布局为ConstraintLayout,由ImageView、两个TextView、两个按钮构成
2.3所有学生信息功能
布局为垂直线性布局,从上到下依次是TextView,TableLayout。为TableLayout添加五列,分别是学生的学号、专业、姓名、性别、年龄。
2.4添加学生信息
布局为ConstraintLayout
以上四个按钮+三个Fragment共同组成了整个学生管理系统
3.数据库设计
3.1用户表
用户的属性为用户名和密码
字段名 | 字段类型 | 字段长度 |
---|---|---|
username | String | 50 |
password | String | 50 |
3.2学生表
学生的属性为学号、专业、姓名、性别、年龄
字段名 | 字段类型 | 字段长度 |
---|---|---|
id | String | 20 |
major | String | 20 |
name | String | 20 |
age | int | 20 |
gender | String | 20 |
4.系统实现
4.1 Fragment的界面切换
将四个不同按钮的界面设计好后,分别新建四个不同的Fragment的子类与四个不同的按钮相对应
- 登录/注册按钮
- 所有学生信息按钮
- 添加学生信息按钮
- 查询学生信息按钮
添加完毕之后,为主页面添加四个fragments与上面四个类相对应,并在主页面中添加相应的点击事件监听,并创建四个功能界面碎片的实例。之后的主要逻辑为,先隐藏所有的界面碎片实例,在根据按钮的不同来展现不同的碎片实例。
上图是登录注册界面部分的切换,其他类似。
至此,Fragment页面切换功能结束。
4.2 登录注册功能
- 注册功能
首先先完成新建一个名为Dao层的包来存放对数据库的增删改查,并新建一个叫userDao的类来编写对用户信息的增删改查
添加用户
通过用户名查询用户信息
其次在新建一个名为service的包来存放业务逻辑处理,例如用户的登录注册,学生信息的添加和查询
用户注册业务逻辑
最后在注册按钮处调用对应的方法,值得一提的是,android调用数据库方法需要在一个子线程中启动。
获取输入信息
调用方法
- 登录
用户登录业务逻辑
调用方法
4.3所有学生信息查询
首先新建一个叫studentDao的类来编写对学生信息的增删改查
所有学生信息查询
添加学生信息
通过学号查询学生信息
调用方法
依旧是开启一个线程,在使用java语句手动创建一行向tableLayout中添加以查询到的数据
public void run() {for (int i = 0; i<mStudentList.size(); i++){TableRow row = new TableRow(getContext());text1 = new TextView(getContext());text1.setText(mStudentList.get(i).getId());text1.setTextSize(20); //字体大小text1.setTextColor(R.color.teal_200);text1.setGravity(Gravity.CENTER); //居中显示text2 = new TextView(getContext());text2.setText(mStudentList.get(i).getMajor());text2.setTextSize(20); //字体大小text2.setGravity(Gravity.CENTER); //居中显示text3 = new TextView(getContext());text3.setText(mStudentList.get(i).getName());text3.setTextColor(R.color.teal_200);text3.setTextSize(20); //字体大小text3.setGravity(Gravity.CENTER); //居中显示text4 = new TextView(getContext());text4.setText(String.valueOf(mStudentList.get(i).getAge()));text4.setTextSize(20); //字体大小text4.setGravity(Gravity.CENTER); //居中显示text5 = new TextView(getContext());text5.setText(mStudentList.get(i).getGender());text5.setTextSize(20); //字体大小text5.setGravity(Gravity.CENTER); //居中显示row.addView(text1);row.addView(text2);row.addView(text3);row.addView(text4);row.addView(text5);mTableLayout.addView(row);}}
并在主线程中更新
mStudentDao = new studentDao();mTableLayout = view.findViewById(R.id.table);new Thread(new Runnable(){public void run(){mStudentList =mStudentDao.findAllDao();handler.post(mRunnable);}}).start();
所有学生信息查询功能结束
4.4添加学生信息
业务逻辑
//添加学生数据public boolean add(Student student){if (mStudentDao.findByIdDao(student.getId()).getId()!=null){return false;}mStudentDao.addDao(student);return true;}
数据获取
调用方法
至此,添加学生信息功能结束
5. 运行结果
5.1所有学生信息的查询
其他功能不好展现,在这里就不展现了,有什么做的不好的地方请多多指教。