当前位置: 首页 > news >正文

android外卖点餐界面(期末作业)

效果展示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

AndroidMainFest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/Theme.EndActivity"tools:targetApi="31"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name=".Register"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name=".Login"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

FoodItem.java

package com.lzcu.endactivity;public class FoodItem {private String name;        // 食品名称private double price;       // 食品价格private boolean isVegetarian;  // 是否素食public FoodItem(String name, double price) {this.name = name;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}
}

Login.java

package com.lzcu.endactivity;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;public class Login extends AppCompatActivity {Button login_but,register_but;TextView touchScreen;EditText Account_2,pwd;MyDatabaseHelper myDatabaseHelper;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//按钮组件login_but = findViewById(R.id.login);register_but = findViewById(R.id.register);//编辑框Account_2 = findViewById(R.id.UserName);pwd =findViewById(R.id.Pwd);//数据库myDatabaseHelper = new MyDatabaseHelper(this);myDatabaseHelper.getWritableDatabase();//只读//登录login_but.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){String acc = Account_2.getText().toString();String pwd1 =pwd.getText().toString();//获取数据库数据,判断用户名是否在库Cursor result = myDatabaseHelper.find();int a=0;int b=0;for (result.moveToFirst();!result.isAfterLast();result.moveToNext()){@SuppressLint("Range") String account_1=result.getString(result.getColumnIndex("Account"));@SuppressLint("Range") String pwd_1=result.getString(result.getColumnIndex("Password"));if (Account_2.getText().toString().equals(account_1) && pwd.getText().toString().equals(pwd_1))a=1;if (Account_2.getText().toString().equals(account_1))b=1;}if (b==1){if (!Account_2.getText().toString().equals("") && !pwd.getText().toString().equals("")){if(a==1){Intent intent = new Intent(Login.this, MainActivity.class);startActivity(intent);finish();Toast.makeText(Login.this, "登入成功", Toast.LENGTH_SHORT).show();}elseToast.makeText(getApplicationContext(),"密码错误!", Toast.LENGTH_SHORT).show();}elseToast.makeText(getApplicationContext(),"用户名或密码不能为空!", Toast.LENGTH_SHORT).show();}elseToast.makeText(Login.this, "账号不存在,请注册!", Toast.LENGTH_SHORT).show();//关闭游标result.close();}});//注册register_but.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){//显示注册界面Intent intent = new Intent(Login.this, Register.class);//启动显示修改界面startActivity(intent);finish();}});}
}

MainActivity.java

package com.lzcu.endactivity;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {public TextView txtCartItems;public Button btnCheckout;public ArrayList<FoodItem> cartItems = new ArrayList<>();public double totalPrice = 0;private ListView menu_list;private List<String> mDataList;private ArrayAdapter<String> mAdapter;private EditText mEditText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);txtCartItems = findViewById(R.id.txt_cart_items);btnCheckout = findViewById(R.id.btn_checkout);//初始化// 初始化 ListView 和 数据源menu_list = findViewById(R.id.menu_list);mDataList = new ArrayList<>();// 添加测试数据mDataList.add("汉堡 22.5");mDataList.add("薯条 12.0");mDataList.add("热干面 8.0");mDataList.add("麻辣香锅 59.0");mDataList.add("鱼香肉丝 38.0");mDataList.add("大盘鸡 48.0");mDataList.add("炒粉丝 11.0");mDataList.add("毛血旺 58.0");// 创建适配器mAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1, mDataList);// 设置适配器menu_list.setAdapter(mAdapter);// 设置列表项点击事件menu_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {Toast.makeText(MainActivity.this, "你选择了" + mDataList.get(i),Toast.LENGTH_SHORT).show();// 获取 editText 控件mEditText = findViewById(R.id.editText);mEditText.append(mDataList.get(i));
//                mEditText.setText("你选择了"+mDataList.get(i)+"吗?");// 加入购物车的逻辑FoodItem item1 = new FoodItem("汉堡", 22.5);FoodItem item2 = new FoodItem("薯条", 12.0);addToCart(item1);addToCart(item2);}});// 更新购物车信息updateCart();// 结算按钮的点击事件btnCheckout.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {checkout();}});}// 添加商品到购物车private void addToCart(FoodItem item) {cartItems.add(item);totalPrice += item.getPrice();}// 更新购物车信息private void updateCart() {String cartText = "购物车(" + cartItems.size() + "): ¥" + totalPrice;txtCartItems.setText(cartText);}// 结算private void checkout() {// 将购物车中的商品生成订单,进行结算等操作Toast.makeText(this, "订单已提交,感谢您的惠顾!", Toast.LENGTH_SHORT).show();cartItems.clear();totalPrice = 0;updateCart();}
}

MyDatabaseHelper.java

package com.lzcu.endactivity;import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;public class MyDatabaseHelper extends SQLiteOpenHelper
{//声明数据库的名字和表名private static final String DATABASENAME = "Practical.db" ;	// 数据库名称private static final int DATABASEVERSION = 1 ;private static final String TABLE_USERNAME = "User" ;	// 用户表名称public MyDatabaseHelper(@Nullable Context context){super(context, DATABASENAME, null, DATABASEVERSION);}@Overridepublic void onCreate(SQLiteDatabase db){//创建数据库用户表,并添加三个字段id,Account,PasswordString sqlString="create table "+ TABLE_USERNAME+"( id integer primary key autoincrement,Account varchar(255),Password varchar(255))";db.execSQL(sqlString);}//注册public  void Register(String Account,String Password){SQLiteDatabase db=super.getWritableDatabase();String sqlString="insert into "+TABLE_USERNAME+"(Account,Password) values (?,?)";//构造占位符的参数数组Object args[]=new Object[]{Account,Password};db.execSQL(sqlString,args);//此方法执行的sql语句主要有创建、插入、修改、删除等db.close();}//查询账号的方法public Cursor find(){SQLiteDatabase db=super.getWritableDatabase();String sqlString="select * from User;";//执行查询,返回数据给游标Cursor result =db.rawQuery(sqlString,null);return result;}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

Register.java

package com.lzcu.endactivity;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;public class Register extends AppCompatActivity {Button register_lj,back;TextView touchScreen;EditText Account,Pwd1,Pwd2;MyDatabaseHelper myDatabaseHelper;ArrayList<User> data = new ArrayList<User>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.register);//数据库myDatabaseHelper = new MyDatabaseHelper(this);//按钮组件register_lj =findViewById(R.id.register_but);back =findViewById(R.id.back);//编辑框Account = findViewById(R.id.register_name);Pwd1 = findViewById(R.id.register_pwd);Pwd2 = findViewById(R.id.register_pwd2);//立即注册register_lj.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){//获取输入的用户名和密码String name = Account.getText().toString().trim();String password = Pwd1.getText().toString().trim();//获取数据库数据,判断用户名是否已存在Cursor result = myDatabaseHelper.find();int a=0;if (!Account.getText().toString().equals("")){if (Account.getText().toString().length()<6)Toast.makeText(Register.this, "账号创建不能少于6位", Toast.LENGTH_SHORT).show();else if (Pwd1.getText().toString().length()<6)Toast.makeText(Register.this, "密码设置不能少于6位", Toast.LENGTH_SHORT).show();else{for (result.moveToFirst();!result.isAfterLast();result.moveToNext()){//判断数据库是否存在此对象@SuppressLint("Range") String account_1 = result.getString(result.getColumnIndex("Account"));if(Account.getText().toString().equals(account_1)){a=1;}}//关闭游标result.close();if(!Pwd1.getText().toString().equals("") && !Pwd2.getText().toString().equals("")){if ((Pwd1.getText().toString().equals(Pwd2.getText().toString()) && a==0)){myDatabaseHelper.Register(name,password);Intent intent = new Intent(Register.this, Login.class);startActivity(intent);finish();Toast.makeText(Register.this, "注册成功", Toast.LENGTH_SHORT).show();}else if (a==1)Toast.makeText(getApplicationContext(),"账号已存在,请重新输入账号",Toast.LENGTH_SHORT).show();elseToast.makeText(getApplicationContext(),"两次密码输入不一致",Toast.LENGTH_SHORT).show();} elseToast.makeText(getApplicationContext(),"密码不能为空!",Toast.LENGTH_SHORT).show();}} elseToast.makeText(getApplicationContext(),"账号不能为空!",Toast.LENGTH_SHORT).show();}});//返回back.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){//显示注册界面Intent intent = new Intent(Register.this, Login.class);//启动显示修改界面startActivity(intent);finish();}})}
}

User.java

package com.lzcu.endactivity;public class User
{private int id;private String account;private String password;public User( ) {}public User(int id, String account, String password) {this.id = id;this.account = account;this.password = password;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:background="@drawable/img"><TextViewandroid:id="@+id/text_top"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="100dp"android:text="外卖点餐"android:textColor="@color/black"android:textSize="30dp"android:textStyle="italic"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"/><EditTextandroid:id="@+id/UserName"android:layout_width="300dp"android:layout_height="wrap_content"android:layout_marginTop="60dp"android:hint="请输入用户名"android:padding="15dp"android:singleLine="true"android:textSize="24dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/text_top" /><EditTextandroid:id="@+id/Pwd"android:layout_width="300dp"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:hint="请输入用户密码"android:inputType="textPassword"android:maxLength="16"android:padding="15dp"android:singleLine="true"android:textSize="24dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/UserName" /><Buttonandroid:id="@+id/login"android:layout_width="120dp"android:layout_height="60dp"android:layout_marginTop="30dp"android:text="登录"android:textStyle="bold"app:layout_constraintEnd_toStartOf="@+id/register"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/Pwd" /><Buttonandroid:id="@+id/register"android:layout_width="120dp"android:layout_height="60dp"android:layout_marginTop="30dp"android:text="注册"android:textStyle="bold"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/login"app:layout_constraintTop_toBottomOf="@+id/Pwd" /></androidx.constraintlayout.widget.ConstraintLayout>

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/img"><!-- 标题栏 --><RelativeLayoutandroid:id="@+id/title_layout"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/title_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="外卖点餐系统"android:textSize="22sp"android:textColor="#ffffff" /></RelativeLayout><!-- 菜单列表 --><!-- 购物车和结算按钮 --><ListViewandroid:id="@+id/menu_list"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><RelativeLayoutandroid:id="@+id/cart_layout"android:layout_width="match_parent"android:layout_height="70dp"android:layout_marginTop="10dp"android:background="#ffffff"android:padding="0dp"><TextViewandroid:id="@+id/txt_cart_items"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="购物车(0): ¥0"android:textColor="#000000"android:textSize="18sp" /><Buttonandroid:id="@+id/btn_checkout"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:text="结算"android:textColor="#ffffff"android:textSize="18sp" /></RelativeLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="70dp"android:layout_marginTop="10dp"android:background="#ffffff"android:padding="0dp"><EditTextandroid:id="@+id/editText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_marginBottom="25dp"android:gravity="bottom"/></RelativeLayout>
</LinearLayout>

register.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".Login"android:background="@drawable/img"tools:ignore="MissingDefaultResource"><TextViewandroid:id="@+id/text_top"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="90dp"android:text="注册界面"android:textColor="#141414"android:textSize="30dp"android:textStyle="italic"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><EditTextandroid:id="@+id/register_name"android:layout_width="300dp"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:hint="请输入用户名"android:padding="15dp"android:singleLine="true"android:textSize="24dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/text_top" /><EditTextandroid:id="@+id/register_pwd"android:layout_width="300dp"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:hint="请输入用户密码"android:inputType="textPassword"android:maxLength="16"android:padding="15dp"android:singleLine="true"android:textSize="24dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/register_name" /><EditTextandroid:id="@+id/register_pwd2"android:layout_width="300dp"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:hint="请确认密码"android:inputType="textPassword"android:maxLength="16"android:padding="15dp"android:singleLine="true"android:textSize="24dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.504"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/register_pwd" /><Buttonandroid:id="@+id/register_but"android:layout_width="120dp"android:layout_height="60dp"android:layout_marginTop="30dp"android:text="立即注册"android:textStyle="bold"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintEnd_toStartOf="@+id/back"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/register_pwd2" /><Buttonandroid:id="@+id/back"android:layout_width="120dp"android:layout_height="60dp"android:layout_marginTop="30dp"android:text="返回登录"android:textStyle="bold"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/register_but"app:layout_constraintTop_toBottomOf="@+id/register_pwd2" />
</androidx.constraintlayout.widget.ConstraintLayout>

xiao效果展示

相关文章:

android外卖点餐界面(期末作业)

效果展示&#xff1a; AndroidMainFest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><a…...

ArcGIS API开发介绍

本来想自己总结写一下的&#xff0c;但是发现有个网站总结的特别好。所以直接给大家分享一下地址&#xff1a; 起步 - Start | ArcGis中文网 当然系统性的学习和使用还的看官网文档Quick Links | API Reference | ArcGIS Maps SDK for JavaScript 4.27 | ArcGIS Developers …...

大数据课程K5——Spark的框架核心概念

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的框架核心概念; ⚪ 掌握Spark的Spark集群模式安装; ⚪ 掌握Spark的Spark架构; ⚪ 掌握Spark的Spark调度模块; 一、Spark框架核心概念 1. RDD。弹性分布式数据集,是Spark最…...

【⑬MySQL | 数据类型(一)】简介 | 整数 | 浮点 | 定点类型

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL数据类型简介 | 整数 | 浮点 | 定点类型的分享✨ 目录 前言0.数据类型简介1 整数类型2 浮点类型3 定点类型4 日期/时间类型总结 0.数据类型简介 数据类型&#xff08;data_type&#xff09;是指系统中所允许的…...

5.6 汇编语言:汇编高效数组寻址

数组和指针都是用来处理内存地址的操作&#xff0c;二者在C语言中可以互换使用。数组是相同数据类型的一组集合&#xff0c;这些数据在内存中是连续存储的&#xff0c;在C语言中可以定义一维、二维、甚至多维数组。多维数组在内存中也是连续存储的&#xff0c;只是数据的组织方…...

uniapp - 实现卡片式胶囊单选后右上角出现 “√“ 对勾对号选中效果功能,适用于小程序h5网页app全平台通用(一键复制组件源码,开箱即用!)

效果图 uniapp全平台兼容(小程序/h5网页/app)实现点击选择后,右上角出现 √ 对号效果(角标形式展现),功能组件, 改个样式,直接复制使用该组件。 组件源码 在 components 组件文件夹下,随便建立一个 .vue 文件,一键复制下方源码。...

使用Jetpack Compose构建可折叠Card

使用Jetpack Compose构建可折叠Card 为何在Android应用开发中使用扩展卡片 扩展卡片在Android应用开发中广受欢迎&#xff0c;它们可以让开发者打造干净紧凑的用户界面&#xff0c;同时可以轻松展开&#xff0c;显示额外的内容。 通过巧妙地使用扩展卡片&#xff0c;开发者可…...

安卓手机跑 vins slam (1)

我是迪卡魏曼依奇&#xff0c;一直是用手机拍照&#xff0c;将图片导出到电脑&#xff0c;然后使用RealityCapture三维重建。 RealityCapture是靠特征点去把拍摄的多个图像进行对齐的。需要拍摄的足够多&#xff0c;且有特征才能对齐&#xff0c;要不然很多图像会找不到公共点…...

腾讯云-对象存储服务(COS)的使用总结

简介 对象存储&#xff08;Cloud Object Storage&#xff0c;COS&#xff09;是腾讯云提供的一种存储海量文件的分布式存储服务&#xff0c;具有高扩展性、低成本、可靠安全等优点。通过控制台、API、SDK 和工具等多样化方式&#xff0c;用户可简单、快速地接入 COS&#xff0…...

kafka复习:(3)自定义序列化器和反序列化器

一、实体类定义&#xff1a; public class Company {private String name;private String address;public String getName() {return name;}public void setName(String name) {this.name name;}public String getAddress() {return address;}public void setAddress(String a…...

Unity 图片资源的适配

前言 最近小编做Unity项目时&#xff0c;发现在资源处理这方面和Android有所不同&#xff1b;例如&#xff1a;Android的资源文件夹res下会有着mipmap-mdpi&#xff0c;mipmap-hdpi&#xff0c;mipmap-xhdpi&#xff0c;mipmap-xxhdpi&#xff0c;mipmap-xxxhdpi这五个文件夹&a…...

【Axure高保真原型】通过输入框动态控制折线图

今天和大家分享通过输入框动态控制折线图的原型模板&#xff0c;在输入框里维护项目数据&#xff0c;可以自动生成对应的折线图&#xff0c;鼠标移入对应折点&#xff0c;可以查看对应数据。使用也非常方便&#xff0c;只需要修改输入框里的数据&#xff0c;或者复制粘贴文本&a…...

【Java】树结构数据的搜索

这里写自定义目录标题 需要实现的效果前端需要的json格式&#xff1a;一定是一个完整的树结构错误错误的返回格式错误的返回格式实现的效果 正确正确的返回格式正确的展示画面 后端逻辑分析代码总览 数据库表结构 需要实现的效果 前端需要的json格式&#xff1a;一定是一个完整…...

ElementUI中的日历组件加载无效的问题

在ElementUI中提供了一个日历组件。在某些场景下还是比较有用的。只是在使用的时候会有些下坑&#xff0c;大家要注意下。   官网提供的信息比较简介。我们在引入到项目中使用的时候可以能会出现下面的错误提示。 Unknown custom element: <el-calendar> - did you …...

Git版本管理(03)stash临时操作和.gitignore配置

1 git stash操作(临时存储) 1.1 git stash常见流程 当你修改了某一个分支&#xff0c;但此时要切换分支时如果直接切换会因为一些修改冲突而checkout失败&#xff0c;那么此时就可以使用git stash命令来解决该问题。一般流程为&#xff1a; $git pull# 将当前未提交的修改…...

【ThingJS | 3D可视化】开发框架,一站式数字孪生

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; 数字孪生 | 3D可视化框架 开发工具&#xff1a;ThingJS在线开发工具 ThingJs 低代码开发 ThingJs 低代码开发注意点场景效果配置层级层级常用API实例化 Thing&#xff0c;加载场景load 加载函数ThingJs 层级关系图查找层…...

SpringBoot返回响应排除为 null 的字段

SpringBoot返回响应排除为 null 的字段 可以通过全局配置&#xff0c;使返回响应中为null的字段&#xff0c;不在出现在返回结果中。 注意&#xff1a;这样配置&#xff0c;使得返回响应包含的字段随请求结果变化&#xff0c;响应到底包含哪些字段不直观&#xff1b;除非业务…...

华为数通方向HCIP-DataCom H12-821题库(单选题:41-60)

第41题 以下关于IS-IS协议说法错误的是? A、IS-IS协议支持CLNP网络 B、IS-IS 协议支持IP 网络 C、IS-IS 协议的报文直接由数据链路层封装 D、IS-IS协议是运行在AS之间的链路状态协议 答案&#xff1a;D 解析&#xff1a; 关于IS-IS协议的说法错误是D. IS-IS协议是运行在A…...

OpenAI推出GPT-3.5Turbo微调功能并更新API;Midjourney更新局部绘制功能

&#x1f989; AI新闻 &#x1f680; OpenAI推出GPT-3.5Turbo微调功能并更新API&#xff0c;将提供GPT-4微调功能 摘要&#xff1a;OpenAI宣布推出GPT-3.5Turbo微调功能&#xff0c;并更新API&#xff0c;使企业和开发者能够定制ChatGPT&#xff0c;达到或超过GPT-4的能力。通…...

相机成像之3A算法的综述

3A算法是摄像机成像控制技术中的三大自动控制算法。随着计算机视觉的迅速发展,该算法在摄像器材领域具有广泛的应用和前景。 那么3A控制算法又是指什么呢? (1)AE (Auto Exposure)自动曝光控制 (2)AF (Auto Focus)自动聚焦控制 (3)AWB (Auto White Balance)自动白平衡控…...

最新AI系统ChatGPT程序源码/微信公众号/H5端+搭建部署教程+完整知识库

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…...

OpenCV实例(九)基于深度学习的运动目标检测(二)YOLOv2概述

基于深度学习的运动目标检测&#xff08;二&#xff09;YOLOv2&YOLOv3概述 1.YOLOv2概述2.YOLOv3概述2.1 新的基础网络结构&#xff1a;2.2 采用多尺度预测机制。2.3 使用简单的逻辑回归进行分类 1.YOLOv2概述 对YOLO存在的不足&#xff0c;业界又推出了YOLOv2。YOLOv2主要…...

【Docker】已经创建好的Docker怎么设置开机自启

已经创建好的Docker怎么设置开机自启 1.使用命令Docker update来完成2.查看是否开启3.验证是否开启 1.使用命令Docker update来完成 操作步骤&#xff1a; docker update --restartalways 容器ID2.查看是否开启 docker inspect 容器Id看到这里RestartPolicy设置为如图&#…...

E - Excellent Views

Problem - E - Codeforces 问题描述&#xff1a;数组H大小都不相同。从i到j是可行的&#xff0c;当且仅当 不存在 k &#xff0c;使 ∣ i − k ∣ ≤ ∣ i − j ∣ , H k > H j 不存在k&#xff0c;使 \\ |i - k| \leq |i - j|, \quad H_k > H_j 不存在k&#xff0c;使…...

WiFi天线和NB-IoT天线不通用

表面看起来完全一样。但是把WiFi天线插到NB-IoT设备后&#xff0c;信号弱了很多。还导致设备反复重启...

IoT DC3 是一个基于 Spring Cloud 的开源的、分布式的物联网(IoT)平台本地部署步骤

dc3 windows 本地搭建步骤&#xff1a; ​​ 必要软件环境 进入原网页# 务必保证至少需要给 docker 分配&#xff1a;1 核 CPU 以及 4G 以上的运行内存&#xff01; JDK : 推荐使用 Oracle JDK 1.8 或者 OpenJDK8&#xff0c;理论来说其他版本也行&#xff1b; Maven : 推荐…...

VBA Excel自定义函数的使用 简单的语法

一个简单的教程&#xff0c;实现VBA自定义函数。 新建模块 复制后面的代码放进来 函数的入口参数不定义&#xff0c;则认为是一块区域&#xff1b; 反之&#xff0c;如FindChar1 As String&#xff0c;则认为是输入的单值。 循环和分支如下例子&#xff0c;VB比较接近自然语…...

字节跳动 从需求到上线全流程 软件工程流程 需求评估 MVP

走进后端开发流程 整个课程会带大家先从理论出发&#xff0c;思考为什么有流程 大家以后工作的团队可能不一样&#xff0c;那么不同的团队也会有不同的流程&#xff0c;这背后的逻辑是什么 然后会带大家按照走一遍从需求到上线的全流程&#xff0c;告诉大家在流程的每个阶段&am…...

线性代数-矩阵的本质

线性代数-矩阵的本质 线性代数-矩阵的本质...

React基础入门之虚拟Dom

React官方文档&#xff1a;https://react.docschina.org/ 说明 重要提示&#xff1a;本系列文章基础篇总结自尚硅谷课程&#xff0c;且采用类式写法&#xff01;&#xff01;最新的函数式组件写法见高级篇。 本系列文档旨在帮助vue同学更快速的学习react&#xff0c;如果你很…...