第三次博客作業

来源:https://www.cnblogs.com/cherry-cream/archive/2023/12/05/17878175.html
-Advertisement-
Play Games

前言 這是第三次博客作業,總結了近三次PTA大作業的完成情況,作業7、8次的大作業的小題目圍繞著HashMap、ArrayList和自定義介面來展開,大題目則是課程成績程式的第二次第三次迭代,因為第一次課程成績的程式寫的結構不太好,於是重新寫的,第三次迭代並沒有拿到滿分,後面也沒有時間改了。期末考試 ...


前言

這是第三次博客作業,總結了近三次PTA大作業的完成情況,作業7、8次的大作業的小題目圍繞著HashMap、ArrayList和自定義介面來展開,大題目則是課程成績程式的第二次第三次迭代,因為第一次課程成績的程式寫的結構不太好,於是重新寫的,第三次迭代並沒有拿到滿分,後面也沒有時間改了。期末考試則是由29個選擇題和四個編程題組成。

關於類和整個程式的設計:

類是面向對象編程中的核心概念,通過類可以定義一組數據和與之相關的操作。在設計程式時,通常需要先考慮需要哪些對象和它們的屬性和行為,然後將這些信息組織成類的結構。在類的設計中,需要考慮類的名稱、屬性、方法、訪問許可權等方面。

除了類的設計,程式的整體設計也非常重要。程式的整體設計涉及到程式的架構、模塊劃分、代碼組織方式、代碼風格等方面。程式的整體設計需要遵循一些基本原則,如低耦合、高內聚、模塊化等,以確保程式的可維護性、擴展性和可重用性。

在設計程式時,還需要考慮程式的性能、安全性、可靠性等方面。這些方面的考慮需要在程式開發的不同階段進行,例如在編碼階段需要考慮程式的性能優化,而在測試階段需要考慮程式的安全性和可靠性。

三次題目集的知識點、題量、難度等情況:

(對於重難點題目將會給出完整題目)

第七次大作業:

容器-HashMap:

HashMap是Java中常用的容器類之一,它實現了Map介面,用於存儲鍵值對。下麵是HashMap的用法:

  1. 創建HashMap對象:

    HashMap<Key類型, Value類型> hashMap = new HashMap<>();
    
  2. 添加元素:

    hashMap.put(key, value);
    
  3. 獲取元素:

    Value value = hashMap.get(key);
    
  4. 刪除元素:

    hashMap.remove(key);
    
  5. 判斷鍵是否存在:

    boolean containsKey = hashMap.containsKey(key);
    
  6. 判斷值是否存在:

    boolean containsValue = hashMap.containsValue(value);
    
  7. 獲取HashMap的大小:

    int size = hashMap.size();
    
  8. 遍歷HashMap:

    // 遍歷鍵
    for (Key key : hashMap.keySet()) {
        // 根據鍵獲取值
        Value value = hashMap.get(key);
        // 處理值
    }
    
    // 遍歷值
    for (Value value : hashMap.values()) {
        // 處理值
    }
    
    // 遍歷鍵值對
    for (Map.Entry<Key, Value> entry : hashMap.entrySet()) {
        Key key = entry.getKey();
        Value value = entry.getValue();
        // 處理鍵值對
    }
    

需要註意的是,HashMap中的鍵是唯一的,如果重覆添加相同的鍵,後面的值會替代前面的值;值可以重覆。此外,HashMap是無序的,元素的順序不保證一致。

除了基本的用法,還可以使用其他方法和構造函數來滿足不同的需求,例如通過構造函數指定初始容量和負載因數,使用putAll()方法將另一個Map中的元素添加到當前HashMap中,使用isEmpty()方法判斷HashMap是否為空等。

7-3 課程成績統計程式-2

課程成績統計程式-2在第一次的基礎上增加了實驗課,以下加粗字體顯示為本次新增的內容。

某高校課程從性質上分為:必修課、選修課、實驗課,從考核方式上分為:考試、考察、實驗。

考試的總成績由平時成績、期末成績分別乘以權重值得出,比如平時成績權重0.3,期末成績權重0.7,總成績=平時成績*0.3+期末成績*0.7。

考察的總成績直接等於期末成績

實驗的總成績等於課程每次實驗成績的平均分

必修課的考核方式必須為考試,選修課可以選擇考試、考察任一考核方式。實驗課的成績必須為實驗。

1、輸入:

包括課程、課程成績兩類信息。

課程信息包括:課程名稱、課程性質、考核方式(可選,如果性質是必修課,考核方式可以沒有)三個數據項。

課程信息格式:課程名稱+英文空格+課程性質+英文空格+考核方式

課程性質輸入項:必修、選修、實驗

考核方式輸入選項:考試、考察、實驗

考試/考查課程成績信息包括:學號、姓名、課程名稱、平時成績(可選)、期末成績

考試/考查課程信息格式:學號+英文空格+姓名+英文空格+課程名稱+英文空格+平時成績+英文空格+期末成績

實驗課程成績信息包括:學號、姓名、課程名稱、實驗次數、每次成績

實驗次數至少4次,不超過9次

實驗課程信息格式:學號+英文空格+姓名+英文空格+課程名稱+英文空格+實驗次數+英文空格+第一次實驗成績+...+英文空格+最後一次實驗成績

以上信息的相關約束:

1)平時成績和期末成績的權重預設為0.3、0.7

2)成績是整數,不包含小數部分,成績的取值範圍是【0,100】

3)學號由8位數字組成

4)姓名不超過10個字元

5)課程名稱不超過10個字元

6)不特別輸入班級信息,班級號是學號的前6位。

2、輸出:

輸出包含三個部分,包括學生所有課程總成績的平均分、單門課程成績平均分、單門課程總成績平均分、班級所有課程總成績平均分。

為避免誤差,平均分的計算方法為累加所有符合條件的單個成績,最後除以總數。

1)學生課程總成績平均分按學號由低到高排序輸出

格式:學號+英文空格+姓名+英文空格+總成績平均分

如果某個學生沒有任何成績信息,輸出:學號+英文空格+姓名+英文空格+"did not take any exams"

2)單門課程成績平均分分為三個分值:平時成績平均分(可選)、期末考試平均分、總成績平均分,按課程名稱的字元順序輸出

考試/考察課程成績格式:課程名稱+英文空格+平時成績平均分+英文空格+期末考試平均分+英文空格+總成績平均分

實驗課成績格式:課程名稱+英文空格+總成績平均分

如果某門課程沒有任何成績信息,輸出:課程名稱+英文空格+"has no grades yet"

3)班級所有課程總成績平均分按班級由低到高排序輸出

格式:班級號+英文空格+總成績平均分

如果某個班級沒有任何成績信息,輸出:班級名稱+英文空格+ "has no grades yet"

異常情況:

1)如果解析某個成績信息時,課程名稱不在已輸入的課程列表中,輸出:學號+英文空格+姓名+英文空格+":"+課程名稱+英文空格+"does not exist"

2)如果解析某個成績信息時,輸入的成績數量和課程的考核方式不匹配,輸出:學號+英文空格+姓名+英文空格+": access mode mismatch"

以上兩種情況如果同時出現,按第一種情況輸出結果。

3)如果解析某個課程信息時,輸入的課程性質和課程的考核方式不匹配,輸出:課程名稱+" : course type & access mode mismatch"

4)格式錯誤以及其他信息異常如成績超出範圍等,均按格式錯誤處理,輸出"wrong format"

5)若出現重覆的課程/成績信息,只保留第一個課程信息,忽略後面輸入的。

信息約束:

1)成績平均分只取整數部分,小數部分丟棄

參考類圖(與第一次相同,其餘內容自行補充):

 

第八次大作業:

容器-ArrayList:

ArrayList是Java中常用的動態數組類,它實現了List介面,用於存儲一組有序的元素。下麵是ArrayList的用法:

  1. 創建ArrayList對象:

    ArrayList<ElementType> arrayList = new ArrayList<>();
    
  2. 添加元素:

    arrayList.add(element);
    

    元素將會被添加到ArrayList的尾部。

  3. 獲取元素:

    ElementType element = arrayList.get(index);
    

    使用索引位置來獲取ArrayList中指定位置的元素,索引從0開始。

  4. 修改元素:

    arrayList.set(index, newElement);
    

    使用索引位置來替換ArrayList中指定位置的元素。

  5. 刪除元素:

    arrayList.remove(index);
    

    使用索引位置來刪除ArrayList中指定位置的元素。

  6. 判斷元素是否存在:

    boolean containsElement = arrayList.contains(element);
    

    使用contains()方法來判斷ArrayList中是否包含指定元素。

  7. 獲取ArrayList的大小:

    int size = arrayList.size();
    

    使用size()方法來獲取ArrayList的大小。

  8. 遍歷ArrayList:

    for (ElementType element : arrayList) {
        // 處理元素
    }
    

需要註意的是,ArrayList可以存儲任意類型的元素,包括基本類型的包裝類和自定義類型。ArrayList的容量會根據需要進行自動擴容,以適應元素的添加。

除了上述基本用法,ArrayList還提供了許多其他方法,如addAll()方法可以將另一個集合中的元素添加到當前ArrayList中,使用isEmpty()方法判斷ArrayList是否為空,使用clear()方法清空ArrayList中的所有元素等。

7-2 課程成績統計程式-3

課程成績統計程式-3在第二次的基礎上修改了計算總成績的方式,

要求:修改類結構,將成績類的繼承關係改為組合關係,成績信息由課程成績類和分項成績類組成,課程成績類組合分項成績類,分項成績類由成績分值和權重兩個屬性構成。

完成課程成績統計程式-2、3兩次程式後,比較繼承和組合關係的區別。思考一下哪一種關係運用上更靈活,更能夠適應變更。

題目最後的參考類圖未做修改,大家根據要求自行調整,以下內容加粗字體顯示的內容為本次新增的內容。

某高校課程從性質上分為:必修課、選修課、實驗課,從考核方式上分為:考試、考察、實驗。

考試的總成績由平時成績、期末成績分別乘以權重值得出,比如平時成績權重0.3,期末成績權重0.7,總成績=平時成績*0.3+期末成績*0.7。

考察的總成績直接等於期末成績

實驗的總成績等於課程每次實驗成績乘以權重後累加而得。

課程權重值在錄入課程信息時輸入。(註意:所有分項成績的權重之和應當等於1)

必修課的考核方式必須為考試,選修課可以選擇考試、考察任一考核方式。實驗課的成績必須為實驗。

1、輸入:

包括課程、課程成績兩類信息。

課程信息包括:課程名稱、課程性質、考核方式、分項成績數量、每個分項成績的權重。

考試課信息格式:課程名稱+英文空格+課程性質+英文空格+考核方式+英文空格+平時成績的權重+英文空格+期末成績的權重

考察課信息格式:課程名稱+英文空格+課程性質+英文空格+考核方式

實驗課程信息格式:課程名稱+英文空格+課程性質+英文空格+考核方式+英文空格+分項成績數量n+英文空格+分項成績1的權重+英文空格+。。。+英文空格+分項成績n的權重

實驗次數至少4次,不超過9次

課程性質輸入項:必修、選修、實驗

考核方式輸入選項:考試、考察、實驗

考試/考查課程成績信息包括:學號、姓名、課程名稱、平時成績(可選)、期末成績

考試/考查課程成績信息格式:學號+英文空格+姓名+英文空格+課程名稱+英文空格+平時成績+英文空格+期末成績

實驗課程成績信息包括:學號、姓名、課程名稱、每次成績{在系列-2的基礎上去掉了(實驗次數),實驗次數要和實驗課程信息中輸入的分項成績數量保持一致}

實驗課程信息格式:學號+英文空格+姓名+英文空格+課程名稱+英文空格+第一次實驗成績+...+英文空格+最後一次實驗成績

以上信息的相關約束:

1)成績是整數,不包含小數部分,成績的取值範圍是【0,100】

2)學號由8位數字組成

3)姓名不超過10個字元

4)課程名稱不超過10個字元

5)不特別輸入班級信息,班級號是學號的前6位。

2、輸出:

輸出包含三個部分,包括學生所有課程總成績的平均分、單門課程總成績平均分、班級所有課程總成績平均分。

為避免四捨五入誤差,

計算單個成績時,分項成績乘以權重後要保留小數位,計算總成績時,累加所有分項成績的權重分以後,再去掉小數位。

學生總成績/整個班/課程平均分的計算方法為累加所有符合條件的單個成績,最後除以總數。

1)學生課程總成績平均分按學號由低到高排序輸出

格式:學號+英文空格+姓名+英文空格+總成績平均分

如果某個學生沒有任何成績信息,輸出:學號+英文空格+姓名+英文空格+"did not take any exams"

2)單門課程成績按課程名稱的字元順序輸出

課程成績輸出格式:課程名稱+英文空格+總成績平均分

如果某門課程沒有任何成績信息,輸出:課程名稱+英文空格+"has no grades yet"

3)班級所有課程總成績平均分按班級由低到高排序輸出

格式:班級號+英文空格+總成績平均分

如果某個班級沒有任何成績信息,輸出:班級名稱+英文空格+ "has no grades yet"

異常情況:

1)如果解析某個成績信息時,課程名稱不在已輸入的課程列表中,輸出:學號+英文空格+姓名+英文空格+":"+課程名稱+英文空格+"does not exist"

2)如果解析某個成績信息時,輸入的成績數量和課程的考核方式不匹配,輸出:學號+英文空格+姓名+英文空格+": access mode mismatch"

以上兩種情況如果同時出現,按第一種情況輸出結果。

3)如果解析某個課程信息時,輸入的課程性質和課程的考核方式不匹配,輸出:課程名稱+" : course type & access mode mismatch"

4)格式錯誤以及其他信息異常如成績超出範圍等,均按格式錯誤處理,輸出"wrong format"

5)若出現重覆的課程/成績信息,只保留第一個課程信息,忽略後面輸入的。

6)如果解析實驗課程信息時,輸入的分項成績數量值和分項成績權重的個數不匹配,輸出:課程名稱+" : number of scores does not match"

7)如果解析考試課、實驗課時,分項成績權重值的總和不等於1,輸出:課程名稱+" : weight value error"

信息約束:

1)成績平均分只取整數部分,小數部分丟棄

期末考試:

(這裡只分析編程題)

前三題均為關於正方形、正三棱錐及其魔方的迭代問題:

在魔方問題的基礎上,

重構類設計,實現列表內魔方的排序功能(按照魔方的體積進行排序)。

提示:題目中RubikCube類要實現Comparable介面。

其中,Main類源碼如下(可直接拷貝使用):

 
public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);
        
        String color;
        int layer;
        double side;
        RubikCube cube;
        
        ArrayList<RubikCube> list = new ArrayList<>();
        
        int choice = input.nextInt();
        
        while(choice != 0) {
            switch(choice) {
            case 1://SquareCube
                color = input.next();
                layer = input.nextInt();
                side = input.nextDouble();
                cube = new SquareCube(color, layer,new Cube(side)); 
                list.add(cube);
                break;
            case 2://RegularPyramidCube
                color = input.next();
                layer = input.nextInt();
                side = input.nextDouble();
                cube = new RegularPyramidCube(color, layer,new RegularPyramid(side)); 
                list.add(cube);
                break;
            }
            choice = input.nextInt();
        }
        
        list.sort(Comparator.naturalOrder());//正向排序
        
        for(int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i).getColor() + " " + 
        String.format("%.2f", list.get(i).getArea()) + " " + 
        String.format("%.2f", list.get(i).getVolume()) );
            System.out.println("");
        }            
    }    
}

輸入格式:

輸入魔方類型(1:正方體魔方;2:正三棱錐魔方;0:結束輸入)

魔方顏色、魔方階數、魔方單元正方體、正三棱錐邊長

..迴圈..

輸出格式:

按魔方體積升序輸出列表中各魔方的信息(實型數均保留兩位小數),輸出樣式參見輸出樣例。

輸入樣例:

在這裡給出一組輸入。例如:

1 blue 3 4.5
2 red 4 2.1
1 yellow 5 2.3
2 black 4 9.42
1 white 4 5.4423
0

輸出樣例:

在這裡給出相應的輸出。例如:

red 122.21 69.85
yellow 793.50 1520.88
blue 1093.50 2460.38
black 2459.14 6304.73
white 2843.39 10316.38

7-4 銷售步槍問題(附加題)

前亞利桑那州境內的一位步槍銷售商銷售密蘇里州製造的步槍機(lock)、槍托(stock)和槍管(barrel)。槍機賣45美元,槍托賣30美元,槍管賣25美元。銷售商每月至少要售出一支完整的步槍,且生產限額是銷售商在一個月內可銷售70個槍機、80個槍托和90個槍管。

根據每個月的銷售情況,計算銷售商的佣金(提成)演算法如下:

  • 不到(含)1000美元的部分為10%;

  • 1000(含)~1800美元的部分為15%;

  • 超過1800美元的部分為20%。

佣金程式生成月份銷售報告,彙總銷售商的銷售總額和佣金。

編程要求:必須符合面向對象編程,且保證類設計的單一職責模式,使用面向過程編程判定0分。

提示:可以設置一個銷售訂單類。參考類圖如下:

輸入格式:輸入銷售商每個月售出槍機、槍托、槍管的數量,可以用空格或者回車分隔。

輸出格式:分別輸出銷售商在該月的銷售額和佣金,中間用空格分開。

輸入樣例1:

在這裡給出一組輸入。例如:30 40 50

輸出樣例1:

在這裡給出相應的輸出。例如:3800.00 620.00

輸入樣例2:
在這裡給出一組輸入。例如:88 56 98

輸出樣例2:
在這裡給出相應的輸出。例如:Wrong Format

設計與分析與主要問題和其解決方法

(這裡只會提供重點題目的代碼)

第七次大作業:

課程成績2:

  1 import java.io.BufferedReader;
  2 import java.io.IOException;
  3 import java.io.InputStreamReader;
  4 import java.text.Collator;
  5 import java.util.*;
  6 import java.util.Comparator;
  7 import java.util.Locale;
  8 import java.util.regex.PatternSyntaxException;
  9 import java.util.stream.Collectors;
 10 import java.util.stream.IntStream;
 11 import java.util.List;
 12 import java.util.ArrayList;
 13 
 14 
 15 public class Main {
 16     public static void main(String[] args) {
 17     try (BufferedReader in = new BufferedReader(new InputStreamReader(System.in))) {
 18         MessageGetAndPrint messageGetAndPrint = new MessageGetAndPrint();
 19         messageGetAndPrint.print = new Print();
 20         
 21         in.lines().takeWhile(line -> !line.equals("end")).forEach(messageGetAndPrint::getMessage);
 22         
 23         messageGetAndPrint.print.personPrint(messageGetAndPrint.students, messageGetAndPrint.courseSelections);
 24         messageGetAndPrint.print.coursePrint(messageGetAndPrint.courses, messageGetAndPrint.courseSelections);
 25         messageGetAndPrint.print.classPrint(messageGetAndPrint.classes, messageGetAndPrint.courseSelections);
 26     } catch (IOException e) {
 27         e.printStackTrace();
 28     }
 29 }
 30 }
 31 class Class {
 32     private String classNum;
 33     HashMap<String , Student> students;
 34     Class(String classNum) {
 35         setClassNum(classNum);
 36     }
 37     public void setClassNum(String classNum) {
 38         this.classNum = classNum;
 39     }
 40     public String getClassNum() {
 41         return classNum;
 42     }
 43     public void addStudent(Student student) {
 44         students.put(student.getStudentNum() , student);
 45     }
 46 }
 47 class Student {
 48     private String name;
 49     private String studentNum;
 50     Student(String name , String studentNum) {
 51         setName(name);
 52         setStudentNum(studentNum);
 53     }
 54     public String getName() {
 55         return name;
 56     }
 57     public void setName(String name) {
 58         this.name = name;
 59     }
 60     public String getStudentNum() {
 61         return studentNum;
 62     }
 63     public void setStudentNum(String studentNum) {
 64         this.studentNum = studentNum;
 65     }
 66 }
 67 class Course {
 68     private String className;
 69     private int classQuality;
 70     private int assessmentMethodology;
 71     Course(String className , int classQuality , int assessmentMethodology) {
 72         setClassName(className);
 73         setClassQuality(classQuality);
 74         setAssessmentMethodology(assessmentMethodology);
 75     }
 76     public String getClassName() {
 77         return className;
 78     }
 79     public void setClassName(String className) {
 80         this.className = className;
 81     }
 82     public int getClassQuality() {
 83         return classQuality;
 84     }
 85     public void setClassQuality(int classQuality) {
 86         this.classQuality = classQuality;
 87     }
 88     public int getAssessmentMethodology() {
 89         return assessmentMethodology;
 90     }
 91     public void setAssessmentMethodology(int assessmentMethodology) {
 92         this.assessmentMethodology = assessmentMethodology;
 93     }
 94 }
 95 class CourseSelection {
 96     Student student;
 97     Course course;
 98     Grade grade;
 99 }
100 abstract class Grade {
101     int allGrade;
102     abstract void getAllGrade();
103 }
104 class GradeA extends Grade {//考試
105     private int finalGrade;
106     private int usualGrade;
107     GradeA(int finalGrade , int usualGrade) {
108         setFinalGrade(finalGrade);
109         setUsualGrade(usualGrade);
110     }
111     public void setFinalGrade(int finalGrade) {
112         this.finalGrade = finalGrade;
113     }
114     public int getFinalGrade() {
115         return finalGrade;
116     }
117     public void setUsualGrade(int usualGrade) {
118         this.usualGrade = usualGrade;
119     }
120     public int getUsualGrade() {
121         return usualGrade;
122     }
123     @Override
124     void getAllGrade() {
125         allGrade = (int) (finalGrade*0.7+usualGrade*0.3);
126     }
127 }
128 class GradeB extends Grade {//考察
129     private int finalGrade;
130     GradeB(int finalGrade) {
131         setFinalGrade(finalGrade);
132     }
133     public void setFinalGrade(int finalGrade) {
134         this.finalGrade = finalGrade;
135     }
136     public int getFinalGrade() {
137         return finalGrade;
138     }
139     @Override
140     void getAllGrade() {
141         allGrade = finalGrade;
142     }
143 }
144 class GradeC extends Grade {//實驗
145     ArrayList<Integer> usualGrades;
146     GradeC(ArrayList<Integer> usualGrades) {
147         this.usualGrades = usualGrades;
148     }
149     @Override
150     void getAllGrade() {
151         allGrade = 0;
152         for(int x:usualGrades){
153             allGrade+=x;
154         }
155         allGrade = allGrade/usualGrades.size();
156     }
157 }
158 class Print {
159     public void personPrint(HashMap<String , Student> students, ArrayList<CourseSelection> courseSelections) {
160         students.keySet().stream()
161                 .sorted()
162                 .forEach(key -> {
163                     Student student = students.get(key); // 獲取當前學生信息
164                     int[] gradeData = courseSelections.stream()
165                             .filter(cs -> cs.student.getStudentNum().equals(student.getStudentNum()))
166                             .mapToInt(cs -> {
167                                 cs.grade.getAllGrade(); // 更新成績狀態
168                                 return cs.grade.allGrade; // 提取當前的總成績
169                             })
170                             .toArray();
171                     if (gradeData.length == 0) { // 沒有成績數據
172                         System.out.println(student.getStudentNum() + " " + student.getName() + " did not take any exams");
173                     } else {
174                         // 計算平均分並列印
175                         int averageGrade = Arrays.stream(gradeData).sum() / gradeData.length;
176                         System.out.println(student.getStudentNum() + " " + student.getName() + " " + averageGrade);
177                     }
178                 });
179     }
180     public void coursePrint(HashMap<String, Course> courses, ArrayList<CourseSelection> courseSelections) {
181         courses.keySet().stream()
182                 .sorted(new SoftName())
183                 .forEach(key -> {
184                     Course course = courses.get(key);
185                     // 根據課程篩選相關的選課記錄
186                     List<CourseSelection> selected = new ArrayList<>();
187 for (CourseSelection cs : courseSelections) {
188     if (cs.course.getClassName().equals(course.getClassName())) {
189         selected.add(cs);
190     }
191 }
192 
193                     if (selected.isEmpty()) {
194                         System.out.println(course.getClassName() + " has no grades yet"<

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 單體架構下鎖的實現方案 1. ReentrantLock全局鎖 ReentrantLock(可重入鎖),指的是一個線程再次對已持有的鎖保護的臨界資源時,重入請求將會成功。 簡單的與我們常用的Synchronized進行比較: ReentrantLock Synchronized 鎖實現機制 依賴AQ ...
  • 如今,大規模、高時效、智能化數據處理已是“剛需”,企業需要更強大的數據平臺,來應對數據查詢、數據處理、數據挖掘、數據展示以及多種計算模型並行的挑戰,湖倉一體方案應運而生。 《實時湖倉實踐五講》是袋鼠雲打造的系列直播活動,將圍繞實時湖倉的建設趨勢和通用問題,邀請奮戰於企業數字化一線的核心產品&技術專家 ...
  • 隨著業務飛速發展,某汽車製造企業業務系統數量、複雜度和數據量都在呈幾何級數的上漲,這就對於企業IT能力和IT架構模式的要求越來越高。加之企業大力發展數字化營銷、新能源車等業務,希望通過持續優化客戶體驗,創造可持續發展的數字化轉型之路。 為更好應對數字化變革所帶來的挑戰,現有的豎井架構的數據體系難以滿 ...
  • 大家好,我是獨孤風,從本周開始,爭取每周為大家帶來一個優秀的開源項目推薦。 開源項目不僅促進了技術的發展和普及,還為全球範圍內的開發者和用戶社區建立了一個共用知識、協作和創新的平臺。站在巨人的肩膀上才能看的更遠,我們平時也應該多多關註開源項目,不僅學習其豐富的知識,也要找機會為開源事業做出自己的貢獻 ...
  • 蘋果在 iPhone 14 Pro 及 iPhone 14 Pro MAX 上推出了靈動島,是一次交互玩法的革新。本文從靈動島的展現形式、場景限制、適配情況和遠程通知更新數據幾個方面全面帶你走進靈動島 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 背景 最近心血來潮,想要在本地開發時,也用CDN的方式引入 Vue,想著既然通過CDN引入了,那麼在項目中就沒必要再 import Vue,然後把項目中引入 Vue 的地方都刪掉,結果改完後,界面看似正常運行,但數據變更後,界面沒有重新渲 ...
  • 項目代碼同步至碼雲 weiz-vue3-template pina 是 vue3 官方推薦的狀態管理庫,由 Vue 核心團隊維護,旨在替代 vuex。pina 的更多介紹,可從 pina官網 查看 特點 更簡潔直接的 API,提供組合式風格的 API 支持模塊熱更新和服務端渲染 對TS支持更為友好 ...
  • 一、CSS簡介 CSS:層疊樣式表(英文全稱:Cascading Style Sheets):是一種用來表現HTML樣式的電腦語言。CSS不僅可以靜態地修飾網頁,還可以配合各種腳本語言動態地對網頁各元素進行格式化。 二、CSS選擇器 2.1基本選擇器(三種) 1.標簽選擇器 <style> p { ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...