学生成绩管理系统

这是进入大学以来,第一次做的C语言课程设计,觉得挺有意义,把代码贴上来,晒一下!


代码:


        

//学生成绩管理系统
//教师,管理员密码
//输入学生的基本信息
//输出学生的基本信息
//查找学生的基本信息
//学生成绩分析
//排序
//统计
//退出

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

using namespace std;

int MIMA=123456,yyy;

struct student//结构体函数
{
   char banji[20];
   char name[20];
   char xh[20];
   double math;
   double english;
   double Cyuyan;
   double score;//总成绩!
   int num;
}stu[3000];

void AdministratorMenu();

void Teacher();

void Sort();

void display();

void dis1();

void InsertScore();

void Xiugai();

void Fenxi();

void FenxiMenu();

void XiTongshuoming();

void Guanyu();

void Mainface()//进入界面
{
    system("color 0c");
    cout<<"                ------------------------------------- "<<endl;
    cout<<"               |      欢迎使用学生成绩管理系统       |"<<endl;
    cout<<"                ------------------------------------- "<<endl;
    cout<<"               | 1、管理员登陆    |  2、教师登陆     |"<<endl;
    cout<<"                ------------------------------------- "<<endl;
    cout<<"                                                      "<<endl;
    cout<<"                请选择登陆方式:";
}

void mima()//登录密码!
{
    int x;
    cin>>x;
    if(x==MIMA)
    {
        system("cls");
    }
    else
    {
        cout<<"您输入的密码错误!"<<endl;
        system("pause");//暂停!
        system("cls");//清屏!
        if(yyy==1)
        {
            AdministratorMenu();
            mima();
        }
        else if(yyy==2)
        {
            Teacher();
            mima();
        }
    }
}

void AdministratorMenu()
{
    system("cls");
    cout<<"管理员登陆》》》》》》》》》》》》》》》》》》》》》》》》》》》》》"<<endl;
    cout<<"                             账号:Administrator"<<endl;
    cout<<"                             密码:";
    mima();
}

void Teacher()
{
    system("cls");
    cout<<"教师登陆》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》"<<endl;
    cout<<"                             账号:Teacher"<<endl;
    cout<<"                             密码:";
    mima();
}

void First()
{
    Mainface();
    cin>>yyy;
    if(yyy<1||yyy>2)
    {
        cout<<"输入错误!请重新输入!"<<endl;
        system("pause");
        system("cls");
        First();
    }
    else if(yyy==1)
    {
        AdministratorMenu();
    }
    else if(yyy==2)
    {
        Teacher();
    }
}

char menu()//菜单选项
{
    char x;
    system("cls");
    cout<<"****************************************************************************"<<endl;
    cout<<"                             1、学生成绩录入"<<endl;
    cout<<"                             2、学生成绩信息显示"<<endl;
    cout<<"                             3、学生成绩排名"<<endl;
    cout<<"                             4、学生成绩查找"<<endl;
    cout<<"                             5、追加学生成绩"<<endl;
    cout<<"                             6、学生成绩分析"<<endl;
    cout<<"                             7、系统说明"<<endl;
    cout<<"                             8、关于"<<endl;
    cout<<"                             0、退出系统"<<endl;
    cout<<"请选择您要进行的选项:"<<endl;;
    while(1)
    {
        cin>>x;
        if(x>='0'&&x<='8')  break;
        else
        {
            cout<<"输入错误!!!请重新输入!!!"<<endl;
        }
    }
    return x;
}

double cmp1(student a1,student a2)//比较数学成绩
{
    if(a1.math!=a2.math)
    return a1.math>a2.math;
}
double cmp2(student a1,student a2)//比较英语成绩
{
    if(a1.english!=a2.english)
    return a1.english>a2.english;
}
double cmp3(student a1,student a2)//比较C语言成绩
{
    if(a1.Cyuyan!=a2.Cyuyan)
    return a1.Cyuyan>a2.Cyuyan;
}
double cmp4(student a1,student a2)//比较总成绩,得出名次
{
    if(a1.score!=a2.score)
    return a1.score>a2.score;
}

void FenxiChengji()
{
    system("cls");
    cout<<"                          1、查看学生数学成绩分析"<<endl;
    cout<<"                          2、查看学生英语成绩分析"<<endl;
    cout<<"                          3、查看学生C语言成绩分析"<<endl;
    cout<<"请您选择您要进行的选项:"<<endl;
}

void FenxiMenu()
{
    system("cls");
    cout<<"                          1、查看学生数学成绩"<<endl;
    cout<<"                          2、查看学生英语成绩"<<endl;
    cout<<"                          3、查看学生C语言成绩"<<endl;
    cout<<"请您选择您要进行的选项:"<<endl;
}

void SortMenu()
{
    system("cls");
    cout<<"                          1、查看学生数学成绩"<<endl;
    cout<<"                          2、查看学生英语成绩"<<endl;
    cout<<"                          3、查看学生C语言成绩"<<endl;
    cout<<"                          4、查看学生总成绩"<<endl;
    cout<<"请您选择您要进行的选项:"<<endl;
}

void Sort()//成绩比较函数
{
    student a;
    FILE *fp=fopen("d:\\Student\\成绩.txt","ab+");
    int flag,Num=0,n;
    char ch;
    do
    {
        while(1)
        {
            SortMenu();
            cin>>flag;
            if(flag>=1&&flag<=4)
            {
                break;
            }
            else
            {
                cout<<"\n输入错误!!!请重新输入!!!"<<endl;
                system("pause");
                system("cls");
            }
        }
        while((n=fread(&a,sizeof(a),1,fp)>0))
        {
            stu[Num++]=a;
        }
        fclose(fp);
        if(flag==1)//数学成绩查询
        {
            system("cls");
            sort(stu,stu+Num,cmp1);
            cout<<"   班级    姓名     学号      数学     名次"<<endl;
            for(int i=0;i<Num;i++)
            {
                cout<<" "<<stu[i].banji<<"  "<<stu[i].name<<" "<<stu[i].xh<<"   ";
                printf("%.2lf",stu[i].math);
                cout<<"    "<<i+1<<endl;
            }
        }
        else if(flag==2)//英语成绩查询
        {
            system("cls");
            sort(stu,stu+Num,cmp2);
            cout<<"   班级    姓名     学号      英语     名次"<<endl;
            for(int i=0;i<Num;i++)
            {
                cout<<" "<<stu[i].banji<<"  "<<stu[i].name<<" "<<stu[i].xh<<"   ";
                printf("%.2lf",stu[i].english);
                cout<<"    "<<i+1<<endl;
            }
        }
        else if(flag==3)//C语言成绩查询
        {
            system("cls");
            sort(stu,stu+Num,cmp3);
            cout<<"   班级    姓名     学号      C语言     名次"<<endl;
            for(int i=0;i<Num;i++)
            {
                cout<<" "<<stu[i].banji<<"  "<<stu[i].name<<" "<<stu[i].xh<<"   ";
                printf("%.2lf",stu[i].Cyuyan);
                cout<<"    "<<i+1<<endl;
            }
        }
        else if(flag==4)//总成绩查询
        {
            system("cls");
            sort(stu,stu+Num,cmp4);
            dis1();
            for(int i=0;i<Num;i++)
            {
                cout<<" "<<stu[i].banji<<"  "<<stu[i].name<<" "<<stu[i].xh<<"   ";
                printf("%.2lf    %.2lf   %.2lf    %.2lf   ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
                cout<<"    "<<i+1<<endl;
            }
        }
        getchar();
        cout<<"这里一共有"<<Num<<"份记录!"<<endl;
        cout<<"是否返回上一级?(Y/N):";ch=getchar();
    }while(ch=='Y'||ch=='y');
    fclose(fp);
}

void input()//输入学生信息!
{
    system("cls");
    getchar();
    struct student a;
    FILE *fp;
    char ch;
    int Num,n;
    if((fp=fopen("d:\\Student\\成绩.txt","wb"))==NULL)
    {
        cout<<"\nCannot open the inform file"<<endl;
        getchar();
        exit(1);
    }
    do
    {
        system("cls");
        cout<<"请输入班级代号:";gets(a.banji);
        cout<<"请输入学生姓名:";gets(a.name);
        cout<<"请输入学生学号:";gets(a.xh);
        cout<<"请分别输入学生的数学、英语、C语言成绩:"<<endl;
        cin>>a.math>>a.english>>a.Cyuyan;
        a.score=a.math+a.english+a.Cyuyan;
        fwrite(&a,sizeof(a),1,fp);
        cout<<"是否继续添加?(Y/N):";
        cin>>ch;
        getchar();
    }while(ch=='Y'||ch=='y');
    fclose(fp);
}


void dis1()
{
    system("cls");
    cout<<"   班级    姓名     学号      数学     英语    C语言    总成绩     名次"<<endl;
}

void display()//学生信息显示
{
    system("color 0e");
    struct student a;
    FILE *fp;
    int Num=0,n;
    if((fp=fopen("d:\\Student\\成绩.txt","rb"))==NULL)
    {
        cout<<"\nCannot open the inform file\n";
        getchar();
        exit(1);
    }
    while((n=fread(&a,sizeof(a),1,fp)>0))
    {
        stu[Num++]=a;
    }
    fclose(fp);
    sort(stu,stu+Num,cmp4);
    dis1();
    for(int i=0;i<Num;i++)
    {
        cout<<" "<<stu[i].banji<<"  "<<stu[i].name<<" "<<stu[i].xh<<"   ";
        printf("%.2lf    %.2lf   %.2lf    %.2lf   ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
        cout<<"    "<<i+1<<endl;
    }
    cout<<endl<<endl<<"这里一共有"<<Num<<"份信息!"<<endl;
    system("pause");
    //menu();此处有些画蛇添足!注释掉!表示不理解!
}

int FindMenu()//查找菜单
{
    int flag;
    system("color D");
    cout<<"                          1、按班级查找"<<endl;
    cout<<"                          2、按学号查找"<<endl;
    cout<<"                          3、按姓名查找"<<endl;
    cout<<"                          4、按名次查找"<<endl;
    cout<<"请选择您要进行的选项:";
    cin>>flag;
    return flag;
}

void Find()//对学生信息的查找
{
    struct student a;
    FILE *fp;
    int Num=0,x,flag;
    char ch[20],str;
    if((fp=fopen("d:\\Student\\成绩.txt","rb"))==NULL)
    {
        cout<<"\nCannot open the inform file"<<endl;
        getchar();
        exit(1);
    }
    do
    {
            system("cls");
            flag=FindMenu();
            if(flag<1||flag>4)
            {
                cout<<"\n输入错误!!!请重新输入!!!"<<endl;
                system("pause");
                system("cls");
                flag=FindMenu();
            }//对菜单的选择!
        if(flag==1)
        {
            system("cls");
            cout<<"请输入您要查询的班级:";getchar();
            gets(ch);
            Num=0;
            while(fread(&a,sizeof(a),1,fp)==1)
            {
                 stu[Num++]=a;
            }
            fclose(fp);
            sort(stu,stu+Num,cmp4);
            dis1();
            for(int i=0;i<Num;i++)
            {
                if(strcmp(ch,stu[i].banji)==0)
                {
                    cout<<" "<<stu[i].banji<<"  "<<stu[i].name<<" "<<stu[i].xh<<"   ";
                    printf("%.2lf    %.2lf   %.2lf    %.2lf   ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
                    cout<<"    "<<i+1<<endl;
                }

            }
        }
        else if(flag==2)
        {
            system("cls");
            cout<<"请您输入您要查询的学号:";getchar();
            gets(ch);
            Num=0;
            while(fread(&a,sizeof(a),1,fp)==1)
            {
                 stu[Num++]=a;
            }
            fclose(fp);
            sort(stu,stu+Num,cmp4);
            dis1();
            for(int i=0;i<Num;i++)
            {
                if(strcmp(ch,stu[i].xh)==0)
                {
                    cout<<" "<<stu[i].banji<<"  "<<stu[i].name<<" "<<stu[i].xh<<"   ";
                    printf("%.2lf    %.2lf   %.2lf    %.2lf   ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
                    cout<<"    "<<i+1<<endl;
                }
            }
        }
        else if(flag==3)
        {
            system("cls");
            cout<<"请您输入您要查询的姓名:";getchar();
            gets(ch);
            Num=0;
            while(fread(&a,sizeof(a),1,fp)==1)
            {
                 stu[Num++]=a;
            }
            fclose(fp);
            sort(stu,stu+Num,cmp4);
            dis1();
            for(int i=0;i<Num;i++)
            {
                if(strcmp(ch,stu[i].name)==0)
                {
                    cout<<" "<<stu[i].banji<<"  "<<stu[i].name<<" "<<stu[i].xh<<"   ";
                    printf("%.2lf    %.2lf   %.2lf    %.2lf   ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
                    cout<<"    "<<i+1<<endl;
                }

            }
        }
        else if(flag==4)
        {
            system("cls");
            cout<<"请您输入您要查询的名次:";
            cin>>x;
            Num=0;
            while(fread(&a,sizeof(a),1,fp)==1)
            {
                 stu[Num++]=a;
            }
            fclose(fp);
            sort(stu,stu+Num,cmp4);
            dis1();
            for(int i=0;i<Num;i++)
            {
                if(i+1==x)
                {
                    cout<<" "<<stu[i].banji<<"  "<<stu[i].name<<" "<<stu[i].xh<<"   ";
                    printf("%.2lf    %.2lf   %.2lf    %.2lf   ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
                    cout<<"    "<<i+1<<endl;
                    break;
                }
            }
        }
        //cout<<"这里一共有"<<Num<<"份信息!"<<endl;
        cout<<"是否返回上一级再次查找?(Y/N):";
        str=getchar();getchar();
    }while(str=='Y'||str=='y');
    fclose(fp);
}

void Fenxi()//学生成绩分析
{
    system("cls");
    system("color F");
    student a;
    FILE *fp=fopen("d:\\Student\\成绩.txt","ab+");
    int flag,Num=0,n;
    char ch;
    do
    {
        while(1)
        {
            FenxiMenu();
            cin>>flag;
            if(flag>=1&&flag<=3)
            {
                break;
            }
            else
            {
                cout<<"\n输入错误!!!请重新输入!!!"<<endl;
                system("pause");
                system("cls");
            }
        }
        while((n=fread(&a,sizeof(a),1,fp)>0))
        {
            stu[Num++]=a;
        }
        fclose(fp);
        if(flag==1)//数学成绩查询
        {
            system("cls");
            sort(stu,stu+Num,cmp1);
            int g=0,bug=0,l=0,you=0;
            for(int i=0;i<Num;i++)
            {
                if(stu[i].math>=60)
                {
                    g++;
                }
                if(stu[i].math>=80)
                {
                    l++;
                }
                if(stu[i].math>=90)
                {
                    you++;
                }
                if(stu[i].math<60)
                {
                    bug++;
                }
            }
            cout<<"数学成绩优秀者"<<you<<"人\n";
            cout<<"数学成绩良好者"<<l<<"人\n";
            cout<<"数学成绩及格者"<<g<<"人\n";
            cout<<"数学成绩不及格者"<<bug<<"人\n";
        }
        else if(flag==2)//英语成绩查询
        {
            system("cls");
            sort(stu,stu+Num,cmp2);
            int g=0,bug=0,l=0,you=0;
            for(int i=0;i<Num;i++)
            {
                if(stu[i].english>=60)
                {
                    g++;
                }
                if(stu[i].english>=80)
                {
                    l++;
                }
                if(stu[i].english>=90)
                {
                    you++;
                }
                if(stu[i].english<60)
                {
                    bug++;
                }
            }
            cout<<"英语成绩优秀者"<<you<<"人\n";
            cout<<"英语成绩良好者"<<l<<"人\n";
            cout<<"英语成绩及格者"<<g<<"人\n";
            cout<<"英语成绩不及格者"<<bug<<"人\n";
        }
        else if(flag==3)//C语言成绩查询
        {
            system("cls");
            sort(stu,stu+Num,cmp3);
            int g=0,bug=0,l=0,you=0;
            for(int i=0;i<Num;i++)
            {
                if(stu[i].Cyuyan>=60)
                {
                    g++;
                }
                if(stu[i].Cyuyan>=80)
                {
                    l++;
                }
                if(stu[i].Cyuyan>=90)
                {
                    you++;
                }
                if(stu[i].Cyuyan<60)
                {
                    bug++;
                }
            }
            cout<<"C语言成绩优秀者"<<you<<"人\n";
            cout<<"C语言成绩良好者"<<l<<"人\n";
            cout<<"C语言成绩及格者"<<g<<"人\n";
            cout<<"C语言成绩不及格者"<<bug<<"人\n";
        }
        getchar();
        cout<<"这里一共有"<<Num<<"份记录!"<<endl;
        cout<<"是否返回上一级?(Y/N):";ch=getchar();
    }while(ch=='Y'||ch=='y');
    fclose(fp);

}

void InsertScore()//追加学生成绩
{
    system("cls");
    getchar();
    struct student a;
    FILE *fp;
    char ch;
    int Num,n;
    if((fp=fopen("d:\\Student\\成绩.txt","ab+"))==NULL)
    {
        cout<<"\nCannot open the inform file"<<endl;
        getchar();
        exit(1);
    }
    do
    {
        system("cls");
        cout<<"追加学生成绩:"<<endl;
        cout<<"请输入班级代号:";gets(a.banji);
        cout<<"请输入学生姓名:";gets(a.name);
        cout<<"请输入学生学号:";gets(a.xh);
        cout<<"请分别输入学生的数学、英语、C语言成绩:"<<endl;
        cin>>a.math>>a.english>>a.Cyuyan;
        a.score=a.math+a.english+a.Cyuyan;
        fwrite(&a,sizeof(a),1,fp);
        cout<<"是否继续添加?(Y/N):";
        cin>>ch;
        getchar();
    }while(ch=='Y'||ch=='y');
    fclose(fp);
}

/*void Xiugai()
{
    system("cls");
    student a;
    FILE *fp,*p;
    int flag,n,Num;
    char ch[15],x;
    do
    {
        Num=0;
        if((fp=fopen("d:\\Student\\成绩.txt","rb"))=NULL)
        {
            cout<<"\nCannot open the inform file!";
            getchar();
            exit(1);
        }
        if((p=fopen("d:\\Student\\替代文件.txt","wb"))==NULL)
        {
            cout<<"\nCannot creat the inform file!";
            getchar();
            exit(1);
        }
        printf("请输入您想要修改信息的学号:");
        gets(ch);getchar();
        flag=0;
        while(fread(&a,sizeof(a),1,fp)==1)
        {
            stu[Num++]=a;
        }
        for(int i=0;i<Num;i++)
        {
            if(strcmp(stu[i].xh,ch)==0)
            {
                cout<<" "<<stu[i].banji<<"  "<<stu[i].name<<" "<<stu[i].xh<<"   ";
                printf("%.2lf    %.2lf   %.2lf    %.2lf   ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
                cout<<"请输入班级代号:";gets(stu[i].banji);
                cout<<"请输入学生姓名:";gets(stu[i].name);
                cout<<"请输入学生学号:";gets(stu[i].xh);
                cout<<"请分别输入学生的数学、英语、C语言成绩:"<<endl;
                cin>>stu[i].math>>stu[i].english>>stu[i].Cyuyan;
                stu[i].score=stu[i].math+stu[i].english+stu[i].Cyuyan;
            }
            fwrite(&stu,sizeof(stu),1,p);
        }
        if(flag==1)
        {
            cout<<"修改成功!"<<endl;
            remove("d:\\Student\\成绩.txt");
            rename("d:\\Student\\替代文件.txt","d:\\Student\\成绩.txt");//虽然这一块函数比较坑爹,好歹学会了!!!
        }
        else if(flag==0)
        {
            cout<<"您要修改的信息不存在!"<<endl;
        }
        cout<<"您是否要继续修改信息?(Y/N):";
        cin>>x;getchar();
    }while(x=='Y'||x=='y');
    fclose(fp);
    fclose(p);
}*/
//注释部分是在是有点儿小心疼,编译代码的时候实在是搞不懂懂那些莫名奇妙
//的错误,花一个下午仍然没能把头绪理出来,不得不割舍掉这个系统很重要的
//两个功能:学生信息修改,学生信息删除

void Xitongshuoming()
{
    system("cls");
    system("color 0e");
    cout<<"            (1) 功能1的学生成绩录入为一次性录入,再次使用便会覆盖原有数据。"<<endl;
    cout<<"                如教师希望添加学生成绩可使用功能5(追加学生成绩)。\n"<<endl;
    cout<<"            (2) 本系统的成绩排序范围为整个系的学生。"<<endl;
    cout<<"                即:学生的名次为年级名次!\n"<<endl;
    cout<<"            (3) 学生的排名可由功能3(学生成绩排名)来实现。\n"<<endl;
    cout<<"            (4) 学生的成绩具体情况可使用功能6(学生成绩分析)。\n"<<endl;
    cout<<"            (5) 若教师对该系统还有不明之处,请联系管理员或“关于”的本产品制作者!\n"<<endl;
    system("pause");
}

void Guanyu()
{
    system("cls");
    system("color 0a");
    cout<<"                        本产品由Topcoder工作室成员申军超制作!"<<endl;
    cout<<"                        若教师或管理员对本产品功能有不满之处,请管理员联系本人!"<<endl;
    cout<<"                        QQ号码:1736696594"<<endl;
    cout<<"                        邮箱:  1736696594@qq.com"<<endl;
    system("pause");
}

int main()
{
    First();
    while(1)
    {
        system("color 0a");
        switch(menu())
        {
            case '1':input();break;
            case '2':display();break;
            case '3':Sort();break;
            case '4':Find();break;
            case '5':InsertScore();break;
            case '6':Fenxi();break;
            case '7':Xitongshuoming();break;
            case '8':Guanyu();break;
            case '0':exit(0);break;
        }
    }
    return 0;
}

代码比较多,高手不喜勿喷!!!

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值