중화사전망 - 서예자전 - 학생 성적의 데이터 사전

학생 성적의 데이터 사전

전에도 찾아봤지만 다 하고도 밑천을 남기지 않았다. 이거 전에 써봤는데 괜찮을 것 같아요.

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

# include & ltstring.h & gt

# 최대 1000 정의

Typedef 구조화되지 않음//과정 구조 정의.

{

Int Lesson _ Num

Char lesson _ name [50];

Int Lesson _ Mark

Int Lesson _ Credit

} 수업

Typedef struct Student // 학생의 구조를 정의합니다.

{

Char name [50];

Int Num

Int Lesson _ Count

제 l 과 [20];

} 학생

학생 s [max];

정적 intstudent _ count = 0; //학생 수를 기록하는 변수

Void 인쇄 인터페이스 (); //인쇄 인터페이스

Intaddstudent (); //Add, 작업이 성공했음을 나타내는 반환 값이 있습니다.

Intdelstudent (); //삭제, 작업이 성공했음을 나타내는 반환 값이 있습니다.

Voidcheckstudent (); //학생 성적 보기

Voidcheckclass (); //클래스 보고서 양식 보기

Voidwritefile (); //텍스트 파일 쓰기

Voidreadfile (); //텍스트 파일 읽기

Void main ()

{

Int 선택;

While (1)

{

Printinterface ();

Scanf("%d%*c ",& 선택); //"%*c "는 뒤에 문자 유형을 입력하므로 캐리지 리턴을 흡수합니다.

If (선택>= 0 & amp& amp 선택<= 6) // 선택 작업이 합법적입니다.

{

스위치 (선택)

{

사례 0: 수출 (1);

사례 1:

{

시스템 ("cls");

If(add student())printf(" \ n 추가 성공 ... enter 키를 눌러 계속 \ n ");

Elseprintf(" \ n 추가 실패 ... 캐리지 리턴 계속 \ n ");

Getchar ();

Getchar ();

시스템 ("cls");

깨뜨리다

}

사례 2:

{

시스템 ("cls");

If(del student())printf(" \ n 삭제 성공 ... enter 키를 눌러 계속 \ n ");

Elseprintf(" \ n 삭제 실패 ... 캐리지 리턴 계속 \ n ");

Getchar ();

Getchar ();

시스템 ("cls");

깨뜨리다

}

사례 3:

{

시스템 ("cls");

Checkstudent ();

시스템 ("cls");

깨뜨리다

}

시나리오 4:

{

시스템 ("cls");

Checkclass ();

시스템 ("cls");

깨뜨리다

}

사례 5: writefile (); 시스템 ("cls"); 깨뜨리다

사례 6: readfile (); 시스템 ("cls"); 깨뜨리다

기본값:;

}

}

기타

{

Printf ("이 기능이 없습니다 ... 재선택 ... 캐리지 리턴 확인 \ n"); //선택 작업이 잘못되었습니다

Getchar ();

시스템 ("cls"); //화면 정리 기능

}

}

}

Void 인쇄 인터페이스 ()

{

Printf ("\ t-\ n");

Printf("\t| 1, add | \ n ");

Printf ("\ t | | \ n");

Printf("\t| 2, 삭제 | \ n ");

Printf ("\ t | | \ n");

Printf("\t| 3, 학생 성적 확인 | \ n ");

Printf ("\ t | | \ n");

Printf("\t| 4, check class report form | \ n ");

Printf ("\ t | | \ n");

Printf("\t| 5, 텍스트 파일 쓰기 | \ n ");

Printf ("\ t | | \ n");

Printf("\t| 6, 텍스트 파일 읽기 | \ n ");

Printf ("\ t | | \ n");

Printf("\t| 0, exit | \ n ");

Printf ("\ t-\ n");

Printf(" \ t 작업 선택: ");

}

Int AddStudent ()

{

Int S_count, I, j;

Printf("\n 추가 ...... \ n ");

Printf(" \ n 학생 수 추가 (예: 1, 2...999): ");

Scanf("%d ",& amps _ count);

If (학생 수+학생 수>= MAX) 0 을 반환합니다. //배열의 상한을 초과했습니다.

For (i = 학생 _ 수; 나< 학생 _ 수 +S _ 수; I++)

{

Printf ("\ n \ tStudent %d: \n ",I-student _ count+1);

Printf(" \ n \ t 학생 id: "); Scanf("%d%*c ",& ampS[i]. Num);

Printf(" \ n \ t 학생 이름: "); 가져오기 (S[i]. 이름);

Printf(" \ n \ t 이 학생이 선택한 과정 수: "); Scanf("%d ",& ampS[i]. Lesson _ count);

For(j = 0;; J & ltS[i] 입니다. Lesson _ Countj++)

{

Printf ("\ n \ tCourse %d: \n ",j+1);

Printf(" \ n \ t \ t 과정 번호: "); Scanf("%d%*c ",& ampS[i]. L[j]. Lesson _ num);

Printf(" \ n \ t \ t 과정 이름: "); 가져오기 (S[i]. L[j]. Lesson _ name);

Printf(" \ n \ t \ t 과정 점수: "); Scanf("%d ",& ampS[i]. L[j]. Lesson _ mark);

Printf(" \ n \ t \ t 과정 학점: "); Scanf("%d ",& ampS[i]. L[j]. Lesson _ credit);

(S[i] 인 경우. L[j]. Lesson _ Mark & lt60) S[i]. L[j]. Lesson _ Credit = 0;; //불합격 과정 학점은 0 입니다.

}

}

학생 _ 수 += S _ 수;

1;

}

Int DelStudent ()

{

Char * D _ Name

Int D _ Num

Int I, j;

Printf(" \ n 삭제할 학생 정보 입력: \ n ");

Printf(" \ n 학생 이름: "); 가져오기 (d _ name);

Printf(" \ n 학생 id: "); Scanf("%d ",& ampd _ num);

For(I = 0;; 나< 학생 _ 수; I++)

{

만약 (! Strcmp(S[i].Name, D_Name) 및 amp& ampS[i]. 수량 = = D _ 수량)

{

Printf(" \ n 이 학생을 찾아 삭제하다

For (j = I+1; J< 학생 _ 수; J++)

{

S [j-1] = s [j];

}

깨뜨리다

}

}

If (i == 학생 수)

{

Printf(" \ n 학생을 찾을 수 없습니다 ... 정보를 확인하십시오. \ n \ n ");

0 을 반환합니다

}

기타

{

Student _ count-;

1;

}

}

Void CheckStudent ()

{

Int C _ Choice

Char c _ name [50];

Int C _ Num

Int I, j;

Printf(" \ n 학생 정보 입력 (1. 이름 \\ 2. 학생증) 및 선택: ");

Scanf("%d%*c ",& ampc _ choice);

Printf(" \ n 찾기 ...... \ n ");

If (c _ choice = =1| | c _ choice = = 2)//법적 선택.

{

If (C_Choice == 1)

{

Printf ("\ n name:"); 가져오기 (c _ name);

For(I = 0;; 나< 학생 _ 수; I++) // 모두 빈궁하여 중복 이름을 방지하다.

{

만약 (! Strcmp(S[i]. 이름, C_Name))

{

Printf(" \ n 학생 ID:% d \ t 이름: %s\n ",S[i]. 숫자, S[i]. 이름);

Printf(" \ n 과정 번호 \ t 과정 이름 \ t 과정 점수 \ t 과정 학점 \ n ");

Printf ("-\ n");

For(j = 0;; J & ltS[i] 입니다. Lesson _ Countj++)

{

Printf("%d\t\t%s\t\t%d\t\t%d\n ",S[i]. L[j]. Lesson_Num

S[i] 입니다. L[j]. Lesson_Name, S[i] 입니다. L[j]. 제 1 과 마크,

S[i] 입니다. L[j]. Lesson _ credit);

Printf ("-\ n");

}

Printf ("\ n \ n");

}

}

}

기타

{

Printf(" \ n 학생 id: "); Scanf("%d%*c ",& ampc _ num);

For(I = 0;; 나< 학생 _ 수; I++) // 빈궁하지 마라, 너의 학호는 유일하다.

{

(S[i] 인 경우. 수량 = = C _ 수량)

{

Printf(" \ n 학생 ID:% d \ t 이름: %s\n ",S[i]. 숫자, S[i]. 이름);

Printf(" \ n 과정 번호 \ t 과정 이름 \ t 과정 점수 \ t 과정 학점 \ n ");

Printf ("-\ n");

For(j = 0;; J & ltS[i] 입니다. Lesson _ Countj++)

{

Printf("%d\t\t%s\t\t%d\t\t%d\n ",S[i]. L[j]. Lesson_Num

S[i] 입니다. L[j]. Lesson_Name, S[i] 입니다. L[j]. 제 1 과 마크,

S[i] 입니다. L[j]. Lesson _ credit);

Printf ("-\ n");

}

Printf ("\ n \ n");

깨뜨리다

}

}

}

Printf ("검색 완료 ... 캐리지 리턴 계속 \ n");

Getchar ();

}

그렇지 않으면//선택이 불법입니다

{

Printf ("잘못된 선택 ... 캐리지 리턴 계속 \ n");

Getchar ();

반환;

}

}

Void CheckClass ()

{

Int C _ LNum

Double SSNum = 0, PassSNum = 0, SMark = 0;;

Int I, j;

Printf(" \ n 과정 번호 입력: ");

Scanf("%d%*c ",& ampc _ lnum);

Printf(" \ n 찾기 ..............................................................................................................................................................................................................................................................................................................................................

Printf ("학번 \ tname \ tname 물론 \ tname 물론 \ tname 물론 \ tname 물론 \ tname 물론 \ n");

Printf ("-\ n");

For(I = 0;; 나< 학생 _ 수; I++)

{

For(j = 0;; J & ltS[i] 입니다. Lesson _ Countj++)

{

(S[i] 인 경우. L[j]. Lesson_Num == C_LNum)

{

Printf ("%d \ t% s \ t% s \ t \ t% d \ t \ t% d \ n", S[i]. 숫자, S[i]. 이름, S[i]. L[j]. 강좌 이름,

S[i] 입니다. L[j]. 마크, S[i]. L[j]. Lesson _ credit);

Printf ("-\ n");

SMark += S[i] 입니다. L[j]. Lesson _ Mark

Ssnum++;

(S[i] 인 경우. L[j]. Lesson _ mark & gt = 60) passsnum++;

깨뜨리다

}

}

}

Printf("\n 평균 점수: %.2lf\t 합격률:% .2lf%% \ n \ n ",smark/ssnum, passnum/ssnum

Printf(" \ n 검색 완료 ... 캐리지 리턴 계속 \ n ");

Getchar ();

}

Void WriteFile ()

{

FILE * FP

Int I, j;

Charadr [100];

Printf(" \ n 파일에 기록된 주소를 입력하십시오. \ n \ 주소 입력 형식 (예: d: \ \ \ student.txt (\ \ \ \ 는 이스케이프 문자임): ");

Scanf("%s%*c ",ADR);

Printf(" \ n 쓰는 중 ...... \ n ");

If (fp = fopen(Adr, "w ")// 파일 쓰기

{

Fprintf(fp, "%d\n", student _ count);

For(I = 0;; 나< 학생 _ 수; I++)

{

Fprintf(fp, "%d\t%s\t%d\n", S[i]. 숫자, S[i]. 이름, S[i]. Lesson _ count);

For(j = 0;; J & ltS[i] 입니다. Lesson _ Countj++)

{

Fprintf(fp, "%d\t%s\t%d\t%d\n", S[i]. L[j]. Lesson_Num

S[i] 입니다. L[j]. Lesson_Name, S[i] 입니다. L[j]. 제 1 과 마크,

S[i] 입니다. L[j]. Lesson _ credit);

}

}

Printf(" \ n 쓰기 완료 ... 캐리지 리턴 계속 \ n ");

Fclose (FP);

}

기타

{

Printf(" \ n 쓰기 실패 ... 캐리지 리턴 계속 \ n ");

}

Getchar ();

}

Void ReadFile ()

{

FILE * FP

Int I, j;

Charadr [100];

Printf(" \ n 읽을 파일 주소를 입력하십시오 (읽기 오류를 방지하기 위해 파일을 쓰는 내용 형식과 일치하도록 함): \ n \ n 주소 입력 형식 (예: d: \ \ \ \ student.txt (\ \ \;

Scanf("%s%*c ",ADR);

Printf(" \ n 읽는 중 ............. \ n ");

If (fp = fopen(Adr, "r"))

{

Fscanf(fp, "%d",& 학생 _ 수);

For(I = 0;; 나< 학생 _ 수; I++)

{

Fscanf(fp, "%d%s%d", & ampS[i]. 숫자 & ampS[i]. 이름 & ampS[i]. Lesson _ count);

For(j = 0;; J & ltS[i] 입니다. Lesson _ Countj++)

{

Fscanf(fp, "%d%s%d%d", & ampS[i]. L[j]. Lesson_Num

& ampS[i]. L[j]. 강좌 이름 & ampS[i]. L[j]. 제 1 과 마크,

& ampS[i]. L[j]. Lesson _ credit);

}

}

Printf(" \ n 읽기 성공 ... 캐리지 리턴 계속 \ n ");

Fclose (FP);

}

기타

{

Printf(" \ n 읽기 실패 ... 캐리지 리턴 계속 \ n ");

}

Getchar ();

}