현재 위치 - 중국 분류 정보 발표 플랫폼 - 비즈니스 서비스 정보 - C언어 학생 성과관리 시스템

C언어 학생 성과관리 시스템

찾아낸 코드! 시도해 보세요:

C 언어 학생 성과 관리 시스템

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

int shoudsave=0; /* */

struct Student

{

char num [10]; /* 학생 번호*/

문자 이름[20]

문자 성별[4]

int cgrade;

int mgrade;

int egrade;

int totle

char Neartime[10];/ * 마지막 업데이트 시간*/

}

typedef 구조체 노드

{

struct 학생 데이터; >struct node *next;

}노드, *링크

void menu()

{

printf("** ************************************************** * ****************************");

printf("\t1학생정보 등록\t\t \t\t\t2학생 정보 삭제\n");

printf("\t3학생 정보 조회\t\t\t\t\t4학생 정보 수정\n");

printf("\t5학생 정보 저장\t\t\t\t\t0시스템 종료\n")

printf("************ *** ************************************************ ** *****************\n");

}

void printstart()

{ < /p>

printf("---------------- -----------------\n");

}

< p> void Wrong()

{

printf("\n======gt; 팁: 입력 오류!\n")

}

void Nofind()

{

printf("\n=====gt; 팁: 학생을 찾을 수 없습니다!\n") ;

}

void printc() /* 이 함수는 중국어를 출력하는 데 사용됩니다*/

{

printf(" Student ID \t 이름, 성별, 영어 점수, 수학 점수, C 언어 점수, 총점, 평균 점수\n");

}

void printe(Node *p)/ * 이 함수는 영어를 출력하는데 사용됩니다 */

{

printf("-12ss\ts\td\td\td\t d\t d\n", p-gt; 데이터.n

음, p-gt; data.sex, p-gt; data.mgrade, p-gt; p-gt; data.ave);

}

Node* Locate(Link l, char findmess[], char nameornum[]) /* 이 함수는 연결된 목록 및 포인터 반환*/

{

Node *r

if(strcmp(nameornum, "num")== 0) /* 학생 번호로 쿼리*/

{

r=l-gt;

while(r!=NULL)

{

if(strcmp(r-gt; data.num, findmess)==0)

return r

r=r -gt; ;

}

}

else if(strcmp(nameornum, "name")==0) /* 이름으로 쿼리*/

{

r=l-gt; 다음;

while(r!=NULL)

{

< p>if( strcmp(r-gt; data.name, findmess)==0)

return r

r=r-gt; /p>

}

return 0;

}

void Add(Link l) /* 학생 추가*/

{

노드 *p, *r, *s;

문자 번호[10]

r=l; s=l-gt; next;

while(r-gt; next!=NULL)

r=r-gt; /

while(1)

{

printf("학번을 입력하세요. ('0'으로 이전 메뉴로 돌아갑니다: )");

scanf("s", num);

if(strcmp(num, "0")==0)

break;

동안(들)

{

if(strcmp(s-gt;data.num,num)==0)

{

printf("======gt; 팁: 학번이 's'인 학생이 이미 존재합니다. 수정하려면 '4 수정'을 선택하세요!\n", num);

printstart();

printe(s)

printstart(); p >printf("\n");

return;

}

s=s-gt; < /p>

p=(Node *)malloc(sizeof(Node));

strcpy(p-gt; data.num, num)

printf( " 이름을 입력하세요: ")

p>

scanf("s", p-gt; data.name);

getchar()

printf("성별을 입력하세요: "); /p>

scanf("s", p-gt; data.sex);

getchar()

printf("C 언어 점수를 입력하세요:" );

scanf("d", amp; p-gt; data.cgrade)

getchar()

printf("수학을 입력하세요. 점수: ");

scanf("d", amp; p-gt; data.mgrade);

getchar();

printf( " 영어 점수를 입력하세요:");

scanf("d", amp; p-gt; data.egrade);

getchar();

p-gt; data.egrade p-gt; data.ave=p-gt; data.totle / 3;

/* 정보 입력이 완료되었습니다*/

p-gt; next=NULL

r-gt; p;

r=p;

shoudsave=1

}

void Qur( 링크 l) /* 학생 쿼리*/

{

int sel

char findmess[20]

Node *p; ;

if(!l-gt; next)

{

printf("\n=====gt; 팁: 정보가 없습니다. queried !\n");

return;

}

printf("\n=====gt; 1 학생 번호로 검색\n = ====gt; 2 이름으로 검색\n");

scanf("d", amp; sel);

if(sel==1)/* learn Number*/

{

printf("찾고 싶은 학생 번호를 입력하세요: ")

scanf("s", findmess) ; < /p>

p=Locate(l, findmess, "num")

if(p)

{

printf(" \t \t\t\t검색 결과\n");

printstart();

printc();

printe(p);

p >

printstart();

}

else

Nofind()

}

else if(sel==2) /* 이름*/

{

printf("찾고 싶은 이름을 입력하세요: "); >scanf("s", findmess);

p=Locate(l, findmess, "이름")

if(p)

{ < /p >

printf("\t\t\t\t검색 결과\n")

<

p>printstart();

printc();

printe(p)

printstart(); p>

p>

else

Nofind()

}

else

Wrong(); /p>

}

void Del(Link l) /* 삭제*/

{

int sel; 노드 *p,* r;

char findmess[20]

if(!l-gt;next)

{

printf("\ n======gt; 팁: 데이터를 삭제할 수 없습니다!\n")

return; >printf("\n= ====gt; 1 학생 번호로 삭제\n=====gt; 2 이름으로 삭제\n")

scanf("d",amp ; sel);

if(sel==1)

{

printf("삭제할 학생 번호를 입력하세요: "); p>

scanf( "s", findmess)

p=Locate(l, findmess, "num")

if(p)

< p>{

r=l;

while(r-gt;next!=p)

r=r-gt;next; >

r-gt; next=p-gt;

free(p)

printf("\n=====gt; 학생이 성공적으로 삭제되었습니다!\n ");

shoudsave=1;

}

else

Nofind();

} < /p>

else if(sel==2)

{

printf("삭제할 이름을 입력하세요: " );

scanf("s", findmess);

p=Locate(l, findmess, "이름")

if(p) < /p>

{

r=l;

while(r-gt;next!=p)

r=r-gt;next ;

r -gt; next=p-gt;

무료(p)

printf("\n====gt ; 팁: 학생이 성공적으로 삭제되었습니다! \n");

shoudsave=1;

}

else

찾을 수 없음 ();

}

else

잘못됨()

}

void 수정(링크 l )

{ < /p>

노드 *p

char findmess[20]

if(!l-gt;next) < /p>

{

printf("\n=====gt; 팁: 데이터를 수정할 수 없습니다!\n")

return; p>

}

< p>printf("수정할 학번을 입력하세요:");

scanf("s", findmess);

p=Locate(l, findmess, "num")

if(p)

{

printf("새 학생 번호(원래 s)를 입력하십시오: ", p-gt; data.num)

scanf("s" , p-gt; data.num);

printf("새 이름을 입력하세요(원래 s): ", p-gt; data.name)

scanf (" s", p-gt; data.name);

getchar();

printf("새 성별을 입력하세요(원래 s):", p- gt; data .sex);

scanf("s", p-gt; data.sex)

printf("새 C 언어 점수를 입력하세요(원래 d점): " , p-gt; data.cgrade);

scanf("d", amp; p-gt; data.cgrade)

getchar(); p>printf("새 수학 점수를 입력하세요(원래 d 점수):", p-gt; data.mgrade)

scanf("d", amp; p-gt; data.mgrade );

getchar();

printf("새 영어 점수를 입력하세요(원래 d 점수):", p-gt; data.egrade);

scanf("d",amp;p-gt;data.egrade)

p-gt;data.totle=p-gt;data.egrade p-gt; -gt; data.mgrade; data.ave=p-gt;

printf( "\n====gt; ; 팁: 데이터가 성공적으로 수정되었습니다!\n");

shoudsave=1;

}

else

else

shoudsave=1; p>

Nofind()

}

void Disp(링크 l)

{

int count=0;

노드 *p

p=l-gt;

{

printf("\n=====gt; 팁: 데이터를 표시할 수 없습니다!\n")

return; p>}

printf("\t\t\t\t결과 표시\n")

printstart()

printc(); /p>

printf( "\n");

while(p)

{

printe(p); p>p=p-gt;

}

printstart()

printf("\n"); >}

void Tongji(Link l)

{

노드 *pm, *pe, *pc, *pt, *pa /* 예전에는; 가장 높은 점수를 받은 링크를 가리킵니다*/ < /p>

다음 노드 *r=l-gt;

p>if(!r)

{

printf("\n======gt; 팁: 계산할 데이터가 없습니다!\n"); /p>

반환;

}

pm=pe=pc=pt=pa=r

while(r!=NULL) < /p>

{

if(r-gt;data.cgradegt;=pc-gt;data.cgrade)

pc=r; >if( r-gt;data.mgradegt;=pm-gt;data.mgrade)

pm=r

if(r-gt;data.egradegt;=pe -gt; data.egrade)

pe=r;

if(r-gt; data.totlegt;=pt-gt; data.totle) ​​​​

pt= r;

if(r-gt;data.avegt;=pa-gt;data.ave)

pa=r; >r=r- gt;

}

printf("---------- -------- --통계 결과-------------------\n"); < /p>

printf( "총점이 가장 높은 사람:\ts d점\n",pt-gt;data.name,pt-gt;data.totle) ​​

printf ("평균 점수가 가장 높은 사람:\ts d점 \n",pa-gt;data.name,pa-gt;data.ave)

printf("최고 영어 점수:\ ts d points\n",pe-gt;data.name , pe-gt; data.egrade);

printf("수학에서 가장 높은 점수를 받은 사람:\ts d points\n" , pm-gt; data.name, pm-gt; data.mgrade); < /p>

printf("c 언어에서 가장 높은 점수: \ts d points\n", pc-gt; pc-gt; data.cgrade);

printstart()

}

void Sort(링크 l)

{ < /p>

링크 ll;

노드 *p, *rr, *s

ll=(Link)malloc(sizeof(Node)); 새 링크 목록 만들기*/

ll-gt; next= NULL

if(l-gt; next==NULL)

{

printf("\n======gt; 팁: 없음 데이터를 정렬할 수 있습니다!\n")

return; p>

p=l-gt; 다음;

while( p)

{

s=(Node*)malloc(sizeof(Node )); /* 정보를 저장할 새 연락처 만들기*/

s-gt; p>

rr=ll;

while(rr-gt; next !=NULL amp; rr-gt; next-gt; data.t

otlegt;=p-gt;data.totle) ​​​​

rr=rr-gt;next

if(rr-gt;next==NULL)

rr-gt; 다음=s;

else

s-gt;

rr-gt; 다음=s;

}

p=p-gt; (l );

l-gt; next=ll-gt;

printf("\n=====gt; 팁: 정렬이 완료되었습니다!\ n") ;

}

void 저장(링크 l)

{

FILE* fp;

노드 * p;

int flag=1, count=0;

fp=fopen("c:\\student", "wb"); p>if (fp==NULL)

{

printf("\n=====gt; 팁: 파일을 다시 여는 동안 오류가 발생했습니다!\n") ;

exit(1);

}

p=l-gt; >

{

if(fwrite(p, sizeof(Node), 1, fp)==1)

{

p=p- gt; 다음;

}

else

{

flag=0; p>

break;

}

}

if(플래그)

{

printf ("\n =====gt; 팁: 파일이 성공적으로 저장되었습니다. (d개의 레코드가 저장되었습니다.)\n", count)

shoudsave=0; p>}

}

p>

fclose(fp)

}

void main()

{

링크 l;/* 링크 테이블*/

FILE *fp; /* 파일 포인터*/

int sel

char ch;

char jian;

int 개수=0

노드 *p, *r; >printf("\t\t\t\t학생 점수 관리 시스템\n \t\t\t\t---------복건성 농업 전문 대학 회계 0501 황환(32번)\n");

l=(Node*)malloc(sizeof(노드));

l-gt; next=NULL

>

fp=fopen("C:\\student"," rb")

if(fp==NULL)

{

printf("\n=====gt; 팁: 파일을 아직 사용할 수 없습니다. 존재합니까? 생성하시겠습니까? (y/n)\n");

scanf("c",amp;jian);

if(jian=='y'||jian=='Y ')

fp=fopen("C:\\stud

ent", "wb");

else

exit(0);

}

printf("\n== ===gt; 팁: 파일이 열려 있고 레코드를 가져오는 중입니다...\n");

while(!feof(fp))

{

p>

p=(Node*)malloc(sizeof(Node));

if(fread(p,sizeof(Node),1,fp)) /* Put 파일 내용을 In contact*/

p-gt; next=NULL

r-gt; p>

r =p; /* 이 연락처를 연결에 넣습니다*/

count

}

fclose(fp) ; /* 파일 닫기 */

printf("\n======gt; 팁: 레코드 가져오기가 완료되었습니다. ***d 레코드를 가져왔습니다.\n", count);

while(1)

{

menu()

printf("작업을 선택하세요:") ;

< p>scanf("d",amp; sel)

if(sel==0)

{

if( shoudsave==1) < /p>

{ getchar();

printf("\n=====gt; 팁: 데이터가 변경되었습니다. 저장하시겠습니까? 파일 변경 사항(y/n)?\n");

scanf("c", amp; ch);

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

저장(l);

}

printf("\n======gt; 팁: 시스템을 종료했습니다. 안녕!\n"); < /p>

break;

}

switch(sel)

{

케이스 1: Add(l); /* 학생 추가*/

케이스 2: Del(l) /* 학생 삭제*/

case 3: Qur(l); break; /* 학생 쿼리*/

case 4: 수정(l) /* 학생 수정*/

Save(l); /* 학생 저장*/

case 9: printf("\t\t\t==========도움말 정보====== ====\n"); break;

p>

기본값: Wrong(); getchar(); break;

}

}

}

/* */

/*

학생 성과관리 프로그램

관리 준비 학생의 시험 점수를 계산하는 프로그램입니다.

학생의 성적이 각 학생에 대한 하나의 기록 형식으로 파일에 저장되었다고 가정합니다.

각 학생의 기록에 포함된 정보에는 이름, 학생 번호 및 정보가 포함됩니다. 과목별 성적.

프로그램에는 다음과 같은 기능이 있습니다: 이름별로 각 과목의 총점과 평균 점수 찾기,

학생 번호별로 기록 찾기 및 표시, 모든 학생 점수 검색 및 학생 표시 총점을 기준으로 높은 순으로 정보를 제공합니다.

*/

#include lt;

#define SWN 3 /* 강좌 수*/

# Define NAMELEN 20 /* 이름의 최대 문자 수*/

#define CODELEN 10 /* 학생 ID 번호의 최대 문자 수*/

#define FNAMELEN 80 /* 최대 파일 이름의 문자 수*/

#define BUFLEN 80 /* 버퍼의 최대 문자 수*/

/* 강좌 이름 테이블*/

char schoolwork[SWN][NAMELEN 1] = {"중국어", "수학", "영어"}

구조 기록

{

char name[NAMELEN 1]; /* 이름* /

char code[CODELEN 1] /* 학생 번호*/

int mark[SWN] /* 각 과목의 성적 */

int total ; /* 총 점수*/

}stu

구조체 노드

{

< p>char name[NAMELEN 1]; /* 이름*/

char code[CODELEN 1] /* 학생 번호*/

int marks[SWN]; 각 코스*/

int total; /* 총 점수*/

struct node *next; head; /* 연결된 목록 헤드 포인터*/

int total[SWN] /* 각 코스의 총 점수*/

FILE *stfpt; /p>

char stuf[FNAMELEN]; /* 파일 이름*/

/* 지정된 파일에서 레코드 읽기*/

int readrecord(FILE *fpt, 구조체 레코드 *rpt)

{ < /p>

char buf[BUFLEN]

int i

if(fscanf(fpt, " s", buf)!=1)

< p>return 0; /* 파일 끝*/

strncpy(rpt-gt; name, buf, NAMELEN);

fscanf(fpt, "s", buf); < /p>

strncpy(rpt-gt; 코드, buf, CODELEN)

for(i=0; ilt; SWN ; i)

fscanf(fpt, " d",&rpt-gt;marks[i])

for(rpt-gt;total=0,i=0 ;ilt;SWN;i)

rpt -gt; total =rpt-gt;

return 1; >

/* 지정된 파일에 레코드 쓰기*/

writerecord(FILE *fpt, struct Record *rpt)

>

{

int i;

fprintf(fpt, "s\n", rpt-gt; 이름)

fprintf(fpt, "s\n", rpt-gt; 코드)

for(i=0; ilt; SWN; i)

fprintf(fpt, "d\n", rpt -gt; mark[i]);

return;

}

/* 학생 기록 표시*/

displaystu(struct 레코드 *rpt)

{

int i;

printf("\n이름: s\n", rpt-gt; 이름); >

printf("코드: s\n", rpt-gt; 코드)

printf("표시:\n")

for(i=0 ;ilt;SWN;i)

printf(" -15s : 4d\n",schoolwork[i],rpt-gt;marks[i])

printf(" Total: 4d\n", rpt-gt; total);

}

/* 각 과목의 총점을 계산합니다*/

int totalmark( char *fname)

{

FILE *fp;

구조 레코드

int count, i ; < p>if((fp=fopen(fname,"r"))==NULL)

{

printf("파일 s를 열 수 없습니다.\n", fname );

return 0;

}

for(i=0; ilt; SWN; i)

합계[i ] =0;

count=0;

while(readrecord(fp,amp;s)!=0)

{

for(i=0;ilt;SWN;i)

total[i] =s.marks[i]

count; /p>

p>

fclose(fp);

return count; /* 레코드 수를 반환합니다*/

}

/* 학생 정보를 목록으로 표시*/

voidlisttu(char *fname)

{

FILE *fp> 구조체 레코드 s;

if((fp=fopen(fname,"r"))==NULL)

{

printf("할 수 없습니다. 파일 s를 엽니다.\n",fname) ;

return ;

}

while(readrecord(fp,amp;s)!=0) < /p>

{

displaystu(amp;s);

printf("\n 계속하려면 Enter 키를 누르세요...\n"); p>while(getchar()!=' \n'

);

}

fclose(fp);

return;

}

/* 연결된 목록 */

struct node *makelist(char *fname)

{

FILE *fp>struct Record s;

p>

구조체 노드 *p, *u, *v, *h

int i

if((fp=fopen( fname,"r")) ==NULL)

{

printf("s 파일을 열 수 없습니다.\n", fname)

NULL을 반환합니다.

}

h=NULL;

p=(struct node *)malloc(sizeof(struct node)); p>while(readrecord(fp , (구조 레코드 *)p)!=0)

{

v=h

while(vamp;amp ;p-gt;totallt; =v-gt; 총계)

{

u=v; p>

} < /p>

if(v==h)

h=p

else

u-gt; next=p; next=v;

p=(구조체 노드 *)malloc(sizeof(구조체 노드))

}

free(p);

fclose(fp);

}

/ * 연결된 목록의 요소를 순차적으로 표시합니다 */

void displaylist(struct node *h)

{

while(h!=NULL)

{

displaystu((struct Record *)h);

printf("\n 계속하려면 Enter 키를 누르세요...\n"); >

while(getchar() !='\n');

h=h-gt;

}

/p>

}

p>

/* 학생 이름으로 학생 기록 검색*/

intretrievebyn(char *fname, char *key)

{

FILE * fp>

int c;

구조 레코드

if((fp=fopen (fname, "r"))==NULL)

{

printf("s 파일을 열 수 없습니다.\n",fname)

0을 반환

}

p>

c=0

while(readrecord(fp,amp;s)!=0) < /p>

{

if(strcmp(s .name, key)==0)

>

{

디스플레이스투(amp;s)

c

}

}

fclose(fp);

if(c==0)

printf("학생 s는 파일 s에 없습니다.\n", key, fname); /p>

return 1;

}

/* 학생 번호로 학생 기록 검색*/

intretrievebyc(char *fname, char * 키)

{

FILE *fp>

int c

구조 레코드

if ((fp=fopen(fname,"r"))==NULL)

{

printf("파일을 열 수 없습니다.\n",fname); /p>

0을 반환

}

c=0

while(readrecord(fp,amp;s)!=0) < /p>

{

if(strcmp(s.code,key)==0)

{

displaystu(amp;s) ;

c ;

휴식;

}

}

fclose(fp);

if(c==0)

printf("학생 s는 파일 s에 없습니다.\n", key, fname)

return 1; /p>

}

main()

{

int i, j, n

char <; /p>

char buf[BUFLEN];

FILE *fp;

구조 레코드

clrscr(); p>printf("학생 성적 기록 파일 이름을 입력하세요: ")

scanf("s",stuf)

if((fp=fopen(stuf, ") r"))==NULL)

{

printf("파일 s가 종료되지 않습니다. 파일을 생성하시겠습니까? (Y/N) ",stuf ) ;

getchar();

c=getchar()

if(c=='Y'||c=='y') /p>

{

fp=fopen(stuf, "w");

printf("파일에 쓰려는 레코드 번호를 입력하세요: " ) ;

scanf("d", amp; n);

for(i=0; ilt; n; i)

{

printf("학생 이름을 입력하세요: ")

scan

f("s",amp;s.name);

printf("학생의 코드를 입력하세요: ")

scanf("s",amp;s.code) ;

for(j=0;jlt;SWN;j)

{

printf("s 표시를 입력하세요: ",schoolwork[j]) ;

scanf("d",amp;s.marks[j])

}

writerecord(fp,amp;s); p>

p>

}

fclose(fp)

}

}

fclose(fp) ;

getchar();

/*clrscr();*/

puts("이제 레코드를 관리하는 명령을 입력할 수 있습니다.") ;

puts("m : 점수의 평균.");

puts("t : 점수의 총합.")

puts( "n : 학생 이름으로 기록을 검색합니다.");

puts("c: 학생 코드로 기록을 검색합니다.")

puts("l: 모든 기록을 나열합니다. ");

puts("c: 학생 코드로 기록을 검색합니다.");

puts("l: 모든 기록을 나열합니다."); p>

puts ("s: 합계를 기준으로 레코드를 정렬하고 나열합니다.")

puts("q: quit!")

while(1)

{

puts("명령어를 입력하세요: ");

scanf(" c",amp; c) /* 선택 명령 입력*/

if(c=='q'||c=='Q')

{

puts("\n 이용해 주셔서 감사합니다. ")

break; /* q, 프로그램 실행 종료*/

}

switch(c)

{

case 'm': /* 평균 점수 계산*/

case 'M':

if((n=totalmark(stuf))==0)

{

puts("오류!");

break;

}

printf(" \n") < /p>

for(i=0; ilt; SWN; i )

printf("-15세의 평균은: .2f.\n",schoolwork[i] , (float)total[ i]/n);

break;

case 't': /* 총점 계산*/

case 'T':

if((n=totalmark(stuf))==0)

{

puts("오류!")

break; /p>

}

printf("\n");

for(i=0; ilt; SWN; i )

printf("-15s의 총 성적은 d.\n",schoolwork [i], total[i]);

break;

case 'n': /* 학생 이름으로 기록 찾기*/

case ' N ':

printf("검색하려는 학생의 이름을 입력하세요: ")

scanf("s",buf)

retrievebyn ( stuf, buf);

break;

case 'c': /* 학생 번호로 기록 검색*/

case 'C':

printf("검색하려는 학생의 코드를 입력하세요: ");

scanf("s",buf)

retrievebyc(stuf, buf) ;

break;

case 'l': /* 모든 학생 기록 나열*/

case 'L':

< p>liststu (stuf);

break;

case 's': /* 총점에 따라 높은 순으로 표시*/

case ' S' :

if((head=makelist(stuf))!=NULL)

displaylist(head)

break; 기본값: 중단;

}

}

}