android课程设计-单词本(Android期末作业,Android课设,AndroidStudio毕业设计)

      本人专注于Android/鸿蒙原生app的开发,是多年的Android开发人员;希望我发布的此篇文件可以帮助到您;

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

一、单词本项目介绍
1:Splash/启动页面:app打开后会停留2秒后自动跳转

2:引导页面:app第一次打开时会出现引导页,左右滑动介绍app的功能等
3:注册模块,用户在使用app时可需要进行用户信息的注册
3:登录模块:用户成功注册后可进行app的登录
4:添加单词:用户可以添加自己的单词和解释释义
5:查看单词:用户可以在首页单词列表查看自己添加的单词和释义
6:删除单词:用户可以在首页单词列表长按单词进行删除操作
7:查询单词:用户可以通过首页的搜索框进行单词的搜索

8:收藏单词:用户可以收藏和取消收藏单词

二、运行环境

开发工具:Android studio3.5.2(下载地址:https://dl.google.com/dl/android/studio/install/3.5.2.0/android-studio-ide-191.5977832-windows.exe

开发语言:java jdk1.7

运行:逍遥模拟器或者Android studio自带的模拟器
 

三、APP运行截图

四、APP运行视频

Android单词本、Android课设、毕设、Android studio_哔哩哔哩_bilibili基于Android平台的单词本app,使用SQLite数据库存储用户信息和单词信息,开发工具为Android studio3.5.2(https://dl.google.com/dl/android/studio/install/3.5.2.0/android-studio-ide-191.5977832-windows.exe),开发语言为Java,查询单词使用到了OKHttp网络请求API接口, 视频播放量 197、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 1、转发人数 0, 视频作者 本源来芩, 作者简介 ,相关视频:android studio安卓源码app源码课程表程序开发大作业成品毕设期末课设java,Android菜谱美食分享、SQLite数据库、毕设、课设,Android运动健身APP、课设毕设、安卓地图运动轨迹项目实战,Android课设 毕设 安卓记账本项目实战,Android安卓期末大作业,图书管理app,源码+报告,Android安卓期末大作业,线上花店app,源码+报告 远程调试 Android Studio,[tiktok]安卓国际版抖音下载 无需拔卡 超多漂亮妹子,冒死上传(已被开除)!花了三千块在某站买的刘彬单词记忆。每天一遍,轻松掌握6000词,【背单词】词根词缀背词大法(重点词汇)这个方法一天能背300个单词,冒死上传(已被开除)!花了五千块在某站买的刘彬单词记忆。每天一遍,轻松掌握6000词,【背单词】词根词缀背词大法(重点词汇)这个方法一天能背300个单词,小米6刷iOS成功icon-default.png?t=N7T8https://www.bilibili.com/video/BV1DD421G7R7/?spm_id_from=333.999.0.0&vd_source=6e0fdd0dd2cb74bb4d96d4dd6e013636

五、核心代码
1、登录注册

public class LoginActivity extends AppCompatActivity {
    private EditText accountEdit, passwordEdit;
    private Button loginBtn;
    private TextView registerTv;
    private UserDao userDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);


        userDao = new UserDao(this);
        accountEdit = findViewById(R.id.account_edit);
        passwordEdit = findViewById(R.id.password_edit);
        loginBtn = findViewById(R.id.login_btn);
        registerTv = findViewById(R.id.register_tv);

        accountEdit.setText(SharedPreferenceUtil.getAccount());
        passwordEdit.setText(SharedPreferenceUtil.getPwd());


        loginBtn.setOnClickListener(v -> {
            String account = accountEdit.getText().toString();
            String password = passwordEdit.getText().toString();

            if (TextUtils.isEmpty(account)) {
                Toast.makeText(LoginActivity.this, "请输入账号", Toast.LENGTH_SHORT).show();
                return;
            }
            if (TextUtils.isEmpty(password)) {
                Toast.makeText(LoginActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
                return;
            }

            User user = null;
            List<User> eeList = userDao.selectSQL();
            if (eeList != null) {
                for (User e : eeList) {
                    if (e.getAccount().equals(account)) {
                        user = e;
                        break;
                    }
                }
            }
            if (user == null) {
                Toast.makeText(this, "该账号未注册", Toast.LENGTH_SHORT).show();
            } else {
                if (password.equals(user.getPassword())) {
                    SharedPreferenceUtil.setAccount(account);
                    SharedPreferenceUtil.setPwd(password);
                    MyApplication.getInstance().setUser(user);
                    Toast.makeText(this, "登录成功!", Toast.LENGTH_SHORT).show();
                    startActivity(new Intent(LoginActivity.this, MainActivity.class));
                    finish();
                } else {
                    Toast.makeText(this, "密码输入错误!", Toast.LENGTH_SHORT).show();
                }
            }

        });

        registerTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginActivity.this, RegisterActivity.class));
            }
        });

    }
}

public class RegisterActivity extends AppCompatActivity {
    private EditText accountEdit,passwordEdit,checkEdit;
    private Button loginBtn;
    private TextView backTv;
    private UserDao userDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        userDao = new UserDao(this);
        accountEdit = findViewById(R.id.account_edit);
        passwordEdit = findViewById(R.id.password_edit);
        checkEdit = findViewById(R.id.check_password_edit);
        loginBtn = findViewById(R.id.login_btn);
        backTv = findViewById(R.id.back_btn);

        backTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });


        loginBtn.setOnClickListener(v -> {
            String account = accountEdit.getText().toString();
            String password = passwordEdit.getText().toString();
            String checkPassword = checkEdit.getText().toString();


            if (TextUtils.isEmpty(account)){
                Toast.makeText(RegisterActivity.this, "请输入账号", Toast.LENGTH_SHORT).show();
                return;
            }
            if (TextUtils.isEmpty(password)){
                Toast.makeText(RegisterActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
                return;
            }
            if (TextUtils.isEmpty(checkPassword)){
                Toast.makeText(RegisterActivity.this, "请再次输入密码", Toast.LENGTH_SHORT).show();
                return;
            }
            if (!checkPassword.equals(password)){
                Toast.makeText(RegisterActivity.this, "两次输入的密码不一致", Toast.LENGTH_SHORT).show();
                return;
            }

            User user = userDao.queryItem(account);
            if (user == null){
                user = new User();
                user.setAccount(account);
                user.setPassword(password);
                if (userDao.addSQL(user) > 0){
                    Toast.makeText(this, "账号注册成功!", Toast.LENGTH_SHORT).show();
                    finish();
                }else {

                }

            }else {
                Toast.makeText(this, "该账号已被注册!", Toast.LENGTH_SHORT).show();
            }

        });


    }
}

2、添加单词

public class AddActivity extends AppCompatActivity {
    private ImageView imageViewBack;
    private EditText wordEdit, traEdit;
    private TextView addTv, collectionTv;
    private EntriesDao entriesDao;
    private int position;
    private Entries entries;
    private String currentAccount = SharedPreferenceUtil.getAccount();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);

        position = getIntent().getIntExtra("position", 0);
        entries = (Entries) getIntent().getSerializableExtra("data");


        entriesDao = new EntriesDao(this);

        collectionTv = findViewById(R.id.collection_tv);
        wordEdit = findViewById(R.id.word_edit);
        traEdit = findViewById(R.id.trad_edit);
        imageViewBack = findViewById(R.id.back_img);
        addTv = findViewById(R.id.add_btn);


        if (entries != null) {
            wordEdit.setText(entries.getEntry());
            traEdit.setText(entries.getExplain());
            wordEdit.setEnabled(false);

            String collectiontStr = entries.getCollections();
            if (TextUtils.isEmpty(collectiontStr)) {
                collectionTv.setText("收藏");
            } else {
                if (collectiontStr.contains(currentAccount)) {
                    collectionTv.setText("取消收藏");
                }

            }

            collectionTv.setVisibility(View.VISIBLE);
            addTv.setText("确定修改");
        }

        addTv.setOnClickListener(v -> {
            String entry = wordEdit.getText().toString();
            String explain = traEdit.getText().toString();
            if (TextUtils.isEmpty(explain)) {
                Toast.makeText(AddActivity.this, "请输入单词", Toast.LENGTH_SHORT).show();
                return;
            }
            if (TextUtils.isEmpty(entry)) {
                Toast.makeText(AddActivity.this, "请输入释义", Toast.LENGTH_SHORT).show();
                return;
            }
            if (entries == null) {
                List<Entries> eeList = entriesDao.selectSQL();
                if (eeList != null) {
                    for (Entries e : eeList) {
                        if (e.getEntry().equals(entry)) {
                            entries = e;
                            break;
                        }
                    }
                }
                if (entries == null) {
                    entries = new Entries();
                    entries.setEntry(entry);
                    entries.setExplain(explain);
                    if (entriesDao.addSQL(entries) > 0) {
                        Toast.makeText(AddActivity.this, "添加成功", Toast.LENGTH_SHORT).show();
                        setResult(RESULT_OK, new Intent().putExtra("data", entries));
                        finish();
                    } else {

                    }
                } else {
                    Toast.makeText(AddActivity.this, "该单词已存在", Toast.LENGTH_SHORT).show();

                }
            } else {
                entries.setExplain(explain);
                if (entriesDao.updateData(entries) > 0) {
                    setResult(RESULT_OK, new Intent().putExtra("data", entries).putExtra("position", position));
                    Toast.makeText(AddActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
                    finish();
                }
            }

        });

        collectionTv.setOnClickListener(v -> {
            String c = collectionTv.getText().toString();
            if (entries != null) {
                String collectiontStr = entries.getCollections();
                if ("取消收藏".equals(c)) {
                    collectionTv.setText("收藏");
                    if (!TextUtils.isEmpty(collectiontStr)) {
                        String[] array = collectiontStr.split(",");
                        StringBuilder stringBuilder = new StringBuilder();
                        for (String sss : array) {
                            if (!sss.equals(currentAccount)) {
                                if (stringBuilder.length() == 0) {
                                    stringBuilder.append(sss);
                                } else {
                                    stringBuilder.append(",").append(sss);
                                }
                            }
                        }
                        entries.setCollections(stringBuilder.toString());
                    }
                    Toast.makeText(this, "已取消收藏", Toast.LENGTH_SHORT).show();
                } else {
                    if (!TextUtils.isEmpty(collectiontStr)) {
                        entries.setCollections(collectiontStr + "," + currentAccount);
                    } else {
                        entries.setCollections(currentAccount);
                    }
                    collectionTv.setText("取消收藏");
                    Toast.makeText(this, "收藏成功", Toast.LENGTH_SHORT).show();

                }
                entriesDao.updateData(entries);
            }
        });

        imageViewBack.setOnClickListener(v -> {
            setResult(RESULT_OK);
            finish();
        });
    }
}


五、源码获取
链接: https://pan.baidu.com/s/1xmdc8P89BA6465s1jGVGFQ?pwd=d2pw 提取码: d2pw
  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安卓android课程设计分析报告 湘潭大学课程设计报告 课程名称______手机安卓开发_______ 课题名称______天气预报APP_______指导老师______周唯____ _______ 姓名____黄柳________ 学 班级____12计2班________ 小组______棒棒糖_______ 时间____2015年1月26日_____ 1. 需求分析 1) 引言 1. 编写目的 1. 为用户提供一个显示天气预报的软件,可以根据百度地图显示用户需求的城市位置 ,以及用图标表示各城市对应的气象信息,可以简洁的表示出"晴、雨、雪"和" 气温"气象信息。 2. 项目风险 1. (项目风险识别是指找出影响项目目标顺利实现的主要风险因素,并识别出这些风 险究竟有哪些基本特征、可能会影响到项目的那些方面。) 1. 联网收费视用户电话运营商的收费标准决定 2 手机或者无线信号不好时,可能无法连接或更新天气情况 3. 预期读者和阅读建议 1. 预期读者:会使用已经安装安卓系统的手机或者平板电脑及其他移动设备的用户 3 阅读建议:读者应通过该文档可以了解相关项目的需求分析、使用注意事项以及可 能存在的风险 4. 产品范围 1. 手机,平板电脑,MP4,导航仪,上网本,电纸书等使用安卓系统的数码领域 2) 综合描述 1. 产品的状况 1 Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。目前 未有统一中文名称,中国大陆地区较多人使用"安卓"或"安致"。Android操作系 统最初由AndyRubin开发,最初主要支持手机。2005年由Google收购注资,并组 建开放手机联盟开发改良,逐渐扩展到平板电脑及其他数码领域上。我们开发的 相关项目正是一个在安卓平台上开发的软件,可以用这个软件来实现用户在一些 简单的手持设备如手机或者平板电脑等上面及时的了解到用户所在城市的天气预 报。 2. 产品的功能 2 天气信息获取 2 天气信息显示 3. 系统配置功能 1. 用户类和特性 安卓平台用户:安卓新用户可以使用软件来了解用户所在城市的天气预报。熟悉安卓平 台用户还可以选择对相关软件的系统按自己的喜好进行配置并保留自己的个性化系统配 置。 安卓软件开发者:安卓软件开发者(喜好者)可以通过相关的开源代码来了解软件运行 的原理。 2. 运行环境 软件需要在支持安卓系统的可移动设备中正确安装才能正常运行。安卓版本需在2.2及以 上,同时建议用户如果是在手机移动设备使用的话,需确保手机支持联网服务。 3. 设计和实现上的限制 Eclipse是开发相关应用软件的首选集成开发环境,安卓开发环境首先需要安装支持jav a应用软件运行的java开发软件包(即JDK),然后安装集成开发环境Eclipse,最后安装 AndroidSDK的Eclipse的ADT插件。 AndroidSDK和Eclipse的ADT插件是必须使用的。 软件支持高效、快速的数据存储方式,包括快速数据存储方式SharedPreferences、文件 存储和轻量级关系数据块SQLite,可软件可以使用适合的方法对数据进行进程保存和访 问。 4. 假设和约束(依赖) 软件必须在安卓系统下才可以正常运行,若需要获取天气更新或者是短信服务,需确保 用户的数码设备支持联网及短信服务。 3) 外部接口需求 1. 用户的手机设备可以支持联网。 2. 用户界面 3. 软件接口 软件提供轻量级的进程间通信机制Intent,实现跨进程组件通信。 4. 访问硬件的API库函数通讯接口 4 HTTP协议:有多种接口可以调用你可以用Java类库封装的HttpConnection或者用A pach的开源项目的HttpGet或者HttpPost,服务器端需要编写Serlvet来响应客户 端的请求。 4 Sokcet:就是服务器端不断监听双方约定好的端口号,客户端通过服务器IP去请求 连接,连接成功后,得到Socket的输入输出流,直接操作即可。 4) 系统功能需求 天气信息显示和获取 功能描述:需有一个显示天气情况的用户界面,要求百度地图显示各城市位置(如:北 京、长沙、广州等3- 5个城市),以及用图标表示各城市对应的气象信息,表示出"晴、雨、雪"和"气温"简洁 气象信息。 输入输出信息: 输入:当触摸某一城市对应的气象图标时,显示该城市当天的温度、湿度、风向和雨雪 详细天气信息,并预报该城市后面几天的气象信息。 输出:气象信息的获取,从百度上获取天气预报信息,这些天气数据是通过后台服务获 取的,这个后台服务可以按照一定时间间隔,并将各城市的天气信息保存到SQLite数据 库中。 2. 概要设计 3. Ui界面 我们的ui界面秉承着清新的风格开发出来的。 整个软件界面使用一个

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值