基于安卓的课程管理系统app设计

news2024/11/18 11:40:01

目 录
第1章 绪论 1
1.1 什么是电子课程管理 1
1.2 系统开发的背景 1
1.3 本文主要工作 1
1.4 系统设计目标分析 2
第2章 基本技术方案 3
2.1 Android概述 3
2.2 Android系统的四大组件 3
2.3 Android中的相关技术介绍及分析 5
2.3.1 Android系统架构研究 5
2.3.2 Android架构分析 6
2.3.3 Android应用程序架构 7
2.3.4 Android运行时组件 8
2.3.5 Android应用的构成和工作机制 8
2.4 Eclipse简介 8
2.5 XML简介 9
第3章 系统分析 10
3.1 系统需求分析 10
3.2 系统流程 10
3.3 功能模块划分 11
3.3.1课程添加模块 11
3.3.2 程序设置模块 11
3.3.3 作业功能模块 12
第4章 系统总体设计 13
4.1 概要分析 13
4.2 数据库分析 13
4.2.1 SQLite数据表设计 13
4.3 程序中的主要类 15
4.3.1 GalleryTabActivity类和ClassListActivity类 15
4.3.2 ClassAddActivity类和SettingActivity类 16
4.3.3 SQLiteHelper类和SQLClassTime类 16
4.3.4 HomeworkActivity类和SettingActivity类 16
第5章 系统功能的具体实现 18
5.1程序首页面 18
5.2 课程设置实现 18
5.3课程添加实现 19
5.4 关于 20
5.5作业功能实现 20
结论 22
参考文献 23
致 谢 24
第3章 系统分析
无忧课程管理包括:运行首页课程信息的显示跟具体作业信息情况的显示。这是面向用户的一个Activity,在此用户可以方便地查看本周的课程情况及课后的作业情况。除此之外,是课程信息管理。用户可以添加,删除,修改课程信息和作业信息,设置上课时间。
3.1 系统需求分析
手机电子课程管理在手机应用程序中并不常见,一般在手机上较为常见的日程提醒程序无法实现自由设置课程信息。
经过对周边同学的调查研究,普遍认为这款软件方便实用,其主要功能如下:
课程的添加、删除和修改;
课程作业的添加、交作业的时间查看;
每节课程上课时间段的设置;
每周课程预览;
课程具体信息预览;
3.2 系统流程
根据课程管理的特点,将课程管理分为首页的课程信息预览,作业内容预览,作业的增加与修改,课程添加,上课时间设置。流程图如图3-1所示:
在这里插入图片描述
图3-1程序流程图
该程序的流程就如图所示,用户进入程序后,可以通过点击MENU按钮添加课程、设置课程时间、查看本程序的关于信息、退出程序。添加完课程信息,设置好上课时间之后,在进入程序的第一个Activity将当前一周的课程信息及作业信息显示出来,点击课程信息,可以对作业信息进行添加、修改、删除。
3.3 功能模块划分
根据程序的设计,将程序分成3个模块。课程添加、课程设置、作业的添加和修改。每个模块都有对应的功能及相关工作。如图3-2所示:
在这里插入图片描述
图3-2功能模块表示图
3.3.1课程添加模块
该模块实现了如下几个功能:
1、添加课程信息;
2、添加上课地点;
3、设定课程在星期几上课;
4、设定课程是当天的第几节课。
该模块实现课程的添加工作,可以将课程的名称、上课地点、上课时间、课程节数添加到数据库中。
3.3.2 程序设置模块
设置模块里面设计了两项内容,设置可以设置每天十节课的上课时间段,设置清空上一周的所有课程信息。
3.3.3 作业功能模块
在预览界面点击具体一节课程的信息,就可以对作业信息进行添加、修改及删除:
1、在上完课后添加作业信息;
2、如果作业需要修改,再次点击,则可以对作业进行修改;
3、在课后如果作业完成后就可以删除作业内容,从而删除作业;
4、可以设置作业的截至时间。

package info.evagle;

import info.evagle.model.ClassInfoModel;
import info.evagle.model.ClassTimeModel;
import info.evagle.sql.SQLClassTime;
import info.evagle.sql.SQLiteHelper;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;

public class HomeworkActivity extends Activity {
	public static final int REQUEST_CODE = 1;
	private Button add;
	private Button cancel;
	private Button dateChoosen;
	private EditText nameET;
	private EditText deadlineET;
	private EditText homeworkET;

	private Spinner timeSp;

	private ClassInfoModel classInfo;
	private SQLiteHelper sqlHelper;
	private SQLClassTime classTime;
	private String name;
	private String deadline;
	private String homework;
	private int id;

	private ArrayAdapter<String> timeAdapter;

	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.add_homework_layout);
		Bundle bundle = getIntent().getExtras();
		Boolean isAdd = bundle.getBoolean("isadd");
		sqlHelper = new SQLiteHelper(this);
		classTime = new SQLClassTime(this);
		prepareViews();
		setListeners();
		classInfo = new ClassInfoModel();
		if (!isAdd) {
			add.setText("修改");
			id = bundle.getInt("id");
			setTitle("" + id);
			classInfo = sqlHelper.getClassById(id + "");
			prestore();
		}

	}

	private void prepareViews() {
		add = (Button) findViewById(R.id.add_ahl);
		cancel = (Button) findViewById(R.id.cancel_ahl);
		dateChoosen = (Button) findViewById(R.id.btn_date_choosen_ahl);
		nameET = (EditText) findViewById(R.id.class_name_ahl);
		timeSp = (Spinner) findViewById(R.id.time_spinner_ahl);
		homeworkET = (EditText) findViewById(R.id.homework_content_ahl);
	}

	private void setListeners() {
		add.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				name = nameET.getText().toString();
				homework = homeworkET.getText().toString();

				// classInfo.setName(name);
				classInfo.setHomework(homework);
				if (deadline == null || deadline.trim() == "") {
					int tmp = 24 * 60 * 60 * 1000;
					Long time = new Date().getTime();
					time = time / tmp * tmp;
					String t = (String) timeSp.getSelectedItem();
					int h = Integer.parseInt(t.substring(1, 2));
					ClassTimeModel timeModel = new SQLClassTime(
							HomeworkActivity.this).getClassById(h + "");
					time += timeModel.getEnd();
					deadline = time + "";
				}
				classInfo.setDeadline(deadline);
				sqlHelper.update(classInfo);
				Log.d("addhomework1", classInfo.toString());
				ClassInfoModel cs = sqlHelper.getClassById("21");
				Log.d("addhomework2", cs.toString());
				Intent intent = new Intent(HomeworkActivity.this,
						GalleryTabActivity.class);
				startActivity(intent);

			}
		});
		cancel.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View arg0) {
				Intent intent = new Intent(HomeworkActivity.this,
						GalleryTabActivity.class);
				startActivity(intent);
			}

		});

		SimpleDateFormat df = new SimpleDateFormat("MM月dd日 ");
		Long today = (new Date().getTime()) / (24 * 3600 * 1000)
				* (24 * 3600 * 1000);
		dateChoosen.setText(df.format(new Date(today)));

		dateChoosen.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(HomeworkActivity.this,
						DateWidget.class);
				startActivityForResult(intent, REQUEST_CODE);
			}
		});

		SQLClassTime sql = new SQLClassTime(HomeworkActivity.this);
		int c = 0;
		for (int i = 1; i <= 10; i++) {
			ClassTimeModel model = sql.getClassById(i + "");
			if (model.getStart() > 0)
				c++;
		}
		final String[] time = new String[c];
		c = 0;
		for (int i = 1; i <= 10; i++) {
			ClassTimeModel model = sql.getClassById(i + "");
			if (model.getStart() > 0) {
				time[c++] = "第"
						+ i
						+ "节"
						+ " "
						+ ClassTimeSetting.format(Math.max(model.getStart(),
								model.getEnd()));
			}
		}
		timeAdapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_dropdown_item_1line, time);
		timeSp.setAdapter(timeAdapter);

		timeSp.setOnItemSelectedListener(new OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				Spinner spinner = (Spinner) parent;

			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {

			}
		});

	}

	private void prestore() {
		nameET.setText(classInfo.getName());
		homeworkET.setText(classInfo.getHomework());
		timeSp.setSelection(id % 20);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == REQUEST_CODE) {
			if (resultCode == RESULT_CANCELED)
				setTitle("取消");
			else if (resultCode == RESULT_OK) {
				String temp = null;
				Bundle extras = data.getExtras();
				if (extras != null) {
					Long dl = extras.getLong("deadline");
					String t = (String) timeSp.getSelectedItem();
					int h = Integer.parseInt(t.substring(1, 2));
					ClassTimeModel timeModel = classTime.getClassById(h + "");
					dl += timeModel.getEnd();
					deadline = dl + "";
					SimpleDateFormat df = new SimpleDateFormat("MM月dd日 ");
					Date date = new Date(dl);
					dateChoosen.setText(df.format(date));
				}

			}
		}
	}

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/70209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 167. 两数之和 II - 输入有序数组

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 167. 两数之和 II - 输入有序数组&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称…

2.zookeeper

1.工作机制 从设计模式角度来理解&#xff1a;是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心的数据&#xff0c;然后接受观察者的注册&#xff0c;一旦这些数据的状态发生变化&#xff0c;Zookeeper就将负责通知已经在Zookeeper上注册…

p2.第一章 基础入门 -- 冯诺依曼体系和计算机基础 (二)

1.2 核心基础 1.2.1 计算机基础知识 艾伦麦席森图灵&#xff08;Alan Mathison Turing&#xff0c;1912年6月23日&#xff0d;1954年6月7日&#xff09;&#xff0c;英国数学家、逻辑学家&#xff0c;被称为计算机科学之父&#xff0c;人工智能之父。 图灵提出的著名的图灵机模…

铺瓷砖问题

1、题目 用 121 \times 212 的瓷砖&#xff0c;把 N2N \times 2N2 的区域填满&#xff0c;返回铺瓷砖的方法数。 2、思路 记录 F(n) 表示空的 n∗2n * 2n∗2 区域的铺瓷砖方法数。 如果第一块瓷砖 A 竖着放&#xff0c;则问题就变成了 F(n−1)F(n-1)F(n−1) 即空的 (n−1)∗…

C++习题3

求余运算符% 位运算&#xff08;<< >> & | ! ^ 左右移位&#xff0c;与&#xff0c;或&#xff0c;非 &#xff0c;异或&#xff09; 这些符号的运算对象都是整型 unsigned short x0xffff cout<<x; cout输出的是整数&#xff0c;所以要将16进制…

基于jsp+ssm的员工人事工资管理系统-计算机毕业设计

项目介绍 本系统是基于JSP的人事管理系统&#xff0c;使用java来实现动态管理以及数据库管理系统采用mysql等共同来完成。管理员可以通过人事管理系统进行工资管理、用户管理、员工考勤管理、部门管理、权限管理等。经理用户则可通过人事管理系统对进行工资管理、考勤管理、部…

快速排序(看完就会)

目录 什么是快速排序 快速排序的步骤&#xff1a; 以上&#xff1a; 图片步骤简绘&#xff1a; 代码实现&#xff1a; 什么是快速排序 快速排序是由C.A.R.Hoare在1960年提出。它的基本思想是&#xff1a;通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部…

easypoi导出excel,列要求是数字导出是文本的问题~并分析源码

&#x1f4c3;目录跳转&#x1f4da;简介&#xff1a;实体类分析源码效果&#x1f4da;简介&#xff1a; 由于使用了easypoi导出的excel列需要是数字的但是导出的默认是文本类型&#xff0c;这样选择列就无法进行统计求和&#xff0c;由于没有认真看注解导致我跑去分析源码。所…

ssm校园兼职系统|求职招聘系统计算机专业毕业论文java毕业设计开题报告

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《ssm校园兼职系统》该项目采用技术&#xff1a;jsp springmvcspringmybatis cssjs等相关技术&#xff0c;项目含有源码、文档、配套开发软件、软…

《歌在飞》后蒙古包美女又一力作,《一路欢歌到北京》超然来袭

纵观中国华语乐坛&#xff0c;内蒙古音乐独树一帜&#xff0c;而要说到内蒙古的音乐人&#xff0c;就不得不提及苏勒亚其其格。说起著名音乐人苏勒亚其其格&#xff0c;她是一个地道的蒙古族人&#xff0c;如今是内蒙古乌兰牧骑独唱演员。 苏勒亚其其格是草原飞出的金凤凰&…

c++状态机的使用

什么是状态机 状态机是有限状态自动机的简称&#xff0c;是现实事物运行规则抽象而成的一个数学模型。英文名字叫State Machine &#xff0c;不是指一台实际机器&#xff0c;一般就是指一张状态转换图。全称是有限状态自动机&#xff0c;自动两个字包含重要含义。给定一个状态…

Pandas中使用Merge、Join 、Concat合并数据效率对比

在 Pandas 中有很多种方法可以进行dataframe(数据框)的合并。 本文将研究这些不同的方法&#xff0c;以及如何将它们执行速度的对比。 合并DF Pandas 使用 .merge() 方法来执行合并。 import pandas as pd # a dictionary to convert to a dataframe data1 {identificati…

配件厂商Hyper推出支持苹果Find My背包,背包防丢越来越智能

配件厂商 Hyper 今天推出了一款支持 Find My 的双肩包 HyperPack Pro&#xff0c;这样发生遗失或者失窃事件之后能够通过苹果的这项追踪技术快速锁定背包的位置&#xff0c;帮你快速找回。 背包有一个太阳镜口袋和易于拿取的前袋&#xff0c;此外背包上还有一个隐藏式口袋&am…

Github Student Developer Pack申请流程【不在学校的认证方法】

一、GitHub Student Developer Pack申请流程 首先你需要注册一个Github账号 进入GitHub Student Developer Pack申请页面&#xff0c;点击sign up for student developer pack 接着会出现如下图所示的界面&#xff0c;因为是学生&#xff0c;所以点击左下角的Get student ben…

Python打包神器,打包速度快生成文件小防反编译

分享一款打包速度快、生成文件小、更加安全的Python打包神器&#xff0c;本内容来源于网络。 一. pyinstaller和Nuitka使用感受 1.1 使用需求 这次也是由于项目需要&#xff0c;要将python的代码转成exe的程序&#xff0c;在找了许久后&#xff0c;发现了2个都能对python项目…

软件测试之系统测试总结报告

引言 编写目的 编写该测试总结报告主要有以下几个目的 通过对测试结果的分析&#xff0c;得到对软件质量的评价分析测试的过程&#xff0c;产品&#xff0c;资源&#xff0c;信息&#xff0c;为以后制定测试计划提供参考评估测试测试执行和测试计划是否符合分析系统存在的缺陷…

(附源码)Springboot中北创新创业官网 毕业设计 271443

Springboot中北创新创业官网 摘 要 进入21世纪以来&#xff0c;计算机有了迅速的发展。计算机应用、信息技术全面渗透到了人类社会的各个方面&#xff0c;信息化已成为世界经济和社会发展的大趋势。本文主要通过对中北创新创业官网的功能性需求分析&#xff0c;对系统的安全性和…

HTTP状态码206报错

HTTP状态码&#xff08;英语&#xff1a;HTTP Status Code&#xff09;是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的&#xff0c;并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。所有状态码的第一个数字代表了…

基于jsp+mysql+ssm富锦市业余足球联赛管理系统-计算机毕业设计

项目介绍 足球联赛管理系统主要目的是对足球联赛中心所有的足球联赛信息进行管理&#xff0c;并且合理管理好管理员发布球队、球员和比赛信息&#xff0c;会员浏览查看球队和比赛信息的流程。提高足球联赛管理的工作效率&#xff0c;降低管理的成本。本系统选用Windows作为服务…

Go-Excelize API源码阅读(四十一)——GetCellRichText

Go-Excelize API源码阅读&#xff08;四十一&#xff09;——GetCellRichText 开源摘星计划&#xff08;WeOpen Star&#xff09; 是由腾源会 2022 年推出的全新项目&#xff0c;旨在为开源人提供成长激励&#xff0c;为开源项目提供成长支持&#xff0c;助力开发者更好地了解…