La función general:
marco general y la función son otras funciones por sí mismos, ji, ji escisión.
entrada de vacío (estudiante struct Stu [] ); // Introducir
void enmendar (estudiante struct Stu [] ); // Modificar
void (Stu estudiante struct [] remove ); // Delete
void (Stu estudiante struct [] namefind ); / / consulta por su nombre
numfind vacío (Stu estudiante estructura [] ); // por el número de estudiante consulta
classfind vacío (Stu estudiante estructura [] ); // consulta por clase
printfsort1 vacío (Stu estudiante estructura [] ); // clasificación de puntuación total
printfsort2 vacío (estudiante estructura Stu [] ); // clasificación de sujetos individuales
vacío printfsort3 (Stu estudiante estructura [] ); // excelentes tasas de
vacío SaveFile (Stu estudiante estructura [] ); // guardar en un archivo
readfile vacío (Stu estudiante struct []); // archivo de importación
formato de archivo de importación es txt ejemplos de diseño de contenido:
17001018 廖 10 高数 91 英语 89
17001019 凌 10 高数 61 英语 59
17001020 刘 10 高数 98 英语 81
17001021 陆 10 高数 99 英语 99
17001022 达 11 高数 81 英语 89
17001118 蒙 11 高数 91 英语 69
17001119 梁 11 高数 71 英语 59
17001120 杜 11 高数 88 英语 93
17001121 黄 11 高数 69 英语 80
17001122 李 11 高数 91 英语 99
17001016 萧 10 高数 71 英语 69
17001027 冰 10 高数 98 英语 89
17001028 炎 10 高数 89 英语 90
17001037 杨 10 高数 28 英语 49
17001038 韩 10 高数 59 英语 60
17001021 飞 10 高数 89 英语 99
Código es el siguiente:
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h> //清屏 system("cls");
#include<string.h>
#define N 30
void input(struct student stu[]); //输入
void amend(struct student stu[]); //修改
void remove(struct student stu[]); //删除
void namefind(struct student stu[]);//按名字查询
void numfind(struct student stu[]);//按学号查询
void classfind(struct student stu[]);//按班级查询
void printfsort1(struct student stu[]); //总分排名
void printfsort2(struct student stu[]);//单科排名
void printfsort3(struct student stu[]);//优秀率
void savefile(struct student stu[]);//保存成文件
void readfile(struct student stu[]);//导入文件
int n = 1;
struct student
{
int num;
char name[20];
int Class;
char classname1[20];
int score1;
char classname2[20];
int score2;
int score;
};
int main()
{
while(1)
{
system("cls");
int a;
struct student stu[N],*p=stu;
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(" 【10】 导入学生信息文件\n");
printf(" 【11】 保存学生信息文件\n");
printf(" 【0】 退出系统\n");
printf("----------------------------------------------------\n");
printf(" 输入0到11选择系统功能\n");
scanf("%d",&a);
switch(a)
{
case 0: printf(" 退出系统成功!\n");system("pause");return 0;
case 1: input(p);
break;
case 2: amend(p);
break;
case 3: remove(p);
break;
case 4: namefind(p);
break;
case 5: numfind(p);
break;
case 6: classfind(p);
break;
case 7: printfsort1(p);
break;
case 8: printfsort2(p);
break;
case 9: printfsort3(p);
break;
case 10: readfile(p);
break;
case 11: savefile(p);
break;
default: printf(" 输入错误,请重新输入\n");system("pause");break;
}
}
return 0;
}
void input(struct student stu[])//OK
{
printf(" 输入添加学生信息的人数\n");
int b,c=0;
scanf("%d",&c);
for(int i=1;i<=c;i++)
{
printf(" 第%d个学生 输入:学号 名字 班级 课程名字1 成绩1 课程名字2 成绩2 \n",i);
scanf("%d%s%d%s%d%s%d",&stu[n].num,&stu[n].name,&stu[n].Class,&stu[n].classname1,&stu[n].score1,&stu[n].classname2,&stu[n].score2);
stu[n].score=stu[n].score1+stu[n].score2;
n++;
}
if(c!=0&&c>0)printf("\n添加成功!\n\n");
system("pause");
system("cls");
printf(" 输入0结束添加,输入1继续添加。\n");
scanf("%d",&b);
switch(b)
{
case 0: printf(" 结束添加成功!\n");
system("pause");
break;
case 1: input(stu);
break;
default: printf(" 输入错误,请重新输入\n");system("pause");
break;
}
}
void amend(struct student stu[]) //修改
{
int i,j,o,l,b;
char a[20];
printf(" 选择修改方式1.学号 2.姓名\n");
scanf("%d",&l);
switch(l)
{
case 1:
printf("输入修改学生的学号:\n");
scanf("%d",&b);
for(i=0;i<n;i++)
{
if(b==stu[i].num)
{
printf("学号:%d\n",stu[i].num);
printf("姓名:%s\n",stu[i].name);
printf("班级:%d\n",stu[i].Class);
printf("%s的成绩%d\n",stu[i].classname1,stu[i].score1);
printf("%s的成绩%d\n",stu[i].classname1,stu[i].score2);
printf("总成绩:%d\n\n",stu[i].score);
o=i;
break;
}
}
if(i==n) {printf("输入错误或查询学生不存在\n");system("pause"); return;}
break;
case 2:
printf("输入修改学生的名字:\n");
scanf("%s",&a); //通过输入需要修改信息的学号找到
for(i=0;i<=n;i++)
{
if(strcmp(a,stu[i].name)==0)
{
printf("学号:%d\n",stu[i].num);
printf("姓名:%s\n",stu[i].name);
printf("班级:%d\n",stu[i].Class);
printf("%s的成绩%d\n",stu[i].classname1,stu[i].score1);
printf("%s的成绩%d\n",stu[i].classname1,stu[i].score2);
printf("总成绩:%d\n\n",stu[i].score);
o=i;
break;
}
}
if(i==n) {printf("输入错误或查询学生不存在\n");system("pause"); return;}
break;
}
printf(" 输入0到9选择修改的内容\n");
printf("1.修改学号\n2.修改姓名\n3.修改班级\n4.修改成绩1\n5.修改成绩2\n6.修改总分\n请选择:");
scanf("%d",&j); //选择修改的信息
switch(j)
{
case 1:
printf("学号修改为:");
scanf("%d",&stu[o].num);
break;
case 2:
printf("姓名修改为:");
scanf("%s",&stu[o].name);
break;
case 3:
printf("班级修改为:");
scanf("%d",&stu[o].Class);
break;
case 4:
printf("成绩1修改为:");
scanf("%d",&stu[o].score1);
break;
case 5:
printf("成绩修改为:");
scanf("%d",&stu[o].score2);
break;
case 6:
printf("总分修改为:");
scanf("%d",&stu[o].score);
break;
}
printf("\n修改成功!\n\n");
system("pause");
system("cls");
}
void remove(struct student stu[]) //删除OK
{
char a[20];
printf("请输入要删除学生的姓名\n");
scanf("%s",&a);
for(int i=0;i<n;i++)
if(strcmp(a,stu[i].name)==0)
{
while(i<n)
{
stu[i]=stu[i+1];
i++;
}
n--;
}
printf("\n删除成功!\n\n");
system("pause");
system("cls");
}
void namefind(struct student stu[]) // ok
{
char a[20];
printf("输入需要查询的姓名:\n");
scanf("%s",&a);
for(int i=0;i<=n;i++)
{
if(strcmp(a,stu[i].name)==0)
{
printf("学号:%d\n",stu[i].num);
printf("姓名:%s\n",stu[i].name);
printf("班级:%d\n",stu[i].Class);
printf("%s的成绩%d\n",stu[i].classname1,stu[i].score1);
printf("%s的成绩%d\n",stu[i].classname1,stu[i].score2);
printf("总成绩:%d\n\n",stu[i].score);
break;
}
if(i==n) printf("输入错误或查询学生不存在\n");
}
system("pause");
system("cls");
}
void numfind(struct student stu[])
{
int a;
printf("输入需要查询的学号:\n");
scanf("%d",&a);
for(int i=0;i<n;i++)
{
if(a==stu[i].num)
{
printf("学号:%d\n",stu[i].num);
printf("姓名:%s\n",stu[i].name);
printf("班级:%d\n",stu[i].Class);
printf("%s的成绩%d\n",stu[i].classname1,stu[i].score1);
printf("%s的成绩%d\n",stu[i].classname1,stu[i].score2);
printf("总成绩:%d\n\n",stu[i].score);
break;
}
if(i==n) printf("输入错误或查询学生不存在\n");
}
system("pause");
system("cls");
}
void classfind(struct student stu[]) //OK
{
int a,b;
printf("输入需要查询的班级:\n");
scanf("%d",&a);
for(int i=0;i<n;i++)
{
if(a==stu[i].Class)
{
printf("%d.姓名:%s 学号:%d\n",i,stu[i].name,stu[i].num);
}
}
printf("输入要查看学生前的序号\n");
scanf("%d",&b);
if(stu[b].num>0)
{
printf("学号:%d\n",stu[b].num);
printf("姓名:%s\n",stu[b].name);
printf("班级:%d\n",stu[b].Class);
printf("%s的成绩%d\n",stu[b].classname1,stu[b].score1);
printf("%s的成绩%d\n",stu[b].classname1,stu[b].score2);
printf("总成绩:%d\n\n",stu[b].score);
}
else printf("输入错误或查询学生不存在\n");
system("pause");
system("cls");
}
void printfsort1(struct student stu[]) //总分排名OK
{
struct student t;
int i,j;
printf(" %d 个学生总分排名:\n",n-1);
for(i=1;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(stu[i].score<=stu[j].score)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
}
}
printf("排名\t学号\t\t名字\t班级\t总分\n");
for(i=1;i<n;i++)
{
printf(" %d\t%d\t%s\t%d\t%d\n",i,stu[i].num,stu[i].name,stu[i].Class,stu[i].score);
}
system("pause");
system("cls");
}
void printfsort2(struct student stu[])//单科排名
{
struct student t;
int i,j,a;
printf("选择要查看的科目排名:1.%s 2.%s\n",stu[n-1].classname1,stu[n-1].classname2);
scanf("%d",&a);
switch(a)
{
case 1:
printf(" %d 个学生排名:\n",n-1);
for(i=1;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(stu[i].score1<=stu[j].score1)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
}
}
printf("排名\t学号\t\t名字\t班级\t%s分数\n",stu[n-1].classname1);
for(i=1;i<n;i++)
{
printf(" %d\t%d\t%s\t%d\t%d\n",i,stu[i].num,stu[i].name,stu[i].Class,stu[i].score1);
} break;
case 2:
printf(" %d 个学生排名:\n",n);
for(i=1;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(stu[i].score2<=stu[j].score2)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
}
}
printf("排名\t学号\t名字\t班级\t%s分数\n",stu[n-1].classname2);
for(i=1;i<n;i++)
{
printf(" %d\t%d\t%s\t%d\t%d\n",i,stu[i].num,stu[i].name,stu[i].Class,stu[i].score2);
} break;
}
system("pause");
system("cls");
}
void printfsort3(struct student stu[])//优秀率OK
{
int count1=0,count2=0;
float s;
int i,j,a;
printf("选择要查看的优秀率:1.班级 2.年级\n");
scanf("%d",&a);
switch(a)
{
case 1:
printf("输入需要查看的班级:\n");
scanf("%d",&j);
printf("\t%d班优秀学生名单:\n",j);
printf("\t学号\t\t名字\t班级\t总分\n");
for(i=1;i<n;i++)
{
if(stu[i].Class==j) count2++;
if(stu[i].score>=180&&stu[i].Class==j)
{
printf("\t%d\t%s\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].Class,stu[i].score);
count1++;
}
}
if(count2==0) printf("没有达到优秀的学生\n");
else
{
s=(float)count1/count2;
printf("%d班优秀率为:%f\n\n",j,s);
}
count1=count2=0;
printf("\t%d班不及格学生名单:\n",j);
printf("\t学号\t\t名字\t班级\t总分\n");
for(i=1;i<n;i++)
{
if(stu[i].Class==j) count2++;
if(stu[i].score<120&&stu[i].Class==j)
{
printf("\t%d\t%s\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].Class,stu[i].score);
count1++;
}
}
if(count2==0) printf("没有不及格的学生\n");
else
{
s=(float)count1/count2;
printf("%d班不及格率为:%f\n",j,s);
}
break;
case 2:
printf("\t年级优秀学生名单:\n");
printf("\t学号\t\t名字\t班级\t总分\n");
for(i=1;i<n;i++)
{
if(stu[i].score>=180)
{
printf("\t%d\t%s\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].Class,stu[i].score);
count1++;
}
}
if(count1==0) printf("没有达到优秀的学生\n");
s=(float)count1/(n-1);
printf("年级优秀率为:%f\n\n",s);
count1=count2=0;
printf("\t年级不及格学生名单:\n");
printf("\t学号\t\t名字\t班级\t总分\n");
for(i=1;i<n;i++)
{
if(stu[i].score<120)
{
printf("\t%d\t%s\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].Class,stu[i].score);
count1++;
}
}
if(count1==0) printf("没有不及格的学生\n");
else
{
s=(float)count1/(n-1);
printf("年级不及格率为:%f\n",s);
}
break;
}
system("pause");
system("cls");
}
void readfile(struct student stu[])
{
int i =1,j=n;
char file[200];
FILE *fp;
printf("输入需要导入的文件位置和文件名:\n");
scanf("%s",&file);
//char file[200]="C:\\Users\\23607\\Desktop\\c.txt";
if((fp=fopen(file,"r"))==NULL) {printf("输入错误或者文件无法打开\n"); system("pause"); return;}
while(!feof(fp)) //读取一组数据后指针指向下一组数据,并且判断是否指向最后一行
{
fscanf(fp,"%d%s%d%s%d%s%d",&stu[n].num,&stu[n].name,&stu[n].Class,&stu[n].classname1,&stu[n].score1,&stu[n].classname2,&stu[n].score2);
n++;
}
n--;
printf("以下学生已导入!\n");
for(i=j;i<n;i++)
{
printf("学号:%d\t",stu[i].num);
printf("姓名:%s\t",stu[i].name);
printf("班级:%d\t",stu[i].Class);
printf("%s的",stu[i].classname1);
printf("成绩:%d\t",stu[i].score1);
printf("%s的",stu[i].classname2);
printf("成绩:%d\t",stu[i].score2);
stu[i].score=stu[i].score1+stu[i].score2;
printf("总成绩:%d\t",stu[i].score);
printf("\n");
}
fclose(fp);
system("pause");
system("cls");
}
void savefile(struct student stu[])
{
int i =1;
char file[200];
FILE *fp;
printf("输入需要保存的文件位置和文件名:\n");
scanf("%s",&file);
//char file[200]="C:\Users\23607\Desktop\c.txt";
if((fp=fopen(file,"w"))==NULL) {printf("输入错误或者文件无法打开\n"); system("pause"); return;}
// for (i=1;i<n;i++) fwrite(&stu[i],sizeof(struct student),sizeof(struct student),fp);
for (i=1;i<n;i++)
{
fprintf(fp,"%d %s %d %s %d %s %d\n",stu[i].num,stu[i].name,stu[i].Class,stu[i].classname1,stu[i].score1,stu[i].classname2,stu[i].score2);
}
printf("以下学生已保存到位置为%s的文件!\n",file);
for(i=1;i<n;i++)
{
printf("学号:%d\t",stu[i].num);
printf("姓名:%s\t",stu[i].name);
printf("班级:%d\t",stu[i].Class);
printf("%s的",stu[i].classname1);
printf("成绩:%d\t",stu[i].score1);
printf("%s的",stu[i].classname2);
printf("成绩:%d\t",stu[i].score2);
stu[i].score=stu[i].score1+stu[i].score2;
printf("总成绩:%d\t",stu[i].score);
printf("\n");
}
fclose(fp);
system("pause");
system("cls");
}
cangrejo ~