//genscore.c #include #include #include #include char nameLast[ ][3]={"趙", "錢", "孫", "李", "陳", "林", "吳", "魏", "王", "蔡", "章", "張", "簡" }; const int N_LAST = (sizeof(nameLast) / sizeof(nameLast[0]) ); #define NSTU_MIN 3388 #define NSTU_MAX 8888 #define ID_BASE 9917001 #define FILE_NAME "studat.txt" int myRand( ) { return rand( ) % 100; } void genName(char*p) { char mm,m2,m3; char tmps[5]={0}; *p = 0; // 清除字串 strcat(p, nameLast[rand( )% N_LAST]); mm = 'A' + rand( )%26; m2 = 'A' + rand( )%26; m3 = 'a' + rand( )%26; sprintf(tmps, "%c%c%c", mm, m2, m3); strcat(p, tmps); } extern int nStudent; long genID( ) { static char idFlag[NSTU_MAX]; int k = rand( ) % nStudent; int nTry = 0; while(idFlag[k] !=0) { k = rand( ) % nStudent; if(++nTry > 10) break; } if(idFlag[k]!=0) { // 已經用過 k=0; while(idFlag[k] !=0) ++k; } idFlag[k] = 1; return ID_BASE + k; } /// int nStudent; long sid; char name[9]; int hwk, mid, quiz, fin; void getNextStuData( ) { sid = genID( ); genName(name); hwk = myRand( ); mid = myRand( ); quiz = myRand( ); fin = myRand( ); } int main( ) { FILE* fp; int i; srand( time(0) ); // randomize int n = NSTU_MIN + rand( ) % 200; nStudent = n; fp = fopen(FILE_NAME, "wt"); if(fp == 0) { fprintf(stderr, "Sorry error...\n"); return 1; } for(i = 1; i<= n; ++i) { getNextStuData( ); fprintf(fp, "%7d %9s %3d %3d %3d %3d\n", sid, name, hwk, mid, quiz, fin); } fclose(fp); fprintf(stderr, "File %s generated successfully.\n", FILE_NAME); fprintf(stderr, "Total %d student records.\n", n); return 0; }