学生成绩管理系统C语言

**

学生成绩管理系统C语言

代码:

#include <stdio.h>
#include<string.h>
#include<stdlib.h>

/*主程序*/
void main()
{
     int i;
     ReadIn();
     system("color F0");
     while(1)
     {
         /*主菜单*/
         printf("-----------------欢迎使用成绩管理系统----------------\n");
         printf("*****************************************************\n");
         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("*****************************************************\n");
         printf("请输入数字:\n");
         judge:
         scanf("%d",&i);
         switch(i)
         {
         case 1:
              add();    //添加学生信息
              break;
         case 2:
              Change();     //修改学生信息
              break;
         case 3:
              Delete();     //删除学生信息
              break;
         case 4:
              Find();     //按姓名查找学生信息
              break;
         case 5:
              Find2();       //按学号查找学生信息
         case 6:
              paixu();      //按总成绩排序
              break;
         case 7:
              Display();        //显示学生信息
              break;
         case 8:
              Exit();
              break;
         default:
            printf("输入错误,请重新输入!\n");
            goto judge;
         }
         WriteIn();
     }
}

void  Exit()
{
    printf("-----------------------感谢使用----------------------\n\n\n\n\n----按任意键退出----\n");
    exit(0);
}

                                                         /*定义结构体*/

struct Student

{
     char ID[20];
     char Name[20];
     float Math;
     float English;
     float PE;
     float sum;
};

                                                    /*声明学生数组及学生数量*/

struct Student students[1000];
int num=0;//刚开始的学生数目为0

                                                            /*求总成绩*/
float Sum(struct Student stu)
{
     return (stu.Math+stu.English+stu.PE);//返回总成绩
}



                                                        /*通过姓名返回数组下标*/
int Byname(char name[])
{
     int a;
     for (a=0;a<num;a++)
     {
         if (strcmp(students[a].Name,name)==0)   //通过在结构体里面查找学生的姓名,然后返回此学生在数组里的位置
         {
              return a;
         }
     }
     return -1;//不存在这名学生
}




                                                                /*通过学号返回数组下标*/
int Byindex(char id[])
{
     int b;
     for (b=0;b<num;b++)
     {
         if (strcmp(students[b].ID,id)==0)  //通过在结构体里面查找学生的学号,然后返回此学生在数组里的位置
         {
              return b;
         }
     }
     return -1;//不存在这名学生
}



                                                            /*显示一个学生的成绩*/
void DisplaySingle(int index)
{
     printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","   高数成绩 ","  英语成绩 ","  体育成绩 ","总成绩");
     printf("------------------------------------------------------------------\n");
     printf("%10s%10s%10.2f%10.2f%12.2f%12.2f\n",students[index].ID,students[index].Name,
              students[index].Math,students[index].English,students[index].PE,students[index].sum);
}


                                                            /*添加学生信息*/
void add()
{
    system("cls");   //清屏
    int n,i=0;
    printf("请输入增加的人数:\n");
         scanf("%d",&n);
     while(n>i)
     {
         printf("请输入第%d名同学的信息:\n",i+1);
         printf("请输入学号:");
         scanf("%s",&students[num].ID);
         //getchar();
         printf("请输入姓名:");
         scanf("%s",&students[num].Name);
         //getchar();
         printf("请输入高数成绩:");
         scanf("%f",&students[num].Math);
         //getchar();
         printf("请输入英语成绩:");
         scanf("%f",&students[num].English);
         //getchar();
         printf("请输入体育成绩:");
         scanf("%f",&students[num].PE);
         printf("---------录入成功!--------\n\n");
         //getchar();
         students[num].sum=Sum(students[num]);//求出录入学生的总成绩
         num++;
         i++;

     }
        printf("按任意键返回\n");
        getch();                        //随便按下一个字符,函数返回主界面
        system("cls");
}



                                                    /*修改学生信息*/
void Change()
{
     //float Math,English,PE;
     system("cls");
     while(1)           //进行永真循环
     {
         char id[20];
         int index;
         Display();//展示出所有的学生的信息
         printf("请输入要修改学生的学号:");
         scanf("%s",&id);
         //getchar();
         index=Byindex(id);//通过数组下标查找是否有这名学生
         if (index==-1)
         {
              printf("学生不存在!\n");
         }
         if(index!=-1)
         {
              system("cls");
              printf("你要修改的学生信息为:\n\n\n\n\n");
              DisplaySingle(index);             //显示要修改学生的信息
              printf("\n\n\n");
              printf("------------ 请输入新值-------------\n");
              printf("请输入学号:\n");
              scanf("%s",&students[index].ID);
              //getchar();
              printf("请输入姓名:\n");
              scanf("%s",&students[index].Name);
              //getchar();
              printf("请输入高数成绩:\n");
              scanf("%f",&students[index].Math);
              //getchar();
              printf("请输入英语成绩:\n");
              scanf("%f",&students[index].English);
              //getchar();
              printf("请输入体育成绩:\n");
              scanf("%f",&students[index].PE);
              //getchar();
              students[index].sum=Sum(students[index]);
              printf("--------修改成功!----------\n");
         printf("是否继续修改学生信息?(y/n)\n");
         getchar();
         if (getchar()=='n')
         {
              system("cls");
              break;
         }
         }
     }
}



                                                /*删除学生信息*/
void Delete()
{
     system("cls");
     int i;
     while(1)
     {
         Display();
         char id[20];
         int index;
         printf("请输入要删除的学生的学号:");
         scanf("%s",&id);
         index=Byindex(id);//通过数组下标查找是否有这名学生
         if (index==-1)
         {
              printf("学生不存在!\n");
         }
         if(index!=-1)
         {
              system("cls");
              printf("你要删除的学生信息为:\n\n\n\n");
              DisplaySingle(index);
              printf("是否真的要删除?(y/n)\n");
              getchar();
              if (getchar()=='y')
              {
                   for (i=index;i<num-1;i++)
                   {
                       students[i]=students[i+1];//把后边的对象都向前移动
                   }
                   num--;
                   printf("---------删除成功!------------\n\n\n\n");
              }
         printf("是否继续操作?(y/n)\n");
         getchar();
         if (getchar()=='n')
         {
              system("cls");
              break;
         }
        }
     }
}


                                                                /*按姓名查询*/
void Find()
{
     while(1)
     {

         char name[20];
         int index;
         system("cls");
         printf("请输入要查询学生的姓名:");
         scanf("%s",&name);
         index=Byname(name);
         if (index==-1)
         {
              printf("不存在%s同学的信息\n",name);
         }
         if(index!=-1)
         {
              printf("%s的信息为:\n",name);
              DisplaySingle(index);
         }
         printf("是否继续查询操作?(y/n)");
         getchar();
         if (getchar()=='n')
         {
              system("cls");
              break;
         }
     }
}


                                                        /*按学号查询*/
void Find2()
{

     while(1)
     {
         char num[20];
         int index;
         printf("请输入要查询学生的学号:");
         scanf("%s",&num);
         index=Byindex(num);//通过数组下标查找是否有这名学生
         if (index==-1)
         {
              printf("不存在%s同学的信息\n",num);
         }
         if(index!=-1)
         {
              printf("%s的信息为:\n",num);
              DisplaySingle(index);
         }
         printf("是否继续查询操作?(y/n)");
         getchar();
         if (getchar()=='n')
         {
              system("cls");
              break;
         }

     }
}




                                                        /*按总成绩排序*/
void paixu()
{
     system("cls");
     int i,j;
     struct Student t;
     for (i=0;i<num;i++)
     {
         for (j=1;j<num-i;j++)
         {
              if (students[j-1].sum<students[j].sum)
              {
                   t=students[j-1];
                   students[j-1]=students[j];
                   students[j]=t;
              }
         }
     }

     printf("\n");
     printf("\n");
     printf("\n");
}



                                                            /*显示学生信息*/
void Display()
{
    system("cls");
     int i;
     printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","   高数成绩 ","  英语成绩 ","  体育成绩 ","总成绩");
     printf("------------------------------------------------------------------\n");
     for (i=0;i<num;i++)
     {
         printf("%10s%10s%10.2f%10.2f%12.2f%12.2f\n",students[i].ID,students[i].Name,
              students[i].Math,students[i].English,students[i].PE,students[i].sum);
     }
     printf("\n");
     printf("\n");
     printf("\n");
     printf("\n");
}


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




                                                    /*将学生信息从文件读出*/
void ReadIn()
{
     FILE *fp;
     int i;
     if ((fp=fopen("Database.txt","rb"))==NULL)
     {
         printf("不能打开文件!\n");
         return;
     }
     if (fread(&num,sizeof(int),1,fp)!=1)
     {
         num=-1;
     }
     else
     {
         for(i=0;i<num;i++)
         {
              fread(&students[i],sizeof(struct Student),1,fp);
         }
     }
     fclose(fp);
}






有不懂的内容问我QQ:1816002714

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Founless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值