当前位置 - 무료 법률 상담 플랫폼 - 법률 문의 - 학생정보관리시스템

학생정보관리시스템

#include/*우리가 수행한 작업*/

#include

#include

#define MAX_LEN 10

#define STU_NUM 30

#define COURSE_NUM 6

typedef 구조체 학생

{

긴 숫자;

문자 이름[MAX_LEN];

부동 점수[COURSE_NUM];

부동 합계;

p> p>

float aver;

}STU;

int Menu(void);

void ReadScore(STU stu[],int n ,int m);

void AverSumofEveryStudent(STU stu[],int n,int m);

void AverSumofEveryCourse(STU stu[],int n,int m);< /p >

void SortbyScore(STU stu[],int n,int m,int (*비교)(float a,float b));

int Ascending(float a,float b) ;

int Descending(float a,float b);

void SwapFloat(float *x,float *y);

void SwapLong(long *x ,long *y);

void SwapChar(char x[],char y[]);

void AsSortbyNum(STU stu[],int n,int m);< /p >

void SortbyName(STU stu[],int n,int m);

void SearchbyNum(STU stu[],int n,int m);

void SearchbyName(STU stu[],int n,int m);

void StatisticAnalytic(STU stu[],int n,int m);

void PrintScore(STU stu[ ], int n,int m);

void WritetoFile(STU 레코드[],int n,int m);

void ReadfromFile(STU 레코드[],int *n, int * m);

int main()

{

char ch;

int n=0,m=0;

p>

STU stu[STU_NUM];

while(1)

{

ch=Menu();

스위치(ch)

{

case 1:printf("학생 번호를 입력하세요(n<=%d):",STU_NUM);

scanf( "%d",&n);

printf("강좌 번호(m<=%d)를 입력하세요:",COURSE_NUM);

sc

anf("%d",&m);

ReadScore(stu,n,m);

break;

case 2:AverSumofEveryCourse(stu,n ,m);

중단;

사례 3:AverSumofEveryStudent(stu,n,m);

중단;

사례 4 :SortbyScore(stu,n,m,Descending);

printf("\n점수 기준 내림차순 정렬:\n");

PrintScore(stu,n,m) ;

break;

case 5:SortbyScore(stu,n,m,Ascending);

printf("\n점수에 따라 오름차순으로 정렬:\ n");

PrintScore(stu,n,m);

break;

case 6:AsSortbyNum(stu,n,m);

p> p>

printf("\n점수 기준 오름차순 정렬:\n");

PrintScore(stu,n,m);

break;

p>

case 7:SortbyName(stu,n,m);

printf("\n점수에 따라 사전 순서로 정렬:\n");

PrintScore(stu ,n ,m);

break;

case 8:SearchbyNum(stu,n,m);

break;

사례 9 :SearchbyName(stu,n,m);

중단;

사례 10:StatisticAnalytic(stu,n,m);

중단;< /p >

case 11:PrintScore(stu,n,m);

break;

case 12:WritetoFile(stu,n,m);

break;

case 13:ReadfromFile(stu,&n,&m);

break;

case 14:printf("프로그램 끝! \n ");

exit(0);

default :printf("입력 오류!\n");

}

}

return 0;

}

/*기능: 메뉴를 표시하고 사용자 키보드로 입력한 옵션을 가져옵니다*/

int Menu(void)

{

int itemSelected;

printf("학생 점수 관리\n");

printf("1.기록 입력\n");

printf("2.모든 과목의 총점과 평균점수 계산\n");

printf(" 3.모든 학생의 총점과 평균점수 계산 \n");

printf("4.d로 정렬

점수 기준 오름차순 \n");

printf("5.점수 기준 오름차순 정렬 \n");

printf("6.숫자 기준 오름차순 정렬 \n");

printf("7.이름별 사전순 정렬 \n");

printf("8.번호로 검색 \n");

p>

printf("9.이름으로 검색 \n");

printf("10.통계 분석 \n");

printf("11.List 레코드 \n");

printf("12.파일에 쓰기 \n");

printf("13.파일에서 읽기 \n");

p> p>

printf("0.Exit \n");

printf("선택 사항을 입력하십시오:") //사용자 입력 읽기

scanf( " %d",&itemSelected);

return itemSelected;

}

/*기능: n 학생의 m 코스 성적 입력*/

void ReadScore(STU stu[],int n,int m)

{

int i,j;

printf("학생 입력' ID, 이름 및 점수:\n");

for(i=0;i

{

scanf(" %ld %s",&stu[i].num,stu[i].name);

for(j=0;j

{

scanf("%f",&stu[i].score[j]);

}

}

}

/*함수 함수: 각 학생 강좌의 총점과 평균 점수를 계산합니다*/

void AverSumofEveryStudent(STU stu[],int n,int m)

{

int i,j;

for(i=0;i

{

stu [i]. sum=0;

for(j=0;j

{

stu[i].sum=stu [i]. sum+stu[i].score[j];

}

stu[i].aver=m>0?stu[i].sum/m :-1;

printf("학생 %d: 합계 = %.0f,aver = %.0f\n",

i+1,stu[i].sum ,stu[i ].aver);

}

}

/*기능: 각 과목의 총점과 평균점수를 계산합니다*/

void AverSumofEveryCourse(STU stu[],int n,int m)

{

int i,j;

float sum[ COURSE_NUM],aver[ COURSE_NUM];

for(j=0;j

{

p>

sum[j]=0;

for(i=0;i

{

sum[j] =sum[j]+stu[i].score[j];

}

aver[j] = n>0 ? sum[j]/n:-1;

printf("강좌 %d:sum = %.0f,aver = %.0f\n",j+1,sum[j],aver[j]);

}

}

/*함수 함수: 선택 방법에 따라 배열 합계의 요소 값을 정렬합니다*/

void SortbyScore(STU stu[], int n,int m,int (*비교)(float a,float b))

{

int i,j,k,t;

for(i=0;i

{

k=i;

for(j=i+ 1;j< n;j++)

{

if((*비교)(stu[j].sum,stu[k].sum)) k=j;

}

if(k!=i)

{

for(t=0;t

{

SwapFloat(&stu[k].score[t],&stu[i].score[t]);

}

SwapFloat(&stu [k].sum,&stu[i].sum);

SwapFloat(&stu[k].aver,&stu[i].aver);

SwapLong (&stu[k ].num,&stu[i].num);

SwapChar(stu[k].name,stu[i].name);

}

}

}

/*오름차순으로 데이터 정렬*/

int Ascending(float a, float b)

{

return a

}

/*데이터를 내림차순으로 정렬*/

int 내림차순(float a,float b)

{

return a>b;

}

/*두 개의 단정밀도 교환 부동 소수점 데이터*/

void SwapFloat(float *x,float *y)

{

float temp;

temp =*x;

p>

*x=*y;

*y=temp;

}

/ *두 개의 긴 정수 데이터 교환*/

void SwapLong(long *x,long *y)

{

long temp;

temp=*x;

*x=*y;

*y=temp;

}

/*2개 교환 문자열*/

void SwapChar(char x[],char y[])

{

char temp[MAX_LEN];

strcpy(임시,x);

strcpy(x,y);

strcpy(y,임시);

}

/*기능: 배열 num의 요소 값을 낮은 값에서 높은 값으로 정렬하는 방법을 선택하려면 누릅니다.*/

void AsSortbyNum(STU stu[],int n,int m)

{

int i,j,k,t;

for( i=0;i

{

k=i;

for(j=i+1;j

{

if(stu[j].num < stu[k].num) k=j;

}

if(k!=i)

{

for(t=0;t

{

SwapFloat(&stu[k].score[t],&stu[i].score[t]);

}

SwapFloat(&stu[k].sum,&stu[ i].sum);

SwapFloat(&stu[k].aver,&stu[i].aver);

SwapLong(&stu[k].num,&stu[i] .num);

SwapChar(stu[k].name,stu[i].name);

}

}

}

/*함수 함수: 사전 순서로 문자열 정렬을 구현하는 교환 방법*/

void SortbyName(STU stu[],int n,int m)

{

int i,j,t;

for(i=0;i

{

for(j=i+1;j

{

if(strcmp(stu[j].name, stu[i].name )<0)

{

for(t=0;t

{

SwapFloat(&stu[ i].score[t],&stu[j].score[t]);

}

SwapFloat(&stu[i].sum,&stu[j].sum) ;

SwapFloat(&stu[i].aver,&stu[j].aver);

SwapLong(&stu[i].num,&stu[j].num);

SwapChar(stu[i].name,stu[j].name);

}

}

}

}

/*기능 기능: 학생 번호로 학생 성적을 검색하고 검색 결과를 표시합니다*/

void SearchbyNum(STU stu[],int n,int m )

{

long number;

int i,j;

printf("검색하려는 숫자를 입력하세요.") ;

scanf("%ld",&number);

for(i=0;i

{

if(stu[i].num==번호)

{

printf("%ld \t%s \t",stu[i].num,stu [ i].name);

for(j=0;j

{

printf("%.0f \t" , 스투[i].점수[j])

;

}

printf("%.0f\t%.0f\n",stu[i].sum,stu[i].aver);

return;

}

}

printf("\n 찾을 수 없음! \n");

}

/*기능: 이름 사전 순서로 결과 테이블 정렬*/

void SearchbyName(STU stu[],int n,int m)

{

char x[MAX_LEN];

int i,j;

printf("검색하려는 숫자를 입력하세요.");

scanf("%s",x);

for(i=0;i

{

if(strcmp( stu[i].name,x)==0)

{

printf("%ld \t%s \t",stu[i].num,stu[ i].name);

for(j=0;j

{

printf("%.0f \t", stu[i].score[j]);

}

printf("%.0f\t%.0f\n",stu[i].sum,stu[ i].aver);

return;

}

}

printf("\n 찾을 수 없음! \n") ;

}

/*기능: 각 점수 범위의 학생 수와 백분율 계산*/

void StatisticAnalytic(STU stu[], int n,int m)

{

int i,j,total,t[6];

for(j=0;j

{

printf("%d 과정의 경우:\n",j+1);

memset(t,0,sizeof(t ) ); //배열 t의 모든 요소를 ​​0으로 초기화합니다.

for(i=0;i

{

if( stu[ i].score[j]>=0&&stu[i].score[j]<60) t[0]++;

else if (stu[i].score[j]< 70) t[1]++;

else if (stu[i].score[j]<80) t[2]++;

else if (stu[ i] .score[j]<90) t[3]++;

else if (stu[i].score[j]<100) t[4]++;

else if (stu[i].score[j]=100) t[5]++;

}

for(total=0,i=0; i< =5;i++)

{

total=total+t[i];

}

for(i= 0; i<=5;i++)

{

if(i==0) printf("<60\t%d\t%.2f%%\n" ,t [i],(float)t[i]/n*100);

else if(i==5)

printf("%d\t%d \t %.2f%%\n",(i+5)*10,t[i],(fl

oat)t[i]/n*100);

else

printf("%d-%d\t%d\t%.2f%%\n", (i+5)*10,(i+5)*19,t[i],(float)t[i]/n*100);

}

}

}

/*기능: 학생 점수 인쇄*/

void PrintScore(STU stu[],int n,int m)

{

int i,j;

for(i=0;i

{

printf("%ld\t%s\t",stu[i].num,stu[i].name);

for(j=0;j

{

printf("%.0f\t",stu[i].score[j]);

}

printf ("%.0f\t%.0f\n",stu[i].sum,stu[i].aver);

}

}

/*n명의 학생 m과목의 학생번호, 이름, 성적을 Student.txt 파일에 출력합니다*/

void WritetoFile(STU stu[],int n,int m)

{

파일 *fp;

int i,j;

if((fp=fopen("student.txt", "w "))==NULL)

{

printf("score.txt를 열지 못했습니다!\n");

exit(0) ;

}

fprintf(fp,"%d\t%d\n",n,m) //학생 수와 강좌 수를 파일에 씁니다.

p>

for(i=0;i

{

fprintf(fp,"%10ld%10s",stu[i] .num, stu[i].name);

for(j=0;j

{

fprintf(fp," %10.0f ",stu[i].score[j]);

}

fprintf(fp,"%10.0f%10.0f\n",stu[i] .sum, stu[i].aver);

}

fclose(fp);

}

/*다음에서 읽기 file 학생의 학생 번호, 이름, 성적 및 기타 정보는 구조 배열 stu*/

void ReadfromFile(STU stu[],int *n,int *m)

{

파일 *fp;

int i,j;

if((fp=fopen("student.txt","r")) = =NULL)

{

printf("score.txt를 열지 못했습니다!\n");

exit(0);

}

fscanf(fp,"%d\t%d",n,m) //파일에서 학생 수와 강좌 수를 읽습니다.

for( i=0;i< *n;i++)

{

fscanf(fp,"%10ld",&stu[i].num);

fscanf(fp,"%10s",stu[i].name);

for(j=0;j< *m;j++)

{

< 피>f스캔f(f

p,"%10f",&stu[i].score[j]);

}

fscanf(fp,"%10f%10f",&stu[i].sum ,&stu[i].aver); //%10.0f를 사용할 수 없습니다.

}

fclose(fp);

}