현재 위치 - 인적 자원 플랫폼망 - 미니프로그램 자료 - C 언어 절차 정보 (학생 성과 관리 절차)
C 언어 절차 정보 (학생 성과 관리 절차)
컴파일 실행이 가능하지만 첨부 파일을 보낼 수 없고 코드만 붙여 넣을 수 있습니다.

#include "stdio.h" /* 표준 입출력 라이브러리 */

#include "stdlib.h" /* 표준 라이브러리 */

#include "string.h" /* 문자열 라이브러리 */

#define HEADER 1 "-학생-\n"

# define header 2 "| number | name | comp | math | eng | sum | ave | mici | \ n"

# defineheader 3 "|-|-|-|-|-|-|-|-|" 을 참조하십시오

# define format "|%-10s |%-15s |% 4d |% 4d |% 4d |% 4d |%

# 데이터 정의 p-> Data.num, p-> Data.name, p-> Data.egrade, p-> Data.mgrade, p-> Data.cgrade, p-> Data.total, p-> Data.ave, p-> Data.mingci

# 정의 끝 "-\n"

Intsaveflag = 0; /* 플래그 변수를 저장해야 합니까 */

/* 학생 관련 데이터 구조 정의 */

Typedef 구조 student /* 는 student*/

{

Char num: ");

Scanf("%d ",& 선택);

If (선택 = =1)/* 학번별로 조회 */

{

Stringinput(searchinput, 10, "기존 학번 입력:");

P=Locate(l, searchinput, "num"); /* l 에서 학번이 searchinput value 인 노드를 찾아 해당 노드에 대한 포인터를 반환합니다. */

If(p) /* if p! =NULL*/

{

Printheader ();

Printdata (p);

Printf (end);

Printf ("돌아가려면 아무 키나 누르십시오");

Getchar ();

}

기타

Nofind ();

Getchar ();

}

Else if(select==2) /* 이름별 조회 */

{

Stringinput(searchinput, 15, "기존 학생 이름 입력:");

P=Locate(l, searchinput, "name");

다음 경우 (p)

{

Printheader ();

Printdata (p);

Printf (end);

Printf ("돌아가려면 아무 키나 누르십시오");

Getchar ();

}

기타

Nofind ();

Getchar ();

}

기타

오류 ();

Getchar ();

}

/* 학생 레코드 삭제: 먼저 학생 레코드가 저장된 노드를 찾은 다음 노드를 삭제합니다 */

유효하지 않은 삭제 (링크 l)

{

Int sel

노드 *p, * r;;

Char find mess: ");

Scanf("%d ",& ampsel);

If(sel== 1)

{

Stringinput(findmess, 10, "기존 학번 입력:");

P = 위치 (l, findmess, "num");

If(p) /*p! =NULL*/

{

R = l;;

While (r->; 다음! =p)

R = r-& gt;; 다음으로,

R-> Next = p-& gt;; 다음으로, /* 연결된 목록에서 p 가 가리키는 노드 제거 */

무료 (p); /* 메모리 공간 확보 */

Printf(" \ n = = = = =>;; 삭제에 성공했습니다! \ n ");

Getchar ();

저장 플래그 =1;

}

기타

Nofind ();

Getchar ();

}

Else if(sel==2) /* 먼저 레코드가 있는 노드를 이름별로 조회합니다 */

{

Stringinput(findmess, 15, "기존 학생 이름 입력");

P=Locate(l, findmess, "name");

다음 경우 (p)

{

R = l;;

While (r->; 다음! =p)

R = r-& gt;; 다음으로,

R-> Next = p-& gt;; 다음으로,

무료 (p);

Printf(" \ n = = = = =>;; 삭제에 성공했습니다! \ n ");

Getchar ();

저장 플래그 =1;

}

기타

Nofind ();

Getchar ();

}

기타

오류 ();

Getchar ();

}

/* 학생 기록을 수정하다. 먼저 입력한 학번을 기준으로 레코드를 조회한 다음 학번이 아닌 값을 수정하라는 메시지를 표시합니다. 학호는 수정할 수 없습니다 */

유효하지 않은 수정 (링크 l)

{

노드 * p;

Char find mess [20];

만약 (! L-> 다음)

{

Printf(" \ n = = = = =>;; 학생 기록이 없습니다! \ n ");

Getchar ();

반환;

}

Printf ("학생 레코더 수정");

Disp (l);

Stringinput(findmess, 10, "기존 학번 입력:"); /* 학번 입력 및 확인 */

P = 위치 (l, findmess, "num"); /* 이 노드 조회 */

If(p) /* if p! =NULL, 노드를 찾았음을 나타냅니다 */

{

Printf ("번호: %s, \n", p-> Data.num);

Printf("Name:%s, ",p-> Data.name);

Stringinput (p-> Data.name, 15, "새 이름 입력:");

Printf("C 언어 점수: %d, ",p-> Data.c grade);

P->; Data.cgrade=numberinput("C 언어 점수 [0-100]:);

Printf ("수학 점수: %d,", p-> Data.m grade);

P->; Data.mgrade=numberinput ("수학 점수 [0-100]:);

Printf ("영어 성적: %d,", p-> Data.egrade);

P->; Data.egrade=numberinput ("영어 성적 [0-100]:);

P->; Data.total = p-> Data.e grade+p-> Data.c grade+p-> Data.m grade;

P->; Data.ave = (float) (p-> Data.total/3);

P->; Data.mingci = 0;

Printf(" \ n = = = = =>;; 수정 성공! \ n ");

Disp (l);

저장 플래그 =1;

}

기타

Nofind ();

Getchar ();

}

/* 레코드 삽입: 학번을 기준으로 삽입할 노드의 위치를 조회한 다음 학번 뒤에 새 노드를 삽입합니다. */

빈 플러그인 (링크 l)

{

링크 p, v, newinfo/*p 는 삽입 위치, newinfo 는 새로 삽입된 레코드 */

Char ch, num[ 10], s [10]; /*s[] 삽입점 위치 앞의 학번을 저장하고, num[] 은 입력한 새 레코드의 학번을 저장합니다 */

Intflag = 0;

V = l-& gt;; 다음으로,

시스템 ("cls");

Disp (l);

While( 1)

{stringinput(s, 10, "숫자 뒤에 삽입 위치 입력:");

Flag = 0;; V = l-& gt;; 다음으로,

While(v) /* 학번 존재 여부 조회, flag= 1 학번 존재 */

{

If (strcmp (v-> Data.num, s) = = 0) {flag =1; 깨뜨리다 }

V = v-& gt;; 다음으로,

}

If(flag== 1)

깨뜨리다 /* 학생 번호가 있는 경우 삽입하기 전에 새 레코드를 입력하십시오 */

기타

{getchar ();

Printf(" \ n = = = = =>;; 번호 %s 이 (가) 존재하지 않습니다. 다시 시도해 보시겠습니까? (y/n): ",s);

Scanf("%c ",& ampch);

If(ch=='y'||ch=='Y')

{계속; }

기타

{반환; }

}

}

/* 다음 새 레코드의 입력 작업은 Add () */ 와 동일합니다

Stringinput(num, 10, "새 학번 입력:");

V = l-& gt;; 다음으로,

While (5)

{

If (strcmp (v-> Data.num, num)= 0)

{

Printf ("= = = = = = = = > 죄송합니다. 새 번호:' %s' 이 (가) 이미 존재합니다! \n ",번호);

Printheader ();

Print data (v) :

Printf ("\ n");

Getchar ();

반환;

}

V = v-& gt;; 다음으로,

}

New info = (node *) malloc (sizeof (node));

만약 (! Newinfo) 를 참조하십시오

{

Printf("\n 메모리 할당 실패 "); /* 요청을받지 못한 경우 알림 메시지 인쇄 */

반환; /* 주 인터페이스로 돌아가기 */

}

Strcpy (newinfo-> Data.num, num);

Stringinput (new info-> Data.name, 15, "이름:");

Newinfo-& gt;; Data.cgrade=numberinput("C 언어 점수 [0-100]:);

Newinfo-& gt;; Data.mgrade=numberinput ("수학 점수 [0-100]:);

Newinfo-& gt;; Data.egrade=numberinput ("영어 성적 [0-100]:);

Newinfo-& gt;; Data.total = newinfo-> Data.e grade+newinfo-> Data.c grade+newinfo-> Data.m grade;

Newinfo-& gt;; Data.ave = (float) (newinfo-> Data.total/3);

Newinfo-& gt;; Data.mingci = 0;

Newinfo-& gt;; Next = NULL

저장 플래그 =1; /* 전역 변수는 main () 에서 판단됩니다. 1 인 경우 */

/* l 에 있는 헤드 노드의 다음 노드가 실제로 학생 기록을 저장하므로 p 에 포인터를 지정합니다. */

P = l-& gt;; 다음으로,

While( 1)

{

If (strcmp (p-> Data.num, s)==0) /* 연결된 테이블에 노드 삽입 */

{

Newinfo-& gt;; Next = p-& gt;; 다음으로,

P->; Next = newinfo

깨뜨리다

}

P = p-& gt;; 다음으로,

}

Disp (l);

Printf ("\ n \ n");

Getchar ();

}

/* 통계 클래스 및 단일 섹션 총점, 각 섹션에 실패한 인원 수 */

허공동지 (순환선 l)

{

노드 *pm, *pe, *pc, * pt/* 가장 높은 점수를 받은 노드 */

노드 * r = l-> 다음으로,

Int countc=0, countm=0, counte = 0;; /* 3 학년 불합격자 저장 */

만약 (! R)

{

Printf(" \ n = = = = =>;; 학생 기록이 아닙니다! \ n ");

Getchar ();

반환;

}

Disp (l);

Pm = PE = PC = pt = r;;

While(r)

{

If (r-> Data.c grade < 60) 개수 c++;

If (r-> Data.m grade < 60) count m++;

If (r-> Data.e grade < 60) count e++;

If (r-> Data.c grade > = PC->; Data.c grade) PC = r;

If (r-> Data.m grade > = pm->; Data.m grade) pm = r;

If (r-> Data.e grade > = PE-& gt;; Data.egrade) PE = r;

If (r-> Data.total & gt= pt-& gt;; Data.total) pt = r;

R = r-& gt;; 다음으로,

}

Printf("\n-중복 결과-\ n ");

Printf("C 언어 & lt60:%d (임의) \n ",countc);

Printf(" Math & lt;; 60:%d (임의) \n ",countm);

Printf ("영어 & lt60:%d (임의) \n", counte);

Printf ("-\ n");

Printf ("총점이 가장 높은 학생 이름: %s 총점: %d\n", pt-& gt;; Data.name, pt-& gt;; Data.total);

Printf ("영어 성적이 가장 높은 학생 이름: %s 총 성적: %d\n", PE-& gt;; Data.name, PE-& gt;; Data.egrade);

Printf ("수학 성적이 가장 높은 학생 이름: %s 총 성적: %d\n", pm-& gt;; Data.name, pm-& gt;; Data.m grade);

Printf(" C 점수가 가장 높은 학생 이름: %s 총 점수: %d\n ",PC-& gt;; Data.name, PC-& gt;; Data.c grade);

Printf(" \ n \ n 아무 키나 눌러 ");

Getchar ();

}

/* 삽입 정렬 방법을 사용하여 단일 연결된 목록을 총점 필드별로 내림차순으로, 높음에서 낮음까지 */

잘못된 정렬 (링크 l)

{

링크 ll;

노드 *p, *rr, * s;;

Int I = 0;;

만약 (l-> Next==NULL)

{system ("cls");

Printf(" \ n = = = = =>;; 학생 기록이 아닙니다! \ n ");

Getchar ();

반환;

}

Ll=(Node*)malloc(sizeof(Node)) 입니다. /* 새 노드를 만드는 데 사용 */

만약 (! Ll) 을 참조하십시오

{

Printf("\n 메모리 할당 실패 "); /* 요청을받지 못한 경우 알림 메시지 인쇄 */

반환; /* 주 인터페이스로 돌아가기 */

}

Ll-& gt;; Next = NULL

Disp (l); /* 정렬 전에 모든 학생 기록 표시 */

P = l-& gt;; 다음으로,

While(p) /*p! =NULL*/

{

S = (node *) malloc (sizeof (node)); /* 새 노드는 원래 연결된 목록에서 가져온 노드 정보를 저장하는 데 사용됩니다. */

만약 (! S) /*s==NULL*/

{

Printf("\n 메모리 할당 실패 "); /* 요청을받지 못한 경우 알림 메시지 인쇄 */

반환; /* 주 인터페이스로 돌아가기 */

}

S-> Data = p-& gt;; 데이터; /* 데이터 필드 채우기 */

S-> Next = NULL/* 포인터 필드가 비어 있음 */

Rr = ll

/*rr 링크리스트는 단일 노드를 삽입한 후 정렬을 유지하는 링크리스트이고, ll 은 이 링크리스트의 헤드 포인터이며, 매번 처음부터 삽입 위치를 검색합니다. */

While (RR->; 다음! = NULL & amp& ampRR-& gt;; 다음-> Data.total & gt = p->; 데이터. 합계)

{RR = RR-& gt;; 다음으로, }/* 포인터는 전체 점수가 P */ 가 가리키는 전체 노드 점수보다 작은 노드 위치로 이동합니다

If (RR-> Next==NUll)/* 새 연결된 목록 ll 에 있는 모든 노드의 총 점수가 p->; Data.total 이 크면 p 가 가리키는 노드를 연결된 테이블의 끝에 추가합니다 */

RR-& gt;; Next = s;;

Else /* 그렇지 않으면 총점 필드가 첫 번째 노드보다 작은 노드 앞에 노드 */

{

S-> Next = RR-& gt;; 다음으로,

RR-& gt;; Next = s;;

}

P = p-& gt;; 다음으로, /* 원래 연결된 목록의 포인터가 한 노드 아래로 이동합니다 */

}

L-> Next = ll-& gt;; 다음으로, /* 정렬된 연결된 목록의 헤더 포인터는 /*ll */ 에 저장됩니다

P = l-& gt;; 다음으로, /* 정렬 된 헤드 포인터는 p 에 할당되어 순위를 채울 준비가되었습니다 */

그리고 (p! =NULL) /* p 가 비어 있지 않은 경우 다음을 수행합니다 */

{

I++;+; /* 노드 일련 번호 */

P->; Data.mingci = I; /* 할당 등급 */

P = p-& gt;; 다음으로, /* 포인터가 뒤로 이동합니다 */

}

Disp (l);

저장 플래그 =1;

Printf(" \ n = = = = =>;; 정렬 완료! \ n ");

}

/* 데이터를 저장합니다. 사용자가 특별히 이 작업을 하지 않고 데이터를 수정한 경우 시스템을 종료할 때 데이터를 저장하라는 메시지가 표시됩니다 */

유효하지 않은 저장 (링크 l)

{

FILE * FP

노드 * p;

Intcount = 0;

Fp=fopen("c:\\student ","WB "); /* 쓰기 전용으로 이진 파일 열기 */

If(fp==NULL) /* 파일을 열 수 없음 */

{

Printf(" \ n = = = = =>;; 파일 열기 오류! \ n ");

Getchar ();

반환;

}

P = l-& gt;; 다음으로,

While(p)

{

If (fwrite (p, sizeof (node), 1, FP) = = 1)/* 한 번에 하나의 레코드나 노드 정보를 파일에 씁니다. * *

{

P = p-& gt;; 다음으로,

Count++;+;

}

기타

{

깨뜨리다

}

}

If(count & gt;; 0)

{

Getchar ();

Printf ("\ n \ n \ n \ n \ n = = = = = = = > 파일 저장이 완료되었습니다. 저장된 총 레코드 수는 %d\n, 개수);

Getchar ();

저장 플래그 = 0;

}

기타

{

Printf ("현재 링크가 비어 있습니다. 학생 기록이 저장되지 않았습니다! \ n ");

Getchar ();

}

Fclose (FP); /* 파일 닫기 */

}

Void main ()

{

링크 l; /* 연결된 목록 정의 */

파일 * FP/* 파일 포인터 */

Int select/* 선택 결과 변수 저장 */

Char ch/* Save (y, y, n, N)*/

Intcount = 0; /* 저장된 파일의 레코드 (또는 노드) 수 */

노드 *p, * r;; /* 레코드 포인터 변수 정의 */

L=(Node*)malloc(sizeof(Node)) 입니다.

만약 (! L)

{

Printf("\n 메모리 할당 실패 "); /* 요청을받지 못한 경우 알림 메시지 인쇄 */

반환; /* 주 인터페이스로 돌아가기 */

}

L-> Next = NULL

R = l;;

Fp=fopen("C:\\student ","a b+"); /* 이진 파일을 추가로 열어 읽고 쓸 수 있습니다. 파일이 없으면 */

If(fp==NULL)

{

Printf(" \ n = = = = =>;; 파일을 열 수 없습니다! \ n ");

종료 (0);

}

그리고 (! Feof(fp))

{

P= (노드 *)malloc(sizeof (노드));

만약 (! P)

{

Printf ("메모리 malloc 실패! \ n "); /* 신청 성공 없음 */

종료 (0); /* 종료 */

}

If (fread (p, sizeof (node), 1, FP) = = 1)/* 파일에서 한 번에 한 학생 레코드 읽기 */

{

P->; Next = NULL

R-> Next = p;;

R = p;; /* r 포인터가 한 단계 뒤로 이동하고 r 이 L- > 다음-> 를 가리킵니다 다음-> ...... r-> NULL*/

Count++;+;

}

}

Fclose (FP); /* 파일 닫기 */

Printf(" \ n = = = = =>;; 파일 열기가 성공했습니다. 총 레코드 수는 %d.\n ",개수);

메뉴 ();

While( 1)

{

메뉴 ();

P = r;;

Printf("\n 선택 사항을 입력하십시오 (0 ~ 9): "); /* 프롬프트 정보 표시 */

Scanf("%d ",& 선택);

If (선택 = = 0)

{

If(saveflag== 1) /* 체인 테이블의 데이터가 저장되지 않고 수정된 경우 이 플래그는 1*/

{getchar ();

Printf(" \ n = = = = =>;; 수정된 레코드를 파일에 저장하시겠습니까? (예/아니오):;

Scanf("%c ",& ampch);

If(ch=='y'||ch=='Y')

저장 (l);

}

Printf ("= = = = = = = = > 유용해 주셔서 감사합니다! );

Getchar ();

깨뜨리다

}

스위치 (선택)

{

사례 1: 추가 (l); 깨뜨리다 /* 학생 레코드 추가 */

사례 2: 델 (l); 깨뜨리다 /* 학생 기록 삭제 */

사례 3: 코란 (왼쪽); 깨뜨리다 /* 학생 기록 조회 */

사례 4: 수정 (l); 깨뜨리다 /* 학생 기록 수정 */

사례 5: 삽입 (l); 깨뜨리다 /* 학생 기록 삽입 */

사례 6: 동지 (l); 깨뜨리다 /* 학생 기록 통계 */

사례 7: 정렬 (l); 깨뜨리다 /* 학생 기록 정렬 */

사례 8: 저장 (l); 깨뜨리다 /* 학생 기록 저장 */

사례 9: disp (l); 깨뜨리다 /* 학생 기록 표시 */

기본값: 오류 (); Getchar (); 깨뜨리다 /* 키가 잘못되었습니다. 0-9*/

}

}

}