主頁 > 後端開發 > 學生資訊管理系統(C語言,帶檔案操作)

學生資訊管理系統(C語言,帶檔案操作)

2021-06-14 07:11:37 後端開發

前情提示

這是本人大一的C語言程式設計的結課設計作業,由于這段時間一直在學習Java,C語言很久沒學了,所以在CSDN上找了很多代碼,經過對比最終發現博客C語言 學生成績管理系統 控制臺 檔案操作(未涉及資料庫)最符合我的需求,然后對這個程式進行了一些修改,于是我的結課設計就誕生了
在這里插入圖片描述

程式簡介

本程式設計具有學生資訊的輸入、顯示、查詢、更新、洗掉、保存等功能,利用清屏函式使操作界面簡潔美觀,易于操作,程式用了指標、結構體、鏈表等知識點,運用選單實作互動式管理,用戶輕松的按鍵即可實作對軟體的操作,操作簡單易懂,功能豐富,可以很好的滿足需要

流程圖

在這里插入圖片描述

源程式函式目錄

在這里插入圖片描述

源代碼

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define max 100		//陣列定義統一大小

int g = 0;		//全域變數,為登錄時輸入密碼次數
int student_number = 5;		//全域變數,student_number為學生的人數

struct user      //定義一個結構體,存盤用戶登錄賬號和密碼,并初始化五個管理員的資訊
{
	char username[20];
	char password[20];
}user[5] = {
	{"蔣超", "1450824311"},
	{"李佳樹", "2041775273"},
	{"劉英杰", "395636706"},
	{"胡友亮", "924056026"},
	{"黃家楊", "2946644844"}
};

struct student		//定義結構體,包含學生資訊,并初始化五個學生的資訊 
{
	char name[max];		//姓名
	char num[max];		//學號
	char sex[max];		//性別
	int chinese;		//語文成績
	int mathematic;		//數學成績
	int english;		//英語成績
	int computer;		//計算機成績
}s[5] = {
	{  "蔣超", "00001", "boy", 80,90,80,90},
	{  "李佳樹", "00002", "boy", 60,80,90,50},
	{  "黃家楊", "00003", "girl", 85,65,75,90},
	{  "胡友亮", "00004", "boy", 55,65,75,80},
	{  "劉英杰", "00005", "girl", 90,95,98,99}
};

struct student* p;		//定義一個結構體指標

//主選單函式宣告
void login();				//登入函式
void main_menu();				//主界面函式
void input_record();  		//輸入學生成績處理   1
void show_record();  		//顯示學生成績處理   2   
void search_record();  		//查詢學生成績處理   3
void change_record();  		//更新學生成績處理   4
void delete_record();  		//洗掉學生資訊   5
void calc_record(); 	 	//計算成績處理   6
void save_record();  		//保存處理   7
void exit_record();  		//退出   8


//查詢子函式宣告
void search_by_num();  		//學號查詢
void search_by_name();  	//姓名查詢
void search_by_sex();  		//性別查詢
void search_by_exit();  	//回傳上一級


//計算子函式宣告
void calc_sum();  			//計算總成績
void calc_ave();  			//計算平均成績
void calc_eixt();  			//回傳上一級


//自定義函式
void print_table();			//表頭
void print_table_sum();		//總成績表格
void print_table_ave();		//平均分表格
void read();     			//將檔案中的資料讀入到結構體陣列中


int main()    				//*主函式
{
	login();		//首先進行管理員登錄
	main_menu();		//登錄成功后顯示主界面
	return 0;
}


void login()    //登錄函式,管理員使用該系統前需進行登錄,定義密碼只允許輸錯三次 
{
	int i;
	char id[20], password[20];
	printf("****登錄界面****\n");
	printf("請輸入賬號名:");
	scanf("%s", id);
	printf("請輸入密碼:");
	scanf("%s", password);
	for (i = 0; i < 5; i++)		//遍歷五個管理員的資訊,如果輸入的資訊在初始化的資訊中存在則登錄成功
	{
		if (strcmp(id, user[i].username) == 0 && strcmp(password, user[i].password) == 0)
		{
			printf("登錄成功!\n");
			system("cls");		//清屏函式
			main_menu();			//登錄成功,列印主界面
			break;
		}
	}

	if (i == 5)     //遍歷完一輪管理員資訊,此時i=5且未找到符合的管理員資訊,說明賬號密碼輸入錯誤
	{
		system("cls");
		printf("登錄失敗!\n\n");
		g++;	//有三次登錄機會,每次登錄都遍歷一次user結構體
		if (g >= 3)		//若三次機會都用完,則退出系統
		{
			printf("你已經輸錯三次,將自動退出系統\n");
			exit(1);
		}
		else
		{
			login();	//否則,登陸成功,進入主界面
		}
	}
}


void main_menu()    //展示主選單,并對用戶的請求做出對應回應 
{
	read();				//將檔案中的學生資訊讀取到鏈表中
	system("cls");		//清屏函式
	int x;
	//主選單
	printf("*************************************************\n");
	printf("*\t歡迎使用高校學生成績管理系統V2.0\t*\n");
	printf("*************************************************\n");
	printf("*\t\t1.輸入學生資訊\t\t\t*\n");
	printf("*\t\t2.顯示學生資訊\t\t\t*\n");
	printf("*\t\t3.查詢學生資訊\t\t\t*\n");
	printf("*\t\t4.更新學生資訊\t\t\t*\n");
	printf("*\t\t5.洗掉學生資訊\t\t\t*\n");
	printf("*\t\t6.計算學生成績\t\t\t*\n");
	printf("*\t\t7.保存\t\t\t\t*\n");
	printf("*\t\t8.退出系統\t\t\t*\n");
	printf("*************************************************\n");
	printf("請輸入你要執行的操作:");
	scanf("%d", &x);
	if (x == 1)
		input_record();  	//輸入資訊 
	if (x == 2)
		show_record();  	//顯示資訊 
	if (x == 3)
		search_record(); 	//查詢資訊 
	if (x == 4)
		change_record();  	//更新資訊 
	if (x == 5)
		delete_record();  	//洗掉資訊 
	if (x == 6)
		calc_record();  	//計算成績 
	if (x == 7)
		save_record();  	//保存
	if (x == 8)
		exit_record();  	//退出
	else
	{
		printf("輸入錯誤,即將重新進入主界面\n");
		main_menu();
	}
}


void input_record()		//輸入學生成績函式    1
{
	//定義兩個char型別變數來獲取用戶的輸入 
	char v, z;
	//在開頭位置做一個標記
	aa:
		{
		system("cls");		//清屏函式

		printf("請輸入學生姓名:");
		scanf("%s", s[student_number].name);

		printf("請輸入學生學號(五位):");
		scanf("%s", s[student_number].num);

		printf("請輸入學生性別(boy/girl):");
		scanf("%s", s[student_number].sex);

		printf("請輸入學生語文成績:");
		scanf("%d", &s[student_number].chinese);

		printf("請輸入學生數學成績:");
		scanf("%d", &s[student_number].mathematic);

		printf("請輸入學生英語成績:");
		scanf("%d", &s[student_number].english);

		printf("請輸入學生計算機成績:");
		scanf("%d", &s[student_number].computer);

		printf("請選擇是否保存(y或n):");
		scanf("%s", &z);

		if (z == 'y')		//若輸入為y,則保存資訊到檔案中
		{
			student_number++;
			save_record();
		}

		printf("是否繼續添加,請選擇(y或n)(否會回到主界面):");
		scanf("%s", &v);

		if (v == 'y')		//若輸入為y,則跳轉至開頭標記aa處
		{
			goto aa;
		}

		else
		{
			main_menu();
		}
	}
}


void show_record()		//顯示學生資訊函式    2   
{
	system("cls");		//清屏函式

	int i, k, x;
	char get;
	x = student_number;

	print_table();		//列印表頭 
	for (i = 0; i < x; i++)	//列印表格資料 
	{
		printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);
	}

	printf("\n1.回傳主界面\n2.回傳上一級\n");
	printf("請輸入:");
	scanf("%d", &k);

	if (k == 1)
	{
		main_menu();
	}

	else if (k == 2)
	{
		main_menu();
	}

}


void search_record()  	//查詢學生成績函式    3
{
	system("cls");		//清屏函式

	int x;

	//列印選單
	printf("1 按學號查詢\n");
	printf("2 按姓名查詢\n");
	printf("3 按性別查詢\n");
	printf("4 回傳上一級\n");
	printf("請輸入:");
	scanf("%d", &x);

	if (x == 1)
		search_by_num();	//按學號查詢函式 
	if (x == 2)
		search_by_name();	//按姓名查詢函式 
	if (x == 3)
		search_by_sex();	//按性別查詢查詢 
	if (x == 4)
		search_by_exit();	//回傳主界面
	else
	{
		printf("輸入錯誤\n");
		search_record();		//重新查詢
	}

}


void print_table()    	//列印學生資訊表格的表頭函式 
{
	printf("+----------+----------+----------+------+------+------+------+\n");
	printf("|   姓名   |   學號   |   性別   | 語文 | 數學 | 英語 |計算機|\n");
	printf("+----------+----------+----------+------+------+------+------+\n");
}


void search_by_num()    //查詢學生資訊函式的子函式——按學號查詢函式 
{
	int i, k;
	char num1[max];		//用戶輸入學生學號

	system("cls");		//清屏函式

	printf("請輸入要查找的學號:");
	scanf("%s", num1);

	for (i = 0; i < student_number; i++)		//遍歷鏈表,尋找是該學號是否存在
	{
		if (strcmp(num1, s[i].num) == 0)
		{
			print_table();
			printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);
			break;
		}
	}

	if (i == student_number)		//student_number為全域變數學生的人數
	{
		printf("不存在這個學號!\n\n");
	}

	printf("1.回傳主界面\n2.繼續查詢\n");
	printf("請輸入:");
	scanf("%d", &k);

	if (k == 1)
	{
		main_menu();
	}

	else
	{
		search_record();
	}
}


void search_by_name()    //詢學生資訊函式的子函式——按姓名查詢函式 
{
	int i, k;
	char name1[max];	//用戶輸入學生姓名

	system("cls");		//清屏函式
	printf("請輸入查找的姓名:");
	scanf("%s", name1);

	for (i = 0; i < student_number; i++)		//遍歷鏈表,看該名字是否存在
	{
		if (strcmp(name1, s[i].name) == 0)
		{
			print_table();
			printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);
			break;
		}
	}

	if (i == student_number) 
	{
		printf("不存在這個姓名\n");
	}
	
	printf("1.回傳主界面\n2.繼續查詢\n");
	printf("請輸入:");
	scanf("%d", &k);

	if (k == 1)
	{
		main_menu();
	}

	else
	{
		search_record();
	}
}


void search_by_sex()    //詢學生資訊函式的子函式——按性別查詢函式 
{
	int i, k;
	char sex1[max];		//用戶輸入學生的性別

	system("cls");		//清屏函式
	printf("請輸入查找的性別(boy/girl):");
	scanf("%s", sex1);
	print_table();   //表格

	for (i = 0; i < student_number; i++)		//遍歷鏈表,看該性別是否存在
	{
		if (strcmp(sex1, s[i].sex) == 0)
			printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);
	}

	if (i == student_number)
	{
		printf("1.回傳主界面\n2.繼續查詢\n");
	}
	printf("請輸入:");
	scanf("%d", &k);

	if (k == 1)
	{
		main_menu();
	}

	else
	{
		search_record();
	}
}


void search_by_exit()    //回傳上一級(回傳主選單)的函式 
{
	main_menu();
}


void change_record()    //更新學生成績函式    4
{
	//輸入學生學號修改學生資訊并保持

	system("cls");		//清屏函式
	int i;
	char name2[max], sex2[max];
	int chinese2, mathematic2, english2, computer2;
	char numbefor[max];

	printf("請輸入要修改的學生的學號:");     //用戶輸入學生學號
	scanf("%s", numbefor);

	for (i = 0; i < student_number; i++)		//遍歷鏈表,看該學號是否存在
	{
		if (strcmp(numbefor, s[i].num) == 0)	//存在
		{
			printf("修改前:\n");
			print_table();		//列印表格

			printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);

			printf("請分別輸入修改后資訊\n");

			printf("請輸入學生姓名:");
			scanf("%s", name2);

			printf("請輸入學生性別:");
			scanf("%s", sex2);

			printf("請輸入學生語文成績:");
			scanf("%d", &chinese2);

			printf("請輸入學生數學成績:");
			scanf("%d", &mathematic2);

			printf("請輸入學生英語成績:");
			scanf("%d", &english2);

			printf("請輸入學生計算機成績:");
			scanf("%d", &computer2);

			printf("請選擇是否保存(y或n):");
			getchar();
			if (getchar() == 'y')		//修改學生資訊
			{
				strcpy(s[i].name, name2);
				strcpy(s[i].sex, sex2);
				s[i].chinese = chinese2;
				s[i].mathematic = mathematic2;
				s[i].english = english2;
				s[i].computer = computer2;
				save_record();		//保存學生資訊到檔案中

				printf("修改后:\n");
				printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);
				printf("\n");
			}
			break;
		}
	}
	if (i == student_number)
	{
		printf("很抱歉!沒有這位學生\n");
	}
	printf("是否繼續修改,請選擇(y/n):");
	getchar();
	if (getchar() == 'y')
	{
		change_record();		//繼續修改
	}
	else
	{
		main_menu();		//回傳主界面
	}
}


void delete_record()    //洗掉學生資訊函式    5
{
	//輸入學生學號洗掉學生資訊并保存 

	system("cls");
	char num4[max];
	char a;
	int v;
	printf("請輸入要刪學生的學號:\n");
	scanf("%s", num4);

	int i, j;
	for (i = 0; i < student_number; i++)			//遍歷鏈表,看學號是否存在
	{
		if (strcmp(num4, s[i].num) == 0)		//存在,執行洗掉操作
		{
			printf("你將要洗掉該學生資訊\n");
			printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);
			printf("\n");
			printf("y 確認洗掉\tn 取消\n");
			printf("請輸入:");
			scanf("%s", &a);
			if (a == 'y')
			{
				for (j = i; j < student_number; j++)		//將鏈表中該節點指向下一節點以實作洗掉操作
				{
					strcpy(s[j].num, s[j + 1].num);  strcpy(s[j].name, s[j + 1].name);  strcpy(s[j].sex, s[j + 1].sex);
					s[j].chinese = s[j + 1].chinese;  s[j].mathematic = s[j + 1].mathematic;  s[j].english = s[j + 1].english;
					s[j].computer = s[j + 1].computer;
				}
				printf("洗掉成功!\n");
				student_number--;		//全域變數,student_number-1
				save_record();		//將洗掉后的資訊保存到檔案中
			}
			else
			{
				printf("已取消操作\n");
			}

		}
	}
	if (i == student_number)		//該學號不存在
	{
		printf("沒有這個學號的學生\n");
	}
	printf("1.繼續洗掉 2.回傳主界面\n");
	printf("請輸入:");
	scanf("%d", &v);
	if (v == 1)
	{
		delete_record();
	}
	else
	{
		main_menu;
	}
}


void calc_record()    //計算學生成績函式    6
{
	//有兩個功能,一個是計算總成績一個是計算平均分 

	system("cls");		//清屏函式
	int x;
	printf("1 計算總成績\n");
	printf("2 計算平均分\n");
	printf("3 回傳上一級\n");
	printf("請輸入:");
	scanf("%d", &x);

	if (x == 1)
		calc_sum();		//計算總成績
	if (x == 2)
		calc_ave();		//計算平均成績
	if (x == 3)
		main_menu();		//回傳主界面
	else
	{
		printf("輸入錯誤\n");
		calc_record();	//重新列印該界面
	}
}


void print_table_sum()    //計算總成績函式的子函式——列印總成績表格的表頭 
{
	printf("+----------+----------+----------+------+------+------+------+------+\n");
	printf("|   姓名   |   學號   |   性別   | 語文 | 數學 | 英語 |計算機|總成績|\n");
	printf("+----------+----------+----------+------+------+------+------+------+\n");
}


void print_table_ave()    //計算平均分函式的子函式——列印平均成績表格的表頭 
{
	printf("+----------+----------+----------+------+------+------+------+------+\n");
	printf("|   姓名   |   學號   |   性別   | 語文 | 數學 | 英語 |計算機|平均分|\n");
	printf("+----------+----------+----------+------+------+------+------+------+\n");
}


void calc_sum()    //計算學生成績函式的子函式——計算總成績函式 
{
	print_table_sum();		//列印表頭
	int i, k, sum = 0;		//sum為學生的總成績
	int x = student_number;		//student_number為學生人數

	for (i = 0; i < x; i++)
	{
		sum = s[i].chinese + s[i].mathematic + s[i].english + s[i].computer;
		printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|%6d\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer, sum);
	}

	printf("1 回傳上一級\n2 回傳主界面\n ");
	printf("請輸入:");
	scanf("%d", &k);

	if (k == 1)
		calc_record();
	if (k == 2)
		main_menu();
	else
	{
		printf("輸入錯誤!\n");
		calc_record();
	}
}


void calc_ave()    //計算學生成績函式的子函式——計算平均成績函式 
{
	print_table_ave();		//列印表頭
	int i, k;
	int x = student_number;		//student_number為學生人數
	float ave;		//ave為學生平均成績

	for (i = 0; i < x; i++)
	{
		ave = (s[i].chinese + s[i].mathematic + s[i].english + s[i].computer) * 0.25;
		printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|%6.2f\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer, ave);
		if (i == 6)
		{
			break;
		}
	}

	printf("1 回傳上一級\n2 回傳主界面\n ");
	printf("請輸入:");
	scanf("%d", &k);

	if (k == 1)
		calc_record();
	if (k == 2)
		main_menu();
	else
	{
		printf("輸入錯誤!\n");
		calc_record();
	}
}


void calc_eixt()    //回傳上一級(回傳主選單)函式 
{
	main_menu();
}


void save_record()  //保存學生資訊函式    7(將結構體陣列學生資料寫入到檔案中) 
{
	FILE* fp;		//定義一個檔案指標
	int i;

	//若檔案打開失敗
	if ((fp = fopen("student-list", "wb")) == NULL)		//以二進制方式對檔案進行讀寫
	{
		printf("cannot open file\n");
		return;
	}

	fwrite(&student_number, 4, 1, fp);    	//將學生人數寫入檔案

	for (i = 0; i < student_number; i++)    	//二進制寫
	{
		if (fwrite(&s[i], sizeof(struct student), 1, fp) != 1)
		{
			printf("file write error\n");	//出錯處理
		}
		else
		{
			printf("file write sucess\n");	//檔案寫入成功
		}
	}
	fclose(fp);		//關閉檔案指標
}


void read()     //將檔案中的資料讀入到結構體陣列中
{
	FILE* fp;		//定義一個檔案指標
	int i;

	//若檔案打開失敗
	if ((fp = fopen("student-list", "rb")) == NULL)		//以二進制方式讀取檔案
	{
		printf("cannot open file\n");
		return;
	}

	fread(&student_number, 4, 1, fp);     //讀取學生人數

	for (i = 0; i < student_number; i++)		//二進制寫
	{
		if (fread(&s[i], sizeof(struct student), 1, fp) != 1)
		{
			printf("file read error\n");	//出錯處理
		}
		else
		{
			printf("file read sucess\n");	//檔案讀取成功
		}
	}
	fclose(fp);		//關閉檔案指標
}


void exit_record()  	//退出系統函式    8
{
	printf("感謝您的使用,已退出!");
	exit;
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/287149.html

標籤:java

上一篇:【Java實習生】兄弟萌要的Spring面試題打卡來了~

下一篇:Spring Boot制作個人博客-后端管理(登錄)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more