중화사전망 - 서예자전 - 학생 성적의 데이터 사전
학생 성적의 데이터 사전
# 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 ();
}