博主介绍:本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮助到您;
🍅文章末尾获取源码下载方式🍅
源码下载以及详细的配置说明
一、项目介绍
学生选课,学生注册登录、老师按名字查询学生、老师查询全部学生信息、老师登录注册
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 : mydb
Source Server Version : 50537
Source Host : localhost:3306
Source Database : attendancedb
Target Server Type : MYSQL
Target Server Version : 50537
File Encoding : 65001
Date: 2018-11-07 19:23:44
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for coursemsg
-- ----------------------------
DROP TABLE IF EXISTS `coursemsg`;
CREATE TABLE `coursemsg` (
`courseId` int(50) NOT NULL AUTO_INCREMENT,
`courseName` varchar(255) DEFAULT NULL,
`courseAddress` varchar(255) DEFAULT NULL,
`courseTime` varchar(200) DEFAULT NULL,
`courseMessage` varchar(1500) DEFAULT NULL,
`courseTeaId` varchar(100) DEFAULT NULL,
`courseTeaName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`courseId`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of coursemsg
-- ----------------------------
INSERT INTO `coursemsg` VALUES ('10', '大学英语', '教学楼一号楼101室', '2018-11-07 16:30', '这次课程的重点是帮助大家刚好的学习好这门课程,希望大家踊跃报名参加学习和讨论;', '114', '王老师');
INSERT INTO `coursemsg` VALUES ('11', '计算机基础', '教学楼一号楼101室', '2018-11-07 17:02', '这次课程的重点是帮助大家刚好的学习好这门课程,希望大家踊跃报名参加学习和讨论;', '114', '王老师');
INSERT INTO `coursemsg` VALUES ('12', '编程基础', '教学楼一号楼101室', '2018-11-08 17:03', '这次课程的重点是帮助大家刚好的学习好这门课程,希望大家踊跃报名参加学习和讨论;', '114', '王老师');
INSERT INTO `coursemsg` VALUES ('13', '大学英语101', '教学楼一号楼101室', '2018-11-07 19:17', '这次课程的重点是帮助大家刚好的学习好这门课程,希望大家踊跃报名参加学习和讨论;', '117', '张老师');
INSERT INTO `coursemsg` VALUES ('14', '大学数学', '教学楼一号楼101室', '2018-11-07 21:17', '这次课程的重点是帮助大家刚好的学习好这门课程,希望大家踊跃报名参加学习和讨论;', '117', '张老师');
-- ----------------------------
-- Table structure for electivetb
-- ----------------------------
DROP TABLE IF EXISTS `electivetb`;
CREATE TABLE `electivetb` (
`electiveId` int(50) NOT NULL AUTO_INCREMENT,
`electiveCourseId` varchar(50) DEFAULT NULL,
`electiveUserId` varchar(100) DEFAULT NULL,
`electiveUserName` varchar(255) DEFAULT NULL,
`electiveScore` varchar(255) DEFAULT NULL,
`electiveTime` varchar(100) DEFAULT NULL,
PRIMARY KEY (`electiveId`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of electivetb
-- ----------------------------
INSERT INTO `electivetb` VALUES ('1', '11', '113', '杨同学', '99', '2018-11-07 17:29');
INSERT INTO `electivetb` VALUES ('2', '12', '113', '杨同学', '69', '2018-11-07 17:29');
INSERT INTO `electivetb` VALUES ('3', '11', '115', '张同学', '95', '2018-11-07 17:40');
INSERT INTO `electivetb` VALUES ('4', '12', '115', '张同学', '88', '2018-11-07 17:40');
INSERT INTO `electivetb` VALUES ('5', '10', '113', '杨同学', null, '2018-11-07 18:07');
INSERT INTO `electivetb` VALUES ('6', '13', '116', '小明同学', '99', '2018-11-07 19:18');
INSERT INTO `electivetb` VALUES ('7', '13', '113', '杨同学', '60', '2018-11-07 19:18');
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`userId` int(255) NOT NULL AUTO_INCREMENT,
`userName` varchar(200) CHARACTER SET utf8 NOT NULL,
`userPhone` varchar(100) CHARACTER SET utf8 NOT NULL,
`userPswd` varchar(200) CHARACTER SET utf8 NOT NULL,
`userType` varchar(255) DEFAULT NULL,
`userNo` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
`userTime` varchar(300) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=118 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('113', '杨同学', '15249243002', '123456', '2', 'Stu20181107144701', '2018-11-07 14:47');
INSERT INTO `user` VALUES ('114', '王老师', '15249241116', '123456', '1', 'Tea20181107144720', '2018-11-07 14:47');
INSERT INTO `user` VALUES ('115', '张同学', '15249248989', '123456', '2', 'Stu20181107174036', '2018-11-07 17:40');
INSERT INTO `user` VALUES ('116', '小明同学', '15249241111', '123456', '2', 'Stu20181107191608', '2018-11-07 19:16');
INSERT INTO `user` VALUES ('117', '张老师', '15249242222', '123654', '1', 'Tea20181107191627', '2018-11-07 19:16');
五、部分代码
1:课程详情
public class TeaLookCourseMessageActivity extends BaseActivity {
// title
private TextView mTvTitle;
// 返回
private ImageView mIvBack;
// 查询按钮
private TextView mtvtitle;
private TextView mtvPhone;
private TextView mtvCompanyName;
private TextView mtvcontentPostion;
private List<CourseLookUserModel> listMsg = new ArrayList<CourseLookUserModel>();
private TextView mIvStu;
private CourseModel courseModel;
private ListviewForScrollView mListMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tealookcourse_msg);
}
@Override
public void initWidget() {
mListMessage = (ListviewForScrollView) findViewById(R.id.mListMessage);
mtvPhone = (TextView) findViewById(R.id.mtvPhone);
mtvCompanyName = (TextView) findViewById(R.id.mtvCompanyName);
mtvcontentPostion = (TextView) findViewById(R.id.mtvcontentPostion);
mIvStu = (TextView) findViewById(R.id.mIvStu);
mIvStu.setOnClickListener(this);
mIvStu.setVisibility(View.GONE);
mtvtitle = (TextView) findViewById(R.id.mtvtitle);
mIvBack = (ImageView) findViewById(R.id.mIvBack);
mTvTitle = (TextView) findViewById(R.id.mTvTitle);
mTvTitle.setText("课程详情");
mIvBack.setVisibility(View.VISIBLE);
mIvBack.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.mIvBack:
TeaLookCourseMessageActivity.this.finish();
break;
}
}
@Override
public void initData() {
courseModel = (CourseModel) this.getIntent().getSerializableExtra("msg");
mtvtitle.setText(courseModel.getCourseName());
mtvPhone.setText("上课时间:" + courseModel.getCourseTime());
mtvCompanyName.setText("上课地点:" + courseModel.getCourseAddress());
mtvcontentPostion.setText(" " + courseModel.getCourseMessage());
addElective(true);
mListMessage.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(TeaLookCourseMessageActivity.this, ScoreCreateActivity.class);
intent.putExtra("msg",listMsg.get(position));
startActivity(intent);
}
});
}
private void addElective(boolean isShow) {
AjaxParams params = new AjaxParams();
params.put("action_flag", "listCourseUserLook");
params.put("electiveCourseId", courseModel.getCourseId() + "");
httpPost(Consts.URL + Consts.APP.CourseAction, params, Consts.actionId.resultFlag, isShow, "正在提交...");
}
@Override
protected void callBackSuccess(ResponseEntry entry, int actionId) {
super.callBackSuccess(entry, actionId);
if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {
String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);
if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
listMsg = mGson.fromJson(entry.getData(), new TypeToken<List<CourseLookUserModel>>() {
}.getType());
UserListAdapter userListAdapter = new UserListAdapter(TeaLookCourseMessageActivity.this, listMsg);
mListMessage.setAdapter(userListAdapter);
} else {
}
}
}
@Override
protected void onResume() {
super.onResume();
initWidget();
initData();
}
}
2:学生信息
public class StudentMessageActivity extends BaseActivity {
// 标题
private TextView mTvTitle;
// 返回
private ImageView mIvBack;
private Button mCQ;
private Button mCD;
private Button mQJ;
private Button mKK;
private ImageView stuImage;
private TextView stuName;
private TextView stuTime;
private Button courseMessage;
private ImageView mIvStu;
private StudentModel studentModel;
private List<CourseModel> listMsg = new ArrayList<CourseModel>();
private DialogListMsg dialogListMsg;
private int posIndex=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_student_message);
initWidget();
initData();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.mIvBack:
finish();
break;
case R.id.mExit:
Intent intent = new Intent(StudentMessageActivity.this, LoginActivity.class);
startActivity(intent);
finish();
break;
case R.id.mCQ:
AttendanceAction(true,1);
break;
case R.id.mCD:
AttendanceAction(true,2);
break;
case R.id.mQJ:
AttendanceAction(true,3);
break;
case R.id.mKK:
AttendanceAction(true,4);
break;
case R.id.courseMessage:
dialogListMsg.Show();
break;
}
}
@Override
public void initWidget() {
dialogListMsg = new DialogListMsg(this);
dialogListMsg.setTitle().setText("请选择课程");
mIvStu = (ImageView) findViewById(R.id.mIvStu);
stuImage = (ImageView) findViewById(R.id.stuImage);
stuName = (TextView) findViewById(R.id.stuName);
stuTime = (TextView) findViewById(R.id.stuTime);
mCQ = (Button) findViewById(R.id.mCQ);
mCD = (Button) findViewById(R.id.mCD);
mQJ = (Button) findViewById(R.id.mQJ);
mKK = (Button) findViewById(R.id.mKK);
courseMessage = (Button) findViewById(R.id.courseMessage);
mIvBack = (ImageView) findViewById(R.id.mIvBack);
mTvTitle = (TextView) findViewById(R.id.mTvTitle);
mIvStu.setVisibility(View.VISIBLE);
mIvBack.setVisibility(View.VISIBLE);
mIvBack.setOnClickListener(this);
mTvTitle.setText("学生信息");
mIvStu.setOnClickListener(this);
mCQ.setOnClickListener(this);
mCD.setOnClickListener(this);
mQJ.setOnClickListener(this);
mKK.setOnClickListener(this);
courseMessage.setOnClickListener(this);
}
@Override
public void initData() {
userAction(false);
studentModel = (StudentModel)this.getIntent().getSerializableExtra("msg");
stuName = (TextView) findViewById(R.id.stuName);
stuTime = (TextView) findViewById(R.id.stuTime);
stuName.setText(studentModel.getStudentName());
stuTime.setText(studentModel.getStudentTime());
if(!TextUtils.isEmpty(studentModel.getStudentImg())){
Picasso.with(this).load(Consts.URL_IMAGE+studentModel.getStudentImg()).placeholder(R.drawable.default_drawable_show_pictrue)
.into(stuImage);
}
dialogListMsg.show_listview().setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
posIndex = position;
courseMessage.setText(listMsg.get(position).getCourseName());
dialogListMsg.Close();
}
});
dialogListMsg.submit_no().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialogListMsg.Close();
}
});
}
private void userAction(boolean isShow) {
AjaxParams params = new AjaxParams();
params.put("action_flag", "listPhoneMessage");
httpPost(Consts.URL + Consts.APP.CourseAction, params, Consts.actionId.resultCode, isShow, "正在加载...");
}
private void AttendanceAction(boolean isShow,int attendanceType) {
AjaxParams params = new AjaxParams();
params.put("action_flag", "addMessage");
params.put("attendanceStuId", studentModel.getStudentId());
params.put("attendanceStuName", studentModel.getStudentName());
params.put("attendanceType", attendanceType+"");
params.put("attendanceCourseId",listMsg.get(posIndex).getCourseId());
params.put("attendanceCourseName",listMsg.get(posIndex).getCourseName());
httpPost(Consts.URL + Consts.APP.AttendanceAction, params, Consts.actionId.resultFlag, isShow, "正在加载...");
}
@Override
protected void callBackSuccess(ResponseEntry entry, int actionId) {
super.callBackSuccess(entry, actionId);
switch (actionId) {
case Consts.actionId.resultCode:
if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {
String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);
if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
listMsg = mGson.fromJson(entry.getData(), new TypeToken<List<CourseModel>>() {
}.getType());
TypeAdapter typeAdapter = new TypeAdapter(StudentMessageActivity.this);
typeAdapter.setData(listMsg);
dialogListMsg.show_listview().setAdapter(typeAdapter);
} else {
}
}
break;
case Consts.actionId.resultFlag:
ToastUtil.show(StudentMessageActivity.this, entry.getRepMsg());
break;
}
}
@Override
protected void callBackAllFailure(String strMsg, int actionId) {
super.callBackAllFailure(strMsg, actionId);
ToastUtil.show(StudentMessageActivity.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博客
更多毕业设计可以浏览我的个人主页哦!
七、源码下载
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻
1:V信搜索“毕业设计小码哥”,也可以关注下方公众号,然后点击菜单栏“源码说明-源码下载”
2:点击小程序下面截图
3:选择Android就可以看到下载源码