【java】课程设计--抽卡模拟器

news2024/9/30 5:23:00

文章目录

  • 工期安排
  • 自己实现
    • 菜单逻辑+抽卡算法
      • 0.书写要求
      • 1.用户需求
      • 2.设计思想
      • 3.各个功能和算法描述
      • 4.系统调试中问题
      • 5.总结
  • 新知识
    • 怎么打开任务管理器
  • 改进(进一步的设想)
  • 交给她们实现
    • 1.注册登录
    • 2.读文件-显示查找内容
  • 暂时成功案例


工期安排

1 自定义增加和删除卡面,并且显示
2 修改卡面,以及完善对卡面的操作细节
3 只显示当期up6星
4 研究别的功能

自己实现

菜单逻辑+抽卡算法

0.书写要求

在这里插入图片描述
在这里插入图片描述

1.用户需求

  1. 先把菜单做的美观一点
  2. 包含功能:
    1 查看抽卡记录(抽到的物品、已抽抽数)
    2 设置当前所拥有的抽数
    3 选择10抽或者1抽
    4 显示当前up的6星卡牌
    5 加一些增加删除修改的操作

2.设计思想

1.先不考虑注册登录进行实现
2.先不从文件中进行读写,直接用暂存数据
a 先暂存实现功能2\3
b 开启文件读写,实现功能1\4
c 实现功能5

3.各个功能和算法描述

步骤a 先暂存实现功能2\3

  • menu()
  1. 菜单输入字符进入指定功能

问题1:Scanner获取方法中只能获取String,而不能获取char,导致无法接着使用seitch

way:
1 查询后:先用string接受输入,再用charAt(0)只接受第一个字符,转为char

  1. 设置当前拥有抽数 :

问题1:想用像C中的全局变量一样的变量,使用时可以穿插在各个函数之间使用。

way:
1 要使用java中的局部变量/实例变量/静态变量的知识
2 去搜索一一测试应用后,选定静态变量,因为:1 直接+static声明 2 直接调用,不用像实例变量一样,还要new后通过对象名使用。

  • wish

问题:怕c++中的算法,因为一些莫名奇妙的问题导致不兼容。
way:
1 先直接把c中的代码搬运过来,稍作修改
2 将五星和四星改为两个类
3 显示当期up的6星角色,只能抽此时up的角色

  1. 先直接把c中的代码搬运过来,稍作修改

问题1:发现随机数的生成在java中与c++不同
way:
1 查看以前java生成随机数的笔记 --使用random类进行修改

问题2:sum此时为当前拥有的抽数,menu显示的也是
way:
sum此时应该做减法,在menu的case处分别直接单抽减1,十抽减10

  1. 将五星和四星改为两个类,包装起来

问题1:放在集合类还是普通类中
way:共通的声明放在普通类中,而每个具体的类对象放在集合类中,方便读写操作的进行
问题2:放在什么集合类中

way:
1.看笔记,觉得放在LinkedHashSet集合中。
自己测试使用一下,再应用 --err,因为这个集合不能返回索引处的元素
在这里插入图片描述
2.就用最普遍的ArrayList集合,后面再考虑更换

问题3:普通类中怎么声明存放

way:

  1. 先分为两个普通类,进行书写
  2. 进行测试
    a 把卡放进集合中,先直接在main中set好集合,后面再改为文件读写的增加
    b 此时随机数=下标,按照下标索引到对应的名称上。

步骤:
1 创建FourStar的所有对象,再将其全部添加到ArrayList集合中,在case中按random_four作为索引输出。
参考:
在这里插入图片描述
成品:
在这里插入图片描述
再改switch-case为一句输出。

  1. 再合并为一个类 OK

复制exp文件夹-删除FourStar和FiveStar,新建Star类-多一个int grade判断

在Main1类中,删去GetFiveStar和GetFourStar方法,新建GetStar方法

1.因为概率范围不一样所以,需要改的只有:类对象的加入

步骤b b 开启文件读写,实现功能1\4

  • 更改为文件读写

1 先实现卡面写入txt,以及输出
2 实现用户自定义写入卡面
3 抄入新txt,实现显示当期up6星

** 1 先实现卡面写入txt**
参考:
1 笔记-字符流-集合到文件
在这里插入图片描述
明明关闭了资源,再开启BufferedWriter却写入失败
way1:采取追加写入方法,只有一个BufferedWriter
–因为想要追加写入五星角色,要先加入if(random_five< 10 )判断,逻辑不对
way2:开启一个函数在一开始就进行写入操作

在这里插入图片描述
bug1 四星角色全部写入四次 ok
–因为内容不断追加写入,前面三次四星角色是以前残余下来的
way:在写入操作前进行,清空txt内容操作
在这里插入图片描述
–实际上,用户是不断写入新的卡面,旧的卡面不会重复写入

  • 实现输出

核心:grade为当前星级下,查找对应的random值,并输出name
步骤:先按照笔记–再考虑封装函数

问题1:IO流错误
在这里插入图片描述
way1:尝试写一个函数,把txt内的内容全输出看看
在这里插入图片描述
原来是自己把s变量提到外面,导致s内容一直不变
emmmm
在这里插入图片描述
way2:放回GetStar函数中
经过漫长的逻辑修改后…输出正常
在这里插入图片描述

  • 封装读文件输出为一个函数
    ok
    注意:文件关闭最好在函数最后进行,早关闭了,则报错

  • 实现用户自定义写入卡面

用户输入后,暂存后,追加写入

步骤:

  1. 先在txt中写好原来的数据,去掉五星和四星各一条,由用户写入txt,查看效果–失败

问题1:四星需要定位写入
way:先自己测试一下
4,★★★★「独占鳌头」Gigasang,10
5,★☆★☆★「风趣横生」Meychan,9

–看了jdk所有方法,不可以实现

  1. 分为四星五星两个txt,类还是一个–抽卡算法正常 ok

  2. 再考虑自定义:

1 先增加 一张 四星

问题1:随机数的自动生成

当前随机数 = 当前角色级别对应的角色个数
way1:去构造函数中,先判断级别类别,再每构造一次进行一次++
bug:因为Star为四星和五星等等构造函数,如果进行判断级别,有时候不按照有参数构造函数进行构造时,就无法++。

way2:还是分为两个Star类比较好(文件都分开了,写一个Star已经没有便利的地方了) ok
再通过构造函数,进行求全部角色个数,以此求随机数,再全部放入集合类中
bug:在构造函数中用sum统计角色总数,失败
在这里插入图片描述
在这里插入图片描述
way:设置为Main1类中的静态变量

问题2:修改为动态随机数后,抽卡算法果然出错了
在这里插入图片描述
IllegalArgumentException:抛出表示一种方法已经通过了非法或不正确的参数。

原因:numFour、numFive在一开始进入系统时都为0,所以作为参数非法,被抛出异常

way:想一种办法,让numFour等一直贯穿于系统开启与关闭的时期里。

way1:读取txt文本当前行总数为当前角色总数–ok

NumberFormatException:抛出以表示应用程序已尝试将字符串转换为其中一个数字类型,但该字符串不具有相应的格式。 --strArray[1]不知道为什么取不到数字,为空的

way:改为以空格进行分割,输出正确

  • 显示当前up的6星卡牌

核心:只能抽当期up6星卡(两个),需要修改算法

1 先自定义当期六星卡(显示当前所有六星卡的名称和编号,再由用户输入当期6星卡的编号,设定成功)
2 抽中区间不变,但是随机数区间变了(随机数范围为:角色数*概率倒数,此时角色数为2)

问题1:怎么只能在当期up角色里面抽
way:
1 文件读写,把up角色抽出,放在一个txt中
2 Star类中新增一个boolean变量

–先去实现文件读写,再考虑way2
来了来了

因为之前把所有算法都改为跟着txt内角色个数动态变化,所以何不如把starFour/starFive.txt当为up卡池

完成
在这里插入图片描述

查看所有角色图鉴
ok

删除up区角色
思路参考

先提取文件内容到集合中,在集合中删去查找到的数组内容,覆盖写入新集合到文件中

bug:写入test.txt的删除后对象好好的,一到本文件内的删除,就全部都被删除了。–原因:test的来源是另外一个文件,期间该文件内容始终不变很稳定,所以test抄入成功,而该文件对自己本身抄入,一旦抄入就被覆盖,不稳定,抄入失败。

way1:test文件抄入完成后,复制test内容到目标文件中
way2.先把数据抄入到一个集合中,集合建立完成后,再抄入到目标文件中
way3:难道是研究思路文章时少了啥,再去研究研究

先尝试way2 --还是test可以,本文件不可以。。

尝试way1:
ok

4.系统调试中问题

1 直接在一开始时输入回车报错StringIndexOutOfBoundsException
在这里插入图片描述
way:
在这里插入图片描述

2 抽数为0后,会变成负数 ok
在这里插入图片描述
直接在menu的一开始判断sum==0时,报错
–导致一开始还没设置时就进入这个判断
way:加一个boolean判断,是否为一开始没设置抽数时

3 当四星的随机数为10时 ok
在这里插入图片描述
因为索引 = 随机数 - 1,改:FourStar s = arrayFr.get(random_four-1);

  1. 在还有一个角色的情况下,写入两个,失败

在这里插入图片描述
在这里插入图片描述
原来是txt里面没有换行

原因:通过复制进行删除的方法,导致缺少一个换行符

–果然在write后面没加一句newLine()

  1. 抽卡算法又抽风了呵呵呵
    在这里插入图片描述
    再run一次又没事了。。。是不是有变量的生存期有问题

不知道是啥错了。。随便吧。。

  1. 超出动态随机数范围还没抽出

在这里插入图片描述

原因:随机数在写入卡片时就是错误的

在这里插入图片描述
改了addStar里面的reRandom函数,ok

5.总结


新知识

怎么打开任务管理器

  1. r+cmd
  2. 在终端输入taskmgr
  3. 进入成功

改进(进一步的设想)

  1. 作为javaGUI界面
  2. 算法设计问题: --想办法减小概率s
    平时抽数按随机数规律,满抽数就进入必中的随机数区间,导致eg一个十抽中更容易抽到两个四星

交给她们实现

1.注册登录

2.读文件-显示查找内容

暂时成功案例

Main1.java

package exp1;

import exp1.Star;

import java.io.*;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class Main1 {
    //剩余抽数
    static int sum = 0;
    //动态五星角色累计抽数
    static int dynSum_five = 0;
    //动态四星角色累计抽数
    static int dynSum_four = 0;
    //非酋判断的两个条件
    static boolean judge_five;
    static boolean judge_four;
    //判断抽数是否再次为0
    static boolean judge_start = false;
//    四星角色总数
    static int numFour = 0;
//    五星角色总数
    static int numFive = 0;

    public static void main(String[] args) throws Exception {
//        WriteFourStar();
//        WriteFiveStar();
        //先获取当前角色总数
        GetTxtLine();
        System.out.println("GetTxtLine外numFour:"+numFour);
        //1.引入菜单
        menu();
    }

//    获取当前txt内行数为当前角色总数
     public static void GetTxtLine() throws IOException {
         BufferedReader br1 = new BufferedReader(new FileReader("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFour.txt"));
         String line;
         while ((line = br1.readLine()) != null) {
             numFour++;
         }
         System.out.println("GetTxtLine内numFour:"+numFour);
         BufferedReader br2 = new BufferedReader(new FileReader("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFive.txt"));
//         String line;
         while ((line = br2.readLine()) != null) {
             numFive++;
         }
//         System.out.println("此五星角色总数为:"+numFive);
     }
    //# 文件读写
    public static void ClearFile(int grade) throws Exception{
        if(grade == 4){
            File f = new File ("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFour.txt");
            FileWriter fw = new FileWriter (f);
            fw.write("");
            fw.flush();
            fw.close();
        }
        if(grade == 5){
            File f = new File ("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFive.txt");
            FileWriter fw = new FileWriter (f);
            fw.write("");
            fw.flush();
            fw.close();
        }
    }
    public static void WriteFourStar() throws Exception {
        BufferedWriter bw1 = new BufferedWriter(new FileWriter("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFour.txt",true));
        //使用类对象加入
        ClearFile(4);
        //四星文件写入
        StarFour Fr1 = new StarFour("★★★★「老实巴交」Sousang",1);
        StarFour Fr2 = new StarFour("★★★★「韬光养晦」Nqrse",2);
        StarFour Fr3 = new StarFour("★★★★「淑人君子」Araki",3);
        StarFour Fr4 = new StarFour("★★★★「不骄不躁」Itsubakulo",4);
        StarFour Fr5 = new StarFour("★★★★「神清气朗」Gerosang",5);
        StarFour Fr6 = new StarFour("★★★★「神志不清」Nerusang",6);
        StarFour Fr7 = new StarFour("★★★★「履险如夷」Decosang",7);
        StarFour Fr8 = new StarFour("★★★★「温文尔雅」Harumakigohan",8);
        StarFour Fr9 = new StarFour("★★★★「娓娓而谈」Syudou",9);
        StarFour Fr10 = new StarFour("★★★★「独占鳌头」Gigasang",10);
        //将对象加入集合类中
        ArrayList<StarFour> arrayFr = new ArrayList<>();

        arrayFr.add(Fr1);
        arrayFr.add(Fr2);
        arrayFr.add(Fr3);
        arrayFr.add(Fr4);
        arrayFr.add(Fr5);
        arrayFr.add(Fr6);
        arrayFr.add(Fr7);
        arrayFr.add(Fr8);
        arrayFr.add(Fr9);
        arrayFr.add(Fr10);

//        bw.write("四星角色文件写入");
//        bw.newLine();
//    bw.flush();
        for (StarFour s : arrayFr){
            StringBuilder sb = new StringBuilder();
            sb.append(s.getName()).append(" ").append(s.getRnum());

            bw1.write(sb.toString());
            bw1.newLine();
//        bw.flush();
        }
        bw1.close();
    }
    public static void WriteFiveStar() throws Exception {
        BufferedWriter bw2 = new BufferedWriter(new FileWriter("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFive.txt",true));
        ClearFile(5);
        //五星文件写入
        StarFive Fv1 = new StarFive("★☆★☆★「睡眼惺忪」Soraru",1);
        StarFive Fv2 = new StarFive("★☆★☆★「神采奕奕」Amatsuki",2);
        StarFive Fv3 = new StarFive("★☆★☆★「笑里藏刀」Mafumafu",3);
        StarFive Fv4 = new StarFive("★☆★☆★「变幻莫测」96neko",4);
        StarFive Fv5 = new StarFive("★☆★☆★「超群出众」Ribsang",5);
        StarFive Fv6 = new StarFive("★☆★☆★「沉谋重虑」uratanuki",6);
        StarFive Fv7 = new StarFive("★☆★☆★「德才兼备」Evesang",7);
        StarFive Fv8 = new StarFive("★☆★☆★「心醇气和」Sakata",8);
        StarFive Fv9 = new StarFive("★☆★☆★「风趣横生」Meychan",9);
        //使用类对象加入
        //将对象加入集合类中
        ArrayList<StarFive> arrayFv = new ArrayList<>();
        arrayFv.add(Fv1);
        arrayFv.add(Fv2);
        arrayFv.add(Fv3);
        arrayFv.add(Fv4);
        arrayFv.add(Fv5);
        arrayFv.add(Fv6);
        arrayFv.add(Fv7);
        arrayFv.add(Fv8);
        arrayFv.add(Fv9);

        //将集合写入txt文件中
//        bw.write("五星角色文件写入");
//        bw.newLine();
//        bw.flush();
        for (StarFive s : arrayFv){
            StringBuilder sb = new StringBuilder();
            sb.append(s.getName()).append(" ").append(s.getRnum());

            bw2.write(sb.toString());
            bw2.newLine();
            bw2.flush();
        }
        bw2.close();
    }
    public static void ReadFile(int random,int grade) throws IOException {
        String line;
        if (grade == 5) {
            BufferedReader br1 = new BufferedReader(new FileReader("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFive.txt"));
            if (random < numFive+1){
                while ((line = br1.readLine())!=null){
                    String[] strArray = line.split(" ");
                    StarFive s = new StarFive();
                    s.setName(strArray[0]);

                    s.setRnum(Integer.parseInt(strArray[1]));
                        //2.按逻辑判断再输出
                        if (random == s.getRnum()) {
                            dynSum_five = 0;
                            judge_five = true;

                            //输出当前s对象下的name
                            System.out.println(s.getName());
                        }
                }
            }
            br1.close();
        }

        if (grade == 4) {
            BufferedReader br2 = new BufferedReader(new FileReader("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFour.txt"));
            if (random < numFour+1) {
                while ((line = br2.readLine()) != null) {
                    String[] strArray = line.split(" ");
                    StarFour s = new StarFour();
//                    System.out.println("strArray[0] = "+strArray[0]);
                    s.setName(strArray[0]);
//                    System.out.println("strArray[2] = "+strArray[1]);
                    s.setRnum(Integer.parseInt(strArray[1]));


//                    System.out.println(s.getName());//导致所有都输出
                     //2.按逻辑判断再输出
                        if (random == s.getRnum()) {
                            dynSum_four = 0;
                            judge_four = true;

                            //输出当前s对象下的name
                            System.out.println(s.getName());
                        }
                }
            }
            br2.close();
        }

    }

    //# 菜单
    public static void menu() throws IOException {
        while (true){

            System.out.println("-----------------------欢迎来到抽卡模拟系统----------------------");
            System.out.println("|    +.设置当前抽数               0.退出系统                   |");
            System.out.println("|    1.单抽                     2.十抽                       |");
            System.out.println("|    3.写入当期up卡片                                         |");
            System.out.println("|-----------------------------------------当前拥有抽数:"+sum+"|");


            System.out.println("|                    当期up五星角色:                         |");
            BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFive.txt"));
            String line;
            while ((line = br.readLine())!=null){
                String[] strArray = line.split(" ");
                System.out.print(" "+strArray[0]+"        ");
            }
            System.out.println();
            System.out.println("|                    当期up四星角色:                         |");
            BufferedReader br1 = new BufferedReader(new FileReader("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFour.txt"));
            String line1;
            int n = 0;
            while ((line1 = br1.readLine())!=null){
                n++;
                String[] strArray = line1.split(" ");
                System.out.print(" "+strArray[0]+"        ");
                if (n%2 == 0){
                    System.out.println();
                }
            }
//            System.out.println();
            System.out.println("------------------------------------------------------------");
            System.out.println();
            System.out.print("请输入您需要的操作:");

            Scanner scanner = new Scanner(System.in);
            String s = scanner.nextLine();
            System.out.println();
            //判断是输入的特殊情况
            if(s == null || "".equals(s)){
                System.out.println("输入内容不得为空!");
                menu();
            }
            if(s.length()!=1){
                System.out.println("输入非法!");
                menu();
            }

            char c = s.charAt(0);
            switch (c){
                case '+':
                    judge_start = true;
                    //@改进:选择是重新设置,还是增加减少
                    System.out.println("设置当前抽数为:");
                    sum = scanner.nextInt();
                    menu();
                    break;
                case '0':
                    System.out.println("期待您的下次使用~");
                    return;
                case '1':
                    sum --;
                    CheckSum(sum);
                    wish();
                    break;
                case '2':
                    sum -= 10;
                    CheckSum(sum);
                    for(int i = 0;i<11;i++){
                        wish();
                    }
                    break;
                case '3':
                    AddStar();
                    break;
                default:
                    System.out.println("请输入一个有效字符!");
                    break;
            }

        }

    }
    //sum在设置抽数后再次为0
    public static void CheckSum(int sum) throws IOException {
        if (sum<0){
            System.out.println("当前抽数小于0,请重新设置当前抽数!");
            menu();
        }
    }




    //# 功能
    // 用户自定义增加卡面
    public static void AddStar() throws IOException {
        System.out.println("|up卡面增加功能|");
        Scanner scanner = new Scanner(System.in);
        System.out.println("退出此功能请输入'out',否则输入'in':");
        String te = scanner.next();
        if (te.equals("out")){
            menu();
//            return false;
        }
        System.out.println("请输入新增卡面等级:");
        int grade = scanner.nextInt();
        System.out.println("请输入增加的卡面数量:");
        int num = scanner.nextInt();

        for(int i = 1;i<num+1;i++){
            //卡面的名称 ★★★★★「风趣横生」Meychan
            System.out.println("请输入第"+i+"卡面的名称:");
            String name = scanner.next();

            //卡面的随机数
            int r = reRandom(grade);

            StringBuilder sb = new StringBuilder();
            sb.append(name).append(" ").append(r);

            //写入文件中
            if (grade == 4){
                BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFour.txt",true));
                bw.write(sb.toString());
                bw.newLine();
                bw.flush();

                if (i == num){
                    bw.close();
                }
            }
            if (grade == 5){
                BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\路聃\\Desktop\\课程设计\\自己实现任务\\库\\starFive.txt",true));
                bw.write(sb.toString());
                bw.newLine();
                bw.flush();

                if (i == num){
                    bw.close();
                }
            }
        }
//        return true;
    }
    //返回当前随机数 --为当前角色个数
    public static int reRandom(int grade) throws IOException {
        if (grade == 4){
            //因为新的一行还没有写入,所以当前随机数为+1
            return numFour+1;
        }
        if (grade == 5){
            return numFive+1;
        }
        return 0;
    }


    // 祈愿抽卡wish
    public static void wish() throws IOException {
        judge_five = false;
        judge_four = false;

        GetStar();
        Lost();
        System.out.println();
    }

    //没抽中输出函数
    public static void Lost(){
        if(judge_five == false && judge_four == false){
            System.out.println("非酋");
        }
    }
    
    public static void GetStar() throws IOException {
        //# 四星判断
        dynSum_four ++;
        System.out.println("当前四星的动态总抽数 :"+dynSum_four);
        Random r4 = new Random();
        //随机数范围为:角色数*概率倒数
        int random_four = r4.nextInt(numFour*10)+1;
        //当抽数到达10,随机数在直接在抽中区间内取,保证必抽中
        if(dynSum_four == 10){
            random_four = r4.nextInt(numFour)+1;
        }
        System.out.println("当前四星的随机数为:"+random_four);
        ReadFile(random_four,4);


        //# 五星判断
        dynSum_five ++;
//	cout<<"当前五星的动态总抽数 :"<<dynSum_five<<endl;
        System.out.println("当前五星的动态总抽数 :"+dynSum_five);
        Random r5 =new Random();
        int random_five = r5.nextInt(numFive*90)+1;
        if(dynSum_five == 90){
            random_five = r5.nextInt(numFive)+1;
        }
//	cout<<"当前五星的随机数为:"<<random_five<<endl;
        System.out.println("当前五星的随机数为:"+random_five);
        //还需要读文件操作,实现输出
        ReadFile(random_five,5);



    }

}
/*
符号讲解:
@   可改进s


 */

Star.java

package exp1;

public class Star {
    int grade;
    String name;
    int Rnum;

    public Star(int grade, String name, int rnum) {
        this.grade = grade;
        this.name = name;
        Rnum = rnum;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

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

    public int getRnum() {
        return Rnum;
    }

    public void setRnum(int rnum) {
        Rnum = rnum;
    }
}

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

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

相关文章

数据权限就该这么设计

在项目实际开发中我们不光要控制一个用户能访问哪些资源&#xff0c;还需要控制用户只能访问资源中的某部分数据。 控制一个用户能访问哪些资源我们有很成熟的权限管理模型即RBAC&#xff0c;但是控制用户只能访问某部分资源&#xff08;即我们常说的数据权限&#xff09;使用…

[附源码]Python计算机毕业设计红旗家具城管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

✿✿✿JavaScript --- 事件

目录 1.事件相关概念 2. js中注册监听&#xff08;事件绑定&#xff09;的方式 (1)在定义标签时&#xff0c;添加事件名称属性。属性值是js代码&#xff08;js代码会被自动封装到一个function函数的方法体中&#xff09; (2)通过js获取元素对象&#xff0c;再添加事件。 补…

ADI Blackfin DSP处理器-BF533的开发详解54:CVBS输出-DSP和CH7024的应用详解(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 CVBS OUT 视频输出 硬件实现原理 CVBS_OUT 子卡板连接在 ADSP-EDU-BF53x 开发板的扩展端口 PORT3 和 PORT4 上&#xff0c;板卡插入时&#xff0…

window10 下Tomcat安装步骤

目录先安装JDK根据JDK选择tomcat版本下载安装设置系统变量运行测试先安装JDK 略过 根据JDK选择tomcat版本 打开CMD窗口&#xff0c;运行java -version查看本机JDK版本 C:\Users\admin>java -version java version "11.0.17" 2022-10-18 LTS Java(TM) SE Runtime E…

python函数讲解进阶

关于python函数的基本知识可以点击“python函数讲解” 目录 一.函数多返回值 思考 二.函数参数种类 1.位置参数 2.关键字参数 3.缺省参数 4.不定长参数 位置传递 关键字传递 总结 三.匿名函数 函数作为参数传递 lambda匿名函数 一.函数多返回值 思考 运行之后&…

Python抓取电商平台数据 / 采集商品评论 / 可视化展示 词云图...

前言 大家早好、午好、晚好吖 ❤ ~ 我给大家准备了一些资料&#xff0c;包括: 2022最新Python视频教程、Python电子书10个G &#xff08;涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题&#xff09;、Python学习路线图等等 直接在文末名片自取即可&#x…

[附源码]Node.js计算机毕业设计公交电子站牌管理系统软件Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

多模态在医疗中的应用

多模态是把要检索的模态融合起来&#xff0c;做整体的检索&#xff0c;查询和检索的必须至少有一个模态是相同的&#xff0c;也就是要查询和检索的模态都已经在融合模态里了。 跨模态是检索结果和查询的模态是不同&#xff0c;如图像检索文本&#xff0c;视频和音频。跨模态检索…

2022-12-17 TCP/IP 协议栈_2

TCP/IP 协议栈_2前言一、TCP/IP协议栈四层协议系统二、封装和分用总结前言 既然要学习计算机网络编程, 就不得不提计网祖师爷 W Richard Stevens, 天妒英才, 先生于1999年就早早陨落. 不知多少人凭着先生所著 “TCP/IP详解” 以及 “UNIX网络编程” 吃的盆满钵满. 而至今可说还…

深入浅出 - Rust 所有权与内存管理机制

一、从变量说起 fn main() {// 基本数据类型let a 5;let b a;// 指针let ptr_a &a;let ptr_b &b;println!("a value {}", a);println!("b value {}", b);println!("ptr_a value {:p}", ptr_a);println!("ptr_b value {:p}…

未来笔试重点(1)

一起成为更优秀的人 1.数组笔试重点考察 1.1整型数组与sizeof 1.2字符数组与sizeof 1.3sizeof与字符串 1.4strlen与字符串 2.指针笔试重点考察 2.1指针与sizeof 2.2指针与strlen sizeof与整型数组 int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf(…

NMS与Soft NMS算法解析以及numpy实现

1. NMS算法 1.1 什么是NMS算法 NMS全称为Non Maximum Suppression&#xff0c;中文意思是非极大值抑制&#xff0c;字面意思就是不是极大值的元素被抑制掉&#xff0c;其实就是筛选出局部最大值得到最优解。NMS算法被广泛运用于目标检测算法处理网络输出的边界框。 1.2 为什…

浅谈Linux内核页面换入换出

【推荐阅读】 浅谈linux 内核网络 sk_buff 之克隆与复制 深入linux内核架构--进程&线程 了解Docker 依赖的linux内核技术 怎么在Windows下使用Makefile文件 浅析linux内核网络协议栈--linux bridge 0x00内存页面分类与换入换出规则 内存页面分为用户页面和内核页面。…

GDT践行(第一期):起床---运动--阅读

这里记录每周GDT践行记录.【2022】年第【51】周的第【6】天 封面图 第三部分&#xff1a;起床---运动--阅读 ❝ 小贴士&#xff1a; 在学校&#xff0c;出租房&#xff0c;宾馆&#xff0c;工位很多因素导致 学习区&#xff0c;运动区 卧室 都是同一个地方 环境导致你彻底彻底糊…

[附源码]Python计算机毕业设计Django课程在线测评系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

JVM部分知识点

目录 JVM主要组成部分及其作用&#xff1f; JAVA程序运行机制详情 JVM运行时的数据区 堆和栈的区别&#xff1f; Java垃圾回收机制 Java中有哪些引用类型&#xff1f; 如何判断对象是否可以被回收&#xff1f; JVM中的永久代会发生垃圾回收吗&#xff1f; JVM有哪些垃圾…

我国航空煤油行业发展趋势:燃油附加费复收 或将缓解企业经营压力

根据观研报告网发布的《中国航空煤油市场现状深度研究与投资前景分析报告&#xff08;2022-2029年&#xff09;》显示&#xff0c;航空煤油是石油产品之一&#xff0c;别名无臭煤油&#xff0c;主要由不同馏分的烃类化合物组成。航空煤油密度适宜&#xff0c;热值高&#xff0c…

【C语言】浮点型的存储方式

目录 一、浮点型和整型存储方式一样吗&#xff1f; 二、浮点型的存储规则 2.1 S&#xff0c;M&#xff0c;E求法 2.2 如何存放&#xff33;&#xff0c;&#xff2d;&#xff0c;&#xff25; 2.2.1 IEEE 754规定 2.2.2 特别的规定 2.2.3 验证 2.3 取出规则 2.3…

改造冰蝎马,实现免杀之default_aes php

本专栏是笔者的网络安全学习笔记&#xff0c;一面分享&#xff0c;同时作为笔记 文章目录 文章目录文章目录前文链接前言效果目标密码验证功能免杀后话前文链接 WAMP/DVWA/sqli-labs 搭建burpsuite工具抓包及Intruder暴力破解的使用目录扫描&#xff0c;请求重发&#xff0c;漏…