目录
1 前言 1
1.1选题背景 1
1.2可行性分析 1
2 需求分析 3
2.1需求分析目标及任务 3
2.2需求分析组织形式 3
2.3需求分析信息整理 3
2.4研发叙述说明 4
2.5研发标准与规范 4
3 概要设计 5
3.1系统功能 5
3.2系统功能 6
3.3系统主要流程 6
4 数据库设计 8
4.1 数据库Mysql简介 8
4.2 数据库设计 8
5 详细设计 15
5.1考勤记录创建模块实现 15
5.2条形码扫描模块实现 16
5.3考勤数据模块的实现 17
5.4班级考勤数据模块的实现 19
6 系统的测试运行与维护 21
6.1系统的测试 21
6.2系统的维护 21
7 总结 23
附录 24
参考文献 34
致谢 35
2 需求分析
考勤系统对学校加强学生管理有着极其重要的作用,就一般的学校来说,它的设计内容非常复杂而且繁多,而且设计的模块也很多。
2.1需求分析目标及任务
1.基于Android的考勤系统的主要作用。
2.齐全,准确的找出本系统全部的功能,性能,限制。
3.找出全部的输入流,输出流。
2.2需求分析组织形式
1.通过调查研究,对本系统的功能进行分析。
2.通过访问,了解老师及教务处对本系统的需求情况。
2.3需求分析信息整理
下面是考勤系统设计的业务流程分析,原始的数据是某次考勤的学生考勤记录信息,系统要求统计学生考勤的记录信息,并以班级为单位根据计算出某次考勤的缺勤学生名单、缺勤率及班级考勤曲线图,考勤数据流如图2-1所示:
图2-1 考勤系统数据流
2.4研发叙述说明
本系统定位于学校等教育单位,C/S架构;服务端平台选择Linux系统,移动客户端平台选择Android系统。系统性质为MIS(管理信息系统)。
系统功能性需求
(1)教师方面
通过手机客户端扫描学生证条形码,而不需要再叫号登记考勤,方便了考勤的过程,更方便教师统计关于自己课程方面考勤数据统计,以达到可以及时制定、调整自己的教学计划和方案。
(2)学生方面
学生参与考勤只需要携带图书证即可,避免了考勤时,代同学签到、喊到的情况,可以极大提高学生的出勤率。
(3)教务处方面
可以通过每天各位老师创建的考勤记录,及时得知每个学生、班级的缺勤情况,从而能更快的通知学院、本文转载自http://www.biyezuopin.vip/onews.asp?id=14629辅导员对缺勤率大的班级、经常缺勤的学生,进行教育、谈心。
2.5研发标准与规范
制定界面设计标准规范的目的是为了规范和统一软件界面设计制定软件界面设计标准与规范。
首先考虑标准化,在标准化的基础上进行界面的美工设计。
简单易用、简洁明了、兼容性好、标准、规范。
变量、方法名、类名采用驼峰写法。
package com.example.qr_codescan;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends Activity {
private final static int SCANNIN_GREQUEST_CODE = 1;
public Handler mChildHandler;
/**
* 显示扫描结果
*/
private TextView mTextView ;
/**
* 显示扫描拍的图片
*/
private ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.result);
mImageView = (ImageView) findViewById(R.id.qrcode_bitmap);
//点击按钮跳转到二维码扫描界面,这里用的是startActivityForResult跳转
//扫描完了之后调到该界面
Button mButton = (Button) findViewById(R.id.button1);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, MipcaActivityCapture.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
}
});
}
/**
* 登陆操作
*/
protected void Login(Bundle savedInstanceState){
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case SCANNIN_GREQUEST_CODE:
if(resultCode == RESULT_OK){
Bundle bundle = data.getExtras();
final String getStudentNumber = bundle.getString("result");
Thread thread = new Thread(){
public void run(){
sendGet("http://121.14.161.145:8019/test.php", getStudentNumber);
}
};
try{
thread.start();
thread.join();
}catch(Exception e){
e.printStackTrace();
}
//显示扫描到的内容
mTextView.setText("学生学号:"+getStudentNumber);
//显示
mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));
}
break;
}
}
public static String sendGet(String url, String param) {
String Msg = ""; //返回信息
Log.e("Error", "start thread");
//先将参数放入List,再对参数进行URL编码
List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("do", param));
//对参数编码
String allParam = URLEncodedUtils.format(params, "UTF-8");
//baseUrl
String baseUrl = url;
//将URL与参数拼接
HttpGet getMethod = new HttpGet(baseUrl + "?" + allParam);
HttpClient httpClient = new DefaultHttpClient();
try {
HttpResponse response = httpClient.execute(getMethod); //发起GET请求
int code = response.getStatusLine().getStatusCode();
if(code == 200){
InputStream in = response.getEntity().getContent();
Msg = in.toString();
}else{
Msg = "error";
}
} catch (ClientProtocolException e) {
Log.e("Err", e.toString());
} catch (IOException e) {
Log.e("Error", e.toString());
}
return Msg;
}
}