C语言实现 学生成绩管理系统(超详细) 内附源码

Python014

C语言实现 学生成绩管理系统(超详细) 内附源码,第1张

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include<conio.h>

#define N 50//定义的学生数组的个数

#define M 1//定义的管理员数组的个数

int k//录入学生的个数

char read_door[20]//读取文件的"门"

void Add_data(int flag)//增加数据

void Count_score(int flag)//求平均成绩和总成绩

void Delete_data(int flag)//根据学号删除对应学生的成绩

int Landing(int key)//登录程序

void Load_data()//载入数据

void Updata_stu(int flag)

void Read_bigdoor(char *b)

void Rank_score(int way, int flag)//按照需求对对应的成绩排序

void Read_data(char read_door)//读取数据

void Read_door()//读取"门"值

void Read_main_flag(int *a)

void Read_k()

void Save_bigdoor(char *b)

void Save_data(int flag)//保存数据

void Save_door()//保存"门"值

void Save_main_flag(int *a)

void Save_k(int k)

void Screen_rank()

void Screen_search()

void Screen_stu()

void Screen_teacher()

void Screen_stu_teach()

void Screen_onlyteach()

void Search_data(int way, int flag)//按学号或姓名查找查找

static struct STUDENT//学生的信息

{

char num[10]

char name[10]

float score[3]

float sum

float aver

int rank[4]

}stu[N]

static struct TEACHER//教师的登录账号和密码

{

char num[10]

char code[10]

}teach[M] = { "18061124","991228" }

int main()

{

char bigdoor ='n'//教师可通过bigdoor控制学生的权限

char *c=&bigdoor

int order1, order2, order3//order为用户登录的指令

int door1, door2, door3

printf ("请输入管理员登录指令:\n")

gets(read_door)

if (strcmp(read_door,"Lu Chen")==0)

{

printf("欢迎使用,您目前是拥有最高权限的管理员,请输入您的账号和密码:\n\n")

printf("\n\n\n")

Screen_onlyteach()

door1 = Landing(1)

if (door1 == 2)

{

printf("\n账号或密码不正确")

return 0

}

}

else

{

Screen_stu_teach()

printf("请输入序号即选择登录选项:")

scanf("%d", &order1)

printf("\n\n")

door1 = Landing(order1)//door1确定用户的权限

switch (door1)//提示用户输入出错

{

case 1:

case 3: break

case 2:printf("\n输入的账号或密码有误")return 0

case 4:printf("\n输入的号码有误")return 0

}

}

if (door1 == 1)//老师界面

{

int flag = 0

int *p=&flag

char teach_read_key

printf("\n是否读取数据?(y/n):")

scanf("%*c%c",&teach_read_key)

if(teach_read_key=='y')

{

Read_k()

    Read_door()

Read_main_flag(p)

Read_data(read_door[20])

}

printf("\n\n")

for (int count = 1count >0count++)//利用死循环来重复使用功能

{

Screen_teacher()

printf("\n请输入序号即选择登录选项:")

scanf("%d", &order2)

printf("\n\n")

if (order2 == 10)

break

switch (order2)

{

case 1:

{

Load_data()

flag=1

Save_main_flag(p)

Save_k(k)

}break

case 2:Updata_stu(flag)break

case 3:

{

Screen_search()

printf("请输入你想查询成绩的方式:")

scanf("%d", &door2)

Search_data(door2, flag)

}break

case 4:Add_data(flag)break

case 5:Delete_data(flag)break

case 6:

{

Screen_rank()

printf("请输入成绩序号来选择排序:")

scanf("%d", &door2)

Rank_score(door2, flag)

} break

case 7:

{

Save_data(flag)

Save_door()

Save_k(k)

} break

case 8:

{

bigdoor ='n'

Save_bigdoor(c)

}break

case 9:

{

bigdoor ='y'

Save_bigdoor(c)

  }break

default:printf("您输入的序号有误!\n\n")

}

}

}

else//学生界面

{

Read_k()

Read_data('y')

for (int k = 1k >0k++)

{

Screen_stu()

printf("请输入下一步操作的序号:")

scanf("%d", &order3)

if (order3 == 3)

break

switch (order3)

{

case 1:

{

Screen_search()

printf("请输入你想查询成绩的方式")

scanf("%d", &door3)

Search_data(door3, 1)

}break

case 2:

{

Screen_rank()

printf("请输入成绩序号来选择排序:")

scanf("%d", &door3)

Rank_score(door3, 1)

}break

default:printf("输入的操作序号有误\n\n")

}

}

}

return 0

}

int Landing(int key)//登录程序

{

char num[10]

char code[10]

if (key == 1)

{

printf("请输入账号:")

scanf("%s", num)

printf("\n请输入密码:")

scanf("%s", code)

for (int i = 0i <Mi++)

if (strcmp(teach[i].num, num) == 0 &&strcmp(teach[i].code, code) == 0)//判断登陆账号和密码是否正确

return 1

else

return 2

}

else if (key == 2)

{

return 3

}

else

{

return 4

}

}

void Search_data(int way, int flag)//按学号或姓名查找查找

{

int Search_flag = 1

if (flag)

{

char num[10], name[10]

int i

if (way == 1)

{

printf("\n请输入学号:")

scanf("%s", num)

for (i = 0i <ki++)

{

if (strcmp(stu[i].num, num) == 0)//判断学号存不存在

{

printf("\n姓名:%s\n学号:%s\nsubject1:%f\nsubject2:%f\nsubject3:%f\nsum:%f\naver:%f\n", stu[i].name, stu[i].num, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum, stu[i].aver)

Search_flag = 0

break

}

}

if (Search_flag)

printf("\n您输入的学号有误\n")

}

else if (way == 2)

{

printf("\n请输入姓名:")

scanf("%s", name)

for (i = 0i <Ni++)

{

if (strcmp(stu[i].name, name) == 0)//判断姓名存不存在

{

printf("\n姓名:%s\n学号:%s\nsubject1:%f\nsubject2:%f\nsubject3:%f\nsum:%f\naver:%f\n", stu[i].name, stu[i].num, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum, stu[i].aver)

flag = 0

break

}

}

if (flag)

printf("\n输入的姓名有误\n")

}

else

printf("\n输入的序号有误\n")

}

else

{

printf("\n您还没有载入数据\n")

}

}

void Count_score(int flag)//求平均成绩和总成绩

{

if (flag)

{

for (int i = 0i <ki++)

{

stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2]

stu[i].aver = stu[i].sum / 3

}

}

else

{

printf("\n您还没有载入数据\n")

}

}

void Load_data()//载入数据

{

printf("输入录入学生成绩个数:")

scanf("%d", &k)

for (int i = 0i <ki++)

{

scanf("%s%s%f%f%f", stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2])

Count_score(1)

}

}

void Rank_score(int way, int flag)//按照需求对对应的成绩排序

{

int i, j, n, temp

if (flag)

{

for (i = 0i <4i++)

for (j = 0j <kj++)

stu[j].rank[i] = j + 1

if (way == 1)

{

for (i = 0i <3i++)

for (j = 0j <kj++)

for (n = j + 1n <kn++)

if (stu[j].score[i] <stu[n].score[i])

{

temp = stu[j].rank[i]

stu[j].rank[i] = stu[n].rank[i]

stu[n].rank[i] = temp

}

printf("\n")

for (i = 0i <ki++)

printf("姓名:%s 学号:%s subject1:%d subject2:%d subject3:%d\n", stu[i].name, stu[i].num, stu[i].rank[0], stu[i].rank[1], stu[i].rank[2])

}

else if (way == 2)

{

for (j = 0j <kj++)

for (n = j + 1n <kn++)

if (stu[j].sum <stu[n].sum)

{

temp = stu[j].rank[3]

stu[j].rank[3] = stu[n].rank[3]

stu[n].rank[3] = temp

}

printf("\n")

for (i = 0i <ki++)

printf("姓名:%s 学号:%s sum: %d\n", stu[i].name, stu[i].num, stu[i].rank[3])

}

else

{

printf("\n输入的序号有误\n")

}

}

else

{

printf("\n您还没有载入数据\n")

}

}

void Delete_data(int flag)//根据学号删除对应学生的成绩

{

if (flag)

{

int i, j

char num[10]

printf("\n请输入您想要删除信息的学号:")

scanf("%s", num)

for (i = 0i <ki++)

{

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

for (j = i + 1j <kj++)

{

stu[i] = stu[j]

Count_score(1)

}

}

k--

Save_k(k)

}

else

{

printf("\n您还没有载入数据\n")

}

}

void Updata_stu(int flag)//根据学号修改学生的成绩

{

int Updata_flag = 1

if (flag)

{

char num[10]

float subject1, subject2, subject3

printf("\n请输入您想要修改学生的学号:")

scanf("%s", num)

printf("\n请输入您想要更改的学生三科的成绩:")

scanf("%f%f%f", &subject1, &subject2, &subject3)

for (int i = 0i <ki++)

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

{

stu[i].score[0] = subject1

stu[i].score[1] = subject2

stu[i].score[2] = subject3

Updata_flag = 0

Count_score(1)

}

if (Updata_flag)

{

printf("\n输入学号有误\n")

}

}

else

{

printf("\n您还没有载入数据\n")

}

}

void Save_data(int flag)//保存数据

{

if(flag)

{

FILE *fp

if((fp=fopen("load.txt","w"))==NULL)

{

printf("Save_data error!")

exit(0)

}

for(int i=0i<ki++)

{

fwrite(&stu[i],sizeof(STUDENT),1,fp)

}

fclose(fp)

printf("成功保存数据!\n\n")

read_door[20]='y'

}

else

{

printf("\n您还没有载入数据\n")

}

}

void Read_data(char read_door)//读取数据

{

if(read_door=='y')

{

FILE *fp

if((fp=fopen("load.txt","r"))==NULL)

{

printf("Read_data error!")

exit(0)

}

for(int i=0i<ki++)

{

fread(&stu[i],sizeof(STUDENT),1,fp)

}

fclose(fp)

}

else

{

printf("\n没有保存数据的记录\n")

}

}

void Save_door()//保存"门"值

{

FILE *fp

if((fp=fopen("door.txt","w"))==NULL)

{

printf("Save_door error!")

exit(0)

}

fputc(read_door[20],fp)

fclose(fp)

}

void Read_door()//读取"门"值

{

FILE *fp

if((fp=fopen("door.txt","r"))==NULL)

{

printf("Read_door error!")

exit(0)

}

read_door[20]=fgetc(fp)

fclose(fp)

}

void Save_main_flag(int *a)

{

FILE *fp

if((fp=fopen("flag.txt","w"))==NULL)

{

printf("Save_main_flag error!")

exit(0)

}

fprintf(fp,"%d",*a)

fclose(fp)

}

void Read_main_flag(int *a)

{

FILE *fp

if((fp=fopen("flag.txt","r"))==NULL)

{

printf("Read_main_flag error!")

exit(0)

}

fscanf(fp,"%d",a)

fclose(fp)

}

void Save_bigdoor(char *b)

{

FILE *fp

if((fp=fopen("bigdoor.txt","w"))==0)

{

printf("Save_bigdoor error!")

exit(0)

}

fputc(*b,fp)

fclose(fp)

}

void Read_bigdoor(char *b)

{

FILE *fp

if((fp=fopen("bigdoor.txt","r"))==0)

{

printf("Read_bigdoor error!")

exit(0)

}

*b=fgetc(fp)

fclose(fp)

}

void Save_k(int k)

{

FILE *fp

if((fp=fopen("k.txt","w"))==0)

{

printf("Save_k error!")

exit(0)

}

fprintf(fp,"%d",k)

fclose(fp)

}

void Read_k()

{

FILE *fp

if((fp=fopen("k.txt","r"))==0)

{

printf("Read_k error!")

exit(0)

}

fscanf(fp,"%d",&k)

fclose(fp)

}

void Add_data(int flag)//增加数据

{

int i, j,count=k

char num[10], name[10]

float subject1, subject2, subject3

if (flag)

{

printf("\n输入您想增加的数据条数:")

scanf("%d", &i)

for (j = 0j <ij++)

{

printf("\n输入增加的学生学号,姓名,三门科目成绩")

scanf("%s%s%f%f%f", num, name, &subject1, &subject2, &subject3)

strcpy(stu[count + j].num, num)

strcpy(stu[count+ j].name, name)

stu[count+ j].score[0] = subject1

stu[count + j].score[1] = subject2

stu[count+ j].score[2] = subject3

k++

Count_score(1)

}

Save_k(k)

}

else

{

printf("\n输入您想增加的数据条数:")

scanf("%d", &i)

for (j = 0j <ij++)

{

printf("\n输入增加的学生学号,姓名,三门科目成绩")

scanf("%s%s%f%f%f", num, name, &subject1, &subject2, &subject3)

strcpy(stu[j].num, num)

strcpy(stu[j].name, name)

stu[j].score[0] = subject1

stu[j].score[1] = subject2

stu[j].score[2] = subject3

k++

Count_score(1)

}

}

}

void Screen_search()//查询界面

{

printf("*****************学生成绩查询界面*******************\n\n\n")

printf("——————————————————————————\n")

printf("|              ①  学生学号查询                    |\n")

printf("|              ②  学生姓名查询                    |\n")

printf("——————————————————————————\n")

}

void Screen_rank()//成绩排名方式界面

{

printf("*****************学生成绩排名界面*******************\n\n\n")

printf("——————————————————————————\n")

printf("|              ①    subject                      |\n")

printf("|              ②      sum                        |\n")

printf("——————————————————————————\n")

}

void Screen_teacher()

{

printf("*****************教师管理操作界面*******************\n\n\n")

printf("——————————————————————————\n")

printf("|              ①    数据载入                      |\n")

printf("|              ②    修改数据                      |\n")

printf("|              ③    查询数据                      |\n")

printf("|              ④    添加数据                      |\n")

printf("|              ⑤    删除数据                      |\n")

printf("|              ⑥    成绩排序                      |\n")

printf("|              ⑦    保存数据                      |\n")

printf("|              ⑧    学生限制                      |\n")

printf("|              ⑨    学生开放                      |\n")

printf("|              ⑩      退出                        |\n")

printf("——————————————————————————\n")

}

void Screen_stu_teach()

{

printf("*****************学生成绩管理系统*******************\n\n\n")

printf("——————————————————————————\n")

printf("|              ① 教师管理员登录                  |\n")

printf("|              ②  学生端登录                    |\n")

printf("——————————————————————————\n")

}

void Screen_onlyteach()

{

printf("*****************教师登陆操作界面*******************\n\n\n")

printf("——————————————————————————\n")

printf("|              ① 教师管理员登录                  |\n")

printf("——————————————————————————\n")

}

void Screen_stu()

{

printf("*****************学生用户操作界面*******************\n\n\n")

printf("——————————————————————————\n")

printf("|              ①  学生成绩查询                    |\n")

printf("|              ②  成绩排名查询                    |\n")

printf("|              ③      退出                        |\n")

printf("——————————————————————————\n")

}

以上内容仅是本人通过多方浏览网上资料,自己敲出来的。

如有问题,大家可以在评论区下方留言!!!

本人已亲测,可用

头文件:::

#ifndef H_STUDENT_HH

#define H_STUDENT_HH

#include "stdio.h"

#include "string.h"

#include "malloc.h"

#define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/

#define numsubs 5/*学科数目*/

typedef struct message_student /*结构体定义*/

{

char number[6]

char name[20]

char sex[4]

float subject[numsubs]

float score

float average

int index

}student

extern int numstus /*学生数目*/

extern student *pointer /*指向结构体数组*/

extern int lens

int menu_select() /*函数声明*/

int openfile(student stu[])

int findrecord(student stud[])

int writetotext(student stud[])

void welcome()

void display1()

void showtable()

void sort(student stu[])

void deleterecord(student stu[],int i)

void addrecord(student stud[])

void display(student stud[],int n1,int n2)

void amendrecord(student stud[])

void count(student stud[])

void sortnum(student stud[])

void sortnum2(student stud[])

void sortname(student stud[])

void sortname2(student stud[])

void sortcount(student stud[])

void sortcount2(student stud[])

void statistic(student stud[])

void display1()

#endif

#include "head.h"

int menu_select()

{

char c

printf("\n\n")

printf(" | 1. 增加学生记录5.统计信息 |\n")

printf(" | 2. 查询学生记录6.打开文件 |\n")

printf(" | 3. 修改学生记录7.保存文件 |\n")

printf(" | 4. 学生纪录排序8.显示记录 |\n")

printf(" |0.退出系统 |\n")

printf("\n\n")

printf("请选择(0-8):")

c=getchar()

getchar()

return (c-'0')

}

#include "head.h"

int findrecord(student stud[])/*查找信息*/

{

char str[2]

int i,num

if(numstus==0)

{

printf("没有可被查找的记录\n")

return -1

}

else

{

printf("以何种方式查找?\n1.学号\t2.姓名\t3.名次\n")

gets(str)

if(str[0]=='1') /*按学号查找*/

{

printf("请输入学号:")

gets(str)

for(i=0i<=numstusi++)

if(strcmp(str,stud[i].number)==0)

{

display(stud,i,i)

break

}

else continue

}

else if(str[0]=='2') /*按姓名查找*/

{

printf("请输入姓名:")

gets(str)

for(i=0i<=numstusi++)

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

{

display(stud,i,i)

break

}

else continue

}

else if(str[0]=='3') /*按名次查找*/

{

printf("请输入名次:")

scanf("%d",&num)

getchar()

for(i=0i<=numstusi++)

if(num==stud[i].index)

{

display(stud,i,i)

break

}

else continue

}

if(i>numstus)

{

printf("没有查找所要的信息。\n")

return -1

}

return i

}

}

#include"head.h"

int openfile(student stu[])

{

int i=0,j

FILE *fp

char filename[20],str[2]

if(numstus!=0)

{

printf("已经有记录存在,是否保存?(y/n)")

gets(str)

if(str[0]=='y'||str[0]=='Y')

writetotext(stu)

}

printf("请输入文件名:")

gets(filename)

numstus=0

if((fp=fopen(filename,"rb+"))==NULL)

{

printf("无法打开该文件\n")

return(-1)

}

fscanf(fp,"%d",&numstus)

fgetc(fp)

while(i<numstus)

{

fscanf(fp,"%s",stu[i].number)

fscanf(fp,"%s",stu[i].name)

fscanf(fp,"%s",stu[i].sex)

for(j=0j<numsubsj++)

fscanf(fp,"%f",&stu[i].subject[j])

fscanf(fp,"%f",&stu[i].score)

fscanf(fp,"%f",&stu[i].average)

fscanf(fp,"%d",&stu[i].index)

i++

}

fclose(fp)

printf("文件读取成功\n")

printf("是否显示纪录?(y/n)")

gets(str)

if(str[0]=='y'||str[0]=='Y')

display(stu,0,numstus-1)

return(0)

}

#include "head.h"

void sort(student stud[])

{

int i,j=0

char str[5]

student *p

p=stud

if(numstus==0)

{

printf("没有可供查询的记录!")

}

while(1)

{

for(i=0i++)

{

printf(" 请输入查询方式:")

printf("(直接输入回车则结束查询操作)\n")

printf("1.按照学号\t")

printf("2.按照姓名\t")

printf("3.按照名次\n")

gets(str)

if(strlen(str)==0) break

if(str[0]=='1')

{

printf("请输入排序次序:\n")

printf("1.升序排列\t")

printf("2.降序排列\n")

gets(str)

if(str[0]=='1')

sortnum2(p)

else

sortnum(p)

display(stud,0,numstus-1)

}

else if(str[0]=='2')

{

printf("请输入排序次序:\n")

printf("1.升序排列\t")

printf("2.降序排列\n")

gets(str)

if(str[0]=='1')

sortname2(p)

else

sortname(p)

display(stud,0,numstus-1)

}

else if(str[0]=='3')

{

printf("请输入排序次序:\n")

printf("1.升序排列\t")

printf("2.降序排列\n")

gets(str)

if(str[0]=='1')

sortcount2(p)

else

sortcount(p)

display(stud,0,numstus-1)

}

else printf("请输入1~3")

printf("是否退出排序?(y/n)")

gets(str)

if(str[0]=='y'||str[0]=='Y') break

}

return

}

}

void sortnum(student stud[])

{

int i,j

student temp

student *p

p=stud

for(i=0i<numstusi++)

for(j=0j<numstus-i-1j++)

{

if(strcmp(stud[j+1].number,stud[j].number)>0)

{

temp=*(p+j)

*(p+j)=*(p+j+1)

*(p+j+1)=temp

}

}

}

void sortnum2(student stud[])

{

int i,j

student temp

student *p

p=stud

for(i=0i<numstusi++)

for(j=0j<numstus-i-1j++)

{

if(strcmp(stud[j].number,stud[j+1].number)>0)

{

temp=*(p+j)

*(p+j)=*(p+j+1)

*(p+j+1)=temp

}

}

}

void sortname(student stud[])

{

int i,j

student temp

student *p

p=stud

for(i=0i<numstusi++)

for(j=0j<numstus-i-1j++)

{

if(strcmp(stud[j+1].name,stud[j].name)>0)

{

temp=*(p+j)

*(p+j)=*(p+j+1)

*(p+j+1)=temp

}

}

}

void sortname2(student stud[])

{

int i,j

student temp

student *p

p=stud

for(i=0i<numstusi++)

for(j=0j<numstus-i-1j++)

{

if(strcmp(stud[j].name,stud[j+1].name)>0)

{

temp=*(p+j)

*(p+j)=*(p+j+1)

*(p+j+1)=temp

}

}

}

void sortcount(student stud[])

{

int i,j

student temp

student *p

p=stud

for(i=0i<numstusi++)

for(j=0j<numstus-i-1j++)

{

if(stud[j+1].index>stud[j].index)

{

temp=*(p+j)

*(p+j)=*(p+j+1)

*(p+j+1)=temp

}

}

}

void sortcount2(student stud[])

{

int i,j

student temp

student *p

p=stud

for(i=0i<numstusi++)

for(j=0j<numstus-i-1j++)

{

if(stud[j].index>stud[j+1].index)

{

temp=*(p+j)

*(p+j)=*(p+j+1)

*(p+j+1)=temp

}

}

}

#include"head.h"

void statistic(student stud[])/*新增功能,输出统计信息*/

{

int i,j=0,k=0

char c1,str[2]

float average[numsubs],sum=0

if(numstus==0)

printf("没有可被查找的记录\n")

else

{

while(1)

{

printf("下面将统计考试成绩\n")

printf("请选择你要统计哪科的成绩 1.A\t2.B\t3.C\t4.D\t5.E\n")

c1=getchar()

printf("\t一共有个%d记录\n",numstus) /*总共记录数*/

switch(c1)

{

case '1':

for(i=0i<numstusi++)/*循环输入判断*/

{

sum+=stud[i].subject[0]

if(stud[k].subject[0]>stud[i].subject[0]) k=i

if(stud[j].subject[0]<stud[i].subject[0]) j=i

}

average[0]=sum/numstus

printf("\t科目A的最高分:\n") /*最高分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0])

printf("\t科目A的最低分是:\n") /*最低分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0])

printf("\t科目A的平均分是 %5.2f\n",average[0]) /*平均分*/

break

case '2':

for(i=0i<numstusi++)/*循环输入判断*/

{

sum+=stud[i].subject[1]

if(stud[k].subject[1]>stud[i].subject[1]) k=i

if(stud[j].subject[1]<stud[i].subject[1]) j=i

}

average[1]=sum/numstus

printf("\t科目B的最高分:\n") /*最高分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1])

printf("\t科目B的最低分是:\n") /*最低分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1])

printf("\t科目B的平均分是 %5.2f\n",average[1]) /*平均分*/

break

case '3':

for(i=0i<numstusi++)/*循环输入判断*/

{

sum+=stud[i].subject[2]

if(stud[k].subject[2]>stud[i].subject[2]) k=i

if(stud[j].subject[2]<stud[i].subject[2]) j=i

}

average[2]=sum/numstus

printf("\t科目C的最高分:\n") /*最高分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2])

printf("\t科目C的最低分是:\n") /*最低分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2])

printf("\t科目C的平均分是 %5.2f\n",average[2]) /*平均分*/

break

case '4':

for(i=0i<numstusi++)/*循环输入判断*/

{

sum+=stud[i].subject[3]

if(stud[k].subject[3]>stud[i].subject[3]) k=i

if(stud[j].subject[3]<stud[i].subject[3]) j=i

}

average[3]=sum/numstus

printf("\t科目D的最高分:\n") /*最高分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3])

printf("\t科目D的最低分是:\n") /*最低分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3])

printf("\t科目D的平均分是 %5.2f\n",average[3]) /*平均分*/

break

case '5':

for(i=0i<numstusi++)/*循环输入判断*/

{

sum+=stud[i].subject[4]

if(stud[k].subject[4]>stud[i].subject[4]) k=i

if(stud[j].subject[4]<stud[i].subject[4]) j=i

}

average[4]=sum/numstus

printf("\t科目E的最高分:\n") /*最高分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4])

printf("\t科目E的最低分是:\n") /*最低分*/

printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4])

printf("\t科目E的平均分是 %5.2f\n",average[4]) /*平均分*/

break

default:printf("输入错误!请输入1~5之间的数\n")

}

sum=0

getchar()

printf("是否继续进行统计?(y/n)")

gets(str)

if(str[0]=='y'||str[0]=='Y')

else break

}

}

}

#include"head.h"

int writetotext(student stud[])/*将所有记录写入文件*/

{

int i=0,j

FILE *fp

char filename[20]

printf("输入文件名称:")

gets(filename)

fp=fopen(filename,"w")

fprintf(fp,"%d\n",numstus)

while(i<numstus)

{

fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex)

for(j=0j<numsubsj++)

fprintf(fp,"%f ",stud[i].subject[j])

fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index)

i++

}

fclose(fp)

printf("已成功存储!\n")

display(stud,0,numstus-1)

numstus=0

return 0

}

#include"head.h"

void welcome()

{

printf("\t*************************************************************\n")

printf("\t\t\t\t这是一个学生成绩管理系统\n\t\t\t\t 倾情奉献 欢迎使用!\n")

printf("\t*************************************************************\n")

}

void showtable()

{

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

printf("学号\t姓名\t性别\tA\tB\tC\tD\tE\t总分\t平均分\t名次\n")

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

}

void display(student stud[],int n1,int n2)

{

int i

showtable()/*显示表头*/

for(i=n1i<=n2i++)

printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index)

/*通过循环输出数据*/

}

void display1()

{

printf("\t\t本系统由计应精英一组亲情制作\n\n")

printf("\t\t制作人员列表:(按比划)\n")

printf("\t\t王庆斌\t\t\t张威\n\t\t李智\t\t\t周在峰\n\t\t杨凯\t\t\t胡杨\n")

printf("\n\n")

getchar()

}

#include"head.h"

#include<string.h>

void amendrecord(student stud[])

{

char str[5] /*供用户输入*/

int i=-1,j

if(numstus==0)/*没有记录返回*/

printf("没有可供修改的记录!")

while(i<0)

{

i=findrecord(stud)

if(i>=0)

{

printf("要删除这个学生的信息吗?(y/n)")

gets(str)

if(str[0]=='y'||str[0]=='Y')

{

deleterecord(stud,i)

count(stud)

}

else

{

printf("确定要修改这个学生的信息吗?(y/n)")

gets(str)

if(str[0]=='y'||str[0]=='Y')

{

printf("下面请重新输入学生的信息:\n")

printf("请输入学号:")

gets(stud[i].number)

printf("请输入姓名:")

gets(stud[i].name)

printf("请输入性别(男/女 1/0):")

gets(str)

if(str[0]=='0')

strcpy(stud[i].sex,"女")

else

strcpy(stud[i].sex,"男")

stud[i].score=0

printf("请按顺序输入成绩:")

for(j=0j<numsubsj++)

{

scanf("%f",&stud[i].subject[j])

stud[i].score+=stud[i].subject[j]

}

getchar()

stud[i].average=stud[i].score/numsubs

}

count(stud)

}

display(stud,0,numstus-1)

}

printf("是否继续进行其他修改?(y/n)\n")

gets(str)

if(str[0]=='y'||str[0]=='Y')

i=-1

else i=1

}

}

void deleterecord(student stu[],int i) /*删除信息*/

{

int j

while(i>=0)

{

for(j=ij<numstusj++)

stu[j]=stu[j+1]

numstus--

printf("删除成功!\n")

}

}

void count(student stud[])

{

int i,j

for(i=0i<numstusi++)

{

stud[i].index=1

for(j=0j<numstusj++)

if(stud[j].score>stud[i].score)

stud[i].index++

}

}

#include "head.h"

void addrecord(student stud[])

{

int i=0,j,num

char str[5]

if(numstus!=0)

{

printf("已有记录存在是否覆盖?(y/n)\n")

gets(str)

if(str[0]=='Y'||str[0]=='y')

i=0

else i=numstus

}

printf("请输入增加的学生信息条目数:")

scanf("%d",&num)

if(i==0)

numstus=num

else numstus+=num

if(numstus>lens)

{

lens+=50

pointer=(student *)realloc(pointer,lens*LEN)

}

printf("请输入学生信息:\n")

for(i<numstusi++)

{

getchar()

printf("请输入学号:")

gets(pointer[i].number)

printf("请输入姓名:")

gets(pointer[i].name)

printf("请输入性别(男/女 1/0):")

gets(pointer[i].sex)

if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女")

else strcpy(pointer[i].sex,"男")

printf("请输入各科成绩:(按ABCDE的顺序):")

stud[i].score=0

for(j=0j<numsubsj++)

{

scanf("%f",&stud[i].subject[j]) /*计算总分*/

stud[i].score+=stud[i].subject[j]

}

stud[i].average=stud[i].score/numsubs /*计算平均分*/

}

count(stud) /*附名次*/

display(stud,0,numstus-1)

getchar()

}#include "head.h"

int numstus

int lens

student *pointer

void main()

{

int i=1

char str[2]

lens=100

pointer=(student *)malloc(lens*LEN) /*分配内存*/

numstus=0

welcome() /*欢迎界面*/

while(i>0)

{

i=menu_select() /*控制菜单*/

switch(i)

{

case 1:addrecord(pointer)break /*增加学生信息*/

case 2:findrecord(pointer)break /*查询学生信息*/

case 3:amendrecord(pointer)break /*修改学生信息*/

case 4:sort(pointer)break /*学生信息排序*/

case 5:statistic(pointer)break /*统计信息*/

case 6:openfile(pointer)break/*打开文件*/

case 7:writetotext(pointer)break /*保存文件*/

case 8:display(pointer,0,numstus-1)break /*显示记录*/

case 0:

if(numstus!=0) printf("是否保存当前记录?(y/n)")

gets(str)

if(str[0]=='y'||str[0]=='Y')

writetotext(pointer)

i=-1break/*退出系统*/

default:printf("请输入数字0~8:\n")i=1 /*输入错误*/

}

}

printf("\t\t欢迎再次使用本系统。\n\n")

display1()

}

自己一改就能用,给我加分哈!

打字不易,如满意,望采纳。