#include<stdio.h>
#include<windows.h>
#define MAX 42
void enter();
void show();
void find();
void changed();
void del();
void save();
void low();
void TopAndLow();
void avd();
void sum();
double pj_1();
double pj_2();
double pj_3();
double pj_4();
double pj_5();
double banjipj();
int number=0;
struct student
{
int nub;
char name[10];
char sex[10];
double one;
double two;
double three;
double four;
double five;
}stu[MAX];
double banjipj()
{
int i;
double he=0,bjpj=0;
for(i=0;i<number;i++){
he=stu[i].one+stu[i].two+stu[i].three+stu[i].four+stu[i].five;
}
bjpj=he/number;
return bjpj;
}
double avd(int i)
{
double pj=0;
pj=((stu[i].one+stu[i].two+stu[i].three+stu[i].four+stu[i].five)/5.0);
return pj;
}
double sum(int i)
{
double he=0;
he=stu[i].one+stu[i].two+stu[i].three+stu[i].four+stu[i].five;
return he;
}
double pj_1()
{
int i;
double pj=0;
for(i=0;i<number;i++)
{
pj=pj+stu[i].one;
}
pj=pj/number;
return pj;
}
double pj_2()
{
int i;
double pj=0;
for(i=0;i<number;i++)
{
pj=pj+stu[i].two;
}
pj=pj/number;
return pj;
}
double pj_3()
{
int i;
double pj=0;
for(i=0;i<number;i++)
{
pj=pj+stu[i].three;
}
pj=pj/number;
return pj;
}
double pj_4()
{
int i;
double pj=0;
for(i=0;i<number;i++)
{
pj=pj+stu[i].four;
}
pj=pj/number;
return pj;
}
double pj_5()
{
int i;
double pj=0;
for(i=0;i<number;i++)
{
pj=pj+stu[i].five;
}
pj=pj/number;
return pj;
}
void enter()
{
int i,t,n;
int temp_xh,flag=1,c;
system("cls");
printf("请输入要录入学生的人数:\n");
scanf("%d",&n);
for(t=0;t<n;t++)
{
printf("请输入要录入学生的学号:\n");
scanf("%d",&temp_xh);
for(i=0;i<number;i++)
{
if(stu[i].nub==temp_xh)
{
printf("已存在,请重试!\n");
flag=0;
}
}
if(flag==1)
{
stu[i].nub=temp_xh;
printf("请输入该学生的姓名:\n");
scanf("%s",stu[i].name);
printf("请输入该学生的性别:\n");
scanf("%s",stu[i].sex);
printf("请输入该学生的第一科成绩:\n");
scanf("%lf",&stu[i].one);
printf("请输入该学生的第二科成绩:\n");
scanf("%lf",&stu[i].two);
printf("请输入该学生的第三科成绩:\n");
scanf("%lf",&stu[i].three);
printf("请输入该学生的第四科成绩:\n");
scanf("%lf",&stu[i].four);
printf("请输入该学生的第五科成绩:\n");
scanf("%lf",&stu[i].five);
printf("录入成功!\n");
number++;
}if(flag==0){
t--;
flag=1;
continue;
}
}
printf("已成功录入%d位学生!\n",n);
printf("是否继续录入?\n# 1.继续 \n# 2.返回菜单\n");
scanf("%d",&c);
if(c==1)
{
system("cls");
enter();
}
else
{
printf("正在返回菜单...\n");
Sleep(2000);
}
system("cls");
}
void show()
{
system("cls");
int i,n,t;
int a;
struct student temp;
printf("请输入要查询的形式:\n");
printf("1.学号排序\n2.总分排序\n");
scanf("%d",&a);
if(a==1)
{
for(i=0;i<number;i++)
{
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 平均分:%.1f\n 总分:%.1f\n\n",stu[i].nub,stu[i].name,stu[i].sex,avd(i),sum(i));
}
}else if(a==2)
{
for(i=0;i<number-1;i++)
{
for(t=0;t<number;t++)
{
if((stu[t].one+stu[t].two+stu[t].three+stu[t].four+stu[t].five)<(stu[t+1].one+stu[t+1].two+stu[t+1].three+stu[t+1].four+stu[t+1].five))
{
temp=stu[t];
stu[t]=stu[t+1];
stu[t+1]=temp;
}
}
}
for(i=0;i<number;i++)
{
printf("#排名:%d\n 学号:%06d\n 姓名:%s\n 性别:%s\n 平均分:%.1f\n 总分:%.1f\n\n",i+1,stu[i].nub,stu[i].name,stu[i].sex,avd(i),sum(i));
}
}
system("pause");
system("cls");
}
void find()
{
int i;
int n,xh;
char mingzi[10];
printf("请选择您想要的查找方式:\n");
printf(" 1.姓名 2.学号\n");
scanf("%d",&n);
if(n==1)
{
printf("请选择您想要查找学生的名字:\n");
scanf("%s",mingzi);
for(i=0;i<number;i++)
{
if(strcmp(mingzi,stu[i].name)==0)
{
printf("#学号:%d\n 姓名:%s\n 性别:%s\n 第一科:%.1f\n 第二科:%.1f\n 第三科:%.1f\n 第四科:%.1f\n 第五科:%.1f\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one,stu[i].two,stu[i].three,stu[i].four,stu[i].five);
}
}
}else if(n==2)
{
printf("请选择您想要查找学生的学号:\n");
scanf("%d",&xh);
for(i=0;i<number;i++)
{
if(xh==stu[i].nub)
{
printf("#学号:%d\n 姓名:%s\n 性别:%s\n 第一科:%.1f\n 第二科:%.1f\n 第三科:%.1f\n 第四科:%.1f\n 第五科:%.1f\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one,stu[i].two,stu[i].three,stu[i].four,stu[i].five);
}
}
}
system("pause");
system("cls");
}
void changed()
{
int i;
int n,xh,flag=0;
char mingzi[10],xingbie[10];
printf("请选择您想要的查找方式:\n");
printf(" 1.姓名 2.学号\n");
scanf("%d",&n);
if(n==1)
{
printf("请选择您想要修改的学生名字:\n");
scanf("%s",mingzi);
for(i=0;i<number;i++)
{
if(strcmp(mingzi,stu[i].name)==0)
{
printf("#学号:%d\n 姓名:%s\n 性别:%s\n 第一科:%.1f\n 第二科:%.1f\n 第三科:%.1f\n 第四科:%.1f\n 第五科:%.1f\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one,stu[i].two,stu[i].three,stu[i].four,stu[i].five);
flag=1;
break;
}
}
}else if(n==2)
{
printf("请选择您想要修改的学生学号:\n");
scanf("%d",&xh);
for(i=0;i<number;i++)
{
if(xh==stu[i].nub)
{
printf("#学号:%d\n 姓名:%s\n 性别:%s\n 第一科:%.1f\n 第二科:%.1f\n 第三科:%.1f\n 第四科:%.1f\n 第五科:%.1f\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one,stu[i].two,stu[i].three,stu[i].four,stu[i].five);
flag=1;
break;
}
}
}
if(flag==1)
{
printf("请输入要修改的内容:\n");
printf(" 1.姓名\n 2.性别\n 3.第一科成绩\n 4.第二科成绩\n 5.第三科成绩\n 6.第四科成绩\n 7.第五科成绩\n\n");
scanf("%d",&n);
switch(n)
{
case 1:{
system("cls");
printf("请输入要修改的名字:\n");
scanf("%s",mingzi);
strcpy(stu[i].name,mingzi);
printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
scanf("%d",&n);
if(n==1)
{
system("cls");
changed();
}else
{
printf("稍等...\n");
Sleep(2000);
system("cls");
break;
}
break;
}
case 2:{
system("cls");
printf("请输入要修改的内容:\n");
scanf("%s",xingbie);
strcpy(stu[i].name,xingbie);
printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
scanf("%d",&n);
if(n==1)
{
system("cls");
changed();
}else
{
printf("稍等...\n");
Sleep(2000);
system("cls");
break;
}
break;
}
case 3:{
system("cls");
printf("请输入要修改的内容:\n");
scanf("%d",&n);
stu[i].one=n;
printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
scanf("%d",&n);
if(n==1)
{
system("cls");
changed();
}else
{
printf("稍等...\n");
Sleep(2000);
system("cls");
break;
}
break;
}
case 4:{
system("cls");
printf("请输入要修改的内容:\n");
scanf("%d",&n);
stu[i].two=n;
printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
scanf("%d",&n);
if(n==1)
{
system("cls");
changed();
}else
{
printf("稍等...\n");
Sleep(2000);
system("cls");
break;
}
break;
}
case 5:{
system("cls");
printf("请输入要修改的内容:\n");
scanf("%d",&n);
stu[i].three=n;
printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
scanf("%d",&n);
if(n==1)
{
system("cls");
changed();
}else
{
printf("稍等...\n");
Sleep(2000);
system("cls");
break;
}
break;
}
case 6:{
system("cls");
printf("请输入要修改的内容:\n");
scanf("%d",&n);
stu[i].four=n;
printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
scanf("%d",&n);
if(n==1)
{
system("cls");
changed();
}else
{
printf("稍等...\n");
Sleep(2000);
system("cls");
break;
}
break;
}
case 7:{
system("cls");
printf("请输入要修改的内容:\n");
scanf("%d",&n);
stu[i].five=n;
printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
scanf("%d",&n);
if(n==1)
{
system("cls");
changed();
}else
{
printf("稍等...\n");
Sleep(2000);
system("cls");
break;
}
break;
}
}
}
system("cls");
}
void del()
{
int i,t;
int n,xh;
char mingzi[10];
printf("请选择您想要依照的方式进行删除:\n");
printf(" 1.姓名 2.学号\n");
scanf("%d",&n);
if(n==1)
{
printf("请选择您想要删除的学生名字:\n");
scanf("%s",mingzi);
for(i=0;i<number;i++)
{
if(strcmp(mingzi,stu[i].name)==0)
{
for(t=i;t<number-1;t++)
{
stu[t]=stu[t+1];
}
number--;
break;
}
}
}else if(n==2)
{
printf("请选择您想要删除的学生学号:\n");
scanf("%d",&xh);
for(i=0;i<number;i++)
{
if(xh==stu[i].nub)
{
for(t=i;t<number-1;t++)
{
stu[t]=stu[t+1];
}
number--;
break;
}
}
}
printf("(不论是否存在)删除成功!正在返回菜单......\n");
Sleep(2000);
system("cls");
}
void save()
{
system("cls");
FILE* fp;
int i;
if ((fp = fopen("score.txt", "w+b")) == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
for (i = 0; i < number; i++)
{
if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1)
printf("保存失败!\n");
}
printf("保存成功!\n");
fclose(fp);
system("pause");
system("cls");
}
void low()
{
system("cls");
int i,a;
printf("请选择要显示的科目或者总分:\n");
printf("#1.第一科\n#2.第二科\n#3.第三科\n#4.第四科\n#5.第五科\n#6.总分\n\n");
scanf("%d",&a);
switch(a){
case 1:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_1());
for(i=0;i<number;i++){
if(stu[i].one<pj_1()){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第一科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one);
}
}
break;
}
case 2:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_2());
for(i=0;i<number;i++){
if(stu[i].two<pj_2()){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第二科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].two);
}
}
break;
}
case 3:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_3());
for(i=0;i<number;i++){
if(stu[i].three<pj_3()){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第三科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].three);
}
}
break;
}
case 4:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_4());
for(i=0;i<number;i++){
if(stu[i].four<pj_4()){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第四科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].four);
}
}
break;
}
case 5:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_5());
for(i=0;i<number;i++){
if(stu[i].five<pj_5()){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第五科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].five);
}
}
break;
}
case 6:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分或高于90分:\n",banjipj());
for(i=0;i<number;i++){
if(stu[i].one<banjipj()){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 总分\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,sum(i));
}
}
break;
}
}
printf("是否继续查询?\n 1.继续 其他.返回菜单\n");
scanf("%d",&a);
if(a==1){
system("cls");
low();
return;
} else{
return;
system("pause");
system("cls");
}
}
void TopAndLow()
{
system("cls");
int i,a;
printf("请选择要显示的科目或者总分:\n");
printf("#1.第一科\n#2.第二科\n#3.第三科\n#4.第四科\n#5.第五科\n#6.总分\n\n");
scanf("%d",&a);
switch(a){
case 1:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_1);
for(i=0;i<number;i++){
if(stu[i].one<pj_1() || stu[i].one>=90){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第一科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one);
}
}
break;
}
case 2:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_2);
for(i=0;i<number;i++){
if(stu[i].two<pj_2() || stu[i].two>=90){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第二科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].two);
}
}
break;
}
case 3:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_3);
for(i=0;i<number;i++){
if(stu[i].three<pj_3() || stu[i].three>=90){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第三科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].three);
}
}
break;
}
case 4:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_4);
for(i=0;i<number;i++){
if(stu[i].four<pj_4() || stu[i].four>=90){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第四科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].four);
}
}
break;
}
case 5:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_5);
for(i=0;i<number;i++){
if(stu[i].five<pj_5() || stu[i].five>=90){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第五科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].five);
}
}
break;
}
case 6:{
printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",banjipj());
for(i=0;i<number;i++){
if(sum(i)<banjipj()){
printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 总分\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,sum(i));
}
}
break;
}
}
printf("是否继续查询?\n 1.继续 其他.返回菜单\n");
scanf("%d",&a);
if(a==1){
system("cls");
TopAndLow();
return;
} else{
return;
system("pause");
system("cls");
}
}
int main()
{
FILE* fp;
int i;
if ((fp = fopen("score.txt", "a+b")) == NULL)
{
printf("Open Error!\n");
exit(0);
}
for (i = 0; fread(&stu[i], sizeof(struct student), 1, fp) != 0; i++)
{
number++;
}
int n;
system("cls");
while (1) {
int flag = 0;
printf("— 欢迎使用成绩管理系统! —\n");
printf("——————————————\n");
printf("———— 1.成绩录入 ————\n");
printf("———— 2.成绩显示 ————\n");
printf("———— 3.成绩查找 ————\n");
printf("———— 4.成绩修改 ————\n");
printf("———— 5.成绩删除 ————\n");
printf("———— 6.成绩保存 ————\n");
printf("———— 7.显示低分 ————\n");
printf("———— 8.显示特例 ————\n");
printf("———— 9.退出程序 ————\n");
printf("——————————————\n");
printf("— 目前已经记录了%d位学生 —\n",number);
scanf("%d", &n);
switch (n)
{
case 1: {
enter();
break;
}
case 2: {
show();
break;
}
case 3: {
find();
break;
}
case 4: {
changed();
break;
}
case 5: {
del();
break;
}
case 6: {
save();
break;
}
case 7: {
low();
break;
}
case 8:{
TopAndLow();
break;
}
case 9:{
flag = 1;
break;
}
default: {
printf("请输入1~7的有效数字!\n");
break;
}
}
if (flag == 1) {
printf("谢谢使用!正在退出~\n");
break;
}
}
}
学生成绩管理系统
最新推荐文章于 2024-08-24 10:57:02 发布