2010년 4월 17일 토요일

성적관리 프로그램~

#include
#include //getch() 쓰기위해
#include // cls쓰기위해
#include

char menu();
void input(int p1[30][5], char p2[30][25]);
void output(int p1[30][5], char p2[30][25]);
void search(int p1[30][5], char p2[30][25]);
void del(int p1[30][5], char p2[30][25]);
void sort(int p1[30][5], char p2[30][25]);

void main()
{
int score[30][5] = {{90,80,100},{70,80,45},{80,90,70},{75,90,65},{85,95,70},{100,80,65},
{75,65,90},{98,70,70},{82,45,75},{49,55,80},{80,50,65},{80,75,66},
{79,73,77},{59,90,77},{88,100,95},{88,60,70},{90,55,82},{29,77,59},
{87,69,90},{100,98,95},{45,91,88},{89,75,66},{88,100,72},{79,82,95},
{88,95,22},{80,75,60},{100,80,92},{95,75,100},{77,100,65},{66,75,98}}; //서른명의 점수

char name[30][25]={"Kimyt","Kimjj","Sinkh","Leemr","Nojh","Huj","Sondi","Ahnyg","Kimsj","Leeej",
"Humu","Kimdb","Jungks","Kimsk","Leesk","Kimjh","Honges","Kimka","Leehj","Kwonht",
"Uooks","Jungsk","Seoos","Kanghs","Namdo","Junyb","Parkjs","Gwaknk","Yangcj","Leesd"};//서른명의이름

char menuNumber;
while(1){

system("cls");
menuNumber = menu();

if(menuNumber == '1'){ system("cls"); input(score,name);}

else if(menuNumber == '2'){system("cls"); output(score,name); }

else if(menuNumber == '3'){system("cls"); search(score,name); }

else if(menuNumber == '4'){system("cls"); del(score,name); }

else if(menuNumber == '5'){ break;}

}
}

char menu()
{

printf("\n\n\n\n\n\n");
printf(" 1. 총 점 구 하 기 \n\n");
printf(" 2. 성적 출력 하기 \n\n");
printf(" 3. 개인 성적 확인 \n\n");
printf(" 4. 성 적 수 정 \n\n");
printf(" 5. 종 료 \n\n");

printf(" # 메뉴를 선택하세요 : ");

char menuNumber=getchar();

return menuNumber;

}

void input(int p1[30][5], char p2[30][25]){

/* printf("\n\n\n\n\n\n\n\n\n\n\n");
printf(" 1번 입력하기 메뉴입니다. \n\n\n\n\n");
printf(" # 아무키나 누르면 주메뉴로 돌아갑니다. \n\n\n\n");

getch();
*/
int i,j;

for(i=0 ; i<30;i++){
p1[i][3] = 0;
} //재차 눌를때 누적방지..

for(i=0;i<30;i++){

for(j=0;j<3;j++){

p1[i][3] += p1[i][j];
}
} //총점 구하기

sort(p1,p2); //등수에 따라 정렬함수 호출

printf("\n\n\n\n\n\n\n\n\n");
printf(" 총 점 계 산 중 \n\n");

printf(" ");
for(i=0 ; i<11 ; i++)
{
printf("[");
Sleep(150);
printf("]");
Sleep(150);
}

/*보기좋게 하기 위해서*/
printf("\n\n\n #계산이 완료 되었습니다. 아무키나 누르면 주메뉴로 돌아 갑니다. \n");
getch();

return;
}

void output(int p1[30][5], char p2[30][25]){
/*
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf(" 2번 출력력하기 메뉴입니다. \n\n\n\n\n");
printf(" # 아무키나 누르면 주메뉴로 돌아갑니다. \n\n\n\n");

getch();
*/
int i;

printf("[등수] [ 이름 ] [ 국 영 수 ] [ 총점 ] [ 평균 ]\n");

for(i=0 ; i<30; i++){

printf("%4d %7s %4d %4d %4d %4d %8.2lf \n",p1[i][4],p2[i],p1[i][0],p1[i][1],p1[i][2],p1[i][3],double(p1[i][3])/3);

/*10명이 출력대고 엔터 치라고 하고 출력이 끝나으면 주메뉴로 돌아가게한다.*/
if( (i%10) == 9 ) {

if( i == 29) {
printf("#출력이 완료 되었습니다. 아무키나 누르면 주메뉴로 돌아 갑니다.");
getch();
}
else{
printf("Press Enter key to continue...");
getch();
printf("\n");
}
}
}

return;
}

void search(int p1[30][5], char p2[30][25]){
/*
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf(" 3번 검색하기 메뉴입니다. \n\n\n\n\n");
printf(" # 아무키나 누르면 주메뉴로 돌아갑니다. \n\n\n\n");

getch();
*/
int i,temp1 = 0;
char temp[80]={0,}; //임시 저장공간

while (strcmp(temp,"end") != 0){ //입력문자열이 "end" 아닐경우까지 반복

printf("#학생이름를 입력하세요 : "); //이름 입력 받기
scanf("%s",temp);

for(i=0; i<30; i++){

if(strcmp(temp,p2[i]) == 0){ //존재 하면 그학생의 성적 출력

printf("\n %s의 성적입니다. \n",p2[i]);
printf(" 등수 : %5d등 \n", p1[i][4]);
printf(" 총점 : %5d점 \n", p1[i][3]);
printf(" 평균 : %5.2lf점 \n",double(p1[i][3])/3);
printf(" 국어 : %5d점 \n", p1[i][0]);
printf(" 영어 : %5d점 \n", p1[i][1]);
printf(" 수학 : %5d점 \n\n", p1[i][2]);
temp1++; //이름이 있으면 증가.
}

}

if(temp1 == 0){
printf("이름이 존재하지않습니다. 확인 후 다시 입력하세요. \n"); } //출력대면 증가대니까없으면 0이 남는다

temp1 = 0; // loop안에서 증가상태로 남아있으면 로직에러

}


return;

}
void del(int p1[30][5], char p2[30][25]){

/*
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf(" 4번 삭제하기 메뉴입니다. \n\n\n\n\n");
printf(" # 아무키나 누르면 주메뉴로 돌아갑니다. \n\n\n\n");

getch();
*/
int i,j,k,choi,jumsu,temp1 = 0;
char temp[80]={0,}; //임시 저장공간

while (strcmp(temp,"end") != 0){ //입력문자열이 "end" 아닐경우까지 반복

printf("#수정할 학생이름를 입력하세요 : "); //이름 입력 받기
scanf("%s",temp);

for(i=0; i<30; i++){

if(strcmp(temp,p2[i]) == 0){ //존재 하면 그학생의 성적 정정

while(1){

printf("#정정할 과목을 선택하세요.\n");
printf(" 국어(1),영어(2),수학(3) : ");
scanf("%d",&choi);

if(choi == 1 ){ //1번 국어 점수를 선택했을때

while(1){
printf(" 정정할 국어 점수를 입력하세요 : ");
scanf("%d",&jumsu);

if(jumsu >= 0 && jumsu <= 100){ //0~100점 사이 점수를 넣었는가?
p1[i][0] = jumsu;

break; //맞게 넣었으면 loop탈출
}

else{
printf("잘못 입력하셨습니다. 다시 입력하세요. \n"); //새로운 점수 받기..
}

}

break; //과목을 선택하고 점수넣었으니 탈출~ 새로운학생 받자~
} // 1번 선택시 if 문 종료

else if(choi == 2 ){ //2번 영어 점수를 선택했을때

while(1){
printf(" 정정할 영어 점수를 입력하세요 : ");
scanf("%d",&jumsu);

if(jumsu >= 0 && jumsu <= 100){ //0~100점 사이 점수를 넣었는가?
p1[i][1] = jumsu;

break;//맞게 넣었으면 loop탈출
}

else{
printf("잘못 입력하셨습니다. 다시 입력하세요. \n");//새로운 점수 받기..
}

}
break;//과목을 선택하고 점수넣었으니 탈출~ 새로운학생 받자~
} // 2번 선택시 if 문 종료

else if(choi == 3 ){

while(1){
printf(" 정정할 수학 점수를 입력하세요 : ");
scanf("%d",&jumsu);

if(jumsu >= 0 && jumsu <= 100){ //0~100점 사이 점수를 넣었는가?
p1[i][2] = jumsu;

break;//맞게 넣었으면 loop탈출
}

else{printf("잘못 입력하셨습니다. 다시 입력하세요. \n");}//새로운 점수 받기.
}

break;//과목을 선택하고 점수넣었으니 탈출~ 새로운학생 받자~
} // 3번 선태식 if 문 종료

else { printf("잘못 입력하셨습니다. 다시 입력하세요. \n");}

}//과목선택의 예외처리 While종료


temp1++; //이름이 있으면 증가.
}//존재하는지 물어보는 if문닫기

} //for 닫기

if(temp1 == 0){
printf("이름이 존재하지않습니다. 확인 후 다시 입력하세요. \n"); } //출력대면 증가대니까없으면 0이 남는다

temp1 = 0; // loop안에서 증가상태로 남아있으면 로직에러

}//while loop닫기

//정정한 결과로 다시 계산
for(i=0 ; i<30;i++){ //총점 초기화.. 다시 누적현상발생하기때문에
p1[i][3] = 0;
}

for(j=0;j<30;j++){

for(k=0;k<3;k++){

p1[j][3] += p1[j][k];
}
} //총점 구하기

sort(p1,p2); //등수에 따라 정렬함수 호출

return;
}

void sort(int p1[30][5], char p2[30][25]){

int i, j,k, temp ; //loop제어변수 임시저장변수 선언
int rank = 1, rank1 = 1; //등수 제어변수
char chr[25]; //임시 문자열 복사 변수

for(i=0 ; i<29; i++){ // score[0][4] 와 score[1][4]~score[30][4]까지비교
// score[28][4]과 score[29][4]까지 비교하면 끝
for(j=29 ; j>=i+1 ; j--){

if(p1[i][3] for(k=0 ; k<4; k++){ //총점이 정렬대는것에 따라
temp=p1[i][k]; // 각 과목도 정렬대고
p1[i][k]=p1[j][k];
p1[j][k]=temp;
}
strcpy(chr,p2[i]);
strcpy(p2[i],p2[j]);
strcpy(p2[j],chr); //이름도 총점에 정렬에 따라 이동
}
}
}

p1[0][4] = 1; //0순위는 무조건 1등~

for(i=0 ; i<30; i++){

if(p1[i][3]==p1[i+1][3]){
rank1++;
p1[i+1][4] = p1[i][4]; //같으면 두사람의 순위는 같게 댄다.
}

else{
p1[i][4] = rank; //같지 않았다면 순차적 랭킹을 더해준다.
p1[i+1][4] = rank+1;

if(rank1 >= 1){ rank+= rank1; rank1 = 1;} //같은사람 카운터가 1사람이상이면 그만큼을 랭크에 더한다.
else { rank++; } //아니면 그냥 순차 차운터..
}
}
}

댓글 없음:

댓글 쓰기