テスト

アバター
shiro4ao
記事: 224
登録日時: 15年前
住所: 広島

テスト

投稿記事 by shiro4ao » 14年前

CODE:

#include 
#include 
#include 



#define MAX_STUDENT 290                   // 受講生人数
#define MAX_STUDENT_PER_CLAS 40       //1講座あたりの人数
#define MAX_DESIRE_COUNT 6              //希望調査数 未使用

//受講生の構造体
typedef struct{
    char  name[512];  	 //名前
    int    desire[6];        	//希望調査、第1~5希望まで。インデックスが希望番号0は未使用
    int    clas;		//クラス
    int    rank;		//希望の番号
    int    group;		//グループ
} STUDENT;




//曜日別人数カウンタ
//これがMAX_STUDENT_PER_CLASより大きくなると
//次の希望へ割り当てられる
	int Mon1;
	int Mon2;
	int Tue1;
	int Wed1;
	int Wed2;
	int Thu1;
	int Fri1;
	int Fri2;

//数字によるクラスの区別を文字列に変換
//NumToNameExと変わりない
void NumToName(int num,char *name){
	switch(num){
	case 666:
		strcpy(name,"割り当て失敗");
		break;
	case 1:
		strcpy(name,"月曜前半");
		break;
	case 2:
		strcpy(name,"月曜後半");
		break;
	case 3:
		strcpy(name,"火曜前半");
		break;
	case 4:
		strcpy(name,"水曜前半");
		break;
	case 5:
		strcpy(name,"水曜後半");
		break;
	case 6:
		strcpy(name,"木曜前半");
		break;
	case 7:
		strcpy(name,"金曜前半");
		break;
	case 8:
		strcpy(name,"金曜後半");
		break;
	}

}




//数字によるクラスの区別を文字列に変換
//NumToNameと変わりない
void NumToNameEx(int num,char *name){
	if(num=666)strcpy(name,"割り当て失敗");
	if(num==1)strcpy(name,"月曜前半");
	if(num==2)strcpy(name,"月曜後半");
	if(num==3)strcpy(name,"火曜前半");
	if(num==4)strcpy(name,"水曜前半");
	if(num==5)strcpy(name,"水曜後半");
	if(num==6)strcpy(name,"木曜前半");
	if(num==7)strcpy(name,"金曜前半");
	if(num==8)strcpy(name,"金曜後半");
}



//文字によるクラス区別を数字に変換
int NameToNum(char *name){
	if(strcmp(name,"月曜前半")==0) return 1;
	if(strcmp(name,"月曜後半")==0) return 2;
	if(strcmp(name,"火曜前半")==0) return 3;
	if(strcmp(name,"水曜前半")==0) return 4;
	if(strcmp(name,"水曜後半")==0) return 5;
	if(strcmp(name,"木曜前半")==0) return 6;
	if(strcmp(name,"金曜前半")==0) return 7;
	if(strcmp(name,"金曜後半")==0) return 8;
	if(strcmp(name,"--何らかの文字列---")==0) return 9;
	if(strcmp(name,"")==0) return 0;
}





//csvから読み構造体へ格納
//printfはデバッグ用
int ReadData(STUDENT st[],int count){
	char buf[1024];     //読み捨て用バッファ
	FILE* fp;
	int i=0,ret,hoge;
	fp = fopen( "test.csv", "r" );
	if( fp == NULL )return FALSE;
	
	//名前・希望番号などが書いてある1行目は読み捨てる
	fscanf( fp,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,]\n", buf,buf,buf,buf, buf, buf, buf, buf, buf, buf, buf, buf, buf, buf, buf);

	for(i=0;i5)st[id].clas=666;
		}
		
		break;
	case 2:
		if(Mon25)st[id].clas=666;
		}
			
		break;
	case 3:
		if(Tue15)st[id].clas=666;
		}
	
		break;
	case 4:
		if(Wed15)st[id].clas=666;
		}
	
		break;
	case 5:
		if(Wed25)st[id].clas=666;
		}
	
		break;
	case 6:
		if(Thu15)st[id].clas=666;
		}
		break;
	case 7:
		if(Fri15)st[id].clas=666;
		}

		break;
	case 8:
		if(Fri25)st[id].clas=666;
		}
		break;
	}


}

//カウンタ初期化
void InitCounter(){
	int Mon1=0;
	int Mon2=0;
	int Tue1=0;
	int Wed1=0;
	int Wed2=0;
	int Thu1=0;
	int Fri1=0;
	int Fri2=0;
}

//受講生人数をコマンドライン引数で受け取るようにするかもしれない
int main(void){
	STUDENT st[MAX_STUDENT];
	int i;

	InitCounter();
	
	//数値データを読み込み
//	ReadData(st,MAX_STUDENT);

	//文字列データを読み込む	
	ReadDataEx(st,MAX_STUDENT);
	
	//ランダムにすればより平等になるor希望の数をcsvの時点で考慮してもらう
	for(i=0;i<MAX_STUDENT;i++) SetStudentClas(st,i,1);	

//	WriteData(st,MAX_STUDENT);

	WriteDataEx(st,MAX_STUDENT);

	return 0;

}



最後に編集したユーザー shiro4ao on 2013年9月04日(水) 20:45 [ 編集 2 回目 ]

コメントはまだありません。