職工工資管理系統程式中新增臨時員工的功能

来源:https://www.cnblogs.com/Havery-bobo/archive/2023/03/05/17181329.html
-Advertisement-
Play Games

職工工資管理系統程式中新增臨時員工的功能 這個職工工資管理系統基本功能都十分完善,代碼也都比較簡潔,運行效率也很高,沒有什麼直接能改的功能,所以我基於現在許多大學生找兼職、臨時工的現象,增添了臨時員工的工資系統,可以方便公司、企業等更加完善公司的財務系統。也方便公司為臨時員工發放工資。 代碼段一是原 ...


職工工資管理系統程式中新增臨時員工的功能

這個職工工資管理系統基本功能都十分完善,代碼也都比較簡潔,運行效率也很高,沒有什麼直接能改的功能,所以我基於現在許多大學生找兼職、臨時工的現象,增添了臨時員工的工資系統,可以方便公司、企業等更加完善公司的財務系統。也方便公司為臨時員工發放工資。

代碼段一是原來的工資程式系統

代碼段二是增添臨時員工後的工資系統

代碼一、
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;

class Staff {
	protected:
		string number;
		string name;
		string sex;
		string address;
		int salary;
		static int sum_salary; //總工資
		static int sum_member; //總員工人數
	public:
		Staff();
		Staff(string number,string name,string sex,string address,int salary);

		void print() {};
		void setnumber(string num) {
			number=num;
		}
		void setname(string na) {
			name=na;
		}
		void setsex(string se) {
			sex=se;
		}
		void setaddress(string add) {
			address=add;
		}
		void setsalary(int sa) {
			salary=sa;
		}

		int getsalary();
		string getname() {
			return name;
		}
		string getnumber() {
			return number;
		}
		string getsex() {
			return sex;
		}
		string getaddress() {
			return address;
		}
};

Staff::Staff() {
	number="";
	name="";
	sex="";
	address="";
	salary=0;
}


Staff::Staff(string number,string name,string sex,string address,int salary) {
	this->number = number;
	this->name = name;
	this->sex = sex;
	this->address = address;
	this->salary = salary;
}
int Staff::getsalary() {
	return salary;
}




class Regular_staff:public Staff {
	protected:
		int allowance; //崗位津貼
		int old_age_pension; //養老金
		int Housing_Fund; //住房公積金
		int medical_insurance; //醫療保險
		int tax;
		int r_salary; //實際工資
	public:
		Regular_staff();
		Regular_staff(string num,string na,string sex,string add,int salary,int all ,int oap, int Hou, int med);
		void getr_salary();										//計算實發工資
		void gettax();
		int getreal() {
			return r_salary;
		}
		void setallowance(int all) {
			allowance=all;
		}
		void setold_age_pension(int oap) {
			old_age_pension=oap;
		}
		void setHousing_Fund(int Hou) {
			Housing_Fund=Hou;
		}
		void setmedical_insurance(int med) {
			medical_insurance=med;
		}
		void display() {
			cout<<"員工編號:"<<number<<"\t"<<"姓名:"<<name<<"\t"<<"性別:"<<sex<<endl;
			cout<<"地址:"<<address<<endl;
			cout<<"崗位津貼:"<<allowance<<"\t"<<"養老金:"<<old_age_pension<<endl;
			cout<<"住房公積金:"<<Housing_Fund<<"\t"<<"醫療保險:"<<medical_insurance<<endl;
			cout<<"本月稅後實際工資:"<<r_salary<<endl;
		}

		int getallowance() {
			return allowance;
		}
		int getold_age_pension() {
			return old_age_pension;
		}
		int getHousing_Fund() {
			return Housing_Fund;
		}
		int getmedical_insurance() {
			return medical_insurance;
		}


} rs[10000];


Regular_staff::Regular_staff() {
	number="";
	name="";
	sex="";
	address="";
	salary=0;
	allowance=0;
	old_age_pension=0;
	Housing_Fund=0;
	medical_insurance=0;
}

void Regular_staff::gettax() {

	this->salary = getsalary();
	if (salary<5000) {
		tax=0;
	}
	if (salary>5000&&r_salary<41000) {
		tax=(salary-5000)*0.03;
	}
	if (salary>41000&&r_salary<149000) {
		tax=(salary-41000)*0.1+2520;
	}
	if (salary>149000&&r_salary<305000) {
		tax=(salary-149000)*0.2+16920;
	}
	if (salary>305000&&r_salary<425000) {
		tax=(salary-305000)*0.25+31920;
	}
	if (salary>425000&&r_salary<665000) {
		tax=(salary-425000)*0.3+52920;
	}
	if (salary>665000&&r_salary<965000) {
		tax=(salary-665000)*0.35+85920;
	}
	if (salary>965000) {
		tax=(salary-965000)*0.45+181920;
	}
}

Regular_staff::Regular_staff(string num,string na,string sex,string add,int salary,int all ,int oap, int Hou, int med) : Staff(num,na ,sex, add ,salary) {
	this->allowance = all;
	this->old_age_pension = oap;
	this->Housing_Fund = Hou;
	this->medical_insurance = med;
	gettax();
	r_salary = getsalary()+allowance-old_age_pension-Housing_Fund-medical_insurance-tax;

}
void Regular_staff::getr_salary() {
	r_salary = getsalary()+allowance-old_age_pension-Housing_Fund-medical_insurance-tax;
}





class Temporary_staff:public Staff {
	protected:
		int bonus; //獎金
		int tax;
		int r_salary; //實際工資
	public:
		Temporary_staff();
		Temporary_staff(string num,string na,string sex,string add,int salary,int bo );
		void gettax();
		int getr_salary();
		int getreal() {
			return r_salary;
		}
		void setbonus(int bo) {
			bonus=bo;
		}
		void display() {
			cout<<"員工編號:"<<number<<"\t"<<"姓名:"<<name<<"\t"<<"性別:"<<sex<<endl;
			cout<<"地址:"<<address<<endl;
			cout<<"獎金:"<<bonus<<endl;
			cout<<"本月稅後實際工資:"<<r_salary<<endl;
		}

		int getbonus() {
			return bonus;
		}


} ts[10000];

Temporary_staff::Temporary_staff() {
	number="";
	name="";
	sex="";
	address="";
	salary=0;
	bonus=0;
}

void Temporary_staff::gettax() {

	if (salary<5000) {
		tax=0;
	}
	if (salary>5000&&salary<41000) {
		tax=(salary-5000)*0.03;
	}
	if (salary>41000&&salary<149000) {
		tax=(salary-41000)*0.1+2520;
	}
	if (salary>149000&&salary<305000) {
		tax=(salary-149000)*0.2+16920;
	}
	if (salary>305000&&salary<425000) {
		tax=(salary-305000)*0.25+31920;
	}
	if (salary>425000&&salary<665000) {
		tax=(salary-425000)*0.3+52920;
	}
	if (salary>665000&&salary<965000) {
		tax=(salary-665000)*0.35+85920;
	}
	if (salary>965000) {
		tax=(salary-965000)*0.45+181920;
	}
}
Temporary_staff::Temporary_staff(string num,string na,string sex,string add,int salary,int bo ) : Staff(num ,na ,sex, add ,salary) {
	this->bonus = bo;
	gettax();
	r_salary =salary + bonus - tax;				//計算最終工資

}




void print_Begin() {
	printf("\n\t\t 職工工資管理系統\n\n");
	printf("**************************************************\n\n");
	printf("1 查找員工信息\n\n2 更新員工數據\n\n3 輸出員工信息\n\n4 關閉程式\n\n");
	printf("**************************************************\n\n");
	printf("請選擇:");
}

void loading() {
	printf("\n\n\t\tLoading......\n\n\n");
	printf(" ");
	for (int i = 1; i <= 40; ++i) {
		printf(".");
		Sleep(50); //延遲輸出
	}
	printf(" ");
}

void cls() { //清屏加修改顏色
	system("cls");
	system("color 0B");
}

void refresh() {
	cls();
	print_Begin();
}

int x=0;


void get_rstxt() {										//讀取員工的數據
	fstream f;
	f.open("Regular_staff.txt",ios::in);
	string num;
	string na;
	string sex;
	string add;
	int salary;
	int all ;
	int oap;
	int Hou;
	int med;
	int i;
	for(i=0; !f.eof(); i++) {
		f>>num>>na>>sex>>add>>salary>>all>>oap>>Hou>>med;
		rs[i].setnumber(num);
		rs[i].setname(na);
		rs[i].setsex(sex);
		rs[i].setaddress(add);
		rs[i].setsalary(salary);
		rs[i].setallowance(all);
		rs[i].setold_age_pension(oap);
		rs[i].setHousing_Fund(Hou);
		rs[i].setmedical_insurance(med);
		rs[i].gettax();
		rs[i].getr_salary();
	}
	x=i-1;
	f.close();
}

void find_name_r(string n) {							//通過員工姓名,查詢正式員工的數據
	get_rstxt();
	for(int i=0; i<=x; i++) {
		if(rs[i].getname()==n) {
			rs[i].display();
			cout<<endl;
			break;
		}
		if(i==x) {
			cout<<"抱歉,未查詢到該員工,請核實員工信息!"<<endl;
			break;
		}
	}

}


void find_number_r(string m) {							//通過編號查找員工
	get_rstxt();
	for(int i=0; i<x; i++) {
		if(rs[i].getnumber()==m) {
			rs[i].display();
			cout<<endl;
			break;
		}
		if(i==x-1) {
			cout<<"抱歉,未查詢到該員工,請核實員工信息!"<<endl;
			break;
		}
	}
}


void find_salary_r(double a,double b) {					//工資範圍 ,控制 a <= b  員工
	int num=0;
	get_rstxt();
	for(int i=0; i<x; i++) {
		if(rs[i].getreal()>=a&&rs[i].getreal()<=b) {
			rs[i].display();
			cout<<endl;
			num++;
		}
		if(i==x-1&&num==0) {
			cout<<"抱歉,未查詢到相應員工,請核實員工信息!"<<endl;
			break;
		}
	}
}


void modify_new_r() { 									//新增員工信息
	string num;
	string na;
	string sex;
	string add;
	int salary;
	int all ;
	int oap;
	int Hou;
	int med;
	cout<<"\n\n請輸入新員工的編號、姓名、性別、家庭地址、基礎工資、崗位津貼、養老金、住房公積金、醫療保險\n\n";
	cin>>num>>na>>sex>>add>>salary>>all>>oap>>Hou>>med;
	get_rstxt();
	for(int i=0; i<x; i++) {
		if(rs[i].getnumber()==num) {
			cout<<"\n編號重覆!請核實員工信息!";
			break;
		}
		if(i==x-1) {
			fstream f;
			f.open("Regular_staff.txt",ios::out|ios::app);
			f<<num<<" "<<na<<" "<<sex<<" "<<add<<" "<<salary<<" "<<all<<" "<<oap<<" "<<Hou<<" "<<med<<" ";
			f.close();
			cout<<"已將"<<na<<"加入系統名單!";
		}
	}

}


void modify_address_r(string num) { 					// 地址
	get_rstxt();
	for(int i=0; i<x; i++) {
		if(rs[i].getnumber()==num) {
			cout<<"已找到該員工,請輸入該員工新的家庭住址;"<<endl;
			string new_address;
			cin>>new_address;
			rs[i].setaddress(new_address);
			cout<<"修改成功!!"<<endl;
			break;
		}
		if(i==x-1) {
			cout<<"抱歉,未查詢到該員工,請核對員工信息!"<<endl;
			break;
		}
	}
	fstream  fc("Regular_staff.txt",ios::trunc);
	fc.close();
	fstream f;
	f.open("Regular_staff.txt",ios::out);
	for(int i=0; i<x; i++) {
		f<<rs[i].getnumber()<<" "<<rs[i].getname()<<" "<<rs[i].getsex()<<" "<<rs[i].getaddress()<<" "<<rs[i].getsalary()<<" "<<rs[i].getallowance()<<" "<<rs[i].getold_age_pension()<<" "<<rs[i].getHousing_Fund()<<" "<<rs[i].getmedical_insurance()<<" ";
	}
	f.close();
}


void modify_salary_r(string num) { 						//修改工資  清屏 重新輸入  
	get_rstxt();
	for(int i=0; i<x; i++) {
		if(rs[i].getnumber()==num) {
			cout<<"已找到該員工,請輸入該員工新的基礎工資;"<<endl;
			int new_salary;
			cin>>new_salary;
			rs[i].setsalary(new_salary);
			cout<<"修改成功!!"<<endl;
			break;
		}
		if(i==x-1) {
			cout<<"抱歉,未查詢到該員工,請核對員工信息!"<<endl;
			break;
		}
	}
	fstream  fc("Regular_staff.txt",ios::trunc);
	fc.close();
	fstream f;
	f.open("Regular_staff.txt",ios::out);
	for(int i=0; i<x; i++) {
		f<<rs[i].getnumber()<<" "<<rs[i].getname()<<" "<<rs[i].getsex()<<" "<<rs[i].getaddress()<<" "<<rs[i].getsalary()<<" "<<rs[i].getallowance()<<" "<<rs[i].getold_age_pension()<<" "<<rs[i].getHousing_Fund()<<" "<<rs[i].getmedical_insurance()<<" ";
	}
	f.close();
}

void print_num_r() {					//列印員工信息 
	get_rstxt();
	for(int i=0; i<x; i++) {
		cout<<endl<<"員工編號:"<<rs[i].getnumber()<<"  員工姓名:"<<rs[i].getname()<<endl<<endl;
		cout<<"員工地址:"<<rs[i].getaddress()<<endl<<endl;
		cout<<"員工性別:"<<rs[i].getsex()<<"  員工稅後實際工資:"<<rs[i].getreal()<<endl<<endl;
		cout<<"--------------------------------------------------------------------"<<endl;
	}
}


void print_num(int type) {
	int i,j,o = type;
	get_rstxt();
	Regular_staff temp_r;
	Temporary_staff temp_t;
	cout<<"按編號由低到高輸出:"<<endl<<"--------------------------------------------------------------------"<<endl;
// 	cout<<"按編號順序輸出:1.員工 2."<<endl<<"請輸入:"<<endl;
// 	cin>>o;
	switch(o) {
		case 1:

			for (j=0; j<x; j++) {
				for (i=0; i<x-j; i++) {
					if (rs[i].getnumber()>rs[i+1].getnumber()) {
						temp_r=rs[i];
						rs[i]=rs[i+1];
						rs[i+1]=temp_r;
					}
				}
			}
			print_num_r();
			break;
	}
}
void print_sequence(int type) {
	int i,j,o = type;
	get_rstxt();
	Regular_staff temp_r;
	Temporary_staff temp_t;
	cout<<"按工資由低到高輸出:"<<endl<<"--------------------------------------------------------------------"<<endl;
	switch(o) {
		case 1:

			for (j=0; j<x; j++) {
				for (i=0; i<x-j; i++) {
					if (rs[i].getreal()<rs[i+1].getreal()) {
						temp_r=rs[i];
						rs[i]=rs[i+1];
						rs[i+1]=temp_r;
					}
				}
			}
			print_num_r();
			break;
	}
}

void print_flashback(int type) {
	int i,j,o = type;
	get_rstxt();
	Regular_staff temp_r;
	Temporary_staff temp_t;
	cout<<"按工資由低到高輸出:"<<endl<<"--------------------------------------------------------------------"<<endl;
	switch(o) {
		case 1:

			for (j=0; j<x; j++) {
				for (i=0; i<x-j; i++) {
					if (rs[i].getreal()>rs[i+1].getreal()) {
						temp_r=rs[i];
						rs[i]=rs[i+1];
						rs[i+1]=temp_r;
					}
				}
			}
			print_num_r();
			break;
	}
}



int type=1;



void print_opt1() {
	printf("\n\t\t 1 查找員工信息\n\n");
	printf("**************************************************\n\n");
	printf("1 職工姓名\n\n2 職工編號\n\n3 工資介於a到b的職工\n\n");
	printf("**************************************************\n\n");
	printf("請選擇:");
}

void opt1() {

	string num1;
	while(1) {
		cls();
		print_opt1();
        cin>>num1;
		if(num1 == "1") {
			
			cls();
			cout <<"請輸入員工姓名:"<<endl;
			string n;
			cin >> n;
			cout<<endl;
			if(type == 1) {
				find_name_r(n);
			} 
			break;
		}
		if (num1 == "2") {
			
			cls();
			cout <<"請輸入員工編號:"<<endl;
			string n;
			cin >> n;
			cout<<endl;
			if(type == 1) {
				find_number_r(n);
			} 
			}
			break;
		}
		if (num1 == "3") {
			
			cls();
			cout <<"請輸入工資範圍(最小值和最大值):"<<endl;
			double a,b;
			cin >> a >> b;
			cout<<endl;
			if(a>b) {
				double temp;
				temp = a;
				a = b;
				b = temp;
			}
			if(type == 1) {
				find_salary_r(a,b);
			} 
		} else {
			printf("\n員工信息輸入錯誤!x_x\n請重試!");
			Sleep(1500);
		}
	}



void print_opt2() {
	printf("\n\t\t 2 更新員工數據\n\n");
	printf("**************************************************\n\n");
	printf("1 新增員工數據\n\n2 修改員工數據\n\n3 返回主界面\n\n");
	printf("**************************************************\n\n");
	printf("請選擇:");
}

void opt2() {

	string num2;
	while(1) {
		cls();
		print_opt2();
		cin >> num2;

		if(num2=="1") {
			cls();
			
			cls();
			if(type == 1) {
				modify_new_r();
			}
			break; 
		}

		if (num2 == "2") {
			cls();
		
			cls();
			printf("\n\n1 修改員工地址\n\n2 修改員工工資\n\n請選擇:");
			int n;
			cin >> n;
			cls();
			string m;
			printf("\n\n請輸入員工編號:");
			cin>>m;
			if(type ==1) {
				cls();
				if(n ==1) modify_address_r(m);
				if(n ==2) modify_salary_r(m);
			}

			break;
		}
		if(num2=="3") {
			cls();
			break;
		} else {
			cls();
			printf("\n輸入錯誤!x_x\n\n請重試\n\n");
			Sleep(1500);
			continue;
		}

	}
	
}



	void print_opt3() {
		printf("\n\t\t 3 輸出員工信息\n\n");
		printf("**************************************************\n\n");
		printf("1 按工資由高到低輸出 \n\n2 按工資由低到高輸出\n\n3 按編號輸出(低到高)\n\n4 返回主界面\n\n");
		printf("**************************************************\n\n");
		printf("請選擇:");
	}

	void opt3() {
		string num3;
		while(1) {
			cls();
			print_opt3();
			cin >> num3;
			if(num3 == "1") {
				cls();
				
				cls();
				print_sequence(type);
				break;
			}
			if(num3 == "2") {
				cls();
				
				cls();
				print_flashback(type);
				break;
			}
			if(num3 == "3") {
				cls();
				
				cls();
				print_num(type);
				break;
			}
			if(num3 == "4") {
				cls();
				break;
			} else {
				cls();
				cout<<"請輸入正確的選項!"<<endl;
				Sleep(1500);
				continue;
			}
		}

	}


	void opt4() {
		cls();
		printf("\n歡迎下次使用!再見^_^\n\n");
	}

	void opt_error() {
		printf("\n\n輸入錯誤!x_x\n\n請輸入正確選項!\n\n");
	}

	int main() {
		system("color 0B");
		loading();
		cls();
		print_Begin();
		string opt;
		int o;

		while(1) {
			cin >> opt;
			o=atoi(opt.c_str());
			switch(o) {
				case 1:
					opt1();
					system("pause");
					refresh();
					break;

				case 2:
					opt2();
					system("pause");
					refresh();
					break;

				case 3:
					opt3();
					system("pause");
					refresh();
					break;

				case 4:
					opt4();
					Sleep(500) ;
					return 0;

				default:
					cls();
					opt_error();
					system("pause");
					refresh();
					break;

			}
		}
	}
代碼二、
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;

class Staff {
	protected:
		string number;
		string name;
		string sex;
		string address;
		int salary;
		static int sum_salary; //總工資
		static int sum_member; //總員工人數
	public:
		Staff();
		Staff(string number,string name,string sex,string address,int salary);

		void print() {};
		void setnumber(string num) {
			number=num;
		}
		void setname(string na) {
			name=na;
		}
		void setsex(string se) {
			sex=se;
		}
		void setaddress(string add) {
			address=add;
		}
		void setsalary(int sa) {
			salary=sa;
		}

		int getsalary();
		string getname() {
			return name;
		}
		string getnumber() {
			return number;
		}
		string getsex() {
			return sex;
		}
		string getaddress() {
			return address;
		}
};

Staff::Staff() {
	number="";
	name="";
	sex="";
	address="";
	salary=0;
}


Staff::Staff(string number,string name,string sex,string address,int salary) {
	this->number = number;
	this->name = name;
	this->sex = sex;
	this->address = address;
	this->salary = salary;
}
int Staff::getsalary() {
	return salary;
}




class Regular_staff:public Staff {
	protected:
		int allowance; //崗位津貼
		int old_age_pension; //養老金
		int Housing_Fund; //住房公積金
		int medical_insurance; //醫療保險
		int tax;
		int r_salary; //實際工資
	public:
		Regular_staff();
		Regular_staff(string num,string na,string sex,string add,int salary,int all ,int oap, int Hou, int med);
		void getr_salary();										//計算實發工資
		void gettax();
		int getreal() {
			return r_salary;
		}
		void setallowance(int all) {
			allowance=all;
		}
		void setold_age_pension(int oap) {
			old_age_pension=oap;
		}
		void setHousing_Fund(int Hou) {
			Housing_Fund=Hou;
		}
		void setmedical_insurance(int med) {
			medical_insurance=med;
		}
		void display() {
			cout<<"員工編號:"<<number<<"\t"<<"姓名:"<<name<<"\t"<<"性別:"<<sex<<endl;
			cout<<"地址:"<<address<<endl;
			cout<<"崗位津貼:"<<allowance<<"\t"<<"養老金:"<<old_age_pension<<endl;
			cout<<"住房公積金:"<<Housing_Fund<<"\t"<<"醫療保險:"<<medical_insurance<<endl;
			cout<<"本月稅後實際工資:"<<r_salary<<endl;
		}

		int getallowance() {
			return allowance;
		}
		int getold_age_pension() {
			return old_age_pension;
		}
		int getHousing_Fund() {
			return Housing_Fund;
		}
		int getmedical_insurance() {
			return medical_insurance;
		}


} rs[10000];


Regular_staff::Regular_staff() {
	number="";
	name="";
	sex="";
	address="";
	salary=0;
	allowance=0;
	old_age_pension=0;
	Housing_Fund=0;
	medical_insurance=0;
}

void Regular_staff::gettax() {

	this->salary = getsalary();
	if (salary<5000) {
		tax=0;
	}
	if (salary>5000&&r_salary<41000) {
		tax=(salary-5000)*0.03;
	}
	if (salary>41000&&r_salary<149000) {
		tax=(salary-41000)*0.1+2520;
	}
	if (salary>149000&&r_salary<305000) {
		tax=(salary-149000)*0.2+16920;
	}
	if (salary>305000&&r_salary<425000) {
		tax=(salary-305000)*0.25+31920;
	}
	if (salary>425000&&r_salary<665000) {
		tax=(salary-425000)*0.3+52920;
	}
	if (salary>665000&&r_salary<965000) {
		tax=(salary-665000)*0.35+85920;
	}
	if (salary>965000) {
		tax=(salary-965000)*0.45+181920;
	}
}

Regular_staff::Regular_staff(string num,string na,string sex,string add,int salary,int all ,int oap, int Hou, int med) : Staff(num,na ,sex, add ,salary) {
	this->allowance = all;
	this->old_age_pension = oap;
	this->Housing_Fund = Hou;
	this->medical_insurance = med;
	gettax();
	r_salary = getsalary()+allowance-old_age_pension-Housing_Fund-medical_insurance-tax;

}
void Regular_staff::getr_salary() {
	r_salary = getsalary()+allowance-old_age_pension-Housing_Fund-medical_insurance-tax;
}





class Temporary_staff:public Staff {
	protected:
		int bonus; //獎金
		int tax;
		int r_salary; //實際工資
	public:
		Temporary_staff();
		Temporary_staff(string num,string na,string sex,string add,int salary,int bo );
		void gettax();
		int getr_salary();
		int getreal() {
			return r_salary;
		}
		void setbonus(int bo) {
			bonus=bo;
		}
		void display() {
			cout<<"員工編號:"<<number<<"\t"<<"姓名:"<<name<<"\t"<<"性別:"<<sex<<endl;
			cout<<"地址:"<<address<<endl;
			cout<<"獎金:"<<bonus<<endl;
			cout<<"本月稅後實際工資:"<<r_salary<<endl;
		}

		int getbonus() {
			return bonus;
		}


} ts[10000];

Temporary_staff::Temporary_staff() {
	number="";
	name="";
	sex="";
	address="";
	salary=0;
	bonus=0;
}

void Temporary_staff::gettax() {

	if (salary<5000) {
		tax=0;
	}
	if (salary>5000&&salary<41000) {
		tax=(salary-5000)*0.03;
	}
	if (salary>41000&&salary<149000) {
		tax=(salary-41000)*0.1+2520;
	}
	if (salary>149000&&salary<305000) {
		tax=(salary-149000)*0.2+16920;
	}
	if (salary>305000&&salary<425000) {
		tax=(salary-305000)*0.25+31920;
	}
	if (salary>425000&&salary<665000) {
		tax=(salary-425000)*0.3+52920;
	}
	if (salary>665000&&salary<965000) {
		tax=(salary-665000)*0.35+85920;
	}
	if (salary>965000) {
		tax=(salary-965000)*0.45+181920;
	}
}
Temporary_staff::Temporary_staff(string num,string na,string sex,string add,int salary,int bo ) : Staff(num ,na ,sex, add ,salary) {
	this->bonus = bo;
	gettax();
	r_salary =salary + bonus - tax;				//計算最終工資

}




void print_Begin() {
	printf("\n\t\t 職工工資管理系統\n\n");
	printf("**************************************************\n\n");
	printf("1 查找員工信息\n\n2 更新員工數據\n\n3 輸出員工信息\n\n4 關閉程式\n\n");
	printf("**************************************************\n\n");
	printf("請選擇:");
}

void loading() {
	printf("\n\n\t\tLoading......\n\n\n");
	printf(" ");
	for (int i = 1; i <= 40; ++i) {
		printf(".");
		Sleep(50); //延遲輸出
	}
	printf(" ");
}

void cls() { //清屏加修改顏色
	system("cls");
	system("color 0B");
}

void refresh() {
	cls();
	print_Begin();
}

int x=0;


void get_rstxt() {										//讀取正式員工的數據
	fstream f;
	f.open("Regular_staff.txt",ios::in);
	string num;
	string na;
	string sex;
	string add;
	int salary;
	int all ;
	int oap;
	int Hou;
	int med;
	int i;
	for(i=0; !f.eof(); i++) {
		f>>num>>na>>sex>>add>>salary>>all>>oap>>Hou>>med;
		rs[i].setnumber(num);
		rs[i].setname(na);
		rs[i].setsex(sex);
		rs[i].setaddress(add);
		rs[i].setsalary(salary);
		rs[i].setallowance(all);
		rs[i].setold_age_pension(oap);
		rs[i].setHousing_Fund(Hou);
		rs[i].setmedical_insurance(med);
		rs[i].gettax();
		rs[i].getr_salary();
	}
	x=i-1;
	f.close();
}
void get_tstxt() {										//讀取臨時員工的數據
	fstream f;
	f.open("Temporary_staff.txt",ios::in);
	string num;
	string na;
	string sex;
	string add;
	int salary;
	int bo;
	int i;
	for(i=0; f.eof(); i++) {
		f>>num>>na>>sex>>add>>salary>>bo;
		ts[i].setnumber(num);
		ts[i].setname(na);
		ts[i].setsex(sex);
		ts[i].setaddress(add);
		ts[i].setsalary(salary);
		ts[i].setbonus(bo);
	}
	x=i-1;
	f.close();
}

void find_name_r(string n) {							//通過員工姓名,查詢正式員工的數據
	get_rstxt();
	for(int i=0; i<=x; i++) {
		if(rs[i].getname()==n) {
			rs[i].display();
			cout<<endl;
			break;
		}
		if(i==x) {
			cout<<"抱歉,未查詢到該員工,請核實員工信息!"<<endl;
			break;
		}
	}

}

void find_name_t(string n) {							//通過員工姓名,查詢臨時員工的數據
	get_tstxt();
	for(int i=0; i<x; i++) {
		if(ts[i].getname()==n) {
			ts[i].display();
			cout<<endl;
			break;
		}
		if(i==x-1) {
			cout<<"抱歉,未查詢到該員工,請核實員工信息!"<<endl;
			break;
		}
	}
}

void find_number_r(string m) {							//通過編號查找 正式 員工
	get_rstxt();
	for(int i=0; i<x; i++) {
		if(rs[i].getnumber()==m) {
			rs[i].display();
			cout<<endl;
			break;
		}
		if(i==x-1) {
			cout<<"抱歉,未查詢到該員工,請核實員工信息!"<<endl;
			break;
		}
	}
}

void find_number_t(string m) {							//通過編號查找 臨時 員工
	get_tstxt();
	for(int i=0; i<x; i++) {
		if(ts[i].getnumber()==m) {
			ts[i].display();
			cout<<endl;
			break;
		}
		if(i==x-1) {
			cout<<"抱歉,未查詢到該員工,請核實員工信息!"<<endl;
			break;
		}
	}
}

void find_salary_r(double a,double b) {					//工資範圍 ,控制 a <= b  正式員工
	int num=0;
	get_rstxt();
	for(int i=0; i<x; i++) {
		if(rs[i].getreal()>=a&&rs[i].getreal()<=b) {
			rs[i].display();
			cout<<endl;
			num++;
		}
		if(i==x-1&&num==0) {
			cout<<"抱歉,未查詢到相應員工,請核實員工信息!"<<endl;
			break;
		}
	}
}

void find_salary_t(double a,double b) {					//工資範圍 , 同上
	int num=0;
	get_tstxt();
	for(int i=0; i<x; i++) {
		if(ts[i].getreal()>=a&&ts[i].getreal()<=b) {
			ts[i].display();
			cout<<endl;
			num++;
		}
		if(i==x-1&&num==0) {
			cout<<"抱歉,未查詢到相應員工,請核實員工信息!"<<endl;
			break;
		}
	}
}

void modify_new_r() { 									//新增員工信息
	string num;
	string na;
	string sex;
	string add;
	int salary;
	int all ;
	int oap;
	int Hou;
	int med;
	cout<<"\n\n請輸入新正式員工的編號、姓名、性別、家庭地址、基礎工資、崗位津貼、養老金、住房公積金、醫療保險\n\n";
	cin>>num>>na>>sex>>add>>salary>>all>>oap>>Hou>>med;
	get_rstxt();
	for(int i=0; i<x; i++) {
		if(rs[i].getnumber()==num) {
			cout<<"\n編號重覆!請核實員工信息!";
			break;
		}
		if(i==x-1) {
			fstream f;
			f.open("Regular_staff.txt",ios::out|ios::app);
			f<<num<<" "<<na<<" "<<sex<<" "<<add<<" "<<salary<<" "<<all<<" "<<oap<<" "<<Hou<<" "<<med<<" ";
			f.close();
			cout<<"已將"<<na<<"加入系統名單!";
		}
	}

}

void modify_new_t() {
	string num;
	string na;
	string sex;
	string add;
	int salary;
	int bo;
	cout<<"請輸入新臨時員工的編號、姓名、性別、家庭地址、基礎工資、獎金";
	cin>>num>>na>>sex>>add>>salary>>bo;
	get_tstxt();
	for(int i=0; i<x; i++) {
		if(ts[i].getnumber()==num) {
			cout<<"\n編號重覆!請核實員工信息!";
			break;
		}
		if(i==x-1) {
			fstream f;
			f.open("Temporary_staff.txt",ios::out|ios::app) ;
			f<<num<<" "<<na<<" "<<sex<<" "<<add<<" "<<salary<<" "<<bo<<" ";
			f.close();
			cout<<"已將"<<na<<"加入系統名單!";
		}
	}

}

void modify_address_r(string num) { 					//正式 地址
	get_rstxt();
	for(int i=0; i<x; i++) {
		if(rs[i].getnumber()==num) {
			cout<<"已找到該員工,請輸入該員工新的家庭住址;"<<endl;
			string new_address;
			cin>>new_address;
			rs[i].setaddress(new_address);
			cout<<"修改成功!!"<<endl;
			break;
		}
		if(i==x-1) {
			cout<<"抱歉,未查詢到該員工,請核對員工信息!"<<endl;
			break;
		}
	}
	fstream  fc("Regular_staff.txt",ios::trunc);
	fc.close();
	fstream f;
	f.open("Regular_staff.txt",ios::out);
	for(int i=0; i<x; i++) {
		f<<rs[i].getnumber()<<" "<<rs[i].getname()<<" "<<rs[i].getsex()<<" "<<rs[i].getaddress()<<" "<<rs[i].getsalary()<<" "<<rs[i].getallowance()<<" "<<rs[i].getold_age_pension()<<" "<<rs[i].getHousing_Fund()<<" "<<rs[i].getmedical_insurance()<<" ";
	}
	f.close();
}


void modify_address_t(string num) {
	get_tstxt();
	for(int i=0; i<x; i++) {
		if(ts[i].getnumber()==num) {
			cout<<"已找到該員工,請輸入該員工新的家庭住址;"<<endl;
			string new_address;
			cin>>new_address;
			ts[i].setaddress(new_address);
			cout<<"修改成功!!"<<endl;
			break;
		}
		if(i==x-1) {
			cout<<"抱歉,未查詢到該員工,請核對員工信息!"<<endl;
			break;
		}
	}
	fstream  fc("Temporary_staff.txt",ios::trunc);
	fc.close();
	fstream f;
	f.open("Temporary_staff.txt",ios::out);
	for(int i=0; i<x; i++) {
		f<<ts[i].getnumber()<<" "<<ts[i].getname()<<" "<<ts[i].getsex()<<" "<<ts[i].getaddress()<<" "<<ts[i].getsalary()<<" "<<ts[i].getbonus()<<" ";
	}
	f.close();
}

void modify_salary_r(string num) { 						//修改工資  清屏 重新輸入  正式
	get_rstxt();
	for(int i=0; i<x; i++) {
		if(rs[i].getnumber()==num) {
			cout<<"已找到該員工,請輸入該員工新的基礎工資;"<<endl;
			int new_salary;
			cin>>new_salary;
			rs[i].setsalary(new_salary);
			cout<<"修改成功!!"<<endl;
			break;
		}
		if(i==x-1) {
			cout<<"抱歉,未查詢到該員工,請核對員工信息!"<<endl;
			break;
		}
	}
	fstream  fc("Regular_staff.txt",ios::trunc);
	fc.close();
	fstream f;
	f.open("Regular_staff.txt",ios::out);
	for(int i=0; i<x; i++) {
		f<<rs[i].getnumber()<<" "<<rs[i].getname()<<" "<<rs[i].getsex()<<" "<<rs[i].getaddress()<<" "<<rs[i].getsalary()<<" "<<rs[i].getallowance()<<" "<<rs[i].getold_age_pension()<<" "<<rs[i].getHousing_Fund()<<" "<<rs[i].getmedical_insurance()<<" ";
	}
	f.close();
}

void modify_salary_t(string num) {
	get_tstxt();
	for(int i=0; i<x; i++) {
		if(ts[i].getnumber()==num) {
			cout<<"已找到該員工,請輸入該員工新的基礎工資;"<<endl;
			int new_salary;
			cin>>new_salary;
			ts[i].setsalary(new_salary);
			cout<<"修改成功!!"<<endl;
			break;
		}
		if(i==x-1) {
			cout<<"抱歉,未查詢到該員工,請核對員工信息!"<<endl;
			break;
		}
	}
	fstream  fc("Temporary_staff.txt",ios::trunc);
	fc.close();
	fstream f;
	f.open("Temporary_staff.txt",ios::out);
	for(int i=0; i<x; i++) {
		f<<ts[i].getnumber()<<" "<<ts[i].getname()<<" "<<ts[i].getsex()<<" "<<ts[i].getaddress()<<" "<<ts[i].getsalary()<<" "<<ts[i].getbonus()<<" ";
	}
	f.close();
}

void print_num_r() {					//列印員工信息 正式
	get_rstxt();
	for(int i=0; i<x; i++) {
		cout<<endl<<"員工編號:"<<rs[i].getnumber()<<"  員工姓名:"<<rs[i].getname()<<endl<<endl;
		cout<<"員工地址:"<<rs[i].getaddress()<<endl<<endl;
		cout<<"員工性別:"<<rs[i].getsex()<<"  員工稅後實際工資:"<<rs[i].getreal()<<endl<<endl;
		cout<<"--------------------------------------------------------------------"<<endl;
	}
}

void print_num_t() {
	get_tstxt();
	for(int i=0; i<x; i++) {
		cout<<endl<<"員工編號:"<<ts[i].getnumber()<<"  員工姓名:"<<ts[i].getname()<<endl<<endl;
		cout<<"員工地址:"<<ts[i].getaddress()<<endl<<endl;
		cout<<"員工性別:"<<ts[i].getsex()<<"  員工稅後實際工資:"<<ts[i].getreal()<<endl<<endl;
		cout<<"--------------------------------------------------------------------"<<endl;
	}
}

void print_num(int type) {
	int i,j,o = type;
	get_rstxt();
	get_tstxt();
	Regular_staff temp_r;
	Temporary_staff temp_t;
	cout<<"按編號由低到高輸出:"<<endl<<"--------------------------------------------------------------------"<<endl;
// 	cout<<"按編號順序輸出:1.正式員工 2.臨時員工"<<endl<<"請輸入:"<<endl;
// 	cin>>o;
	switch(o) {
		case 1:

			for (j=0; j<x; j++) {
				for (i=0; i<x-j; i++) {
					if (rs[i].getnumber()>rs[i+1].getnumber()) {
						temp_r=rs[i];
						rs[i]=rs[i+1];
						rs[i+1]=temp_r;
					}
				}
			}
			print_num_r();
			break;
		case 2:

			for (j=0; j<x; j++) {
				for (i=0; i<x-j; i++) {
					if (ts[i].getnumber()>ts[i+1].getnumber()) {
						temp_t=ts[i];
						ts[i]=ts[i+1];
						ts[i+1]=temp_t;
					}
				}
			}
			print_num_t();
			break;
	}
}
void print_sequence(int type) {
	int i,j,o = type;
	get_rstxt();
	get_tstxt();
	Regular_staff temp_r;
	Temporary_staff temp_t;
	cout<<"按工資由低到高輸出:"<<endl<<"--------------------------------------------------------------------"<<endl;
//	cout<<"按工資由高到低輸出:1.固定員工 2.臨時員工"<<endl<<"請輸入:"<<endl;
//	cin>>o;
	switch(o) {
		case 1:

			for (j=0; j<x; j++) {
				for (i=0; i<x-j; i++) {
					if (rs[i].getreal()<rs[i+1].getreal()) {
						temp_r=rs[i];
						rs[i]=rs[i+1];
						rs[i+1]=temp_r;
					}
				}
			}
			print_num_r();
			break;
		case 2:

			for (j=0; j<x; j++) {
				for (i=0; i<x-j; i++) {
					if (ts[i].getreal()<ts[i+1].getreal()) {
						temp_t=ts[i];
						ts[i]=ts[i+1];
						ts[i+1]=temp_t;
					}
				}
			}
			print_num_t();
			break;
	}
}

void print_flashback(int type) {
	int i,j,o = type;
	get_rstxt();
	get_tstxt();
	Regular_staff temp_r;
	Temporary_staff temp_t;
	cout<<"按工資由低到高輸出:"<<endl<<"--------------------------------------------------------------------"<<endl;
//	cout<<"按工資由低到高輸出:1.固定員工 2.臨時員工"<<endl<<"請輸入:"<<endl;
//	cin>>o;
	switch(o) {
		case 1:

			for (j=0; j<x; j++) {
				for (i=0; i<x-j; i++) {
					if (rs[i].getreal()>rs[i+1].getreal()) {
						temp_r=rs[i];
						rs[i]=rs[i+1];
						rs[i+1]=temp_r;
					}
				}
			}
			print_num_r();
			break;
		case 2:

			for (j=0; j<x; j++) {
				for (i=0; i<x-j; i++) {
					if (ts[i].getreal()>ts[i+1].getreal()) {
						temp_t=ts[i];
						ts[i]=ts[i+1];
						ts[i+1]=temp_t;
					}
				}
			}
			print_num_t();
			break;
	}
}



int type;

void charge_type() {
	while(1) {
		cls();
		printf("請選擇職工類型\n\n1 正式職工\n\n2 臨時職工\n\n");		//輸入職工類型
		cin >>type;
		if(type != 1 && type !=2) {				//判斷類型是否輸入合法
			cls();
			printf("\n職工類型輸入錯誤!x_x\n請重試!");
			Sleep(1500);
			continue;
		} else break;
	}
}


void print_opt1() {
	printf("\n\t\t 1 查找員工信息\n\n");
	printf("**************************************************\n\n");
	printf("1 職工姓名\n\n2 職工編號\n\n3 工資介於a到b的職工\n\n");
	printf("**************************************************\n\n");
	printf("請選擇:");
}

void opt1() {

	string num1;
	while(1) {
		cls();
		print_opt1();
        cin>>num1;
		if(num1 == "1") {
			charge_type();
			cls();
			cout <<"請輸入員工姓名:"<<endl;
			string n;
			cin >> n;
			cout<<endl;
			if(type == 1) {
				find_name_r(n);
			} else if(type == 2) {
				find_name_t(n);
			}
			break;
		}
		if (num1 == "2") {
			charge_type();
			cls();
			cout <<"請輸入員工編號:"<<endl;
			string n;
			cin >> n;
			cout<<endl;
			if(type == 1) {
				find_number_r(n);
			} else if(type == 2) {
				find_number_t(n);
			}
			break;
		}
		if (num1 == "3") {
			charge_type();
			cls();
			cout <<"請輸入工資範圍(最小值和最大值):"<<endl;
			double a,b;
			cin >> a >> b;
			cout<<endl;
			if(a>b) {
				double temp;
				temp = a;
				a = b;
				b = temp;
			}
			if(type == 1) {
				find_salary_r(a,b);
			} else if(type == 2) {
				find_salary_t(a,b);
			}
			break;
		} else {
			printf("\n員工信息輸入錯誤!x_x\n請重試!");
			Sleep(1500);
			continue;
		}
	}

}


void print_opt2() {
	printf("\n\t\t 2 更新員工數據\n\n");
	printf("**************************************************\n\n");
	printf("1 新增員工數據\n\n2 修改員工數據\n\n3 返回主界面\n\n");
	printf("**************************************************\n\n");
	printf("請選擇:");
}

void opt2() {

	string num2;
	while(1) {
		cls();
		print_opt2();
		cin >> num2;

		if(num2=="1") {
			cls();
			charge_type();
			cls();
			if(type == 1) {
				modify_new_r();
			}
			if(type == 2) {
				modify_new_t();
			}
			break;
		}

		if (num2 == "2") {
			cls();
			charge_type();
			cls();
			printf("\n\n1 修改員工地址\n\n2 修改員工工資\n\n請選擇:");
			int n;
			cin >> n;
			cls();
			string m;
			printf("\n\n請輸入員工編號:");
			cin>>m;
			if(type ==1) {
				cls();
				if(n ==1) modify_address_r(m);
				if(n ==2) modify_salary_r(m);
			}
			if(type ==2) {
				cls();
				if(n ==1) modify_address_t(m);
				if(n ==2) modify_salary_t(m);
			}
			break;
		}
		if(num2=="3") {
			cls();
			break;
		} else {
			cls();
			printf("\n輸入錯誤!x_x\n\n請重試\n\n");
			Sleep(1500);
			continue;
		}

	}
	
}



	void print_opt3() {
		printf("\n\t\t 3 輸出員工信息\n\n");
		printf("**************************************************\n\n");
		printf("1 按工資由高到低輸出 \n\n2 按工資由低到高輸出\n\n3 按編號輸出(低到高)\n\n4 返回主界面\n\n");
		printf("**************************************************\n\n");
		printf("請選擇:");
	}

	void opt3() {
		string num3;
		while(1) {
			cls();
			print_opt3();
			cin >> num3;
			if(num3 == "1") {
				cls();
				charge_type();
				cls();
				print_sequence(type);
				break;
			}
			if(num3 == "2") {
				cls();
				charge_type();
				cls();
				print_flashback(type);
				break;
			}
			if(num3 == "3") {
				cls();
				charge_type();
				cls();
				print_num(type);
				break;
			}
			if(num3 == "4") {
				cls();
				break;
			} else {
				cls();
				cout<<"請輸入正確的選項!"<<endl;
				Sleep(1500);
				continue;
			}
		}

	}


	void opt4() {
		cls();
		printf("\n歡迎下次使用!再見^_^\n\n");
	}

	void opt_error() {
		printf("\n\n輸入錯誤!x_x\n\n請輸入正確選項!\n\n");
	}

	int main() {
		system("color 0B");
		loading();
		cls();
		print_Begin();
		string opt;
		int o;

		while(1) {
			cin >> opt;
			o=atoi(opt.c_str());
			switch(o) {
				case 1:
					opt1();
					system("pause");
					refresh();
					break;

				case 2:
					opt2();
					system("pause");
					refresh();
					break;

				case 3:
					opt3();
					system("pause");
					refresh();
					break;

				case 4:
					opt4();
					Sleep(500) ;
					return 0;

				default:
					cls();
					opt_error();
					system("pause");
					refresh();
					break;

			}
		}
	}

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

-Advertisement-
Play Games
更多相關文章
  • OneAPM 摘要:此篇文章主要介紹Java8 Lambda 表達式產生的背景和用法,以及 Lambda 表達式與匿名類的不同等。本文系OneAPM工程師編譯整理。 Java是一流的面向對象語言,除了部分簡單數據類型,Java 中的一切都是對象,即使數組也是一種對象,每個類創建的實例也是對象。在 J ...
  • 在企業的商業活動中,訂單是指交易雙方的產品或服務交易意向。交易下單負責創建這個交易雙方的產品或服務交易意向,有了這個意向後,買方可以付款,賣方可以發貨。 在電商場景下,買賣雙方沒有面對面交易,許多情況下需要通過超時處理自動關閉訂單 ...
  • 1. 編譯閾值 1.1. 一旦代碼執行到一定次數,就達到了它的編譯閾值,編譯器就會認為它有足夠的信息來編譯代碼 1.2. 在當前的JVM中,優化閾值的意義不大 1.2.1. 從JDK 7以及更早期遺留下來的 1.3. -XX:CompileThreshold=N 1.3.1. 當禁用分層編譯時有效 ...
  • 0. RSocket 簡介 採用二進位點對點數據傳輸,主要應用於分散式架構之中,是一種基於Reactive Stream規範標準實現的新的通信協議。 參考阿裡雲開發者社區的介紹 相關文檔和資料: RSocket By Example rsocket-java 原生庫例子 Spring RSocket ...
  • 環境 odoo-14.0.post20221212.tar context用法總結 獲取上下文 >>> self.env.context # 返回字典數據,等價於 self._context {'lang': 'en_US', 'tz': 'Europe/Brussels'} >>> self._c ...
  • Qt 學習筆記全系列傳送門: 【本章】Qt 學習筆記 - 第一章 - 快速開始、信號與槽 Qt 學習筆記 - 第二章 - 添加圖片、佈局、界面切換 1、Qt 工程創建 使用 Qt Creator 創建 Qt 工程,不能包含中文目錄 2、工程文件(pro 文件) # # # Project creat ...
  • 項目實現01 1.功能01-搭建Vue前端工程 1.1需求分析 使用Vue3的腳手架vue-cli工具,創建ssm的前端項目基礎開發環境 Vue-cli主要的功能是自動生成Vue的項目模板,提高開發效率 1.2代碼實現 1.2.1搭建vue工程 以下命令使用管理員許可權 (1)先下載node.js L ...
  • VL45 非同步FIFO 很經典的手撕題,這道題要求產生的格雷碼要在本時鐘域中打一拍,其實不打也沒關係。 主要要記住 1、bin2gray的方法:右移一位與移位前異或; 2、格雷碼比較方法:空:讀指針格雷碼和寫指針同步過來的格雷碼相同;滿:寫指針格雷碼高兩位與讀指針同步過來的格雷碼正好相反,低位相同。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...