2010년 4월 17일 토요일

파일i/o를 이용한 답안채점프로그램~

#include
#include
#include
#include

void output();

void main()
{
FILE *ifp, *ofp; //파일구조체 선언

char name[10]; //이름 저장 배열
int stdap[10]; //학생들이 낸 답 저장 배열
int jdap[10] = {3,4,2,2,1,4,5,2,3,5}; // 정답 배열
int yes; //맞힌갯수 저장변수

if( (ifp=fopen("stdap.txt","rt"))==NULL){
printf("stdap.txt file open error! \n");
getch();
return;
} //파일 오픈 실패하면 돌아가라~

if( (ofp=fopen("res.txt","wt"))==NULL){
printf("res.txt file open error! \n");
getch();
return;
}

while(fgets(name,10,ifp)!=NULL){ //이름이 있으면 돌아라~~~

yes = 0; //맞은갯수

fputs(name,ofp); //이름을 읽어다가 쓰기

for(int i=0 ; i<10 ; i++){
fscanf(ifp,"%d ",&stdap[i]);
} //학생들이 쓴답 읽어오기

for(int j=0 ; j<10 ; j++){ //답비교

if(stdap[j] == jdap[j]){
fprintf(ofp,"O"); //맞으면 O찍고
yes++; //맞은갯수 증가
}
else{
fprintf(ofp,"X"); //틀리면 X찍고
}
}

fprintf(ofp," %d \n",yes*10); //점수 출력
}

fcloseall(); //파일 저장 닫기

output();

}

void output()
{
FILE *ofp;

char name[10],stox[10]; //이름 저장 배열, o,x 저장 배열
int count=1; //출력시 학생수
int len; //입력문자열 길이 구하기
int jumsu; //읽어온 점수를 넣는 함수

if( (ofp=fopen("res.txt","rt"))==NULL){
printf("res.txt file open error! \n");
getch();
return;
} //파일 오픈 실패하면 돌아가라~

printf("[ 이 름 ] [ 점수 ] [ 1 2 3 4 5 6 7 8 9 10 ]\n");

while(fgets(name,10,ofp)!=NULL){

len = strlen(name);
name[len-1] = NULL;//옆에 점수가 찍히도록 개행을 없애주고

for(int i=0 ; i<10 ; i++){
fscanf(ofp,"%c ",&stox[i]);
} // o,x를 받아오고

fscanf(ofp,"%d ",&jumsu); // 점수를 받아와서

printf("%2d. %7s\t (%4d) \t",count++,name,jumsu); // 순번을 붙여 이름과 점수 출력

for(int j=0 ; j<10 ; j++){

printf("%3c",stox[j]); //몇번이 맞았는가 출력
}

if(count%10==1 && count != 1) {
printf("\nPress any Key...\n"); //10명씩 끊어서 보여주기
getch();
system("cls");
printf("[ 이 름 ] [ 점수 ] [ 1 2 3 4 5 6 7 8 9 10 ]");
}

printf("\n");

}

fclose(ofp);
}

댓글 없음:

댓글 쓰기