読者です 読者をやめる 読者になる 読者になる

C言語 社員データを並び替える

C言語 プログラミング
/*
 ***概要***
 社員データを入力し、所属、社員番号の昇順に並べ替えて出力する。
 ***処理条件***
 ・社員データの各項目をメンバとする構造体を宣言し、社員データ格納用の領域を定義する。
 ・社員データにエラーはないものとする。
 ・全てのデータを格納後、所属と社員番号の昇順に並び替える。
 ・表のタイトル、項目タイトルを出力後、データ項目を出力する。
 ・各項目の出力は、所属、社員番号、氏名、入社年月日、生年月日の順とする。
 ・データ出力後、社員データ件数を表示する。
 ・データが1件も無いときは表のタイトル、項目タイトルは表示しない。
 ***社員データ(最大30件)***
 ・社員番号 : 文字6桁
 ・氏名 : 文字10桁
 ・所属 : 数字4桁
 ・入社年月日 : 数字8桁
 ・生年月日 : 数字8桁

 */
#include<stdio.h>

int main(void) {
	typedef struct person {
		int no;
		char name[20];
		int belong;
		int inter;
		int birthday;
	} person_t;
	person_t menber[30], tmp;
	int i = 0, j, n = 0;
	FILE *fp;
	fp = fopen("shaindata.txt", "r");

	printf("スタート\n");
	while (fscanf(fp, "%d%s%d%d%d", &menber[i].no, menber[i].name,
			&menber[i].belong, &menber[i].inter, &menber[i].birthday) != EOF) {
		i++;
		printf("%d\n", i);
	}
	printf("読み込みました\n");
	n = i;
	for (i = 0; i < n - 1; i++) {
		for (j = i + i; j < n; j++) {
			if (menber[i].belong > menber[j].belong) {
				tmp = menber[i];
				menber[i] = menber[j];
				menber[j] = tmp;
			}
		}
	}
	for (i = 0; i < n - 1; i++) {
		for (j = i + i; j < n; j++) {
			if (menber[i].belong == menber[j].belong
					&& menber[i].no > menber[j].no) {
				tmp = menber[i];
				menber[i] = menber[j];
				menber[j] = tmp;
			}
		}
	}
	printf("社員データ\n");
	printf("社員番号      氏名    所属     入社年月日   生年月日\n");
	for (i = 0; i < n; i++) {
		printf("%d %12s %8d %10d %10d\n", menber[i].no, menber[i].name,
				menber[i].belong, menber[i].inter, menber[i].birthday);
	}
	fclose(fp);
}