/* a10-4-4.c */
#include <stdio.h>
#define N 4		/* 人数 */

typedef struct {     /* 給与       */
	int	basic;         /* 基本給   */
	int house;         /* 住宅手当 */
	int family;        /* 家族手当 */
	int qualification; /* 資格手当 */
} Pay;
typedef struct  {    /* 社員情報 */
	int no;            /* 社員番号 */
	char name[20];     /* 氏名     */
	char post[20]; 	   /* 役職     */
	int years;         /* 勤続年数 */
	Pay pay;           /* 給与     */
} Syain_dt;

void insert_syain(Syain_dt *s, Syain_dt t, int n);

int main(void)
{
	Syain_dt g[N+1] = {
		{127, "滝沢康明",   "課長", 21, 366780, 10000, 15000, 12000},
		{204, "加藤ゆい",   "主任", 15, 283640, 10000, 0,     6000},
		{272, "矢田佐希子", "",     10, 228760, 0,     0,     6000},
		{304, "堂本猛",     "",     5,  217700, 0,     10000, 12000},
	};
	Syain_dt tuika = {255, "小池一平",   "",     12, 264200, 0,     0,     0};
	int i;

	insert_syain(g, tuika, N);

	printf("番号 氏名　　　　 役職　 勤続 基本給 住宅　家族　資格\n");
	for (i = 0; i <= N; i++) {
		printf("%4d %-12s %-6s %4d %6d %5d %5d %5d\n", g[i].no, g[i].name, 
				g[i].post, g[i].years, g[i].pay.basic, 
				g[i].pay.house, g[i].pay.family, g[i].pay.qualification);
	}

	return 0;
}

/*** 社員情報を挿入する ***/
/* （仮引数）s：挿入元の構造体へのポインタ　t：挿入する構造体　n：挿入元の構造体の件数
　 （返却値）なし */
void insert_syain(Syain_dt *s, Syain_dt t, int n)
{
	int i;

	for (i = n - 1; i >= 0; i--) {
		if ((s+i)->no > t.no) {
			*(s+i+1) = *(s+i);
			if (i == 0) {
				*(s+i) = t;
			}
		}
		else {
			*(s+i+1) = t;
			break;
		}
	}
}
