精华内容
下载资源
问答
  • 学生成绩管理系统

    千次阅读 2013-07-22 15:25:49
     //学生成绩管理系统 //教师,管理员密码 //输入学生的基本信息 //输出学生的基本信息 //查找学生的基本信息 //学生成绩分析 //排序 //统计 //退出 #include #include #include #include #include #inc

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

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

    展开全文
  • Java学生成绩管理系统源代码,用来电子管理学生,代码十分简洁,对于初学java等有需求的同学,很有借鉴意义
  • 学生成绩管理系统设计》 二、实训目的 (1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。 (2)掌握C++的基本概念和基础知识。 (3)通过训练能够读懂较为复杂的C++语言源程序...

    很多朋友私信要一份C语言学生成绩管理系统设计报告,提供一下获取方法吧

    扫描下方公号,发送 成绩系统 三个字,获取实训报告。

    后续也会把之前搜集到的优质管理系统相关资料分享出来,大家一起学习,下面是作者自己的一份实训报告,希望能帮助到大家

    一、课程设计题目

    《学生成绩管理系统设计》

    二、实训目的

    (1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。

    (2)掌握C++的基本概念和基础知识。

    (3)通过训练能够读懂较为复杂的C++语言源程序并具备基本C++语言程序设计的能力。

    4)通过实训,培养自己编写、调试、分析程序的能力。

    5)培养自己独立解决问题,查找资料的能力。同学之间相互帮助,相互交流,相互合作的团队精神。

    6) 培养自己良好的学习兴趣,独立的编程风格。

    7) 通过实训检查自己学习上的不足,达到熟练掌握C++语言的基本知识和技能。

    三、课程设计报告内容

    3.1功能要求

    该系统运行在DOS环境下,人机界面为命令行文本界面。完成的任务是对若干人的成绩信息进行管理,且数据保存到文件中。

    实现的主要功能是:

    系统以菜单方式进行工作

    学生信息和成绩输入功能

    学生信息和成绩输出功能

    学生信息和成绩浏览功能

    查询学生信息及成绩功能

    修改学生信息及成绩功能

    学生成绩排序

    以稳健的形式进行保存

    3.2 设计环境

    所使用的语言采用标准C,开发工具可选用在DOS环境下的Turbo C

    3.3 数据结构

    本系统是对学生成绩的信息进行管理,学生成绩信息采用C的结构体数据类型描述,定义如下:

    struct students
    {
       int num;          //学号-整型//
       char name[8];    //姓名-字符型//
       char chinese;    //大学语文-字符型//
       char math;       //大学数学-字符型//
       char computer;   //计算机-字符型//
       char sum;        //总成绩-字符型//
       char ave;        //平均分-字符型//
    }

    3.4实现方法及主要算法分析

    (1)主界面的设计:主界面采用文本菜单的形式,各功能调用通过菜单进行选择。采用循环处理,以便执行完某项处理后,仍可选择其他项处理。在循环内先显示提示信息,然后读取用户输入,使用switch语句对用户的输入进行判断,分别调用相应的模块,当某模块结束后再次回到文本菜单,直到用户选择结束程序菜单,才退出循环,从而退出系统。

    (2) 外部文件的类型:文件采用的二进制的文件,对文件的读写采用顺序文件的方式,并使用fread和fwrite等函数对文件进行操作。

    (3)清屏函数:一般由上一级菜单屏幕进入下一级菜单屏幕或由下一级菜单屏幕返回上一级菜单屏幕都需要清除屏幕原来显示的内容。同时在调用程序的过程中,记录需要清屏的位置,然后修改代码,加入clrscr()函数清屏。

    (4)提示信息:一般的输入与输出需有相应的提示信息,以增加用户的交互性,增加输出的可读性,以帮助用户使用程序。

    3.5模块设计

    根据功能要求,本系统为五大主要模块,具体模块如表所示。

    学生信息成绩管理系统的模块

    3.6处理流程

    (1)学生成绩管理系统主界面模块

    2)成绩输入模块 和(3)成绩排序模块

    (4)删除记录

    (5)修改记录

    (6)查找信息

    四、结论

    学生成绩管理系统的编写,看似杂乱无头绪,实际上却并不如此。它的每一个功能都能分成模块,有句话说的好,大事化小,小事化了。C语言编程也正式如此,把一个大的程序分为若干相互独立的模块,这样使完成每一个模块的工作变得单纯而明确,这样不仅降低了难度还使得思路清晰,很容易编写出要做的程序,从而为设计一些较大的软件打下了良好的基础。

    分析问题:

    学生成绩管理系统的整体功能都包括、增加成员、删除成员、查看成员、修改成员、登陆口令五大板块,而查看有包括学号,姓名,大学语文成绩,大学数学成绩,计算机成绩,总成绩,平均分七个模块。

    1. 设计的数据对象包括整形:学号。字符型:姓名、3门课程成绩、总成绩、平均成绩。
    2. 数据结构线性数据结构,定义人数上限为1000.

    算法的设计:

    1. 自顶向下

      现有全局,在进行整体设计,然后再进行下层的设计,逐步实现精细化。采用这种方法能够做到胸有全局,能全盘考虑,不至于顾此失彼,头重脚轻。

    1. 逐步细化

       一步步地将上层的任务分解成较小的、易于实现的任务,知道可以很简单实现为止。

    编写源程序:

    1. 不求速度,但求质量!一步一个脚印,编写程序时候宁可速度慢些也要尽量保证质量,做到尽量不出错。
    2. 精力集中,全神贯注!写程序时候最忌讳三心二意,这样才能思路清晰保证质量。
    3. 保持一个良好的编程心态,不要被长长的代码吓到

    程序的编译与运行:

    1. 查找错误是一件让人闹心的事,但是要注重技巧,注意平时经验的积累。
    2. 程序编译成功不要满足现状,要积极测试程序的可用性,对功能不理想,存在缺点的地方,积极的改进,完善。

    五、结束语

    在实训过程中,使我良好的锻炼了自己,首先是兴趣方面,通过编写通讯录管理系统使我更加喜欢编程,使我从以前的迷茫状态中解脱出来,使我了解了编程的真正意义。我想这对我以后的人生有着很大的帮助。其次通过编写通讯录管理系统使我对写程序有了一定的思路,不像以前无从下手,使我理解了算法的意义,使我懂得了模块化思想的好处。

    通过一个星期的编写代码,使我对书本上的知识有了更深的理解,甚至有很多不懂的问题在这过程中自然而然的理解了。对期末考试更有了信心。在朱老师的悉心指导下,我对C语言有了更深刻的理解,对程序的算法,数据的定义,程序的改错等方面的能力有了很大提高,自身的注意力,耐心,和对编程的兴趣有了很大增长,使我获益匪浅。

    六、参考书目:

    [1]谭浩强,《C语言程序设计》,清华大学出版社

    附完整代码:

    #include<stdio.h>
    #include<string.h>    //比较字符串头文件//
    #include<stdlib.h>   //实时检测总数头文件//
    #define N 1000       //控制最大输入//
    int n=0;             //实时检测的总数n//
    
    /*定义结构体students*/																	       
    struct students
    {
       int num;          //学号-整型//
       char name[8];     //姓名-字符型//
       char chinese;     //大学语文-字符型//
       char math;        //大学数学-字符型//
       char computer;    //计算机-字符型//
       char sum;         //总成绩-字符型//
       char ave;        //平均分-字符型//
    }student[N],student1;     //student[N]是结构体数组student1是结构体的初始化//
    
      /*实时检测总数n*/
    void count()  
     {
    	FILE *fp;         //定义一个文件指针fp//
    	fp=fopen("students.txt","at+");     //以“追加”方式打开students文本文件//
    	if(fp==NULL)                        //判断文件是否为空//
    		printf("Cannot open file!");
        struct students stu1;                 
    	n=0;         //初始化//
    	while(1)
    	{
    	  if(feof(fp))  //检测文件是否结束//
    	  break;
          fread(&stu1,sizeof(struct students),1,fp);   //读取文件//
    	  n++;    //读取文件数//
        }
    	n--;           //关闭文件数//
    	fclose(fp);    //关闭文件//
     }
    
    /*菜单*/
    void main()
    {
    	int i;        //获取用户在菜单中的选择//     
    	while(i!=0)
    	{
    		system("cls");     //清屏//
    	printf("\t\t欢迎进入学生信息管理系统\n");
      printf("\t\t==============================\n");
    		printf("\t\t*请择操作                    *\n");
    		printf("\t\t*1输入学生信息               *\n");
    		printf("\t\t*2输出学生信息               *\n");
    		printf("\t\t*3修改学生信息               *\n");
    		printf("\t\t*4查询学生信息               *\n");
           printf("\t\t*5排序学生信息               *\n");
    		printf("\t\t*6退出                       *\n");
    	printf("\t\t==============================\n");
     scanf("%d",&i);
     system("cls");     //清屏// 
    		count();     //实时检测总数n//
    		switch(i)
    		{
    		 case 1:input();break;    //输入学生信息//	
    		 case 2:output();break; 	//输出学生信息//
    	     case 3:xiugai();output();break;    //修改学生信息//
            case 4:query();break;    //查询学生信息*/
            case 5:paixu();output();break;    //成绩排序//
    	default:
    		   printf("输入有错\n");     //错误纠正//  
    		}
    	}
    	   if(i==0)
    	     tuichu();        //退出系统//
    }
    
    
    /*成绩输入*/
    void input()   
    {
      int i=0;     //学生人数初始化//
      char c;
      FILE *fp;     //定义一个文件指针fp//
    	count();     //实时检测总数n//
    	fp=fopen("students.txt","at+");    //以“追加”方式打开students文本文件//
      do 
      {	
       printf("请输入学生的个人信息:\n");
         printf("\n请输入第%d学生的信息:\n",n+1);
         printf("请输入学生的学号:");
         scanf("%d",&student[i].num);
         printf("请输入学生的姓名:");
        scanf("%s",student[i].name);getchar();
        printf("请输入学生的大学语文成绩");
        scanf("%s",student[i].chinese);
        printf("请输入学生的大学数学成绩:");
        scanf("%d",&student[i].math);
        printf("请输入学生的计算机成绩:");
        scanf("%s",student[i].computer);
         getchar();
         student[i].sum=student[i].chinese+student[i].math+student[i].computer;
    		student[i].ave=student[i].sum/3;
    fwrite(&student[i],sizeof(struct students),1,fp);  //以方式将其写入students文本文件//
    	i++;     
    	n++;      
    	printf("\n\n\t\t\t\t是否继续输入(Y/N):");getchar();     //提示是否继续,从键盘  
                                                               获得一个字符//  
    scanf("%c",&c);  
      }
     while(c=='y'||c=='Y');
     fclose(fp);
    }
    
    /*成绩输出*/        
    void output()  
    {
      int i;
      char c;
      FILE *fp;      //定义一个文件指针fp//
      fp=fopen("students.txt","rt");    //以“读取的” 方式打开students文本文件//
      system("cls");     //清屏//
      getchar();
        
    printf("||------||-----||-----||-----||------||-------||-------||------||");
    	printf("|#学号-----姓名------大学语文------大学数学------计算机------总成绩
    -----平均分---#|\n");
      do{  
    	  for(i=0;i<n;i++)  
    	  { 
           fread(&student[i],sizeof(struct students),1,fp);  
           printf("%d",student[i].num);
            printf(" %d",student[i].name);
    	        printf("%d",student[i].chinese);
              printf(" %d ",student[i].math);
              printf("%d ",student[i].computer);
              printf("%d",student[i].sum);
              printf(" %d ",student[i].ave);
         
    	  }
    printf("|------||-----||------||-----||-----||-----||-----||------ |");
      	  printf("\n\n\t\t\t\t是否继续其它操作(Y/N):");     //提示是否继续//
    	      scanf("%c",&c);
    	  c=getchar();
    	}while(c=='y'||c=='Y');
         fclose(fp);      //关闭文件//
    }
    
    /*成绩修改*/
    void xiugai()  { 
      int i,tp,num1;
      char c; 
      FILE *fp;     //定义一个文件指针fp//
    
    lb:  
      printf("\n按学号修改\n\n");
      printf("请输入要修改的学生学号\n");
      scanf("%d",&num1);
    
     for(i=0;i<n;i++) 
     {
    	if(num1==student[i].num)
    	  { 
    		printf("要修改的学生信息为:\n");
            printf("学号\t姓名\t大学语文成绩\t大学数学成绩\t计算机成绩\t总成绩\t
    平均分\n");          
            printf(" %d ",student[i].num);
            printf(" %d ",student[i].name);
            printf(" %d ",student[i].chinese);
            printf(" %d ",student[i].math);
            printf(" %d ",student[i].computer);
            printf(" %d ",student[i].sum);
            printf(" %d ",student[i].ave);
            do {
    		    printf("请选择要修改项:\n");
                printf("1学号\n2姓名\n3大学语文成绩\n4大学数学成绩\n5总成绩\n6平
    均分\n");
                scanf("%d",&tp);
    	            switch(tp)
    			{
    	         case 1:
    				{	 printf("请输入学号:\n");
    		          scanf("%d",&student[i].num);
    		          goto la;
    				}	
    	  	      case 2:
    				{ printf("请输入姓名:\n");
    		          scanf("%s",student[i].name);
    		          goto la;
    				}	
    	  	      case 3:
    				{ printf("请输入大学语文成绩:\n");
    				  getchar();
    		          scanf("%c",&student[i].chinese);
    		         goto la;
    				}	
    	  	      case 4:
    				{ printf("请输入大学数学成绩:\n");
    		          scanf("%d",&student[i].math);
    		         goto la;		  
    				}	
    	  	      case 5:
    				{printf("请输入计算机成绩:\n");
    		          scanf("%s",student[i].computer);	
    		         goto la;
    				}	
    	  	     case 6:
    				{ printf("请输入总成绩:\n");
    		          scanf("%s",student[i].sum);
    		         goto la;
    				}	
    	  	     case 7:
    				{ printf("请输入平均分:\n");
    		          scanf("%s",student[i].ave);
    		         goto la;
    				}
    			}
    		}while (tp<8);		 
    la:	  printf("是否继续修改(y/n)\n");     //提示是否继续//
    	  getchar();
    	  scanf("%c",&c);
    	  if(c=='y'||c=='Y')  goto lb;
             }
      }
        fp=fopen("students.txt","w+");   //以“读写” 方式打开students文本文件//
    	  for(i=0; i<n;i++)
    	  fwrite(&student[i],sizeof(struct students),1,fp);  //以 方式将其写入students
                                                     文本文件//
     fclose(fp);    //关闭文件//
    }
    
    
    /*成绩查询*/
    void query()
    { int querymode;     //子菜单选择//
      int i,j=0,findnum;
      char findname[20];
      int findok,t=0;     //定义一个判断标志的整型变量findok//
      char findct;        //定义一个用于判断是否继续查找的字符变量findct//
      
       FILE *fp;         //定义一个文件指针fp//
       count();     //实时检测总数n//
       fp=fopen("students.txt","r");       //以“只读” 方式打开students文本文件//
       system("cls");     //清屏//
    
      /*查询菜单*/
      printf("\t\t信息查询");
      printf("\n\t1按姓名查询");
      printf("\n\t2按学号查询");
      printf("\n\t0返回上级菜单");
      printf("\n请输入您的操作:");
      scanf("%d",&querymode);
    
      /*查询操作*/
      switch(querymode)
      {case 1: 
        {     printf("请输入要查询学生的姓名:\n");
                getchar();
                scanf("%s",findname); 
                for(i=0;i<N;i++)
    		{
         fread(&student[i],sizeof(struct students),1,fp); //以方式将其读入students
                                                          文本文件//
       if(strcmp(student[i].name,findname)==0)        //比较字符串//
    			 { 
    			   j++;
    			   printf("\n查寻到的学生为:\n");
    			   if(j==1)
                              、
    printf("|------||-----||------||------||------||-------||------||-----|");    
    //仅在第一次显示//
    	printf("|#学号-----姓名------大学语文------大学数学------计算机------总成绩-
    ----平均分---#|\n");
              
    printf("%4d%d%d%d%d%d%d%d",student[i].num,student[i].name,
    student[i].chinese,student[i].math,student[i].sum,student[i].ave);
    			  }
    
    			}
    			if(j==0)
    			  printf("\n>>>查无此人!");
    
               //提示是否继续// 
                printf ("\n是否继续查找(Y/N)?");       
                getchar();
                getchar();}break;
      
        case 2:{ printf("请输入要查询学生的学号:");
                 scanf("%d",&findnum);
                 for(i=0;i<n;i++)
    			 {
                  fread(&student[i],sizeof(struct students),1,fp);        
    //以结构体students的方式从文件fp中读取,将其读入students文本文件,每次读入一个 
    学生的信息//
                  if(student[i].num==findnum)      //整型数字的比较// 
    			  {findok=1;break;}
    			  else findok=0;
    			 }
                  if(!findok)
    				printf("\n>>>查无此人!");
    			  else
    			  { printf("\n查寻到的学生为:\n") ;
    			    if(j==1)
                          printf("|-------||------||------||-------||-------||-------||-------||------|");   
     //仅在第一次显示//
     printf("|学号-----姓名------大学语文------大学数学------计算机------总成绩-----平均分---|\n");
     printf("%4d%d%d%d%d%d%d%d",student[i].num,student[i].name,
    student[i].chinese,student[i].math,student[i].sum,student[i].ave);
    			  }
    //提示是否继续//
          printf ("\n是否继续查找(Y/N)?");       
            getchar();
    			findct=getchar();     //从键盘输入一个判断字符,并将它赋值给字符变量
                                   findct,用于以下的if语句的判断 //
    			if(findct=='Y' || findct=='y')
    			  query();
    		  }
      }
      fclose(fp);    //关闭文件//
    }
    
    
    /*成绩排序*/
    void paixu()
    {
       int i, j;
         FILE *fp;       //定义一个文件指针fp//
       system("cls");      //清屏//
       count();       //实时检测总数n// 
       for(i=0;i<n-1;i++)
    	    for(j=0;j<n-1-i;j++)    //按学号对学生信息进行排序//
    		{
    		     if(student[j].num>student[j+1].num)   //整型数字的比较//
    			 {
    			     student1=student[j];
    			     student[j]=student[j+1];
    			     student[j+1]=student1;
    			 }
    		}
    	fp=fopen("students.txt","w+");  //以 “读写”方式打开students文本文件//
    	for(i=0;i<n;i++)
    	fwrite(&student[i],sizeof(struct students),1,fp);  //以结构体students的方式从
       文件fp中读取,将其写入students文本文件,每次写入一个学生的信息//
        fclose(fp);      //关闭文件//
    }
    
    /*退出系统*/
    void tuichu() 
    {
    	char c;
    	  system("cls");      //清屏//
        printf("\n\n\t\t谢谢使用\n\n\n");
        printf("\n\n\t\t制作人:李姣 渠莉 宝珠 朱佳 刘妍\n");
    	  getchar();
    	c=getchar();       //取用户输入,回显//    
    }

    需要实训报告的同学,请在下方留言,看到会一个个回复的。

    或者直接扫描下方公号,发送 成绩系统 三个字,获取下载源码

    如果失效了,再请直接私信或留言,欢迎大家一起探讨学习。

    相关文章推荐:

    1、 C语言学生成绩管理系统源代码 ★★★★★

    2、 C语言学籍管理系统源代码 ★★

    3、C语言学生成绩管理系统设计 《C语言程序设计》实训报告 ★★★

    展开全文
  • 学生成绩管理系统开题报告 可供看看,不要错过
  • 学生成绩管理_Java大作业 本科学生综合性实验报告 开发技术Java课程名称 项目名称学生成绩治理系统 学生姓名 学号 指导教师 开课学期 2011 至 2012学年 第 一 学期 日 3 月 1 年 2011 完成时刻 名目摘要 2 1 项目...
  • 学生成绩管理 本科学生综合性实验报告 课程名称 Java开发技术 项目名称学生成绩治理系统 学生姓名 学号 指导教师 开课学期 完成时刻 2011 2011 至 年 2012 学年 第 一 学期 1 月 3 日 名目 摘要 2 1 项目研究开发的...
  • C语言详细学生成绩管理系统

    千次阅读 多人点赞 2019-03-28 16:15:13
    C语言 学生成绩管理系统 简述:该学生管理系统数据结构采用结构体 1、系统需求分析 1.1系统介绍 本学生管理系统是为教师人员提供管理班级成绩的工具,该系统可以实现的对学生的成绩进行增、删、改、查、信息保存和...

    欢迎查看我的博客:https://Mr00wang.github.io/

    C语言 学生成绩管理系统

    简述:该学生管理系统数据结构采用结构体

    1、系统需求分析

    1.1系统介绍

    本学生管理系统是为教师人员提供管理班级成绩的工具,该系统可以实现的对学生的成绩进行增、删、改、查、信息保存和信息导入等基本功能,以及对学生成绩排序和分段的扩展功能,有利于对学生成绩管理。

    1.2功能性需求

    (1) 成绩录入

    (2) 成绩输出、成绩排序(按平均成绩)

    (3) 成绩查找

    (4) 成绩修改

    (5) 删除成绩

    (6) 文件存储、文件导入

    1.3非功能性需求

    (1) 友好的交互页面

    (2) 登陆密码设置

    (3) 数据的保护

    2、程序结构设计

    该该系统总体的流程图框架如下

    学生成绩管理系统
    登 陆 界 面
    菜 单 界 面
    录入成绩
    输出成绩
    成绩排序
    成绩查找
    按学号查找
    按姓名查找
    成绩修改
    成绩删除
    按学号删除
    按姓名删除
    文件管理
    文件导入
    文件保存

    3、用户界面设计

    登陆界面

    登陆界面根据自己的需要进行设计,尽量设计的和谐美观。
    如我的登陆界面额外添加了获取时间和登陆密码功能!
    以下展示主要代码和效果展示。

    获取时间代码

        time_t timep;    //系统时间 
    	struct tm *p_1;
    	time (&timep);
    	p_1=gmtime(&timep);
    	printf("\t\t\t\t\t\t  当前时间%02d时%02d分%\n",8+p_1->tm_hour,p_1->tm_min); 
    	printf("\t\t\t\t\t\t   %d年%02d月%02d日\n",1900+p_1->tm_year,1+p_1->tm_mon,p_1->tm_mday);
    
        printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
        printf("\t★\t\t\t\t\t有朋自远方来,不亦乐乎! \t\t\t\t\t★\n\n");
        printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
        printf("\t★\t\t\t\t\t 学 生 管 理 系 统\t\t\t\t\t\t★\n\n");
        printf("\t★\t\t\t  制作者:Mr.Wang 专业:软件工程1801 学号:************\t\t\t\t★\n\n");
        printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
        printf("\t★\t\t\t  欢迎使用软件工程18-01的学生管理系统,祝您使用愉快! \t\t\t\t★\n\n");
        printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n"); 
    

    如图:登陆界面

    菜单界面

    进入页面后设计一个菜单界面,也就是功能界面,在该界面上进行操作

    
    	 printf("\t\t★————————————————————————————————————————★\n\n");
         printf("\t\t\t   | 1. 成绩录入\t\t2. 成绩显示\t\t3. 各科均分  |\n\n");
         printf("\t\t\t   | 4. 成绩排序\t\t5. 成绩查找\t\t6. 信息修改  |\n\n");
         printf("\t\t\t   | 7. 删除成绩\t\t8. 成绩分段\t\t0. 退出系统  |\n\n");
         printf("\t\t★————————————————————————————————————————★\n");
    
    

    展示如下:

    登陆界面

    4、功能设计

    在该模块中,将会介绍程序的主要功能实现的设计思想和代码

    4.1成绩录入

    设计思想

    成绩录入是对结构体中班级、姓名、学号和五门成绩的录入,同时加上对五门成绩平均成绩的计算。按照基本的录入,只需用scanf函数对数据输入,用printf函数进行汉字的打印即可。然后进行文件保存该组数据,最后判断是否继续录入。

    流程图如下

    input

    代码

    //*************************************
    //*************************************
    //学生成绩录入
    void input(struct Student stu[])
    {
        void save(struct Student stu[]);//声明保存文件函数
        int choose;
        int i;
        char tempcla[10]={"-1"};  //定义临时姓名字符串,用于按(-1)返回菜单 
        a:
        system("cls");    //清屏
        fflush(stdin);    //清空缓存区 
        printf("成  绩  录  入\n");
        printf("************************************************************************************************************\n");
        printf("请依次输入\t\t班级、姓名、  学号、     五门课成绩(高数 英语 C语言 计算机基础 软件工程导论)\n");
        printf("班级(按-1返回菜单):");  //输入班级
        while(scanf("%s",stu[count].cla)==0)   //判断返回值,除去类型错误bug 
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        if(strcmp(stu[count].cla,tempcla)==0)  //按-1返回菜单
        {
            printf("\n按任意键返回菜单!\n\n");
            system("pause");
            return;
        }
        while(strlen(stu[count].cla)>10)  //判断字符长度
        {
            fflush(stdin);
            printf("班级输入不合理,请重新录入:");
            scanf("%s",stu[count].cla);
        }
        printf("\n姓名:");  //输入姓名
        fflush(stdin);
        while(scanf("%s",stu[count].name)==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(strlen(stu[count].name)>7)
        {
            fflush(stdin);
            printf("姓名不合理,请重新录入:");
            scanf("%s",stu[count].name);
        }
        printf("\n学号:");    //输入姓名
        w:
        fflush(stdin);
        while(scanf("%lld",&stu[count].num)==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        for(i=0;i<count;i++)     //判断重复学号
        {
            if(stu[count].num==stu[i].num)
            {
                printf("已有该学号,请重新输入:\n");
                goto w;
            }
        }
        printf("\n高数(0~100):");  //输入高数
        fflush(stdin);
        while(scanf("%f",&stu[count].score[0])==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(stu[count].score[0]<0||stu[count].score[0]>100)
        {
            fflush(stdin);
            printf("数据超出,请重新输入:");
            scanf("%f",&stu[count].score[0]);
        }
        printf("\n英语(0~100):");   //输入英语
        fflush(stdin);
        while(scanf("%f",&stu[count].score[1])==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(stu[count].score[1]<0||stu[count].score[1]>100)
        {
            fflush(stdin);
            printf("数据超出,请重新输入:");
            scanf("%f",&stu[count].score[1]);
        }
        printf("\nC语言(0~100):");  //输入C语言
        fflush(stdin);
        while(scanf("%f",&stu[count].score[2])==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(stu[count].score[2]<0||stu[count].score[2]>100)
        {
            fflush(stdin);
            printf("数据超出,请重新输入:");
            scanf("%f",&stu[count].score[2]);
        }
        printf("\n计算机基础(0~100):");  //输入计算机基础
        fflush(stdin);
        while(scanf("%f",&stu[count].score[3])==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(stu[count].score[3]<0||stu[count].score[3]>100)
        {
            fflush(stdin);
            printf("数据超出,请重新输入:");
            scanf("%f",&stu[count].score[3]);
        }
        printf("\n软件工程导论(0~100):"); //输入软件工程导论
        fflush(stdin);
        while(scanf("%f",&stu[count].score[4])==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(stu[count].score[4]<0||stu[count].score[4]>100)
        {
            fflush(stdin);
            printf("数据超出,请重新输入:");
            scanf("%f",&stu[count].score[4]);
        }
        stu[count].aver=(stu[count].score[0]+stu[count].score[1]+stu[count].score[2]+stu[count].score[3]+stu[count].score[4])/5.0;//计算平均成绩 
        count++;   //结构体数据数+1
        save(p);   //保存文件
        fflush(stdin);
        printf("是否继续录入:\n\n");
        printf("1.是 2.否\n");
        fflush(stdin);
        printf("\n请选择:");
        b:
        while(scanf("%d",&choose)==0)
        {
        	printf("您输入的格式错误,请重新输入:\n");
        	fflush(stdin);
        	goto b;
    	}
       switch(choose)
        {
            case 1:goto a;break;
            case 2:return;break;
            default:printf("没有该序号,请重新输入:");goto b;
        }
    }
    

    部分代码说明

     while(scanf("%s",stu[count].cla)==0)   //判断返回值,除去类型错误bug 
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        
      //在输入成绩时通常直接使用scanf,但当我们做项目时,为了具有一定的容错性,需要判断输入数据的类型和
      //判断scanf的返回值,如果直接使用scanf,输入其它类型的数据,程序将会炸掉,因此我们需要用这种形式
      //保证系统正常运行
    

    scanf的返回值具体解释见他人解释,地址如下:
    (https://blog.csdn.net/zhl254467014/article/details/44183567)

    为了方便其它功能的实现,在这里需要判断学号是否重复,保证学号的唯一性

     w:
        fflush(stdin);
        while(scanf("%lld",&stu[count].num)==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        for(i=0;i<count;i++)     //判断重复学号
        {
            if(stu[count].num==stu[i].num)
            {
                printf("已有该学号,请重新输入:\n");
                goto w;
            }
        }
    

    4.2成绩显示

    由于我想按照平均成绩排序的方式输出,因此直接调用该函数

    //*************************************
    //*************************************
    //学生成绩显示
    void print(struct Student stu[])
    {
        void sort(struct Student stu[]);//声明平均成绩排序函数
        system("cls");//清屏函数
        if(count==0) printf("\n您尚未录入学生信息,请返回菜单进行录入!\n");
        sort(p);    //排序函数
        return;
    }
    

    4.3成绩排序

    排序思想:
    成绩排序是将结构体中的数据按平均成绩进行排序,在本系统中,我将成绩排序非为按五门成绩排序和平均成绩排序,排序的思想是运用冒泡排序。在此功能中需注意的是排序时要将整组数据随着平均成绩一起改变,最后不能出现平均成绩与信息对应不上。其次在进行字符串互换的时候不能直接赋值号进行互换,要用strcpy函数进行复制,在这里只展示按平均成绩排序的代码,其它成绩排序与之相似

    //*************************************
    //*************************************
    //平均成绩排序
    void sort(struct Student stu[])
    {
        void save(struct Student stu[]);
        system("cls");
        fflush(stdin);
        char tempname[20];  //临时变量
        char tempcla[20];
        int i,j;
        long long int t1;
        float t;
        if(count==0) printf("\n\n您尚未录入学生信息,请返回菜单进行录入!\n\n");
        else
        {
            printf("\n成绩显示(按平均成绩排序)\n");   //冒泡排序
                for(i=0;i<count-1;i++)
                {
                    for(j=0;j<count-i-1;j++)
                    {
                        if(stu[j].aver<stu[j+1].aver)  //注意字符串的复制 
                        {
                            strcpy(tempcla,stu[j].cla);strcpy(stu[j].cla,stu[j+1].cla);strcpy(stu[j+1].cla,tempcla);
                            strcpy(tempname,stu[j].name);strcpy(stu[j].name,stu[j+1].name);strcpy(stu[j+1].name,tempname);
                            t1=stu[j].num;stu[j].num=stu[j+1].num;stu[j+1].num=t1;
                            t=stu[j].score[0];stu[j].score[0]=stu[j+1].score[0];stu[j+1].score[0]=t;
                            t=stu[j].score[1];stu[j].score[1]=stu[j+1].score[1];stu[j+1].score[1]=t;
                            t=stu[j].score[2];stu[j].score[2]=stu[j+1].score[2];stu[j+1].score[2]=t;
                            t=stu[j].score[3];stu[j].score[3]=stu[j+1].score[3];stu[j+1].score[3]=t;
                            t=stu[j].score[4];stu[j].score[4]=stu[j+1].score[4];stu[j+1].score[4]=t;
                            t=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=t;
    
                        }
                    }
    
                }
                printf("************************************************************************************************************\n");
                printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
                printf("************************************************************************************************************\n");
                for(i=0;i<count;i++)
                    printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
        save(p);   //保存文件
        }
        system("pause");
        return;
    }
    

    4.4成绩查找

    设计思想:
    成绩查找需要实现的是按学号和姓名查找到学生的所有信息,然后打印出来。该功能的思想是输入学号或姓名,然后在循环体中对结构体进行遍历,找到所查到的结构体的下标值,然后将该下标值对应学生的信息打印出来。按照姓名查询时,判断字符串是否相等需要用strcmp函数。在循环体中对结构体进行遍历的时候,找到的时候,可以用break跳出循环,提高效率。

    流程图如下:

    search

    代码展示

    //*************************************
    //*************************************
    //按学号查询
    void findnum(struct Student stu[])
    {
        int i;
        int searchindex=-1;  //定义下表值 
        long long int searchnum;
        fflush(stdin);
        printf("\n请输入查询成绩的学生学号:");
        scanf("%lld",&searchnum);
        for(i=0;i<count;i++)
        {
            if(searchnum==stu[i].num)
            {
                system("cls");
                searchindex=i;
                printf("************************************************************************************************************\n");
                printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
                printf("************************************************************************************************************\n");
                printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
                break;  //找到后跳出 
            }
        }
        if(searchindex==-1)
            printf("\n很抱歉,没有找到该学生的学号!\n\n");
        printf("\n按任意键返回成绩查询\n\n");
        system("pause");
        return;
    }
    //*************************************
    //*************************************
    //按姓名查询
    void findname(struct Student stu[])
    {
        int i;
        char searchname[20];
        int searchindex=-1;
        fflush(stdin);
        printf("\n请输入查询成绩学生的姓名:\n");
        scanf("%s",searchname);
        for(i=0;i<count;i++)  //循环寻找姓名
        {
            if(strcmp(searchname,stu[i].name)==0)
            {
                system("cls");
                searchindex=i;
                printf("************************************************************************************************************\n");
                printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
                printf("************************************************************************************************************\n");
                printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
                break;//找到跳出
            }
        }
        if(searchindex==-1)
            printf("\n很抱歉,没有找到该学生的姓名!\n\n");
        printf("\n按任意键返回成绩查询\n\n");
        system("pause");
        return;
    }
    //*************************************
    //*************************************
    //成绩查询
    void find(struct Student stu[])
    {
        if(count==0)
        {
            printf("\n\n您尚未录入学生信息,请返回菜单进行录入!\n\n");
            system("pause");
            return;
        }
        int choose;
        system("cls");
        fflush(stdin);
        choose:   //成绩查询页面菜单
        printf("\n\t\t\t\t\t\t  成绩查询\n\n");
        printf("\t\t\t\t\t*****************************\n\n");
        printf("\t\t\t\t\t |1.按学号查找 2.按姓名查找|\n\n");
        printf("\t\t\t\t\t |3.全部显示   4.返回菜单  |\n\n");
        printf("\t\t\t\t\t*****************************\n");
        printf("\t\t\t\t\t\n请输入查询方式:");
        a:
        while(scanf("%d",&choose)==0)
        {
            printf("输入格式有误,请您重新输入:");
            fflush(stdin);
        }
        switch(choose)
        {
    	    case 1:
    	        findnum(p);
    	        system("cls");
    	        goto choose;
    	        break;
    	    case 2:
    	        findname(p);
    	        system("cls");
    	        goto choose;
    	        break;
    	    case 3:
    	        print(p);
    	        system("cls");
    	        goto choose;
    	        break;
    	    case 4:
    	        printf("\n按任意键返回菜单!\n\n");
    	        system("pause");
    	        return;
    	    default:
    	        printf("没有该序号,请您重新输入:");goto a;
        }
    }
    

    4.5成绩修改

    该功能与录入成绩功能相似,成绩修改是对结构体中的信息进行修改,首先找到需要修改同学结构体的下标值,然后对该下标值对应的信息进行覆盖修改,该信息修改的录入与成绩录入功能的录入相同,同样需要注意与成绩录入时的漏洞。过多的不说了,直接上代码,依据我的需求,代码较多,仅供参考

    ******************************
    //修改成绩
    void change(struct Student stu[])
    {
        void save(struct Student stu[]);
        int i,j;
        int choose;
        long long int searchnum,tempnum;
        int searchindex=-1;
        if(count==0)
        {
            printf("\n\n您尚未录入学生信息,请返回菜单进行录入!\n\n");
            system("pause");
            return;
        }
        a:
        system("cls");
        printf("\n修改成绩!\n\n");
        fflush(stdin);
        printf("************************************************\n");
        printf("\n请输入修改学生的学号:(按-1返回菜单)");
        scanf("%lld",&searchnum);
        fflush(stdin);
        if(searchnum==-1)
        {
            printf("\n按任意键返回菜单!\n\n");
            system("pause");
            return;
        }
        system("cls");
        for(i=0;i<count;i++)
        {
            if(searchnum==stu[i].num)
            {
                searchindex=i;
                printf("\n该学生信息:\n");  //修改成绩页面菜单
                printf("************************************************************************************************************\n");
                printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
                printf("************************************************************************************************************\n");
                printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
                printf("************************************************\n");
                printf("|1.修改班级\t       2. 修改姓名            |\n");
                printf("|3.修改学号\t       4. 修改高数            |\n");
                printf("|5.修改英语\t       6. 修改C语言           |\n");
                printf("|7.修改计算机基础      8. 修改软件工程导论    |\n");
                printf("|9.返回菜单\t                              |\n");
                printf("************************************************\n");
                printf("请选择修改的信息:");
                choose:
                while(scanf("%d",&choose)==0)
                {
                    printf("输入格式有误,请您重新输入:");
                    fflush(stdin);
                }
                switch(choose)
                {
    	            case 1:
    	                fflush(stdin);
    	                printf("请修改班级:");
    	                while(scanf("%s",stu[i].cla)==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(strlen(stu[count].cla)>10)  //判断字符长度
    	                {
    	                    printf("班级输入不合理,请重新录入:");
    	                    fflush(stdin);
    	                    scanf("%s",stu[count].cla);
    	                }
    	                break;
    	            case 2:
    	                fflush(stdin);
    	                printf("请修改姓名:");
    	                while(scanf("%s",stu[i].name)==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(strlen(stu[count].name)>10)  //判断字符长度
    	                {
    	                    printf("班级输入不合理,请重新录入:");
    	                    fflush(stdin);
    	                    scanf("%s",stu[count].name);
    	                }
    	                break;
    	            case 3:
    	                fflush(stdin);
    	                printf("请修改学号:");
    	                w:
    	                while(scanf("%lld",&stu[i].num)==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                tempnum=stu[i].num;
    	                stu[i].num=0;
    	                for(j=0;j<count;j++)
    	                {
    	                    if(tempnum==stu[j].num)
    	                    {
    	                        printf("已有该学号,请重新输入:\n");
    	                        goto w;
    	                    }
    	                }
    	                stu[i].num=tempnum;
    	                break;
    	            case 4:
    	                fflush(stdin);
    	                printf("请修改高数:");
    	                while(scanf("%f",&stu[i].score[0])==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(stu[i].score[0]<0||stu[i].score[0]>100)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                    scanf("%f",&stu[i].score[0]);
    	                }
    	                break;
    	            case 5:
    	                fflush(stdin);
    	                printf("请修改英语:");
    	                while(scanf("%f",&stu[i].score[1])==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(stu[i].score[1]<0||stu[i].score[1]>100)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                    scanf("%f",&stu[i].score[1]);
    	                }
    	                break;
    	            case 6:
    	                fflush(stdin);
    	                printf("请修改C语言:");
    	                while(scanf("%f",&stu[i].score[2])==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(stu[i].score[2]<0||stu[i].score[2]>100)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                    scanf("%f",&stu[i].score[2]);
    	                }
    	                break;
    	            case 7:
    	                fflush(stdin);
    	                printf("请修改计算机基础:");
    	                while(scanf("%f",&stu[i].score[3])==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(stu[i].score[3]<0||stu[i].score[3]>100)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                    scanf("%f",&stu[i].score[3]);
    	                }
    	                break;
    	            case 8:
    	                fflush(stdin);
    	                printf("请修改软件工程导论:");
    	                while(scanf("%f",&stu[i].score[4])==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(stu[i].score[4]<0||stu[i].score[4]>100)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                    scanf("%f",&stu[i].score[4]);
    	                }
    	                break;
    	            case 9:
    	                printf("\n按任意键返回菜单!\n\n");
    	                save(p);
    	                return;
    	            default:
    	                printf("没有该序号,请您重新输入:");
    	                goto choose;
                }//switch结尾处 
                stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3]+stu[i].score[4])/5.0;
                printf("\n修改成功:\n");
                printf("************************************************************************************************************\n");
                printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
                printf("************************************************************************************************************\n");
                printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
            }//if结束处
        }//for结束处
        if(searchindex==-1)
        {
            printf("\n很抱歉,未能找到该学生,请重新输入学号!\n\n");
            system("pause");
            goto a;
        }
        save(p);
        system("pause");
        return;
    }
    

    4.6成绩删除

    设计思想:
    删除成绩是对结构体中的信息进行删除,其实对于C语言无法进行删除本身的意义,只是做出了一些假像,其实删除成绩就是覆盖成绩。删除成绩分为按学号删除和按姓名删除。删除成绩的思想为覆盖,首先通过结构体的遍历找到所删学生信息的下标值,然
    后从该下标值开始,后面一个学生信息覆盖前面一个学生的信息,最后最关键的一点是将全局变量count即结构体组数-1

    流程图如下:

    delete

    代码如下:

    //*************************************
    //*************************************
    //删除成绩
    void del(struct Student stu[])
    {
        void delnum(struct Student stu[]);
        void delname(struct Student stu[]);
        void save(struct Student stu[]);
        int choose;
        if(count==0)
        {
            printf("\n\n您尚未录入学生信息,请返回菜单进行录入!\n\n");
            system("pause");
            return;
        }
        choose:
        fflush(stdin);   //删除成绩页面菜单
        printf("\n\t\t\t\t\t     删除成绩\n\n");
        printf("\t\t\t\t********************************\n\n");
        printf(" \t\t\t\t\t   1.按学号删除\n\n\t\t\t\t\t   2.按姓名删除\n\n\t\t\t\t\t   3.返回菜单\n\n");
        printf("\t\t\t\t********************************\n\n");
        printf("请输入删除方式:");
        a:
        while(scanf("%d",&choose)==0)
        {
            printf("输入格式有误,请您重新输入:");
            fflush(stdin);
        }
        switch(choose)
        {
    	    case 1:
    	        delnum(p);
    	        save(p);
    	        system("cls");
    	        goto choose;
    	        break;
    	    case 2:
    	        delname(p);
    	        save(p);
    	        system("cls");
    	        goto choose;
    	        break;
    	    case 3:
    	        printf("\n按任意键返回菜单!\n\n");
    	        system("pause");
    	        return;
    	    default:
    	        printf("没有该序号,请您重新输入:");goto a;
        }
    
    }
    //*************************************
    //*************************************
    //按学号删除成绩
    void delnum(struct Student stu[])
    {
        void print(struct Student stu[]);
        int i,choose;
        int searchindex=-1;
        long long int deletenum;
        fflush(stdin);
        printf("请输入要删除学生的学号(按-1返回):");
        scanf("%lld",&deletenum);
        printf("是否确定删除:\n");
        fflush(stdin);
        printf("1.是 2.否\n");
        fflush(stdin);
        printf("请选择:");
        b:
        while(scanf("%d",&choose)==0)
        {
        	printf("您输入的格式错误,请重新输入:\n");
        	fflush(stdin);
        	goto b;
    	}
        switch(choose)
        {
            case 1:break;
            case 2:return;break;
            default:printf("没有该序号,请重新输入:");goto b;
        }
        if(deletenum==-1)
        {
            printf("\n按任意键返回删除成绩!\n\n");
            system("pause");
            return;
        }
        for(i=0;i<count;i++)
        {
            if(deletenum==stu[i].num)
            {
                searchindex=i;
                break;
            }
        }
        if(searchindex==-1)
        {
            printf("\n很遗憾,未能找到所要删除学生的学号!\n");
            printf("\n按任意键返回菜单\n\n");
            system("pause");
            return;
        }
        else  //查找信息后,每组数据往前进行覆盖
        {
            for(i=searchindex;i<count-1;i++)
            {
                strcpy(stu[i].cla,stu[i+1].cla);
                stu[i].num=stu[i+1].num;
                strcpy(stu[i].name,stu[i+1].name);
                stu[i].score[0]=stu[i+1].score[0];
                stu[i].score[1]=stu[i+1].score[1];
                stu[i].score[2]=stu[i+1].score[2];
                stu[i].score[3]=stu[i+1].score[3];
                stu[i].score[4]=stu[i+1].score[4];
                stu[i].aver=stu[i+1].aver;
            }
            count--;  //总数据组-1
        }
        if(count==0)
        {
            printf("\n目前没有学生信息,请返回菜单录入!\n\n");
            system("pause");
            return;
        }
        system("cls");  //删除后进行打印
        printf("\n删除成功!\n\n");
        printf("************************************************************************************************************\n");
        printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
        printf("************************************************************************************************************\n");
        for(i=0;i<count;i++)
             printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
        printf("\n按任意键返回菜单\n\n");
        system("pause");
        return;
    }
    //*************************************
    //*************************************
    //按姓名删除成绩
    void delname(struct Student stu[])
    {
        void print(struct Student stu[]);
        int i,choose;
        char tempname[10]={"-1"};
        int searchindex=-1;
        char deletename[20];
        fflush(stdin);
        printf("请输入要删除学生的姓名(按-1返回):");
        scanf("%s",deletename);
        printf("是否确定删除:\n");
        fflush(stdin);
        printf("1.是 2.否\n");
        fflush(stdin);
        printf("请选择:");
        b:
        while(scanf("%d",&choose)==0)
        {
        	printf("您输入的格式错误,请重新输入:\n");
        	fflush(stdin);
        	goto b;
    	}
    	switch(choose)
        {
            case 1:;break;
            case 2:return;break;
            default:printf("没有该序号,请重新输入:");goto b;
        }
        if(strcmp(deletename,tempname)==0)
        {
            printf("\n按任意键返回删除成绩!\n\n");
            system("pause");
            return;
        }
        for(i=0;i<count;i++)
        {
            if(strcmp(deletename,stu[i].name)==0)
            {
                searchindex=i;
                break;
            }
        }
        if(searchindex==-1)
        {
            printf("\n很遗憾,未能找到所要删除学生的姓名!\n");
            printf("\n按任意键返回菜单\n\n");
            system("pause");
            return;
        }
        else
        {
            for(i=searchindex;i<count-1;i++)
            {
                strcpy(stu[i].cla,stu[i+1].cla);
                stu[i].num=stu[i+1].num;
                strcpy(stu[i].name,stu[i+1].name);
                stu[i].score[0]=stu[i+1].score[0];
                stu[i].score[1]=stu[i+1].score[1];
                stu[i].score[2]=stu[i+1].score[2];
                stu[i].score[3]=stu[i+1].score[3];
                stu[i].score[4]=stu[i+1].score[4];
                stu[i].aver=stu[i+1].aver;
            }
            count--;
        }
        printf("\n");
        printf("\n删除成功!\n\n");
        if(count==0)
        {
            printf("\n目前没有学生信息,请返回菜单录入!\n\n");
            system("pause");
            return;
        }
        system("cls");
        printf("\n删除成功!\n\n");
        printf("************************************************************************************************************\n");
        printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
        printf("************************************************************************************************************\n");
        for(i=0;i<count;i++)
            printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
        printf("\n按任意键返回菜单\n\n");
        system("pause");
        return;
    }
    

    核心代码如下,请好好理解

    for(i=0;i<count;i++){
        if(deletenum==stu[i].num)
         {
              searchindex=i;
              break;
          }
     }
      //查找信息后,每组数据往前进行覆盖
     for(i=searchindex;i<count-1;i++)
      {
             strcpy(stu[i].cla,stu[i+1].cla);
             stu[i].num=stu[i+1].num;
             strcpy(stu[i].name,stu[i+1].name);
             stu[i].score[0]=stu[i+1].score[0];
             stu[i].score[1]=stu[i+1].score[1];
             stu[i].score[2]=stu[i+1].score[2];
             stu[i].score[3]=stu[i+1].score[3];
             stu[i].score[4]=stu[i+1].score[4];
             stu[i].aver=stu[i+1].aver;
        }
        count--;  //总数据组数-1
    
    

    4.7文件保存

    文件存储简要介绍:

    文件存储是将程序中的数据存储如磁盘中,生成文件。在我们没有进行保存之前,我们每次进入系统都要进行录入,如果数据很多,那么操作十分复杂。所有我们需要对数据进行存储。然后进入系统时进行导入,文件的存储分为两种方法,一种是十进制进行存储,另一种是二进制进行存储。这两种方式都可以对数据进行存储,但每种方式都有其的优点和缺点,对于第一种十进制存储,用fprintf函数对磁盘写入,它的优点是格式化输出,在磁盘中可查看数据,也可进行修改使用方便,容易理解,缺点是由于在输入时要将文件中的ASCII码转换为二进制形式在保存在内存变量中,在输出时又要将内存的二进制形式转换成字符,要花费较多时间。并且数据可被其他人查看和修改,在保存数据时需要进行进制转换,可能会造成数据错误。对于二进制存储,用fwrite函数对磁盘文件进行写,优点是fwrite函数可向文件写一个数据块,在读写时以二进制形式进行的。在向磁盘写数据时,直接将内存中一组数据原封不动、不加转换地复制到磁盘文件上,不需要进制转换,运行速度高。其缺点是生成二进制文件,信息是一堆乱码,但是该文件安全系数高,他人无法查看文件内容,对文件数据进行保护。

    我的文件是使用二进制存储
    具体代码如下:

    void save(struct Student stu[])
    {
        int i;
        FILE*fp;
        fp=fopen("student.bat","wb");
        for(i = 0; i < count; i++)
        {
            if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
                printf("file write error\n");
        }
        fclose(fp);
        printf("\n已保存至文件中\n\n");
    }
    

    鉴于有些人使用十进制文件,我这里也写了,代码如下:

    FILE *fp;
    int i;
    if((fp=fopen("student.txt","w"))==NULL)
    {
    	 printf("error");
    	exit(0);
    }
    for(i = 0; i < count; i++)
    fprintf(fp,"\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n",stu[i].cla,stu[i].name,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
    printf("save success!\n");
    fclose(fp);
    

    4.7文件保存

    简要概述
    文件导入是对磁盘中的数据导入进学生管理系统的结构体中,对数据进行使用。文件导入是与文件存储相对应,十进制导入对应十进制存储,二进制导入对应二进制存储。因此文件导入也分为两种,十进制导入用fscanf,二进制文件导入用fread

    这里同样展示两种方式
    首先是二进制

    //文件导入
    void read(struct Student stu[])
    {
        int i;
        FILE*fp;
        if((fp=fopen("student.bat","rb"))==NULL)
            return;
        for(i=0;i<1000;i++)
        {
            if(fread(&stu[i],sizeof(struct Student),1,fp)!=1)
            {
                if(feof(fp))
                {
                    fclose(fp);
                    goto a;
                }
                printf("file read error\n");
            }
            count++;  //存入一个,数据组数+1
        }
        fclose(fp);
        a:
        printf("\n导入文件已成功,祝您使用愉快!\n\n");
        printf("请按任意键进入页面菜单!\n\n");
        system("pause");
        return;
    }
    

    二进制形式

    while(num!=EOF){
    		   num=fscanf(fp,"%s %s %lld %f %f %f %f %f %f\n",stu[i].cla,stu[i].name,stu[i].num,
                     stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
    		    count++;  //存入一个,数据组数+1
    }
    	count--;
    

    4.8主函数代码

    主函数代码展示

    //*************************************
    //*************************************
    //主函数
    int main()
    {
        system("color 9E"); //设置背景颜色
        int i=4;
        char code[20]={'1','2','3','4','5','6'},password[20];
    	int x;
    	char c;
        //初始页面
        time_t timep;    //系统时间 
    	struct tm *p_1;
    	time (&timep);
    	p_1=gmtime(&timep);
    	printf("\t\t\t\t\t\t  当前时间%02d时%02d分%\n",8+p_1->tm_hour,p_1->tm_min); 
    	printf("\t\t\t\t\t\t   %d年%02d月%02d日\n",1900+p_1->tm_year,1+p_1->tm_mon,p_1->tm_mday);
        printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
        printf("\t★\t\t\t\t\t有朋自远方来,不亦乐乎! \t\t\t\t\t★\n\n");
        printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
        printf("\t★\t\t\t\t\t 学 生 管 理 系 统\t\t\t\t\t\t★\n\n");
        printf("\t★\t\t\t  制作者:Mr.Wang 专业:软件工程1801 学号:************\t\t\t\t★\n\n");
        printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
        printf("\t★\t\t\t  欢迎使用软件工程18-01的学生管理系统,祝您使用愉快! \t\t\t\t★\n\n");
        printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n"); 
    	printf("请输入六位登陆密码!\n");
    	q:
    	x=0;
    	while(x<6 && c!=13)
    	{
    		c=getch();
    		if(c!=13)
    		putchar('*');
    		password[x++]=c;
    	}
    	password[x]='\0';
        if(strcmp(password,code)!=0)
        {
        	fflush(stdin);
            printf("\n输入密码有误,您还有%d次机会,请重新输入:",i--);
            if(i==-1)
            {
                exit(0);
            }
            goto q;
        }
        read(p); //导入文件
        system("cls");    //清屏
        //页面菜单
        menu:
        system("cls");
        time (&timep);
    	p_1=gmtime(&timep);
        printf("\t\t\t\t\t\t   当前时间%02d时%02d分%\n",8+p_1->tm_hour,p_1->tm_min); 
    	printf("\t\t\t\t\t\t    %d年%02d月%02d日\n",1900+p_1->tm_year,1+p_1->tm_mon,p_1->tm_mday);
        printf("\n");
        printf("\t\t\t\t\t\t    页  面  菜  单\n");
        printf("\n");
        printf("\t\t★————————————————————————————————————————★\n\n");
        printf("\t\t\t   | 1. 成绩录入\t\t2. 成绩显示\t\t3. 各科均分  |\n\n");
        printf("\t\t\t   | 4. 成绩排序\t\t5. 成绩查找\t\t6. 信息修改  |\n\n");
        printf("\t\t\t   | 7. 删除成绩\t\t8. 成绩分段\t\t0. 退出系统  |\n\n");
        printf("\t\t★————————————————————————————————————————★\n");
        printf("\t\t\t\t\t\t          * \n");
        printf("\t\t\t\t\t\t         *** \n");
        printf("\t\t\t\t\t\t        ***** \n");
        printf("\t\t\t\t\t\t       *******\n");
        printf("\t\t\t\t\t\t      *********\n");
        printf("\t\t\t\t\t\t     *********** \n");
        printf("\t\t\t\t\t\t ********************\n");
        printf("\t\t\t\t\t\t  ******************\n");
        printf("\t\t\t\t\t\t   ******* ********\n");
        printf("\t\t\t\t\t\t  *******   ********\n");
        printf("\t\t\t\t\t\t ******       *******\n");
        printf("\t\t\t\t\t\t******          ******\n");
        printf("请选择相应序号:");
        int choose;
        int a; 
        w:
        while(scanf("%d",&choose)==0)
        {
            printf("格式错误,请重新输入:");
            fflush(stdin);
        }
        switch(choose)
        {
        	case 1:   //成绩录入
    	        system("cls");
    	        printf("学生成绩录入\n");
    	        input(p);
    	        goto menu;
    	    case 2:  //成绩显示和排序
    	    	system("cls");
    	        printf("学生成绩显示\n");
    	        print(p);
    	        goto menu;
    	    case 3:  //均科成绩 
    	    	system("cls");
    			average(p);
    			goto menu;
    	    case 4:  //成绩排序
    	    	 system("cls");
    	        projectsort(p);
    	        goto menu;
    	    case 5:  //成绩查找
    	        system("cls");
    	        find(p);
    	        goto menu;
    	    case 6:  //成绩修改
    		    system("cls");
    	        change(p);
    	        goto menu;
    	    case 7:  //成绩删除
    		    system("cls");
    	        del(p);
    	        goto menu;
    	    case 8:  //成绩分段
    		    system("cls");
    	        section(p);
    	        goto menu;
    	    case 0: //退出系统
    	        fflush(stdin);
    	        printf("\n是否继续退出:\n");
    	        printf("\n1. 是 2. 否\n\n");
    	        back:
    	        printf("请选择:");
    	        while(scanf("%d",&a)==0)
    	        {
    	        	fflush(stdin);
    	        	printf("您输入格式有误,请重新输入:");
    			}
    	        if(a==1)
    	        {
    	            system("cls");
    	            //心形图案 
    	            float y, x, b;
    	            for (y = 1.5f;y > -1.5f;y -= 0.1f)
    	            {
    	                for (x = -1.5f;x < 1.5f;x += 0.05f)
    	                {
    	                    b = x*x + y*y - 1;
    	                    putchar(b*b*b - x*x*y*y*y <= 0.0f ? '*' : ' ');
    	                }
    	                putchar('\n');
    	            }
    	            Sleep(1000);  //休眠 
    	            printf("欢迎下次继续使用本产品!\n");
    	            printf("正在退出,请稍后.");
    	            Sleep(500);
    	            printf(".");
    	            Sleep(500);
    	            printf(".");
    	            Sleep(500);
    	            printf(".");
    	            Sleep(500);
    	            printf(".");
    	            Sleep(500);
    	            printf(".");
    	            Sleep(500);
    	            exit(0);
    	        }//if(a==1)结束处 
    	        if(a==2)goto menu;
    	        if(a!=1||a!=2)printf("输入有误,重新输入:\n");goto back;
    	    default:
    	    	printf("没有该序号!请重新输入:");
            	goto w;
    	}//switch结束处 
        return 0;
    }
    

    4、效果展示

    login
    inputprintfsortchangeexit

    退出时的效果可以自行添加,这里我在csdn上找的时一个心型图案,该图案设计者链接如下:

    (https://blog.csdn.net/stone15165/article/details/80260580)

    源码在github上:https://github.com/Mr00wang/C-language.git
    以上是该学生管理系统的全部内容,上面没有对各科均分和成绩分段进行展述,如有问题请留言,谢谢!

    展开全文
  • 本次毕业设计根据学生在校的基本情况,分析现状各个学校的基本需求情况,进行设计的一款学生成绩管理系统,通过本系统可以方便的管理学校的基本情况,包括院系管理,考试成绩管理等等,基本情况的管理。本次设计包括...

    摘 要

    本次毕业设计根据学生在校的基本情况,分析现状各个学校的基本需求情况,进行设计的一款学生成绩管理系统,通过本系统可以方便的管理学校的基本情况,包括院系管理,考试成绩管理等等,基本情况的管理。本次设计包括 3 个角色,一个是系统的管理员,还有就是系统的教师以及学生,不同的角色具有不同的权限,管理员对整个系统进行维护,教师进行整个教务系统的维护,学生进行个人信息以及成绩等相关问题的维护。
    本次毕业设计采用 SpringBoot 技术,MySql 数据库,设计一款学生成绩管理系统, 目的是为了解决学生的管理以及学生考试和成绩管理的问题。通过本系统教务管理人员可以更方便的进行学生的管理。
    关键词:学生成绩管理系统;SpringBoot;MySql

    Abstract

    This graduation design analyzes the basic needs of each school based on the basic situation of the school, analyzes the basic needs of each school, and designs a basic information management system for students. Through this system, you can easily manage the basic situation of the school, including department management , Exam score management, etc., basic situation management. This design includes 3 roles, one is the system administrator, and the system is the teacher and the student. Different roles have different permissions. The administrator maintains the entire system, the teacher maintains the entire educational system, and the student performs Maintenance of personal information and related issues.
    This graduation design uses JavaWeb technology, MySql database, design a student information management system, the purpose is to solve the problems of student management and student examination and score management. Through this system, the teaching management personnel can conveniently manage the students.

    Key Words:Score entry form entry system; JavaWeb; MySql

    目 录

    第 1 章 绪论 1
    1.1开发背景 1
    1.2系统描述 1
    1.3开发环境和使用工具 1
    1.3.1开发语言 Java 简介 2
    1.3.2数据库 MySql 简介 2
    1.3.3开发工具 IDEA 简介 2
    1.3.4服务器 Tomcat 简介 2
    第 2 章 系统分析 4
    2.1可行性分析 4
    2.1.1经济可行性分析 4
    2.1.2技术可行性分析 4
    2.1.3成本收益可行性分析 4
    2.1.4后期开发及维护可行性分析 4
    2.2需求分析 4
    2.2.1业务需求 4
    2.2.2用户需求 5
    第 3 章 概要设计 7
    3.1系统功能模块设计 7
    3.2数据库设计 7
    3.2.1数据库概念模型设计 7
    3.2.2数据库表结构设计 10
    第 4 章 系统的设计与实现 14
    4.1管理员端实现 14
    4.1.1登录页面 14
    4.1.2学生信息维护 14
    4.1.3教师信息维护 15
    4.1.4基础信息维护 15
    4.2教师端实现 16
    4.2.1考试信息维护 16
    4.2.2成绩登记 16
    4.2.3教师通讯录 17
    4.2.4个人信息维护 17
    4.3学生端实现 18
    4.3.1成绩查看 18
    4.3.2班级通讯录 18
    4.3.3个人信息维护 19
    第 5 章 系统测试 20
    5.1测试介绍 20
    5.2代码测试 20
    5.3测试概述 20
    5.4单元测试 20
    5.4.1注册测试 21
    5.4.2登录测试 22
    5.5集成测试 23
    结论 24
    参考文献 25
    致谢 26

    第 1 章 绪论

    1.1开发背景
    随着科技的发展,基本上所有的具有一定数据的机构都开始使用计算机数据库来做管理,几乎所有的学校也都已经在使用计算机管理数据的机制,大大的减小了学校学生成绩管理的工作量。通过本次设计,应该达到理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。
    开发学生成绩管理系统可以使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,以及国家各部门关于信息化的步伐,使各项管理更加规范化。目前,学校工作繁杂、资料重多,管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。因此,开发一套适和大众的、兼容性好的系统是很有必要的。

    1.2系统描述
    本次开发也具有很重要的实际意义,它能有效的帮助学校解决现有教学教务中存在的对学生成绩信息进行录入、修改、删除、查询操作问题。使得教师、学生可以在自己的权限内对信息进行访问,修改及查询。简化现有系统的流程是指更加便捷合理易操作。尽可能实现无纸化管理,以解决手工耗时巨大、效率很低的问题。
    通过本系统可以方便的管理学校的基本情况,包括院系管理,考试成绩管理等等, 基本情况的管理。本次设计包括 3 个角色,一个是系统的管理员,还有就是系统的教师以及学生,不同的角色具有不同的权限,管理员对整个系统进行维护,教师进行整个教务系统的维护,学生进行个人信息以及成绩等相关问题的维护。

    1.3开发环境和使用工具
    页面使用超文本语言 JSP 结合 CSS 层叠样式表与脚本语言 JavaScript 设计完成。后台主要使用 Java 语言并结合 SQL 语句。使用框架为 SSM,即 Spring,SpringMVC, MyBatis。
    JavaScript 是一个脚本语言,是在浏览器中解释执行的一个语言,依赖浏览器而运行,现在的 JavaScript 最新的版本已经是 ESCM6 版本,js 是一个很灵活的语言,前端页面的一些校验,提醒等等都可以通过 js 来完成,同时 js 是一个基于对象的脚本语言,

    它的安全性同时也是非常的好,不能访问本地的文件,同时也不允许将数据直接写入到数据库,还有就是 js 是一个可跨平台的语言,现在无论是 pc 端还是移动端的开发都已经离不开 js 语言。
    1.3.1开发语言 Java 简介
    Java 编程语言是一种全新的开发语言,它是由 Sun Microsystems 发布的,具有面向对象的特点,而且运行需要.framework(类库)提供支持,Java 编程语言和 Java 语言有很多的类似特点,如在使用,编译语句及在接口继承上等。Java 语言同时结合了 C 和C++语言的优点,回避了他们的不足,具有高效稳定的特点,如:Java 没有有关宏的使用概念,而且 Java 还结合了 VB 等语言的面向对象和 C++高效运行等特点,由此 Java 已成为网站开发的首选。

    1.3.2数据库 MySql 简介
    MySql 是一个小型的数据库,安装包只有几十兆,相比 oracle 等大型数据库体积要小的多。MySql 数据库是 Microsoft 发布的一个新的数据存储平台,它管理的数据量超出了时间和位置的限制。 数据库还可以存储在半结构化或结构化数据中。 MySql 提供了多种用于查找,查询和分析数据的集成服务,但由于数据存储在服务器上,因此无法控制特定于数据存储库的地址。MySql 支持使用 Eclipse 开发的程序处理数据,MySql 提供了一组高效可靠的数据存储平台,满足几乎所有格式的数据存储要求。

    1.3.3开发工具 IDEA 简介
    IDEA 全称 IntellJ IDEA,和 eclipse 相似,是 java 编程中公认最好的 IDE,提供了大量的智能工具,例如语法提示、代码分析、格式化等。
    IDEA 最核心的特色是它的快捷键,利用快捷键可以极大提高开发效率。
    IDEA 的特点:沉浸式的开发体验(根本停不下来),超强快捷键体系,智能的代码助手,全栈开发环境,丰富的模板支持。

    1.3.4服务器 Tomcat 简介
    Tomcat 是 Apache Software Foundation 项目的中心项目,由 Apache,Sun 以及其他公司和个人开发。在 Sun 的帮助和支持下,Tomcat 始终反映最新的 Servlet 和 JSP 规范。 Tomcat 技术具有先进,稳定的性能,而且免费,因此受到 Java 爱好者的喜爱,得到一部分软件开发者的认可,成为现在比较流行的 Web 应用服务器。许多程序员都喜欢Tomcat。Tomcat 在运行时使用的系统资源更少,可扩展性更高,并且支持开发应用程序系统中常用的功能。

    1.4研究意义
    在学校建设校园网的环境下,学生成绩管理系统是作为学校校园网的重要组成部分。一个功能齐全的学生成绩管理系统不但能够让高层管理者能够更加方便快捷的对所需要的工作进行管理,降低了工作难度,提高了工作效率,同时还为学生和教师提供了极大的方便。学生成绩系统主要是为了提供给学校管理者和学校老师来对学校的工作管理和安排、学生进行查询等方面的操作,能够对学生的成绩进行更加系统高效的管理。根据学生成绩管理系统把学校中各个班级的学生的成绩进行汇总和分析,能够为学校工作人员和教师对学生成绩的分析、管理和查询提供一个平台基础,使学校对学生的成绩信息能够更加全面的了解分析,从而达到提高学生成绩管理统计高效率和提高学校教育教学成绩的目的。

    第 2 章 系统分析

    2.1可行性分析

    2.1.1经济可行性分析
    本次的开发,无需要购买一些额外的器材。只需要一台笔记本电脑即可,所有需要用到的软件都可以到网络上下载,另外需要的参考资料可以到学校的图书馆以及网络上查找,所以本次开发在经济上是可行的。

    2.1.2技术可行性分析
    本网站是基于 JavaWeb,采用现在流行的 SSM 框架实现的,使用的语言、技术等在现在比较流行。数据库使用的是 MySql 数据库,在企业或个人应用中比较常见,由于其体积小、优化了 SQL 查询算法、有效地提高了查询速度,因此方便使用。页面主体框架搭建使用 bootstrap,实现响应式页面,设计的界面简洁大方。总体难度不大,技术有可行性。

    2.1.3成本收益可行性分析
    本系统开发成本不高,花费一个多月在空闲时间完成。开发环境,使用的工具都是免费的。前期投入较少,项目投入运行后开始或许收支不平衡,但随着网站的运营,后期收益是可观的。

    2.1.4后期开发及维护可行性分析
    本次毕业设计的代码的耦合性非常的低,可以方便后期的维护。后期还可以添加个人中心模块。采用的技术是目前的主流技术,如开发语言 Java,框架 SSM,大多数开发人员对此比较熟悉,并且系统设计较合理,便于后期添加功能与维护。

    2.2需求分析

    2.2.1业务需求
    当信息在软件中移动时,将被一系列“变换”所修改。数据流图是一种图形化技术, 它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何的具体物理元素,它只是描绘信息在软件中流动和被处理的情况。数据流图只需要考虑系统必须完成的基本逻辑功能,完全不考虑怎样具体的实现这些功能。
    根据系统功能描述,对系统画数据流图如下:在这里插入图片描述
    图 2-1 系统数据流图

    2.2.2用户需求
    1、学生基本情况录入模块:
    主要功能用来对学生的成绩进行收集和录入。在学生信息保存在系统中的前提下, 成绩录入需要输入学生资料,比如班级,学号,姓名。在准确录入学生资料后,就可以对该学生的各科成绩进行录入。该学生各科成绩录入成功后,系统会提示是否继续进行操作,如果想继续录入学生成绩就输入 y,不想再输入学生成绩的话就输入 n,再输入 n 之后,系统返回到主菜单。
    2、按学生学号查找并显示学生资料模块:
    主要功能是用来查找学生资料。在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,这样系统就会显示该学生资料和各科成绩等信息 。
    3、按学生学号计算基点成绩,计算规则参考长春工业大学学分基点计算规则。
    4、按照某门课程学生成绩进行排列模块:
    主要功能是用来对学生的某门课程成绩进行排序。在系统保存学生资料,成绩的前提下,使用此功能可以对学生的资料按成绩进行排序,这样方便对学生成绩进行排序, 对某一分数段的学生有多少、有谁一目了然。
    5、按姓名查找,删除该学生资料模块:
    主要功能是用来删除学生资料,在系统保存学生资料的前提下,想删除某学生的资料,可以输入学生姓名,系统查找该学生资料后,就可以删除了。由于学生辍学,毕业等原因,及时对系统进行更新,删除一些没用的信息,可以使系统更加优化
    6、储存学生资料并退出系统模块:

    主要功能是用来储存学生资料。在对系统进行一系列操作,比如添加、删除、修改学生资料后,对系统的最新操作进行保存,及时更新系统,方便下一次第 3 章 概要设计

    3.1系统功能模块设计
    本次毕业设计一共有 3 个角色,分别是管理员,教师,以及学生,3 个角色,下面分表从 3 个角色进行分析本次毕业设计的结构,见下图 3-1.在这里插入图片描述
    论文下载地址:请点击

    展开全文
  • 基于php的学生成绩管理系统

    千次阅读 2020-11-02 10:09:17
    本课题开发的是一个学生成绩管理系统,其主要功能是完成对学生成绩的基本管理,主要模块包括:用户管理模块,学生信息模块,课程模块,成绩管理模块,管理员管理模块。 学生成绩管理作为一所高校对学生评价的一个...
  • 学生成绩管理系统为C#实验,用vs2008平台实现,包含了本实验的实验报告。实现了学生成绩管理的基本功能,界面OK,操作方便,且实现了批操作处理
  • 学生成绩管理系统sql实现

    千次阅读 2020-09-15 20:33:01
    学生成绩管理系统——SQL代码部分 create table student (s_name char(25) not null, s_sex char(10) not null default ‘男’, s_id int not null , c_name char (25) constraint st_xh foreign key references ...
  • 基于Web的学生成绩管理系统

    千次阅读 2021-03-05 20:07:33
    本次课程设计课题为学生成绩管理系统,该学生成绩管理系统主要包括前台用户界面的开发和后台数据库的开发,重点在于后台数据库的开发。要求建立起完整性强、数据一致性和数据安全性好的数据库。在前端用户界面的开发...
  • 由于近年来很多学校都在扩大规模,在校学生数量甚至破万,倘若单一的采用人工记录成绩的方法明显已经显得力不从心,因此我们需要电脑来帮助我们进行管理学生成绩,这就是学生成绩管理系统。 本系统基于SSM(Spring+...
  • 学生成绩管理系统-python

    千次阅读 2020-06-25 18:36:03
    ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ ヾ(≧▽≦*)o ~hello ✨----欢迎使用成绩管理系统-----✨ ✨-+------------------------+-✨ (*^▽^*)按下对应的键位即可~ ✨ 1.进入信息管理模块 ✨

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,565
精华内容 5,826
关键字:

学生成绩管理系统的意义