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">

    <application
        android: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">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Register"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android: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;
    @Override
    protected 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()
        {
            @Override
            public 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();
                        }
                        else
                            Toast.makeText(getApplicationContext(),"密码错误!", Toast.LENGTH_SHORT).show();
                    }else
                        Toast.makeText(getApplicationContext(),"用户名或密码不能为空!", Toast.LENGTH_SHORT).show();
                }
                else
                    Toast.makeText(Login.this, "账号不存在,请注册!", Toast.LENGTH_SHORT).show();
                //关闭游标
                result.close();

            }
        });
        //注册
        register_but.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public 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;
    @Override
    protected 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() {
            @Override
            public 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() {
            @Override
            public 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);
    }
    @Override
    public void onCreate(SQLiteDatabase db)
    {
        //创建数据库用户表,并添加三个字段id,Account,Password
        String 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;
    }
    @Override
    public 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>();
    @Override
    protected 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()
        {
            @Override
            public 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();
                            else
                                Toast.makeText(getApplicationContext(),"两次密码输入不一致",Toast.LENGTH_SHORT).show();
                        } else
                            Toast.makeText(getApplicationContext(),"密码不能为空!",Toast.LENGTH_SHORT).show();
                    }

                } else
                    Toast.makeText(getApplicationContext(),"账号不能为空!",Toast.LENGTH_SHORT).show();
            }
        });
        //返回
        back.setOnClickListener(
                new View.OnClickListener()
                {
                    @Override
                    public 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">

    <TextView
        android: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"
        />

    <EditText
        android: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" />

    <EditText
        android: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" />

    <Button
        android: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" />

    <Button
        android: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">

    <!-- 标题栏 -->
    <RelativeLayout
        android:id="@+id/title_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >

        <TextView
            android: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>
    <!-- 菜单列表 -->

    <!-- 购物车和结算按钮 -->
    <ListView
        android:id="@+id/menu_list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <RelativeLayout
        android:id="@+id/cart_layout"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_marginTop="10dp"
        android:background="#ffffff"
        android:padding="0dp">

        <TextView
            android: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" />

        <Button
            android: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>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_marginTop="10dp"
        android:background="#ffffff"
        android:padding="0dp">
        <EditText
            android: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">

    <TextView
        android: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" />

    <EditText
        android: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" />

    <EditText
        android: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" />

    <EditText
        android: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" />

    <Button
        android: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" />

    <Button
        android: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效果展示

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

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

相关文章

2023年最新版IDEA安装(超详细)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 写在前面&#xff0c;IDEA的安装是建立在JDK安装好了的前提下&#xff0c;否则IDEA是无法使用的&#xff0c;具体JDK…

回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测

回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现GA-…

VR/AR/眼镜投屏充电方案(LDR6020)

VR眼镜即VR头显&#xff0c;也称虚拟现实头戴式显示设备&#xff0c;随着元宇宙概念的传播&#xff0c;VR眼镜的热度一直只增不减&#xff0c;但是头戴设备的续航一直被人诟病&#xff0c;如果增大电池就会让头显变得笨重影响体验&#xff0c;所以目前最佳的解决方案还是使用VR…

Tomcat和Servlet基础知识的讲解(JavaEE初阶系列16)

目录 前言&#xff1a; 1.Tomcat 1.1Tomcat是什么 1.2下载安装 2.Servlet 2.1什么是Servlet 2.2使用Servlet来编写一个“hello world” 1.2.1创建项目&#xff08;Maven&#xff09; 1.2.2引入依赖&#xff08;Servlet&#xff09; 1.2.3创建目录&#xff08;webapp&a…

蚂蚁 SOFAServerless 微服务新架构的探索与实践

赵真灵&#xff08;有济&#xff09; 蚂蚁集团技术专家 Serverless 和微服务领域专家曾负责基于 K8s Deployment 的应用发布运维平台建设、K8s 集群的 Node/pod 多级弹性伸缩与产品建设。当前主要负责应用架构演进和 Serverless 相关工作。同时也是 SOFAArk 社区的开发和维护者…

记一次布尔盲注漏洞的挖掘与分析

在上篇文章记一次由于整型参数错误导致的任意文件上传的漏洞成因的分析过程中&#xff0c;发现menu_id貌似是存在注入的。 public function upload() {$menu_id $this->post(menu_id);if ($id) {$where "id {$id}";if ($menu_id) {$where . " and menu_id…

2. 使用IDEA创建Spring Boot Hello项目并管理依赖——Maven入门指南

前言&#xff1a;本文将介绍如何使用IDEA创建一个Spring Boot Hello项目&#xff0c;并通过Maven来管理项目的依赖。我们从项目的创建到代码的编写&#xff0c;再到项目的构建和运行&#xff0c;一步步演示了整个过程。 &#x1f680; 作者简介&#xff1a;作为某云服务提供商的…

动物体外受精手术VR模拟仿真培训系统保证学生及标本的安全

奶牛是养殖业主要的资源&#xff0c;因此保证奶牛的健康对养殖业的成功和可持续发展具有重要已用&#xff0c;奶牛有一些常见易发病&#xff0c;一旦处理不当&#xff0c;对奶牛业都会造成较大的经济损失&#xff0c;传统的奶牛手术培训实操难度大、风险高且花费大&#xff0c;…

在当今信息化社会中的安全大文件传输

随着科技的不断进步&#xff0c;数据已经成为各个领域和行业的宝贵财富。然而&#xff0c;随之而来的数据传输和交换问题也成为一个日益突出的挑战。在这篇文章中&#xff0c;我们将探讨在当今信息化社会中的安全大文件传输的重要性&#xff0c;以及如何应对传统传输方式所面临…

Linux: 使用 ssh 连接其他服务器

通过ifconfig 查看要连接的服务器地址&#xff1a; ubuntuubuntu1804-0172:/media/sangfor/vdc$ ssh ubuntu192.168.11.49 输入要连接的服务器密码: ubuntua192.168.1149 s password: 连接服务器成功&#xff1a;

AI智能工服识别算法

AI智能工服识别算法通过yolov5python网络深度学习算法模型&#xff0c;AI智能工服识别算法通过摄像头对现场区域利用算法分析图像中的工服特征进行分析实时监测工作人员的工服穿戴情况&#xff0c;识别出是否规范穿戴工服&#xff0c;及时发现不规范穿戴行为&#xff0c;提醒相…

基于串口透传模块,单片机无线串口空中下载测试

基于串口透传模块&#xff0c;单片机无线串口空中下载测试 ✨无线串口下载&#xff0c;其本质还是串口下载方式&#xff0c;只不过省去了单片机和ISP上位机工具之间的物理有线连接&#xff0c;中间的数据通过无线串口透传模块进行数据中转&#xff0c;传递到单片机串口上。串口…

【PyQt】QGraphicsView场景导出为图片

1 需求 需要将用户绘制的场景导出为图片。即 QGraphicsView中的Scene导出为图片。 2 代码 # 提示&#xff1a;此函数应能访问 QGraphicsView 对象。 # 参考&#xff1a;作者的项目中&#xff0c;此函数在某个QMainWindow类中&#xff0c;作为导出按钮的槽函数。import sys …

数据采集:selenium 获取 CDN 厂家各省市节点 IP

写在前面 工作需要遇到&#xff0c;简单整理理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0c;是对…

【C++】5、构建:CMake

文章目录 一、概述二、实战2.1 内部构建、外部构建2.2 CLion Cmake 一、概述 CMake 是跨平台构建工具&#xff0c;其通过 CMakeLists.txt 描述&#xff0c;并生成 native 编译配置文件&#xff1a; 在 Linux/Unix 平台&#xff0c;生成 makefile在苹果平台&#xff0c;可以生…

HTML5岗位技能实训室建设方案

一 、系统概述 HTML5岗位技能技术是计算机类专业重要的核心课程&#xff0c;课程所包含的教学内容多&#xff0c;实践性强&#xff0c;并且相关技术更新快。传统的课堂讲授模式以教师为中心&#xff0c;学生被动式接收&#xff0c;难以调动学生学习的积极性和主动性。混合式教学…

Maven聚合项目(微服务项目)创建流程,以及pom详解

一、创建流程 1、首先创建springboot项目作为父项目 只留下pom.xml 文件&#xff0c;删除src目录及其他无用文件 2、创建子项目 子项目可以是maven项目&#xff0c;也可以是springboot项目 3、父子项目关联 4、父项目中依赖管理 <?xml version"1.0" encoding…

9个python自动化脚本,PPT批量生成缩略图、添加图片、重命名

引言 最近一番在整理资料&#xff0c;之前买的PPT资源很大很多&#xff0c;但归类并不好&#xff0c;于是一番准备把这些PPT资源重新整理一下。统计了下&#xff0c;这些PPT资源大概有2000多个&#xff0c;一共30多G&#xff0c;一个一个手动整理这个投入产出比也太低了。 作为…

AI 浪潮下,W3AI 如何增强和激励 Web3 玩家研究和决策力?

更加个性化的 AI 服务是怎样的&#xff1f;近年来&#xff0c;不少主打 AI 服务的 Web3 初创项目开始兴起&#xff0c;凭借语音、文字、图像等全方位的用户数据跟踪和使用习惯定义&#xff0c;场景化的 AI Web3 产品开始围绕用户的工作、生活日常提供智能服务。这其中&#xff…

如何使用腾讯云服务器搭建网站?

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网分享使用腾讯云服务器建站教程&#xff0c;新手站长搭…