# 课程表CourseTable **Repository Path**: customized-tourism/coursetable ## Basic Information - **Project Name**: 课程表CourseTable - **Description**: 安卓大作业 一个简单能用的课程表 - **Primary Language**: Android - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 31 - **Forks**: 5 - **Created**: 2022-05-19 - **Last Updated**: 2025-05-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 课程表CourseTable ### 封面 - 设计题目 :课程表 - 功能描述 :一款界面简洁、用户自定义的课程表app。由用户手动输入课程信息,能够在视图中显示完整的课程表。 | 组员 | 分工 | |-----------------|-----------| | 2052402 王珈懿(组长) | ppt,报告,代码 | | 2052407 周均丽 | 汇报,报告,代码 | | 2031208 叶梦婷 | ppt,报告,代码 | | 2033119 李韶卿 | ppt,报告,代码 | 自我评分: 87 ### 1、序言 初入大学校园的同学们往往会不适应走班上课的模式,同时大学上课教室通常较为分散,时间也不集中,同学经常会忘记自己上课的时间或教室地点。学校自动生成的课程表往往是根据web页面进行设计的,但时常打开电脑确认课表不仅花费的时间长,同时也不便携,不够方便。因此我们设计了一款手机端的课程表软件,帮助同学们记录自己的课程信息,可以随时随地确认自己的课程情况,为同学们的学习提供便利。 ### 2. 需求分析 #### 2.1系统概述 本系统是基于Android Studio平台和SQLite数据库开发的一款课程表软件,通过多种布局的嵌套实现了课程表的基础布局,通过Activity组件的应用实现了课程的添加和显示功能,通过SQLite数据库的使用实现了将课程的添加、删除和修改信息保存到数据库。在本系统中,用户可以实现自定义课程表,将课程名、上课时间、授课教师、教室地点等信息储存到课程表中,并对课程进行删除、更新等操作,使课程信息显示更直观,能有效地减少用户非主观因素缺课漏课的情况。 #### 2.2社会影响分析 相比较于高中的固定教室教学模式,大学教育显然有着课程种类多、课程地点分散、课程时间不集中的特点,很多刚上大学的同学短时间内都很难适应新的教学模式,而大一又是整个大学学习生涯打下坚实基础的重要阶段,对同学们至关重要,因此这也促进了课程表软件的开发。对于高年级同学来说,每天都有着不同的作业、不同的实验,穿梭于教室、图书馆和实验室之间,有时候难免会忘了当前要上的课程。该软件有利于学生对自己课程的规划和管理,有助于学生更好地把控自己的校园时间,在完成课程学习的基础上更好地利用空余时间提升自己。同时在打下良好学习基础的前提下,学生在后续的学习中也能够更好地完成学习目标,有利于总体能力的提升。由此可见,这款软件的开发有着非常积极的影响,能够促进大学生积极学习,为将来打下基础。 #### 2.3赢利模式与全生命周期成本分析 该软件通过售卖使用权来赢利,针对免费用户设有课程设定上限,如果升级为会员则可以无限量添加课程。 在软件开发设计阶段,我们应该以软件的研究开发为主,而不是以降低研究开发费用为根本目的。要努力研制出适应市场需要、功能比较齐全但又不至于过剩的产品,并对其是否具有竞争性进行可行性分析。此阶段中,研究和开发成本有可能提高,是为了开拓市场和创新所应付出的代价。在此阶段要非常重视质量成本,努力降低由于质量损失而导致发生的成本。在追求产品生命周期研究开发阶段的成本最小化时,要充分考虑到质量成本,寻求二者的最佳结合点。在保证可以接受的质量成本的前提下,努力降低研究开发阶段的成本。 在软件生产制造阶段,产品由构想变为现实,虽然在此阶段产品成本降低的潜力已经不大,但我们要通过自身的努力能够达到的成本作为控制的最佳成本,以此为公司树立标杆成本。 在软件营销阶段,该软件主要的受众群体为大学生,因此我们需要在校园墙、校友群以及一些使用群体多为大学生的软件进行推广,在初创阶段可以较多地投入广告宣传费用;成熟期时由于其已建立了一定的声誉和在市场中占有一定的份额,可以适当减少宣传费用的投入,衰退期时要注重短期收益,对每一笔支出要考虑成本和收益原则来决定是否采取投入。 在软件使用维护阶段,必须将用户的使用成本考虑进去,努力降低由于质量问题而造成的各种损失。此时应对为提高用户满意度而支出的大量维护成本进行有效管理,在提高产品质量的基础上降低维护费用支出,并建立有效的信息反馈机制,保证客户需求能够得以及时满足。在软件废弃或升级时,应对用户的追加成本及公司的替换成本进行核算,以保证软件生命周期的成本能够得到全面反映,准确核算软件赢利能力。 #### 2.4系统的功能表 | 功能序号 | 功能名称 |功能说明及设计模块 | 完成人和比例 | |---|---|---|---| | 1 | 课程管理 | 包含课程信息的创建、修改等。涉及模块1、2、3 |王珈懿100% | | 2 | 课程保存 | 将课程信息的变更保存到SQLite数据库。涉及模块1、2、3 | 周均丽100% | | 3 | 课程汇总显示 |将所有课程信息汇总于主界面中显示。涉及模块1、2、3 | 叶梦婷100% | | 4 | 课程查看 |查看已创建课程的具体信息。涉及模块4 | 李韶卿100%| ### 3. 数据库设计 #### 3.1 表、视图汇总 |视图/表名 |类型 |功能说明 | |---|---|---| |Courses |基本表 |集中保存课程信息 | |用户查询 |查询 |显示用户查询课程的所有信息 | #### 3.2 各表、视图设计详解 基本表:[courses] |字段 |类型 |长度 |约束 |备注 | |---|---|---|---|---| |课程id |整型 | |主键 | | |课程名 |文本 |20 | | | |教师名 |文本 |10 | | | |教室号 |文本 |10 | | | |星期 |整型 | | | | |课程开始时间 |整型 | | | | |课程结束时间 |整型 | | | | 查询:[用户查询] |字段 |类型 |长度 |约束 |备注 | |---|---|---|---|---| |课程id |整型 | |主键 | | |课程名 |文本 |20 | | | |教师名 |文本 |10 | | | |教室号 |文本 |10 | | | |星期 |整型 | | | | |课程开始时间 |整型 | | | | |课程结束时间 |整型 | | | | ### 4.系统概要设计说明书 #### 4.1 系统总体结构图 ![输入图片说明](https://images.gitee.com/uploads/images/2022/0526/140046_c7a1d5c1_10775493.png "xtztjgt.png") #### 4.2 各子系统流程图 - 打开课程表时 ![输入图片说明](https://images.gitee.com/uploads/images/2022/0526/140106_50d29768_10775493.png "dkkb.png") - 创建新课程 ![输入图片说明](https://images.gitee.com/uploads/images/2022/0526/140115_104b2af5_10775493.png "cjkc.png") - 修改课程&删除课程 ![输入图片说明](https://images.gitee.com/uploads/images/2022/0526/141515_5dd66751_10775493.png "xgkc (2).png") ### 5.系统详细设计说明书 #### 5.1 技术选择与工具使用 1)技术选择 - 用Android内置的SQLit数据库存储课程数据 - 提供增删改查的功能来操作课程 2)工具使用 - Android内置的SQLite数据库 - Android Studio 使用Android内置的SQLite数据库来实现课程表中课程信息的增删改查,可减少纸质资源的浪费,同时提高对课程信息进行修改的简便性,另外采用数据库存储不易损坏,可避免课程信息的丢失。 Android Studio是一个Android集成开发工具,提供了集成的Android开发工具用于开发和调试。 #### 5.2 知识点覆盖 |知识点 |实现的功能与涉及到的模块 |涉及到的文件 | |------------|--------------|--------| | 1.菜单 | 显示项目名称、提供增加课程信息选项 涉及模块1 |toolbar.xml、MainActivity | | 2.字符串与尺寸资源 | 实现页面布局、对相关显示进行解释、对错误输入进行提示 涉及模块 1、2、3、4 |activity_add_course.xml、activity_main.xml、acvtivity_see_course.xml、course_card.xml、left_view.xml、AddCourseActivity、MainActivity、SeeCourseActivity、string.xml| | 3.操作栏 | | | | 4.Fragment | | | | 5.手势 | | | | 6.广播消息 | | | | 7.多线程 | | | | 8.服务 | | | | 9.进程间通信 |实现对输入数据的读取及数据库数据的存储 涉及模块1、2、3、4 |AddCourseActivity、MainActivity、SeeCourseActivity| | 10.文件存储 | | | | 11.Sqlite数据库 |实现课程信息的存储与查询 涉及模块1、2、3、4 |DatabaseHelper、SeeCourseActivity、MainActivity| | 12.ContentProvider | | | | 13.位置与地图 | | | | 14.Wiget |实现页面布局、相关控件的触发功能 涉及模块1、2、3、4 |AddCourseActivity、MainActivity、SeeCourseActivity| | 15.传感器 | | | | 16.图形与多媒体 |实现不同页面的背景、功能图标、项目图标显示 涉及模块1、2、3、4 |activity_add_course.xml、activity_main.xml、acvtivity_see_course.xml、AndroidManifest.xml | | 17.网络基础(Socket、TCP/IP、http协议) | | | | 18.Webkit与浏览器 | | | | 19.JSON与网络API | | | | 20.设计模式 | | | | 21.权限 | | | | 22.WebService | | | | 23.xml文件解析 | | | | 24.其他资源的访问 | | | | 25.蓝牙与NFC | | | | 26.框架和库 | | | | 27.NDK | | | | 28.其他(请注明) | | | #### 5.3 系统模块汇总及说明 |系统模块编号 | 系统模块名称 | 函数声明 | 作用 | |---|---|---|---| | 1 | 添加课程信息 | okButton.setOnClickListener(new View.OnClickListener()、onCreate(SQLiteDatabase db)、saveData(Course course) |读入用户输入的课程信息,创建数据库,将课程信息数据存入数据库 | | 2 |修改课程信息 | ReviseBtn.setOnClickListener(new View.OnClickListener()、okButton.setOnClickListener(new View.OnClickListener() |创建课程数据修改事件,将修改内容保存至数据库 | | 3 | 删除课程信息 |delBtn.setOnClickListener(new View.OnClickListener()|创建课程数据删除事件、删除指定课程信息| | 4 |查询课程信息 |createItemCourseView(final Course course) 、loadData() | 加载数据库数据、创建单个课程视图,显示欲查询的课程信息 | ### 6.用户界面设计报告 | 控件 | 名称和功能 | |---|---| | ![输入图片说明](https://images.gitee.com/uploads/images/2022/0526/141542_b77bfa87_10775493.png "aac.png") | activity_add_course:用户手动输入或选择课程的基本信息,点击新建按钮可新建课程。 | | ![输入图片说明](https://images.gitee.com/uploads/images/2022/0526/141602_ada63821_10775493.png "tb.png") | toolbar:课程表的工具条,“+”键可打开新建课程界面。 | | ![输入图片说明](https://images.gitee.com/uploads/images/2022/0526/141610_ff7238e0_10775493.png "cc.png") | course_card:每个课程的卡片视图,可在主界面添加。 | | ![输入图片说明](https://images.gitee.com/uploads/images/2022/0526/141646_b042d2cb_10775493.png "am.png") | activity_main:课程表的主界面,显示星期几和节数,存放所有课程卡片和左侧时间卡片。 | | ![输入图片说明](https://images.gitee.com/uploads/images/2022/0526/141658_3582433c_10775493.png "atsc.png") | activity_see_course:可查看课程的详细信息,两个按钮用来修改或删除课程。 | | ![输入图片说明](https://images.gitee.com/uploads/images/2022/0526/141707_4fe3bfbf_10775493.png "lv.png") | left_view:显示课程的节数、开始时间和结束时间。 | ### 7.程序调试排错 #### 7.1 显示错误 - 这里是列表文本添加课程信息页面无法显示所有输入项,造成部分信息无法输入 ![输入图片说明](https://images.gitee.com/uploads/images/2022/0527/103730_b31e0eb1_9676384.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2022/0527/103837_31b6ed11_9676384.png "屏幕截图.png") - 这里是列表文本教室号为输入项,但无法显示。排错:将ScrollView中的 android:layout_width="320dp"、android:layout_height="300dp"改为 android:layout_width="wrap_content"、android:layout_height="wrap_content",排错后显示: ![输入图片说明](https://images.gitee.com/uploads/images/2022/0527/104151_a625fca3_9676384.png "屏幕截图.png") #### 7.2 未设置删除按钮点击事件,点击删除按键无法删除课程信息 ![输入图片说明](https://images.gitee.com/uploads/images/2022/0527/225510_0851c48c_9676384.png "屏幕截图.png") - 这里是列表文本添加删除按钮点击事件: ![输入图片说明](https://images.gitee.com/uploads/images/2022/0527/225637_5561ea2d_9676384.png "屏幕截图.png") - 这里是列表文本成功删除对应课程信息: ![输入图片说明](https://images.gitee.com/uploads/images/2022/0527/225713_53f119a0_9676384.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2022/0527/225802_fc5103e2_9676384.png "屏幕截图.png") ### 8.用户使用说明书 本课程表软件是面向学生以及老师群体的应用软件,使用操作十分方便简单。 | 步骤| 截图 | |---|---| |首先通过点击蓝色的“+”号创建新课程。 |![](https://images.gitee.com/uploads/images/2022/0606/225057_d22f579c_10924011.png "屏幕截图.png") | |接下来在创建课程页面输入课程信息。 |![](https://images.gitee.com/uploads/images/2022/0606/225127_69832c69_10924011.png "屏幕截图.png") | |然后添加的课程将会显示在课程表主页面中,点击课程即可查看课程的具体信息。 |![](https://images.gitee.com/uploads/images/2022/0606/225151_6370d757_10924011.png "屏幕截图.png")| |在课程具体信息页面中可以通过点击“删除”或“修改”按钮对该课程进行相应操作。|![](https://images.gitee.com/uploads/images/2022/0606/225155_c545132f_10924011.png "屏幕截图.png")| |删除后课程将会从课程表主界面消失;更改后,新的课程信息会再次保存到课程表主界面。| | ### 9.设计小结 通过此次课程表的设计,深深的感觉自己的知识经验匮乏;也正是通过此次大作业,不断进行尝试、排错、修改,从修改中获得更多的经验,这是在学习理论知识时绝对学习不到的经验。不仅让我对Android的内容有了更加深入的学习,也对sqlite数据库有了更加熟练的应用。还培养了我的逻辑思维能力,为以后的学习打下了坚实的基础。