A306基于安卓的点名系统开通(Android studio毕业设计,Android课程设计)

 博主介绍:本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮助到您;

🍅文章末尾获取源码下载方式🍅

功能演示: 

1:后台演示

2:客户端演示

一、项目介绍

客户端:
1:老师登录:老师可以使用添加的账号信息进行登录;
2:班级信息:查看班级列表信息;
3:点名签到:老师可以对学生的出勤信息进行操作;
4:统计信息:查看学生每天的出勤统计信息;
5:个人信息:查看自己的个人信息以及对密码进行修改,查看收藏信息

后台管理员:
1:学生信息:添加和查看学生信息
2:老师信息:添加和查看老师信息
3:班级信息:添加和查看班级信息

二、运行环境

1:客户端使用Android stuido进行开发;
2:服务端后台使用Myeclipse2014进行开发;
3:mysql数据库进行数据存储;
4:需要jdk1.7以上
5:使用雷电模拟器或者Androidstuio自带的模拟器进行运行

三、使用技术

总体设计逻辑和思路:
1:先设计数据库表文件
2:写服务端jsp页面以及写api接口给客户端提供数据
3:完成后台服务端的数据交互,也就是jsp页面数据的存储和显示
4:进行客户端页面的开发;
5:进行客户端对api接口的调用,也就是获取数据库的数据以及在客户端进行显示

移动端:
1:使用android原生控件以及xml布局文件来完成界面的显示
2:使用java代码完成功能的数据和逻辑交互
3:使用http网络请求完成数据的请求;
4:使用json数据解析完成客户端数据的回调和显示

服务端后台:
1:使用mysql完成数据的存储
2:使用jdbc完成数据库和代码的逻辑交互
3:使用jsp完成网页数据的显示
4:使用java代码完成api接口的编写以及以及数据的回调

四、数据库设计

/*
Navicat MySQL Data Transfer

Source Server         : mysql
Source Server Version : 50537
Source Host           : localhost:3306
Source Database       : signdb

Target Server Type    : MYSQL
Target Server Version : 50537
File Encoding         : 65001

Date: 2017-03-31 11:45:39
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `classmsg`
-- ----------------------------
DROP TABLE IF EXISTS `classmsg`;
CREATE TABLE `classmsg` (
  `cmId` int(50) NOT NULL AUTO_INCREMENT,
  `cmName` varchar(100) NOT NULL,
  `cmTime` varchar(100) NOT NULL,
  PRIMARY KEY (`cmId`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of classmsg
-- ----------------------------
INSERT INTO `classmsg` VALUES ('11', '计算机系一班', '2017-03-30 11:15');
INSERT INTO `classmsg` VALUES ('12', '计算机系二班', '2017-03-30 11:15');
INSERT INTO `classmsg` VALUES ('13', '数学系一班', '2017-03-30 11:16');
INSERT INTO `classmsg` VALUES ('14', '数学系二班', '2017-03-30 11:16');
INSERT INTO `classmsg` VALUES ('15', '英语系一班', '2017-03-30 11:16');
INSERT INTO `classmsg` VALUES ('16', '英语系二班', '2017-03-30 11:16');
INSERT INTO `classmsg` VALUES ('18', '软件系一班', '2017-03-30 15:09');
INSERT INTO `classmsg` VALUES ('19', '软件系二班', '2017-03-30 15:09');
INSERT INTO `classmsg` VALUES ('20', '软件系三班', '2017-03-30 15:09');
INSERT INTO `classmsg` VALUES ('21', 'android一班', '2017-03-31 11:32');
INSERT INTO `classmsg` VALUES ('22', '安卓一班', '2017-03-31 11:40');

-- ----------------------------
-- Table structure for `sign`
-- ----------------------------
DROP TABLE IF EXISTS `sign`;
CREATE TABLE `sign` (
  `signId` int(50) NOT NULL AUTO_INCREMENT,
  `signTeacherId` varchar(50) NOT NULL,
  `signStudentId` varchar(50) NOT NULL,
  `signClassId` varchar(50) NOT NULL,
  `signTime` varchar(100) NOT NULL,
  `signType` varchar(50) NOT NULL,
  PRIMARY KEY (`signId`)
) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of sign
-- ----------------------------
INSERT INTO `sign` VALUES ('42', '4', '6', '11', '2017-03-29', '1');
INSERT INTO `sign` VALUES ('43', '4', '6', '11', '2017-03-30', '1');
INSERT INTO `sign` VALUES ('44', '4', '7', '11', '2017-03-30', '1');
INSERT INTO `sign` VALUES ('45', '4', '8', '11', '2017-03-30', '1');
INSERT INTO `sign` VALUES ('46', '4', '9', '11', '2017-03-30', '2');
INSERT INTO `sign` VALUES ('47', '4', '11', '11', '2017-03-30', '2');
INSERT INTO `sign` VALUES ('53', '8', '21', '22', '2017-03-31', '1');
INSERT INTO `sign` VALUES ('54', '8', '22', '22', '2017-03-31', '2');
INSERT INTO `sign` VALUES ('55', '8', '23', '22', '2017-03-31', '1');

-- ----------------------------
-- Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `sId` int(50) NOT NULL AUTO_INCREMENT,
  `sNo` varchar(100) NOT NULL,
  `sName` varchar(100) NOT NULL,
  `sClassId` varchar(50) NOT NULL,
  `sClassName` varchar(100) NOT NULL,
  `sTime` varchar(100) NOT NULL,
  PRIMARY KEY (`sId`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('6', 'Stu20170330143011', '小王', '11', '计算机系一班', '2017-03-30 14:30');
INSERT INTO `student` VALUES ('7', 'Stu20170330143254', '小张', '11', '计算机系一班', '2017-03-30 14:32');
INSERT INTO `student` VALUES ('8', 'Stu20170330143307', '小李', '11', '计算机系一班', '2017-03-30 14:33');
INSERT INTO `student` VALUES ('9', 'Stu20170330143312', '小明', '11', '计算机系一班', '2017-03-30 14:33');
INSERT INTO `student` VALUES ('11', 'Stu20170330143328', '小花', '11', '计算机系一班', '2017-03-30 14:33');
INSERT INTO `student` VALUES ('12', 'Stu20170330143334', '小不点', '11', '计算机系一班', '2017-03-30 14:33');
INSERT INTO `student` VALUES ('13', 'Stu20170330143339', '小可爱', '11', '计算机系一班', '2017-03-30 14:33');
INSERT INTO `student` VALUES ('14', 'Stu20170330143347', '小学生', '11', '计算机系一班', '2017-03-30 14:33');
INSERT INTO `student` VALUES ('15', 'Stu20170330180245', '小J', '11', '计算机系一班', '2017-03-30 18:02');
INSERT INTO `student` VALUES ('16', 'Stu20170330180251', '小W', '11', '计算机系一班', '2017-03-30 18:02');
INSERT INTO `student` VALUES ('17', 'Stu20170330180256', 'xaiol', '11', '计算机系一班', '2017-03-30 18:02');
INSERT INTO `student` VALUES ('21', 'Stu20170331114052', '小C', '22', '安卓一班', '2017-03-31 11:40');
INSERT INTO `student` VALUES ('22', 'Stu20170331114059', '小A', '22', '安卓一班', '2017-03-31 11:40');
INSERT INTO `student` VALUES ('23', 'Stu20170331114108', '小B', '22', '安卓一班', '2017-03-31 11:41');

-- ----------------------------
-- Table structure for `teacher`
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
  `tId` int(50) NOT NULL AUTO_INCREMENT,
  `tNo` varchar(100) NOT NULL,
  `tName` varchar(100) NOT NULL,
  `tTime` varchar(100) NOT NULL,
  `tPswd` varchar(100) NOT NULL,
  PRIMARY KEY (`tId`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('4', 'Tea20170330143224', '王老师', '2017-03-30 14:32', '123456');
INSERT INTO `teacher` VALUES ('5', 'Tea20170330143230', '李老师', '2017-03-30 14:32', '123456');
INSERT INTO `teacher` VALUES ('6', 'Tea20170330143235', '张老师', '2017-03-30 14:32', '123456');
INSERT INTO `teacher` VALUES ('8', 'Tea20170331114121', '安卓老师', '2017-03-31 11:41', '123456');

五、部分代码

1:考勤结果

public class SignResultActivity extends BaseActivity {
	// 标题
	private TextView mTvTitle;
	// 返回
	private ImageView mIvBack;
	private SignModel signModel;
	private TextView mtvTotalStudent;
	private TextView mtvOk;
	private TextView mtvNo;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_sign_result);
		initWidget();
		initData();
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.mIvBack:
			finish();
			break;

		}
	}

	@Override
	public void initWidget() {
		mtvTotalStudent = (TextView) findViewById(R.id.mtvTotalStudent);
		mtvOk = (TextView) findViewById(R.id.mtvOk);
		mtvNo = (TextView) findViewById(R.id.mtvNo);
		signModel = (SignModel) this.getIntent().getSerializableExtra("msg");

		mIvBack = (ImageView) findViewById(R.id.mIvBack);
		mTvTitle = (TextView) findViewById(R.id.mTvTitle);
		mTvTitle.setText("考勤结果");
		mIvBack.setVisibility(View.VISIBLE);
		mIvBack.setOnClickListener(this);
	}

	@Override
	public void initData() {
		MessageAction(true);
	}

	private void MessageAction(boolean isShow) {
		AjaxParams params = new AjaxParams();
		params.put("action_flag", "listQuerySignMessage");
		params.put("signTime", signModel.getSignTime());
		httpPost(Consts.URL + Consts.APP.ClassAction, params, Consts.actionId.resultFlag, isShow, "正在加载...");
	}


	@Override
	protected void callBackSuccess(ResponseEntry entry, int actionId) {
		super.callBackSuccess(entry, actionId);

		switch (actionId) {
		case Consts.actionId.resultFlag:
			SignResultModel signResultModel = mGson.fromJson(entry.getData(), SignResultModel.class);
			
			
			mtvTotalStudent.setText("总人数:"+signResultModel.getSignTotal()+"人");
			mtvOk.setText("出勤:"+signResultModel.getSignOk()+"人 ");
			mtvNo.setText("缺勤:"+(Integer.valueOf(signResultModel.getSignTotal())-Integer.valueOf(signResultModel.getSignOk()))+"人");
			break;
		}

	}

	@Override
	protected void callBackAllFailure(String strMsg, int actionId) {
		super.callBackAllFailure(strMsg, actionId);
		ToastUtil.show(SignResultActivity.this, strMsg);

	}


}
2:考勤日期

public class SignDateActivity extends BaseActivity {
	// 标题
	private TextView mTvTitle;
	// 返回
	private ImageView mIvBack;
	private TextView mIvStu;
	private ListView mListMessage;
	private List<SignModel> list_result = new ArrayList<SignModel>();
	private LinearLayout mllNomessage;
	private ClassModel classModel;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_im);
		initWidget();
		initData();
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.mIvBack:
			finish();
			break;
		case R.id.mIvStu:
			Intent intent = new Intent(this, ImAddActivity.class);
			startActivity(intent);
			break;

		}
	}

	@Override
	public void initWidget() {
		mIvStu = (TextView) findViewById(R.id.mIvStu);
		mIvStu.setText("添加");
		mIvStu.setVisibility(View.GONE);
		mllNomessage = (LinearLayout) findViewById(R.id.mllNomessage);
		mListMessage = (ListView) findViewById(R.id.mListMessage);

		mIvBack = (ImageView) findViewById(R.id.mIvBack);
		mTvTitle = (TextView) findViewById(R.id.mTvTitle);
		mTvTitle.setText("考勤日期");
		mIvBack.setVisibility(View.VISIBLE);
		mIvBack.setOnClickListener(this);
		mIvStu.setOnClickListener(this);
	}

	@Override
	public void initData() {
		classModel=  (ClassModel)this.getIntent().getSerializableExtra("msg");
		MessageAction(true);
		mListMessage.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
				Intent intent = new Intent(SignDateActivity.this, SignResultActivity.class);
				intent.putExtra("msg", list_result.get(pos));
				SignDateActivity.this.startActivity(intent);
			}
		});
	}

	private void MessageAction(boolean isShow) {
		AjaxParams params = new AjaxParams();
		params.put("action_flag", "listSignMessage");
		params.put("signClassId", classModel.getCmId());
		httpPost(Consts.URL + Consts.APP.ClassAction, params, Consts.actionId.resultFlag, isShow, "正在加载...");
	}

	@Override
	protected void callBackSuccess(ResponseEntry entry, int actionId) {
		super.callBackSuccess(entry, actionId);

		switch (actionId) {
		case Consts.actionId.resultFlag:
			if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {

				String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);
				if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
					mllNomessage.setVisibility(View.GONE);
					list_result = mGson.fromJson(entry.getData(), new TypeToken<List<SignModel>>() {
					}.getType());
					DateAdapter categoryAdapter = new DateAdapter(SignDateActivity.this, list_result);
					mListMessage.setAdapter(categoryAdapter);
				} else {
					mllNomessage.setVisibility(View.VISIBLE);
				}
			}
			break;
		default:
			break;
		}

	}

	@Override
	protected void callBackAllFailure(String strMsg, int actionId) {
		super.callBackAllFailure(strMsg, actionId);
		ToastUtil.show(SignDateActivity.this, strMsg);

	}


	
}

六、浏览更多Android毕业设计

毕业设计-基于android的租房信息发布平台的APP_信息发布app源码_Android毕业设计源码的博客-CSDN博客

毕业设计-基于android选课系统的设计与实现_android学生选课系统_Android毕业设计源码的博客-CSDN博客

毕业设计之校园一卡通管理系统的设计与实现_一卡通管理系统实现_Android毕业设计源码的博客-CSDN博客

基于Android的校园二手闲置物品交易系统设计与实现_基于android的二手交易平台_Android毕业设计源码的博客-CSDN博客

基于androidstudio校园快递APP系统的设计与实现_android studio论文_Android毕业设计源码的博客-CSDN博客

基于android的商城购物定制APP_安卓开发购物app_Android毕业设计源码的博客-CSDN博客

更多毕业设计可以浏览我的个人主页哦!

七、源码下载

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

https://download.csdn.net/download/u014388322/88180729

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android毕业设计源码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值