学生成绩管理系统


#include<stdio.h>

#include<string>
double  maxeng=0;              //英语最高分
double  maxmath=0;            //数学最高分
double  maxchinese=0;            //语文最高分
int  engnopasscount=0;         //英语不及格人数
int  mathnopasscount=0;        //数学不及格人数
int  chinesenopasscount=0;          //语文不及格人数
struct Student
{ char ID[20];
char Name[20];
float Math;
float Chinease;
float English;
float Average;
}stu[1000];
int num=0;
float Avr(struct Student stu)
{
return (stu.Chinease+stu.English+stu.Math)/3;
}
/* 添加学生信息*/ 
void Student_Add()
{ int t;
do 
{printf("请输入学生学号\n");
scanf("%s",&stu[num].ID);
for(t=0;t<num;t++)
if(strcmp(stu[t].ID,stu[num].ID)==0)
{printf("已有此学生,输入失败\n");
return;} 
getchar();
printf("请输入学生姓名\n");
scanf("%s",&stu[num].Name);
getchar();
printf("请输入学生数学成绩\n");
scanf("%f",&stu[num].Math);
getchar();
printf("请输入学生语文成绩\n");
scanf("%f",&stu[num].Chinease);
getchar();
printf("请输入学生英语成绩\n");
scanf("%f",&stu[num].English);
getchar();
stu[num].Average=Avr(stu[num]);
num++;
 
puts("continue?(y/n)");  
}while(getchar()=='y');

}
/*学生单人成绩信息*/ 
void Student_Information(int index)
{ printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","数学成绩","语文成绩","英语成绩","平均成绩");
printf("--------------------------\n");
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",stu[index].ID,stu[index].Name,stu[index].Math,stu[index].Chinease,stu[index].English,stu[index].Average);
}
/*通过学号返回数组下标*/
int Student_SearchByIndex(char id[])
{
int i;
for(i=0;i<=num;i++)
{
if (strcmp(stu[i].ID,id)==0)
         {
              return i;
         }
     }
     return -1;


}
/*通过名字返回数组下标*/
int Student_SearchByName(char name[])
{
     int i;
     for (i=0;i<num;i++)
     {
         if (strcmp(stu[i].Name,name)==0)
         {
              return i;
         }
     }
     return -1;
}
/*修改学生信息*/
void Student_Modify(void)
{ do
{int index;
char id[20];
printf("请输入要修改的学生的学号");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id);
if(index==-1)
printf("没有这个学生\n");
else
{ printf("这个学生的信息\n");
 Student_Information(index);
 printf("-------请输入新值--------\n");
 printf("请输入学生学号\n");
scanf("%s",&stu[index].ID);
getchar();
printf("请输入学生姓名\n");
scanf("%s",&stu[index].Name);
getchar();
printf("请输入学生数学成绩\n");
scanf("%f",&stu[index].Math);
getchar(); 
printf("请输入学生语文成绩\n");
scanf("%f",&stu[index].Chinease);
getchar();
printf("请输入学生英语成绩\n");
scanf("%f",&stu[index].English);
getchar();
stu[index].Average=Avr(stu[index]);
}
puts("continue?(y/n)");  
}while(getchar()=='y');
}
/*删除学生信息*/
void Student_Delete()
{
     int i;
     do
     {
         char id[20];
         int index;
         printf("请输入要删除的学生的学号:");
         scanf("%s",&id);
         getchar();
         index=Student_SearchByIndex(id);
         if (index==-1)
         {
              printf("学生不存在!/n");
         }
         else
         {
              printf("你要删除的学生信息为:\n");
              Student_Information(index);
              printf("是否真的要删除?(y/n)");
              if (getchar()=='y')
              {
                   for (i=index;i<num;i++)
                   {
                       stu[i]=stu[i+1];
                   }
                   num--;
              }
              getchar();
         }
       puts("continue?(y/n)");  
}while(getchar()=='y');
}
//插入学生信息 
void Student_Insert(void)
{
 do
 {int snum,i;
 printf("请输入您想放入的位置:");
 scanf("%d",&snum);
 for(i=snum-1;i<=num;i++)
 { stu[i+1]=stu[i];
 }
  printf("请输入学生学号\n");
scanf("%s",&stu[snum].ID);
getchar();
printf("请输入学生姓名\n");
scanf("%s",&stu[snum].Name);
getchar();
printf("请输入学生数学成绩\n");
scanf("%f",&stu[snum].Math);
getchar();
printf("请输入学生语文成绩\n");
scanf("%f",&stu[snum].Chinease);
getchar();
printf("请输入学生英语成绩\n");
scanf("%f",&stu[snum].English);
getchar();
stu[snum].Average=Avr(stu[snum]);
puts("continue?(y/n)");  
}while(getchar()=='y');

/*通过姓名查找学生信息*/ 
void Student_Select(void)
{
     do
     {
         char name[20];
         int index;
         printf("请输入要查询的学生的姓名:");
         scanf("%s",&name);
         getchar();
         index=Student_SearchByName(name);
         if (index==-1)
         {
              printf("学生不存在!/n");
         }
         else
         {
              printf("你要查询的学生信息为:/n");
              Student_Information(index);
         }
         puts("continue?(y/n)");  
}while(getchar()=='y');
}


/*按平均值排序*/
void Student_SortByAverage(void)
{int i,j;
struct Student t;
for(i=0;i<=num;i++)
for(j=i+1;j<=num;j++)
if(stu[i].Average<stu[j].Average) 
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
}
/*输出所有学生的成绩*/
void Student_GradeOutput(void)
{ int i;
printf("%10s%10s\t%8s\t%8s\t%8s\t%10s\n","学号","姓名","数学成绩","语文成绩","英语成绩","平均成绩");
printf("--------------------------\n");
for(i=0;i<num;i++)
printf("%10s%10s\t%8.2f\t%8.2f\t%8.2f\t%10.2f\n",stu[i].ID,stu[i].Name,stu[i].Math,stu[i].Chinease,stu[i].English,stu[i].Average);
}
void scoremax(int i)
{if(stu[i].Math>maxmath) maxmath=stu[i].Math;
 if(stu[i].Chinease>maxchinese) maxchinese=stu[i].Chinease;
 if(stu[i].English>maxeng) maxeng=stu[i].English;
}


void  scoremaxandnopasscount()
{int i;
for(i=0;i<num;i++)
{if(stu[i].Math<60) mathnopasscount++;
if(stu[i].English<60) engnopasscount++;
if(stu[i].Chinease<60) chinesenopasscount++;
scoremax(i);
}
printf("数学挂科人数:%d\t英语挂科人数:%d\t语文挂科人数:%d\n",mathnopasscount,engnopasscount,chinesenopasscount);
printf("各科最高成绩\n数学:%f\n英语:%f\n语文:%f\n",maxmath,maxeng,maxchinese);
}


void IO_ReadInfo() 
{
     FILE *fp;
     int i;
     if ((fp=fopen("Database.txt","r"))==NULL) 
     { 
         printf("不能打开文件!\n"); 
         return; 
     } 
     if (fread(&num,sizeof(int),1,fp)!=1) 
     { 
         return;
     } 
     else 
     { 
         for(i=0;i<num;i++)
         { 
              fread(&stu[i],sizeof(struct Student),1,fp);
         } 
     } 
     fclose(fp);
}
 
  
/*将学生信息写入文件*/
 
void IO_WriteInfo()
{
     FILE *fp;
     int i;
     if ((fp=fopen("Database.txt","w"))==NULL)
     {
         printf("不能打开文件!\n");
         return;
     }
     if (fwrite(&num,sizeof(int),1,fp)!=1)
     {
         printf("写入文件错误!\n");
     }
     for (i=0;i<num;i++)
     { 
         if (fwrite(&stu[i],sizeof(struct Student),1,fp)!=1) 
         { 
              printf("写入文件错误!\n"); 
         } 
     }     
     fclose(fp); 
}






main()
{ int choice;
IO_ReadInfo();
     while(1)
     {
         /*主菜单*/
         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("请选择(1-9):");
         scanf("%d",&choice);
         getchar();
         switch(choice)
         {
         case 1:
              Student_Add();
              break;
         case 2:
              Student_Modify();
              break;
         case 3:
              Student_Delete();
              break;
         case 4:
              Student_Insert();
              break;
         case 5:Student_Select();
              break;
         case 6: Student_SortByAverage();
              Student_GradeOutput();
              break;   
         case 7:Student_GradeOutput();break;
case 8: scoremaxandnopasscount();break; 
         case 9: return 0;break;
         default: printf("请输入规定范围内的数字\n");break;
         }
         IO_WriteInfo(); 
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值