#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")
}
以上内容仅是本人通过多方浏览网上资料,自己敲出来的。
如有问题,大家可以在评论区下方留言!!!
本人已亲测,可用