目 录
1 绪论 1
1.1 选题背景 1
1.2 研究现状 2
1.3 研究意义 3
1.4 研究内容 3
2 相关的理论和技术 4
2.1 JAVA技术与安卓介绍 4
2.2 Android的开发 5
2.3 Android常用的列表组件 5
2.4 Android所需知识的理解 8
2.4.1 自定义控件 8
2.4.2 进一步说明 10
3 系统分析 12
3.1系统可行性分析 12
3.1.1 技术的可行性 12
3.1.2 操作可行性 12
3.1.3 经济可行性 12
3.2 需求分析及其重要性 13
3.3 总体需求 15
3.4 功能需求 15
3.5 开发运行环境需求 16
3.6 性能需求 17
3.7 数据流图 18
4 系统总体设计 20
4.1 概述 20
4.2 设计原则 20
4.3 系统功能结构图 21
4.4 ER图设计 22
4.5 数据库表设计 22
5 系统的实现 24
5.1 软件界面设计与实现 24
5.1.1 操作主界面 25
5.1.2 员工信息管理界面 25
5.1.3 考勤管理界面 26
5.1.4 考勤记录界面 26
5.1.5 员工信息修改界面 27
5.2 员工信息管理 27
5.3 考勤管理 29
5.4 考勤统计 32
6 系统的测试 37
6.1 测试方案设计 37
6.1.1 测试策略 37
6.1.2 测试方法 38
6.1.3 测试安排 38
6.2 测试用例构建 38
6.2.1 测试用例编写约定 38
6.2.2 测试用例设计 39
总 结 40
参考文献 42
致 谢 43
外文文献 44
中文翻译 50
3.3 总体需求
公司员工的考勤管理系统,简单来说就是实现一个考勤功能,能够查看考勤的信息等等就可以,主要有以下几个基本要求:
1.首先有一个增,删,改,查员工信息的功能模块。
2.然后,对现有员工的出勤状态进行选择和保存的功能模块。
3.最后就是对所有的考勤记录进行增,删,改,查的功能模块。
3.4 功能需求
需求分析,字面上就是对用户的需求进行分析。意思很明确,就是说需求文档要能够准确的反映出客户心里到底想要什么,开发者是否能够清楚的理解,这将直接影响项目开发的全过程,同时也对系统的使用产生影响。需求分析的关键在于对广大用户的访问和问卷的采集和分析,尤其是对于用户个人信息数据的具体管理方式,以及对信息数据的保密性工作的保障的详细要求。用户的专业知识相对缺乏的计算机相关知识,并能判断计算机是否可以为自己做,什么不该做,所以不是很准确的表达自己的需求,但他们的最终用户,他们的需求是最终需求,但技术人员缺乏用户,也不是很容易理解到用户的实际需要,有时也可能误解到用户的需求;新的硬件和软件技术的出现将使系统进行更改的业务需求。所以,有必要使用某些方法以确保该用户可以与用户通信以确定用户的最终需求。通过与用户的通信时,当前系统的主要问题的理解。
需求分析是分析和抽取该使用者的信息,来描述的功能和性能。它是软件开发过程的初始阶段,其基本任务是了解用户的需求,决定了必须完成哪些工作,这样才能对索要开发的系统有了明确的需求。
基于安卓的公司员工考勤管理系统,最基本的要求是能够在Android手机上安装运行,其次就是对一些信息数据的综合处理。
这个系统主要适用于公司中对员工考勤的管理员或主管等,用来查看所有员工的信息,每个员工近期的工作状态,查询每一个公司员工的上班的情况,反映出每个员工的职业基本素养。有了这样一款使用方便、随身携带的软件,在很大程度上,能够提高公司内部各个部门之间的考勤效果。具体实现的功能如下:
(1)手机软件的主界面:拥有一个图形化的菜单功能。
(2)对公司员工信息的管理:在这个功能模块中,可以查看到员工的工号,员工的名字,员工的性别等属性,同时可以对公司每一个员工的信息进行添加、修改、删除和查询。
(3) 对公司员工的考勤功能:首先要有一个确定的考勤时间、然后是可以选择指定的员工信息、选择员工的考勤状态等。
(4) 考勤记录信息的管理:模糊查询,可以通过选择起始时间,截止时间,然后查看在这两个时间之间的考勤信息。也可以精确查询,就是用员工的姓名来查。
总体分布如图2-1所示:
图3-1 总体功能需求图
良好的用户体验对软件来说很重要,图形化用户界面是使用者和软件之间进行交互的重要媒介。最直接接触的东西,包括是否能够让客户很轻松。
3.5 开发运行环境需求
1.硬件开发环境需求:PC机
CPU :2.0 GHz以上
内存 :1G以上
硬盘 :80G以上
2.软件环境需求:
操作系统:Windows7及其以上版本
开发环境:jdk1.8.0_45
运行环境:jre1.8.0_45
开发工具:eclipse
运行工具:android 4.4及其以上版本
开发语言:java
考勤统计模块中的主要功能,就是对已经存入数据库中的考勤信息进行查询并显示出来。他有三种查询方式,模糊查询,可以通过选择起始时间,截止时间,然后查看在这两个时间之间的考勤信息。也可以精确查询,就是用员工的姓名来查。还有就是根据考勤状态来查询,最后就会得出相关的考勤情况。
public class QueryActivity extends Activity {
private Button btnAlter, btnReturn, btnQuery,btnQuery2;
private int position, intrid;
private TextView name,date,statue,rid,sdate,edate,edtname;
private Calendar c;
private String strname,strdate,strstatue;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.record);
rid = (TextView)findViewById(R.id.RID);
name = (TextView)findViewById(R.id.name);
statue = (TextView)findViewById(R.id.statue);
listview = (ListView) findViewById(R.id.lvstudent);
sdate = (TextView)findViewById(R.id.edtSdate);
edate = (TextView)findViewById(R.id.edtEdate);
edtname = (TextView)findViewById(R.id.edtName);
String[] from = { "_id", "name", "date", "statue" };
int[] to = { R.id.RID, R.id.name, R.id.date, R.id.statue };
listview.setAdapter(adapter);
position = 0;
listview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> aeaf, View afwef, int awefqw,
long qwef) {
position = afwef;
Cursor item = (Cursor ) listview.getItemAtPosition(position);
intrid = (int) awefqw;
strname = item.getString(item.getColumnIndex("name"));
strdate = item.getString(item.getColumnIndex("date"));
strstatue = item.getString(item.getColumnIndex("statue"));
}
});
sdate.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View qwefq) {
showDialog(0);
}
});
edate.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View qewqw) {
showDialog(1);
}
});
public void onClick(View v) {
String d1 = sdate.getText().toString();
String d2 = edate.getText().toString();
Cursor c = helpter.query4(d1,d2);
String[] from = { "_id", "name", "date", "statue" };
int[] to = { R.id.RID, R.id.name, R.id.date, R.id.statue };
listview.setAdapter(adapter);
}
});
btnQuery2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
String sname = edtname.getText().toString();
Cursor c = helpter.query3(sname);
String[] from = { "_id", "name", "date", "statue" };
int[] to = { R.id.RID, R.id.name, R.id.date, R.id.statue };
listview.setAdapter(adapter);
}
});
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(QueryActivity.this, RollCallActivity.class);
QueryActivity.this.startActivity(intent);
finish();
}
});
btnAlter = (Button)findViewById(R.id.btnAlter);
btnAlter.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("rid", intrid);
intent.putExtra("name", strname);
intent.putExtra("date", strdate);
intent.putExtra("statue", strstatue);
intent.setClass(QueryActivity.this,
AlterRecordActivity.class);
QueryActivity.this.startActivity(intent);
finish();
}
});
}
}