android开发---简单购物商城(JAVA) (一)

包括:商品展示,商品详情,购物车,删除,一键清除,返回

运用sqllist

另外因为一篇写不下 继续可看     源码二

下面是目录

运行样子

下面是源码

AndroidManifest.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:name=".MyApplication"
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic"
        android:supportsRtl="true"
        android:theme="@style/Theme.Shop"
        tools:targetApi="31">
        <activity
            android:name=".ShoppingDetailActivity"
            android:exported="false" />
        <activity
            android:name=".ShoppingcartActivit"
            android:exported="false" />
        <activity
            android:name=".ShoppingChannelActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
/database/ShoppingDBHelper
package com.example.shop.database;

import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import com.example.shop.enity.CartInfo;
import com.example.shop.enity.GoodsInfo;

import java.util.ArrayList;
import java.util.List;

public class ShoppingDBHelper extends SQLiteOpenHelper {
    private static final String DB_NAME="shopping.db";
    public static final String TABLE_GOODS_INFO = "goods_info";
    public static final String TABLE_CART_INFO = "cart_info";
    public static final String CONTENT = "content";
    private static final String TAG="MyApplication";
    private static final int DB_VERSION=1;
    private static ShoppingDBHelper mHelper=null;
    private SQLiteDatabase mRDB=null;
    private SQLiteDatabase mWDB=null;
    public ShoppingDBHelper( Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }
    public static ShoppingDBHelper getInstance(Context context){
        if(mHelper==null)mHelper=new ShoppingDBHelper(context);
        return mHelper;
    }
    public SQLiteDatabase openReadLink(){
        if(mRDB==null||!mRDB.isOpen()){
            mRDB=mHelper.getReadableDatabase();
        }
        return mRDB;
    }
    public SQLiteDatabase openWriteLink(){
        if(mWDB==null||!mWDB.isOpen()){
            mWDB=mHelper.getWritableDatabase();
        }
        return mWDB;
    }
    public void closeLink(){
        if(mRDB!=null&&mRDB.isOpen()){
            mRDB.close();
            mRDB=null;
        }
        if(mWDB!=null&&mWDB.isOpen()){
            mWDB.close();
            mWDB=null;
        }
    }



    @Override
    //数据库第一次被创建时调用该方法
    public void onCreate(SQLiteDatabase db) {
        //初始化数据库的表结构,执行一条建表的SQL语句
        String sql ="create table if NOT EXISTS "+TABLE_GOODS_INFO+"(_id integer primary key autoincrement not null,"+"name varchar not null,"+"description varchar not null,"+
                "price float not null,"+
                "pic_path varchar not null);";

        db.execSQL(sql);

         sql ="create table if NOT EXISTS "+TABLE_CART_INFO+"(_id integer primary key autoincrement not null,"+
                "goods_id integer not null,"+
                "count integer not null);";

        db.execSQL(sql);
    }




    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
    public void insertGoodsInfos(List<GoodsInfo> list){//插入多条记录
        try {

            mWDB.beginTransaction();
            for(GoodsInfo info:list){
                ContentValues values=new ContentValues();
                values.put("name",info.name);
                values.put("description",info.description);
                values.put("price",info.price);
                values.put("pic_path",info.picPath);
                mWDB.insert(TABLE_GOODS_INFO,null,values);

            }
            mWDB.setTransactionSuccessful();
        } catch (Exception e){

        } finally {

            mWDB.endTransaction();
        }


    }
    //查询
    public List<GoodsInfo>queryAllGoodsInfo(){
        String sql="select * from "+TABLE_GOODS_INFO;
        List<GoodsInfo>list=new ArrayList<>();
       Cursor cursor= mRDB.rawQuery(sql,null);
       while (cursor.moveToNext()){
           GoodsInfo info=new GoodsInfo();
           info.id=cursor.getInt(0);
           info.name=cursor.getString(1);
           info.description=cursor.getString(2);
           info.price=cursor.getFloat(3);
           info.picPath=cursor.getString(4);
           list.add(info);
       }
       cursor.close();
       return list;
    }

    public void insertCartInfo(int gid) {//添加购物车
        //不存在
        CartInfo cartInfo=queryCartInfoByGoodsId(gid);
        ContentValues values=new ContentValues();
        values.put("goods_id",gid);
        if(cartInfo==null){
            values.put("count",1);
            mRDB.insert(TABLE_CART_INFO,null,values);
        }
        else{ //数量加一
            values.put("_id",cartInfo.id);
            values.put("count",++cartInfo.count);
            mWDB.update(TABLE_CART_INFO,values,"_id=?",new String[]{String.valueOf(cartInfo.id)});

        }


    }

    private CartInfo queryCartInfoByGoodsId(int gid) {
        //查询
        Cursor cursor=mRDB.query(TABLE_CART_INFO,null,"goods_id=?",new String[]{String.valueOf(gid)},null,null,null);
        CartInfo info=null;
        if(cursor.moveToNext()){
            info=new CartInfo();
            info.id=cursor.getInt(0);
            info.goodsid=cursor.getInt(1);
            info.count=cursor.getInt(2);
        }
        return info;
    }

    public int countCartInfo() {
        int count=0;
       // String sql="select sum(count) from"+TABLE_CART_INFO;
       // List<CartInfo>list=new ArrayList<>();
      //  Cursor cursor= mRDB.rawQuery(sql,null);
     //   count=cursor.getInt(0);
//
//       // Cursor cursor=mRDB.rawQuery(sql,null);
//        if(cursor.moveToNext()){
   //        count=cursor.getInt(0);
    //    Log.d(TAG,String.valueOf(count));
//        }
        return count;
    }

    public List<CartInfo> queryAllCartInfo() {//查询购物车信息
        List<CartInfo>list=new ArrayList<>();
        Cursor cursor=mRDB.query(TABLE_CART_INFO,null,null,null,null,null,null,null);
        while(cursor.moveToNext()){
            CartInfo info=new CartInfo();
            info.id=cursor.getInt(0);
            info.goodsid=cursor.getInt(1);
            info.count=cursor.getInt(2);
            list.add(info);
        }
        return list;
    }

    public GoodsInfo queryGoodsInfoById(int goodsid) {
        GoodsInfo info=null;
        Cursor cursor=mRDB.query(TABLE_GOODS_INFO,null,"_id=?",new String[]{String.valueOf(goodsid)},null,null,null);
        if(cursor.moveToNext()){
            info=new GoodsInfo();
            info.id=cursor.getInt(0);
            info.name=cursor.getString(1);
            info.description=cursor.getString(2);
            info.price=cursor.getFloat(3);
            info.picPath=cursor.getString(4);

        }

        return info;
    }

    public void deleteCartinfobygoodsid(int goodsid) {//delete one
        mWDB.delete(TABLE_CART_INFO,"goods_id=?",new String[]{String.valueOf(goodsid)});
    }
    public void deleteallcartinfo(){
        mWDB.delete(TABLE_CART_INFO,"1=1",null);//条件
    }
}

/enity/CartInfo 购物车数据
package com.example.shop.enity;

public class CartInfo {
    public int id;
    public int count;
    public int goodsid;
    public CartInfo(){}
    public CartInfo(int id,int goodsid,int count){
        this.goodsid=goodsid;
        this.id=id;
        this.count=count;
    }
}
/enity/GoodsInfo 商品数据
package com.example.shop.enity;

import com.example.shop.R;

import java.util.ArrayList;

public class GoodsInfo {
    public int id;
    public String name;
    public String description;
    public float price;
    public String picPath;
    public int pic;
    private static String[ ]mNameArray={
            "iPhone 11","mate 30","mi30","huawei 2","rongyao30s","vivo x30"
    };
    private static String[]mDescArray={
            "Apple iphone 256D|G",
            "mate30 iphone 256D|G",
            "mi30 iphone 256D|G",
            "huawei 2 iphone 256D|G",
            "rongyao30s iphone 256D|G",
            "vivo x30 iphone 256D|G",
    };
    private static float[]mPriceArray={100,200,31,221,22,40};

    private static int[]mPicArray={
            R.drawable.no1,R.drawable.no2,R.drawable.no3,R.drawable.no4,R.drawable.no5,R.drawable.no6
    };
    public static ArrayList<GoodsInfo>getDefaultList(){
        ArrayList<GoodsInfo>goodsList=new ArrayList<>();
        for(int i=0;i<mNameArray.length;i++){
            GoodsInfo info=new GoodsInfo();
            info.id=i;
            info.name=mNameArray[i];
            info.description=mDescArray[i];
            info.price=  mPriceArray[i];
            info.pic=mPicArray[i];
            goodsList.add(info);

        }
        return goodsList;
    }
}
/util/FilUtil 读取数据库数据并显示
package com.example.shop.util;

import android.graphics.Bitmap;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;

public class FilUtil {
    //保存
    public static void saveText(String path,String txt){
        BufferedWriter os=null;
        try{
            os=new BufferedWriter(new FileWriter(path));
            os.write(txt);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            if(os!=null){
                try{
                    os.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
    //读取
    public static String openText(String path){
        BufferedReader is=null;
        StringBuilder sb=new StringBuilder();
        try{
            is= new BufferedReader(new FileReader(path));
            String line=null;
            while((line=is.readLine())!=null){
                sb.append(line);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            if(is!=null){
                try{
                    is.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
        return path;
    }
    public static void saveImage(String path, Bitmap bitmap){
        FileOutputStream fos=null;
        try{
            fos=new FileOutputStream(path);
            bitmap.compress(Bitmap.CompressFormat.JPEG,100,fos);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            if(fos!=null){
                try{
                    fos.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }

    }
}
/util/SharedUtil 轻量级存储
package com.example.shop.util;

import android.content.Context;
import android.content.SharedPreferences;

import java.util.Calendar;

public class SharedUtil {
    private static SharedUtil mUtil;
    private SharedPreferences preferences;
    public static SharedUtil getInstance(Context ctx){
        if(mUtil==null){
            mUtil=new SharedUtil();
            mUtil.preferences=ctx.getSharedPreferences("shopping",Context.MODE_PRIVATE);
        }
        return mUtil;
    }

    public void writeBoolean(String key,boolean value){//快捷方法
        SharedPreferences.Editor editor=preferences.edit();
        editor.putBoolean(key,value);
        editor.commit();
    }
    public boolean reaadBoolean(String key,Boolean de){
        return preferences.getBoolean(key,de);
    }

}
AppWriteActivity
package com.example.shop;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class AppWriteActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_app_write);
    }
}
MainActivity
package com.example.shop;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

import java.lang.ref.Cleaner;

import okhttp3.OkHttpClient;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {


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

    }
    
}
MyApplication
package com.example.shop;

import android.app.Application;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;

import androidx.annotation.NonNull;

import com.example.shop.database.ShoppingDBHelper;
import com.example.shop.enity.GoodsInfo;
import com.example.shop.util.FilUtil;
import com.example.shop.util.SharedUtil;

import java.io.File;
import java.util.HashMap;
import java.util.List;

public class MyApplication extends Application {
    private static MyApplication mApp;
    public HashMap<String,String>infoMap=new HashMap<>();
    public int goodsCount;
    public static MyApplication getInstance(){//外部调用
        return mApp;
    }

    @Override
    public void onCreate() {

        super.onCreate();
        mApp=this;
        initGoodsInfo();
    }

    private void initGoodsInfo() {//第一次打开
        Boolean isFirst=SharedUtil.getInstance(this).reaadBoolean("first",true);
        String directory=getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).toString()+ File.separatorChar;

        if(isFirst){//打开数据库
            List<GoodsInfo>list=GoodsInfo.getDefaultList();
            for(GoodsInfo info:list){
                Bitmap bitmap=BitmapFactory.decodeResource(getResources(),info.pic);
                String path=directory+info.id+".jpg";
                FilUtil.saveImage(path,bitmap);

                bitmap.recycle();
                info.picPath=path;
            }

            //存储
            ShoppingDBHelper dbHelper=ShoppingDBHelper.getInstance(this);
            dbHelper.openWriteLink();
            dbHelper.insertGoodsInfos(list);
            dbHelper.closeLink();
            SharedUtil.getInstance(this).writeBoolean("frist",false);

        }

    }

    @Override
    public void onTerminate() {

        super.onTerminate();
    }

    @Override
    public void onConfigurationChanged(@NonNull Configuration newCondig) {

        super.onConfigurationChanged(newCondig);

    }
}
ShoppingcartActivit
package com.example.shop;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.shop.database.ShoppingDBHelper;
import com.example.shop.enity.CartInfo;
import com.example.shop.enity.GoodsInfo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ShoppingcartActivit extends AppCompatActivity implements View.OnClickListener {
    private TextView tv_count;
    private LinearLayout ll_cart;
    private ShoppingDBHelper mDBHelper;
    public List<CartInfo> mCartList;//购物车
    private TextView tv_total_price;
    //声明缓存
    private Map<Integer,GoodsInfo>mGoodsMap=new HashMap<>();
    private LinearLayout ll_empty;
    private LinearLayout ll_content;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shoppingcart);
        TextView tv_title=findViewById(R.id.tv_title);
         tv_count=findViewById(R.id.tv_count);
         tv_title.setText("购物车");
         tv_count.setText(String.valueOf(MyApplication.getInstance().goodsCount));
         ll_cart=findViewById(R.id.ll_cart);

         tv_total_price=findViewById(R.id.tv_total_price);
        mDBHelper= ShoppingDBHelper.getInstance(this);

        findViewById(R.id.iv_back).setOnClickListener(this);
        findViewById(R.id.btn_shopping_channel).setOnClickListener(this);
        findViewById(R.id.btn_clear).setOnClickListener(this);
        findViewById(R.id.btn_settle).setOnClickListener(this);

        ll_empty=findViewById(R.id.ll_empty);
        ll_content=findViewById(R.id.ll_content);

    }
    protected void onResume() {

        super.onResume();
        showCart();
    }

    private void showCart() {//展示
        ll_cart.removeAllViews();//先移除
        mCartList=mDBHelper.queryAllCartInfo();
        if(mCartList.size()==0)return;
        else{
            for(CartInfo info:mCartList){
              GoodsInfo goods= mDBHelper.queryGoodsInfoById(info.goodsid);
              mGoodsMap.put(info.goodsid,goods);//缓存
                View view= LayoutInflater.from(this).inflate(R.layout.item_cart,null);
                @SuppressLint({"MissingInflatedId", "LocalSuppress"})
                ImageView iv_thumb= view.findViewById(R.id.iv_thumb);
                @SuppressLint({"MissingInflatedId", "LocalSuppress"})
                TextView tv_name=view.findViewById(R.id.tv_name);
                @SuppressLint({"MissingInflatedId", "LocalSuppress"})
                TextView tv_desc=view.findViewById(R.id.tv_desc);
                @SuppressLint({"MissingInflatedId", "LocalSuppress"})
                TextView tv_count=view.findViewById(R.id.tv_count);
                @SuppressLint({"MissingInflatedId", "LocalSuppress"})
                TextView tv_price=view.findViewById(R.id.tv_price);
                @SuppressLint({"MissingInflatedId", "LocalSuppress"})
                TextView tv_sum=view.findViewById(R.id.tv_sum);

                iv_thumb.setImageURI(Uri.parse(goods.picPath));
                tv_name.setText(goods.name);
                tv_price.setText(String.valueOf((int)goods.price));
                tv_count.setText(String.valueOf(info.count));
                tv_desc.setText(goods.description);
                tv_sum.setText(String.valueOf((int)(info.count*goods.price)));


                view.setOnLongClickListener(v -> {//clear 长安删除
                    AlertDialog.Builder builder=new AlertDialog.Builder(ShoppingcartActivit.this);//长安
                    builder.setMessage("是否从购物车中删除"+goods.name+"?");

                    builder.setPositiveButton("是",(dialog, which) -> {
                        ll_cart.removeView(v);//delete
                        deleteGoods(info);
                    });
                    builder.setNegativeButton("否",null);
                    builder.create().show();
                    return true;
                });



            ll_cart.addView(view);
            }
            refreshtotalprice();
        }
    }

    private void deleteGoods(CartInfo info) {
        MyApplication.getInstance().goodsCount-=info.count;
        mDBHelper.deleteCartinfobygoodsid(info.goodsid);//从detebse
        CartInfo removed=null;//从list from cart
        for(CartInfo cartInfo:mCartList){
            if(cartInfo.goodsid==info.goodsid){
                removed=cartInfo;
                break;
            }
        }
        mCartList.remove(removed);
        showCount();
        Toast.makeText(this,"已从购物车中删除"+mGoodsMap.get(info.goodsid).name,Toast.LENGTH_SHORT).show();
        mGoodsMap.remove(info.goodsid);
        refreshtotalprice();

    }

    private void showCount() {//显示购物车数据
        tv_count.setText(String.valueOf(MyApplication.getInstance().goodsCount));
        if(MyApplication.getInstance().goodsCount==0){
            ll_empty.setVisibility(View.VISIBLE);
            ll_content.setVisibility(View.GONE);
            ll_cart.removeAllViews();
        }
        else{
            ll_content.setVisibility(View.VISIBLE);
            ll_empty.setVisibility(View.GONE);
        }

    }

    private void refreshtotalprice() {//重新可计算
        int totalPrice=0;
        for(CartInfo info:mCartList){
            GoodsInfo goods=mGoodsMap.get(info.goodsid);
            totalPrice+=goods.price*info.count;
        }
        tv_total_price.setText(String.valueOf(totalPrice));

    }

    @Override
    public void onClick(View v) {
        if(v.getId()==R.id.iv_back){
            finish();
        } else if (v.getId()==R.id.btn_shopping_channel) {
            Intent intent=new Intent(this,ShoppingChannelActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);

        } else if (v.getId()==R.id.btn_clear) {
            mDBHelper.deleteallcartinfo();
            MyApplication.getInstance().goodsCount=0;
            showCount();
            Toast.makeText(this,"购物车已清空",Toast.LENGTH_SHORT).show();

        } else {//settle结算
            AlertDialog.Builder builder=new AlertDialog.Builder(this);
            builder.setTitle("结算");
            builder.setMessage("下次见");
            builder.setPositiveButton("know",null);
            builder.create().show();
        }

    }
}

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

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

相关文章

路由重定向和别名

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介1. 路由重定向实例场景&#xff1a;路由重定向的应用场景&#xff1a; 2. 路由别名实例场景&#xff1a;路由别名的应用场景&#xff1a; ⭐ 写在最后 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏&…

(1)从 AGP 4.1.2 升级到 7.5.1 我遇到了什么问题

AGP 升级问题 &#xff08;1&#xff09;Could not get unknown property ‘project’ for settings&#xff0c;on project.buildscript 问题 Could not get unknown property ‘project’ for settings ‘AGP1’ of type org.gradle.initialization.DefaultSettings. agp4 …

数组与字符串深度巩固

经过再三思考觉得今天就写一篇关于数组与字符串相关的文章吧&#xff01;其中字符串主要通过练习来巩固知识亦或是获得新知识。好接下来将进行我们的学习时刻了。 首先我们来思考一个问题&#xff0c;你真的了解数组的数组名吗&#xff1f;数组名真的就单单一个名字而已吗&…

前置知识:方法递归

认识递归的形式 递归是一种算法&#xff0c;在程序设计语言中广泛应用。从形式上来说&#xff1a;方法调用自身的形式称为方法递归&#xff08;recursion&#xff09;。 递归的形式 直接递归&#xff1a;方法自己调用自己间接递归&#xff1a;方法调用其他方法&#xff0c;其…

深度解读NVMe计算存储协议-1

随着云计算、企业级应用以及物联网领域的飞速发展&#xff0c;当前的数据处理需求正以前所未有的规模增长&#xff0c;以满足存储行业不断变化的需求。这种增长导致网络带宽压力增大&#xff0c;并对主机计算资源&#xff08;如内存和CPU&#xff09;造成极大负担&#xff0c;进…

ASP.NET Core+Layui使用EF Core操作MySQL实战

一、创建ASP.NET Core Web应用程序 注意&#xff0c;本章节主要以ASP.NET Core 3.1版本作为博客的示例实例模板&#xff01;&#xff08;当然你也可以使用当前最新的.NET版本进行实操&#xff09;。 二、添加EF Core NuGet包 若要在项目中使用EF Core操作MySQL数据库&#xff…

【昕宝爸爸小模块】日志系列之什么是分布式日志系统

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

坚持刷题 | 完全二叉树的节点个数

Hello&#xff0c;大家好&#xff0c;我是阿月&#xff01;坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;今天刷&#xff1a;完全二叉树的节点个数 题目 222.完全二叉树的节点个数 代码实现 class TreeNode {int val;TreeNode left, right;public TreeNode(int val) …

编程实例分享,配件进销存进出库管理系统软件

编程实例分享&#xff0c;配件进销存进出库管理系统软件 一、前言 以下教程以 佳易王配件进出库管理系统软件V16.0为例说明 如上图&#xff0c;左侧为导航栏&#xff0c;分为 系统设置&#xff0c;用户信息设置&#xff0c;出入库开单&#xff0c;统计报表&#xff0c;财务管…

C++初阶 类和对象(补充)

目录 一、友元 1.1什么是友元&#xff1f; 1.2如何使用友元&#xff1f; 1.3使用友元 1.4使用友元注意事项 二、初始化列表 2.1什么是初始化列表? 2.2为什么要有初始化列表&#xff1f; 2.3使用初始化列表 2.4注意事项 一、友元 1.1什么是友元&#xff1f; 友元是一…

基于MobileNet(v1-v3)全系列不同参数量级模型开发构建果树图像病虫害识别分析系统,实验量化对比不同模型性能

最近正好项目中在做一些识别相关的内容&#xff0c;我也陆陆续续写了一些实验性质的博文用于对自己使用过的模型进行真实数据的评测对比分析&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、…

高等数学:积分

本文主要参考&#xff1a; 【建议收藏】同济七版《高等数学》精讲视频 | 期末考试 | 考研零基础 | 高数小白_哔哩哔哩_bilibili 4.1.1.1 定积分引例_哔哩哔哩_bilibili 仅供本人学习使用。 积分是一个在多个领域都广泛使用的概念&#xff0c;特别是在数学和物理学中。 以下是积…

PyTorch识别验证码

## 一、生成测试集数据pip install captcha common.py import random import time captcha_array list("0123456789abcdefghijklmnopqrstuvwxyz") captcha_size 4from captcha.image import ImageCaptchaif __name__ __main__:for i in range(10):image ImageC…

leetcode209长度最小的子数组|滑动窗口算法详细讲解学习

滑动窗口是一种基于双指针的一种思想&#xff0c;两个指针指向的元素之间形成一个窗口。 分类&#xff1a;窗口有两类&#xff0c;一种是固定大小类的窗口&#xff0c;一类是大小动态变化的窗口。 简而言之&#xff0c;滑动窗口算法在一个特定大小的字符串或数组上进行操作&…

如何使用Cloudreve搭建私有云盘并发布公网访问无需购买域名服务器

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

飞轮储能系统的建模与MATLAB仿真(永磁同步电机作为飞轮驱动电机)

目录 1 主要内容 电网侧控制系统 电机侧模型 模型二 2 结果分析 3 下载链接 1 主要内容 该仿真为飞轮储能系统的建模&#xff0c;包括电网侧和电机侧两部分模型&#xff0c;仿真采用永磁同步电机作为飞轮驱动电机&#xff0c;通过矢量控制的方式对其发电和电动的工况进行控…

基于单片机温度控制系统的研究

摘 要&#xff1a;笔者基于单片机的温度控制系统&#xff0c;从单片机选择、传感器选择、系统框架设计等方面概述了单片机的温度控制系统内涵&#xff0c;分析了其运行原理&#xff0c;列举了单片机温度控制系统设计的实操方法&#xff0c;从硬件系统、软件系统、温度检测方法…

Python武器库开发-武器库篇之zip文件暴力破解(五十一)

Python武器库开发-武器库篇之zip文件暴力破解(五十一) Zip文件是一种常用的存档文件格式&#xff0c;用于将多个文件和文件夹压缩成一个单独的文件。它是一种广泛接受和支持的文件格式&#xff0c;几乎所有操作系统和计算机都能够处理Zip文件。Zip文件使用一种压缩算法来减小文…

sqli-labs靶场第一关详解

目录 sqlilabs靶场第一关 0. sql注入解释 0.1什么是sql注入 0.2sql注入的原理 0.3sql注入方法 0.3.1 数字型注入 0.3.2 字符型注入 1.注入第一步判断请求方式、类型 1.1打开我自己本地的靶场http://sql.com/Less-1/ &#xff08;上一期靶场搭建&#xff1a;http://t.…

nodejs+vue+ElementUi电商购物个性化商城推荐系统gqfe

电本电商个性化推荐系统是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了用户和管理员这二者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能优…