찾아낸 코드! 시도해 보세요:
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>
{
노드 *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)
{ p>
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>
{ 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)
{ p>
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 p>
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>
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)
{ p>
케이스 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) p>
{
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) p>
{
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)
{ p>
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': p>
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; 기본값: 중단;
}
}
}