Rev 7642 | Rev 8255 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7642 | Rev 8254 | ||
---|---|---|---|
Line 18... | Line 18... | ||
18 | /* This is an internal program, |
18 | /* This is an internal program, |
19 | * used to show statistics of frequentation, module by module. |
19 | * used to show statistics of frequentation, module by module. |
20 | */ |
20 | */ |
21 | 21 | ||
22 | #include "../Lib/libwims.h" |
22 | #include "../Lib/libwims.h" |
- | 23 | #include "../wimsdef.h" |
|
23 | 24 | ||
24 | #define MAX_EXO 64 |
- | |
25 | #define MAX_SHEET 64 |
- | |
26 | #define |
25 | #define MAX_EXAMS 32 |
27 | #define MAX_SCORE 512*1024 |
26 | #define MAX_SCORE 512*1024 |
28 | 27 | ||
29 | typedef struct { |
28 | typedef struct { |
30 | short int dure,score; |
29 | short int dure,score; |
31 | long int next; |
30 | long int next; |
32 | } |
31 | } statscoredata; |
33 |
|
32 | statscoredata scores[MAX_SCORE]; |
34 | int sccnt=0; |
33 | int sccnt=0; |
35 | 34 | ||
36 | typedef struct { |
35 | typedef struct { |
37 | int newcnt,scorecnt,lasttime,firstscore,lastscore; |
36 | int newcnt,scorecnt,lasttime,firstscore,lastscore; |
38 | char lastnew[12]; |
37 | char lastnew[12]; |
39 | } |
38 | } statexodata; |
40 |
|
39 | statexodata shdata[MAX_SHEETS*MAX_EXOS],examdata[MAX_EXAMS*MAX_EXOS]; |
41 | 40 | ||
42 | /* cid: combined index of difficulty */ |
41 | /* cid: combined index of difficulty */ |
43 | double scsum, scavg, scdeviat, scmin, scmax, cid; |
42 | double scsum, scavg, scdeviat, scmin, scmax, cid; |
44 | double dursum, duravg, durdeviat, durmin, durmax; |
43 | double dursum, duravg, durdeviat, durmin, durmax; |
45 | double best[10]; |
44 | double best[10]; |
Line 58... | Line 57... | ||
58 | 57 | ||
59 | void oneline(char *p, char *typ) |
58 | void oneline(char *p, char *typ) |
60 | { |
59 | { |
61 | int i, sh, ex, t; |
60 | int i, sh, ex, t; |
62 | char *data[64]; |
61 | char *data[64]; |
63 |
|
62 | statexodata *tab; |
64 | char *pp, *pe; |
63 | char *pp, *pe; |
65 | for(i=0, pp=find_word_start(p); i<9 && *pp; pp=find_word_start(pe),i++) { |
64 | for(i=0, pp=find_word_start(p); i<9 && *pp; pp=find_word_start(pe),i++) { |
66 | pe=find_word_end(pp); if(*pe) *pe++=0; |
65 | pe=find_word_end(pp); if(*pe) *pe++=0; |
67 | data[i]=pp; |
66 | data[i]=pp; |
68 | } |
67 | } |
69 | if(i<6) return; |
68 | if(i<6) return; |
70 | sh=atoi(data[2]); ex=atoi(data[3]); |
69 | sh=atoi(data[2]); ex=atoi(data[3]); |
71 | if(sh<=0 || ex<=0 || ex> |
70 | if(sh<=0 || ex<=0 || ex>MAX_EXOS || strlen(data[1])>10) return; |
72 | if(data[0][0]=='E') { |
71 | if(data[0][0]=='E') { |
73 | tab=examdata; data[0]++; if(sh> |
72 | tab=examdata; data[0]++; if(sh>MAX_EXAMS) return; |
74 | } |
73 | } |
75 | else { |
74 | else { |
76 | tab=shdata; if(sh> |
75 | tab=shdata; if(sh>MAX_SHEETS) return; |
77 | } |
76 | } |
78 | tab+=(sh-1)* |
77 | tab+=(sh-1)*MAX_EXOS+(ex-1); |
79 | t=str2time(data[0]); if(t==-1) return; |
78 | t=str2time(data[0]); if(t==-1) return; |
80 | if(strstr(data[4],"new")!=NULL) { |
79 | if(strstr(data[4],"new")!=NULL) { |
81 | if(strcmp(typ,"score")==0 && |
80 | if(strcmp(typ,"score")==0 && |
82 | ((i > 6 && strcmp(data[6],"noscore")==0) || (i > 7 && strcmp(data[7],"noscore")==0) |
81 | ((i > 6 && strcmp(data[6],"noscore")==0) || (i > 7 && strcmp(data[7],"noscore")==0) |
83 | || (i > 8 && strcmp(data[8],"noscore")==0))){ return; } |
82 | || (i > 8 && strcmp(data[8],"noscore")==0))){ return; } |
Line 182... | Line 181... | ||
182 | u2=find_word_end(u1); if(*u2) *u2++=0; |
181 | u2=find_word_end(u1); if(*u2) *u2++=0; |
183 | oneuser(dirname, u1); |
182 | oneuser(dirname, u1); |
184 | } |
183 | } |
185 | } |
184 | } |
186 | 185 | ||
187 | void stati( |
186 | void stati(statexodata *dat) |
188 | { |
187 | { |
189 | int i,j; |
188 | int i,j; |
190 | double s,d; |
189 | double s,d; |
191 | 190 | ||
192 | scsum=scavg=scdeviat=dursum=duravg=durdeviat=cid=0; |
191 | scsum=scavg=scdeviat=dursum=duravg=durdeviat=cid=0; |
Line 229... | Line 228... | ||
229 | switch(flag) { |
228 | switch(flag) { |
230 | case 0: printf(":S %2d %2d %4d %4d \ |
229 | case 0: printf(":S %2d %2d %4d %4d \ |
231 | %4.0f %4.0f %5.2f %5.2f \ |
230 | %4.0f %4.0f %5.2f %5.2f \ |
232 | %5.2f %4.1f %5.2f %5.1f \ |
231 | %5.2f %4.1f %5.2f %5.1f \ |
233 | %5.2f %5.2f %4.1f\n", |
232 | %5.2f %5.2f %4.1f\n", |
234 | i/ |
233 | i/MAX_EXOS+1,i%MAX_EXOS+1, |
235 | shdata[i].newcnt, shdata[i].scorecnt, |
234 | shdata[i].newcnt, shdata[i].scorecnt, |
236 | scsum, dursum, |
235 | scsum, dursum, |
237 | scavg, duravg, |
236 | scavg, duravg, |
238 | scmin,durmin,scmax,durmax, |
237 | scmin,durmin,scmax,durmax, |
239 | scdeviat, durdeviat, |
238 | scdeviat, durdeviat, |
240 | cid); break; |
239 | cid); break; |
241 | case 1: printf("%d_%d=%d,%d,\ |
240 | case 1: printf("%d_%d=%d,%d,\ |
242 | %.0f,%.0f,%.2f,%.2f,\ |
241 | %.0f,%.0f,%.2f,%.2f,\ |
243 | %.2f,%.1f,%.2f,%.1f,\ |
242 | %.2f,%.1f,%.2f,%.1f,\ |
244 | %.2f,%.2f,%.1f;", |
243 | %.2f,%.2f,%.1f;", |
245 | i/ |
244 | i/MAX_EXOS+1,i%MAX_EXOS+1, |
246 | shdata[i].newcnt, shdata[i].scorecnt, |
245 | shdata[i].newcnt, shdata[i].scorecnt, |
247 | scsum, dursum, |
246 | scsum, dursum, |
248 | scavg, duravg, |
247 | scavg, duravg, |
249 | scmin,durmin,scmax,durmax, |
248 | scmin,durmin,scmax,durmax, |
250 | scdeviat, durdeviat, |
249 | scdeviat, durdeviat, |
Line 261... | Line 260... | ||
261 | stati(examdata+i); |
260 | stati(examdata+i); |
262 | printf(":E %2d %2d %4d %4d \ |
261 | printf(":E %2d %2d %4d %4d \ |
263 | %4.0f %4.0f %5.2f %5.2f \ |
262 | %4.0f %4.0f %5.2f %5.2f \ |
264 | %5.2f %4.1f %5.2f %5.1f \ |
263 | %5.2f %4.1f %5.2f %5.1f \ |
265 | %5.2f %5.2f %4.1f\n", |
264 | %5.2f %5.2f %4.1f\n", |
266 | i/ |
265 | i/MAX_EXOS+1,i%MAX_EXOS+1, |
267 | examdata[i].newcnt, examdata[i].scorecnt, |
266 | examdata[i].newcnt, examdata[i].scorecnt, |
268 | scsum, dursum, |
267 | scsum, dursum, |
269 | scavg, duravg, |
268 | scavg, duravg, |
270 | scmin,durmin,scmax,durmax, |
269 | scmin,durmin,scmax,durmax, |
271 | scdeviat, durdeviat, |
270 | scdeviat, durdeviat, |
Line 273... | Line 272... | ||
273 | } |
272 | } |
274 | 273 | ||
275 | void output(void) |
274 | void output(void) |
276 | { |
275 | { |
277 | int i; |
276 | int i; |
278 | for(i=0;i< |
277 | for(i=0;i<MAX_SHEETS*MAX_EXOS;i++) { outsheetexo(i, 0);} |
279 | for(i=0;i< |
278 | for(i=0;i<MAX_EXAMS*MAX_EXOS;i++) { outexamexo(i);} |
280 | } |
279 | } |
281 | 280 | ||
282 | int main() |
281 | int main() |
283 | { |
282 | { |
284 | char cla[MAX_LINELEN+1], user[256]; |
283 | char cla[MAX_LINELEN+1], user[256]; |
Line 307... | Line 306... | ||
307 | multiuser(cla, user); |
306 | multiuser(cla, user); |
308 | sh=getenv("exostat_sheet"); |
307 | sh=getenv("exostat_sheet"); |
309 | if( sh==NULL || *sh==0 ) { output(); } |
308 | if( sh==NULL || *sh==0 ) { output(); } |
310 | else { |
309 | else { |
311 | int s=atoi(sh); |
310 | int s=atoi(sh); |
312 | s=(s-1)* |
311 | s=(s-1)*MAX_EXOS; |
313 | int i; |
312 | int i; |
314 | for(i=s;i < s + |
313 | for(i=s;i < s + MAX_EXOS;i++) { |
315 | outsheetexo(i, 1); |
314 | outsheetexo(i, 1); |
316 | } |
315 | } |
317 | }; |
316 | }; |
318 | } |
317 | } |
319 | return 0; |
318 | return 0; |