📄 学生成绩管理.cpp
字号:
for(i=0;i<h;i++)
{
if(strcmp(stu[i].num,temp.num)==0)
{
printf("学号已存在,请重新输入!\n");
s=1;
break;
}
}
if(s==1)continue;
if(s==0)break;
}
printf("姓名(中文):");
scanf("%s",temp.name);
while(1)
{
printf("性别(1.男 2.女):");
scanf("%s",l);
if(strlen(l)>1)
{
printf("输入不合法,请重新输入!\n");
continue;
}
if(l[0]!='1'&&l[0]!='2')
{
printf("输入不合法,请重新输入!\n");
continue;
}
else if(l[0]=='1')
{
strcpy(temp.sex,"男");
break;
}
else if(l[0]=='2')
{
strcpy(temp.sex,"女");
break;
}
}
temp.total=0;
for(j=0;j<M;j++)
{
while(1)
{
printf("分数%d(0-100):",j+1);
scanf("%f",&temp.score[j]);
if(temp.score[j]>100||temp.score[j]<0)
printf("输入不合法,请重新输入!\n");
else
break;
}
temp.total+=temp.score[j];
}
temp.average=float(temp.total/M);
stu[k]=temp;
fwrite(&stu[k],sizeof(struct student),1,fp); //将修改的资料写入文件
fclose(fp);
fp=fopen(name,"wb"); //打开可写文件将资料重新写一遍
for(i=0;i<h;i++)
fwrite(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
printf(" *************************************************** \n\n");
printf(" 已成功修改了一名学生资料! \n\n");
printf(" *************************************************** \n\n");
printf("\t是否要继续修改另一个学生?(y/n):\t");
while(1) //继续修改的操作
{
scanf("%s",m); //判断输入的正确性
if(strlen(m)>1)
{
printf("输入不合法,请重新输入(y/n):\t");
continue;
}
if(m[0]=='y')
break;
else if(m[0]=='n')
go_on();
else
{
printf("输入不合法,请重新输入(y/n):\t");
continue;
}
}
}
}//
/////////////////////////////////////////////////////////////////////////
//
void del() //单个资料删除
{
int m,n,flag=0,flg=0;
char nu[11],b[1],l[1];
printf("\n\t\t请输入所要删除的学生所在班级:");
while(1) //输入文件名并判断是否存在
{
scanf("%s",name);
if((fp=fopen(name,"rb"))==NULL)
{
printf("不存在你所输入的班级,请重新输入:");
continue;
}
else
break;
}
while(1)
{
system("cls"); //清屏后显示所有资料
show2();
n=i;
printf("\n请在上面资料里面选择你要删除的学生的学号:");
while(1)
{
scanf("%s",nu); //选择输入的学生学号并进行判断
if(strlen(nu)!=10)
{
printf("输入不合法,请重新输入:");
continue;
}
else
break;
}
for(i=0;i<n;i++) //循环查找匹配资料并显示
{
if(strcmp(nu,stu[i].num)==0)
{
printf("\n你所要删除的学生资料如下:\n\n");
printf(" 学号 姓名 性别 英语 高数 线数 毛论 物理 体育 法律 电路 总分 平均 名次\n");
printf("\n%s%7s %2s",stu[i].num,stu[i].name,stu[i].sex);
for(j=0;j<M;j++)
printf(" %3.1f",stu[i].score[j]);
printf(" %3.1f",stu[i].total);
printf(" %3.1f",stu[i].average);
printf(" %d\n\n",i+1);
flg=1;
}
}
if(flg==0)
{
printf("\n\t\t\t 不存在该学生的资料!\n");
go_on();
}
printf("\t\t是否删除?(y/n)"); //确认是否删除
while(1)
{
scanf("%s",l); //判断输入的合法性
if(strlen(l)>1)
{
printf("\n\t输入不合法,请重新输入!(y/n)");
continue;
}
if(l[0]=='y') //删除资料
{
for(flag=1,i=0;flag&&i<n;i++)
{
if(strcmp(nu,stu[i].num)==0)
{
for(m=i;m<n-1;m++)
{
strcpy(stu[m].num,stu[m+1].num);
strcpy(stu[m].name,stu[m+1].name);
strcpy(stu[m].sex,stu[m+1].sex);
for(j=0;j<M;j++)
stu[m].score[j]=stu[m+1].score[j];
stu[m].total=stu[m+1].total;
stu[m].average=stu[m+1].average;
}
flag=0;
}
}
if(!flag)
n=n-1;
else //不存在资料
{
printf("\n\t\t\t 不存在该学生的资料!\n");
go_on();
}
system("cls"); //删除后显示新的资料
printf(" *************************************************** \n\n");
printf(" 已成功删除一名学生资料! \n\n");
printf(" *************************************************** \n\n");
printf("下面是新的%s的资料:\n\n",name);
fp=fopen(name,"wb");
for(i=0;i<n;i++)
fwrite(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
fp=fopen(name,"rb");
printf(" 学号 姓名 性别 英语 高数 线数 毛论 物理 体育 法律 电路 总分 平均 名次\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
{
printf("\n%s%7s %2s",stu[i].num,stu[i].name,stu[i].sex);
for(j=0;j<M;j++)
printf(" %3.1f",stu[i].score[j]);
printf(" %3.1f",stu[i].total);
printf(" %3.1f",stu[i].average);
printf(" %d\n",i+1);
}
fclose(fp); //关闭指针退出
break;
}
else if(l[0]=='n') //不删除退出
{
printf("\n\t\t该学生资料仍被保留!");
break;
}
else //输入不合法重新输入
printf("\n\t输入不合法,请重新输入!(y/n)");
}
printf("\n\n\t是否要继续进行删除本班的学生资料?(y/n):\t");
while(1) //显示是否继续删除并判断输入合法性
{
scanf("%s",b);
if(strlen(b)>1)
{
printf("输入不合法,请重新输入(y/n):\t");
continue;
}
if(b[0]=='y')
break;
else if(b[0]=='n')
go_on();
else
{
printf("输入不合法,请重新输入(y/n):\t");
continue;
}
}
}
}//
///////////////////////////////////////////////////////////////////////////
//
void del2() //整个资料删除
{
char mingzi[12];
printf("\n\t请输入要删除的班级(如:04计算机1班):");
scanf("%s",name); //输入文件名并判断是否存在
if((fp=fopen(name,"rb"))==NULL)
{
printf("\n\t不存在你所输入的班级的资料!");
go_on();
}
else
{ //删除整个资料
strcpy(mingzi,name);
fclose(fp);
remove(name);
printf(" *************************************************** \n\n");
printf(" 已成功删除的%s全部学生资料! \n\n",mingzi);
printf(" *************************************************** \n\n");
go_on();
}
}//
/////////////////////////////////////////////////////////////////////////////
//
void statist() //资料统计
{
int h=0,c[8];
float high[8],low[8],ave[8],sum[8];
for(j=0;j<M;j++) //对每个分数不及格的人数先初始化
c[j]=0;
printf("\n\t\t请输入要统计的班级:");
while(1) //输入文件并进行判断是否存在
{
scanf("%s",name);
if((fp=fopen(name,"rb"))==NULL)
{
printf("\n\t不存在你所输入的班级,请重新输入:");
continue;
}
else
break;
}
for(i=0;i<N;i++) //先逐个读取资料
if(fread(&stu[i],sizeof(struct student),1,fp)==1)
++h; //计数器
for(j=0;j<M;j++) //求各科的平均分
{
sum[j]=0;
for(i=0;i<h;i++)
sum[j]+=stu[i].score[j];
ave[j]=sum[j]/h;
}
for(j=0;j<M;j++) //求各科的最高分
{
high[j]=0;
for(i=0;i<h;i++)
if(stu[i].score[j]>high[j])
high[j]=stu[i].score[j];
}
for(j=0;j<M;j++) //求各科的最低分
{
low[j]=100;
for(i=0;i<h;i++)
if(stu[i].score[j]<low[j])
low[j]=stu[i].score[j];
}
for(j=0;j<M;j++) //求不及格人数
for(i=0;i<h;i++)
if(stu[i].score[j]<60)
++c[j];
printf("\n\t\t目前%s有资料%d人!\n\n",name,h); //显示结果
printf("\t 课程名称\t\t平均分\t\t最高分\t\t最低分\t\t不及格人数\n");
printf("\t1大学英语(2)\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[0],high[0],low[0],c[0]);
printf("\t2高等数学(下)\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[1],high[1],low[1],c[1]);
printf("\t3线性代数\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[2],high[2],low[2],c[2]);
printf("\t4毛泽东思想概论\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[3],high[3],low[3],c[3]);
printf("\t5大学物理-a\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[4],high[4],low[4],c[4]);
printf("\t6大学体育(2)\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[5],high[5],low[5],c[5]);
printf("\t7法律基础\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[6],high[6],low[6],c[6]);
printf("\t8电路与电子技术\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[7],high[7],low[7],c[7]);
fclose(fp); //关闭指针
go_on(); //显示是否继续函数
}//
///////////////////////////////////////////////////////////////////////////////////
//
void imformation() //作者信息
{
system("cls"); //清屏后显示
printf("\n\n\n\n\n\n\t\t\t\t应用程序名:学生成绩管理成绩\n");
printf("\n\t\t\t\t作者姓名: 范创海\n");
printf("\n\t\t\t\t所在学校: 广州大学\n");
printf("\n\t\t\t\t所在院系: 信息与机电工程学院计算机系\n");
printf("\n\t\t\t\t所在班级: 04计算机6班\n");
printf("\n\t\t\t\tQQ 号码 : 67943505\n");
printf("\n\t\t\t\t生成日期: 2005年12月1日\n");
printf("\n\t\t\t\t----------------------------------\n");
printf("\n\t\t\t\t\t版权所有 不得盗版\n");
printf("\n\t\t\t\t----------------------------------\n");
printf("\n\n");
go_on(); //调用是否继续函数
}
///////////////////////////////////////////////////////////////////////////////////
//
void menu() //主界面菜单
{
char t[1];
void operate();
printf(" ******************** *********************\n");
printf(" 欢迎进入 \n\n");
printf(" 学生成绩管理系统 \n");
printf(" ******************** *********************\n\n");
printf("广州大学信息与机电工程学院04计算机系\n");
printf(" 第一学年第二学期成绩\n\n");
printf("本学期所修科目如下:\n\n");
printf(" 1大学英语(2) 2高等数学(下) 3线性代数 4毛泽东思想概论\n");
printf(" 5大学物理-a 6大学体育(2) 7法律基础 8电路与电子技术\n\n");
printf(" * 1.资料显示 \n");
printf(" * * \n");
printf(" * * 2.资料输入 \n");
printf(" * * \n");
printf(" * * 3.资料操作 \n");
printf(" * * \n");
printf(" * * 4.资料备份 6.关于作者\n");
printf(" * * \n");
printf(" * 5.资料删除 0.退出\n\n");
printf("------------------请在上面选择你所需要的操作:");
while(1)
{
scanf("%s",t); //输入操作并进行判断
if(strlen(t)>1)
{
printf("------------------输入不合法,请重新输入:");
continue;
}
switch(t[0]) //对输入的操作进行判断找匹配的函数
{
case '1' :show();break;
case '2' :getin();break;
case '3' :operate();break;
case '4' :copy();break;
case '5' :del2();break;
case '6' :imformation();break;
case '0' :exit1();break;
default:printf("------------------输入不合法,请重新输入(0-4):");
}
}
}//
//////////////////////////////////////////////////////////////////////////////
//
void operate() //操作菜单
{
char t[1];
system("cls"); //清屏后显示操作菜单
printf(" *************************************************** \n\n");
printf(" 1.资料增加 2.资料删除 \n\n");
printf(" 3.资料查询 4.资料修改 \n\n");
printf(" 5.资料存储 6.资料统计 \n\n");
printf(" 7.资料排序 8.返回主界面 \n\n");
printf(" 0.退出 \n\n");
printf(" *************************************************** \n\n");
printf("请在上面选择你所需要的资料操作命令:");
while(1) //输入操作并进行判断
{
scanf("%s",t);
if(strlen(t)>1)
{
printf("-------------输入不合法,请重新输入:");
continue;
}
switch(t[0]) //对输入的操作进行判断找匹配的函数
{
case '1' :add();break;
case '2' :del();break;
case '3' :find();break;
case '4' :modify();break;
case '5' :save2();break;
case '6' :statist();break;
case '7' :arrange();break;
case '8' :system("cls");menu();break;
case '0' :exit1();break;
default:printf("------输入不合法,请重新输入!(0-8):");
}
}
}//
/////////////////////////////////////////////////////////////////////
//
int main(int argc, char* argv[]) //主函数,调用主菜单
{
menu();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -