移动应用开发大作业报告

1 基本信息

1.1 系统名称

中华字典

1.2 开发运行环境

开发环境:Windows 10 专业版,JDK 1.8,AndroidStudio

运行环境:Java SE Runtime Environment (JRE) 8

1.3 使用的核心技术

JFrame:作为实现界面的窗体类,用于创建图形用户界面。

Random:用来产生随机数,为系统提供随机性支持。

Swing:用于构建丰富的图形用户界面组件。

JDBC:Java Database Connectivity,用于Java程序与数据库之间的连接。

SQL:结构化查询语言,用于管理和查询数据库。

2 系统功能设计

2.1 系统总体功能

中华字典是一款基于Java开发的字典查询系统。该系统旨在为用户提供便捷、准确的汉字、词语查询服务,支持拼音查询、部首查询等多种查询方式。同时,系统还提供了详细的词语解释、例句、同义词、反义词等扩展信息,帮助用户更深入地理解词语的含义和用法。

2.2 系统模块详细设计

2.2.1 拼音查询功能模块

用户通过输入拼音来查询对应的汉字或词语。系统根据输入的拼音在数据库中检索,并返回相关结果。结果页面将展示匹配的汉字或词语列表,并提供详细的解释、例句、同义词、反义词等信息。

2.2.2 部首查询模块功能模块

用户通过选择部首来查询含有该部首的汉字。系统根据选择的部首在数据库中检索,并返回相关结果。用户可进一步筛选查询结果,以便快速定位到所需汉字。

2.2.3 成语查询功能模块

用户通过输入成语或成语的关键词来查询相关的成语信息。系统根据输入的关键词在数据库中检索,并返回相关成语列表。用户可查看成语的解释、出处、用法示例等信息。

2.2.4 成语接龙小游戏功能模块

用户可参与成语接龙小游戏,通过输入成语的最后一个字来寻找下一个成语的开头字,以完成接龙。

3 系统实现

3.1 拼音查询功能实现

3.1.1 功能描述

用户输入拼音后,系统通过调用后端接口进行数据库查询,并将查询结果返回给前端页面进行展示。前端页面提供输入框供用户输入拼音,同时展示查询结果列表和相关解释信息。

3.1.2 核心代码

package com.example.dict;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.text.TextUtils;

import android.view.View;

import android.widget.ExpandableListView;

import com.example.dict.adapter.SearchLeftAdapter;

import com.example.dict.bean.PinBuBean;

import com.example.dict.bean.PinBuWordBean;

import com.example.dict.db.DBManager;

import com.example.dict.utils.AssetsUtils;

import com.example.dict.utils.CommonUtils;

import com.example.dict.utils.URLUtils;

import com.google.gson.Gson;

import com.handmark.pulltorefresh.library.PullToRefreshGridView;

import java.util.ArrayList;

import java.util.List;

public class SearchPinyinActivity extends BaseSearchActivity {

    String url;   //获取指定拼音对应的网址

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        //加载文件数据

       initData(CommonUtils.FILE_PINYIN,CommonUtils.TYPE_PINYIN);

        setExLvListener(CommonUtils.TYPE_PINYIN);

        exLv.expandGroup(0);   //默认展开第一组

        word = "a";     //默认进去时获取的是第一个 a

        url = URLUtils.getPinyinurl(word,page,pagesize);

        // 加载网络数据

        loadData(url);

       setGVListener(CommonUtils.TYPE_PINYIN);

    }

    /**

     * 网络获取失败时会调用的接口

     * 因为拼音查询和部首查询使用的获取数据的方法不一样,所以需要分开写。

     * 所以就把onError的方法写入到子类当中

     * */

    @Override

    public void onError(Throwable ex, boolean isOnCallback) {

        List<PinBuWordBean.ResultBean.ListBean> list = DBManager.queryPyWordFromPywordtb(word, page, pagesize);

        refreshDataByGV(list);

    }

}

3.1.3 运行截图

3.2 部首查询模块功能实现

3.2.1 功能描述

用户通过选择部首来查询含有该部首的汉字。系统根据选择的部首在数据库中检索,并返回相关结果。用户可进一步筛选查询结果,以便快速定位到所需汉字。

3.2.2 核心代码

package com.example.dict;

import android.os.Bundle;

import com.example.dict.bean.PinBuWordBean;

import com.example.dict.db.DBManager;

import com.example.dict.utils.CommonUtils;

import com.example.dict.utils.URLUtils;

import java.util.List;

public class SearchBuShouActivity extends BaseSearchActivity {

    String url;   //获取指定部首对应的网址

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // 页面跳转,Title也要一起改变

        titleTv.setText(R.string.main_tv_bushou);

        //加载文件数据

       initData(CommonUtils.FILE_BUSHOU,CommonUtils.TYPE_BUSHOU);

        //开启部首的监听事件

        setExLvListener(CommonUtils.TYPE_BUSHOU);

        exLv.expandGroup(0);   //默认展开第一组

        word = "丨";     //默认进去时获取的是第一个

        url = URLUtils.getBushouurl(word,page,pagesize);

        // 加载网络数据

        loadData(url);

        setGVListener(CommonUtils.TYPE_BUSHOU);

    }

    @Override

    public void onError(Throwable ex, boolean isOnCallback) {

        List<PinBuWordBean.ResultBean.ListBean> list = DBManager.queryBsWordFromPywordtb(word, page, pagesize);

        refreshDataByGV(list);

    }

}

3.2.3 运行截图

3.3 成语查询模块功能实现

3.3.1 功能描述

3.3.2 核心代码

package com.example.dict;

import android.content.Intent;

import android.os.Bundle;

import android.text.TextUtils;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.Toast;

import com.example.dict.bean.ChengyuBean;

import com.example.dict.db.DBManager;

import com.example.dict.utils.MyGridView;

import com.example.dict.utils.URLUtils;

import com.google.gson.Gson;

import java.util.ArrayList;

import java.util.List;

public class ChengyuInfoActivity extends BaseActivity {

    // 页面中的是个textView

    TextView ziTv1,ziTv2,ziTv3,ziTv4,pyTv,jsTv,fromTv,exampleTv,yufaTv,yinzhengTv,yinghangTv;

    MyGridView tyGv,fyGv;

    ImageView collectIv;

    private String chengyu;

    List<String> tongyiList,fanyinList;    //GridView的数据源

    ArrayAdapter<String> tyAdapter,fyAdapter;

    //    设置标志位,表示汉字是否被收藏

    boolean isCollect = false;

    boolean isExist = false;    //判断这个汉字是否已经存在

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_chengyu_info);

        initView();

        initAdapter();

//        获取上一个页面传递的数据

        Intent intent = getIntent();

        chengyu = intent.getStringExtra("chengyu");

        String url = URLUtils.getChengyuurl(chengyu);

        loadData(url);

        isExist = DBManager.isExistCyuInCollcyutb(chengyu);

        isCollect = isExist;

        setCollectIvStyle();

    }

    /* 根据收藏的状态,改变星星的颜色*/

    private void setCollectIvStyle() {

        if (isCollect) {

        collectIv.setImageResource(R.mipmap.ic_collection_fs);

        }else{

            collectIv.setImageResource(R.mipmap.ic_collection);

        }

    }

    /**

     *  为GridView设置加载数据的适配器和数据源

     */

    private void initAdapter() {

        tongyiList = new ArrayList<>();

        fanyinList = new ArrayList<>();

        tyAdapter = new ArrayAdapter<>(this, R.layout.item_word_jslv, R.id.item_wordlv_tv, tongyiList);

        fyAdapter = new ArrayAdapter<>(this, R.layout.item_word_jslv, R.id.item_wordlv_tv, fanyinList);

        tyGv.setAdapter(tyAdapter);

        fyGv.setAdapter(fyAdapter);

    }

    /** 网络数据加载成功时回调用的方法*/

    @Override

    public void onSuccess(String result) {

        // 使用Gson反序列化映射成为javaBean

        ChengyuBean bean = new Gson().fromJson(result, ChengyuBean.class);

        ChengyuBean.ResultBean cyBean = bean.getResult();

        if (cyBean!=null) {

//        因数据源当中不包括成语本身,但是后期要插入数据库,所以需要保存这个成语

            cyBean.setChengyu(chengyu);

            // 插入到数据库当中

            DBManager.insertCyToCyutb(cyBean);

            // 显示数据

            showDataToView(cyBean);

        }else{

            Toast.makeText(this,"此成语无法查到,请重新查询!",Toast.LENGTH_SHORT).show();

        }

    }

    /* 网络加载数据失败时,会调用的方法*/

    @Override

    public void onError(Throwable ex, boolean isOnCallback) {

//        获取数据库当中缓存的数据

        ChengyuBean.ResultBean bean = DBManager.queryCyFromCyutb(chengyu);

        if (bean!=null) {

            showDataToView(bean);

        }

    }

    /**

     * 将获取到的数据显示在View上

     * */

    private void showDataToView(ChengyuBean.ResultBean cyBean) {

        String chengyu = cyBean.getChengyu();

        ziTv1.setText(String.valueOf(chengyu.charAt(0)));

        ziTv2.setText(String.valueOf(chengyu.charAt(1)));

        ziTv3.setText(String.valueOf(chengyu.charAt(2)));

        ziTv4.setText(String.valueOf(chengyu.charAt(3)));

        pyTv.setText("拼音 : "+cyBean.getPinyin());

        jsTv.setText(cyBean.getChengyujs());

        fromTv.setText(cyBean.getFrom_());

        exampleTv.setText(cyBean.getExample());

        yufaTv.setText(cyBean.getYufa());

        yinzhengTv.setText(cyBean.getYinzhengjs());

        String ciyujs = cyBean.getCiyujs();

        if (!TextUtils.isEmpty(ciyujs)) {

            ciyujs = ciyujs.replace("]", "\n").replace("[", "").replace(":", "");

            yinghangTv.setText(ciyujs);

        }

        List<String> tList = cyBean.getTongyi();

//        判断是否有同义词

        if (tList!=null&&tList.size()!=0) {

            tongyiList.addAll(tList);

            tyAdapter.notifyDataSetChanged();

        }

        List<String> fList = cyBean.getFanyi();

        if (fList!=null&&fList.size()!=0) {

            fanyinList.addAll(fList);

            fyAdapter.notifyDataSetChanged();

        }

    }

    /**

     * 查找控件的方法

     * */

    private void initView() {

        ziTv1 = findViewById(R.id.cyinfo_tv_zi1);

        ziTv2 = findViewById(R.id.cyinfo_tv_zi2);

        ziTv3 = findViewById(R.id.cyinfo_tv_zi3);

        ziTv4 = findViewById(R.id.cyinfo_tv_zi4);

        pyTv = findViewById(R.id.cyinfo_tv_py);

        jsTv = findViewById(R.id.cyinfo_tv_js);

        fromTv = findViewById(R.id.cyinfo_tv_from);

        exampleTv = findViewById(R.id.cyinfo_tv_example);

        yufaTv = findViewById(R.id.cyinfo_tv_yufa);

        yinzhengTv = findViewById(R.id.cyinfo_tv_yinzheng);

        yinghangTv = findViewById(R.id.cyinfo_tv_yinghan);

        tyGv = findViewById(R.id.cyinfo_gv_tongyi);

        fyGv = findViewById(R.id.cyinfo_gv_fanyi);

        collectIv = findViewById(R.id.cyinfo_iv_collection);

    }

    public void onClick(View view) {

        switch (view.getId()) {

            case R.id.cyinfo_iv_back:

                finish();

                break;

            case R.id.cyinfo_iv_collection:

                isCollect = !isCollect;

                setCollectIvStyle();

                break;

        }

    }

    protected void onDestroy() {

        super.onDestroy();

        if (isExist&&!isCollect) {

            DBManager.deleteCyuToCollcyutb(chengyu);

        }

        if (!isExist&&isCollect) {

            DBManager.insertCyuToCollcyutb(chengyu);

        }

    }

}

3.3.3 运行截图

3.4 成语接龙小游戏功能实现

3.4.1 功能描述

用户可参与成语接龙小游戏,通过输入成语的最后一个字来寻找下一个成语的开头字,以完成接龙。

3.4.2 核心代码

package com.example.dict;

import androidx.annotation.Nullable;

import androidx.appcompat.app.AlertDialog;

import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;

import android.content.Intent;

import android.os.Bundle;

import android.os.CountDownTimer;

import android.util.Log;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;

import android.widget.Toast;

import com.example.dict.BaseActivity;

import com.google.gson.Gson;

import com.example.dict.bean.ChengYuJieLongBean;

import com.example.dict.bean.ChengyuBean;

import com.example.dict.bean.WordBean;

import com.example.dict.db.DBManager;

import com.example.dict.filter.LimitInputTextWatcher;

import com.example.dict.utils.URLUtils;

public class ChengYuJieLongActivity  extends BaseActivity {

    EditText chengyu_et;

    Button sure;

    TextView word1,word2,word3,word4,word5,word6,word7,word8,timeout,level;

    ImageView back;

    LinearLayout chengjiebg;

    char myChar[],newChar[];

    String str,chengyu="";

    int i=1;

    Intent intent;

    CountDownTimer timer;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_cheng_yu_jie_long);

        inital();

        chengyu_et.addTextChangedListener(new LimitInputTextWatcher(chengyu_et));

        intent = getIntent();

        i = intent.getIntExtra("level",1);

        chengyu=intent.getStringExtra("accchengyu");

        if(chengyu!=""){

            String url = URLUtils.getChengyujielongurl(chengyu);

            loadData(url);

        }

        chengjiebg.setBackgroundResource(getResources().getIdentifier("gufeng"+i, "drawable", getApplicationInfo().packageName));

        level.setText("关卡:"+i);

        String url = URLUtils.getChengyujielongurl(str);

        loadData(url);

//        设置倒计时

         timer = new CountDownTimer(300000, 1000) {

            public void onTick(long millisUntilFinished) {

            timeout.setText(String.valueOf(millisUntilFinished / 1000));

            }

            public void onFinish() {

                showEndingNormalDialog();

            }

        };

            //调用 CountDownTimer 对象的 start() 方法开始倒计时,也不涉及到线程处理

                    timer.start();

                }

    public void inital(){

        chengyu_et=findViewById(R.id.chengyu_et);

        sure=findViewById(R.id.sure);

        back=findViewById(R.id.chengyujielong_iv_back);

        word1=findViewById(R.id.word_1);

        word2=findViewById(R.id.word_2);

        word3=findViewById(R.id.word_3);

        word4=findViewById(R.id.word_4);

        word5=findViewById(R.id.word_5);

        word6=findViewById(R.id.word_6);

        word7=findViewById(R.id.word_7);

        word8=findViewById(R.id.word_8);

        timeout=findViewById(R.id.timeout);

        level=findViewById(R.id.level);

        chengjiebg=findViewById(R.id.chengjiebg);

    }

    public void onClick(View view) {

        switch (view.getId()){

            case R.id.chengyujielong_iv_back:

                Intent intent3 = new Intent(ChengYuJieLongActivity.this, MainActivity.class);

                startActivity(intent3);

                break;

            case R.id.sure:

                str=chengyu_et.getText().toString();

                if(str.length()!=4){

//                    Toast.makeText(getApplicationContext(), "您需要输入四个汉字",

//                            Toast.LENGTH_SHORT).show();

                    Toast toast=new Toast(ChengYuJieLongActivity.this);

//创建一个填充物,用于填充Toast

                    LayoutInflater inflater = LayoutInflater.from(ChengYuJieLongActivity.this);

//填充物来自的xml文件,在这个改成一个view

//实现xml到view的转变哦

                    View view2 =inflater.inflate(R.layout.toast,null);

//不一定需要,找到xml里面的组件,设置组件里面的具体内容

                    ImageView imageView1=view2.findViewById(R.id.iv_toast);

                    TextView textView1=view2.findViewById(R.id.tv_toast);

                imageView1.setImageResource(R.drawable.input);

                    textView1.setText("您需要输入四个汉字");

//把填充物放进toast

                    toast.setView(view2);

                    toast.setDuration(Toast.LENGTH_SHORT);

//                    toast位置居中

                    toast.setGravity(Gravity.CENTER,0,0);

//展示toast

                    toast.show();

                }

                else {

                    myChar = str.toCharArray();

                 word5.setText(Character.toString(myChar[0]));

                 word6.setText(Character.toString(myChar[1]));

                 word7.setText(Character.toString(myChar[2]));

                 word8.setText(Character.toString(myChar[3]));

                    Intent intent = new Intent(ChengYuJieLongActivity.this, IsChengYuActivity.class);

                    intent.putExtra("chengyu", str);

                    startActivityForResult(intent, 3);

                    break;

                }

        }



    }

    /* 网络数据加载成功时回调用的方法*/

    public void onSuccess(String json) {

        ChengYuJieLongBean cyjlBean = new Gson().fromJson(json, ChengYuJieLongBean.class);

        ChengYuJieLongBean.ResultBean resultBean = cyjlBean.getResult();

        String mychengyu=resultBean.getData().get(0);

        newChar = mychengyu.toCharArray();

        word1.setText(Character.toString(newChar[0]));

        word2.setText(Character.toString(newChar[1]));

        word3.setText(Character.toString(newChar[2]));

        word4.setText(Character.toString(newChar[3]));

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 3 && resultCode == RESULT_OK) {

            String chengyuvalue = data.getStringExtra("chengyu");

            if (chengyuvalue.equals("否")) {

                Toast.makeText(getApplicationContext(), "您输入的不是成语!",

                      Toast.LENGTH_SHORT).show();

            } else {

         if(Character.toString(myChar[0]).equals(word4.getText()) && chengyuvalue.equals("是")){

//                    String url = URLUtils.getChengyujielongurl(str);

//                    loadData(url);

//                    Toast.makeText(getApplicationContext(), "您回答正确!",  Toast.LENGTH_SHORT).show();

word5.setBackground(getResources().getDrawable(R.drawable.tianzige));

word6.setBackground(getResources().getDrawable(R.drawable.tianzige));

word7.setBackground(getResources().getDrawable(R.drawable.tianzige));

word8.setBackground(getResources().getDrawable(R.drawable.tianzige));

                    showNormalDialog();

                }

                else {

                    if (Integer.parseInt(timeout.getText().toString()) > 150) {

//                    Toast.makeText(getApplicationContext(), "您输入的成语不正确哦!还有时间哦加油加油",Toast.LENGTH_SHORT).show();

                        Toast toast = new Toast(getApplicationContext());

                        LayoutInflater inflater = LayoutInflater.from(ChengYuJieLongActivity.this);

                        View view2 = inflater.inflate(R.layout.toast, null);

                        ImageView imageView1 = view2.findViewById(R.id.iv_toast);

                        TextView textView1 = view2.findViewById(R.id.tv_toast);

imageView1.setImageResource(R.drawable.fighting);

                        textView1.setText("您输入的成语不正确哦!还有时间哦加油加油!");

                        toast.setView(view2);

                        toast.setDuration(Toast.LENGTH_SHORT);

                        toast.setGravity(Gravity.CENTER, 0, 0);

                        toast.show();

                    } else{

//                    Toast.makeText(getApplicationContext(), "您输入的成语不正确哦!",Toast.LENGTH_SHORT).show();

                        Toast toast = new Toast(ChengYuJieLongActivity.this);

                        LayoutInflater inflater = LayoutInflater.from(ChengYuJieLongActivity.this);

                        View view2 = inflater.inflate(R.layout.toast, null);

                        ImageView imageView1 = view2.findViewById(R.id.iv_toast);

                        TextView textView1 = view2.findViewById(R.id.tv_toast);

    imageView1.setImageResource(R.drawable.wrong);

                        textView1.setText("您输入的成语不正确哦");

                        toast.setView(view2);

                        toast.setDuration(Toast.LENGTH_SHORT);

                        toast.setGravity(Gravity.CENTER, 0, 0);

                        toast.show();

                }

                }

            }

        }

    }

    private void showNormalDialog(){

        /* @setIcon 设置对话框图标

         * @setTitle 设置对话框标题

         * @setMessage 设置对话框消息提示

         * setXXX方法返回Dialog对象,因此可以链式设置属性

         */

        timer.cancel();

        final AlertDialog.Builder normalDialog =

                new AlertDialog.Builder(ChengYuJieLongActivity.this);

        normalDialog.setIcon(R.drawable.like);

        normalDialog.setTitle("恭喜您通过本关");

        String s=String.valueOf(300-Integer.parseInt(timeout.getText().toString()));

        normalDialog.setMessage("仅用了"+s+"秒");



        normalDialog.setPositiveButton("下一关",

                new DialogInterface.OnClickListener() {

                    @Override

                    public void onClick(DialogInterface dialog, int which) {

                        Intent intent = new Intent(ChengYuJieLongActivity.this, ChengYuJieLongActivity.class);

                        i++;

                        intent.putExtra("level", i);

                        intent.putExtra("accchengyu", str);

                        startActivity(intent);

                    }

                });

        normalDialog.setNegativeButton("退出游戏",

                new DialogInterface.OnClickListener() {

                    @Override

                    public void onClick(DialogInterface dialog, int which) {

                        Intent intent = new

    private void showEndingNormalDialog(){

        final AlertDialog.Builder normalDialog =

                new AlertDialog.Builder(ChengYuJieLongActivity.this);

        normalDialog.setIcon(R.drawable.heartbroken);

        normalDialog.setTitle("游戏结束啦,恭喜您通关到第"+i+"关");

        normalDialog.setPositiveButton("重玩",

                new DialogInterface.OnClickListener() {

                    @Override

                    public void onClick(DialogInterface dialog, int which) {

                        Intent intent = new Intent(ChengYuJieLongActivity.this, ChengYuJieLongActivity.class);

                        startActivity(intent);

                    }

                });

        normalDialog.setNegativeButton("退出游戏",

                new DialogInterface.OnClickListener() {

                    @Override

                    public void onClick(DialogInterface dialog, int which) {

                        Intent intent = new Intent(ChengYuJieLongActivity.this, MainActivity.class);

                        startActivity(intent);

                    }

                });

        // 显示

        normalDialog.show();

    }

}

3.4.3 运行截图

4 总结体会

在开发中华字典系统的过程中,我深刻体会到了Java编程的魅力和挑战性。通过设计并实现拼音查询、部首查询、成语查询等多个功能模块,我不仅提升了自己的编程能力,还加深了对数据库操作、前后端交互等技术的理解。同时,成语接龙小游戏的加入为系统增加了趣味性,也提升了用户的参与度和满意度。整个开发过程虽然充满了挑战,但收获颇丰,让我更加坚定了继续深入学习Java编程的决心。

5 附录

 

源码文件清单

Java代码、Layout布局

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOV8识别物体,并返回物体的像素坐标

一、YOLOV8的相关文件修改 1. 进入路径文件&#xff1a; C:\Users\82370\.conda\envs\Ayolo8\Lib\site-packages\ultralytics\engine\result.py&#xff08;此处路径为你的anacod安装的虚拟环境Ayolo8位置&#xff09; conda create -n Ayolo8 python3.11 # 虚拟环境安装代码…

天锐绿盾 | -公司电脑文件防泄密软件

天锐绿盾是一款专为企业设计的电脑文件防泄密系统&#xff0c;它结合了多种安全功能&#xff0c;旨在从源头上保障企业数据的安全。 www.drhchina.com 以下是关于天锐绿盾的详细介绍&#xff1a; 一、产品概述 天锐绿盾&#xff0c;又名绿盾信息安全管理软件&#xff0c;是一…

Linux安装MySQL以及远程连接

1、Linux安装MySQL 1.1、准备解压包 MySQL5.x解压包 提取码&#xff1a;9y7n 1.2、通过rpm脚本安装 切记安装顺序&#xff1a;common --> libs --> client --> server 因为它们之间存在依赖关系&#xff0c;所以务必按照顺序安装 安装前请确保当前目录/文…

山体滑坡监测利器:传感器与智能监测平台的应用

山体滑坡&#xff0c;这一地质灾害的代名词&#xff0c;指的是山坡上的土体或岩体在重力作用下&#xff0c;因自然或人为因素而向下滑动的现象。滑坡具有突发性、隐蔽性、危害性和破坏性等特征&#xff0c;因此&#xff0c;对于山体滑坡的监测工作显得尤为重要。本文将探讨山体…

算法设计与分析 实验3 回溯法求地图填色问题

目录 一、实验目的 二、背景知识 三、实验内容 四、算法思想 未优化的回溯算法 节点选择-最小剩余值准则&#xff08;MRV&#xff09; 节点选择-最多约束准则&#xff08;DH&#xff09; 颜色选择-最少约束选择 数据结构的选择 向前探查 颜色轮换&#xff08;贪心置…

Python机器学习完整流程:从数据清洗到推理落地

目录 一、引言 二、数据清洗 数据加载与初步探索 缺失值处理 异常值处理 特征编码与转换 数据集划分 三、模型训练 四、模型文件生成 五、模型部署与推理落地 六、总结 一、引言 在当今数据驱动的时代&#xff0c;机器学习已成为解决复杂问题的有力工具。而…

揭秘:5步打造移动应用铜墙铁壁!

在数字化时代的浪潮中&#xff0c;移动应用&#xff08;APP&#xff09;的安全与合规性问题日益显著&#xff0c;成为了开发者、企业和用户共同关注的焦点。面对这一挑战&#xff0c;通付盾APP尽职调查报告应运而生&#xff0c;犹如一座灯塔&#xff0c;照亮了移动应用安全前行…

银河麒麟系统项目部署

使用服务器信息 软件&#xff1a;VMware Workstation Pro 虚拟机&#xff1a;ubtun 内存&#xff1a;20G 虚拟机连接工具&#xff1a; MobaXterm Redis连接工具&#xff1a; RedisDesktopManager 镜像&#xff1a;F:\Kylin-Server-10-8.2-Release-Build09-20211104-X86_64…

精准测试:代码覆盖率与测试覆盖率

在日常的测试过程当中&#xff0c;不管是人工进行接口测试还是接口自动化&#xff0c;以及RD写的单元测试&#xff0c;我们一般使用代码覆盖率来衡量测试的完备程度&#xff0c;这篇文章就带大家认识一下代码覆盖率这个常用质量完备度的指标 代码覆盖率测试与测试覆盖率在软件…

“非遗+全身动作捕捉设备”如何打造交互式叙事新消费场景?

在数字化时代&#xff0c;非遗传承渠道逐渐数字化、科技化&#xff0c;利用“虚拟人全身动作捕捉设备”技术提升了非遗文化的社会能见度&#xff0c;让非遗文化重新吸引年轻人的目光。 “虚拟人全身动作捕捉设备”&#xff0c;可以让虚拟人化身虚拟主持人、虚拟主播、虚拟嘉宾…

3D三维模型展示上传VR全景创建H5开源版开发

3D三维模型展示上传VR全景创建H5开源版开发 新增三级分类&#xff08;项目分类、项目、默认场景&#xff09; 新增热点 前台创建项目、场景 场景跳转、提示信息 新增热点图标选择 新增预览场景是显示关联场景 新增3D模型展示功能 当然可以&#xff01;以下是一个关于3D三维模…

HarmonyOS 页面路由(Router)

1. HarmonyOS页面路由(Router) 页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块&#xff0c;通过不同的url地址&#xff0c;可以方便地进行页面路由&#xff0c;轻松地访问不同的页面。本文将从页面跳转、页面返回和页面返回前增加一个询问…

Python安装失败,报0x80070643-安装时发生严重错误。

背景 之前安装了3.12.4&#xff0c;因为没用到&#xff0c;就用Revo Uninstaller Pro卸载了&#xff0c;连注册表都清理了。后面看到别人写的一个工具不符合预期&#xff0c;想对源码修改下&#xff0c;用到了Python,于是重新安装&#xff0c;出现上面报错。 解决方法尝试 因…

在Pycharm使用Github Copilot

文章目录 1.GitHub Copilot 是什么2.注册GitHub Copilot3.官方使用文档4.安装 GitHub Copilot插件5.在Pycharm中使用6.相关功能键7.启用或禁用 GitHub Copilot 1.GitHub Copilot 是什么 GitHub Copilot 是一款 AI 编码助手&#xff0c;可帮助你更快、更省力地编写代码&#xff…

基于javassm实现的物流管理系统

开发语言&#xff1a;Java 框架&#xff1a;ssm 数据库&#xff1a;mysql 系统页面展示 4.1登陆页面 平台登录&#xff1a;主要是做权限分配和安全限制等操作。可以把快递员&#xff0c;客户&#xff0c;派单员等人员角色区分开来。 4.2注册页面 用户注册界面&#xff1a;…

固定式土壤墒情监测仪—土壤状况进行长期跟踪和分析

TH-TS600 固定式土壤墒情监测仪是一种专门用于长期、连续、自动监测土壤墒情的设备。能够实时监测土壤的水分、温度、湿度等关键参数&#xff0c;确保农民和管理者能即时获取土壤状况信息&#xff0c;便于及时做出农业决策。由于是自动监测&#xff0c;数据采集的准确性和可靠性…

目标检测数据集 - 手机屏幕表面表面缺陷检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;手机屏幕表面缺陷检测数据集&#xff0c;真实采集高质量手机屏幕表面含缺陷图片数据&#xff0c;数据集含多款不同型号和品牌的手机屏幕表面图片数据&#xff0c;包括苹果手机屏、三星手机屏、华为手机屏等数据。数据标注标签包括 Bubble 气泡/水滴、Scr…

动手学深度学习(Pytorch版)代码实践 -深度学习基础-13Kaggle竞赛:2020加州房价预测

13Kaggle竞赛&#xff1a;2020加州房价预测 # 导入所需的库 import numpy as np import pandas as pd import torch import hashlib import os import tarfile import zipfile import requests from torch import nn from d2l import torch as d2l# 读取训练和测试数据 train_…

GIT回滚

1. 使用 git revert git revert 命令会创建一个新的提交&#xff0c;这个提交会撤销指定提交的更改。这通常用于公共分支&#xff08;如 main 或 master&#xff09;&#xff0c;因为它不会重写历史。 git revert HEAD # 撤销最近的提交 # 或者指定一个特定的提交哈希值 …

【电子数据取证】如何快速在CSV中找到涉案手机号码

文章关键词&#xff1a;电子数据取证、聊天记录恢复、数据恢复、手机取证、介质取证 一、前言 在最近的取证工作中&#xff0c;我们遇到很多需要从大量的聊天记录数据中提取特定的信息&#xff0c;例如手机号码&#xff0c;银行号码&#xff0c;交易码。由于数据通常以数据库…