當前位置:編程學習大全網 - 遊戲軟體 - 用C語言編壹個學生成績管理系統。

用C語言編壹個學生成績管理系統。

以下是我做過的成品

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#define N 100 //最大學生數量

#define LEN sizeof(struct student)

FILE *fp;

int n=0; //學生數量

struct student

{

int num;

char name[20];

int x_num;

int class_num;

float score1;

float score2;

float score3;

float total;

float average;

}stu[N]; //學生信息結構體

/*1.學生信息存入文件*/

void creat()

{

int i,j;

struct student t;

printf("輸入學生的數量。(不超過%d)\n",N);

scanf("%d",&n);

if(n>N) exit(0);

printf("依次輸入學生信息:學號 姓名 學院代號 班級號 高數成績 英語成績 C語言成績\n");

for(i=0;i<n;i++)

{

scanf("%d %s %d %d %f %f %f",&stu[i].num,stu[i].name,&stu[i].x_num,&stu[i].class_num,&stu[i].score1,&stu[i].score2,&stu[i].score3);

stu[i].total=stu[i].score1+stu[i].score2+stu[i].score3;

stu[i].average=stu[i].total/3;

}

for(j=0;j<n-1;j++)

for(i=j;i<n-j-1;i++)

{

if(stu[i].num > stu[i+1].num)

{

t=stu[i];

stu[i]=stu[i+1];

stu[i+1]=t;

}

}

if((fp=fopen("student_number","wb"))==NULL) //保存學生數量n

{

printf("can't open file!\n");

exit(0);

}

fwrite(&n,sizeof(int),1,fp);

if((fp=fopen("student","wb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

for(i=0;i<n;i++)

fwrite(&stu[i],LEN,1,fp);

fclose(fp);

}

/*2.增加壹個學生信息*/

void add()

{

int i,j;

char ch;

struct student t;

if((fp=fopen("student_number","rb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

fread(&n,sizeof(n),1,fp);

if((fp=fopen("student","rb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

for(i=0;i<n;i++)

fread(&stu[i],LEN,1,fp);

printf("依次輸入學生信息:學號 姓名 學院代號 班級號 高數成績 英語成績 C語言成績\n");

scanf("%d %s %d %d %f %f %f",&t.num,t.name,&t.x_num,&t.class_num,&t.score1,&t.score2,&t.score3);

t.total=t.score1+t.score2+t.score3;

t.average=t.total/3;

if(t.num>stu[n-1].num)

{

n=n+1;

stu[n-1]=t;

}

else

for(i=0;i<n;i++)

{

printf("aw\n");

if(t.num<stu[i].num)

{

n=n+1;

for(j=n-2;j>i-1;j--) stu[j+1]=stu[j];

stu[i]=t;

break;

}

}

if((fp=fopen("student_number","wb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

fwrite(&n,sizeof(n),1,fp);

if((fp=fopen("student","wb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

for(i=0;i<n;i++)

fwrite(&stu[i],LEN,1,fp);

fclose(fp);

begin:

printf("@是否繼續“添加”操作(y/n)?\n");

fflush(stdin);

ch=getchar();

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

else if(ch=='n'||ch=='N') ;

else { printf("輸入有誤!\n"); goto begin;}

}

/*3.刪除學生信息*/

void del()

{

int i,numb,mark=0;

char ch;

printf("輸入要刪除學生的學號:\n");

scanf("%d",&numb);

if((fp=fopen("student_number","rb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

fread(&n,sizeof(n),1,fp);

if((fp=fopen("student","rb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

for(i=0;i<n;i++)

{

fread(&stu[i],LEN,1,fp);

if(stu[i].num==numb)

{

i--;

n--;

mark=1;

}

}

if(mark==0) printf("沒有該生信息\n");

if((fp=fopen("student_number","wb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

fwrite(&n,sizeof(n),1,fp);

if((fp=fopen("student","wb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

for(i=0;i<n;i++)

fwrite(&stu[i],LEN,1,fp);

fclose(fp);

begin:

printf("@是否繼續“刪除”操作(y/n)?\n");

fflush(stdin);

ch=getchar();

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

else if(ch=='n'||ch=='N') ;

else { printf("輸入有誤!\n"); goto begin;}

}

/*4.修改學生信息*/

void change()

{

int i,numb,mark=0;

float score1,score2,score3,totall,average;

char ch;

printf("輸入要修改學生的學號 高數成績 英語成績 C語言成績:\n");

scanf("%d %f %f %f",&numb,&score1,&score2,&score3);

if((fp=fopen("student_number","rb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

fread(&n,sizeof(n),1,fp);

if((fp=fopen("student","rb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

for(i=0;i<n;i++)

{

fread(&stu[i],LEN,1,fp);

if(stu[i].num==numb)

{

totall=score1+score2+score3;

average=totall/3;

stu[i].score1=score1;

stu[i].score2=score2;

stu[i].score3=score3;

stu[i].total=totall;

stu[i].average=average;

mark=1;

}

}

if(mark==0) printf("沒有該生信息\n");

if((fp=fopen("student_number","wb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

fwrite(&n,sizeof(n),1,fp);

if((fp=fopen("student","wb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

for(i=0;i<n;i++)

fwrite(&stu[i],LEN,1,fp);

fclose(fp);

begin:

printf("@是否繼續“修改”操作(y/n)?\n");

fflush(stdin);

ch=getchar();

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

else if(ch=='n'||ch=='N') ;

else { printf("輸入有誤!\n"); goto begin;}

}

/*5.查詢操作*/

//(1)按學號查詢,輸入壹個學號,輸出對應的學生信息。

void num_search()

{

int i,num,mark=0;

printf("輸入學號:\n");

scanf("%d",&num);

for(i=0;i<n;i++)

if(stu[i].num==num)

{

printf("學號:%d 姓名:%s 學院代號:%d 班級號:%d 高數成績:%0.2f 英語成績:%0.2f c語言成績:%0.2f 總分:%0.2f 平均分:%0.2f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);

mark=1;

}

if(mark==0) printf("沒有找到相關信息。\n");

}

//(2)按全名查詢。

void name_search()

{

int i,mark=0;

char name[20];

printf("輸入姓名:\n");

scanf("%s",name);

for(i=0;i<n;i++)

if(strcmp(stu[i].name,name)==0)

{

printf("學號:%d 姓名:%s 學院代號:%d 班級號:%d 高數成績:%0.2f 英語成績:%0.2f c語言成績:%0.2f 總分:%0.2f 平均分:%0.2f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);

mark=1;

}

if(mark==0) printf("沒有找到相關信息。\n");

}

//(3)按姓氏查詢。

void firstname_search()

{

int i,mark=0;

char name[20];

printf("輸入姓氏:\n");

scanf("%s",name);

for(i=0;i<n;i++)

if(stu[i].name[0]==name[0] && stu[i].name[1]==name[1])

{

printf("學號:%d 姓名:%s 學院代號:%d 班級號:%d 高數成績:%0.2f 英語成績:%0.2f c語言成績:%0.2f 總分:%0.2f 平均分:%0.2f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);

mark=1;

}

if(mark==0) printf("沒有找到相關信息。\n");

}

//(4)按學院查詢,輸入學院名稱,輸出該學院的全部學生的信息。

void x_search()

{

int i,x_num,mark=0;

printf("輸入學院代號:\n");

scanf("%d",&x_num);

for(i=0;i<n;i++)

if(stu[i].x_num==x_num)

{

printf("學號:%d 姓名:%s 學院代號:%d 班級號:%d 高數成績:%0.2f 英語成績:%0.2f c語言成績:%0.2f 總分:%0.2f 平均分:%0.2f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);

mark=1;

}

if(mark==0) printf("沒有找到相關信息。\n");

}

//(5)按班級查詢,輸入班級名稱,輸出該班級的全部學生的信息。

void classnum_search()

{

int i,class_num,mark=0;

printf("輸入學院代號:\n");

scanf("%d",&class_num);

for(i=0;i<n;i++)

if(stu[i].class_num==class_num)

{

printf("學號:%d 姓名:%s 學院代號:%d 班級號:%d 高數成績:%0.2f 英語成績:%0.2f c語言成績:%0.2f 總分:%0.2f 平均分:%0.2f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);

mark=1;

}

if(mark==0) printf("沒有找到相關信息。\n");

}

//查詢模塊

void search()

{

char ch;

int i;

if((fp=fopen("student_number","rb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

fread(&n,sizeof(n),1,fp);

if((fp=fopen("student","rb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

for(i=0;i<n;i++)

fread(&stu[i],LEN,1,fp);

fclose(fp);

printf("選擇要進行查詢的關鍵字代號:1、學號查詢。2、按全名查詢。3、按姓氏查詢。4、學院查詢。5、班級查詢。\n");

fflush(stdin);

ch=getchar();

switch(ch)

{

case '1': num_search(); break;

case '2': name_search(); break;

case '3': firstname_search(); break;

case '4': x_search(); break;

case '5': classnum_search(); break;

default :printf("輸入代號有誤。\n");

}

begin:

printf("@是否繼續“查詢”操作(y/n)?\n");

fflush(stdin);

ch=getchar();

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

else if(ch=='n'||ch=='N') ;

else { printf("輸入有誤!\n"); goto begin;}

}

/*6.統計*/

//(1)按總分對學生信息進行排序(由高到低),輸出排序後的信息,並將排序後的學生信息存放到壹個新的二進制文件中。

void totall_score()

{

int i,j;

struct student t;

for(j=0;j<n-1;j++)

for(i=0;i<n-j-1;i++)

if(stu[i].total<stu[i+1].total)

{

t=stu[i];

stu[i]=stu[i+1];

stu[i+1]=t;

}

if((fp=fopen("student_number","wb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

fwrite(&n,sizeof(n),1,fp);

if((fp=fopen("student_totalscore","wb"))==NULL) //按總分排序並保存至新的文件夾中。

{

printf("can't open file!\n");

exit(0);

}

for(i=0;i<n;i++)

{

printf("學號:%d 姓名:%s 學院代號:%d 班級號:%d 高數成績:%0.2f 英語成績:%0.2f c語言成績:%0.2f 總分:%0.2f 平均分:%0.2f\n",stu[i].num,stu[i].name,stu[i].x_num,stu[i].class_num,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);

fwrite(&stu[i],LEN,1,fp);

}

fclose(fp);

}

//(2)按平均分統計各個分數段的學生人數(不及格,60-69,70-79,80-89,90-100)。

void each_score()

{

int e,d,c,b,a,i;

a=b=c=d=e=0;

for(i=0;i<n;i++)

{

if(stu[i].average<60) e++;

else if(stu[i].average<70) d++;

else if(stu[i].average<80) c++;

else if(stu[i].average<90) b++;

else a++;

}

printf("不及格人數為%d\n 60-69人數為%d\n 70-79人數為%d\n 80-89人數為%d\n 90-100人數為%d\n",e,d,c,b,a);

}

//(3)分別找出3門課程成績最高的學生,並輸出他們的信息。

void high_stu()

{

int max1,max2,max3,i;

max1=max2=max3=0;

for(i=0;i<n;i++)

{

if(stu[max1].score1<stu[i].score1) max1=i;

if(stu[max2].score2<stu[i].score2) max2=i;

if(stu[max3].score3<stu[i].score3) max3=i;

}

printf("高數最高成績學生信息:\n學號:%d 姓名:%s 學院代號:%d 班級號:%d 高數成績:%0.2f 英語成績:%0.2f c語言成績:%0.2f 總分:%0.2f 平均分:%0.2f\n",stu[max1].num,stu[max1].name,stu[max1].x_num,stu[max1].class_num,stu[max1].score1,stu[max1].score2,stu[max1].score3,stu[max1].total,stu[max1].average);

printf("英語最高成績學生信息:\n學號:%d 姓名:%s 學院代號:%d 班級號:%d 高數成績:%0.2f 英語成績:%0.2f c語言成績:%0.2f總分:%0.2f 平均分:%0.2f\n",stu[max2].num,stu[max2].name,stu[max2].x_num,stu[max2].class_num,stu[max2].score1,stu[max2].score2,stu[max2].score3,stu[max2].total,stu[max2].average);

printf("c語言最高成績學生信息:\n學號:%d 姓名:%s 學院代號:%d 班級號:%d 高數成績:%0.2f 英語成績:%0.2f c語言成績:%0.2f 總分:%0.2f 平均分:%0.2f\n",stu[max3].num,stu[max3].name,stu[max3].x_num,stu[max3].class_num,stu[max3].score1,stu[max3].score2,stu[max3].score3,stu[max3].total,stu[max3].average);

}

//(4)分別統計出3門課程的不及格率,並輸出。

void filled()

{

int i;

float f1,f2,f3,sf1,sf2,sf3;

f1=f2=f3=0;

for(i=0;i<n;i++)

{

if(stu[i].score1<60) f1++;

if(stu[i].score2<60) f2++;

if(stu[i].score3<60) f3++;

}

sf1=f1/n;

sf2=f2/n;

sf3=f3/n;

printf("高數不及格率為%0.2f\n",sf1);

printf("英語不及格率為%0.2f\n",sf2);

printf("c語言不及格率為%0.2f\n",sf3);

}

//統計模塊

void stat()

{

char ch;

int i;

if((fp=fopen("student_number","rb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

fread(&n,sizeof(n),1,fp);

if((fp=fopen("student","rb"))==NULL)

{

printf("can't open file!\n");

exit(0);

}

for(i=0;i<n;i++)

fread(&stu[i],LEN,1,fp);

printf("選擇要進行的統計操作代號:\n1、按總分由高到低。\n2、按平均分統計各個分數段的學生人數(不及格,60-69,70-79,80-89,90-100)。\n3、找出3門課程成績最高的學生。\n4、統計出3門課程的不及格率。\n");

fflush(stdin);

ch=getchar();

switch(ch)

{

case '1': totall_score(); break;

case '2': each_score(); break;

case '3': high_stu(); break;

case '4': filled(); break;

default :printf("輸入代號有誤。\n");

}

begin:

printf("@是否繼續“統計”操作(y/n)?\n");

fflush(stdin);

ch=getchar();

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

else if(ch=='n'||ch=='N') ;

else { printf("輸入有誤!\n"); goto begin;}

}

/*主選項*/

void action()

{

char ch;

printf("輸入想要進行操作的代碼:\n1、輸入學生信息;\n2、增加學生信息;\n3、刪除學生信息;\n4、修改學生信息;\n5、按不同條件對學生信息進行查詢操作;\n6、按不同條件對學生成績進行統計工作。\n");

fflush(stdin);

ch=getchar();

switch(ch)

{

case '1':creat();break; //輸入學生信息

case '2':add();break; //增加學生信息

case '3':del();break; //刪除學生信息

case '4':change();break; //修改學生信息

case '5':search();break; //按不同條件對學生信息進行查詢操作

case '6':stat();break; //按不同條件對學生成績進行統計工作

default:printf("輸入代號有誤。\n");

}

begin:

printf("#是否繼續進行“管理”操作?(y/n)\n");

fflush(stdin);

ch=getchar();

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

else if(ch=='n'||ch=='N') ;

else { printf("輸入有誤!\n"); goto begin;}

}

//主函數

void main()

{

printf("~~~~~~學生成績管理系統~~~~~~\n\n");

action();

}

  • 上一篇:要很多qq非主流個性名稱帶有標點符號那些的
  • 下一篇:西米是什麽
  • copyright 2024編程學習大全網