• 基于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接口的编写以及以及数据的回调

    四、数据库设计

    1. /*
    2. Navicat MySQL Data Transfer
    3. Source Server : mydata
    4. Source Server Version : 50537
    5. Source Host : localhost:3306
    6. Source Database : scheduledb
    7. Target Server Type : MYSQL
    8. Target Server Version : 50537
    9. File Encoding : 65001
    10. Date: 2019-01-24 17:00:56
    11. */
    12. SET FOREIGN_KEY_CHECKS=0;
    13. -- ----------------------------
    14. -- Table structure for scheduletb
    15. -- ----------------------------
    16. DROP TABLE IF EXISTS `scheduletb`;
    17. CREATE TABLE `scheduletb` (
    18. `scheduleId` int(50) NOT NULL AUTO_INCREMENT,
    19. `scheduleName` varchar(255) DEFAULT NULL,
    20. `scheduleTypeId` varchar(11) DEFAULT NULL,
    21. `scheduleTypeName` varchar(255) DEFAULT NULL,
    22. `scheduleMessage` varchar(1500) DEFAULT NULL,
    23. `scheduleTime` varchar(100) DEFAULT NULL,
    24. `scheduleUserId` varchar(255) DEFAULT NULL,
    25. `scheduleUserName` varchar(255) DEFAULT NULL,
    26. `scheduleCreatime` varchar(100) DEFAULT NULL,
    27. PRIMARY KEY (`scheduleId`)
    28. ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    29. -- ----------------------------
    30. -- Records of scheduletb
    31. -- ----------------------------
    32. INSERT INTO `scheduletb` VALUES ('5', '和朋友一起吃饭', '2', '吃饭', '我们的身体处在,血液高速循环的状态。这时突然坐下,不仅会阻碍血液循环,阻碍肌肉恢复。', '2019-01-25 15:11', '16', '多多', '2019-01-24 15:11');
    33. INSERT INTO `scheduletb` VALUES ('7', '吃药', '1', '运动', '我们的身体处在,血液高速循环的状态。这时突然坐下;', '2019-01-24 15:42', '16', '多多', '2019-01-24 15:42');
    34. INSERT INTO `scheduletb` VALUES ('8', 'chichcihi', '2', '吃饭', '我们的身体处在,血液高速循环的状态。这时突然坐下,不仅会阻碍血液循环,阻碍肌肉恢复。还会影响大脑供血的判断,很多的健身事故、猝死,正是来源于做完动作后立刻坐下,再站起来时因为头晕目眩而摔倒', '2019-01-24 16:32', '16', '多多', '2019-01-24 16:27');
    35. INSERT INTO `scheduletb` VALUES ('9', '一起周末玩', '5', '竞技', '我们的身体处在,血液高速循环的状态', '2019-01-27 16:31', '16', '多多', '2019-01-24 16:31');
    36. -- ----------------------------
    37. -- Table structure for typetb
    38. -- ----------------------------
    39. DROP TABLE IF EXISTS `typetb`;
    40. CREATE TABLE `typetb` (
    41. `typeId` int(50) NOT NULL AUTO_INCREMENT,
    42. `typeName` varchar(255) DEFAULT NULL,
    43. `typeUserId` varchar(100) DEFAULT NULL,
    44. `typeUserName` varchar(255) DEFAULT NULL,
    45. `typeTime` varchar(255) DEFAULT NULL,
    46. PRIMARY KEY (`typeId`)
    47. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
    48. -- ----------------------------
    49. -- Records of typetb
    50. -- ----------------------------
    51. INSERT INTO `typetb` VALUES ('1', '运动', '16', '多多', '2019-01-24 11:22');
    52. INSERT INTO `typetb` VALUES ('2', '吃饭', '16', '多多', '2019-01-24 11:22');
    53. INSERT INTO `typetb` VALUES ('3', '吃药', '16', '多多', '2019-01-24 11:22');
    54. INSERT INTO `typetb` VALUES ('5', '竞技', '16', '多多', '2019-01-24 16:31');
    55. -- ----------------------------
    56. -- Table structure for usermsg
    57. -- ----------------------------
    58. DROP TABLE IF EXISTS `usermsg`;
    59. CREATE TABLE `usermsg` (
    60. `userId` int(50) NOT NULL AUTO_INCREMENT,
    61. `userName` varchar(255) DEFAULT NULL,
    62. `userPhone` varchar(255) DEFAULT NULL,
    63. `userPswd` varchar(255) DEFAULT NULL,
    64. `userTime` varchar(255) DEFAULT NULL,
    65. PRIMARY KEY (`userId`)
    66. ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
    67. -- ----------------------------
    68. -- Records of usermsg
    69. -- ----------------------------
    70. INSERT INTO `usermsg` VALUES ('14', '15249243002', '多多', '123456', '2019-01-24 15:05');
    71. INSERT INTO `usermsg` VALUES ('15', '123456', '多多', '15249243002', '2019-01-24 15:06');
    72. INSERT INTO `usermsg` VALUES ('16', '多多', '15249243002', '123456', '2019-01-24 15:09');

    五、部分代码

    1:日程列表
    1. public class ScheduleFragment extends BaseFragment implements ScheduleListner, Observer {
    2. // 获取view
    3. private View rootView;
    4. // 获取控件
    5. private ListView mListMessage;
    6. View convertView;
    7. private ImageView mivCreateMessage;
    8. private List list_result = new ArrayList();
    9. private TextView mtvFenLei;
    10. private boolean isCheck = false;
    11. private int ctposNumber = 0;
    12. private DialogListMsg dialogListMsg;
    13. private List list_type = new ArrayList();
    14. private DialogMsg dialogMsg;
    15. @Override
    16. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    17. rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_send, null);
    18. initWidget();
    19. initData();
    20. return rootView;
    21. }
    22. @Override
    23. public void initWidget() {
    24. dialogMsg = new DialogMsg(getActivity());
    25. dialogMsg.submit_no().setOnClickListener(new OnClickListener() {
    26. @Override
    27. public void onClick(View v) {
    28. // TODO Auto-generated method stub
    29. dialogMsg.Close();
    30. }
    31. });
    32. dialogMsg.submit_ok().setOnClickListener(new OnClickListener() {
    33. @Override
    34. public void onClick(View v) {
    35. // TODO Auto-generated method stub
    36. dialogMsg.Close();
    37. }
    38. });
    39. mivCreateMessage = (ImageView) rootView.findViewById(R.id.mivCreateMessage);
    40. mtvFenLei = (TextView) rootView.findViewById(R.id.mtvFenLei);
    41. mivCreateMessage.setOnClickListener(this);
    42. mtvFenLei.setOnClickListener(new OnClickListener() {
    43. @Override
    44. public void onClick(View v) {
    45. // TODO Auto-generated method stub
    46. dialogListMsg.Show();
    47. }
    48. });
    49. mListMessage = (ListView) rootView.findViewById(R.id.mListMessage);
    50. dialogListMsg = new DialogListMsg(getActivity());
    51. dialogListMsg.setTitle().setText("请选择日程类型");
    52. dialogListMsg.show_listview().setOnItemClickListener(new AdapterView.OnItemClickListener() {
    53. @Override
    54. public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) {
    55. ctposNumber = position;
    56. dialogListMsg.Close();
    57. mtvFenLei.setText(list_type.get(position).getTypeName());
    58. listSearchSchedule(true, list_type.get(position).getTypeId());
    59. }
    60. });
    61. dialogListMsg.submit_no().setOnClickListener(new View.OnClickListener() {
    62. @Override
    63. public void onClick(View v) {
    64. dialogListMsg.Close();
    65. }
    66. });
    67. }
    68. @Override
    69. public void onClick(View v) {
    70. Intent intent = new Intent(getActivity(), CreateScheduleActivity.class);
    71. startActivity(intent);
    72. }
    73. @Override
    74. public void initData() {
    75. listStudentPhone(true);
    76. mListMessage.setOnItemClickListener(new OnItemClickListener() {
    77. @Override
    78. public void onItemClick(AdapterView arg0, View arg1, int pos, long arg3) {
    79. }
    80. });
    81. }
    82. private void listStudentPhone(boolean isShow) {
    83. AjaxParams params = new AjaxParams();
    84. params.put("action_flag", "listSchedule");
    85. params.put("scheduleUserId", MemberUserUtils.getUid(getActivity()));
    86. httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultFlag, isShow, "正在加载...");
    87. }
    88. private void listSearchSchedule(boolean isShow,String scheduleTypeId) {
    89. AjaxParams params = new AjaxParams();
    90. params.put("action_flag", "listSearchSchedule");
    91. params.put("scheduleUserId", MemberUserUtils.getUid(getActivity()));
    92. params.put("scheduleTypeId", scheduleTypeId);
    93. httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultSix, isShow, "正在加载...");
    94. }
    95. private void deleteSchedule(boolean isShow, ScheduleModel scheduleModel) {
    96. AjaxParams params = new AjaxParams();
    97. params.put("action_flag", "deleteSchedule");
    98. params.put("scheduleId", scheduleModel.getScheduleId());
    99. httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultCode, isShow, "正在加载...");
    100. }
    101. private void listTypePhone(boolean isShow) {
    102. AjaxParams params = new AjaxParams();
    103. params.put("action_flag", "listUserType");
    104. params.put("typeUserId", MemberUserUtils.getUid(getActivity()));
    105. httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultState, isShow, "正在加载...");
    106. }
    107. MessageAdapter noticeAdapter;
    108. @Override
    109. protected void callBackSuccess(ResponseEntry entry, int actionId) {
    110. super.callBackSuccess(entry, actionId);
    111. switch (actionId) {
    112. case Consts.actionId.resultFlag:
    113. if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {
    114. String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);
    115. UserModel userModel = (UserModel) MemberUserUtils.getBean(getActivity(), "user_messgae");
    116. if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
    117. list_result.clear();
    118. list_result = mGson.fromJson(entry.getData(), new TypeToken>() {
    119. }.getType());
    120. noticeAdapter = new MessageAdapter(getActivity(), list_result, ScheduleFragment.this);
    121. mListMessage.setAdapter(noticeAdapter);
    122. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");// 设置日期格式
    123. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");// 24小时制
    124. long timeChoice;
    125. long nowChoice;
    126. List listCheck = new ArrayList();
    127. for (int i = 0; i < list_result.size(); i++) {
    128. String timeMessage = list_result.get(i).getScheduleTime();
    129. try {
    130. timeChoice = simpleDateFormat.parse(timeMessage).getTime();
    131. nowChoice = simpleDateFormat.parse(df.format(new Date()) + "").getTime();
    132. Log.i("pony_log", "courseTime:" + ((timeChoice - nowChoice) / 1000 / 60) + "");
    133. long courseTime = ((timeChoice - nowChoice) / 1000 / 60);
    134. if (0 < courseTime && courseTime <= 30) {
    135. listCheck.add(list_result.get(i).getScheduleName());
    136. }
    137. } catch (ParseException e) {
    138. e.printStackTrace();
    139. }
    140. }
    141. if (listCheck.size() > 0 && isCheck == false) {
    142. String courseMsg = "";
    143. for (int i = 0; i < listCheck.size(); i++) {
    144. courseMsg = listCheck.get(i) + "," + courseMsg;
    145. }
    146. dialogMsg.Set_Msg("提醒:" + courseMsg.substring(0, courseMsg.length() - 1));
    147. dialogMsg.Show();
    148. isCheck = true;
    149. }
    150. listTypePhone(false);
    151. }
    152. }
    153. break;
    154. case Consts.actionId.resultSix:
    155. if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {
    156. String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);
    157. UserModel userModel = (UserModel) MemberUserUtils.getBean(getActivity(), "user_messgae");
    158. if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
    159. list_result.clear();
    160. list_result = mGson.fromJson(entry.getData(), new TypeToken>() {
    161. }.getType());
    162. noticeAdapter = new MessageAdapter(getActivity(), list_result, ScheduleFragment.this);
    163. mListMessage.setAdapter(noticeAdapter);
    164. }
    165. }
    166. break;
    167. case Consts.actionId.resultCode:
    168. ToastUtil.show(getActivity(), entry.getRepMsg());
    169. list_result.remove(posDelete);
    170. noticeAdapter.notifyDataSetChanged();
    171. break;
    172. case Consts.actionId.resultState:
    173. if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {
    174. String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);
    175. if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
    176. list_type = mGson.fromJson(entry.getData(), new TypeToken>() {
    177. }.getType());
    178. TypeChoiceAdapter choiceStudentAdapter = new TypeChoiceAdapter(getActivity());
    179. choiceStudentAdapter.setData(list_type);
    180. dialogListMsg.show_listview().setAdapter(choiceStudentAdapter);
    181. } else {
    182. }
    183. }
    184. break;
    185. default:
    186. break;
    187. }
    188. }
    189. @Override
    190. protected void callBackAllFailure(String strMsg, int actionId) {
    191. super.callBackAllFailure(strMsg, actionId);
    192. ToastUtil.show(getActivity(), strMsg);
    193. }
    194. @Override
    195. public void onResume() {
    196. super.onResume();
    197. SchuduleObservable.getInstance().addObserver(ScheduleFragment.this);
    198. }
    199. @Override
    200. public void onDestroy() {
    201. super.onDestroy();
    202. SchuduleObservable.getInstance().deleteObserver(ScheduleFragment.this);
    203. }
    204. private int posDelete;
    205. @Override
    206. public void setDelete(int pos, ScheduleModel scheduleModel) {
    207. posDelete = pos;
    208. deleteSchedule(false, scheduleModel);
    209. }
    210. @Override
    211. public void setUpdate(int pos, ScheduleModel scheduleModel) {
    212. Intent intent = new Intent(getActivity(), UpdateScheduleActivity.class);
    213. intent.putExtra("msg", scheduleModel);
    214. getActivity().startActivity(intent);
    215. }
    216. @Override
    217. public void update(Observable arg0, Object arg1) {
    218. listStudentPhone(false);
    219. }
    220. }
    2:类型列表
     
    1. public class TypeFragment extends BaseFragment implements Observer ,TypeListner {
    2. // 获取view
    3. private View rootView;
    4. // 获取控件
    5. private ListView mListMessage;
    6. View convertView;
    7. private LinearLayout mllNomessage;
    8. private List list_result = new ArrayList();
    9. private TextView mtvTipMessage;
    10. private ImageView mivCreateMessage;
    11. @Override
    12. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    13. rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_news, null);
    14. initWidget();
    15. initData();
    16. return rootView;
    17. }
    18. @Override
    19. public void initWidget() {
    20. mllNomessage = (LinearLayout) rootView.findViewById(R.id.mllNomessage);
    21. mListMessage = (ListView) rootView.findViewById(R.id.mListMessage);
    22. mtvTipMessage = (TextView) rootView.findViewById(R.id.mtvTipMessage);
    23. mivCreateMessage = (ImageView) rootView.findViewById(R.id.mivCreateMessage);
    24. mivCreateMessage.setOnClickListener(this);
    25. mivCreateMessage.setVisibility(View.VISIBLE);
    26. }
    27. @Override
    28. public void onClick(View v) {
    29. Intent intent = new Intent(getActivity(), CreateTypeActivity.class);
    30. startActivity(intent);
    31. }
    32. @Override
    33. public void initData() {
    34. MessageAction(true);
    35. mListMessage.setOnItemClickListener(new OnItemClickListener() {
    36. @Override
    37. public void onItemClick(AdapterView arg0, View arg1, int pos, long arg3) {
    38. }
    39. });
    40. }
    41. private void MessageAction(boolean isShow) {
    42. AjaxParams params = new AjaxParams();
    43. params.put("action_flag", "listUserType");
    44. params.put("typeUserId", MemberUserUtils.getUid(getActivity()));
    45. httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultFlag, isShow, "正在加载...");
    46. }
    47. private void deleteType(boolean isShow, TypeModel typeModel) {
    48. AjaxParams params = new AjaxParams();
    49. params.put("action_flag", "deleteType");
    50. params.put("typeId", typeModel.getTypeId());
    51. httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultCode, isShow, "正在加载...");
    52. }
    53. TypeAdapter memAdapter;
    54. @Override
    55. protected void callBackSuccess(ResponseEntry entry, int actionId) {
    56. super.callBackSuccess(entry, actionId);
    57. switch (actionId) {
    58. case Consts.actionId.resultFlag:
    59. if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {
    60. String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);
    61. if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
    62. list_result = mGson.fromJson(entry.getData(), new TypeToken>() {
    63. }.getType());
    64. memAdapter = new TypeAdapter(getActivity(), list_result,TypeFragment.this);
    65. mListMessage.setAdapter(memAdapter);
    66. } else {
    67. mllNomessage.setVisibility(View.VISIBLE);
    68. }
    69. }
    70. break;
    71. case Consts.actionId.resultCode:
    72. ToastUtil.show(getActivity(), entry.getRepMsg());
    73. list_result.remove(posDelete);
    74. memAdapter.notifyDataSetChanged();
    75. break;
    76. default:
    77. break;
    78. }
    79. }
    80. @Override
    81. public void onResume() {
    82. super.onResume();
    83. TypeObservable.getInstance().addObserver(TypeFragment.this);
    84. }
    85. @Override
    86. public void onDestroy() {
    87. // TODO Auto-generated method stub
    88. super.onDestroy();
    89. TypeObservable.getInstance().deleteObserver(TypeFragment.this);
    90. }
    91. @Override
    92. public void update(Observable observable, Object data) {
    93. MessageAction(false);
    94. }
    95. private int posDelete;
    96. @Override
    97. public void setDelete(int pos, TypeModel typeModel) {
    98. posDelete = pos;
    99. deleteType(false, typeModel);
    100. }
    101. @Override
    102. public void setUpdate(int pos, TypeModel typeModel) {
    103. Intent intent = new Intent(getActivity(), UpdateTypeActivity.class);
    104. intent.putExtra("msg", typeModel);
    105. getActivity().startActivity(intent);
    106. }
    107. }

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

  • 相关阅读:
    IDEA使用内置database数据库连接mysql报错:javax.net.ssl.SSLHandshakeException
    java编程思想
    (WSI分类)WSI分类文献小综述
    九、从0开始卷出一个新项目之瑞萨RZN2L生产烧录固件(jflash擦写读外挂flash)
    地球红薯地中秋圆《乡村振兴战略下传统村落文化旅游设计》——世界旅行季许少辉八月新书辉少许
    医学图像处理——DeepDrr工具CT生成DRR
    docker安装mysql
    Node 之 JavaScript 模块化开发
    Leetcode560. 和为 K 的子数组
    网页编辑软件Whisk mac中文版功能介绍
  • 原文地址:https://blog.csdn.net/u014388322/article/details/128138656