校史馆讲解管理是校史馆发展的重要保障,过去我们都是通过聊天消息发布讲解信息,利用文本管理讲解的信息,这样做既不方便,效率也很低。如何更快更好的管理讲解信息一直是我们关心的问题。上学期学到了数据库,利用计算机强大功能进行管理已经比较成熟了,不仅可以提高讲解员和管理者的信息管理效率,而且可以提高我们的综合管理能力。
校史馆讲解管理软件主要实现了讲解员信息、参观者信息和讲解信息的录入、查找、删除和修改。同时针对不同的讲解员,可以看到操作信息不同。讲解员可以自行选择讲解,并查看自己的讲解信息。根据实际分析,该校史馆讲解系统主要满足以下功能:
管理员使用,讲解员信息,参观者信息和讲解信息的数据管理(增删改查)
讲解员使用,查看讲解和参观信息。并选择讲解后可查看自己的讲解信息。
该系统是一个半开放系统,在管理员和讲解员输入用户名和密码后,系统验证是否正确。如果正确显示系统功能界面,否则不给予显示。在登入以后管理员可以进行查询、删除、添加等操作。根据以上分析,按照实际要求,得到以下的功能模块图。
该系统是只要涉及三个实体类,分别是讲解员,参观者和讲解类型。同时该系统涉及登入界面、管理员主界面、讲解员主界面和各种信息管理等二十多个界面。
如图所示,各个表的主键是ID号,讲解员可选择多场讲解,选择的过程就是将讲解表的信息插入我的讲解表。参观者也可多次参观,每次参观录入的讲解ID号不同。
本数据库的设计包括四张表。以下是主要表的信息和各表之间的关系图。
为了实现数据的保存,需要用到数据库,本系统采用SQLite数据库,在创建数据库时,是在DBHelper类里创建onCreate()方法来实现创建数据库和数据表,其中使用execSQL()方法实现数据表的创建。具体代码如下:
/*
* 创建tab_stu【学生表】
*/
String createTableStu = "create table tab_stu (stu_id int , stu_name varchar(10), "
+ "stu_gender varchar(10), stu_telephone varchar(20),"
+ " stu_password varchar(10), stu_academy varchar(20), "
+ "stu_profession varchar(20), stu_grade int,primary key('stu_id')) ";
db.execSQL(createTableStu);
/*
* 创建tab_visitor【参观者表】
*/
String createTabVisitor = "create table tab_visitor (vis_id int, vis_grade varchar(10) ,"
+ "people_number int , xueyuan varchar(25) ,"
+ "phonenumber varchar(20) , primary key('vis_id') )";
db.execSQL(createTabVisitor);
/*
* 创建tab_work【讲解表】
*/
String createTabMeet = "create table tab_meet (meet_id int, meetTime varchar(25) ,"
+ "meet_academy varchar(20),meet_people int ,"
+ "meet_grade varchar(20), primary key('meet_id') )";
db.execSQL(createTabMeet);
/*
* 创建tab_mywork【我的讲解表】
*/
String createTabMyMeet = "create table tab_mymeet (meet_id int, meet_grade varchar(25) ,"
+ "meetTime varchar(25) , meet_academy varchar(20) ,"
+ "meet_people int , primary key('meet_id') )";
db.execSQL(createTabMyMeet);
创建student、meet和visitor文件夹用来存放类和他们对应的操作,数据模型是对数据表中所有字段的封装,主要通过getXXX()和setXXX()方法实现获取数据和存放数据。创建数据表所对应的数据库实体类代码如下:
public class Stu {
private Integer id;
private String name;
private String gender;
private String password;
private String telephone;
private String academy;
private String profession;
private Integer grade;
public Stu(Integer id, String name, String gender, String password, String telephone, String academy, String profession, Integer grade) {
super();
this.id = id;
this.name = name;
this.gender = gender;
this.password = password;
this.telephone = telephone;
this.academy = academy;
this.profession = profession;
this.grade = grade;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getAcademy() {
return academy;
}
public void setAcademy(String academy) {
this.academy = academy;
}
public String getProfession() {
return profession;
}
public void setProfession(String profession) {
this.profession = profession;
}
public Integer getGrade() {
return grade;
}
public void setGrade(Integer grade) {
this.grade = grade;
}
信息管理系统包括信息的增加、删除、修改和添加操作。这些操作的是实现我们首先需要对基本类实现这些方法,查看是如何实现他们的各种方法的。讲解表和我的讲解表操作的内容相似,这里就只展示讲解表的操作
private DBHelper helper;
public StuDao(Context context) {
this.helper = new DBHelper(context);
}
public void insert(Stu stu) {//插入讲解员方法
SQLiteDatabase db = helper.getWritableDatabase();//打开数据库Sqlite
db.execSQL(
"insert into tab_stu values(?,?,?,?,?,?,?,?)",//执行sql语句
new Object[] { stu.getId(), stu.getName(), stu.getGender(),
stu.getTelephone(), stu.getPassword(), stu.getAcademy(),
stu.getProfession(), stu.getGrade() });//获取数据
db.close();//关闭数据库
}
public void delete(int id) {//删除讲解员方法
SQLiteDatabase db = helper.getWritableDatabase();//打开数据库Sqlite
db.execSQL("delete from tab_stu where stu_id = ?", new Object[] { id });//将数据保存
db.close();//关闭数据库
}
public void update(Stu stu) {//更新讲解员信息方法
SQLiteDatabase db = helper.getWritableDatabase();//打开数据库Sqlite
db.execSQL(
"update tab_stu set stu_name=?,stu_gender=?,stu_telephone=?,stu_password=?," +
"stu_academy=?,stu_profession=?,stu_grade=? where stu_id=?",
new Object[] { stu.getName(), stu.getGender(), stu.getTelephone(),
stu.getPassword(), stu.getAcademy(),
stu.getProfession(), stu.getGrade(), stu.getId() });//获取数据
db.close();
}
public Stu select(int id) {//查找讲解员信息方法
SQLiteDatabase db = helper.getReadableDatabase();//打开数据库
Cursor c = db.rawQuery("select * from tab_stu where stu_id=?",
new String[] { id + "" });//执行sql语句
Stu stu = null;
if (c.moveToNext()) {//逐条查询
String name = c.getString(c.getColumnIndex("stu_name"));//转换成字符串类型给name
String password = c.getString(c.getColumnIndex("stu_password"));
String telephone = c.getString(c.getColumnIndex("stu_telephone"));
String gender = c.getString(c.getColumnIndex("stu_gender"));
String academy = c.getString(c.getColumnIndex("stu_academy"));
String profession = c.getString(c.getColumnIndex("stu_profession"));
Integer grade = c.getInt(c.getColumnIndex("stu_grade"));
stu = new Stu(id, name, password, telephone , gender, academy,
profession, grade);
}
c.close();
db.close();
return stu;
}
public Stu selectname(String name) {
SQLiteDatabase db = helper.getReadableDatabase();//打开数据库
Cursor c = db.rawQuery("select * from tab_stu where stu_name=?",
new String[] { name + "" });
Stu stu = null;
if (c.moveToNext()) {
Integer id = c.getInt(c.getColumnIndex("stu_id"));
String password = c.getString(c.getColumnIndex("stu_password"));
String telephone = c.getString(c.getColumnIndex("stu_telephone"));
String gender = c.getString(c.getColumnIndex("stu_gender"));
String academy = c.getString(c.getColumnIndex("stu_academy"));
String profession = c.getString(c.getColumnIndex("stu_profession"));
Integer grade = c.getInt(c.getColumnIndex("stu_grade"));
stu = new Stu(id, name, password, telephone, gender, academy,
profession, grade);
}
c.close();
db.close();//关闭数据库
return stu;
}
每个操作都对应着相应的界面和实现方法,创建infohandle文件夹存放这些Activity,每个也对应自己的布局文件。
主要的实现方法,定义EditText,初始化EditText,设置按钮监听,从EditText中获取值获取文本框中的内容,并调用之前实现的方法,弹出对话框设置提醒。
讲解员表实现界面如下:分别为插入信息、查找信息、更新信息和查找信息。若插入和更新成功则弹出对话框提示。
主要的Activity与布局文件
InfoHandleActivity:主要实现管理员的各种操作,,每个按钮都设置相应的监听器,使用intent机制启动相应的Activity,并设置返回函数onBackPressed()。
LoginActivity:登入界面,分为管理员登入和讲解员登入。声明user和password为EditText。注册按钮启动InserVisitor,登入按钮设置监听器,只有当用户名和密码都正确才会启动相应的Activity。管理员用户名:admin密码:admin,讲解员用户名:2018密码:0000.
MainActivity:讲解员登入后的界面,主要设置四个按钮分别是查看讲解(启动ShowMeetActivity)、参看参观者(启动ShowVisitor Acivity)、我的讲解(启动MyMeetAcitvity)和选择讲解(启动Select
MeetActivity)。
MyMeetAcitvity:list显示我的讲解信息,调用MyMeetDao查询方法来进行查询讲解,并对每行设置点击事件(启动MeetDetail Acitvity),通过Bundle传递meet的id值和讲解时间,from记录从我的讲解页面跳转过来。
ShowMeetActivity:调用MeetDao查询方法进行查询,获取列表数据并添加显示,点击事件(启动MeetDetailAcitvity)传递Bundle传递id值讲解时间和from记录从查看讲解页面的跳转。
MeetDetailAcitvity:获取Intent中的Bundle值,按钮设置监听器,从from中取值若为“我的讲解”则显示删除,若为“选择讲解”则显示选择,点击事件也不同若选择,则调用meetDao插入方法进行插入,若删除则调用meetDao删除方法进行删除。如图从不同的页面查看讲解细节,显示的界面也不同。
SelectMeetActivity:加载list视图,调用MeetDao查询方法进行查询,获取列表数据,将数据加载到生成的适配器中,采用Intent机制传递Bundle值,并跳转到MeetDetailActivity。
ShowVisitorAcivity:与上述函数过程相同,跳转到VisitorDetail。
我本身也是校史馆讲解队的一员,只有切身的了解我们的工作过程和日常需求才能做出一个对用户有用的数据库管理系统。本次我创建了一个校史馆预约系统,功能相对来说比较多,通关此次开发实践,让我更加熟悉了AndroidStudio的开发流程,需要攻克的技术不多,其中的Activity流程都差不多,更多的是需要细心因为需要声明的类及其操作较多,需要清晰的命名(函数名、文件夹名和实体名)。后期主要更多的是进行代码的调试。深知,任何软件的开发都不是一蹴而就和一劳永逸的事,需要通过实际运行反馈,不断地改进才能使软件更加完善。我也会学习更多的技术,也希望自己的软件能真正投入使用。
这个系统我是拿学生选课系统改的,其中的思想是一样的,就是换了一个套路。其实大家如果借鉴的话,可以改改背景。之前我写的代码都没存着,这次我放到了GitHub上,大家可以借鉴 数据库课程设计