C語言教師工資管理課設 求助

weixin_50471399發表於2020-12-17

課程名稱:程式設計基礎(課程設計)
實驗學時:一週
適用專業:計算機類
資訊管理與資訊系統
開設學院:資訊學院

一、總體介紹

  1. 專案名稱:高校教師工資管理系統

  2. 專案簡介:
    完成高等院校教師工資管理軟體開發。教師的基本資訊包括:工號、姓名、學院、職稱,職稱分為:教授、副教授、講師、助教。教師的工資資訊包括:工號、月份、基本工資、業績津貼、扣除費用、應發工資、實發工資,不同職稱教師的基本工資、業績津貼、扣除費用不同。
    二、具體要求

  3. 系統功能要求
    以選單的方式完成以下功能。
    高校教師工資管理系統
    1 錄入 並儲存 錄入教師的基本資訊
    錄入教師的工資資訊
    2 修改資料並儲存
    (難點) 根據工號修改某位教師的基本資訊和工資資訊
    根據姓名修改某位教師的基本資訊和工資資訊
    刪除某一工號的教師的所有資訊
    3 查詢顯示 顯示所有教師的基本資訊(以工號為序)
    根據月份顯示所有教師當月工資資訊(以工號為序)
    根據工號查詢某位教師某一月份的基本資訊和工資資訊
    根據姓名查詢某位教師某一月份的基本資訊和工資資訊
    4 統計分析 根據月份,統計不同學院教師的平均應發工資和平均實發工資(以實發工資為序顯示)
    根據月份,統計不同職稱教師的平均應發工資和平均實發工資(以應發工資為序顯示)
    5 退出 提示退出

  4. 各項功能要求
    (1)錄入資料並儲存
    進入二級選單:
    (a)錄入教師基本資訊:提示使用者輸入基本資訊,並儲存。注意要有查重,同一工號的教師不能出現兩次。(查重是難點)
    (b)錄入教師工資資訊:顯示所有教師基本資訊。提示使用者輸入已有教師工號,然後提示輸入月份等工資資訊,並計算應發工資和實發工資後儲存。注意要有查重,同一工號的教師不能出現兩次。(判斷是否為已有教師資訊,查重是難點。)
    (2)修改資料並儲存
    進入二級選單:
    (a)提示輸入工號:顯示該工號教師的所有資訊。提示輸入要修改的月份和資訊,輸入新資料後,儲存資料,並替換掉舊資料。
    (b)提示輸入姓名:顯示所有該同名教師的所有資訊。提示輸入要修改的教師工號和月份,提示輸入要修改的資訊,輸入新資料後,儲存資料,並替換掉舊資料。
    (c)提示輸入要刪除的工號,兩次確認後刪除該工號教師的基本資訊和工資資料,並更新資料檔案。
    (3)查詢顯示
    進入二級選單:
    (a)顯示所有教師的基本資訊,按照工號從小到大列表顯示。
    (b)提示輸入月份,顯示當月所有教師的工資資訊,按照工號從小到大列表顯示。
    (c)提示輸入工號和月份,顯示該工號教師的基本資訊和當月工資資訊。
    (d)提示輸入姓名和月份,顯示所有同名教師的基本資訊和當月工資資訊。
    (4)統計分析
    進入二級選單:
    (a)提示輸入月份,根據月份,統計不同學院教師的平均應發工資和平均實發工資(以實發工資為序顯示)。
    (b)提示輸入月份,根據月份,統計不同職稱教師的平均應發工資和平均實發工資(以應發工資為序顯示)。
    (5)退出
    提示使用者確實要退出?y/n
    使用者輸入y後退出。

  5. 程式設計要求
    (1)要合理使用列舉(選)、結構體、結構體陣列、結構體指標訪問陣列。
    (2)邏輯獨立的功能定義在函式中。
    (3)要有合理提示,例如修改、刪除需提示確認。
    (4)考慮程式魯棒性,對不合法資料要有錯誤處理機制。
    (5)所有資料儲存在檔案中。
    二、課程設計報告
    課程設計報告請參照“實習報告書模板.docx”填寫。
    三、提交時間與地址

  6. 截止時間:第十四周週五晚20:00。

  7. 完成後,將原始檔、設計報告壓縮後,重新命名為學號_姓名_課程設計.zip(或.rar)。

  8. 提交地址:課程作業/程式設計基礎/課程設計中的各班資料夾。
    四、時間安排
    第1天 分析與設計
    根據課程設計的要求,理解專案任務,明確相關演算法,蒐集可用資源,熟悉開發環境。
    設計包括邏輯設計和詳細設計,在這個過程中,要綜合考慮系統功能,使得系統結構清晰、合理、簡單和易於除錯。
    (1)資料結構設計:將工程問題涉及的資料抽象出來,選取合適的資料型別與資料結構。
    (2)模組設計:自頂向下,將工程問題對應的功能抽象成模組,定義各模組涉及的函式,定義函式的功能、引數、返回值及型別等。
    (3)演算法設計:複雜問題需選取合適的演算法,必要時查閱文獻,分析並給出合理的演算法解決方案。
    第2-3天 程式碼編寫
    熟練使用開發環境,把詳細設計的結果進一步求精為程式設計語言程式,同時加入一些註解,使程式的邏輯概念清楚。
    第4天 程式碼除錯與測試
    (1)設計測試用例,用以驗證程式邏輯結構正確性與程式魯棒性。
    (2)熟練掌握除錯工具的各種功能,確定疑點,通過修改程式來證實它或繞過它。除錯正確後,認真整理源程式及其註釋,形成格式和風格良好的源程式清單和結果。
    第5天 結果分析
    程式執行結果包括正確的輸入及其輸出結果和含有錯誤的輸入及其輸出結果。撰寫課程設計報告,提交源程式和報告。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
struct Month
{	
	int months[13];
	float basic_salary;//基本工資 
	float allowance;//業績津貼 
	float deducting;//扣除費用 
	float total;//應發工資 
	float actual;//實發工資 
};
struct Teacher//宣告儲存教師的基本資訊 
{
	int gh;//工號
	struct Month month;//月份 
	char name[20];//姓名 
	char address[20];//學院 
	char title[20];//職稱
}; 

	int num=0;
	FILE *fp;
	void main_menu(struct Teacher tea[],int io);//第一欄目——錄入儲存 
	void read_from_file(struct Teacher tea[],int io);
	void input_t(struct Teacher tea[],int io);
	void xg_menu(struct Teacher tea[],int io);//第二欄目——修改 
	void xgbygh(struct Teacher tea[],int io);
	void xgbyname(struct Teacher tea[],int io);
	void delete_all(struct Teacher tea[],int io);
	void search_menu(struct Teacher tea[],int io);//第三欄目——查詢顯示 
	void show_all(struct Teacher tea[],int io);
	void show_allbm(struct Teacher tea[],int io);
	void search_gh(struct Teacher tea[],int io);
	void search_name(struct Teacher tea[],int io);
	void cout_menu(struct Teacher tea[],int io);//第四欄目——統計分析 
	void coutbyaddress(struct Teacher tea[],int io);
	void coutbytitle(struct Teacher tea[],int io);
	void saveae_file(struct Teacher tea[],int io);//第五欄目——儲存、退出 


int main()
{
	struct Teacher tea[130];
	struct Teacher *t;
	t=tea;
	read_from_file(tea,130);
	while(1)
	{
		main_menu(tea,130);
	}
	return 0;
} 

void main_menu(struct Teacher tea[],int io)//目錄 
{
	char choice;
	system("cls");
	printf("\n\t***************歡迎來到教師工資管理系統***************\t\n");
	printf("\n\t請您輸入選單之前的數字跳轉進入子選單\t\n");
    printf("\t---------------[1]錄入教師資訊並儲存---------------\n");
	printf("\t---------------[2]修改(刪除)教師資訊並儲存---------------\n");
	printf("\t---------------[3]查詢教師資訊---------------\n");
	printf("\t---------------[4]統計並分析教師資訊---------------\n");
	printf("\t---------------[5]退出-----------------\n");
	printf("\t**********************************************\n");
	printf("\t請選擇:");
	choice=getch();
	switch(choice)
	{
		case'1':input_t(tea,130);break;
        case'2':xg_menu(tea,130);break;
		case'3':search_menu(tea,130);;break;
		case'4':cout_menu(tea,130);break;
        case'5':saveae_file(tea,130);break;
        default:main_menu(tea,130);
	} 
}

void read_from_file(struct Teacher tea[],int io)//建立資料檔案 
{
	
	if((fp=fopen("F:\\teacher.txt","r"))==NULL)
	{
		printf("\n教師工資資訊檔案不存在!\n");	
		exit(0);
		if((fp=fopen("F:\\teacher.txt","w"))==NULL)
		{
			printf("\t建立失敗\n");
			exit(0);
		}
		else
		{
			printf("\t建立成功!\n");
			printf("\t按任意鍵返回主選單");
			getch();
			return;
		}
		
	}
	fseek(fp,0,0);
	if(ftell(fp)>0)      
	{	
		rewind(fp);
		for(num=0;!feof(fp)&&fread(&tea[num],sizeof(struct Teacher),1,fp);num++);
		{
		printf("\n\t檔案匯入成功\n");
    	printf("\t按任意鍵返回主選單\n");
		}
		getch();
		return;
	}
	printf("\t------歡迎使用教師工資資訊管理系統------\n");
	printf("\t      檔案匯入成功      \n");
	printf("\t      教師工資資訊檔案中無任何記錄      \n");
	printf("\t      按任意鍵返回主選單      \n");
	printf("\t----------------------------------\n");
	getch();
	return;
}


void saveae_file(struct Teacher tea[],int io)//第五 儲存並退出檔案 
{
	int i;
	if((fp=fopen("F:\\teacher.txt","r"))==NULL)
	printf("\t開啟檔案失敗\n");
	for(i=0;i<=num;i++)
	{
		if(fwrite(&tea[i],sizeof(struct Teacher),1,fp)!=1)
		printf("\t檔案寫入錯誤!\n");
	} 
	fclose(fp);
	  printf("\n\t------------------------\n");
      printf("\t教師工資資訊檔案已儲存\n");
	  printf("\t謝謝使用,歡迎再次使用!");
	  printf("\n\t按任意鍵退出程式\n\t");
	  exit(0);
	  printf("\n\t------------------------\n");
}


void input_t(struct Teacher tea[],int io)//第一 錄入資料並儲存
{
	FILE *fp1=fopen("F:\\teacher.txt","a+");
	
	
	printf("請輸入教師的基本資訊和工資資訊:\n");
	printf("\n請輸入教師的工號:");
	gets((char*)&tea[num].gh);
	fputs((char*)&tea[num].gh,fp1);
	
	printf("\n請輸入教師的姓名:");
	gets(tea[num].name);
	fputs(tea[num].name,fp1);
	 

	printf("\n請輸入教師的學院(資訊學院1、工學院2、理學院3、人文學院4、生物學院5):");
	gets((char*)&tea[num].address);
	fputs((char*)&tea[num].address,fp1);
	
	printf("\n請輸入教師的職稱(教授1,副教授2,講師3,助教4):");
	gets((char*)&tea[num].title);
	fputs((char*)&tea[num].title,fp1);

	printf("\n請輸入月份:");
	gets((char*)&tea[num].month);
	fputs((char*)&tea[num].month,fp1);
	
	printf("\n請輸入基本工資:");
	gets((char*)&tea[num].month.basic_salary);
	fputs((char*)&tea[num].month.basic_salary,fp1);
	
	printf("\n請輸入業務津貼:");
	gets((char*)&tea[num].month.allowance);
	fputs((char*)&tea[num].month.allowance,fp1);
	
	printf("\n請輸入扣除費用:");
	gets((char*)&tea[num].month.deducting);
	fputs((char*)&tea[num].month.deducting,fp1);
	
	tea[num].month.total=tea[num].month.basic_salary+tea[num].month.allowance;
	tea[num].month.actual=tea[num].month.total-tea[num].month.deducting;
	num++;
	printf("\n是否繼續新增?(y/n)");
	if(getch()=='y')
		input_t(tea,130);
	fclose(fp1);
	
	return;
}

void search_menu(struct Teacher tea[],int io)//查詢顯示 
{
	char choice;
	system("cls");
	printf("\n\t------歡迎來到'查詢顯示'選單------\n");
	printf("\t------[1]顯示所有的資訊--------\n");
	printf("\t------[2]按月份查詢------\n");
	printf("\t------[3]按工號查詢------\n");
	printf("\t------[4]按姓名查詢------\n");
	printf("\t------[5]返回主選單------\n");
	printf("\t*****************************\n");
	printf("\t請選擇:");
	choice=getch();
	switch(choice)
	{
		case'1':show_all(tea,130);break;
		case'2':show_allbm(tea,130);break;
		case'3':search_gh(tea,130);break;
		case'4':search_name(tea,130);break;
		case'5':main_menu(tea,130);break;
		default:printf("輸入錯誤請重新輸入\n"); 
	}
}



void show_all(struct Teacher tea[],int io)
{
	int q=0;
	FILE *fp1;
	if((fp1=fopen("F:\\teacher.txt","r+"))==NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	int i;
	int j;
	char xm,xy,zc;
	float jb,yw,kc,yf,sf;
	char k;
	char l;

	if(num!=0)
	{
		for(i=0;i<num;i++)
		{
			fread(&tea[q],sizeof(struct Teacher),1,fp1);
			if(tea[i].gh>tea[i+1].gh)
			{
				j=tea[i+1].gh;
				tea[i].gh=tea[i+1].gh;
				tea[i+1].gh=j;
				xm=*tea[i+1].name;
				*tea[i].name=*tea[i+1].name;
				*tea[i+1].name=xm;
				xy=*tea[i+1].address;
				*tea[i].address=*tea[i+1].address;
				*tea[i+1].address=xy;
				zc=*tea[i+1].title;
				*tea[i].title=*tea[i+1].title;
				*tea[i+1].title=zc;
				jb=tea[i+1].month.basic_salary;
				tea[i].month.basic_salary=tea[i+1].month.basic_salary;
				tea[i+1].month.basic_salary=jb;
				yw=tea[i+1].month.allowance;
				tea[i].month.allowance=tea[i+1].month.allowance;
				tea[i+1].month.allowance=yw;
				kc=tea[i+1].month.deducting;
				tea[i].month.deducting=tea[i+1].month.deducting;
				tea[i+1].month.deducting=kc;
				yf=tea[i+1].month.total;
				tea[i].month.total=tea[i+1].month.total;
				tea[i+1].month.total=yf;
				sf=tea[i+1].month.actual;
				tea[i].month.actual=tea[i+1].month.actual;
				tea[i+1].month.actual=sf;
			}
		}
		i=0;
		for(q=0;q<num;q++)//輸出教師工號 
		{
			fread(&tea[q],sizeof(struct Teacher),1,fp1);
			printf("%d\t",tea[i].gh);
		}
		for(i=0;i<num;i++)//輸出教師的學院和職稱 
		{
			fread(&tea[q],sizeof(struct Teacher),1,fp1);
			k=*tea[i].address;
			l=*tea[i].title;
			printf("%d\n",tea[i].gh);
			printf("%s\n",tea[i].name);
			switch(k)
			{
			case '1':printf("資訊學院\n");break;
			case '2':printf("工學院\n");break;
			case '3':printf("理學院\n");break;
			case '4':printf("人文學院\n");break;
			case '5':printf("生物學院\n");break;
			}
			switch(l)
			{
			case '1':printf("教授\n");break;
			case '2':printf("副教授\n");break;
			case '3':printf("講師\n");break;
			case '4':printf("助教\n");break;
			}
		}
	}
	fclose(fp1);
	return; 
}	
	
void show_allbm(struct Teacher tea[],int io)//根據月份顯示所有教師當月工資資訊(以工號為序)
{
	int i;
	int j;
	int m;
	int pdm;
	char xm,xy,zc;
	float jb,yw,kc,yf,sf;
	char k,l;
	printf("請輸入需要查詢的月份:"); 
	scanf("%d",&m);
	printf("\n");
	if(num!=0)
	{
		for(i=0;i<num;i++)
		{
			if(tea[i].gh>tea[i+1].gh)
			{
				j=tea[i+1].gh;
				tea[i].gh=tea[i+1].gh;
				tea[i+1].gh=j;
				xm=*tea[i+1].name;
				*tea[i].name=*tea[i+1].name;
				*tea[i+1].name=xm;
				xy=*tea[i+1].address;
				*tea[i].address=*tea[i+1].address;
				*tea[i+1].address=xy;
				zc=*tea[i+1].title;
				*tea[i].title=*tea[i+1].title;
				*tea[i+1].title=zc;
				jb=tea[i+1].month.basic_salary;
				tea[i].month.basic_salary=tea[i+1].month.basic_salary;
				tea[i+1].month.basic_salary=jb;
				yw=tea[i+1].month.allowance;
				tea[i].month.allowance=tea[i+1].month.allowance;
				tea[i+1].month.allowance=yw;
				kc=tea[i+1].month.deducting;
				tea[i].month.deducting=tea[i+1].month.deducting;
				tea[i+1].month.deducting=kc;
				yf=tea[i+1].month.total;
				tea[i].month.total=tea[i+1].month.total;
				tea[i+1].month.total=yf;
				sf=tea[i+1].month.actual;
				tea[i].month.actual=tea[i+1].month.actual;
				tea[i+1].month.actual=sf;
			}
		}
	}
	for(i=0;i<num;i++)//輸入資訊 
	{
		printf("%d\n",tea[i].gh);
		printf("%s\n",tea[i].name);
		k=*tea[i].address;
		l=*tea[i].title;
		switch(k)
		{
		case '1':printf("%s來自資訊學院\n",tea[i].name);break;
		case '2':printf("%s來自工學院\n",tea[i].name);break;
		case '3':printf("%s來自理學院\n",tea[i].name);break;
		case '4':printf("%s來自人文學院\n",tea[i].name);break;
		case '5':printf("%s來自生物學院\n",tea[i].name);break;
		}
		switch(l)
		{
		case '1':printf("%s職稱是教授\n",tea[i].name);break;
		case '2':printf("%s職稱是副教授\n",tea[i].name);break;
		case '3':printf("%s職稱是講師\n",tea[i].name);break;
		case '4':printf("%s職稱是助教\n",tea[i].name);break;
		}
		printf("%d\n",m);
		pdm=*tea[i].month.months;//判斷結構體陣列的月份是否為輸入月份 
		if(m==pdm)
		{
			printf("%s的基本工資是:%f\n",tea[i].name,tea[i].month.basic_salary);
			printf("%s的業務津貼是:%f\n",tea[i].name,tea[i].month.allowance);
			printf("%s的扣除費用是:%f\n",tea[i].name,tea[i].month.deducting);
			printf("%s的應發工資是:%f\n",tea[i].name,tea[i].month.total);
			printf("%s的實發工資是:%f\n",tea[i].name,tea[i].month.actual);
		}
	}
	return;
} 

void search_gh(struct Teacher tea[],int io)
{
	int mark=0;
	int i;
	int id; 
	char k,l; 
    printf("\t\t------按工號查詢------\n");        
	printf("\n\t請輸入工號:");
	scanf("%d",&id);
	for(i=0;i<num;i++)
	{
		if(id==tea[i].gh)
		{
			printf("\n\t******以下是你要查詢的教師工資資訊******\n");
			printf("%d\n",tea[i].gh);
			printf("%s\n",tea[i].name);
			k=*tea[i].address;
			l=*tea[i].title;
			switch(k)
			{
			case '1':printf("%s來自資訊學院\n",tea[i].name);break;
			case '2':printf("%s來自工學院\n",tea[i].name);break;
			case '3':printf("%s來自理學院\n",tea[i].name);break;
			case '4':printf("%s來自人文學院\n",tea[i].name);break;
			case '5':printf("%s來自生物學院\n",tea[i].name);break;
			}
			switch(l)
			{
			case '1':printf("%s職稱是教授\n",tea[i].name);break;
			case '2':printf("%s職稱是副教授\n",tea[i].name);break;
			case '3':printf("%s職稱是講師\n",tea[i].name);break;
			case '4':printf("%s職稱是助教\n",tea[i].name);break;
			}
			printf("%s的基本工資是:%f\n",tea[i].name,tea[i].month.basic_salary);
			printf("%s的業務津貼是:%f\n",tea[i].name,tea[i].month.allowance);
			printf("%s的扣除費用是:%f\n",tea[i].name,tea[i].month.deducting);
			printf("%s的應發工資是:%f\n",tea[i].name,tea[i].month.total);
			printf("%s的實發工資是:%f\n",tea[i].name,tea[i].month.actual);
		}
			printf("\t***********************************\n");
			getch();
			mark++;
			return;
	}
	if (mark==0)
	{	
		printf ("\n\t沒有該教師的工資資訊記錄");
		printf ("\n\t按Enter鍵回主選單");
		getch();
		return;
	}
}

void search_name(struct Teacher tea[],int io)//根據姓名查詢 
{
	int mark=0;
	int i;
	char k,l;
	char names[10];
	printf("\t\t------按姓名查詢------\n");
	printf("\t\t請輸入您要查詢的姓名:\n");
	scanf("%s",names);
	for (i=0;i<num;i++)
	{
	    if(strcmp(tea[i].name,names)==0)
		{
			printf("\n\t******以下是你要查詢的教師工資資訊******\n");
	        printf("%d\n",tea[i].gh);
			printf("%s\n",tea[i].name);
			k=*tea[i].address;
			l=*tea[i].title;
			switch(k)
			{
			case '1':printf("%s來自資訊學院\n",tea[i].name);break;
			case '2':printf("%s來自工學院\n",tea[i].name);break;
			case '3':printf("%s來自理學院\n",tea[i].name);break;
			case '4':printf("%s來自人文學院\n",tea[i].name);break;
			case '5':printf("%s來自生物學院\n",tea[i].name);break;
			}
			switch(l)
			{
			case '1':printf("%s職稱是教授\n",tea[i].name);break;
			case '2':printf("%s職稱是副教授\n",tea[i].name);break;
			case '3':printf("%s職稱是講師\n",tea[i].name);break;
			case '4':printf("%s職稱是助教\n",tea[i].name);break;
			}
			printf("%s的基本工資是:%f\n",tea[i].name,tea[i].month.basic_salary);
			printf("%s的業務津貼是:%f\n",tea[i].name,tea[i].month.allowance);
			printf("%s的扣除費用是:%f\n",tea[i].name,tea[i].month.deducting);
			printf("%s的應發工資是:%f\n",tea[i].name,tea[i].month.total);
			printf("%s的實發工資是:%f\n",tea[i].name,tea[i].month.actual);  
		    printf("\n\t********************************");
		    mark++;
		    getch();
		    return;
		}
	}
	if (mark==0)
	{	
		printf ("\n\t沒有該教師的工資資訊記錄");
		printf ("\n\t按Enter鍵回主選單");
		getch();
		return;
	}
}
        
void cout_menu(struct Teacher tea[],int io)//統計分析目錄	
{
	char choice;
	system("cls");
	printf("\n\t------歡迎來到'統計分析'選單------\n");
	printf("\t------[1]根據月份,統計不同學院教師的平均應發工資和平均實發工資--------\n");
	printf("\t------[2]根據月份,統計不同職稱教師的平均應發工資和平均實發工資------\n");
	printf("\t------[3]返回主選單------\n");
	printf("\t*****************************\n");
	printf("\t請選擇:");
	choice=getch();
	switch(choice)
	{
		case'1':coutbyaddress(tea,130);break;
		case'2':coutbytitle(tea,130);break;
		case'3':main_menu(tea,130);break;
		default:printf("輸入錯誤\n");break; 
	}
	return;	
}

void coutbyaddress(struct Teacher tea[],int io)
{
	int m;//宣告定義月份
	int i,j;
	double xy[6]={0,0,0,0,0,0};
	double xya[6]={0,0,0,0,0,0};
	int xy1[6]={0,0,0,0,0,0};
	double avert[6]={0,0,0,0,0,0};
	double avera[6]={0,0,0,0,0,0};
	
	printf("請輸入你想要統計的月份:");
	scanf("%d",&m);
	for(i=0;i<num;i++)//統計應發工資和實發工資 
	{
		if(m==*tea[i].month.months)
		{
			for(j=0;j<5;j++)
			{
				if(*tea[i].address==j+1)
				{
					xy[j+1]=xy[j+1]+tea[i].month.total;
					xya[j+1]=xya[j+1]+tea[i].month.actual;
					xy1[j+1]=xy1[j+1]+1;
				}
			}
		}		
	}
	for(j=0;j<5;j++)//統計平均工資並輸出平均應發工資和實發工資 
	{
		if(xy[j+1]!=0)
		{
			avert[j+1]=xy[j+1]/xy1[j+1];
			avera[j+1]=xya[j+1]/xy1[j+1]; 
			switch(j+1)
			{
			case '1':printf("資訊學院教師的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
			case '2':printf("工學院教師的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
			case '3':printf("理學院教師的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
			case '4':printf("人文學院教師的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
			case '5':printf("生物學院教師的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
			}		
		}	
		else
		{
			switch(j+1)
			{
			case '1':printf("抱歉,暫無資訊學院教師平均應發工資和平均實發工資的資料!\n");break;
			case '2':printf("抱歉,暫無工學院教師平均應發工資和平均實發工資的資料!\n");break;
			case '3':printf("抱歉,暫無理學院教師平均應發工資和平均實發工資的資料!\n");break;
			case '4':printf("抱歉,暫無人文學院教師平均應發工資和平均實發工資的資料!\n");break;
			case '5':printf("抱歉,暫無生物學院教師平均應發工資和平均實發工資的資料!\n");break;
			}
		}
	}	
	return ;	
}

void coutbytitle(struct Teacher tea[],int io)
{
	int i,j,k,m,l; 
	int zc[5]={0,0,0,0,0};//宣告定義不同職稱的總人數 
	int salary[5]={0,0,0,0,0};//不同職稱的總應發工資
	int salarye[5]={0,0,0,0,0};//
	float avert[4]={0,0,0,0};
	float avera[4]={0,0,0,0};
	printf("請輸入你想要統計的月份:");
	scanf("%d",&m);
	for(i=0;i<num;i++)//不同職稱的總人數和總成績 
	{	
		if(m==*tea[i].month.months)
		{
			for(j=1;j<=4;j++)
			{
				if(*tea[i].title==j)
				{
					k=*tea[i].title;
					zc[k]++;
					salary[k]=salary[k]+tea[i].month.total;
					salarye[k]=salarye[k]+tea[i].month.actual;
				}
			}
		}
	}
	int max=0;
	for(j=0;j<4;j++)//統計平均工資並輸出平均應發工資和實發工資 
	{
		if(zc[j+1]!=0)
		{
			avert[j+1]=salary[j+1]/zc[j+1];
			avera[j+1]=salarye[j+1]/zc[j+1]; 
		}
		else
		{
			switch(j+1)
			{
			case '1':printf("抱歉,暫無教授職稱平均應發工資的資料!\n");break;
			case '2':printf("抱歉,暫無副教授職稱平均應發工資的資料!\n");break;
			case '3':printf("抱歉,暫無講師職稱平均應發工資的資料!\n");break;
			case '4':printf("抱歉,暫無助教職稱平均應發工資的資料!\n");break;
			}
		}
	}
			
	for(j=0;j<4;j++)
	{
		if(avert[j+1]>max)
		{
			l=j+1; 
			max=avert[j+1];	
		}	
	}	
	avert[j+1]=0;
	max=0;
	switch(l)
	{
		case '1':printf("教授的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '2':printf("副教授平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '3':printf("講師平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '4':printf("助教的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
	}
		
	for(j=0;j<4;j++)
	{
		if(avert[j+1]>max)
		{
			l=j+1; 
			max=avert[j+1];	
		}	
	}	
	avert[j+1]=0;
	switch(l)
	{
		case '1':printf("教授的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '2':printf("副教授平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '3':printf("講師平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '4':printf("助教的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
	}
	
	for(j=0;j<4;j++)
	{
		if(avert[j+1]>max)
		{
			l=j+1;
			max=avert[j+1];	
		}	
	}	
	avert[j+1]=0;
	switch(l)
	{
		case '1':printf("教授的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '2':printf("副教授平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '3':printf("講師平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '4':printf("助教的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
	}			
	
	for(j=0;j<4;j++)
	{
		if(avert[j+1]>max)
		{
			l=j+1; 
			max=avert[j+1];	
		}	
	}	
	avert[j+1]=0;
	switch(l)
	{
		case '1':printf("教授的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '2':printf("副教授平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '3':printf("講師平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
		case '4':printf("助教的平均應發和實發工資為%f,%f\n",avert[j+1],avera[j+1]);break;
	}							
	return ;		
}

void xg_menu(struct Teacher tea[],int io)//第二欄目——修改 
{
	char choice;
	system("cls");
	printf("\n\t------歡迎來到'修改'選單------\n");
	printf("\t------[1]根據工號修改某位教師的基本資訊和工資資訊--------\n");
	printf("\t------[2]根據姓名修改某位教師的基本資訊和工資資訊-----\n");
	printf("\t------[3]刪除某一工號的教師的所有資訊------\n");
	printf("\t*****************************\n");
	printf("\t請選擇:");
	choice=getch();
	switch(choice)
	{
		case'1':xgbygh(tea,130);break;
		case'2':xgbyname(tea,130);break;
		case'3':delete_all(tea,130);break;
		default:printf("輸入錯誤請重新輸入\n"); 
	}
	return; 
}

void delete_all(struct Teacher tea[],int io)
{
	int i,j;
	int deletemark=0;
	int id;
	printf("\t請輸入想要刪除教師的工號\n");
	scanf("%d",&id);
	if(num==0) 
	if(num==0)
	{
		printf ("\t對不起,檔案中無任何教師工資資訊記錄\n");
		printf ("\t按Enter鍵回到主選單\n");
		getch();
		return;
	}
	for(i=0;i<num;i++)
	{
		if(id==tea[i].gh) 
		{
			printf("\t******以下是你要刪除的教師的編號資訊******\n");
			printf("\t工號:%d\n",tea[i].gh);
			printf("\t姓名:%s\n",tea[i].name);
			printf("\t是否刪除?(y/n)\n");
			if(getch()=='y')
			{
				for(j=i;j<num-1;j++)
				{
					tea[j]=tea[j+1];
				}
				num--;
				deletemark++;
				printf("\t刪除成功\n");
				printf("\t是否繼續刪除\n");
				if(getch()=='y')
					delete_all(tea,130);
				return;		
			}
			else
				return;
		} 
		continue;
	}
	if(deletemark==0)
	{
		printf("\t沒有該教師工資資訊的記錄\n");
		printf("\t是否繼續刪除?(y/n)\n");
		if(getch()=='y')
		delete_all(tea,130);
	}
	return;
}

void xgbygh(struct Teacher tea[],int io)
{
	int changemark=0;
	int i;
	int id;
	int a=0;
	char k; 
	printf("\t請輸入需要修改教師的工號\n");
	scanf("%d",&id);
	if(num==0)
	{
		printf("\t\t檔案中無該教師的資訊\n");
        printf("\t\t按任意鍵返回主選單\n");
		getch();
		changemark++;
		return;
	}
	for(i=0;i<num;i++)
	{
		if(id==tea[i].gh)
		{
			printf("\t******以下是你要修改的教師工基本和資資訊******\n");
			printf("\t工號:%d\n",tea[i].gh);
			printf("\t姓名:%s\n",tea[i].name);
			printf("\t是否修改?\n(y/n)");
			if(getch()=='y')
			{
				a=i;
				printf("\n");
				printf("\t請重新輸入以下資訊:\n");
				printf("\t請輸入工號\n:");
				scanf("%d",tea[a].gh);
				printf("\t\n請輸入教師姓名\n:");
				scanf("%s",tea[a].name);
				printf("\t\n請輸入教師學院(資訊學院1、工學院2、理學院3、人文學院4、生物學院5):");
           		scanf("%d",tea[a].address);
				printf("\t\n請輸入教師職稱(1.教授 2.副教授 3.講師 4.助教):");
				scanf("%d",tea[a].title);
				printf("\t\n請輸入教師基本工資:");
				scanf("%f",&tea[a].month.basic_salary);
				printf("\t\n請輸入教師的業務津貼:");
				scanf("%f",&tea[a].month.allowance);
				printf("\t\n請輸入教師的扣除費用:");
				scanf("%f",&tea[a].month.deducting);
				tea[num].month.total=tea[num].month.basic_salary+tea[num].month.allowance;
				tea[num].month.actual=tea[num].month.total-tea[num].month.deducting;
				printf("\t\n請輸入教師的應發工資:");
				scanf("%f",&tea[a].month.total);
        	    printf("\t\n請輸入教師的實發工資:");
				scanf("%f",&tea[a].month.actual);
				changemark++;
				printf("\n\t修改儲存成功!");
	    	    if(changemark==0)
				printf("\n\t沒有該編號的資訊");
				printf("\n\t是否繼續修改?(y/n)");
				if(getch()=='y')
				xgbygh(tea,130);
				return;
			}
		}	
	} 
	return;
} 

void xgbyname(struct Teacher tea[],int io)
{
	int changemark=0;
	int i;
	char name[50];
	int a=0;
	printf("\t請輸入需要修改教師的姓名\n");
	scanf("%s",name);
	if(num==0)
	{
		printf("\t\t檔案中無該教師的資訊\n");
        printf("\t\t按任意鍵返回主選單\n");
		getch();
		changemark++;
		return;
	}
	for(i=0;i<num;i++)
	{
		if(strcmp(name,tea[i].name)==0)
		{
			printf("\t******以下是你要修改的教師基本和工資資訊******\n");
			printf("\t工號:%d\n",tea[i].gh);
			printf("\t姓名:%s\n",tea[i].name);
			printf("\t是否修改?\n(y/n)");
			if(getch()=='y')
			{
				a=i;
				printf("\n");
				printf("\t請重新輸入以下資訊:\n");
				printf("\t請輸入工號\n:");
				scanf("%d",tea[a].gh);
				printf("\t\n請輸入教師姓名\n:");
				scanf("%s",tea[a].name);
				printf("\t\n請輸入教師學院(資訊學院1、工學院2、理學院3、人文學院4、生物學院5):");
           		scanf("%d",tea[a].address);
				printf("\t\n請輸入教師職稱(1.教授 2.副教授 3.講師 4.助教):");
				scanf("%d",tea[a].title);
				printf("\t\n請輸入教師基本工資:");
				scanf("%f",&tea[a].month.basic_salary);
				printf("\t\n請輸入教師的業務津貼:");
				scanf("%f",&tea[a].month.allowance);
				printf("\t\n請輸入教師的扣除費用:");
				scanf("%f",&tea[a].month.deducting);
				tea[num].month.total=tea[num].month.basic_salary+tea[num].month.allowance;
				tea[num].month.actual=tea[num].month.total-tea[num].month.deducting;
				printf("\t\n請輸入教師的應發工資:");
				scanf("%f",&tea[a].month.total);
        	    printf("\t\n請輸入教師的實發工資:");
				scanf("%f",&tea[a].month.actual);
				changemark++;
				printf("\n\t修改儲存成功!");
	    	    if(changemark==0)
				printf("\n\t沒有該編號的資訊");
				printf("\n\t是否繼續修改?(y/n)");
				if(getch()=='y')
				xgbygh(tea,130);
				return;
			}
		}	
	}
} 

# 救救孩子吧,請大神幫我吧show_all函式看一下好嗎,為什麼我想查詢所有資訊卻會跳轉回目錄啊?


相關文章