c语言编写查询学生成绩管理程序。

Python011

c语言编写查询学生成绩管理程序。,第1张

#include<stdio.h>

#include<stdlib.h>

#include<string.h>struct record

{

char xuehao[10]//学号

char name[20]//姓名

char sex[3]//性别

int ke1//数学

int ke2 //语文

int ke3//英语

int pin

}stu[50]

int k=1,n,mvoid readfile()

void seek()

void insert()

void del()

void save()

void menu()

void seek()

{int i,j,item,flag<br>char s1[20]<br>printf("------------------\n")<br>printf("1.按学号查询\n")<br>printf("2.退出本菜单\n")<br>printf("------------------\n")<br>while(1)<br>{ printf("请选择子菜单编号:")<br>scanf("%d",&item)<br>flag=0<br>switch(item)<br>{<br>case 1:<br>printf("请输入要查询的学生的学号:\n")<br>scanf("%s",s1)<br>for(i=0i<ni++)<br>if(strcmp(stu[i].xuehao,s1)==0)<br>{ flag=1<br>printf("该学生学号,姓名,性别,数学,语文,英语 分别为:\n")<br>printf("%s%s%s %d%d%d",stu[i].xuehao,stu[i].name,<br>stu[i].sex,stu[i].ke1,stu[i].ke2,stu[i].ke3)<br>}

if(flag==0)

printf("该学号不存在!\n")break

case 2:return

default:printf("请在1-2之间选择\n")

}

}

}

void insert()

{ int i=n,j,flag

printf("请输入待增加的学生数:\n")

scanf("%d",&m)

do

{ flag=1

while(flag)

{ flag=0

printf("请输入第 %d 个学生的学号:\n",i+1)

scanf("%s",stu[i].xuehao)

for(j=0j<ij++)

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

{ printf("已有该学号,请检查后重新录入!\n")

flag=1

break

}

}

printf("请输入第 %d 个学生的姓名:",i+1)

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

printf("\n请输入第 %d 个学生的性别:",i+1)

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

printf("\n请输入第 %d 个学生的数学成绩:",i+1)

scanf("%d",&stu[i].ke1)

printf("\n请输入第 %d 个学生的语文成绩:",i+1)

scanf("%d",&stu[i].ke2)

printf("\n请输入第 %d 个学生的英语成绩:",i+1)

scanf("%d",&stu[i].ke3)if(flag==0)

{ i=i

i++

}

}while(i<n+m)

n+=m

printf("录入完毕!\n\n")

}void del()

{ int i,j,flag=0

char s1[20]

printf("请输入要删除学生的学号:\n")

scanf("%s",s1)

for(i=0i<ni++)

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

{ flag=1

for(j=ij<n-1j++)

stu[j]=stu[j+1]

}

if(flag==0)

printf("该学号不存在!\n")

if(flag==1)

{ printf("删除成功,显示结果请选择菜单6\n")

n--

}

}

void readfile()

{

char buf[80],*p="student.dat"

FILE *fp

int i=0

if ((fp=fopen("student.dat","r"))==NULL)

{ printf("Open file %s error! Strike any key to exit!",p)

system("pause")

exit(0)

}

while(fscanf(fp,"%s%s%s%d%d%d",stu[i].xuehao,stu[i].name,

stu[i].sex,&stu[i].ke1,&stu[i].ke2,&stu[i].ke3)==6)

{ i++

i=i

}

fclose(fp)

n=i

printf("录入完毕!\n")

}void save()

{ int i,j,k,flag=0

FILE *fp

fp=fopen("student.dat","w")

for(i=0i<mi++)

{

fprintf(fp,"%s%s%d%d%d",stu[i].xuehao,stu[i].name,stu[i].sex,&stu[i].ke1,

&stu[i].ke2,&stu[i].ke3)

fclose(fp)

printf("已储存")

}

}

void paixu()

{

int i,j,k,t

for(i=0i<mi++)

{

stu[i].pin=(stu[i].ke1+stu[i].ke2+stu[i].ke3)/3

}

for(i=0i<=m-2i++)

{

k=i

for(j=i+1j<=m-1j++)

if(stu[j].pin<stu[k].pin)

k=j

if(k!=i)

{

t=stu[k].pin

stu[k].pin=stu[i].pin

stu[i].pin=t

}

}

for(i=0i<mi++)

{printf("第 %d 个学生的姓名%s:",i+1,stu[i].name)<br> printf("\n第 %d 个学生的性别:%s",i+1,stu[i].sex)<br> printf("\n第 %d 个学生的数学成绩:%d",i+1,stu[i].ke1)<br> printf("\n第 %d 个学生的语文成绩:%d",i+1,stu[i].ke2)<br> printf("\n第 %d 个学生的英语成绩:%d",i+1,stu[i].ke3)<br> printf("\n第 %d 个学生的平均成绩:%d",i+1,stu[i].pin)<br>}

}

void menu()

{ int nub

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

printf("*****系统功能菜单*****\n")

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

printf("1.输入学生信息\n")

printf("2.查询学生信息\n")

printf("3.按学号删除信息\n")

printf("4.读入学生信息\n")

printf("5.保存信息(要把修改保存到文件,退出程序前必须执行本项)\n")

printf("6.查询学生平均成绩信息\n")

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

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

printf("请选择菜单编号:")

scanf("%d",&nub)

switch(nub)

{

case 1:insert()break

case 2:seek()break

case 3:del()break

case 4:readfile()break

case 5:save()break

case 6:paixu()break

case 0:k=0break

default:printf("请在0-6之间选择\n")

}}

void main()

{

while(k)

menu()

}

//平均数是排序后,输出的,如果你不想直接输入,那就不要对每个学生进行选择排序了

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

}

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

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

本人已亲测,可用