基于Android的小学数学游戏App的开发与设计

基于Android的小学数学游戏App的开发与设计

摘要:

    本研究旨在开发一款基于Android平台的小学数学游戏App,以提高小学生对数学学习的兴趣和能力。通过系统分析小学数学教学内容和小学生的学习特点,结合游戏化教育理念,设计了一系列有趣的数学游戏关卡和挑战。本文详细介绍了该App的开发与设计过程,并探讨了其在教育领域中的应用效果。本研究通过对小学数学教学大纲和学生学习需求的分析,确定了App所要涵盖的数学知识点和难度级别。考虑到小学生对游戏性和互动性的喜爱,我们采用了游戏化教育的方法,将数学知识融入到有趣的游戏场景中。设计了一系列具有挑战性的关卡和任务,既考验了小学生的数学技能,又激发了他们的学习兴趣。

接着,本研究利用Android Studio作为主要开发工具,使用Java语言编写代码实现了该App的各个功能模块。其中包括题目生成、用户界面设计、游戏逻辑等。通过合理的界面设计和交互方式,使得小学生能够轻松上手,并享受到愉快的游戏体验。同时,我们还加入了奖励机制和成就系统,激发小学生的学习动力和成就感。为了验证该App的可行性和有效性,我们进行了测试和收集用户反馈。测试结果表明,该App不仅在提高小学生数学学习能力方面取得了显著效果,还提升了他们对数学的兴趣和积极性。用户反馈也显示出对该App的认可和喜爱,认为它是一种有益于数学学习的创新工具。

本研究成功地开发并设计了一款基于Android的小学数学游戏App。该App不仅在教育领域具有实际应用价值,而且能够帮助小学生提高数学学习的效果和兴趣。未来,我们将进一步优化和完善该App,以满足更多小学生的学习需求,并为其他学科的教学开发类似的游戏化教育工具。

关键词:Android应用开发,小学数学,游戏化教育

Development and Design of Primary School Mathematics Game App Based on Android

Abstract:This study aims to develop an Android-based primary school mathematics game app to enhance students' interest and abilities in mathematics learning. By systematically analyzing the content of primary school mathematics teaching and the learning characteristics of students, combined with the concept of gamified education, a series of interesting mathematical game levels and challenges were designed. This article provides a detailed description of the development and design process of the app and explores its application effects in the field of education.

We adopted a gamified education approach to integrate mathematical knowledge into interesting game scenarios. A series of challenging levels and tasks were designed to test students' mathematical skills and stimulate their interest in learning.this study utilized Android Studio as the main evelopment tool and used Java language to implement various functional modules of the app, including question generation, user interface design, game logic, etc. Through reasonable interface design and interaction methods, primary school students can easily get started and enjoy a pleasant gaming experience. In addition

Finally, to validate the feasibility and effectiveness of the app, we conducted testing and collected user feedback. The test results showed that the app not only achieved significant effects in improving primary school students' mathematical learning abilities but also enhanced their interest and enthusiasm for mathematics. User feedback also indicated recognition and fondness for the app, considering it an innovative tool beneficial to mathematics learning.In conclusion, this study successfully developed and designed an Android-based primary school mathematics game app. The app not only has practical application value in the field of education but also helps improve the effectiveness and interest of primary school students in mathematics learning. In the future, we will further optimize and improve the app to meet the learning needs of more primary school students and develop similar gamified education tools for other subjects.

Key words: Android Application Development, Primary School Mathematics, Gamified Education

目录

本科毕业论文(设计)

基于Android的小学数学游戏App的开发与设计

基于Android的小学数学游戏App的开发与设计

1 绪论

1.1 开发背景及意义

1.1.1 现状

2 系统需求分析

2.1 系统可行性分析

2.1.1 技术可行性

2.1.2经济可行性

2.1.3时间可行性

2.1.4用户接受度

2.2 系统功能需求分析

2.3 业务需求分析

3系统的流程分析和基本框架

3.1  系统流程分析

3.1.1  注册功能流程

3.1注册功能流程图

3.1.2  登录及系统功能模块

3.2系统习题流程图

3.3  系统基本架构的设计

3.5总体结构设计图

3.6用户功能结构图

4数据库模型设计

4.1  数据库需求分析

4.2  数据库概念结构设计

4.1总关系E-R图

4.2用户数据E-R图

4.3因素和倍数E-R图

4.3  数据库物理结构设

5  功能模块的设计与实现

5.1  注册模块的实现

5.2 管理员添加题目

5.3 管理习题

5.4 用户管理

5.5 用户答题,倍数与因素

5.6 用户答题,倍数与因素

参考文献

1 绪论 

随着移动技术的快速发展和智能手机的普及,教育类应用程序已成为增强学生学习体验的有效工具。在各种学科中,数学教育在小学课程中扮演着至关重要的角色。然而,许多学生发现数学具有挑战性,并且缺乏学习该学科的兴趣。

为解决这一问题,游戏化教育已成为一种有希望的方法,可以吸引学生并使学习更加愉快。通过将游戏元素融入教育内容中,游戏化教育不仅增强了学生的动力,还培养了他们的问题解决能力和批判性思维能力。

在这种背景下,本研究旨在开发和设计一款基于Android平台的小学数学游戏App。该应用旨在通过结合游戏化教育原则和对小学数学教学内容以及学生学习特点的分析,提高学生对数学的兴趣和能力。

本文的绪论部分概述了研究的目标和方法。此外,它还概述了开发面向小学生的游戏化数学应用程序在意义和潜在影响方面的重要性。

接下来的章节将深入探讨应用程序的开发和设计过程,包括数学主题的选择、游戏关卡和挑战的创建,以及互动元素的实施。此外,本研究将通过测试和收集用户反馈来探讨应用程序在提高学生数学学习成效方面的有效性。

总的来说,基于Android平台开发的小学数学游戏应用程序,采用游戏化教育方法,具有潜力改变传统的学习方法,营造积极的学习环境,助力年轻学生的成长。。

1.1 开发背景及意义

随着信息技术的飞速发展,移动应用已经成为人们日常生活中不可或缺的一部分。在教育领域,移动应用的运用也逐渐成为提升学习效果和吸引学生注意力的重要途径之一。特别是在小学数学教育领域,学生对抽象概念和公式往往感到困惑,传统的教学方式难以激发学生的学习兴趣和潜力。

因此,开发一款基于Android平台的小学数学游戏App具有重要的现实意义和深远影响。首先,通过结合数学教育与游戏化教学的理念,可以使学生在轻松愉快的游戏环境中学习数学知识,从而提高他们的学习兴趣和参与度。其次,利用移动应用的互动性和便捷性,可以让学生随时随地进行数学学习,进一步拓展了学习的空间和时间。

此外,小学阶段是学生形成数学基础的关键时期,良好的数学学习体验可以为他们未来的学习奠定坚实基础。因此,通过开发一款结合游戏元素的数学应用程序,可以促进学生对数学的兴趣和理解,培养其数学思维能力和解决问题的能力,为其未来的学业发展打下坚实基础。

开发基于Android平台的小学数学游戏App不仅符合当前教育技术的发展趋势,更能够有效提升学生的学习效果和学习动力,具有广泛的应用前景和深远的社会意义。

      1. 现状 

目前,移动应用在教育领域的运用已经成为一种全球性的趋势。许多学校和教育机构开始采用移动应用作为辅助教学工具,以提升学生的学习效果和吸引他们的注意力。特别是在数学教育领域,许多开发人员和教育者都意识到游戏化教学方法的潜力,因此推出了各种数学教育类的移动应用程序。

这些应用程序通常结合了数学知识的讲解、练习题和互动游戏等元素,旨在使学生在愉快的游戏环境中学习数学知识。同时,这些应用还提供了个性化的学习体验,帮助学生根据自身水平和兴趣进行学习。

在移动平台上,尤其是Android平台,数学教育类应用程序的数量和品质都在不断提升。这些应用不仅提供了丰富的数学学习资源,还结合了图像、声音和互动性等多种元素,使学习过程更加生动有趣。

然而,与此同时,也需要注意到当前数学教育类应用程序存在着质量参差不齐、内容单一或难度不够匹配学生实际水平等问题。因此,如何在现有基础上创新设计一款更加精准、有趣且有教育意义的小学数学游戏App,成为当前教育技术领域的一个重要挑战。总的来说,数学教育移动应用的现状是多样且丰富的,但也面临着提升内容质量、增强教学效果等方面的挑战。因此,开发一款优秀的小学数学游戏App将在当前的教育技术发展中具有重要意义

2 系统需求分析

2.1 系统可行性分析

2.1.1 技术可行性

确保技术上能够实现设计的游戏系统,包括开发所需的软件、硬件资源是否具备,以及技术团队是否具备开发和维护该系统所需的技能和经验。

考虑选择合适的开发工具和平台,以确保游戏系统可以跨平台使用,满足不同用户设备的需求。

2.1.2经济可行性

进行成本效益分析,评估开发、运营和维护游戏系统的成本,并与预期收益进行比较。

可以考虑寻求资金支持或合作伙伴来共同承担项目开发成本,降低经济风险。

确保游戏系统的设计、内容和运营符合相关法律法规,特别是涉及儿童教育和隐私保护方面的法规。

需要对知识产权、数据管理和用户隐私等问题进行充分考虑,并制定相应的合规政策和措施。

2.1.3时间可行性

制定合理的项目开发计划和时间表,确保游戏系统可以按时完成并投入使用。

考虑项目开发过程中可能出现的延迟和风险因素,并制定相应的风险管理计划。

2.1.4用户接受度

进行市场调研和用户需求分析,确保游戏系统的设计符合目标用户的喜好和需求,可以进行用户测试和反馈收集,及时调整和改进系统设计,提高用户体验和接受度。

通过综合考虑以上方面的因素,可以评估小学数学教育与游戏融合系统的可行性,并为项目的顺利实施提供指导和支持;

2.2 系统功能需求分析

用户登录和个人管理:提供用户注册、登录和退出功能,确保用户身份的唯一性和安全性。

允许用户创建和管理个人资料,包括用户名、密码、个人信息等。游戏关卡和任务:

设计多个数学关卡和任务,涵盖小学五年级数学知识点,主要是倍数,因素等。

每个关卡和任务设定相应的难度级别,允许用户根据自身水平选择合适的关卡和任务进行学习和挑战。

游戏界面和操作:

提供简洁清晰的游戏界面,包括题目展示区、选项选择区、以便用户理解和操作。支持多种输入方式,如键盘输入或触屏操作,以适应不同设备的使用习惯。

自动记录用户的学习进度和成绩,包括关卡通关情况、答题正确率等。提供学习历史和统计报告,帮助用户了解自己的学习情况和进展。

社交互动和竞技场:

允许用户与其他用户进行比较和竞争,例如排行榜、挑战赛等功能,以激发学习动力和竞争意识。

提供社交分享功能,让用户可以分享学习成果和经验。

设置和个性化:

提供个性化设置选项,允许用户自定义游戏界面、音效、难度等参数,以满足不同用户的需求和喜好。

可以支持多语言版本,以适应不同地区和用户的语言需求。

数据管理和安全:

管理用户个人信息和学习数据的安全性和隐私保护,确保符合相关法律法规。

提供数据备份、恢复和加密等功能,防止数据丢失或泄露的风险。

通过以上的功能需求分析,可以确保小学数学教育与游戏融合系统具备足够的功能来支持学生的数学学习和提高学习动力,同时提供良好的用户体验。

2.3 业务需求分析

针对学习数学中的因素、倍数和质数的练习App,以下是关于业务需求分析的详细内容:

为用户提供一个便捷的平台,帮助他们系统学习和练习数学中的因素、倍数和质数概念,提高数学能力和解题技巧。帮助用户深入理解因素、倍数和质数的概念,掌握相关计算方法和应用技巧。

面向小学生、家长、教师等各类用户群体,尤其适合小学阶段学生及其家长使用。用户可以根据自身需要选择不同难度级别的练习内容,满足不同年龄和能力水平的学习需求。

功能需求:提供丰富多样的练习题库,涵盖因素、倍数和质数的相关知识点,包括定义、性质、计算方法和应用题等。支持不同难度级别的练习模式,包括初级、中级和高级,以适应不同用户的学习水平和需求。供定制化练习功能,用户可以根据自身学习需求选择特定的练习题目进行训练。时评估用户练习成绩,给出详细的答题反馈和解析,帮助用户及时纠正错误、巩固知识点。

用户体验:设计简洁直观的用户界面,易于操作和导航,确保用户能够快速上手并享受学习过程。

支持多种设备平台,如手机、平板、电脑等,提供灵活的学习方式和场景选择。

提供个性化设置选项,允许用户自定义学习计划、学习时间和学习进度,提升用户学习体验。

数据管理和安全:确保用户个人信息和学习数据的安全性和隐私保护,遵守相关法律法规,保障用户权益。提供数据备份和恢复功能,防止数据丢失或损坏,保证用户学习记录的完整性和可靠性。

通过以上业务需求分析,这样一款学习数学中的因素、倍数和质数的练习App将能够有效地满足用户的学习需求,提升用户学习体验和效果,促进数学学习的深入和提高;

3系统的流程分析和基本框架

3.1  系统流程分析 

3.1.1  注册功能流程

因为没有给未注册用户提供注册,用户需要通过系统注册才能使用该数学的练习知识,注册只需要账号信息,手机号,密码等,注册流程如图3.1所示。

3.1注册功能流程图

3.1.2  登录及系统功能模块

系统首先检查用户提交的登录信息,用户登录成功后方可进行搜索,从数据检索所注册的账户及登入密码信息;流程如图3.2所示。

3.2系统习题流程图

数学练习题系统的数据流图如下:

3.3 层数据流图

3.3  系统基本架构的设计

根据3.2节中功能模块的划分,得出系统总体结构设计架构如图3.5所示。

3.5总体结构设计图

用户权限包含了答题、练习模式、专项练习、选择答题等功能,如图3.6所示

3.6用户功能结构图

4数据库模型设计

4.1  数据库需求分析

系统运行中用户的要求更具体、更充分,直接体现在数据的保存、更新频率以及在各种数据项条件下的查询,这一原则要求其数据库设计结构同时满足这些关键信息的输出和输入要求。添加程序关键数据信息,为每个过程的数据结构进行处理和分析,并为下一个具体功能的数据库结构设计打下坚实的基础。

用户办理:管理人员和用户都可以在本系统中举行用户的信息的办理和改正,包罗用户个人信息的增、删、改、查。

普通管理员办理:管理人员和普通管理员都可以在本系统中举行普通管理员的信息的办理和改正,包罗普通管理员个人信息的增、删、改、查。

4.2  数据库概念结构设计

根据以上分析得知本系统中的实体有:用户数据、因素倍数实体、选择题实体、特殊数实体、等实体。

每一个实体都有自己的数据项组成,具体如图4.1:

4.1总关系E-R图

用户数据E-R图包含了id、账号、密码、电话,出生日期、、借阅限时(天)、等数据项,如图4.2所示

4.2用户数据E-R图

因素和倍数E-R图包含了id、倍数因素选择、倍数题、是否答题,是否正确、等数据项,如图4.3所示

4.3因素和倍数E-R图

质数选择题E-R图包含了id、质数、题目、选项,正确选项、是否答题

等数据项,如图4.3所示

4.4质数选择题数E-R图

4.3  数据库物理结构设

1)用户信息表的属性有:主键id、账号、密码。详情如表1用户信息表所示。

1 User信息表

列名

数据类型

长度

是否主键

允许Null值

说明

id

nvarchar

20

NOT NULL

编号

User

nvarchar

20

NOTNULL

账号

Pwd

nvarchar

20

NOTNULL

密码

Address

50

NULL

地址

Phone

char

50

Null

d电话

2)倍数因素信息表的属性有:名称、主键id,选项,倍数,是否正确,是否答题等。详情如表2分类信息表所示。

表2倍数因素信息表(sort)

列名

类型

长度

能否为空

是否主键

备注

id

Int

11

主键id

name

Varchar

50

名称

Flag

Int

2

是否答题

IsRight

Int

5

是否正确

Account

Int

10

倍数选项

3)选择题表的属性有:主键id、题目名称、选项、正确答案、是否答题,是否正确,题型。详情如表3影视信息表所示。

表3选择题表(product) 

列名

类型

长度

能否为空

是否主键

备注

id

Int

11

主键id

name

Varchar

50

题目

Number

Varchar

50

选项

Flag

Varchar

50

是否答题

IsR

Varchar

20

正确答案

Type

Int

11

题型

remarks

Varchar

50

是否正确

4)订单详情信息表的属性有:主键id、影视名、分类、答题统计、创建日期、状态、答题人等。详情如4成绩信息信息表所示。

表5 成绩信息表(order_goods)

列名

类型

长度

能否为空

是否主键

备注

id

Int

11

主键id

name

Varchar

50

名称

sort

Varchar

50

分类

nums

Int

11

答题统计

sdate

Varchar

50

创建日期

state

Varchar

50

状态

uname

Varchar

50

答题人

5  功能模块的设计与实现

系统功能设计是为了满足用户的需求,并提供便捷、高效的操作界面。在设计过程中,需要遵循一些原则,如实用性、清晰性、多样性和可扩展性等。

首先,系统功能设计应以实用性为出发点。系统功能应该能够解决用户的实际问题,提供有用的功能。在这个基础上,设计界面应该清晰明了,用户能够轻松地找到所需的功能,操作流程简单明确。其次,界面设计应该避免单调,为用户提供多样性的选择。通过使用不同的颜色、图标、布局等元素,可以使界面更加生动有趣,提高用户的使用体验。同时,系统设计还应符合用户的合理需求。在需求分析阶段,需要充分了解用户的需求,包括功能需求、操作习惯等。根据用户的需求,设计出合理的功能模块和界面布局,以便用户能够快速找到所需的功能,并能够轻松上手使用。

此外,系统设计应该具有可扩展性。系统的功能应该基于模块化设计,以便于后续的二次开发和功能扩展。当用户提出新的需求时,可以通过添加新的模块或功能来满足用户的需求,而不需要对整个系统进行大规模的修改。

最后,系统设计应保持整体性。虽然根据用户需求进行二次开发是可以的,但需要注意不破坏系统的整体结构和功能,以保证系统的稳定性和安全性。在进行二次开发时,应进行充分的测试和验证,确保新功能与原有功能的兼容性和一致性。

总之,系统功能设计应以用户需求为导向,注重实用性和清晰性,同时提供多样性的选择。设计应符合用户的合理需求,并具有可扩展性和整体性,以便系统能够不断升级和完善

5.1  注册模块的实现

系统为开发方便未给未注册用户预留注册功能,所以用户必须先注册才能进行学习等动作,所以本系统要提供便捷的用户注册功能,如图5.1为用户注册模块的实现界面。

图5-1,注册页面

部分代码:

@Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_register_stu);

        initView();

    }

    protected void initView() {

//        setTitle(WordUtil.getString(R.string.reg_register));

        TextView  textView = findViewById(R.id.titleView);

        textView.setText("注 册");

        mEditPhone = (EditText) findViewById(R.id.edit_address);

        mUserName = (EditText) findViewById(R.id.edit_user);

        mEditCode = (EditText) findViewById(R.id.edit_code);

        mEditPwd1 = (EditText) findViewById(R.id.edit_pwd_1);

        mEditPwd2 = (EditText) findViewById(R.id.money);

        stuNum = (EditText) findViewById(R.id.stuNum);

        birthday = (EditText) findViewById(R.id.birthday_edit);

        mBtnCode = (TextView) findViewById(R.id.btn_code);

        mBtnRegister = findViewById(R.id.btn_register);

//        mGetCode = WordUtil.getString(R.string.reg_get_code);

//        mGetCodeAgain = WordUtil.getString(R.string.reg_get_code_again);

        mEditPhone.addTextChangedListener(new TextWatcher() {

            @Override

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override

            public void onTextChanged(CharSequence s, int start, int before, int count) {

//                if (!TextUtils.isEmpty(s) && s.length() == 11) {

//                    mBtnCode.setEnabled(true);

//                } else {

//                    mBtnCode.setEnabled(true);

//                }

//                changeEnable();

            }

            @Override

            public void afterTextChanged(Editable s) {

            }

        });

        TextWatcher textWatcher = new TextWatcher() {

            @Override

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override

            public void onTextChanged(CharSequence s, int start, int before, int count) {

//                changeEnable();

            }

            @Override

            public void afterTextChanged(Editable s) {

            }

        };

        mEditCode.addTextChangedListener(textWatcher);

        mEditPwd1.addTextChangedListener(textWatcher);

        mEditPwd2.addTextChangedListener(textWatcher);

        mHandler = new Handler() {

            @Override

            public void handleMessage(Message msg) {

                mCount--;

                if (mCount > 0) {

                    mBtnCode.setText(mGetCodeAgain + "(" + mCount + "s)");

                    if (mHandler != null) {

                        mHandler.sendEmptyMessageDelayed(0, 1000);

                    }

                } else {

                    mBtnCode.setText(mGetCode);

                    mCount = TOTAL;

                    if (mBtnCode != null) {

                        mBtnCode.setEnabled(true);

                    }

                }

            }

        };

//        mDialog = DialogUitl.loadingDialog(mContext, getString(R.string.reg_register_ing));

//        EventBus.getDefault().register(this);

    }

    private void changeEnable() {

        String phone = mEditPhone.getText().toString();

        String code = mEditCode.getText().toString();

        String pwd1 = mEditPwd1.getText().toString();

        String pwd2 = mEditPwd2.getText().toString();

        mBtnRegister.setEnabled(!TextUtils.isEmpty(phone) && !TextUtils.isEmpty(code) && !TextUtils.isEmpty(pwd1) && !TextUtils.isEmpty(pwd2));

    }

    public void registerClick(View v) {

        int i = v.getId();

        if (i == R.id.btn_code) {

//            getCode();

        } else if (i == R.id.btn_register) {

            UserDao userDao = new UserDao();

            UserBean  userBean = userDao.getUser(mUserName.getText().toString());

            if(userBean!= null){

                Toast.makeText(this,"改用户名已存在,请换其他账号试试",Toast.LENGTH_LONG).show();

                return;

            }

            UserBean hashMap = new UserBean();

            hashMap.setId(System.currentTimeMillis()+"");

            hashMap.setStuNum(stuNum.getText().toString());

            hashMap.setUser_id(birthday.getText().toString());

            hashMap.setPhone(mEditPhone.getText().toString());

            hashMap.setType(type);

            hashMap.setName(mUserName.getText().toString());

            hashMap.setPwd(mEditPwd2.getText().toString());

            hashMap.setAddress(stuNum.getText().toString());

            hashMap.setLevel(level);

            userDao.addOrUpdate(hashMap);

            Toast.makeText(this,"注册成功,跳转登录",Toast.LENGTH_LONG).show();

            finish();

//            register();

        }

    }

    public void backClick(View v){

        finish();

    }

    @Override

    protected void onDestroy() {

        if (mHandler != null) {

            mHandler.removeCallbacksAndMessages(null);

            mHandler = null;

        }

        super.onDestroy();

    }

}

5.2 管理员添加题目

管理员可以添加习题,如图所示:

图5-2发布选择题

核心代码:

 protected void initView() {

        TextView  textView = findViewById(R.id.titleView);

        mTitle = (EditText) findViewById(R.id.edit_title);//题目

        mSelectA = (EditText) findViewById(R.id.select_A);//选项A

        mSelectB = (EditText) findViewById(R.id.edit_select_B);//选项B

        mSelectC = (EditText) findViewById(R.id.edit_select_C);//选项C

        mSelectD = (EditText) findViewById(R.id.edit_select_D);//选项A

//        mPhone = (EditText) findViewById(R.id.edit_phone);

//        mContent = (EditText) findViewById(R.id.edit_content);

        mBtnRegister = findViewById(R.id.btn_register);

        radioGroupUnassured = findViewById(R.id.radioGroupUnassured);

        mSelect = findViewById(R.id.rg);

        RubbishBean rubbishBean = (RubbishBean) getIntent().getSerializableExtra("bean");

        if(rubbishBean!= null){

            mTitle.setText(rubbishBean.getName());

            mSelectA.setText(rubbishBean.getSelect_A());

            mSelectB.setText(rubbishBean.getSelect_B());

            mSelectC.setText(rubbishBean.getSelect_C());

            mSelectD.setText(rubbishBean.getSelect_D());

        }

        radioGroupUnassured.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override

            public void onCheckedChanged(RadioGroup group, int checkedId) {

                //获取被选中的radiobutton的id

                RadioButton rcheck = (RadioButton) findViewById(checkedId);

                //获取

                String checkText = rcheck.getText().toString();

                if (checkText.equals("因素及倍数")){

                    userID = "1";

                }

                else if (checkText.equals("质数")){

                    userID= "2";

                }

                else if (checkText.equals("特殊倍数")){

                    userID = "3";

                }

                else if (checkText.equals("其他")){

                    userID = "4";

                }

                Toast.makeText(PublishHomeActivity.this, "您选中的是:" + checkText, Toast.LENGTH_SHORT).show();

            }

        });

        mSelect.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override

            public void onCheckedChanged(RadioGroup group, int checkedId) {

                //获取被选中的radiobutton的id

                RadioButton rcheck = (RadioButton) findViewById(checkedId);

                //获取

                String checkText = rcheck.getText().toString();

                if (checkText.equals("A")){

                    answer = "1";

                    answer_abcd ="A";

                }

                else if (checkText.equals("B")){

                    answer= "2";

                    answer_abcd ="B";

                }

                else if (checkText.equals("C")){

                    answer = "3";

                    answer_abcd ="C";

                }

                else if (checkText.equals("D")){

                    answer = "4";

                    answer_abcd ="D";

                }

//                type = checkedId;

//                SharePrefUtils.setLoginType(type);

//                Toast.makeText(PublishHomeActivity.this, "您选中的是:" + checkText, Toast.LENGTH_SHORT).show();

            }

        });

        mBtnRegister.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                    RubbishBean contextBean = new RubbishBean();

                    contextBean.setId(System.currentTimeMillis()+"");

                    contextBean.setName(mTitle.getText().toString());

                    contextBean.setType(userID);

                    contextBean.setSelect_A(mSelectA.getText().toString());

                    contextBean.setSelect_B(mSelectB.getText().toString());

                    contextBean.setSelect_C(mSelectC.getText().toString());

                    contextBean.setSelect_D(mSelectD.getText().toString());

                    contextBean.setAnswer_abcd(answer_abcd);

                if (!TextUtils.isEmpty(answer)){

                    if (answer.equals("1")){

                        contextBean.setAnswer(contextBean.getSelect_A());

                    }

                    else if (answer.equals("2")){

                        contextBean.setAnswer(contextBean.getSelect_B());

                    }

                    else if (answer.equals("3")){

                        contextBean.setAnswer(contextBean.getSelect_C());

                    }

                    else if (answer.equals("4")){

                        contextBean.setAnswer(contextBean.getSelect_D());

                    }

                }

                    RubbishBeanDao rubbishBeanDao = new RubbishBeanDao();

                    rubbishBeanDao.addOrUpdate(contextBean);

                Toast.makeText(PublishHomeActivity.this, "添加成功!", Toast.LENGTH_LONG).show();

                finish();

            }

        });

    }

    public void registerClick(View v) {

        int i = v.getId();

        if (i == R.id.btn_code) {

//            getCode();

        } else if (i == R.id.btn_register) {

        }

    }

5.3 管理习题

对系统的习题进行操作,增删改查

部分核心代码:

protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.shopping_activity_address);

        TextView  textView = (TextView) findViewById(R.id.titleView);

        textView.setText("试题列表");

        recycerView = (RecyclerView) findViewById(R.id.data_re);

        all = (TextView) findViewById(R.id.all);

        wait = (TextView) findViewById(R.id.wait);

        pj = (TextView) findViewById(R.id.pj);

        tk = (TextView) findViewById(R.id.tk);

        back = (ImageView) findViewById(R.id.btn_back);

        type= getIntent().getStringExtra("type");

        back.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                finish();

            }

        });

        rubbishBeanDao = new RubbishBeanDao();

       addressBeanList=  rubbishBeanDao.getContactAll(type);

        adapter = new AddressListAdapter();

//        if (Build.VERSION.SDK_INT >= 21) {

//            View decorView = getWindow().getDecorView();

//            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

//                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;

//            decorView.setSystemUiVisibility(option);

//            getWindow().setStatusBarColor(Color.argb(100,0,0,0));

//        }

        all.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                all.setTextSize(20f);

                wait.setTextSize(16f);

                pj.setTextSize(16f);

                tk.setTextSize(16f);

                recycerView.setVisibility(View.VISIBLE);

            }

        });

5.4 用户管理

管理员对注册用户信息管理,如图所示:

图5-4用户管理

部分核心代码:

public ViewHolder(View itemView) {

            super(itemView);

//            imageView = (ImageView) itemView.findViewById(R.id.order_img);

            ll = itemView.findViewById(R.id.activity_main);

            name = (TextView) itemView.findViewById(R.id.name);

            phone = (TextView) itemView.findViewById(R.id.tpye);

            address = (TextView) itemView.findViewById(R.id.address);

            b = (TextView) itemView.findViewById(R.id.b);

            a = (TextView) itemView.findViewById(R.id.a);

            c = (TextView) itemView.findViewById(R.id.c);

            d = (TextView) itemView.findViewById(R.id.d);

//            totalPrice = (TextView)itemView. findViewById(R.id.price);

//            imageView = (ImageView) itemView.findViewById(R.id.order_img);

            itemView.setOnClickListener(new View.OnClickListener() {

                @Override

                public void onClick(View v) {

                    //将点击的位置传出去

                    mSelectPosition = ViewHolder.this.getAdapterPosition();

                    //在点击监听里最好写入setVisibility(View.VISIBLE);这样可以避免效果会闪

//                selectImageView.setVisibility(View.VISIBLE);

                    //刷新界面 notify 通知Data 数据set设置Changed变化

                    //在这里运行notifyDataSetChanged 会导致下面的onBindViewHolder 重新加载一遍

                    defaultInfo = mDataList.get(mSelectPosition);

                    notifyDataSetChanged();

                    if (mListener != null) {

                        mListener.onItemClick(mSelectPosition);

                    }

                }

            });

        }

    }

    public interface OnItemClickListener {

        void onItemClick(int position);

        void onClickMoreOp(int position, View view, UserBean UserBean);

//        void onClickConnectPrint(int position, OrderBean ArrangeBean);

    }

5.5 用户答题,倍数与因素

倍数与因素答题是连线的方式

图5-5,倍数与因素练习

核心代码:

 protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_link_line_text);

        ButterKnife.bind(this);

        /**

         * 24/5,10,6,7,1

         * 195/6,26,13,16,9

         * 42/9,14,12,3,7

         * 126/4,5,27,13,21

         * 45/4,15,5,6,2

         */

        List<LinkDataBean> list = new ArrayList<LinkDataBean>();

        LinkDataBean linkDataBean = new LinkDataBean();

        linkDataBean.setCol(1);

        linkDataBean.setContent("24");

        linkDataBean.setRow(0);

        linkDataBean.setType("0");

        linkDataBean.setQ_num(0);

        LinkDataBean linkDataBean0 = new LinkDataBean();

        linkDataBean0.setCol(0);

        linkDataBean0.setContent("1");

        linkDataBean0.setRow(0);

        linkDataBean0.setType("0");

        linkDataBean0.setQ_num(0);

        LinkDataBean linkDataBean1 = new LinkDataBean();

        linkDataBean1.setCol(0);

        linkDataBean1.setContent("5");

        linkDataBean1.setRow(0);

        linkDataBean1.setType("0");

        linkDataBean1.setQ_num(1);

        LinkDataBean linkDataBean2 = new LinkDataBean();

        linkDataBean2.setCol(0);

        linkDataBean2.setContent("10");

        linkDataBean2.setRow(0);

        linkDataBean2.setType("0");

        linkDataBean2.setQ_num(2);

        LinkDataBean linkDataBean3 = new LinkDataBean();

        linkDataBean3.setCol(0);

        linkDataBean3.setContent("6");

        linkDataBean3.setRow(0);

        linkDataBean3.setType("0");

        linkDataBean3.setQ_num(0);

        LinkDataBean linkDataBean4 = new LinkDataBean();

        linkDataBean4.setCol(0);

        linkDataBean4.setContent("7");

        linkDataBean4.setRow(0);

        linkDataBean4.setType("0");

        linkDataBean4.setQ_num(4);

        list.add(linkDataBean);

        list.add(linkDataBean1);

        list.add(linkDataBean0);

        list.add(linkDataBean2);

        list.add(linkDataBean3);

        list.add(linkDataBean4);

        linkLineView.setData(list);

        linkLineView.setOnChoiceResultListener((correct, yourAnswer) -> {

            // 结果

            StringBuilder sb = new StringBuilder();

            sb.append("正确与否:");

            sb.append(correct);

            sb.append("\n");

            tvResult.setText(sb.toString());

        });

        next.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                startActivity(new Intent(LinkLineTextActivity.this,LinkLineTextActivity1.class));

            }

        });

5.6 用户答题,倍数与因素

选择题练习,如图所示:

图5-6 选择题练习模式

参考文献

[1]陈飞,罗文广. 基于Android的智能交互APP设计[J]. 广西科技大学学报,2017,28(02):29-34+41.

[2]何远,张玉清,张光华. 基于黑盒遗传算法的Android驱动漏洞挖掘[J]. 计算机学报,2017,40(05):1031-1043.

[3]申晋祥,鲍美英. 基于Android的移动在线教育平台的设计与实现[J]. 软件,2016,37(03):30-33.

[4]曾露. MVP模式在Android中的应用研究[J]. 软件,2016,37(06):75-78.

[5]周,尹生强,王冬青,王英杰. 基于Eclipse和Android系统的App开发平台搭建研究[J]. 青岛大学学报(工程技术版),2016,31(03):49-53.

[6]路晔绵,李轶夫,应凌云,谷雅聪,苏璞睿,冯登国. Android应用第三方推送服务安全分析与安全增强[J]. 计算机研究与发展,2016,53(11):2431-2445.

[7]卿斯汉. Android安全的研究现状与展望[J]. 电信科学,2016,32(10):2-6+12-14.

[8]朱丽娜. 基于Android的日程管理系统的设计与实现[D].山东大学,2016.

[9]田志颖. 基于Android的移动学习软件设计与实现[D].曲阜师范大学,2016.

[10]葛臻. 基于Android平台的课堂笔记APP设计与实现[D].华中师范大学,2016.

[11]吕留记. 基于Android的即时通讯系统的研究与实现[D].电子科技大学,2016.

  • 47
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农乐园

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

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

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

打赏作者

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

抵扣说明:

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

余额充值