基于Android的日程管理工具

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

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

目录

功能演示

一、项目介绍

二、运行环境

三、使用技术

四、软件截图

五、部分代码

六、浏览更多Android毕业设计

七、毕业设计部分免费源码分享下载


功能演示

一、项目介绍

1:新建日程:用户可以创建自己的日程信息。

2:删除日程:用户可以在日程期限已经过去或日程发生变化时,删除自己不需要的日程信息。

3:修改日程:用户可以对自己以前新建立的日程修改,使该日程更加适合自己现在的状况。

4:查找日程:用户可以在大量的信息情况下更加方便地查找到自己需要的日程信息。

5:日程类别维护:用户可以增加自己需要的日程类别,并且删除自己不需要的日程类别。

6:事务提醒功能:用户可以设置提醒时间,在到达日程时间时,可提醒用户该日程。

二、运行环境

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         : mydata
Source Server Version : 50537
Source Host           : localhost:3306
Source Database       : scheduledb

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

Date: 2019-01-24 17:00:56
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for scheduletb
-- ----------------------------
DROP TABLE IF EXISTS `scheduletb`;
CREATE TABLE `scheduletb` (
  `scheduleId` int(50) NOT NULL AUTO_INCREMENT,
  `scheduleName` varchar(255) DEFAULT NULL,
  `scheduleTypeId` varchar(11) DEFAULT NULL,
  `scheduleTypeName` varchar(255) DEFAULT NULL,
  `scheduleMessage` varchar(1500) DEFAULT NULL,
  `scheduleTime` varchar(100) DEFAULT NULL,
  `scheduleUserId` varchar(255) DEFAULT NULL,
  `scheduleUserName` varchar(255) DEFAULT NULL,
  `scheduleCreatime` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`scheduleId`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of scheduletb
-- ----------------------------
INSERT INTO `scheduletb` VALUES ('5', '和朋友一起吃饭', '2', '吃饭', '我们的身体处在,血液高速循环的状态。这时突然坐下,不仅会阻碍血液循环,阻碍肌肉恢复。', '2019-01-25 15:11', '16', '多多', '2019-01-24 15:11');
INSERT INTO `scheduletb` VALUES ('7', '吃药', '1', '运动', '我们的身体处在,血液高速循环的状态。这时突然坐下;', '2019-01-24 15:42', '16', '多多', '2019-01-24 15:42');
INSERT INTO `scheduletb` VALUES ('8', 'chichcihi', '2', '吃饭', '我们的身体处在,血液高速循环的状态。这时突然坐下,不仅会阻碍血液循环,阻碍肌肉恢复。还会影响大脑供血的判断,很多的健身事故、猝死,正是来源于做完动作后立刻坐下,再站起来时因为头晕目眩而摔倒', '2019-01-24 16:32', '16', '多多', '2019-01-24 16:27');
INSERT INTO `scheduletb` VALUES ('9', '一起周末玩', '5', '竞技', '我们的身体处在,血液高速循环的状态', '2019-01-27 16:31', '16', '多多', '2019-01-24 16:31');

-- ----------------------------
-- Table structure for typetb
-- ----------------------------
DROP TABLE IF EXISTS `typetb`;
CREATE TABLE `typetb` (
  `typeId` int(50) NOT NULL AUTO_INCREMENT,
  `typeName` varchar(255) DEFAULT NULL,
  `typeUserId` varchar(100) DEFAULT NULL,
  `typeUserName` varchar(255) DEFAULT NULL,
  `typeTime` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`typeId`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of typetb
-- ----------------------------
INSERT INTO `typetb` VALUES ('1', '运动', '16', '多多', '2019-01-24 11:22');
INSERT INTO `typetb` VALUES ('2', '吃饭', '16', '多多', '2019-01-24 11:22');
INSERT INTO `typetb` VALUES ('3', '吃药', '16', '多多', '2019-01-24 11:22');
INSERT INTO `typetb` VALUES ('5', '竞技', '16', '多多', '2019-01-24 16:31');

-- ----------------------------
-- Table structure for usermsg
-- ----------------------------
DROP TABLE IF EXISTS `usermsg`;
CREATE TABLE `usermsg` (
  `userId` int(50) NOT NULL AUTO_INCREMENT,
  `userName` varchar(255) DEFAULT NULL,
  `userPhone` varchar(255) DEFAULT NULL,
  `userPswd` varchar(255) DEFAULT NULL,
  `userTime` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of usermsg
-- ----------------------------
INSERT INTO `usermsg` VALUES ('14', '15249243002', '多多', '123456', '2019-01-24 15:05');
INSERT INTO `usermsg` VALUES ('15', '123456', '多多', '15249243002', '2019-01-24 15:06');
INSERT INTO `usermsg` VALUES ('16', '多多', '15249243002', '123456', '2019-01-24 15:09');

五、部分代码

1:日程列表

public class ScheduleFragment extends BaseFragment implements ScheduleListner, Observer {

	// 获取view
	private View rootView;
	// 获取控件
	private ListView mListMessage;
	View convertView;
	private ImageView mivCreateMessage;
	private List<ScheduleModel> list_result = new ArrayList<ScheduleModel>();
	private TextView mtvFenLei;

	private boolean isCheck = false;
	private int ctposNumber = 0;
	private DialogListMsg dialogListMsg;
	private List<TypeModel> list_type = new ArrayList<TypeModel>();

	private DialogMsg dialogMsg;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_send, null);
		initWidget();
		initData();
		return rootView;
	}

	@Override
	public void initWidget() {

		dialogMsg = new DialogMsg(getActivity());
		dialogMsg.submit_no().setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				dialogMsg.Close();
			}
		});

		dialogMsg.submit_ok().setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				dialogMsg.Close();
			}
		});

		mivCreateMessage = (ImageView) rootView.findViewById(R.id.mivCreateMessage);
		mtvFenLei = (TextView) rootView.findViewById(R.id.mtvFenLei);
		mivCreateMessage.setOnClickListener(this);
		mtvFenLei.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				dialogListMsg.Show();
			}
		});
		mListMessage = (ListView) rootView.findViewById(R.id.mListMessage);

		dialogListMsg = new DialogListMsg(getActivity());
		dialogListMsg.setTitle().setText("请选择日程类型");
		dialogListMsg.show_listview().setOnItemClickListener(new AdapterView.OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
				ctposNumber = position;
				dialogListMsg.Close();
				mtvFenLei.setText(list_type.get(position).getTypeName());
				
				listSearchSchedule(true, list_type.get(position).getTypeId());
			}
		});

		dialogListMsg.submit_no().setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				dialogListMsg.Close();
			}
		});

	}

	@Override
	public void onClick(View v) {

		Intent intent = new Intent(getActivity(), CreateScheduleActivity.class);
		startActivity(intent);

	}

	@Override
	public void initData() {
		listStudentPhone(true);
		mListMessage.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {

			}
		});
	}

	private void listStudentPhone(boolean isShow) {
		AjaxParams params = new AjaxParams();
		params.put("action_flag", "listSchedule");
		params.put("scheduleUserId", MemberUserUtils.getUid(getActivity()));
		httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultFlag, isShow, "正在加载...");
	}
	
	private void listSearchSchedule(boolean isShow,String scheduleTypeId) {
		AjaxParams params = new AjaxParams();
		params.put("action_flag", "listSearchSchedule");
		params.put("scheduleUserId", MemberUserUtils.getUid(getActivity()));
		params.put("scheduleTypeId", scheduleTypeId);
		httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultSix, isShow, "正在加载...");
	}
	
	
	

	private void deleteSchedule(boolean isShow, ScheduleModel scheduleModel) {
		AjaxParams params = new AjaxParams();
		params.put("action_flag", "deleteSchedule");
		params.put("scheduleId", scheduleModel.getScheduleId());
		httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultCode, isShow, "正在加载...");
	}

	private void listTypePhone(boolean isShow) {
		AjaxParams params = new AjaxParams();
		params.put("action_flag", "listUserType");
		params.put("typeUserId", MemberUserUtils.getUid(getActivity()));
		httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultState, isShow, "正在加载...");
	}

	MessageAdapter noticeAdapter;

	@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);
				UserModel userModel = (UserModel) MemberUserUtils.getBean(getActivity(), "user_messgae");
				if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
					list_result.clear();
					list_result = mGson.fromJson(entry.getData(), new TypeToken<List<ScheduleModel>>() {
					}.getType());
					noticeAdapter = new MessageAdapter(getActivity(), list_result, ScheduleFragment.this);
					mListMessage.setAdapter(noticeAdapter);

					SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");// 设置日期格式
					SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");// 24小时制
					long timeChoice;
					long nowChoice;

					List<String> listCheck = new ArrayList<String>();

					for (int i = 0; i < list_result.size(); i++) {

						String timeMessage = list_result.get(i).getScheduleTime();
						try {
							timeChoice = simpleDateFormat.parse(timeMessage).getTime();
							nowChoice = simpleDateFormat.parse(df.format(new Date()) + "").getTime();

							Log.i("pony_log", "courseTime:" + ((timeChoice - nowChoice) / 1000 / 60) + "");
							long courseTime = ((timeChoice - nowChoice) / 1000 / 60);
							if (0 < courseTime && courseTime <= 30) {
								listCheck.add(list_result.get(i).getScheduleName());
							}
						} catch (ParseException e) {
							e.printStackTrace();
						}

					}

					if (listCheck.size() > 0 && isCheck == false) {

						String courseMsg = "";
						for (int i = 0; i < listCheck.size(); i++) {
							courseMsg = listCheck.get(i) + "," + courseMsg;
						}

						dialogMsg.Set_Msg("提醒:" + courseMsg.substring(0, courseMsg.length() - 1));
						dialogMsg.Show();
						isCheck = true;

					}

					listTypePhone(false);

				}
			}
			break;
			
		case Consts.actionId.resultSix:
			if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {
				String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);
				UserModel userModel = (UserModel) MemberUserUtils.getBean(getActivity(), "user_messgae");
				if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
					list_result.clear();
					list_result = mGson.fromJson(entry.getData(), new TypeToken<List<ScheduleModel>>() {
					}.getType());
					noticeAdapter = new MessageAdapter(getActivity(), list_result, ScheduleFragment.this);
					mListMessage.setAdapter(noticeAdapter);

				}
			}
			break;
		case Consts.actionId.resultCode:
			ToastUtil.show(getActivity(), entry.getRepMsg());
			list_result.remove(posDelete);
			noticeAdapter.notifyDataSetChanged();
			break;

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

				String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);
				if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
					list_type = mGson.fromJson(entry.getData(), new TypeToken<List<TypeModel>>() {
					}.getType());

					TypeChoiceAdapter choiceStudentAdapter = new TypeChoiceAdapter(getActivity());
					choiceStudentAdapter.setData(list_type);
					dialogListMsg.show_listview().setAdapter(choiceStudentAdapter);
				} else {
				}
			}
			break;
		default:
			break;
		}

	}

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

	}

	@Override
	public void onResume() {
		super.onResume();
		SchuduleObservable.getInstance().addObserver(ScheduleFragment.this);
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		SchuduleObservable.getInstance().deleteObserver(ScheduleFragment.this);
	}

	private int posDelete;

	@Override
	public void setDelete(int pos, ScheduleModel scheduleModel) {
		posDelete = pos;
		deleteSchedule(false, scheduleModel);
	}

	@Override
	public void setUpdate(int pos, ScheduleModel scheduleModel) {
		Intent intent = new Intent(getActivity(), UpdateScheduleActivity.class);
		intent.putExtra("msg", scheduleModel);
		getActivity().startActivity(intent);
	}

	@Override
	public void update(Observable arg0, Object arg1) {
		listStudentPhone(false);
	}

}
2:类型列表
 

public class TypeFragment extends BaseFragment implements Observer ,TypeListner {
	// 获取view
	private View rootView;

	// 获取控件
	private ListView mListMessage;
	View convertView;
	private LinearLayout mllNomessage;
	private List<TypeModel> list_result = new ArrayList<TypeModel>();
	private TextView mtvTipMessage;
	private ImageView mivCreateMessage;
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_news, null);
		initWidget();
		initData();
		return rootView;
	}

	@Override
	public void initWidget() {
		
		mllNomessage = (LinearLayout) rootView.findViewById(R.id.mllNomessage);
		mListMessage = (ListView) rootView.findViewById(R.id.mListMessage);
		mtvTipMessage = (TextView) rootView.findViewById(R.id.mtvTipMessage);

		mivCreateMessage = (ImageView) rootView.findViewById(R.id.mivCreateMessage);
		mivCreateMessage.setOnClickListener(this);
		mivCreateMessage.setVisibility(View.VISIBLE);
	}

	@Override
	public void onClick(View v) {
		Intent intent = new Intent(getActivity(), CreateTypeActivity.class);
		startActivity(intent);
	}

	@Override
	public void initData() {
		MessageAction(true);
		mListMessage.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {

			}
		});
	}

	private void MessageAction(boolean isShow) {
		AjaxParams params = new AjaxParams();
		params.put("action_flag", "listUserType");
		params.put("typeUserId", MemberUserUtils.getUid(getActivity()));
		httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultFlag, isShow, "正在加载...");
	}


	private void deleteType(boolean isShow, TypeModel typeModel) {
		AjaxParams params = new AjaxParams();
		params.put("action_flag", "deleteType");
		params.put("typeId", typeModel.getTypeId());
		httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultCode, isShow, "正在加载...");
	}

	
	
	TypeAdapter memAdapter;

	@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)) {
					list_result = mGson.fromJson(entry.getData(), new TypeToken<List<TypeModel>>() {
					}.getType());
					memAdapter = new TypeAdapter(getActivity(), list_result,TypeFragment.this);
					mListMessage.setAdapter(memAdapter);
				} else {
					mllNomessage.setVisibility(View.VISIBLE);
				}
			}
			break;
		case Consts.actionId.resultCode:
			ToastUtil.show(getActivity(), entry.getRepMsg());
			list_result.remove(posDelete);
			memAdapter.notifyDataSetChanged();
			break;
		default:
			break;
		}

	}

	
	@Override
	public void onResume() {
		super.onResume();
		TypeObservable.getInstance().addObserver(TypeFragment.this);	
	}
	
	
	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		TypeObservable.getInstance().deleteObserver(TypeFragment.this);	
	}

	@Override
	public void update(Observable observable, Object data) {
		MessageAction(false);
	}
	
	private int posDelete;
	@Override
	public void setDelete(int pos, TypeModel typeModel) {
		posDelete = pos;
		deleteType(false, typeModel);
	}

	@Override
	public void setUpdate(int pos, TypeModel typeModel) {
		Intent intent = new Intent(getActivity(), UpdateTypeActivity.class);
		intent.putExtra("msg", typeModel);
		getActivity().startActivity(intent);
	}
	

}

六、浏览更多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/88180734

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Android毕业设计源码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值