mysql答题系统android_Android答题APP的设计与实现

本文记录了一款Android答题APP的开发过程,包括用户登录、注册、答题、成绩统计和错题查看等功能。应用通过HTTP连接服务器获取JSON格式的试题数据,解析后存储到本地数据库。数据库设计包含用户表和题库表,登录注册采用MVC模式,使用Java JDBC连接MySQL。此外,还涉及JSON格式设计和Android程序设计,如页面跳转、SQLite数据库、网络请求等。
摘要由CSDN通过智能技术生成

还没有整理完,待续……

学校开了Android课,最后让交一个大作业。正好拿来练练手,记录下思路。也希望能给有需要的朋友们一些帮助。恩,纯小白教程,大神们可以绕路了。

作业的题目是这样的:

考试APP系统:

1)要求有用户登陆功能:从远程服务器进行登陆验证。

2)要有考试测试界面,主要是选择、判断、简答题目测试。

3)要有统计成绩界面和错题显示界面。

评分标准:

1、界面设计占评分的30%

2、系统运行正确; 功能完善;工作量充分; 系统实现有一定的技术的难度。50%

3、要求有适当的系统主要模块的文档说明和代码注释。

4、直接将数据库文件(数据库一定要备份成SQL语句格式,指明数据库)和项目文件提交。

乍一看挺简单的,真要研究起来,写的实用一些,还真有点不知如何下手,那跟着我的思路,一起来吧!恩,不想看思路的,可以直接戳Android源码下载源码来看了。

功能需求设计:

登录注册

答题:选择题,判断题,简答题

答题得分计算

错题查看

最后效果

c2922a9327af2dd1ca2ff4c3cae72b48.png

总体思路

总体思路是这样的,App通过http连接服务器,进行登录或者注册服务,登录成功之后,服务器查询数据库并以json的形式返回试题数据。App接收数据之后,解析并存到本地数据库,然后展示给用户答题。点击交卷按钮后,进行评分并可进行错题查看。内容比较杂乱,大家可以根据目录来快速查看自己需要或者感兴趣的地方。

数据库设计

首先,就登录注册的功能来说,得先有一个用户表,包含用户名,密码,id号这些基本的内容。我在这里又加了一个权限字段,用来返回状态。(设置权限字段,方便日后进行扩展,可设置用不同数字代表不同等级或身份)

tbl_user_info

90011a1a891b8fb4bbaf0b17d538c382.png

其次,就是题库了。为了使项目具有实用性,减小安装包体积,便于更新修正,题库同样也需要放在服务器上才合适。

tbl_question

fcfdff888dff0285fe3be8b317755be5.png

jsp程序

jsp依赖了两个jar包,分别是连接mysql的驱动:mysql-connector-java-5.1.34-bin还有生成json用的:json 。为了减少代码的耦合性,这里采用MVC模式进行设计。(自以为是MVC)。目录结构如下:

2e6974b8b938ef5ffb452d48fe2cf546.png

登录注册

1.连接数据库

数据库操作类,封装了连接,查询,关闭数据库的方法。大家如果使用这部分代码,别忘了把数据库连接常量改成自己的。

//****连接数据库**DBManager***

public class DBManager {

// 数据库连接常量

public static final String DRIVER = "com.mysql.jdbc.Driver";

public static final String USER = "root";

public static final String PASS = "root";

public static final String URL = "jdbc:mysql://localhost:3306/shop";

// 静态成员,支持单态模式

private static DBManager per = null;

private Connection conn = null;

private Statement stmt = null;

// 单态模式-懒汉模式

private DBManager() {

}

public static DBManager createInstance() {

if (per == null) {

per = new DBManager();

per.initDB();

}

return per;

}

// 加载驱动

public void initDB() {

try {

Class.forName("com.mysql.jdbc.Driver");

} catch (Exception e) {

e.printStackTrace();

}

}

// 连接数据库,获取句柄+对象

public void connectDB() {

System.out.println("Connecting to database...");

try {

conn = DriverManager.getConnection(URL, USER, PASS);

stmt = conn.createStatement();

} catch (SQLException e) {

e.printStackTrace();

}

System.out.println("SqlManager:Connect to database successful.");

}

// 关闭数据库 关闭对象,释放句柄

public void closeDB() {

System.out.println("Close connection to database..");

try {

stmt.close();

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

System.out.println("Close connection successful");

}

// 查询

public ResultSet executeQuery(String sql) {

ResultSet rs = null;

try {

rs = stmt.executeQuery(sql);

} catch (SQLException e) {

e.printStackTrace();

}

return rs;

}

// 增添/删除/修改

public int executeUpdate(String sql) {

int ret = 0;

try {

ret = stmt.executeUpdate(sql);

} catch (SQLException e) {

e.printStackTrace();

}

return ret;

}

}

2.登录

客户端提交过来一个用户名,一个密码,jsp连接数据库查询,如果两者都符合,返回登录成功信息,否则返回登录失败信息。(我这里用权限来代表,当权限>-1即为登录成功)。

3.注册

客户端同样提交过来一个用户名,一个密码,但是需要首先查询数据库,看看该用户名是否已被注册,若没有,则执行数据库插入操作。成功则返回注册成功,否则返回失败信息。

//****服务代码****

public class StartService {

/**

* 登录方法

* @param username

* @param password

* @return 登录成功与否

*/

public HashMap login(String username, String password) {

HashMap hashMap = new HashMap();

// 获取Sql查询语句

String logSql = "select perssion from userinfo where username ='"

+ username + "' and password ='" + password + "'";

System.out.println(logSql);

// 获取DB对象

DBManager sql = DBManager.createInstance();

sql.connectDB();

hashMap.put("permission", "-1");

hashMap.put("username", username);

// 操作DB对象

try {

ResultSet rs = sql.executeQuery(logSql);

if (rs.next()) {

hashMap.put("permission", rs.getInt(1) + "");

System.out.print("权限===" + rs.getInt(1) + "\t");

sql.closeDB();

return hashMap;

}

} catch (SQLException e) {

e.printStackTrace();

}

sql.closeDB();

return hashMap;

}

/**

* 注册方法

* @param username

* @param password

* @return 注册成功与否

*/

public HashMap register(String username, String password) {

HashMap hashMap = new HashMap();

hashMap.put("username", username);

hashMap.put("msg", "notok");

if (this.namerepeat(username)) {

hashMap.put("msg", "rename");

} else {

// 获取Sql查询语句

String regSql = "insert into userinfo(username,password) values('"

+ username + "','" + password + "')";

System.out.println(regSql);

// 获取DB对象

DBManager sql = DBManager.createInstance();

sql.connectDB();

int ret = sql.executeUpdate(regSql);

if (ret != 0) {

hashMap.put("msg", "ok");

sql.closeDB();

return hashMap;

}

sql.closeDB();

}

return hashMap;

}

/**

* 检测该账户是否已经注册

*

* @param username

* @return 注册状态

*/

public Boolean namerepeat(String username) {

String checkSql = "select use

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值