C언어 강좌 설계 학생 성과관리 시스템
원본 포스터에 감사드립니다
#include
#include
#define SIZE 10 /* 향후 수정을 용이하게 하기 위해 상수 SIZE 정의*/
struct Student /*학생 정보를 저장할 구조 배열 정의*/
{
int 번호; / *학생 번호*/
문자 이름[20];/*이름*/
부동 점수[3];/*점수*/
float 평균 ;/*평균 점수*/
}stu[SIZE];
void menu();/*메뉴 기능 호출*/
void write() ;/*정보 읽기*/
void save();/*stud.dat 파일 저장 기능*/
void open();/*여부 확인 올바르게 저장됨*/
void inturn (struct Student c[]);/*평균 점수에 따라 학생 정보를 정렬하는 데 사용되는 함수*/
void save2();/*정렬된 정보는 Studsort.dat 파일에 저장됩니다*/
void read();/*studsort.dat 파일에 있는 두 번째 4 6 8 10 학생의 정보를 읽습니다*/
< p>void main(){
int choice;/*사용자 선택 변수*/
printf("********* * ************************************************* ** ************************\n");
printf("* *\n");
p>
printf ("* Hwadee & 학생 점수 파일 관리& Hwadee *\n");
printf("* *\n");
printf("** **** ********************************************** ***** ***********************\n\n\n");
printf("*** ***** ************************●●환영합니다●●**************** ******** *************");
system("일시 중지");
동안 (1)< /p>
{
menu();/*메뉴 기능을 호출하여 작업 인터페이스를 형성합니다*/
printf("선택하세요:\t");< /p>
scanf("%d", &choice);
if ( 선택 == 0 )
{
system("cls" );
printf("\n\n\t\t\t\t감사합니다
Use!!!);
break;
}
switch(choice) /*다양한 기능을 달성하기 위한 다중 선택*/
{
사례 1:
write();
break;
사례 2:
시스템 ("cls");
save();
break;
사례 3:
system("pause") ;
system("cls");
open();
break;
사례 4:
system("cls");
printf("정렬 전 학생 정보:\n");
open();
inturn( stu) ;
save2();
break;
사례 5:
system("cls");
< p> read();break;
기본값:
printf("\n해당 기능이 없습니다!\n다시 입력하세요\n ");< /p>
}
}
}
void menu()
{
printf ("\n1*****학생 정보 입력\t\t2*****stud.dat 파일에 정보 저장\n");
printf("3 **** *파일 데이터 확인\t\t4***** 학생 정보를 정렬하여 Studsort.dat 파일에 저장합니다\n");
printf("5***** 읽기 Studsort.dat 파일의 2번째 4 6 8 10번째 학생 정보\n");
printf("0*****시스템 종료\n\n\n");
p>
}
/********************************** ** **********************************\
기능 이름:
< p> 쓰기기능 설명:
학생 정보 작성 완료
기능 매개변수:
i stu
반환 값:
없음
모듈 기록:
\******************** **** ********************************************** ***** **/
void write()
{
int i;/*count 변수*/
stu[i].average = 0;/*구조 멤버 평균 초기화*/
printf("학생 정보를 입력하세요\n");
printf("학생 ID\tName \ t중국어\t수학\t영어\t\n");
for (i=0; i { scanf (" %d\t",&stu[i].number); if (stu[i].number == 0)/*정보가 필요하지 않으면 0을 입력하세요*/ p> 중단; scanf("%s\t %f\t%f\t%f",&stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]); stu[i].average = (stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;/* 평균 성적 계산*/ } } /************************ * ************************************************* \ 함수 이름: save 함수 설명: 작성된 정보를 파일에 읽어옵니다. 함수 매개변수: FILE *fp i 반환 값: 없음 모듈 기록: \ ************************************************** ** **********************/ 저장 무효() { FILE *fp ;/*파일에서 데이터를 읽기 위한 파일 포인터 정의*/ int i; if ((fp=fopen("stud.dat"," wb")) == NULL) { printf("파일을 열 수 없습니다\n"); return; } for (i=0;i if (fwrite(&stu[i],sizeof(struct Student),1,fp) != 1) printf("파일 쓰기 오류\n"); fclose(fp); printf("\n정보가 성공적으로 저장되었습니다! 축하합니다!!\n \n" ); } /******************************** *** ************************************\ 기능 이름: 열기 함수 설명: 파일로 읽은 데이터가 올바른지 확인하는 데 사용됩니다. 함수 매개변수: FILE *cp i 반환 값: 없음 모듈 기록: \****** ****** ******************************************** ******* **********/ void open() { int i; FILE *cp ; cp = fopen ("stud.dat","rb"); printf("stud.dat 파일에 저장된 정보:\ n\n"); printf("학생 번호\t이름\t수학\t중국어\t영어\t평균 점수\n\n"); for (i=0;i < SIZE;i++) { fread(&stu[i],sizeof(struct Student),1,cp); printf("%d \t%s\t%.1f\t%.1f\t%.1f\t%.1f\n\n\n",stu[i].n umber, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average ); } fclose (cp); } /******************** ***** ********************************************* ****** ***\ 함수 이름: inturn 함수 설명: 요소를 정렬하는 데 사용됩니다. 구조 배열에서< /p> 함수 매개변수: i,j,k로 구조체 학생 임시 반환 값: 없음 모듈 기록: \**************************** ********* *************************************/ void inturn(struct Student m[]) { int i,j,k;/*count 변수*/ struct Student temp;/*중간 변수 유형은 구조체 본문입니다*/ for(i=0; i { if( m[i].average < m[j].average ) { p> 온도 = m[i]; m[i] = m[j]; m[j] = 온도; } } printf("\n정렬된 학생 정보:\n\n"); printf("학생 번호 \t이름\ t수학\t중국어\t영어\t평균 점수\n"); for (i=0; i { printf("%d 이름%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n\n\n",i+1, stu[i] .number , stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average ); p> }/*정렬된 학생 정보 출력*/ } /******************** **** *********************************************** **\ 기능 이름: save2 기능 설명: 정렬된 학생 정보를 다른 파일로 읽어옵니다. 매체 기능 매개변수: FILE *mp i 반환 값: 없음 모듈 기록: \**************************************** ** ********************************/ void save2() { FILE *mp; int i; if ((mp=fopen("studsort. dat","wb"))==NULL) { printf("파일을 열 수 없습니다\n"); return; } for (i=0;i if (fwrite(&stu[i], sizeof(struct Student), 1, mp) != 1) printf("파일 쓰기 오류\n"); fclose(mp);/*읽은 후 파일을 닫습니다*/ } /***************************************** * *******************************\ 함수 이름: 읽기 p> 함수 설명: 다른 파일에서 정보 읽기 함수 매개변수: FILE *tp i 반환 값: 없음 모듈 기록: \**************** * ************************************************* ** *****/ void read() { int i=1; FILE *tp; p> tp = fopen ("studsort.dat", "rb" ); printf("studsort.dat 파일에 있는 짝수 학생의 정보는 다음과 같습니다.\ n\n");< /p> printf("학생 번호\t이름\t수학\t중국어\t영어\t평균 점수\n\n"); for (i = 1;i { fseek(tp,i*sizeof(struct Student),0);/*fseek 함수는 다음과 같이 파일의 시작 부분을 오프셋할 수 있습니다. 사용자가 파일 데이터를 읽으려면 Shift가 필요합니다. k*sizeof(struct Student)는 위치 포인터를 현재 위치에서 k 바이트로 이동하는 것을 의미합니다*/ fread(&stu[ i],sizeof(struct Student),1,tp); /*참고: 필요에 따라 데이터를 읽으려면 먼저 fseek 함수를 사용하여 위치를 지정해야 하지만 fseek만 사용하세요. fread 없이 함수를 사용하면 p> 파일에서 데이터를 읽지 않고 화면에 데이터를 인쇄할 뿐입니다. 이것은 일반적인 문제입니다*/ printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[ i ].number, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average ) < /p> } fclose (tp);/*읽은 후 파일을 닫습니다*/ }