SQLite数据库-学生管理系统(2.0)

news2024/12/29 9:59:05

SQLite数据库-学生管理系统

1.要求

  • 布局文件 --------View层
  • Activity文件---------Controller层
  • Helper文件:建立数据库和表,版本更新
  • Dao层:对数据库表中数据增删改查操作
  • Entity:数据库在项目中的类,主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。

2.参考代码

(1)项目目录结构

(2)MyHelper代码。

//数据库帮助类
public class MyHelper extends SQLiteOpenHelper {


    public MyHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    //自定义构造
    public MyHelper(@Nullable Context context, @Nullable String name, int version) {
        super(context, name, null, version);
    }
    //创建数据库
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS student");
        sqLiteDatabase.execSQL("CREATE TABLE  student(id integer primary key,name varchar(20),age integer,sex integer) ");
    }

    //版本更新
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL("Alter TABLE  student add classNo integer ");
    }
}

(3)Student代码。

//学生实体
public class Student implements Serializable {
    //属性
    private Integer id;
    private String name;
    private Integer age;
    private Integer sex;

    //构造
    public Student(Integer id, String name, Integer age, Integer sex) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    //get & set
    public Student() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}

(4)StudentDao

//数据库相关操作接口
public interface StudentDao {
    //添加用户
    public boolean addUser(Context context, Student student);
    //更新用户
    public boolean updateUser(Context context,Student student);
    //删除id删除
    public boolean deleteUserById(Context context,Integer id);
    //基于模糊查询
    public List<Student> queryUserByVague(Context context,Student student);


}

(5)StudentDaoImpl

//增删改查的实现类
public class StudentDaoImpl implements StudentDao{
    @Override
    public boolean addUser(Context context, Student student) {
        long line=0;
        MyHelper helper=null;
        SQLiteDatabase database=null;
        try{
             helper=new MyHelper(context,"studentDB",1);
             database=helper.getWritableDatabase();
            ContentValues values=new ContentValues();
            values.put("id",student.getId());
            values.put("name",student.getName());
            values.put("age",student.getAge());
            values.put("sex",student.getSex());
            database.beginTransaction();
            line=database.insert("student",null,values);
            database.setTransactionSuccessful();
            database.endTransaction();
        }
        catch (Exception e){
            database.close();
            helper.close();
            return false;
        }
        finally{
            if (line>=1){
                database.close();
                helper.close();
                return true;
            }
            database.close();
            helper.close();
            return false;
        }

    }

    @Override
    public boolean updateUser(Context context,Student student) {
        long line=0;
        MyHelper helper=null;
        SQLiteDatabase database=null;
        try{
            helper=new MyHelper(context,"studentDB",1);
            database=helper.getWritableDatabase();
            ContentValues values=new ContentValues();
            values.put("name",student.getName());
            values.put("age",student.getAge());
            values.put("sex",student.getSex());
            database.beginTransaction();
            line=database.update("student",values,"id=?",new String[]{""+student.getId()});
            database.setTransactionSuccessful();
            database.endTransaction();
        }
        catch (Exception e){
            database.close();
            helper.close();
            return false;
        }
        finally{
            if (line>=1){
                database.close();
                helper.close();
                return true;
            }
            database.close();
            helper.close();
            return false;
        }
    }

    @Override
    public boolean deleteUserById(Context context,Integer id) {
        MyHelper helper=null;
        SQLiteDatabase database=null;
        try{
            helper=new MyHelper(context,"studentDB",1);
            database=helper.getWritableDatabase();
            database.beginTransaction();
            database.execSQL("delete from student where id=?",new String[]{id+""});
            database.setTransactionSuccessful();
            database.endTransaction();
        }
        catch (Exception e){
            database.close();
            helper.close();
            return false;
        }
        finally{
            database.close();
            helper.close();
            return true;
        }
    }

    @Override
    public List<Student> queryUserByVague(Context context,Student student) {
        List<Student> list=new ArrayList<Student>();
        MyHelper helper=null;
        SQLiteDatabase database=null;
        try{
            list.clear();
            helper=new MyHelper(context,"studentDB",1);
            database=helper.getWritableDatabase();

            String id="%"+student.getId()+"%";
            if (student.getId()==null){
                id="%";
            }
            String name="%"+student.getName()+"%";
            if (student.getName()==null){
                name="%";
            }
            String age="%"+student.getAge()+"%";
            if (student.getAge()==null){
                age="%";
            }
            String sex="%"+student.getSex()+"%";
            if (student.getSex()==null){
                sex="%";
            }
            Cursor cursor=database.rawQuery("select id,name,age,ifnull(sex,-1) from student where ifnull(id,'') like ? and ifnull(name,'') like ? and ifnull(age,'') like ? and ifnull(sex,'') like ?",new String[]{id,name,age,sex});
            while (cursor.moveToNext()){
                Student stu=new Student(cursor.getInt(0),cursor.getString(1),cursor.getInt(2),cursor.getInt(3));
                list.add(stu);
                System.out.println(stu);
            }
        }
        catch (Exception e){
            database.close();
            helper.close();
            return null;
        }
        finally{
            database.close();
            helper.close();
            return list;
        }
    }
}

(6)MainActivity代码。

package com.lxz.app5;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.lxz.app5.dao.StudentDao;
import com.lxz.app5.dao.StudentDaoImpl;
import com.lxz.app5.entity.Student;

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

//相当于controller
public class MainActivity extends AppCompatActivity {

    EditText stuId,stuName,stuAge,stuSex;
    Button addBtn,deleteBtn,updateBtn,queryBtn;
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        initView();
        //CRUD操作
        queryListener();
        deleteListener();
        addListener();
        updateListener();
    }

    //方法:初始化控件
    private void initView(){
        //输入框
        stuId=findViewById(R.id.stuId);
        stuName=findViewById(R.id.stuName);
        stuAge=findViewById(R.id.stuAge);
        stuSex=findViewById(R.id.stuSex);
        //按钮
        addBtn=findViewById(R.id.addBtn);
        deleteBtn=findViewById(R.id.deleteBtn);
        updateBtn=findViewById(R.id.updateBtn);
        queryBtn=findViewById(R.id.queryBtn);
        //列表项
        listView=findViewById(R.id.listview);

        //加载表头
        View view=LayoutInflater.from(getApplicationContext()).inflate(R.layout.student_item_header,null,false);
        listView.addHeaderView(view);

        //设置列表项事件监听
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                //点击表头清空输入框中信息
                if (position==0){
                    stuId.setText(""); stuName.setText("");
                    stuAge.setText(""); stuSex.setText("");
                }
                //将点击的内容显示到输入框中
                else{
                    TextView textId=view.findViewById(R.id.textId);
                    TextView textName=view.findViewById(R.id.textName);
                    TextView textAge=view.findViewById(R.id.textAge);
                    TextView textSex=view.findViewById(R.id.textSex);
                    stuId.setText(textId.getText());
                    stuName.setText(textName.getText());
                    stuAge.setText(textAge.getText());
                    stuSex.setText(textSex.getText());
                }

            }
        });
    }
    //方法:查询的事件监听
    private void queryListener(){
        queryBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                List<Student> students=new ArrayList<>();
                students.clear();
                StudentDao studentDao=new StudentDaoImpl();

                Integer id=null;
                String name="";
                Integer age=null;
                Integer sex=null;
                if (!isEmpty(stuId)) {
                    id=Integer.parseInt(stuId.getText().toString().trim());
                }
                if (!isEmpty(stuName)) {
                    name=stuName.getText().toString().trim();
                }
                if (!isEmpty(stuAge)) {
                    age=Integer.parseInt(stuAge.getText().toString().trim());
                }
                if (!isEmpty(stuSex)) {
                    if (stuSex.getText().toString().trim().equals("male")){
                        sex=1;
                    }
                    if (stuSex.getText().toString().trim().equals("female")){
                        sex=0;
                    }
                }
                Student student=new Student(id,name,age,sex);
                students=studentDao.queryUserByVague(getApplicationContext(),student);
                generateListView(students);
            }
        });
    }
    //方法:判断editText中的内容是不是空
    public boolean isEmpty(EditText editText){
        if (editText.getText().toString().equals("")){
            return true;
        }
        else {
            return false;
        }
    }

    //方法:生成列表项
    private void generateListView(List<Student> list){
        List<Map<String, String>> l=new ArrayList<>();
        for (Student s:list){
            Map<String, String> map=new HashMap<>();
            map.put("textId",s.getId().toString());
            map.put("textName",s.getName());
            if (s.getSex()==-1){
                map.put("textSex","未知");
            }
            else{
                map.put("textSex",s.getSex()==0?"female":"male");
            }
            map.put("textAge",s.getAge().toString());
            l.add(map);
        }
    //创建适配器
        SimpleAdapter adapter=new SimpleAdapter(getApplicationContext(),l,R.layout.student_item,new String[]{"textId","textName","textSex","textAge"},new int[]{R.id.textId,R.id.textName,R.id.textSex,R.id.textAge});
        listView.setAdapter(adapter);

    }

    //方法:查询的事件监听
    private void deleteListener(){
    deleteBtn.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View view) {
            List<Student> students = new ArrayList<>();
            students.clear();
            StudentDao studentDao = new StudentDaoImpl();
            Integer id = null;
            if (!isEmpty(stuId)) {
              id = Integer.parseInt(stuId.getText().toString().trim());
                boolean flag = studentDao.deleteUserById(getApplicationContext(), id);
                if (flag) {
                    Toast.makeText(MainActivity.this, "删除成功!", Toast.LENGTH_SHORT).show();
                }
                else{
                    Toast.makeText(MainActivity.this, "删除失败!", Toast.LENGTH_SHORT).show();
                }
            }
            else{

                Toast.makeText(MainActivity.this, "学号不能为空!", Toast.LENGTH_SHORT).show();
              }

          }
       });
    }

    //方法:更新的事件监听
    private void updateListener(){
        updateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                StudentDao studentDao=new StudentDaoImpl();

                Integer id=null;
                String name="";
                Integer age=null;
                Integer sex=null;
                if (!isEmpty(stuId)) {
                    id=Integer.parseInt(stuId.getText().toString().trim());
                }
                if (!isEmpty(stuName)) {
                    name=stuName.getText().toString().trim();
                }
                if (!isEmpty(stuAge)) {
                    age=Integer.parseInt(stuAge.getText().toString().trim());
                }
                if (!isEmpty(stuSex)) {
                    System.out.println(stuSex.getText().toString().trim().equals("male"));
                    if (stuSex.getText().toString().trim().equals("male")){
                        sex=1;
                    }
                    if (stuSex.getText().toString().trim().equals("female")){
                        sex=0;
                    }
                }
                Student student=new Student(id,name,age,sex);

                boolean flag=studentDao.updateUser(getApplicationContext(),student);
                if (flag){
                        Toast.makeText(MainActivity.this, "更新成功!", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(MainActivity.this, "更新失败!", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    //方法:插入的事件监听
    private void addListener(){
        addBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                StudentDao studentDao=new StudentDaoImpl();

                Integer id=null;
                String name="";
                Integer age=null;
                Integer sex=null;
                if (!isEmpty(stuId)) {
                    id=Integer.parseInt(stuId.getText().toString().trim());
                }
                if (!isEmpty(stuName)) {
                    name=stuName.getText().toString().trim();
                }
                if (!isEmpty(stuAge)) {
                    age=Integer.parseInt(stuAge.getText().toString().trim());
                }
                if (!isEmpty(stuSex)) {
                    if (stuSex.getText().toString().equals("male")){
                        sex=1;
                    }
                    if (stuSex.getText().toString().equals("female")){
                        sex=0;
                    }

                }
                Student student=new Student(id,name,age,sex);

                boolean flag=studentDao.addUser(getApplicationContext(),student);
                if (flag){
                    Toast.makeText(MainActivity.this, "添加成功!", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(MainActivity.this, "添加失败!", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

(7)MainActivity的布局文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:stretchColumns="1">

        <TableRow>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="学号"
                android:textSize="30dp" />

            <EditText
                android:id="@+id/stuId"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:hint="请输入学号(ID自增)"
                android:inputType="numberSigned"
                android:maxLines="1"
                android:textSize="30dp" />
        </TableRow>

        <TableRow>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="姓名"
                android:textSize="30dp" />

            <EditText
                android:id="@+id/stuName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:hint="请输入姓名"
                android:inputType="text"
                android:maxLines="1"
                android:textSize="30dp" />
        </TableRow>

        <TableRow>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="性别"
                android:textSize="30dp" />

            <EditText
                android:id="@+id/stuSex"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:hint="请输入性别(男或女)"
                android:inputType="text"
                android:maxLines="1"
                android:textSize="30dp" />
        </TableRow>

        <TableRow>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="年龄"
                android:textSize="30dp" />

            <EditText
                android:id="@+id/stuAge"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:hint="请输入年龄"
                android:inputType="numberSigned"
                android:maxLines="1"
                android:textSize="30dp" />
        </TableRow>
    </TableLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/addBtn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="添加"
            android:textSize="30dp" />

        <Button
            android:id="@+id/deleteBtn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="删除"
            android:textSize="30dp" />

        <Button
            android:id="@+id/updateBtn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="修改"
            android:textSize="30dp" />

        <Button
            android:id="@+id/queryBtn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="查询"
            android:textSize="30dp" />

    </LinearLayout>

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

(8)student_item_header.xml的奴据文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="学号"
        android:textColor="@color/pink"
        android:textSize="20dp" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="姓名"
        android:textColor="@color/pink"
        android:textSize="20dp" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="性别"
        android:textColor="@color/pink"
        android:textSize="20dp" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="年龄"
        android:textColor="@color/pink"
        android:textSize="20dp" />

</LinearLayout>

(9)student_item.xml的布局文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/textId"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="学号"
        android:textColor="@color/pink"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/textName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="姓名"
        android:textColor="@color/pink"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/textSex"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="性别"
        android:textColor="@color/pink"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/textAge"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="年龄"
        android:textColor="@color/pink"
        android:textSize="20dp" />

</LinearLayout>

(10)效果图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

短视频创业:大部分人都误解了豆荚的作用,掌握正确方法你就悟了

短视频&#xff0c;豆荚是避不过的功能&#xff0c;那么豆荚的作用和要不要投豆荚呢&#xff1f; 对于一般人来说&#xff0c;可能会觉得那投豆荚就是向买粉丝、买播放量、买数据的这么一个付费工具 对于一个专业的短视频运营来说&#xff0c;它其实是一个撬动自然流量的工具…

GROMACS模拟分析-自由能形貌图的绘制

自由能形貌&#xff08;free energy landscape&#xff0c;FEL&#xff09;表征了模拟过程中蛋白质的自由能变化。自由能形貌图一般通过两个描述体系特征的量来进行绘制&#xff0c;例如RMSD和Rg&#xff0c;也有文献中用主成分分析PC1和PC2绘制。本文以RMSD和Rg两个特征量绘制…

C++ 实现字符串查找 KMP算法

前言 众所周知&#xff0c;字符串查找的应用范围非常广&#xff0c;网页上有各式各样的浏览器搜索&#xff0c;再到编程需要的vsCode或vsStudio都自带了搜索功能&#xff1b;一个查找算法的优劣可以直接影响用户的搜索体验如何但鉴于暴力搜索算法的O(m * n)复杂度&#xff0c;…

精选测试面试题

一、Web自动化测试 1.Selenium中hidden或者是display &#xff1d; none的元素是否可以定位到&#xff1f; 不能,可以写JavaScript将标签中的hidden先改为0&#xff0c;再定位元素 2.Selenium中如何保证操作元素的成功率&#xff1f;也就是说如何保证我点击的元素一定是可以…

图文并茂的介绍用word生成一个很智能的目录

文章目录前期准备设置各级目录的字体样式准备一个新的页面&#xff08;装目录&#xff09;大工告成&#xff01;作为一名程序员&#xff0c;写代码自然是我们的强项&#xff0c;除了写写代码使用计算机的能力也渐渐成为了考察我们的指标&#xff0c;今天我们介绍一个办公小技巧…

【图神经网络】Pytorch图神经网络库——PyG异构图学习

PyG异构图学习举个例子创建异构图Utility函数异构图Transformations创建异构图神经网络自动转换GNN模型使用异构卷积包装器部署现有的异构算子异构图采样参考资料大量真实世界数据集存储为异构图&#xff0c;这促使Pytorch Geometric&#xff08;PyG&#xff09;中引入专门的功…

Java项目:Springboot实现的一个简单博客管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为前后台管理系统&#xff0c;包括博主与游客两种角色&#xff1b; 博主角色包含以下功能&#xff1a; 博主登录,发博客,博主可以删除博客…

使用yolov5 v7.0进行实例分割

1. 介绍 U版yolov5最新推出了v7.0版本,新增了基于yolov5进行实例分割的代码。作者提到yolov5 v7.0实现的实例分割是超越了所有的SOTA模型的效果,是目前为止速度和精度最高的。 2. 代码的使用 2.1 Setup 克隆GitHub仓库,安装依赖项,检查PyTorch和GPU。 git clone http…

GEO芯片数据分析更新(补富集分析与WGCNA)

GEO数据挖掘&#xff0c;表达芯片分析 举例&#xff1a;王同学近期拟通过生物信息学相关软件与数据库来探讨女性非抽烟者的非小细胞肺癌预后相关的显著性基因及潜在的治疗靶点&#xff0c;他在NCBI上查询到了1套芯片数据GSE19804。请帮助他完成该项目的设计与分析。 上一篇博…

Linux系统基础——内核初始化

内核初始化 特此说明: 刘超的趣谈linux操作系统是比较重要的参考资料&#xff0c;本文大部分内容和所有图片来源于这个专栏。 1 背景知识 BootLoader阶段后&#xff0c;cpu从实模式转换成保护模式。有了更强的寻址能力后&#xff0c;内核也已经加载到内存了&#xff0c;系统内…

2. 做一个极简 UI 库之Toast 组件

效果 API 设计 先设计好了 API 写起来代码才不会犯迷糊 Toast(message: string; otherParams?: ToastParams): ToastReturninterface ToastParams {time?: number;appendTo?: string | HTMLElement;dangerouslyUseHTMLString?: boolean; }interface ToastReturn {close():v…

Node.js - Express

文章目录目标一、初识 Express1、Express 简介&#xff08;1&#xff09;什么是 Express&#xff08;2&#xff09;进一步理解 Express&#xff08;3&#xff09;Express 能做什么2、Express 的基本使用&#xff08;1&#xff09;安装&#xff08;2&#xff09;创建基本的 Web …

认识 Fuchsia OS

认识 Fuchsia OS 1 说明背景 1.1 基本信息 开发者: Google编程语言: C、C、Rust、Go、Python、Dart内核: Zircon运作状态: 当前源码模式: 开放源代码初始版本: 2016年8月15日支持的语言: 英语支持平台: ARM64、X86-64内核类别: 微内核 基于能力 实时操作系统许可证: BSD 3 c…

node.js+uni计算机毕设项目高校迎新管理小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

【2023 AR元宇宙过圣诞!】《Merry Meta Christmas》

啥也不说了&#xff0c;先看最终效果 3D场景资源、EasyAR_Plugin、图片与安卓App资源均已上传&#xff0c;点击该处下载 一、前言 圣诞节的真正含义是为了纪念耶稣诞生&#xff0c;象征着团圆美满&#xff0c;万物复苏&#xff0c;日子变得愈发美好 2021年是元宇宙的元年&…

UE5 狐獴演示Demo分析

1.特效的生成方式 1.1临时特效的生成&#xff1a;使用了已生成轨道临时创建该特效&#xff08;不用在场景中放入该特效&#xff0c;而是临时创建即可&#xff09;、系统生命周期轨道设置该特效的播放时长 1.2长期特效的生成&#xff1a;特效时长为该镜头片段长度 2.特效的类…

输出数组中每一行(列)中的最小值(最大值)numpy.amin()numpy.amax()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 输出数组中每一行&#xff08;列&#xff09;中的最小值&#xff08;最大值&#xff09; numpy.amin() numpy.amax() [太阳]选择题 对下面代码中np.amin(myList, 0)输出的结果为&#xff1f;…

java基于ssh的旅游系统

本项目主要发西安各个旅游景点和附近酒店信息的网站&#xff0c;用户可以根据旅游团一起旅游&#xff0c;可以也可以自驾游&#xff0c;还可以发布旅游活动等。 演示视频 https://www.bilibili.com/video/BV1wv411x7cg/?share_sourcecopy_web&vd_sourceed0f04fbb713154db…

【Vue】七、Vue-cli工程化开发

后端程序员的vue学习之路一、 Vue-cli安装Vue-cli1、安装node.js2、配置node.js环境变量3、 Npm仓库设置淘宝源4、全局安装 vue-cli5、创建vue应用程序1、 创建vue项目基础骨架&#xff1a;2、 运行项目&#xff1a;6、vue项目结构二、Vue.js项目运行逻辑分析1、 npm run dev命…

3.11.2、虚拟局域网 VLAN 实现机制

虚拟局域网 VLAN 技术是在交换机上实现的&#xff0c;需要交换机能够实现以下两大功能 能够处理带有 VLAN 标记的帧&#xff1a;IEEE 802.1Q 帧交换机的各端口支持不同的端口类型&#xff08;帧的处理方式有所不同&#xff09; 1、IEEE 802.1Q 帧 IEEE 802.1Q 帧&#xff08…