현재 위치 - 회사기업대전 - 중국 기업 정보 - 설계주제 : 학생정보관리시스템 설계

설계주제 : 학생정보관리시스템 설계

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

int shudsave=0; /* */

학생 구조체

{

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

char 이름[20];

char sex[4];

int cgrade;

int egrade;

int totle;

int ave;

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

}; /p>

typedef 구조체 노드

{

구조 학생 데이터

구조 노드 *next; *링크;

void menu()

{

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

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

p>

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

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

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

}

void printstart()

{

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

}

void Wrong()

{

p>

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

}

void Nofind()

{

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

void printc() /* 중국어를 출력하는 함수입니다*/

{

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

}

void printe(Node *p)/* 출력하는 함수입니다. 영어*/

{

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

-gt;data.egrade,p-gt;data.mgrade,p-gt;data.cgrade,p-gt;data.totle,p-gt;data.ave)

} p>

Node* Locate(Link l, char findmess[], char nameornum[]) /* 이 함수는 연결 목록에서 필요한 접점을 찾고 포인터를 반환하는 데 사용됩니다*/

{

노드 *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)

{

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

return r;

r=r-gt; p>return 0;

}

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

{

노드 *p , *r , *s;

문자 번호[10]

s=l-gt;

while(r-gt; next!=NULL)

r=r-gt; /* 포인터를 끝에 놓습니다*/

while(1)

{

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

scanf("s" , num) ;

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

break; p>{

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

{

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

printstart();

printc( );

printe(s);

printstart()

printf("\n"); >

반환;

}

s=s-gt;

}

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

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

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

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

/p>

getchar();

printf("성별을 입력하세요:")

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("영어 점수를 입력하세요: "); ", amp; p-gt; data.egrade);

getchar();

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

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

p-gt; 다음=NULL;

r-gt; shudsave =1;

}

}

void Qur(Link l) /* 학생 쿼리*/

{

int sel;

char findmess[20];

노드 *p>if(!l-gt;next)

{

printf("\n=====gt; 팁: 쿼리할 정보가 없습니다!\n")

return; >

}

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

scanf("d", amp; sel)

if(sel==1)/* 학생 번호*/

{

printf(" 찾으려는 학생 번호를 입력하세요: ")

scanf("s", findmess)

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

p>

if(p)

{

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

printstart();

printe(p); >

}

else

Nofind()

}

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

{

printf("찾고 있는 이름을 입력하세요:")

scanf("s", findmess)

p>

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

if(p)

{

printf("\t\ t\t\t결과 찾기\n") ;

printstart();

printc();

printe(p);

printstart();

}

else

Nofind();

}

else

Wrong()

}

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

{

int sel;

노드 *p, *r

char findmess[20]

p>

p>

if(!l-gt; next)

{

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

return;

}

printf("\n======gt; 1 학생이 삭제 number\n==== =gt;2이름으로 삭제\n");

scanf("d", amp; sel);

if(sel==1)

{

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

scanf("s", findmess)

p=찾기(l, findmess, "num");

if(p)

{

r=l;

while(r -gt; next!=p)

r=r-gt; 다음; p>

무료 (p);

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

}

else

Nofind()

}

else if( sel==2)

{

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

scanf("s", findmess);

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

if(p)

{

r=l;

while(r-gt; next!=p)

r=r-gt; next=p-gt; next;

free(p);

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

shoudsave=1;

}

else

Nofind()

}

else

잘못됨 ();

}

void 수정(링크 l)

{

노드 * p;

char findmess[20];

if(!l-gt;next)

{

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

return;

}

printf("제발 수정할 학생 ID 번호를 입력하세요:") ;

scanf("s", findmess);

<

p>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",&p-gt;data.cgrade);

getchar();

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

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

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

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

p-gt; data.egrade p-gt; data.mgrade; p-gt; data.totle/3;

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

}

else

Nofind()

}

void Disp(링크 l)

{

int count=0;

노드 *p

p=l -gt;

if(!p)

{

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

return;

}

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

p>

printstart();

printc();

printf("\n")

동안(p)

{

printe(p);

p=p-gt;

}

printstart(); >

printf("\n");

}

void Tongji(링크 l)

{

노드 * pm, *pe, *pc, *pt, *pa /* 가장 높은 점수를 받은 연락처를 가리키는 데 사용됩니다.*/

노드 *r=l-gt; p>if(!r)

{

printf("

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

return;

}

pm= pe=pc =pt=pa=r;

while(r!=NULL)

{

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; 다음; ("--- -------------통계 결과---- --------- -----------\n");

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("수학에서 가장 높은 점수를 받은 것:\n" ts d points\n", pm-gt; data.name, pm-gt; data.mgrade) ;

printf("c 언어에서 가장 높은 값:\ts d 포인트\n", pc-gt ;data.name, pc-gt; data.cgrade)

printstart ();

}

void Sort(링크 l)

{

링크 ll

노드 *p, *rr, *s;

ll=(Link)malloc(sizeof(Node)) /* 새로운 조인 테이블을 생성하는 데 사용됨*/

ll-gt ; next=NULL;

if(l-gt; next==NULL)

{

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

return;

}

p=l-gt; next;

while(p)

{

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

s-gt; 데이터=p-gt; next=NULL; rr-gt;next!=NULL amp;amp; rr-gt;next-gt;data.totlegt;=p-gt;data .totle) ​​​​

r

r=rr-gt;

if(rr-gt; next==NULL)

rr-gt;

else

{

s-gt; 다음=rr-gt; /p>

p=p-gt; 다음;

}

무료(l)

l-gt; ;next;

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

}

void 저장( 링크 l)

{

FILE* fp>노드 *p

int flag=1, count=0; /p>

fp=fopen("c:\\student", "wb")

if(fp==NULL)

{

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

exit(1);

p=l-gt; 다음;

while(p)

{

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

{

p=p-gt; 다음;

else

{

flag=0

break; > }

if(flag)

{

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

shoudsave=0;

}

fclose(fp);

}

void main()

{

링크 l;/* 연결 목록*/

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

int sel;

char jian; >

노드 *p, *r;

printf("\t\t\t\t학생 점수 관리 시스템\n\t\t\t\t-------푸젠 농업전문대학 회계학 0501 황환(32번)\n");

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

l-gt; next =NULL ;

r=l;

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:\\student", "wb")

else

ex

it(0);

}

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

while(!feof(fp))

{

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

if(fread(p, sizeof(Node), 1, fp)) /* 파일 내용을 접점에 넣습니다*/

{

p- gt; next=NULL;

r-gt; next=p;

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

}

}

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

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

while(1)

{

menu();

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

scanf("d", amp; sel); >if(sel ==0)

{

if(shoudsave==1)

{ getchar()

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

scanf(" c", amp; ch);

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

저장(l);

}

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

break;

}

switch(sel)

{

case 1: Add(l) /* 학생 추가*/

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

케이스 3: Qur(l) /* 학생 쿼리*/

4: 수정(l); break; /* 학생 수정*/

case 5: Save(l) /* 학생 저장*/

printf( "\t\t\t==== ======도움말 정보==========\n"); 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

구조체 노드

{

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)

{

char buf[BUFLEN]

int i

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

return 0; /* 파일 끝*/

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

fscanf(fpt, "s", buf);

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; 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 ;

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)

{

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>

}

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")

p>

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

h=h-gt;

}

return;

}

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

intretrievebyn(char *fname, char *key)

{

FILE * fp;

int c;

구조 레코드

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

{

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

return 0;

}

p>

c=0;

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

{

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)

{

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")

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':

liststu (stuf);

break;

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

case ' S' :

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

displaylist(head)

break; 기본값: 중단;

}

}

}

copyright 2024회사기업대전