#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 回目 ]
コメントはまだありません。