学生成绩管理系统

来源:互联网 发布:大话手游神兵升级数据 编辑:程序博客网 时间:2024/05/01 21:36

这是进入大学以来,第一次做的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;}

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