成績管理系統c語言
⑴ c語言 學生成績管理系統
我找的一個代碼!試一下:
c語言學生成績管理系統
#include "stdio.h" 
#include "stdlib.h" 
#include "string.h" 
int shoudsave=0; /* */ 
struct student 
{ 
char num[10];/* 學號 */ 
char name[20]; 
char sex[4]; 
int cgrade; 
int mgrade; 
int egrade; 
int totle; 
int ave; 
char neartime[10];/* 最近更新時間 */ 
}; 
typedef struct node 
{ 
struct student data; 
struct node *next; 
}Node,*Link; 
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() 
{ 
printf("-----------------------------------------------------------------------\n"); 
} 
void Wrong() 
{ 
printf("\n=====>提示:輸入錯誤!\n"); 
} 
void Nofind() 
{ 
printf("\n=====>提示:沒有找到該學生!\n"); 
} 
void printc() /* 本函數用於輸出中文 */ 
{ 
printf(" 學號\t 姓名 性別 英語成績 數學成績 C語言成績 總分 平均分\n"); 
} 
void printe(Node *p)/* 本函數用於輸出英文 */ 
{ 
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave); 
} 
Node* Locate(Link l,char findmess[],char nameornum[]) /* 該函數用於定位連表中符合要求的接點,並返回該指針 */ 
{ 
Node *r; 
if(strcmp(nameornum,"num")==0) /* 按學號查詢 */ 
{ 
r=l->next; 
while(r!=NULL) 
{ 
if(strcmp(r->data.num,findmess)==0) 
return r; 
r=r->next; 
} 
} 
else if(strcmp(nameornum,"name")==0) /* 按姓名查詢 */ 
{ 
r=l->next; 
while(r!=NULL) 
{ 
if(strcmp(r->data.name,findmess)==0) 
return r; 
r=r->next; 
} 
} 
return 0; 
} 
void Add(Link l) /* 增加學生 */ 
{ 
Node *p,*r,*s; 
char num[10]; 
r=l; 
s=l->next; 
while(r->next!=NULL) 
r=r->next; /* 將指針置於最末尾 */ 
while(1) 
{ 
printf("請你輸入學號(以'0'返回上一級菜單:)"); 
scanf("%s",num); 
if(strcmp(num,"0")==0) 
break; 
while(s) 
{ 
if(strcmp(s->data.num,num)==0) 
{ 
printf("=====>提示:學號為'%s'的學生已經存在,若要修改請你選擇'4 修改'!\n",num); 
printstart(); 
printc(); 
printe(s); 
printstart(); 
printf("\n"); 
return; 
} 
s=s->next; 
} 
p=(Node *)malloc(sizeof(Node)); 
strcpy(p->data.num,num); 
printf("請你輸入姓名:"); 
scanf("%s",p->data.name); 
getchar(); 
printf("請你輸入性別:"); 
scanf("%s",p->data.sex); 
getchar(); 
printf("請你輸入c語言成績:"); 
scanf("%d",&p->data.cgrade); 
getchar(); 
printf("請你輸入數學成績:"); 
scanf("%d",&p->data.mgrade); 
getchar(); 
printf("請你輸入英語成績:"); 
scanf("%d",&p->data.egrade); 
getchar(); 
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; 
p->data.ave=p->data.totle / 3; 
/* 信息輸入已經完成 */ 
p->next=NULL; 
r->next=p; 
r=p; 
shoudsave=1; 
} 
} 
void Qur(Link l) /* 查詢學生 */ 
{ 
int sel; 
char findmess[20]; 
Node *p; 
if(!l->next) 
{ 
printf("\n=====>提示:沒有資料可以查詢!\n"); 
return; 
} 
printf("\n=====>1按學號查找\n=====>2按姓名查找\n"); 
scanf("%d",&sel); 
if(sel==1)/* 學號 */ 
{ 
printf("請你輸入要查找的學號:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"num"); 
if(p) 
{ 
printf("\t\t\t\t查找結果\n"); 
printstart(); 
printc(); 
printe(p); 
printstart(); 
} 
else 
Nofind(); 
} 
else if(sel==2) /* 姓名 */ 
{ 
printf("請你輸入要查找的姓名:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"name"); 
if(p) 
{ 
printf("\t\t\t\t查找結果\n"); 
printstart(); 
printc(); 
printe(p); 
printstart(); 
} 
else 
Nofind(); 
} 
else 
Wrong(); 
} 
void Del(Link l) /* 刪除 */ 
{ 
int sel; 
Node *p,*r; 
char findmess[20]; 
if(!l->next) 
{ 
printf("\n=====>提示:沒有資料可以刪除!\n"); 
return; 
} 
printf("\n=====>1按學號刪除\n=====>2按姓名刪除\n"); 
scanf("%d",&sel); 
if(sel==1) 
{ 
printf("請你輸入要刪除的學號:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"num"); 
if(p) 
{ 
r=l; 
while(r->next!=p) 
r=r->next; 
r->next=p->next; 
free(p); 
printf("\n=====>提示:該學生已經成功刪除!\n"); 
shoudsave=1; 
} 
else 
Nofind(); 
} 
else if(sel==2) 
{ 
printf("請你輸入要刪除的姓名:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"name"); 
if(p) 
{ 
r=l; 
while(r->next!=p) 
r=r->next; 
r->next=p->next; 
free(p); 
printf("\n=====>提示:該學生已經成功刪除!\n"); 
shoudsave=1; 
} 
else 
Nofind(); 
} 
else 
Wrong(); 
} 
void Modify(Link l) 
{ 
Node *p; 
char findmess[20]; 
if(!l->next) 
{ 
printf("\n=====>提示:沒有資料可以修改!\n"); 
return; 
} 
printf("請你輸入要修改的學生學號:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"num"); 
if(p) 
{ 
printf("請你輸入新學號(原來是%s):",p->data.num); 
scanf("%s",p->data.num); 
printf("請你輸入新姓名(原來是%s):",p->data.name); 
scanf("%s",p->data.name); 
getchar(); 
printf("請你輸入新性別(原來是%s):",p->data.sex); 
scanf("%s",p->data.sex); 
printf("請你輸入新的c語言成績(原來是%d分):",p->data.cgrade); 
scanf("%d",&p->data.cgrade); 
getchar(); 
printf("請你輸入新的數學成績(原來是%d分):",p->data.mgrade); 
scanf("%d",&p->data.mgrade); 
getchar(); 
printf("請你輸入新的英語成績(原來是%d分):",p->data.egrade); 
scanf("%d",&p->data.egrade); 
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; 
p->data.ave=p->data.totle/3; 
printf("\n=====>提示:資料修改成功!\n"); 
shoudsave=1; 
} 
else 
Nofind(); 
} 
void Disp(Link l) 
{ 
int count=0; 
Node *p; 
p=l->next; 
if(!p) 
{ 
printf("\n=====>提示:沒有資料可以顯示!\n"); 
return; 
} 
printf("\t\t\t\t顯示結果\n"); 
printstart(); 
printc(); 
printf("\n"); 
while(p) 
{ 
printe(p); 
p=p->next; 
} 
printstart(); 
printf("\n"); 
} 
void Tongji(Link l) 
{ 
Node *pm,*pe,*pc,*pt,*pa; /* 用於指向分數最高的接點 */ 
Node *r=l->next; 
if(!r) 
{ 
printf("\n=====>提示:沒有資料可以統計!\n"); 
return ; 
} 
pm=pe=pc=pt=pa=r; 
while(r!=NULL) 
{ 
if(r->data.cgrade>=pc->data.cgrade) 
pc=r; 
if(r->data.mgrade>=pm->data.mgrade) 
pm=r; 
if(r->data.egrade>=pe->data.egrade) 
pe=r; 
if(r->data.totle>=pt->data.totle) 
pt=r; 
if(r->data.ave>=pa->data.ave) 
pa=r; 
r=r->next; 
} 
printf("------------------------------統計結果--------------------------------\n"); 
printf("總分最高者:\t%s %d分\n",pt->data.name,pt->data.totle); 
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave); 
printf("英語最高者:\t%s %d分\n",pe->data.name,pe->data.egrade); 
printf("數學最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade); 
printf("c語言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade); 
printstart(); 
} 
void Sort(Link l) 
{ 
Link ll; 
Node *p,*rr,*s; 
ll=(Link)malloc(sizeof(Node)); /* 用於做新的連表 */ 
ll->next=NULL; 
if(l->next==NULL) 
{ 
printf("\n=====>提示:沒有資料可以排序!\n"); 
return ; 
} 
p=l->next; 
while(p) 
{ 
s=(Node*)malloc(sizeof(Node)); /* 新建接點用於保存信息 */ 
s->data=p->data; 
s->next=NULL; 
rr=ll; 
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle) 
rr=rr->next; 
if(rr->next==NULL) 
rr->next=s; 
else 
{ 
s->next=rr->next; 
rr->next=s; 
} 
p=p->next; 
} 
free(l); 
l->next=ll->next; 
printf("\n=====>提示:排序已經完成!\n"); 
} 
void Save(Link l) 
{ 
FILE* fp; 
Node *p; 
int flag=1,count=0; 
fp=fopen("c:\\student","wb"); 
if(fp==NULL) 
{ 
printf("\n=====>提示:重新打開文件時發生錯誤!\n"); 
exit(1); 
} 
p=l->next; 
while(p) 
{ 
if(fwrite(p,sizeof(Node),1,fp)==1) 
{ 
p=p->next; 
count++; 
} 
else 
{ 
flag=0; 
break; 
} 
} 
if(flag) 
{ 
printf("\n=====>提示:文件保存成功.(有%d條記錄已經保存.)\n",count); 
shoudsave=0; 
} 
fclose(fp); 
} 
void main() 
{ 
Link l;/* 連表 */ 
FILE *fp; /* 文件指針 */ 
int sel; 
char ch; 
char jian; 
int count=0; 
Node *p,*r; 
printf("\t\t\t\t學生成績管理系統\n\t\t\t\t-------福建農業職業學院計應0501 黃歡(32號)\n"); 
l=(Node*)malloc(sizeof(Node)); 
l->next=NULL; 
r=l; 
fp=fopen("C:\\student","rb"); 
if(fp==NULL) 
{ 
printf("\n=====>提示:文件還不存在,是否創建?(y/n)\n"); 
scanf("%c",&jian); 
if(jian=='y'||jian=='Y') 
fp=fopen("C:\\student","wb"); 
else 
exit(0); 
} 
printf("\n=====>提示:文件已經打開,正在導入記錄......\n"); 
while(!feof(fp)) 
{ 
p=(Node*)malloc(sizeof(Node)); 
if(fread(p,sizeof(Node),1,fp)) /* 將文件的內容放入接點中 */ 
{ 
p->next=NULL; 
r->next=p; 
r=p; /* 將該接點掛入連中 */ 
count++; 
} 
} 
fclose(fp); /* 關閉文件 */ 
printf("\n=====>提示:記錄導入完畢,共導入%d條記錄.\n",count); 
while(1) 
{ 
menu(); 
printf("請你選擇操作:"); 
scanf("%d",&sel); 
if(sel==0) 
{ 
if(shoudsave==1) 
{ getchar(); 
printf("\n=====>提示:資料已經改動,是否將改動保存到文件中(y/n)?\n"); 
scanf("%c",&ch); 
if(ch=='y'||ch=='Y') 
Save(l); 
} 
printf("\n=====>提示:你已經退出系統,再見!\n"); 
break; 
} 
switch(sel) 
{ 
case 1:Add(l);break; /* 增加學生 */ 
case 2:Del(l);break;/* 刪除學生 */ 
case 3:Qur(l);break;/* 查詢學生 */ 
case 4:Modify(l);break;/* 修改學生 */ 
case 5:Save(l);break;/* 保存學生 */ 
case 9:printf("\t\t\t==========幫助信息==========\n");break; 
default: Wrong();getchar();break; 
} 
} 
} 
/* */
/* 
學生成績管理程序 
編制一個統計學生考試分數的管理程序。 
設學生成績已以一個學生一個記錄的形式存儲在文件中, 
每位學生記錄包含的信息有:姓名,學號和各門功課的成績。 
程序具有以下幾項功能:求出各門課程的總分,平均分,按姓名, 
按學號尋找其記錄並顯示,瀏覽全部學生成績和按總分由高到低顯示學生信息等。 
*/ 
#include <stdio.h> 
#define SWN 3 /* 課程數 */ 
#define NAMELEN 20 /* 姓名最大字元數 */ 
#define CODELEN 10 /* 學號最大字元數 */ 
#define FNAMELEN 80 /* 文件名最大字元數 */ 
#define BUFLEN 80 /* 緩沖區最大字元數 */ 
/* 課程名稱表 */ 
char schoolwork[SWN][NAMELEN+1] = {"Chinese","Mathematic","English"}; 
struct record 
{ 
char name[NAMELEN+1]; /* 姓名 */ 
char code[CODELEN+1]; /* 學號 */ 
int marks[SWN]; /* 各課程成績 */ 
int total; /* 總分 */ 
}stu; 
struct node 
{ 
char name[NAMELEN+1]; /* 姓名 */ 
char code[CODELEN+1]; /* 學號 */ 
int marks[SWN]; /* 各課程成績 */ 
int total; /* 總分 */ 
struct node *next; /* 後續表元指針 */ 
}*head; /* 鏈表首指針 */ 
int total[SWN]; /* 各課程總分 */ 
FILE *stfpt; /* 文件指針 */ 
char stuf[FNAMELEN]; /* 文件名 */ 
/* 從指定文件讀入一個記錄 */ 
int readrecord(FILE *fpt,struct record *rpt) 
{ 
char buf[BUFLEN]; 
int i; 
if(fscanf(fpt,"%s",buf)!=1) 
return 0; /* 文件結束 */ 
strncpy(rpt->name,buf,NAMELEN); 
fscanf(fpt,"%s",buf); 
strncpy(rpt->code,buf,CODELEN); 
for(i=0;i<SWN;i++) 
fscanf(fpt,"%d",&rpt->marks[i]); 
for(rpt->total=0,i=0;i<SWN;i++) 
rpt->total+=rpt->marks[i]; 
return 1; 
} 
/* 對指定文件寫入一個記錄 */ 
writerecord(FILE *fpt,struct record *rpt) 
{ 
int i; 
fprintf(fpt,"%s\n",rpt->name); 
fprintf(fpt,"%s\n",rpt->code); 
for(i=0;i<SWN;i++) 
fprintf(fpt,"%d\n",rpt->marks[i]); 
return ; 
} 
/* 顯示學生記錄 */ 
displaystu(struct record *rpt) 
{ 
int i; 
printf("\nName : %s\n",rpt->name); 
printf("Code : %s\n",rpt->code); 
printf("Marks :\n"); 
for(i=0;i<SWN;i++) 
printf(" %-15s : %4d\n",schoolwork[i],rpt->marks[i]); 
printf("Total : %4d\n",rpt->total); 
} 
/* 計算各單科總分 */ 
int totalmark(char *fname) 
{ 
FILE *fp; 
struct record s; 
int count,i; 
if((fp=fopen(fname,"r"))==NULL) 
{ 
printf("Can't open file %s.\n",fname); 
return 0; 
} 
for(i=0;i<SWN;i++) 
total[i]=0; 
count=0; 
while(readrecord(fp,&s)!=0) 
{ 
for(i=0;i<SWN;i++) 
total[i]+=s.marks[i]; 
count++; 
} 
fclose(fp); 
return count; /* 返回記錄數 */ 
} 
/* 列表顯示學生信息 */ 
void liststu(char *fname) 
{ 
FILE *fp; 
struct record s; 
if((fp=fopen(fname,"r"))==NULL) 
{ 
printf("Can't open file %s.\n",fname); 
return ; 
} 
while(readrecord(fp,&s)!=0) 
{ 
displaystu(&s); 
printf("\n Press ENTER to continue...\n"); 
while(getchar()!='\n'); 
} 
fclose(fp); 
return; 
} 
/* 構造鏈表 */ 
struct node *makelist(char *fname) 
{ 
FILE *fp; 
struct record s; 
struct node *p,*u,*v,*h; 
int i; 
if((fp=fopen(fname,"r"))==NULL) 
{ 
printf("Can't open file %s.\n",fname); 
return NULL; 
} 
h=NULL; 
p=(struct node *)malloc(sizeof(struct node)); 
while(readrecord(fp,(struct record *)p)!=0) 
{ 
v=h; 
while(v&&p->total<=v->total) 
{ 
u=v; 
v=v->next; 
} 
if(v==h) 
h=p; 
else 
u->next=p; 
p->next=v; 
p=(struct node *)malloc(sizeof(struct node)); 
} 
free(p); 
fclose(fp); 
return h; 
} 
/* 順序顯示鏈表各表元 */ 
void displaylist(struct node *h) 
{ 
while(h!=NULL) 
{ 
displaystu((struct record *)h); 
printf("\n Press ENTER to continue...\n"); 
while(getchar()!='\n'); 
h=h->next; 
} 
return; 
} 
/* 按學生姓名查找學生記錄 */ 
int retrievebyn(char *fname, char *key) 
{ 
FILE *fp; 
int c; 
struct record s; 
if((fp=fopen(fname,"r"))==NULL) 
{ 
printf("Can't open file %s.\n",fname); 
return 0; 
} 
c=0; 
while(readrecord(fp,&s)!=0) 
{ 
if(strcmp(s.name,key)==0) 
{ 
displaystu(&s); 
c++; 
} 
} 
fclose(fp); 
if(c==0) 
printf("The student %s is not in the file %s.\n",key,fname); 
return 1; 
} 
/* 按學生學號查找學生記錄 */ 
int retrievebyc(char *fname, char *key) 
{ 
FILE *fp; 
int c; 
struct record s; 
if((fp=fopen(fname,"r"))==NULL) 
{ 
printf("Can't open file %s.\n",fname); 
return 0; 
} 
c=0; 
while(readrecord(fp,&s)!=0) 
{ 
if(strcmp(s.code,key)==0) 
{ 
displaystu(&s); 
c++; 
break; 
} 
} 
fclose(fp); 
if(c==0) 
printf("The student %s is not in the file %s.\n",key,fname); 
return 1; 
} 
main() 
{ 
int i,j,n; 
char c; 
char buf[BUFLEN]; 
FILE *fp; 
struct record s; 
clrscr(); 
printf("Please input the students marks record file's name: "); 
scanf("%s",stuf); 
if((fp=fopen(stuf,"r"))==NULL) 
{ 
printf("The file %s doesn't exit, do you want to creat it? (Y/N) ",stuf); 
getchar(); 
c=getchar(); 
if(c=='Y'||c=='y') 
{ 
fp=fopen(stuf,"w"); 
printf("Please input the record number you want to write to the file: "); 
scanf("%d",&n); 
for(i=0;i<n;i++) 
{ 
printf("Input the student's name: "); 
scanf("%s",&s.name); 
printf("Input the student's code: "); 
scanf("%s",&s.code); 
for(j=0;j<SWN;j++) 
{ 
printf("Input the %s mark: ",schoolwork[j]); 
scanf("%d",&s.marks[j]); 
} 
writerecord(fp,&s); 
} 
fclose(fp); 
} 
} 
fclose(fp); 
getchar(); 
/*clrscr();*/ 
puts("Now you can input a command to manage the records."); 
puts("m : mean of the marks."); 
puts("t : total of the marks."); 
puts("n : search record by student's name."); 
puts("c : search record by student's code."); 
puts("l : list all the records."); 
puts("s : sort and list the records by the total."); 
puts("q : quit!"); 
while(1) 
{ 
puts("Please input command:"); 
scanf(" %c",&c); /* 輸入選擇命令 */ 
if(c=='q'||c=='Q') 
{ 
puts("\n Thank you for your using."); 
break; /* q,結束程序運行 */ 
} 
switch(c) 
{ 
case 'm': /* 計算平均分 */ 
case 'M': 
if((n=totalmark(stuf))==0) 
{ 
puts("Error!"); 
break; 
} 
printf("\n"); 
for(i=0;i<SWN;i++) 
printf("%-15s's average is: %.2f.\n",schoolwork[i],(float)total[i]/n); 
break; 
case 't': /* 計算總分 */ 
case 'T': 
if((n=totalmark(stuf))==0) 
{ 
puts("Error!"); 
break; 
} 
printf("\n"); 
for(i=0;i<SWN;i++) 
printf("%-15s's total mark is: %d.\n",schoolwork[i],total[i]); 
break; 
case 'n': /* 按學生的姓名尋找記錄 */ 
case 'N': 
printf("Please input the student's name you want to search: "); 
scanf("%s",buf); 
retrievebyn(stuf,buf); 
break; 
case 'c': /* 按學生的學號尋找記錄 */ 
case 'C': 
printf("Please input the student's code you want to search: "); 
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; 
default: break; 
} 
} 
}
⑵ C語言 學生成績管理系統
#include <stdio.h>
#define MAX 40
typedef struct{
char name[15];
int num;
int C;
int E;
int M;
int sum;
}student_t;
typedef struct{
int n;
student_t stu[MAX];
}class_t;
enum{
ADD_STUDENT    = 1,
SHOW_STUDENT   = 2,
DELETE_STUDENT = 3,
SORT_STUDENT   = 4,
FIND_STUDENT   = 5,
QUIT
};
void input_student(student_t *pstu)
{
int ret;
again_input:
printf("學號\t姓名\tC語言\t英語\t數學\t\n");
ret = scanf("%d %s %d %d %d",&pstu->num,pstu->name,&pstu->C,&pstu->E,&pstu->M);
if(ret < 5){
printf("Input error,must input string,int,int\n");
while ( getchar() != '\n')
;
goto again_input;
}
pstu->sum=(pstu->C+pstu->E+pstu->M);
printf("input end!\n");
return;
}
int add_student(class_t *pclass,student_t *pstu)
{
if(pclass->n >= MAX){
printf("The class is full!\n");
return -1;
}
pclass->stu[pclass->n ++] = *pstu;
return 0;
}
void show(student_t *pstu)
{
printf("%d %s %d %d %d %d\n",pstu->num,pstu->name,pstu->C,pstu->E,pstu->M,pstu->sum);
return;
}
void show_student(class_t *pclass)
{
int i;
printf("學號\t姓名\tC語言\t英語\t數學\t總分\t\n");
for(i = 0;i < pclass->n;i ++){
show(&pclass->stu[i]);
}
return;
}
int delete_student(class_t *pclass,char *stu_name)
{
int i,j;
for(i = 0, j = 0;i < pclass->n;i ++){
if(strcmp(pclass->stu[i].name,stu_name) != 0){
pclass->stu[j++] = pclass->stu[i];
}
}
if(i == j){
printf("The delete student:%s is not exist!\n",stu_name);
return 0;
}else{
pclass->n = j;
return i - j;
}
}
void sort_student(class_t *pclass)
{
int i,j;
int flag;
student_t student;
for(i = 0;i < pclass->n - 1;i ++){
for(j = 0,flag = 0;j < pclass->n - 1 - i;j ++){
if(pclass->stu[j].sum > pclass->stu[j + 1].sum){
student = pclass->stu[j];
pclass->stu[j] = pclass->stu[j+1];
pclass->stu[j+1] = student;
flag = 1;
}
}
if(!flag){
break;
}
}
return;
}
int find_student(class_t *pclass,char *stu_name)
{
int i;
int count = 0;
for(i = 0;i < pclass->n;i ++){
if(strcmp(pclass->stu[i].name,stu_name) == 0){
show(&pclass->stu[i]);
count ++;
}
}
return count;
}
int main(int argc, const char *argv[])
{
int n;
int choice;
char name[15];
class_t class = {0};
student_t student;
while(1)
{
puts("------------------------------------------");
puts("1.添加 2.查詢 3.刪除 4.排序 5.查找 6.退出");
puts("------------------------------------------");
printf("choice > ");
scanf("%d",&choice);
switch(choice){
case ADD_STUDENT:
input_student(&student);
add_student(&class,&student);
break;
case SHOW_STUDENT:
show_student(&class);
break;
case DELETE_STUDENT:
printf("Input delete student name : ");
scanf("%s",name);
n = delete_student(&class,name);
if(n > 0){
printf("Delete %d students!\n",n);
}
break;
case SORT_STUDENT:
sort_student(&class);
show_student(&class);
break;
case FIND_STUDENT:
printf("Input find student name : ");
scanf("%s",name);
n = find_student(&class,name);
printf("Find %d students!\n",n);
break;
case QUIT:
printf("quit student system!\n");
goto quit;
}
}
quit:
return 0;
}
⑶ 用C語言編寫一個簡單的成績管理系統
(ps:沒有自己編譯過)
//我寫 C++比較多
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define TOTAL_STUD 1000
typedef struct stud {
char name[20];
int score;
} students[TOTAL_STUD],sorted[TOTAL_STUD];
void delstud (int i) {
students[i].name = "無效學生";
students[i].score = -999;
return;
}
#define show(listname,i)printf("%04d%s%d ",i,listname[i].name,listname[i].score);
int cmpfunc (const void * a, const void * b)
{
return ( *(stud*)a.score - *(stud*)b.score );
} // 本段代碼修改自此處
void run(int menu) {
switch (menu) {
case 1:
char uname[20];
int uid,uscore;
printf("請輸入學生姓名:");
scanf("%s",uname);
printf("
 請輸入學生學號:");
scanf("%d",&uid);
printf("
 請輸入學生成績:");
scanf("%d",&uscore);
students[uid].name = uname;
students[uid].score = uscore;
printf("
插入成功!
");
break;
case 2:
int delid;
printf("要刪除誰?學號?");
scanf("%d",&delid);
delstud(delid);
break;
case 3:
for (int i = 0; i < TOTAL_STUD; i++) {
strcpy(sorted[i].name,students[i].name);
sorted[i].score=students[i].score;
}
qsort(sorted,TOTAL_STUD,sizeof(stud),cmpfunc);
printf("學號 姓名 分數
");
for (int i = 0; i < TOTAL_STUD; i++) {
if (sorted[i].score > -900) show(sorted,i);
}
break;
case 4:
for (int i = 0; i < TOTAL_STUD; i++) {
if (students[i].score > -900) show(students,i);
}
break;
case 5:
int delid;
printf("要查詢誰?學號?");
scanf("%d",&delid);
show(students,delid);
break;
default:
printf("-- %d 無此功能。請重試。--",menu);
}
return;
}
int main() {
int key = -1;
for (int i = 0; i < TOTAL_STUD; i++) {
delstud(i);
}
while (key != 0) {
printf("---成績管理系統 V0.9 --- 請選擇: 1 -- 錄入 2 -- 刪除 3 -- 排序輸出 4 -- 不排序輸出 5 -- 查詢 0 -- 退出");
key=getch()-48;
if (key>0) run(key);
else {
printf("謝謝使用!再見!");
return 0;
}
}
return 0;
}
⑷ C語言:學生成績管理系統
/*首次使用,新建score.in文件,在裡面打入0
可用程序
#include<stdio.h>
FILE *fin
main()
{
fin=fopen("score.in","r");
fprintf(fin,"0");
return 0;
}
完成
*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
#define n 999
FILE *fin;
main()
{
int a[n]={0},ori=0,i=0,b=0,add[n]={0},con=0,orix[n]={0},t=0,te[n]={0},TRUEt,ixi,fx,abc=0,sum,TURE,xx;
long long f[n]={0},tex[n]={0};
printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t學生成績管理系統\n\t\t\t\t\t\t Please wait...");
Sleep(2000);system("cls");
int xp,xi;
fin=fopen("score.in","r+");
fscanf(fin,"%d",&xp);
i=xp;
for(xi=1;xi<=xp;xi++)
{fscanf(fin,"%d%d%d",&f[xi],&a[xi],&te[xi]);te[xi]--;
printf("Id:%lld score:%d ranking:%d\n",f[xi],a[xi],te[xi]+1);
add[xi]=xi;orix[xi]=a[xi];
}
fclose(fin);
int TRUE1;
pe:
while(1)
{ TRUE1=1;i++;
printf("Id(輸入-1:刪除,輸入-2:修改成績,輸入-3:刪除所有內容,輸入-4:保存到score.in並退出):");
scanf("%lld",&f[i]);
for(sum=1;sum<i;sum++)
if(f[sum]==f[i])
{system("cls");for(con=1;con<=i;con++) {if(a[con]==0)continue;printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}TRUE1=0;i--;printf("Error with two same id.\n");continue;}
if(TRUE1==0)
continue;
if(f[i]==-3)
{int r;
for(r=0;r<n;r++)
{
a[r]=0;ori=0;i=0;b=0;add[r]=0;con=0;orix[r]=0;t=0;te[r]=0;abc=0;
f[r]=0;tex[r]=0;
}
system("cls");
goto pe;
}
if(f[i]==-2)
{TURE=0;i--;
system("cls");
for(con=1;con<=i;con++)
{if(a[con]==0)continue; printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}
printf("修改學號_____________號的分數.\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",f[con],a[con],te[con]+1);
scanf("%d",&xx);
for(sum=1;sum<=i;sum++)
if(f[sum]==xx)
{
TURE=1;
printf("\n修改為___________.\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%d",&a[sum]);
printf("\n修改成功!將在下一次輸入後更新名次。\n\n");
continue;
}
if(TURE==0)
printf("No id is %d\n",xx);
continue;
}
if(f[i]==-4)
{
i--;
fin=fopen("score.in","r+");
fprintf(fin,"%d\n",i);
for(xi=1;xi<=i;xi++)fprintf(fin,"%d %d %d\n",f[xi],a[xi],te[xi]+1);
for(xi=i+1;xi<=xp;xi++)fprintf(fin," \n");
fclose(fin);
return 0;
}
if(f[i]==-1)
{TRUEt=0;
system("cls");
i--;
for(con=1;con<=i;con++){if(a[con]==0)continue;printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}
printf("刪除學號_____________號.\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%lld",&fx);
for(con=1;con<=i;con++)
if(f[con]==fx)
{TRUEt=1;abc++;
f[con]=0;
a[con]=0;
tex[abc]=te[con];
for(ixi=1;ixi<=i;ixi++)
if(te[ixi]>te[con])
te[ixi]--;
te[con]=0;
break;}
system("cls");
for(con=1;con<=i;con++){
if(a[con]==0)continue;
printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}
if(TRUE==0)
printf("No Id is %lld\n",fx);
continue;
}
system("cls");
for(con=1;con<i;con++)
{if(a[con]==0)continue; printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}
printf("Id:%lld score:",f[i]);
scanf("%d",&ori);system("cls");
a[i]=ori;add[i]=i;orix[i]=a[i];
system("cls");
for(b=1;b<=i;b++)
for(con=i;con>=b;con--)
if(orix[con]>orix[con-1])
{t=orix[con];orix[con]=orix[con-1];orix[con-1]=t;
t=add[con];add[con]=add[con-1];add[con-1]=t;}
for(con=1;con<=i;con++) te[add[con]]=con;
for(con=1;con<=abc;con++)
for(ixi=1;ixi<=i;ixi++)
if(te[ixi]>tex[con])
te[ixi]--;
if(te[i]==te[i-1])te[i]=0;
for(con=1;con<=i;con++)
{if(a[con]==0)continue;printf("Id:%lld score:%d ranking:%d\n",f[con],a[con],te[con]+1);}
}
return 0;
}
⑸ c語言學生成績管理系統
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAX 80 //學生最大人數
#define max 3 //科目數量
struct classname //科目結構體,科目名稱,該科目分數
{
	char name[20];
	float score;
};
struct student //學生結構體,學號,學生姓名,科目,平均分,總分
{
	char no[20];
	char std_name[20];
	struct classname km[max];
	float ave;
	float sum;
	int save; //檢驗數,沒有添加刪除函數,此變數沒有作用,可刪除,但是注意刪除要把初始函數里的初始語句也刪除
};
struct student stu[MAX];//全局變數,結構體數組
int nu=0;//全局變數 文件已存人數
void chushi()//程序初始化函數,對全局變數stu初始化
{
	int i,j;
	for(i=0;i<MAX;i++)
	{
		for(j=0;j<20;j++)
		{
			stu[i].no[j]='\0';
			stu[i].std_name[j]='\0';
			stu[i].km[j].name[j]='\0';
			stu[i].km[j].score=0;
		}
		stu[i].ave=0;
		stu[i].sum=0;
		stu[i].save=0;
	}
}
void av()/*求平均值*/
{
	int i;
	for(i=0;i<nu;i++)
	{
		stu[i].sum=stu[i].km[0].score+stu[i].km[1].score+stu[i].km[2].score;
		stu[i].ave=stu[i].sum/3;
	}
}
void first_check()
{
	FILE *p;//文件指針
	int i,j;
	struct classname frist[max];//臨時變數,接收第一次輸入的科目名稱
	for(i=0;i<max;i++)
	{
		for(j=0;j<20;j++)
			frist[i].name[j]='\0';
		frist[i].score=0;
	}
	if ((p=fopen("e:\\kemu.txt","r"))==NULL)//如果文件不存在,執行下面語句
	{
		printf("您好,歡迎使用學生成績管理系統\n\n因為您是第一次使用,請輸入科目名稱(三科)\n\n");
		p=fopen("e:\\kemu.txt","w");//建立科目文件,保存c盤根目錄
		printf("輸入課程1名稱:");
		scanf("%s",frist[0].name);
		fprintf(p,"%s\n",frist[0].name);//課程寫入文件
		printf("輸入課程2名稱:");
		scanf("%s",frist[1].name);
		fprintf(p,"%s\n",frist[1].name);//同上
		printf("輸入課程3名稱:");
		scanf("%s",frist[2].name);
		fprintf(p,"%s\n",frist[2].name);//同上
	}
	system("cls");//清屏函數
	fclose(p);
}
void save_nu()//往人數文件寫入人數信息
{
	FILE *p;
	p=fopen("e:\\renshu.txt","w");
	fprintf(p,"%d\n",nu);
	fclose(p);
}
void Save_add(int n)//寫入成績信息,成績文件已存在,在文件內部末尾追加寫入
{
	FILE * p;
	int i;
	p= fopen("e:\\chengji.txt","at");
	if (p == NULL)
	{
		printf("文件不存在!!\n");
		exit(0);
	}
	save_nu();
	for (i = 0;i<n;i++)
		if(stu[i].save==1)
		{
			stu[i].sum=stu[i].km[1].score+stu[i].km[2].score+stu[i].km[3].score;
			stu[i].ave=stu[i].sum/3;
			fprintf(p,"%s %s %2.1f %2.1f %2.1f %2.1f %2.1f \n",stu[i].no,stu[i].std_name,stu[i].km[0].score,stu[i].km[1].score,stu[i].km[2].score,stu[i].ave,stu[i].sum);
		}
		fclose(p);
}
void Save()//寫入成績信息,成績文件不存在,新建成績文件並寫入信息
{
	FILE * p;
	int i;
	p= fopen("e:\\chengji.txt","w");
	if (p == NULL)
	{
		printf("文件不存在!!\n");
		exit(0);
	}
	save_nu();
	for (i = 0;i<nu;i++)
		if(stu[i].save==1)
		{
			av();
			fprintf(p,"%s %s %2.1f %2.1f %2.1f %2.1f %2.1f \n",stu[i].no,stu[i].std_name,stu[i].km[0].score,stu[i].km[1].score,stu[i].km[2].score,stu[i].ave,stu[i].sum);
		}
		fclose(p);
}
int read_nu()//讀取人數文件中存在的人數信息
{
	FILE *p;
	char ch,s[10]={'\0'};
	int i=0;
	p=fopen("e:\\renshu.txt","r");
	if(p==NULL)
	{
		save_nu();
		return 0;
	}
	ch=fgetc(p);
	while(ch!='\n')
	{
		s[i]=ch;
		ch=fgetc(p);
		i++;
	}
	nu=atoi(s);
	fclose(p);
	return 0;
}
int read_km()//讀取科目文件中存儲的科目信息
{
	FILE *p;
	int i,j=0;
	char s[20]={'\0'};
	chushi();
	p=fopen("e:\\kemu.txt","r");
	if(p==NULL)
	{
		printf("ERROR read_km");
		return 0;
	}
	fgets(s,20,p);
	while(strlen(s)!=0)
	{
		for(i=0;i<strlen(s);i++)
			if(s[i]==10)
			{
				s[i]='\0';
				break;
			}
			for(i=0;i<=nu;i++)
				strcpy(stu[i].km[j].name,s);
			for(i=0;i<20;i++)
				s[i]='\0';
			j++;
			fgets(s,20,p);
	}
	return 0;
}
void read()//重要函數!讀取成績文件中以存儲的學生成績信息並存入內存
{
	FILE *p;
	int i,j,n,k,z=0;
	char s[50]={'\0'};
	char o[10]={'\0'};
	p=fopen("e:\\chengji.txt","r");
	if(p==NULL)
		printf("ERROR_read");
	chushi();
	read_km();
	fgets(s,50,p);
	while(strlen(s)!=0)
	{
		j=0;
		for(i=0;i<50;i++)
		{
			if(s[i]!='\n')
			{
				n=0;
				while(j==0)
				{
					if(s[i]!=' ')
					{
						stu[z].no[n]=s[i];
						n++;i++;
					}
					else
						break;
				}
				while(j==1)
				{
					if(s[i]!=' ')
					{
						stu[z].std_name[n]=s[i];
						n++;i++;
					}
					else
						break;
				}
				while(j==2)
				{
					if(s[i]!=' ')
					{
						o[n]=s[i];
						n++;i++;
					}
					else
					{
						stu[z].km[0].score=atoi(o);
						break;
					}
				}
				while(j==3)
				{
					if(s[i]!=' ')
					{
						o[n]=s[i];
						n++;i++;
					}
					else
					{
						stu[z].km[1].score=atoi(o);
						break;
					}
				}
				while(j==4)
				{
					if(s[i]!=' ')
					{
						o[n]=s[i];
						n++;i++;
					}
					else
					{
						stu[z].km[2].score=atoi(o);
						break;
					}
				}
				while(j==5)
				{
					if(s[i]!=' ')
					{
						o[n]=s[i];
						n++;i++;
					}
					else
					{
						stu[z].ave=atoi(o);
						break;
					}
				}
				while(j==6)
				{
					if(s[i]!=' ')
					{
						o[n]=s[i];
						n++;i++;
					}
					else
					{
						stu[z].sum=atoi(o);
						break;
					}
				}
				for(k=0;k<10;k++)
					o[k]='\0';
			}
			else
				break;
			j++;
		}
		for(i=0;i<50;i++)
			s[i]='\0';
		fgets(s,50,p);
		z++;
	}
}
void putin()//功能函數,錄入學生成績信息
{
	int n,i=0;
	char ch;
	read_km();
	do
	{
		printf("\t\t\t\t錄入學生信息\n輸入第%d個學生的信息\n",i+1);
		printf("\n輸入學生學號:");
		scanf("%s",stu[i].no);
		printf("\n輸入學員姓名:");
		scanf("%s",stu[i].std_name);
		printf("\n輸入語文%s的分數:",stu[0].km[0].name);
		scanf("%f",&stu[i].km[0].score);
		printf("\n輸入數學%s的分數:",stu[0].km[1].name);
		scanf("%f",&stu[i].km[1].score);
		printf("\n輸入英語%s的分數:",stu[0].km[2].name);
		scanf("%f",&stu[i].km[2].score);
		stu[i].save=1;
		printf("\n\n");
		i++;
		n=i;
		printf("是否繼續輸入?(Y/N)");
		fflush(stdin);
		ch=getch();
		system("cls");
	}
	while(ch!='n'&&ch!='N');
	system("cls");
	if(nu==0)
	{
		nu=n;
		Save();
	}
	else
	{
		nu=n+nu;
		Save_add(n);
	}
}
int putout()//功能函數,顯示學生信息
{
	int i;char s;
	if(nu==0)
	{
		printf("學生信息為零!請錄入...");
		return 0;
	}
	read();
	do
	{
		printf("學生成績信息:\n\n");
		for(i=0;i<nu;i++)
			printf("學號:%s 姓名:%s\n%s分數:%2.1f\t%s分數:%2.1f\t%s 分數:%2.1f\n平均分數:%2.1f\t總成績:%2.1f\n\n",stu[i].no,stu[i].std_name,stu[i].km[0].name,stu[i].km[0].score,stu[i].km[1].name,stu[i].km[1].score,stu[i].km[2].name,stu[i].km[2].score,stu[i].ave,stu[i].sum);
		printf("\t\t按任意鍵返回主菜單");
		fflush(stdin);
		s=getch();
	}
	while(!s);
	system("cls");
	return 0;
}
int sort()/*排序數據函數*/
{
	struct student temp;
	int i,j;
	char s;
	if(nu==0)
	{
		printf("學生信息為零!請錄入...");
		return 0;
	}
	read();
	for(i=1;i<nu;i++)
	{
		for(j=1;j<=nu-i;j++)
		{
			if(stu[j-1].ave<stu[j].ave)
			{
				temp=stu[j];
				stu[j]=stu[j-1];
				stu[j-1]=temp;
			}
		}
	}
	do
	{
		printf("學生成績信息:\n\n");
		for(i=0;i<nu;i++)
			printf("學號:%s 姓名:%s  平均成績:%2.1f\n\n",stu[i].no,stu[i].std_name,stu[i].ave);
		printf("\t\t按任意鍵返回主菜單");
		fflush(stdin);
		s=getch();
	}
	while(!s);
	system("cls");
	return 0;
}
int find()/*查詢函數*/
{
	int j,i=0;
	int c=0;
	char search[20]={'\0'};
	char as;
	if(nu==0)
	{
		printf("學生信息為零!請錄入...");
		return 0;
	}
	read();
	do
	{
		printf("輸入要查詢課程名稱:");
		scanf("%s",search);
		for(j=0;j<max;j++)
			if(!strcmp(stu[i].km[j].name,search))
			{
				c=1;
				printf("\n該課程不及格學生姓名:\n");
				for(i=0;i<nu;i++)
					if(stu[i].km[j].score<60)
						printf("%s\n",stu[i].std_name);
			}
			if(c==0)
				printf("無此課程!");
			printf("\n\t\t按任意鍵返回主菜單");
			fflush(stdin);
			as=getch();
	}
	while(!as);
	system("cls");
	return 0;
}
int tongji()//功能函數,統計學生成績信息
{
	int j,m,z,i=0;
	char s;
	if(nu==0)
	{
		printf("學生信息為零!請錄入...");
		return 0;
	}
	read();
	for(z=0;z<max;z++)
	{
		m=stu[i].km[z].score;j=0;
		printf("%s 最高分: ",stu[i].km[z].name);
		for(i=0;i<nu;i++)
			if(m<stu[i].km[z].score)
			{
				m=stu[i].km[z].score;
				j=i;
			}
			printf("%s\t",stu[j].std_name);
			j=0;i=0;m=stu[i].km[z].score;
			printf("%s 最低分: ",stu[i].km[z].name);
			for(i=0;i<nu;i++)
				if(m>stu[i].km[z].score)
				{
					m=stu[i].km[z].score;
					j=i;
				}
				printf("%s\t",stu[j].std_name);
				m=0;j=0;i=0;
				printf("%s 平均分: ",stu[i].km[z].name);
				for(i=0;i<nu;i++)
					m=m+stu[i].km[z].score;
				printf("%d\n",m/nu);
				m=0;i=0;
				printf("%s 分數低於的60人數: ",stu[i].km[z].name);
				for(i=0;i<nu;i++)
					if(stu[i].km[z].score<60)
						m++;
				printf("%d\t",m);
				m=0;j=0;i=0;
				printf("%s 分數高於60的人數: ",stu[i].km[z].name);
				for(i=0;i<nu;i++)
					if(stu[i].km[z].score>60)
						m++;
				printf("%d\n\n",m);
	}
	do
	{
		printf("\t\t按任意鍵返回主菜單");
		fflush(stdin);
		s=getch();
	}
	while(!s);
	system("cls");
	return 0;
}
void main()/*主函數*/
{
	int as;
	first_check();
start: printf("\n\t\t\t歡迎使用學生成績管理系統\n");
	/*一下為功能選擇模塊*/
	do
	{
		printf("\n\t\t\t\t1.錄入學生信息\n\t\t\t\t2.顯示學生信息\n\t\t\t\t3.成績排序信息\n\t\t\t\t4.查詢不及格學生\n\t\t\t\t5.統計信息\n\t\t\t\t6.退出\n");
		printf("\t\t\t\t選擇功能選項:");
		fflush(stdin);
		read_nu();
		scanf("%d",&as);
		switch(as)
		{
		case 1:system("cls");putin();break;
		case 2:system("cls");putout();break;
		case 3:system("cls");sort();break;
		case 4:system("cls");find();break;
		case 5:system("cls");tongji();break;
		case 6:system("exit");exit(0);
		default:system("cls");goto start;
		}
	}
	while(1);
	/*至此功能選擇結束*/
}
⑹ 用C語言設計一個學生成績管理系統
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#defineMAX1000
/*定義學生成績信息結構*/
struct stu
{
char id[8];
char name[8];

(6)成績管理系統c語言擴展閱讀:
short:修飾int,短整型數據,可省略被修飾的int。(K&R時期引入)
long:修飾int,長整型數據,可省略被修飾的int。(K&R時期引入)
long long:修飾int,超長整型數據,可省略被修飾的int。(C99標准新增)
signed:修飾整型數據,有符號數據類型。(C89標准新增)
unsigned:修飾整型數據,無符號數據類型。(K&R時期引入)
restrict:用於限定和約束指針,並表明指針是訪問一個數據對象的唯一且初始的方式。(C99標准新增)
復雜類型關鍵字
struct:結構體聲明。(K&R時期引入)
union:聯合體聲明。(K&R時期引入)
enum:枚舉聲明。(C89標准新增)
typedef:聲明類型別名。(K&R時期引入)
sizeof:得到特定類型或特定類型變數的大小。(K&R時期引入)
inline:內聯函數用於取代宏定義,會在任何調用它的地方展開。(C99標准新增)
⑺ 怎樣用C語言寫學生成績管理系統
程序如下: #include<stdio.h>
void main()
{
 float student[100][7];
//student[][0]存放學號,student[][1]到student[][4]存放四門成績,
//student[][5]存放總分,student[][6]存放平均分,student[][7]存放排名
 int n,i,j,k,p,t,count,flag;
 int a[100],b[100],c[100];
//a[]存放排序後的下標,b[]存放總分(備份),c[]存放排名的數據
 printf("輸入學生的個數:\n");
 scanf("%d",&n);
 for(i=0;i<=n-1;i++)
 {
  printf("輸入第%d個學生的學號:",i+1);
  scanf("%f",&student[i][0]);
  for(j=0,student[i][5]=0;j<=3;j++)
  {
  printf("輸入第%d個學生的第%d門成績:",i+1,j+1);
  scanf("%f",&student[i][j+1]);
  student[i][5]+=student[i][j+1];   //計算總分
  }
  b[i]=student[i][5];      //把總分再賦給b[]數組,以後排序用
  student[i][6]=student[i][5]/4;     //計算平均分
 }
 
 for(i=0;i<=n-2;i++)    //對數組b[](即總分)進行排序
  for(j=0;j<=n-2-i;j++)
  {
   if(b[j]<b[j+1])
   {
    t=b[j];
    b[j]=b[j+1];
    b[j+1]=t;
   }
  }
  for(i=0,k=0;i<=n-1;i++)//用數組a[]取得排序後總分的下標
  {
   for(j=0,flag=0;j<=n-1;j++)
   {
       if(b[i]==student[j][5])
    {
     if(0==k) //如果數組a[]中有零個元素,就把j直接賦給a[]
     {
      a[k]=j;
      k++;
      flag=1;
     }
     else      //如果數組a[]中有元素了,則判斷
     {
         for(p=0;p<=k-1;p++)
       if(a[p]!=j)
       {
                                     a[k]=j;
                               k++;
          flag=1;
          break;
       }
     }
    }
    if(1==flag)
     break;
   }
  }
  for(count=1,i=0;i<=n-1;i++)  //對c[](排名)進行處理
  {
   if(b[i]==b[i+1])
   {
    c[i]=count;
   }
   else
    if(b[i]>b[i+1])
    {
     c[i]=count;
     count++;
    }
  }
 printf("\n以下是統計結果:\n");
 printf("學號   s[1]    s[2]    s[3]    s[4]     總分     平均分        排名\n");
 for(i=0;i<=n-1;i++)
 {
  printf("%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%f\t%d\n",student[a[i]][0],student[a[i]][1],student[a[i]][2],student[a[i]][3],student[a[i]][4],student[a[i]][5],student[a[i]][6],c[i]);
 }
} 有疑問提出
⑻ C語言成績管理系統
#include"stdio.h"
structstu{
intsid,score;
charg;
};
voidscorein(structstu*p,intn){
inti,t;
for(i=0;i<n;i++){
scanf("%d%d",&p[i].sid,&p[i].score);
p[i].g=(t=p[i].score)>89&&t<101?'A':t>79&&t<90?'B':t>69&&t<80?'C':t>59&&t<70?'D':'E';
}
}
intsum(structstu*p,intn){
ints=0;
while(n--)
s+=p++->score;
returns;
}
voiddssort(structstu*p,intn){
inti,j,k;
structstut;
printf(" STUID SCORE CLASS ===================== ");
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(p[k].score<p[j].score)
k=j;
if(k!=i)
t=p[k],p[k]=p[i],p[i]=t;
printf("%d %d %c ",p[i].sid,p[i].score,p[i].g);
}
}
voididsort(structstu*p,intn){
inti,j,k;
structstut;
printf(" STUID SCORE CLASS ===================== ");
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(p[k].sid>p[j].sid)
k=j;
if(k!=i)
t=p[k],p[k]=p[i],p[i]=t;
printf("%d %d %c ",p[i].sid,p[i].score,p[i].g);
}
}
voidquery(structstu*p,intn){
intid;
printf(" PleaseenterID(int)... ");
scanf("%d",&id);
while(id-p->sid&&n)
p++,n--;
if(n>=0){
printf("STUID SCORE CLASS ===================== ");
printf("%d %d %c ",p->sid,p->score,p->g);
}
else
printf("Nofind! ");
}
voidlevel(structstu*p,intn){
intd[5],i;
chars[5][7]={"優秀","良好","中等","及格","不及格"};
printf("統計信息如下: ");
for(i=0;i<5;d[i++]=0);
for(i=0;i<n;i++,d[p++->g-'A']++);
for(i=0;i<5;i++)
printf("%6s: %d %.2f%% ",s[i],d[i],d[i]/(n+0.0)*100);
}
voidoutinfo(structstu*p,intn){
inti;
printf(" STUID SCORE ============= ");
for(i=0;i<n;i++)
printf("%d %d ",p[i].sid,p[i].score);
}
intmain(intargc,char*argv[]){
intn,s;
structstua[30];
printf("Pleaseentern(int0<n<31)... ");
if(scanf("%d",&n)!=1||n<1||n>30){
printf("Inputerror,exit... ");
return0;
}
scorein(a,n);//輸入
dssort(a,n);//分數降序
idsort(a,n);//學號升序
query(a,n);//查詢
level(a,n);//等級和百分比
outinfo(a,n);//輸出各位學生信息
printf("總分:%d",s=sum(a,n));
printf("平均分:%.2f ",s/(n+0.0));
return0;
}
運行樣例:

