【數據結構實踐課設】新生報道注冊管理信息系統

目錄

1.主要框架

2.寫入文件

3.讀取文件

4.注冊學生信息

5.增加學生信息

6.刪除學生信息

7.按姓名查詢

8.按班級查詢

9.按專業查詢

10.打印學生信息

11.完整代碼


🌈嗨!我是Filotimo__🌈。很高興與大家相識,希望我的博客能對你有所幫助。

💡本文由Filotimo__??原創,首發于CSDN📚。

📣如需轉載,請事先與我聯系以獲得授權??。

🎁歡迎大家給我點贊👍、收藏??,并在留言區📝與我互動,這些都是我前進的動力!

🌟我的格言:森林草木都有自己認為對的角度🌟。

完整代碼在最后面。

這次我們的目標是用C語言實現新生報道注冊管理信息系統。

這是我們要用到 C 語言中的三個頭文件,分別是:

#include <stdio.h>:它包含了一些輸入輸出的函數,例如printf()和scanf()。

#include <stdlib.h>:它包含了實用的函數,例如動態內存分配函數malloc() 和free()。

#include <string.h>:它包含了一些操作字符串的函數,例如strcpy() 和strcat()。

1.主要框架

我們首先定義了一個表示學生的結構體,然后聲明了要用到的函數,接著編寫主函數,搭建好了大致的系統框架:

// 定義一個表示學生的結構體
struct student {char nam[10];       // 學生姓名char sex[4];        // 學生性別char spec[20];      // 學生專業char classid[10];   // 學生班級IDchar phone[15];     // 學生電話號碼char bedroom[8];    // 學生宿舍號碼
};// 函數聲明
void createdata(struct student *stu, int *len);        // 注冊學生信息
void add(struct student *stu, int *len);               // 增加學生信息
void delete_student(struct student *stu, int *len);    // 刪除學生信息
void search_name(struct student *stu, int len);        // 按姓名查詢
void search_class(struct student *stu, int len);       // 按班級查詢
void search_specialty(struct student *stu, int len);   // 按專業查詢
void print_fun(struct student *stu, int len);          // 打印學生信息// 主函數
int main() {int choice;struct student p[1024];int len = 0;while (1) {printf("\n                         新生報到信息注冊系統\n\n");printf("**********************************************************************\n");printf("1. 注冊學生信息\n");printf("2. 增加學生信息\n");printf("3. 刪除學生信息\n");printf("4. 按姓名查詢\n");printf("5. 按班級查詢\n");printf("6. 按專業查詢\n");printf("7. 打印學生信息\n");printf("8. 退出系統\n");printf("**********************************************************************\n");printf("請輸入選項:");scanf("%d", &choice);switch (choice) {case 1: // 注冊學生信息createdata(p, &len);break;case 2: // 增加學生信息add(p, &len);break;case 3: // 刪除學生信息delete_student(p, &len);break;case 4: // 按姓名查詢search_name(p, len);break;case 5: // 按班級查詢search_class(p, len);break;case 6: // 按專業查詢search_specialty(p, len);break;case 7: // 打印學生信息print_fun(p, len);break;case 8: // 退出系統printf("謝謝您的使用!\n\n");exit(0); // 退出程序default:printf("輸入有誤!請重新輸入。\n\n");break;}}return 0;
}

接下來,我們要編寫前面聲明了的函數。

2.寫入文件

// 定義一個名為regis的函數
// 參數為一個指向struct student類型的指針p和一個整型變量len
void regis(struct student *p, int len) {// 定義一個FILE類型的指針,用于打開/關閉文件FILE *fp;// 打開名為student_info.txt的文件,使用寫入模式打開,即將內容寫入到文件尾部fp = fopen("student_info.txt", "w");// 循環遍歷學生信息數組for (int i = 0; i < len; i++) {// 將學生信息按指定格式寫入到文件中fprintf(fp, "%s %s %s %s %s %s\n", p[i].nam, p[i].sex, p[i].spec, p[i].classid, p[i].phone, p[i].bedroom);}// 關閉文件fclose(fp);
}

函數regis用于將結構體數組中的數據寫入到文件中。它首先使用fopen函數打開一個名為"student_info.txt"的文件,并指定模式為"w",表示以寫入方式打開文件。然后,使用fprintf函數將結構體數組中的數據按照指定的格式寫入文件。最后,使用fclose函數關閉文件。

3.讀取文件

// 定義一個名為read_data的函數
// 參數為一個指向struct student類型的指針p和一個指向整型變量len的指針
void read_data(struct student *p, int *len) {// 定義一個FILE類型的指針,用于打開/關閉文件FILE *fp;// 打開名為student_info.txt的文件,使用讀取模式打開fp = fopen("student_info.txt", "r");// 檢查文件是否打開成功if (fp == NULL) {printf("文件打開失敗\n");return;}// 循環讀取文件中的學生信息,直到遇到文件結尾或讀取出錯while (fscanf(fp, "%s %s %s %s %s %s", p[*len].nam, p[*len].sex, p[*len].spec, p[*len].classid, p[*len].phone, p[*len].bedroom) == 6) {// 每讀取一行信息,增加len的值(*len)++;}// 關閉文件fclose(fp);
}

函數read_data用于從文件中讀取數據并存入結構體數組中。它首先使用fopen函數打開名為"student_info.txt"的文件,并指定模式為"r",表示以只讀方式打開文件。然后,它使用fscanf函數按照指定的格式逐行讀取文件中的數據,并將讀取的數據存入結構體數組p中的相應位置。同時,使用指針len來記錄讀取的數據行數。最后,使用fclose函數關閉文件。

regis和read_data這兩個函數配合使用可以實現將結構體數組中的數據寫入文件,以及從文件中讀取數據并存入結構體數組中的功能。

4.注冊學生信息

void createdata(struct student *p, int *len) {int n;      // 定義變量n,用于存儲學生人數printf("報到學生人數:");scanf("%d", &n);   // 從用戶輸入中獲取學生人數信息printf("請輸入學生信息:\n");// 循環獲取每個學生的信息,共n次for (int i = 0; i < n; i++) {printf("學生%d:\n", i+1);printf("姓名:");scanf("%s", p[i].nam);printf("性別:");scanf("%s", p[i].sex);printf("專業:");scanf("%s", p[i].spec);printf("班級:");scanf("%s", p[i].classid);printf("電話號碼:");scanf("%s", p[i].phone);printf("宿舍號:");scanf("%s", p[i].bedroom);printf("\n");}*len = n;   // 將len的值設為學生人數nregis(p, n);    // 將學生信息寫入文件
}

首先,該函數會從用戶輸入中獲取學生人數,并將其存儲在變量`n`中。然后,函數會通過循環獲取每個學生的信息,并將其存儲在結構體數組`p`的相應位置。每次循環,函數會提示用戶輸入學生的姓名、性別、專業、班級、電話號碼和宿舍號,并使用`scanf`函數讀取用戶的輸入。接下來,函數將學生人數`n`存儲到通過指針`len`傳遞的變量中,以便在后續的代碼中可以使用。然后,函數會調用`regis`函數,將結構體數組中的學生信息寫入文件中。

5.增加學生信息

void add(struct student *p, int *len) {int c = 1;   // 定義變量c,用于存儲用戶的選擇// 循環添加學生信息,直到用戶選擇退出while (c == 1) {int mylen = *len;   // 將len的值賦給mylenstruct student st;   // 定義一個struct student類型的變量st,用于存儲要添加的學生信息printf("請輸入要添加學生的信息:\n");printf("姓名:");scanf("%s", st.nam);printf("性別:");scanf("%s", st.sex);printf("專業:");scanf("%s", st.spec);printf("班級:");scanf("%s", st.classid);printf("電話號碼:");scanf("%s", st.phone);printf("宿舍號:");scanf("%s", st.bedroom);printf("\n");p[mylen] = st;   // 將學生信息添加到數組p的末尾*len = mylen + 1;   // 將len的值增加1print_fun(p, *len);   // 打印所有學生的信息printf("\n");printf("是否繼續添加?輸入:\n1.繼續\n2.退出\n");scanf("%d", &c);   // 獲取用戶的選擇}regis(p, *len);   // 將學生信息寫入文件
}

函數首先定義變量c,用于存儲用戶的選擇,然后通過循環添加學生信息,直到用戶選擇退出。循環內部,函數先將指針len指向的值存儲到變量mylen中,然后定義一個新的結構體變量st,用來存儲要添加的學生信息。接著,函數會提示用戶輸入要添加的學生信息,使用scanf函數獲取用戶的輸入,并將輸入的信息存儲到結構體變量st中。然后,將st所存儲的學生信息添加到原有學生信息的結構體數組p的末尾。另外,通過指針len傳遞的值增加1,以便在后續的代碼中可以使用。

接下來,函數調用print_fun函數,將所有學生的信息打印出來以便修改驗證。然后,函數會提示用戶選擇是否繼續添加,如果用戶選擇退出,則跳出循環。最后,函數調用regis函數將更新后的學生信息寫入文件中,以便下次使用時可以使用。

6.刪除學生信息

void delete_student(struct student *p, int *len) {char nam[10];   // 定義一個字符數組,用于存儲要刪除的學生姓名printf("請輸入要刪除的學生姓名: ");scanf("%s", nam);   // 獲取用戶輸入的學生姓名int flag = 0;   // 定義一個標志變量,用于記錄是否找到匹配的學生姓名// 循環查找學生姓名,并刪除匹配的學生記錄for (int i = 0; i < *len; i++) {if (strcmp(p[i].nam, nam) == 0) {   // 如果找到匹配的學生姓名// 將后面的學生記錄依次向前移動for (int j = i; j < *len - 1; j++) {strcpy(p[j].nam, p[j + 1].nam);strcpy(p[j].sex, p[j + 1].sex);strcpy(p[j].spec, p[j + 1].spec);strcpy(p[j].classid, p[j + 1].classid);strcpy(p[j].phone, p[j + 1].phone);strcpy(p[j].bedroom, p[j + 1].bedroom);}(*len)--;   // 更新學生記錄數量flag = 1;   // 設置標志變量為1,表示找到了匹配的學生姓名break;   // 跳出循環}}if (flag) {   // 如果找到了匹配的學生姓名printf("刪除成功!\n");regis(p, *len);   // 將更新后的學生信息寫入文件} else {   // 如果沒有找到匹配的學生姓名printf("學生姓名不存在!\n");}
}

函數首先定義一個字符數組`nam`,用于存儲要刪除的學生姓名,并提示用戶輸入要刪除的學生姓名。然后使用`scanf`函數獲取用戶輸入的學生姓名。接著,函數定義一個標志變量`flag`,用于記錄是否找到匹配的學生姓名。

接下來,函數通過循環遍歷已有的學生記錄,從中查找匹配的學生姓名,并刪除匹配的學生記錄。當找到匹配的學生姓名時,函數使用一個內層循環將后面的學生記錄依次向前移動,以覆蓋被刪除的學生記錄。在移動學生記錄后,通過`strcpy`函數將后面學生記錄的屬性值依次復制到當前學生記錄中。同時,通過遞減指針`len`所指向的值,以更新學生記錄的數量。

如果成功刪除了學生記錄,則將標志變量`flag`設置為1表示找到了匹配的學生姓名,并跳出循環。否則,如果沒有找到匹配的學生姓名,則標志變量`flag`保持為0。

最后,函數根據標志變量`flag`的值,判斷是否成功刪除了學生記錄。如果成功刪除了學生記錄,則打印"刪除成功!"的提示,并調用`regis`函數將更新后的學生信息寫入文件。否則,如果沒有找到匹配的學生姓名,則打印"學生姓名不存在!"的提示。

7.按姓名查詢

void search_name(struct student *p, int len) {char nam1[100];   // 定義一個字符數組,用于存儲要查詢的學生姓名printf("請輸入要查詢學生姓名:");scanf("%s", nam1);   // 獲取用戶輸入的學生姓名printf("姓名\t性別\t專業\t班級\t電話號碼\t宿舍號\t\n");int flag = 0;   // 定義一個標志變量,用于記錄是否找到匹配的學生姓名// 循環查找學生姓名,并輸出匹配的學生記錄for (int i = 0; i < len; i++) {if (strcmp(p[i].nam, nam1) == 0) {   // 如果找到匹配的學生姓名printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\n", p[i].nam, p[i].sex, p[i].spec, p[i].classid, p[i].phone, p[i].bedroom);flag = 1;   // 設置標志變量為1,表示找到了匹配的學生姓名break;   // 跳出循環}}if (!flag) {   // 如果沒有找到匹配的學生姓名printf("姓名輸入有誤!\n");}
}

函數首先定義一個字符數組`nam1`,用于存儲要查詢的學生姓名,并提示用戶輸入要查詢的學生姓名。然后使用`scanf`函數獲取用戶輸入的學生姓名。接著,函數打印一個表頭,用于顯示學生信息的各個屬性。同時,函數定義一個標志變量`flag`,用于記錄是否找到匹配的學生姓名。

接下來,函數通過循環遍歷已有的學生記錄,從中查找匹配的學生姓名,并輸出匹配的學生記錄。當找到匹配的學生姓名時,函數使用`printf`函數按照指定的格式輸出匹配的學生的姓名、性別、專業、班級、電話號碼和宿舍號。同時,將標志變量`flag`設置為1表示找到了匹配的學生姓名,并跳出循環。

最后,函數根據標志變量`flag`的值,判斷是否成功找到了匹配的學生姓名。如果沒有找到匹配的學生姓名,則打印"姓名輸入有誤!"的提示。

8.按班級查詢

void search_class(struct student *p, int len) {char classid[10];   // 定義一個字符數組,用于存儲要查詢的班級printf("請輸入要查詢的班級: ");scanf("%s", classid);   // 獲取用戶輸入的班級printf("姓名\t性別\t專業\t班級\t電話號碼\t宿舍號\t\n");int flag = 0;   // 定義一個標志變量,用于記錄是否找到匹配的班級// 循環查找班級,并輸出匹配的學生記錄for (int i = 0; i < len; i++) {if (strcmp(p[i].classid, classid) == 0) {   // 如果找到匹配的班級printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\n", p[i].nam, p[i].sex, p[i].spec, p[i].classid, p[i].phone, p[i].bedroom);flag = 1;   // 設置標志變量為1,表示找到了匹配的班級}}if (!flag) {   // 如果沒有找到匹配的班級printf("沒有找到該班級的學生信息!\n");}
}

函數首先定義一個字符數組`classid`,用于存儲要查詢的班級,并提示用戶輸入要查詢的班級。然后使用`scanf`函數獲取用戶輸入的班級。接著,函數打印一個表頭,用于顯示學生信息的各個屬性。同時,函數定義一個標志變量`flag`,用于記錄是否找到匹配的班級。

接下來,函數通過循環遍歷已有的學生記錄,從中查找匹配的班級,并輸出匹配的學生記錄。當找到匹配的班級時,函數使用`printf`函數按照指定的格式輸出匹配的學生的姓名、性別、專業、班級、電話號碼和宿舍號。同時,將標志變量`flag`設置為1表示找到了匹配的班級。

最后,函數根據標志變量`flag`的值,判斷是否成功找到了匹配的班級。如果沒有找到匹配的班級,則打印"沒有找到該班級的學生信息!"的提示。

9.按專業查詢

void search_specialty(struct student *p, int len) {char spec[20];   // 定義一個字符數組,用于存儲要查詢的專業printf("請輸入要查詢的專業: ");scanf("%s", spec);   // 獲取用戶輸入的專業printf("姓名\t性別\t專業\t班級\t電話號碼\t宿舍號\t\n");int flag = 0;   // 定義一個標志變量,用于記錄是否找到匹配的專業// 循環查找專業,并輸出匹配的學生記錄for (int i = 0; i < len; i++) {if (strcmp(p[i].spec, spec) == 0) {   // 如果找到匹配的專業printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\n", p[i].nam, p[i].sex, p[i].spec, p[i].classid, p[i].phone, p[i].bedroom);flag = 1;   // 設置標志變量為1,表示找到了匹配的專業}}if (!flag) {   // 如果沒有找到匹配的專業printf("沒有找到該專業的學生信息!\n");}
}

函數首先定義一個字符數組`spec`,用于存儲要查詢的專業,并提示用戶輸入要查詢的專業。然后使用`scanf`函數獲取用戶輸入的專業。接著,函數打印一個表頭,用于顯示學生信息的各個屬性。同時,函數定義一個標志變量`flag`,用于記錄是否找到匹配的專業。

接下來,函數通過循環遍歷已有的學生記錄,從中查找匹配的專業,并輸出匹配的學生記錄。當找到匹配的專業時,函數使用`printf`函數按照指定的格式輸出匹配的學生的姓名、性別、專業、班級、電話號碼和宿舍號。同時,將標志變量`flag`設置為1表示找到了匹配的專業。

最后,函數根據標志變量`flag`的值,判斷是否成功找到了匹配的專業。如果沒有找到匹配的專業,則打印"沒有找到該專業的學生信息!"的提示。

10.打印學生信息

void print_fun(struct student *p, int len) {printf("姓名\t性別\t專業\t班級\t電話號碼\t宿舍號\t\n");// 循環輸出所有學生記錄for (int i = 0; i < len; i++) {printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\n", p[i].nam, p[i].sex, p[i].spec, p[i].classid, p[i].phone, p[i].bedroom);}
}

函數首先打印一個表頭,用于顯示學生信息的各個屬性。接著,函數通過循環遍歷已有的學生記錄,并使用`printf`函數按照指定的格式輸出每個學生的姓名、性別、專業、班級、電話號碼和宿舍號。

11.完整代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 定義一個表示學生的結構體
struct student {char nam[10];       char sex[4];        char spec[20];      char classid[10];   char phone[15];     char bedroom[8];    
};// 函數聲明
void createdata(struct student *stu, int *len);        // 注冊學生信息
void add(struct student *stu, int *len);               // 增加學生信息
void delete_student(struct student *stu, int *len);    // 刪除學生信息
void search_name(struct student *stu, int len);        // 按姓名查詢
void search_class(struct student *stu, int len);       // 按班級查詢
void search_specialty(struct student *stu, int len);   // 按專業查詢
void print_fun(struct student *stu, int len);          // 打印學生信息// 主函數
int main() {int choice;struct student p[1024];int len = 0;while (1) {printf("\n                         新生報到信息注冊系統\n\n");printf("**********************************************************************\n");printf("1. 注冊學生信息\n");printf("2. 增加學生信息\n");printf("3. 刪除學生信息\n");printf("4. 按姓名查詢\n");printf("5. 按班級查詢\n");printf("6. 按專業查詢\n");printf("7. 打印學生信息\n");printf("8. 退出系統\n");printf("**********************************************************************\n");printf("請輸入選項:");scanf("%d", &choice);switch (choice) {case 1: createdata(p, &len);break;case 2: add(p, &len);break;case 3: delete_student(p, &len);break;case 4: search_name(p, len);break;case 5: search_class(p, len);break;case 6: search_specialty(p, len);break;case 7: print_fun(p, len);break;case 8: printf("謝謝您的使用!\n\n");exit(0); default:printf("輸入有誤!請重新輸入。\n\n");break;}}return 0;
}//寫入文件 
void regis(struct student *p, int len) {FILE *fp;fp = fopen("student_info.txt", "w");for (int i = 0; i < len; i++) {fprintf(fp, "%s %s %s %s %s %s\n", p[i].nam, p[i].sex, p[i].spec, p[i].classid, p[i].phone, p[i].bedroom);}fclose(fp);
}// 讀取文件
void read_data(struct student *p, int *len) {FILE *fp;fp = fopen("student_info.txt", "r");if (fp == NULL) {printf("文件打開失敗\n");return;}while (fscanf(fp, "%s %s %s %s %s %s", p[*len].nam, p[*len].sex, p[*len].spec, p[*len].classid, p[*len].phone, p[*len].bedroom) == 6) {(*len)++;}fclose(fp);
}// 注冊學生信息
void createdata(struct student *p, int *len) {int n;      printf("報到學生人數:");scanf("%d", &n);   printf("請輸入學生信息:\n");for (int i = 0; i < n; i++) {printf("學生%d:\n", i+1);printf("姓名:");scanf("%s", p[i].nam);printf("性別:");scanf("%s", p[i].sex);printf("專業:");scanf("%s", p[i].spec);printf("班級:");scanf("%s", p[i].classid);printf("電話號碼:");scanf("%s", p[i].phone);printf("宿舍號:");scanf("%s", p[i].bedroom);printf("\n");}*len = n;   regis(p, n);    
}// 增加學生信息
void add(struct student *p, int *len) {int c = 1;   while (c == 1) {int mylen = *len;   struct student st;   printf("請輸入要添加學生的信息:\n");printf("姓名:");scanf("%s", st.nam);printf("性別:");scanf("%s", st.sex);printf("專業:");scanf("%s", st.spec);printf("班級:");scanf("%s", st.classid);printf("電話號碼:");scanf("%s", st.phone);printf("宿舍號:");scanf("%s", st.bedroom);printf("\n");p[mylen] = st;   *len = mylen + 1;   print_fun(p, *len);   printf("\n");printf("是否繼續添加?輸入:\n1.繼續\n2.退出\n");scanf("%d", &c);   }regis(p, *len);   
}// 刪除學生信息
void delete_student(struct student *p, int *len) {char nam[10];   printf("請輸入要刪除的學生姓名: ");scanf("%s", nam);   int flag = 0;   for (int i = 0; i < *len; i++) {if (strcmp(p[i].nam, nam) == 0) {   for (int j = i; j < *len - 1; j++) {strcpy(p[j].nam, p[j + 1].nam);strcpy(p[j].sex, p[j + 1].sex);strcpy(p[j].spec, p[j + 1].spec);strcpy(p[j].classid, p[j + 1].classid);strcpy(p[j].phone, p[j + 1].phone);strcpy(p[j].bedroom, p[j + 1].bedroom);}(*len)--;   flag = 1;   break;   }}if (flag) {   printf("刪除成功!\n");regis(p, *len);   } else {   printf("學生姓名不存在!\n");}
}// 按姓名查詢
void search_name(struct student *p, int len) {char nam1[100];   printf("請輸入要查詢學生姓名:");scanf("%s", nam1);   printf("姓名\t性別\t專業\t班級\t電話號碼\t宿舍號\t\n");int flag = 0;   for (int i = 0; i < len; i++) {if (strcmp(p[i].nam, nam1) == 0) {   printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\n", p[i].nam, p[i].sex, p[i].spec, p[i].classid, p[i].phone, p[i].bedroom);flag = 1;   break;   }}if (!flag) {   printf("姓名輸入有誤!\n");}
}// 按班級查詢
void search_class(struct student *p, int len) {char classid[10];   printf("請輸入要查詢的班級: ");scanf("%s", classid);   printf("姓名\t性別\t專業\t班級\t電話號碼\t宿舍號\t\n");int flag = 0;   for (int i = 0; i < len; i++) {if (strcmp(p[i].classid, classid) == 0) {   printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\n", p[i].nam, p[i].sex, p[i].spec, p[i].classid, p[i].phone, p[i].bedroom);flag = 1;   }}if (!flag) {   printf("沒有找到該班級的學生信息!\n");}
}// 按專業查詢
void search_specialty(struct student *p, int len) {char spec[20];   printf("請輸入要查詢的專業: ");scanf("%s", spec);   printf("姓名\t性別\t專業\t班級\t電話號碼\t宿舍號\t\n");int flag = 0;   for (int i = 0; i < len; i++) {if (strcmp(p[i].spec, spec) == 0) {   printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\n", p[i].nam, p[i].sex, p[i].spec, p[i].classid, p[i].phone, p[i].bedroom);flag = 1;   }}if (!flag) {   printf("沒有找到該專業的學生信息!\n");}
}// 打印學生信息
void print_fun(struct student *p, int len) {printf("姓名\t性別\t專業\t班級\t電話號碼\t宿舍號\t\n");for (int i = 0; i < len; i++) {printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\n", p[i].nam, p[i].sex, p[i].spec, p[i].classid, p[i].phone, p[i].bedroom);}
}

運行截圖:

說明:輸入選項1后,填寫報到學生人數最好不要超過10人,主要是一條一條數據輸入得輸半天。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212366.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212366.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212366.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

git commit語義規范

合理的應當如 [header]fix(core): remove ....(#33949) These .... RP Close #33949(可選) Header可選 代碼類 新增功能(feat) 修復缺陷(fix) 改進性能(perf) 格式化代碼(style) 優化代碼(refactor) 非代碼類 更新測試代碼(test) 部署相關變更(ci) 文檔類變更(do…

【Linux】第二十七站:內存管理與文件頁緩沖區

文章目錄 一、物理內存和磁盤交換數據的最小單位二、操作系統如何管理內存三、文件的頁緩沖區四、基數樹or基數&#xff08;字典樹&#xff09;五、總結 一、物理內存和磁盤交換數據的最小單位 我們知道系統當中除了進程管理、文件管理以外&#xff0c;還有內存管理 內存的本質…

思科最新版Cisco Packet Tracer 8.2.1安裝

思科最新版Cisco Packet Tracer 8.2.1安裝 一. 注冊并登錄CISCO賬號二. 下載 Cisco Packet Tracer 8.2.1三. 安裝四. 漢化五. cisco packet tracer教學文檔六. 正常使用圖 前言 這是我在這個網站整理的筆記,有錯誤的地方請指出&#xff0c;關注我&#xff0c;接下來還會持續更新…

[香橙派]orange pi zero 3 燒錄Ubuntu系統鏡像——無需HDMI數據線安裝

一、前言 本文我們將介紹如何使用orange pi zero 3 安裝Ubuntu系統&#xff0c;本文相關步驟均參考自開發手冊。 二、實施準備 根據開發手冊中所提到的&#xff0c;我們應該擁有如下配件: 1.orange pi zero 3 開發板 2.TF 卡——最小 8GB 容量的 class10 級或以上的高速閃迪卡。…

鴻蒙OS應用開發之語句

在程序開發中&#xff0c;已經有上面的運算符和數據類型了&#xff0c;可以滿足了大部的需求&#xff0c;但是這些程序還是比較簡單的計算和邏輯運算&#xff0c;如果需要復雜的計算和邏輯處理&#xff0c;就需要采用復雜邏輯程序塊來處理了&#xff0c;也就是復雜條件語句才能…

nn.Sequential|nn.ModuleDict|nn.ModuleList 詳解

文章目錄 1、簡介2、三者之間的區別3、如何讓nn.ModuleList 和nn.ModuleDict實現推理3.1 方案1: 實現forward函數3.2 方案2: 將nn.ModuleList 和nn.ModuleDict轉換為nn.Sequential4、nn.ModuleDict、nn.ModuleList 的區別5、nn.ModuleList 、 nn.ModuleDict 與 Python list、…

模型 心流

本系列文章 主要是 分享模型&#xff0c;涉及各個領域&#xff0c;重在提升認知。完全投入其中。 1 心流的應用 1.1 優秀運動員的心流體驗 邁克爾喬丹&#xff08;Michael Jordan&#xff09;&#xff1a;籃球之神喬丹在比賽中經常進入心流狀態&#xff0c;他曾表示&#xff…

DIY手工藝作坊網站建設的作用如何

我國文化悠久流長&#xff0c;很多手工藝品制作技術放在如今依然有很高的需求度&#xff0c;加之現代新增的技藝&#xff0c;樣式多且藝術性強&#xff0c;比如常見的陶器手工制作技術&#xff0c;當然還有更多。 而對相關作坊來說&#xff0c;除了藝術傳承外&#xff0c;還需…

接觸剛性環境任務下的機器人力控(阻抗)性能測試

內涵 接觸剛性環境任務下的機器人力控&#xff08;阻抗&#xff09;性能測試旨在評估機器人在與剛性物體交互時的性能表現。這種測試通過調整機器人的控制參數&#xff0c;如期望剛度和期望阻尼等&#xff0c;并分析記錄的數據&#xff0c;旨在確保機器人能夠在執行任務時保持…

短劇分銷小程序/APP開發:開啟短劇收益時代

今年&#xff0c;短劇火爆出圈&#xff0c;市場規模將達至200億元至300億元。國內全全平臺付費短劇日充值金額為6000萬元&#xff0c;短劇作為一種“快餐式”文化迅速爆火。 短劇契合了觀眾娛樂時間碎片化的發展趨勢&#xff0c;相比于傳統的電視劇&#xff0c;短劇節奏快、劇…

Nacos源碼解讀10——配置中心的客戶端怎么處理服務端推送的配置信息變更

自動裝配 SpringBoot 自動裝配機制 加載 WEB/INF spring.factories org.springframework.cloud.bootstrap.BootstrapConfiguration\ com.alibaba.cloud.nacos.NacosConfigBootstrapConfigurationjava Configuration(proxyBeanMethods false) ConditionalOnProperty(name &q…

MongoDB的連接數據庫,創建、刪除數據庫,創建、刪除集合命令

本文主要介紹MongoDB的連接數據庫&#xff0c;創建、刪除數據庫&#xff0c;創建、刪除集合命令。 目錄 MongoDB連接數據庫連接到本地 MongoDB 實例連接到遠程 MongoDB 實例 MongoDB創建和刪除數據庫MongoDB創建和刪除集合創建集合刪除集合 MongoDB連接數據庫 連接 MongoDB 數…

P1317 低洼地題解

題目 一組數&#xff0c;分別表示地平線的高度變化。高度值為整數&#xff0c;相鄰高度用直線連接。找出并統計有多少個可能積水的低洼地&#xff1f; 如圖&#xff1a;地高變化為 [0,1,0,2,1,2,0,0,2,0]。 輸入輸出格式 輸入格式 兩行&#xff0c;第一行n, 表示有n個數。第…

Spark DataFrame和Dataset使用例子

文章目錄 1、基本操作1.1、創建SparkSession1.2、創建DataFrames1.3、創建Dataset操作1.4、運行sql查詢1.5、創建全局臨時視圖1.6、創建Datasets1.7、與rdd進行互操作1.7.1、使用反射推斷模式1.7.2、以編程方式指定模式 2、完整的測試例子 1、基本操作 1.1、創建SparkSession …

openGauss學習筆記-151 openGauss 數據庫運維-備份與恢復-物理備份與恢復之gs_basebackup

文章目錄 openGauss學習筆記-151 openGauss 數據庫運維-備份與恢復-物理備份與恢復之gs_basebackup151.1 背景信息151.2 前提條件151.3 語法151.4 示例151.5 從備份文件恢復數據 openGauss學習筆記-151 openGauss 數據庫運維-備份與恢復-物理備份與恢復之gs_basebackup 151.1 …

NeuralKG運行備忘

環境配置&#xff1a; conda create -n neuralkg python3.8 conda activate neuralkg pip install torch1.9.1cu111 -f https://download.pytorch.org/whl/torch_stable.html pip install dgl-cu111 dglgo -f https://data.dgl.ai/wheels/repo.html pip install neuralkg! co…

基于java swing 藥品銷售管理系統

大家好&#xff0c;我是DeBug&#xff0c;很高興你能來閱讀&#xff01;作為一名熱愛編程的程序員&#xff0c;我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里&#xff0c;我將會結合實際項目經驗&#xff0c;分享編程技巧、最佳實踐以及解決問題的方法。無論你是…

短視頻賬號剪輯矩陣+無人直播系統源頭開發

抖去推爆款視頻生成器&#xff0c;通過短視頻矩陣、無人直播&#xff0c;文案引流等&#xff0c;打造實體商家員工矩陣、用戶矩陣、直播矩陣&#xff0c;輔助商家品牌曝光&#xff0c;團購轉化等多功能賦能商家拓客引流。 短視頻矩陣通俗來講就是批量剪輯視頻和批量發布視頻&am…

Multisim電路仿真軟件使用教程

安裝直接參考這篇文章&#xff1a;Multisim 14.0安裝教程 軟件管家公眾號里有很多軟件&#xff0c;需要的可以去找下然后安裝&#xff0c;這里用的是14.0版本。 這里有個大神的詳細教程&#xff0c;可以參考&#xff1a; Multisim軟件使用詳細入門教程&#xff08;圖文全解&…

Java Docker 生產環境部署

1. 引言 隨著容器化技術的廣泛應用&#xff0c;Docker成為了一種非常流行的容器化解決方案。Java作為一種跨平臺的編程語言&#xff0c;在生產環境中也廣泛使用。本文將介紹如何使用Docker來部署Java應用程序&#xff0c;并探討一些最佳實踐和注意事項。 2. Docker簡介 Dock…