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

    千次阅读 2021-01-25 10:17:15
    在日常生活中,学生成绩信息管理是每个老师都不可或缺的,总分的统计,平均分的计算等,这些教学任务附带的工作往往给教师带来很大的负担,为了减轻教师上课负担,方便学生和老师的课堂教学,对当前学生成绩信息...

    <学生成绩管理系统设计>

    • 选题背景

    在日常生活中,学生成绩信息的管理是每个老师都不可或缺的,总分的统计,平均分的计算等,这些教学任务附带的工作往往给教师带来很大的负担,为了减轻教师上课负担,方便学生和老师的课堂教学,对当前学生成绩信息相关内容设计专门的软件进行管理,减轻教师管理学生成绩的工作量,在日常教学中具有积极的实践意义。

    • 系统说明
    1. 开发工具及环境

    本系统在windowspc机上使用QT+VS的模式进行相关的系统功能设计,使用一种轻量级的数据库sqllite进行数据的存储。

    1. 开发的环境

    软件:VS2019 QT5SQlite Expert personal

    硬件:pc机一台

    1. 功能规划:

    编写学生成绩管理系统:有100个以上学生,每个学生至少有2门以上课程成绩(尽可能实现可以增减课程数),能够统计平均成绩,不及格、及格、优、良、中所占比例。实现界面必须图形界面,功能用菜单或按钮形式,输入界面用对话框形式,数据保存在文件或数据库。角色分管理员、老师与学生。

    • 系统设计
    1. 模块划分

     

    登录模块:设计登陆界面,验证登录用户,可以根据密码或者用户名的错误输出做出提示。

    成绩管理模块:实现对学生成绩的增删改查功能,可以实现模糊查询成绩信息。

    成绩分析模块:实现对成绩优,良,中,及格,不及格比例的统计,求各科的平均分和个人总的平均分。

    用户管理:实现对登录用户信息的增,删,改,查功能。

     

    1. 系统流程图

     

    1. 数据库设计

    用户表信息表:

     

    成绩表信息表:

     

    • 系统实现

    Sqlclass.cpp代码:

    #include "mysqlclass.h"

     

    SqliteDBAOperator::SqliteDBAOperator()

    {

        QSqlDatabase database;

        if (QSqlDatabase::contains("qt_sql_default_connection"))

        {

            database = QSqlDatabase::database("qt_sql_default_connection");

        }

        else

        {

          

            db = QSqlDatabase::addDatabase("QSQLITE");

          

            QString dbname = QString("C:\\Users\\Administrator\\Desktop\\wang.db");

            db.setDatabaseName(dbname);

        }

    }

     

     

    SqliteDBAOperator::~SqliteDBAOperator()

    {

        db.close();

    }

     

     

    bool SqliteDBAOperator::OpenDb(void)

    {

        //打开数据库

        if (db.open() == false) {

            qDebug() << "连接数据库失败!";

            return false;

        }

        else

        {

     

            qDebug() << "连接数据库成功!";

            return true;

        }

     

      

      

    }

     

    //判断表是否存在

    bool SqliteDBAOperator::IsTaBexists(QString& Tabname)

    {

        QSqlDatabase db = QSqlDatabase::database();

        if (db.tables().contains(Tabname))

        {

            return true;

        }

        return false;

    }

     

    void SqliteDBAOperator::addNewcolumn(QString& columnNameAndproperty)

    {

    }

     

    //查询数据

    QString SqliteDBAOperator::queryTable(QString& str)

    {

        QSqlQuery sql_query;

        QString select_sql = str;

     

     

        if (!sql_query.exec(select_sql))

        {

            qDebug() << sql_query.lastError();

            return  "错误的结果!";

        }

        else

        {

            while (sql_query.next())

            {

     

                QString pass = sql_query.value(0).toString();

                qDebug() << "查询结果为:" << pass;

                return pass;

     

            }

        }

     

    }

     

    //插入记录

    void SqliteDBAOperator::singleinsertdata(QString str1)

    {

        QSqlQuery query;

        if (!query.exec(str1))

        {

            qDebug() << query.lastError();

        }

        else

        {

     

            qDebug() << "数据插入成功!";

        }

     

     

     

     

    }

     

    //数据删除函数

    void SqliteDBAOperator::deletedata(QString str)

    {

     

        QSqlQuery query;

     

        if (!query.exec(str))

        {

            qDebug() << query.lastError();

        }

        else

        {

            qDebug() << "数据删除成功!";

        }

     

     

     

       

    }

     

     

     

    void SqliteDBAOperator::closeDb(void)

    {

        db.close();

        qDebug() << "数据库关闭!";

    }

     

     

     

    QString  pingfen(float x//计算所属评分等级

    {

        QString a;

     

        if (x >= 60 && x < 70)

        {

     

            a = "及格";

     

        }

        else if (x >= 70 && x < 80)

        {

            a = "中等";

     

        }

        else if (x >= 80 && x < 90)

        {

            a = "良好";

     

        }

        else if (x >= 90 && x <= 100)

        {

     

            a = "优秀";

        }

        else

        {

            a = "不及格";

        }

        return a;

     

     

    }

     

    界面按钮函数实现代码:

    #include "QtWidgetsApplication.h"

    #include "mysqlclass.h"

    #include <QMessageBox>

    #include "QtSql/QsqlQueryModel"

    #include "QDebug"

    #include "QModelIndex"

     

     

    QString globaldata; //声明一个全局变量用于窗体间传值

    int globaldata2=1;

     

     

    //用消息盒子提示

    SqliteDBAOperator sqldatabase = SqliteDBAOperator();

     

     

    void  mainwindow::tableclick()               //主界面tableview选中函数

    {

     

        if (globaldata2 ==2)

        {

     

            int curRow = ui.tableView->currentIndex().row();//选中行行号

            QAbstractItemModel* modessl = ui.tableView->model();

     

     

            QModelIndex indextemp = modessl->index(curRow, 0);

            QString datatemp = modessl->data(indextemp).toString();

            ui.lineEdit_user->setText(datatemp);

     

     

            indextemp = modessl->index(curRow, 1);

            datatemp = modessl->data(indextemp).toString();

            ui.lineEdit_pass->setText(datatemp);

     

            indextemp = modessl->index(curRow, 2);

            datatemp = modessl->data(indextemp).toString();

            if (datatemp == "s")

            {

     

                ui.radioButton_2->setChecked(true);

     

            }

            else  if(datatemp=="m")

            {

                ui.radioButton_3->setChecked(true);

            }

            else

            {

                ui.radioButton->setChecked(true);

            }

     

     

     

          

     

        }

        else

        {

            int curRow = ui.tableView->currentIndex().row();//选中行行号

            QAbstractItemModel* modessl = ui.tableView->model();

     

     

            QModelIndex indextemp = modessl->index(curRow, 0);

            QString datatemp = modessl->data(indextemp).toString();

            ui.lineEdit->setText(datatemp);

     

     

            indextemp = modessl->index(curRow, 1);

            datatemp = modessl->data(indextemp).toString();

            ui.lineEdit_2->setText(datatemp);

     

            indextemp = modessl->index(curRow, 2);

            datatemp = modessl->data(indextemp).toString();

            ui.lineEdit_3->setText(datatemp);

     

            indextemp = modessl->index(curRow, 3);

            datatemp = modessl->data(indextemp).toString();

            ui.lineEdit_4->setText(datatemp);

     

            indextemp = modessl->index(curRow, 4);

            datatemp = modessl->data(indextemp).toString();

            ui.lineEdit_5->setText(datatemp);

        }

    }

     

    QtWidgetsApplication::QtWidgetsApplication(QWidget *parent)

        : QMainWindow(parent)

    {

        ui.setupUi(this);

      

    }

    void QtWidgetsApplication::close()

    {

       // QApplication::exit();

     

     

    }

     

     

    void QtWidgetsApplication::pushbuttonlog()  //登录确定按钮

    {

        bool a = sqldatabase.OpenDb();

       

        if (a)//如果数据库连接成功

        {

     

           

            QString  name = ui.lineEdit->text();

            QString  pass = ui.lineEdit_2->text();

     

            QString  sqlcount = QString("SELECT count(password) FROM userinfo where  username='%1'").arg(name);

            if (sqldatabase.queryTable(sqlcount)!="0")

            {

     

                QString  sqlquery = QString("select  password  from userinfo where username='%1'").arg(name);

               

                QString   test = sqldatabase.queryTable(sqlquery);

                globaldata = sqldatabase.queryTable(QString("select flag from userinfo where username='%1'").arg(name));

                sqldatabase.closeDb();

     

                if (pass == test)

                {

                    ui.label->setText(QString("登陆成功"));

     

                    mainsign = new mainwindow;

                    mainsign->show();

                    this->close();

     

     

     

     

                }

                else

                {

                    ui.label->setText(QString("密码错误!"));

                }

            }

            else

            {

                ui.label->setText(QString("账户名错误!"));

     

            }

            

     

        }

        else

        {

            ui.label->setText(QString("登陆失败!"));

           

        }

      

      

     

    }

     

     

     

    void  mainwindow::pushbutton1() //主界面插入操作函数

    {

     

     

      

        {

            bool  a = sqldatabase.OpenDb();

            if (a)//如果数据库连接成功

            {

     

     

                QString    name = ui.lineEdit->text();

                QString    number = ui.lineEdit_2->text();

                int    course1 = ui.lineEdit_3->text().toInt();

                int    course2 = ui.lineEdit_4->text().toInt();

                int    course3 = ui.lineEdit_5->text().toInt();

                float    average = (course1 + course2 + course3) / 3.0;

                ui.lineEdit_6->setText(QString("%1分(%2)").arg(QString::number(average, 'f', 2)).arg(pingfen(average)));

                QString  sql_insert = QString("INSERT INTO student (name,number,c1,c2,c3,average,dengji)  VALUES('%1', '%2',"

                    "        %3, %4, %5, %6, '%7')").arg(name).arg(number).arg(course1).arg(course2).arg(course3).arg(average).arg(pingfen(average));

     

              

              

                   int ret = QMessageBox::warning(this, "提示", "更新插入一条数据?", QMessageBox::Yes, QMessageBox::No);

                   if (ret == QMessageBox::Yes)

                   {

                       sqldatabase.singleinsertdata(sql_insert);

                      // this->close();

                   }

                   sqldatabase.closeDb();

                   //更新表数据

     

     

                   clear();

                   fresh();

                 

            }

            else {

     

                qDebug() << "数据库连接成功!";

     

            }

     

        }

     

    }

     

    void  mainwindow::pushbutton2() //主界面删除操作函数

    {

        int curRow = ui.tableView->currentIndex().row();//选中行行号

     

        QAbstractItemModel* modessl = ui.tableView->model();

     

        QModelIndex indextemp = modessl->index(curRow, 1);

            //这个是一个单元格的值。tostring()----ok

     

        QString datatemp = modessl->data(indextemp).toString();

       

        int ret = QMessageBox::warning(this, "提示",QString("删除用户%1的成绩信息?").arg(datatemp), QMessageBox::Yes, QMessageBox::No);

        if (ret == QMessageBox::Yes)

        {

            sqldatabase.OpenDb();

            QString sql_delete = QString("DELETE FROM student WHERE number = %1").arg(datatemp);

            sqldatabase.deletedata(sql_delete);

     

            sqldatabase.closeDb();

       

            clear();

          

     

            fresh();

        

        }

       

    }

     

     

     

    void  mainwindow::pushbutton3() //主界面修改操作函数

    {

       

        int curRow = ui.tableView->currentIndex().row();//选中行行号

     

        QAbstractItemModel* modessl = ui.tableView->model();

     

        QModelIndex indextemp = modessl->index(curRow, 1);

        //这个是一个单元格的值。tostring()----ok

     

        QString datatemp = modessl->data(indextemp).toString();

     

        int ret = QMessageBox::warning(this, "提示", QString("修改用户%1的成绩信息?").arg(datatemp), QMessageBox::Yes, QMessageBox::No);

        if (ret == QMessageBox::Yes)

        {

            sqldatabase.OpenDb();

            QString sql_delete = QString("DELETE FROM student WHERE number = %1").arg(datatemp);

            sqldatabase.deletedata(sql_delete);

     

            QString   name = ui.lineEdit->text();

            QString    number = ui.lineEdit_2->text();

            int    course1 = ui.lineEdit_3->text().toInt();

            int    course2 = ui.lineEdit_4->text().toInt();

            int    course3 = ui.lineEdit_5->text().toInt();

            float    average = (course1 + course2 + course3) / 3.0;

            ui.lineEdit_6->setText(QString("%1分(%2)").arg(QString::number(average, 'f', 2)).arg(pingfen(average)));

            QString  sql_insert = QString("INSERT INTO student (name,number,c1,c2,c3,average,dengji)  VALUES('%1', '%2',"

                "        %3, %4, %5, %6, '%7')").arg(name).arg(number).arg(course1).arg(course2).arg(course3).arg(average).arg(pingfen(average));

     

                sqldatabase.singleinsertdata(sql_insert);

                // this->close();

           

            //更新表数据

           sqldatabase.closeDb();

            clear();

            fresh();

        }

     

    }

     

     

     

    void  mainwindow::pushbutton4()  //查询函数

    {

        QString   name = ui.lineEdit->text().trimmed();

        QString    number = ui.lineEdit_2->text().trimmed();

        QString   course1 = ui.lineEdit_3->text().trimmed();

        QString   course2 = ui.lineEdit_4->text().trimmed();

        QString    course3 = ui.lineEdit_5->text().trimmed();

        QString    average = ui.lineEdit_6->text().trimmed();

     

       QString  sql_inquery=QString("select * from student where name like '%1%' and number  like '%2%'and c1 like '%3%' and c2 like '%4%' and c3 like '%5%' and average like "

          " '%6%'").arg(name).arg(number).arg(course1).arg(course2).arg(course3).arg(average) ;

       sqldatabase.OpenDb();

        

     

     

          static QSqlQueryModel* model = new QSqlQueryModel(ui.tableView);

          model->setQuery(sql_inquery);

          ui.tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);

          ui.tableView->setModel(model);

     

          sqldatabase.closeDb();

          connect(ui.tableView, SIGNAL(clicked(QModelIndex)), this, SLOT(show_list()));

     

    }

     

     

    void  mainwindow::pushbutton5()              //优良率计算函数

    {

     

        sqldatabase.OpenDb();

     

       float all= sqldatabase.queryTable(QString("select count(*) from student")).toFloat();

       float one= sqldatabase.queryTable(QString("select count(*) from student where dengji='优秀'")).toFloat();

       float two = sqldatabase.queryTable(QString("select count(*) from student where dengji='良好'")).toFloat();

       float three = sqldatabase.queryTable(QString("select count(*) from student where dengji='中等'")).toFloat();

       float four = sqldatabase.queryTable(QString("select count(*) from student where dengji='及格'")).toFloat();

       float five= sqldatabase.queryTable(QString("select count(*) from student where dengji='不及格'")).toFloat();

       ui.label_you->setText(QString("%1").arg(QString::number(one/all, 'f', 2)));

       ui.label_liang->setText(QString("%1").arg(QString::number(two / all, 'f', 2)));

       ui.label_zhong->setText(QString("%1").arg(QString::number(three / all, 'f', 2)));

       ui.label_jige->setText(QString("%1").arg(QString::number(four/ all, 'f', 2)));

       ui.label_bujige->setText(QString("%1").arg(QString::number(five / all, 'f', 2)));

      

       sqldatabase.closeDb();

    }

     

     

    void  mainwindow::pushbutton6() // 平均成绩计算

    {

        sqldatabase.OpenDb();

     

      

        float one = sqldatabase.queryTable(QString("select avg(c1) from student")).toFloat();

        float two = sqldatabase.queryTable(QString("select avg(c2) from student")).toFloat();

        float three = sqldatabase.queryTable(QString("select avg(c3) from student")).toFloat();

        float all = one + two + three;

        ui.label_c1->setText(QString("%1").arg(QString::number(one, 'f', 2)));

        ui.label_c2->setText(QString("%1").arg(QString::number(two, 'f', 2)));

        ui.label_c3->setText(QString("%1").arg(QString::number(three, 'f', 2)));

        ui.label_allaverage->setText(QString("%1").arg(QString::number(all, 'f', 2)));

     

     

    }

     

    void  mainwindow::pushbutton7() // 用户管理模式切换

    {

        if (globaldata2 == 1)  //进入用户管理模式

        {

            globaldata2 = 2;

            fresh2();

          

            ui.pushButton_manage->setText("成绩查看");

     

     

        }

        else

        {

            globaldata2 = 1;     //进入成绩管理模式

            fresh();

             ui.pushButton_manage->setText("用户管理");

        }

     

    }

     

     

    void  mainwindow::pushbutton8()   //增加成员

    {

     

        QString  username = ui.lineEdit_user->text();

        QString  pass = ui.lineEdit_pass->text();

        QString  flag;

        if (ui.radioButton->isChecked())

        {

            flag = "t";

        }

        else if(ui.radioButton_2->isChecked())

        {

     

            flag = "s";

     

        }

        else

        {

            flag = "m";

        }

     

     

        QString   sql_insert = QString(" INSERT INTO userinfo (username,password,flag)  VALUES('%1', '%2','%3')").arg(username).arg(pass).arg(flag);

     

          

        if (sqldatabase.OpenDb())

        {

            QString  sqlcount = QString("SELECT count(password) FROM userinfo where  username='%1'").arg(username);

     

            if (sqldatabase.queryTable(sqlcount).toInt() == 0)

            {

     

                sqldatabase.singleinsertdata(sql_insert);

                fresh2();

     

            }

            else

            {

     

                qDebug() << "用户已存在";

     

     

            }

        }

           

        sqldatabase.closeDb();

     

    }

     

    void  mainwindow::pushbutton9()   //删除成员

    {

        QString  username = ui.lineEdit_user->text();

        QString  pass = ui.lineEdit_pass->text();

        QString  flag;

        if (ui.radioButton->isChecked())

        {

            flag = "t";

        }

        else if (ui.radioButton_2->isChecked())

        {

     

            flag = "s";

     

        }

        else

        {

            flag = "m";

        }

     

      

        int ret = QMessageBox::warning(this, "提示", QString("删除用户%1的成绩信息?").arg(username), QMessageBox::Yes, QMessageBox::No);

        if (ret == QMessageBox::Yes)

        {

            sqldatabase.OpenDb();

            QString sql_delete = QString("DELETE FROM userinfo  WHERE username = '%1'").arg(username);

            sqldatabase.deletedata(sql_delete);

     

            sqldatabase.closeDb();

     

     

        

        }

        fresh2();

     

    }

     

    void  mainwindow::pushbutton10()   //修改成员

    {

        QString  username = ui.lineEdit_user->text();

        QString  pass = ui.lineEdit_pass->text();

        QString  flag;

        if (ui.radioButton->isChecked())

        {

            flag = "t";

        }

        else if (ui.radioButton_2->isChecked())

        {

     

            flag = "s";

     

        }

        else

        {

            flag = "m";

        }

        sqldatabase.OpenDb();

        QString sql_delete = QString("DELETE FROM userinfo  WHERE username = '%1'").arg(username);

        QString  sql_insert= QString(" INSERT INTO userinfo (username,password,flag)  VALUES('%1', '%2','%3')").arg(username).arg(pass).arg(flag);

        sqldatabase.deletedata(sql_delete);

        sqldatabase.singleinsertdata(sql_insert);

     

        sqldatabase.closeDb();

        fresh2();

     

    }

     

    void  mainwindow::pushbutton11()   //查询成员

    {

     

        QString  username = ui.lineEdit_user->text();

        QString  sql_inquery = QString("select * from userinfo where username like '%1%' ").arg(username);

        sqldatabase.OpenDb();

     

        static QSqlQueryModel* model = new QSqlQueryModel(ui.tableView);

        model->setQuery(sql_inquery);

        ui.tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);

        ui.tableView->setModel(model);

     

        sqldatabase.closeDb();

        connect(ui.tableView, SIGNAL(clicked(QModelIndex)), this, SLOT(show_list()));

     

    }

     

    void  mainwindow::fresh()  //刷新函数

    {

     

     

        if (!sqldatabase.OpenDb())

        {

            qDebug() << "mistake1212"; //错误处理

        }

        static QSqlQueryModel* model = new QSqlQueryModel(ui.tableView);

        model->setQuery(QString("select * from student"));

        ui.tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);

        ui.tableView->setModel(model);

     

        sqldatabase.closeDb();

        connect(ui.tableView, SIGNAL(clicked(QModelIndex)), this, SLOT(show_list()));

     

    }

     

    void  mainwindow::fresh2()  //刷新函数2

    {

     

     

        if (!sqldatabase.OpenDb())

        {

            qDebug() << "mistake1212"; //错误处理

        }

        static QSqlQueryModel* model = new QSqlQueryModel(ui.tableView);

        model->setQuery(QString("select * from userinfo"));

        ui.tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);

        ui.tableView->setModel(model);

     

        sqldatabase.closeDb();

        connect(ui.tableView, SIGNAL(clicked(QModelIndex)), this, SLOT(show_list()));

     

     

     

    }

     

    运行结果:

    登录界面测试:

     

    主界面测试:

    成绩管理:

    查询成绩:

    增加成绩:

    修改成绩:

    删除信息:

     

    用户管理类似在此不做演示。

    测试结果显示,虽然可能还不够完善,但是基本实现了系统要求中的各个功能,能进行成绩和用户信息的基本管理。

     

     

    用户管理类似在此不做演示。

    测试结果显示,虽然可能还不够完善,但是基本实现了系统要求中的各个功能,能进行成绩和用户信息的基本管理。

     

    • 课程小结

    过此次课程设计,使我更加扎实的掌握了有关c++程序设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了qt的识别和测试;熟悉了c++;了解了新的编程框架和方法。我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。

    学生信息成绩管理系统下载链接

     

     

    展开全文
  • C语言编写学生成绩信息管理系统

    千次阅读 多人点赞 2020-07-06 18:27:13
    用C语言设计学生成绩信息管理系统介绍代码结构体数组的定义main_interface()函数add_infor()函数browse_infor()函数 介绍 软件方面采用的是Visual Studio 2019 IDE工具。 程序方面采用结构体数组,成员包括学号、...

    介绍

    • 软件方面采用的是 Visual Studio 2019 IDE 工具。
    • 程序方面采用结构体数组,成员包括学号、姓名以及一科成绩。程序整体采用分模块编程形式,包括主函数在内共10个函数,实现功能有信息的录入、浏览、查询、修改、删除、数据保存到文件以及成绩的排序。程序比较简单,结构体成员只有三个,没有什么技术含量,后期看看有没有能力用链表来编写这个程序。

    代码

    • 结构体数组的定义

    函数开始前,是结构体数组的定义。这里直接使用typedef定义结构体数组,一步到位。后续可用STUDENT来进行变量声明了


    • home_page() 函数

    这个是主界面的显示函数,完整的声明为:void home_page(),无形参,无返回值,单纯用printf()函数打印的界面。
    完整代码

    void home_page()
    {
    	printf("\n\t\t******************************** \n");
    	printf("\t\t     学生成绩信息管理系统       \n\n");
    	printf("\t\t        1、录入信息            \n\n");
    	printf("\t\t        2、浏览信息            \n\n");
    	printf("\t\t        3、查询信息            \n\n");
    	printf("\t\t        4、修改信息            \n\n");
    	printf("\t\t        5、成绩排序            \n\n");
    	printf("\t\t        6、删除信息            \n\n");
    	printf("\t\t        7、向文件写入数据       \n\n");
    	printf("\t\t        8、从文件读出数据       \n\n");
    	printf("\t\t        9、退出系统            \n\n");
    	printf("\t\t******************************** \n\n");
    }
    

    运行效果
    在这里插入图片描述
    其中,“输入标号选择功能:”字样是在 main() 函数中调用 home_page() 函数后,打印的提示语。


    • add_infor() 函数

    这是实现信息录入功能的函数,完整的函数声明是:int add_infor(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,返回值n+i是添加完信息后的结构体数组的总个数。函数内部,i变量是每次添加的信息的个数,sign变量作为连续输入的标志。这里判断是否连续输入,我原来用的方法是判断stu[n+i].num的值是否为-1,编译成功没有报错,但是实际运行过程中会出现一些问题,应该是逻辑上的问题。我暂且换成每输入一条信息后,判断是否继续输入第二条信息,实际使用时会有一些繁琐,但总体效果相差无几。
    完整代码

    int add_infor(STUDENT stu[], int n)
    {
    	int i = 0;
    	char sign = 'Y';
    
    	while ((sign == 'Y') || (sign == 'y'))
    	{
    		printf("\n\t\t\t学号:");
    		scanf("\t\t%s", stu[n + i].num);
    		printf("\t\t\t姓名:");
    		scanf("\t\t%s", stu[n + i].name);
    		printf("\t\t\t成绩:");
    		scanf("\t\t%f", &stu[n + i].score);
    
    		printf("\n\t\t\t是否继续录入?(Y/N):");
    		sign = getchar();
    
    		i++;
    	}
    
    	return (n + i);
    }
    

    上述代码在 Visual Studio 2019 IDE 中编译时,scanf()函数会报出警告,警告代码为:C6031,说明为:返回值被忽略。解决方法有两个,第一种是将scanf替换为scanf_s,我没有采用这种方法,因为scanf_s并不是 C 语言中的,而是 Visual Studio 开发工具提供的一个功能相同的安全标准输入函数,如果换为scanf_s,在另一个编译器下就可能会出问题;第二种是使用#define _CRT_SECURE_NO_WARNINGS 1,具体做法可百度查找,经实测,这种方法是可行的。但是,如果两种方法都不采取,即不消除这个警告,实际上对程序的正确运行也没有影响。
    运行效果
    在这里插入图片描述
    “录入学生成绩信息”字样由 main() 函数在调用 add_infor() 函数前打印


    • browse_infor() 函数

    这是实现浏览录入信息功能的函数,完整声明为:void browse_infor(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,无返回值。函数内部,i是作为循环控制变量,传入数组个数n,然后通过 for 循环,依次打印出结构体成员的值。
    完整代码

    void browse_infor(STUDENT stu[], int n)
    {
    	int i;
    
    	printf("\n\n");
    	printf("\t\t学号\t姓名\t成绩\n\n");
    
    	for (i = 0; i < n; i++)
    	{
    		printf("\t\t%s\t%s\t %3.1f\n",stu[i].num,stu[i].name,stu[i].score);
    	}
    }
    

    运行效果
    在这里插入图片描述
    “浏览学生成绩信息”字样由 main() 函数在调用 browse_infor() 函数前打印


    • find_infor() 函数

    这是实现信息查找功能的函数,完整的声明为:void find_infor(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,无返回值。函数内部,又分为通过学号查找和通过姓名查找两种方式,变量option存放键入的选项,两个字符串数组分别存放查找的学号和姓名。先选择查找方式,输入对应方式的值,然后遍历数组,通过strcmp()函数判断数组中是否有与输入相同的值,若无相同的值则显示“未找到!”的信息,若有相同值则将该结构体成员的信息打印到屏幕上。
    完整代码

    void find_infor(STUDENT stu[], int n)
    {
    	int option;
    	int i = 0;
    	char search_num[10] = { 0 };
    	char search_name[20] = { 0 };
    
    	printf("\n\t\t\t1、按学号查找\n");
    	printf("\t\t\t2、按姓名查找\n");
    	printf("\n\t\t\t请选择相应的选项:");
    	scanf("%d",&option);
    
    	system("cls");
    
    	if (1 == option)
    	{
    		printf("\n\t\t请输入要查找的学号:");
    		scanf("%s", search_num);
    
    		while ((strcmp(stu[i].num, search_num) != 0) && i < n)
    		{
    			i++;
    		}
    	}
    
    	if (2 == option)
    	{
    		printf("\n\t\t请输入要查找的姓名:");
    		scanf("%s", search_name);
    
    		while ((strcmp(stu[i].name, search_name) != 0) && i < n)
    		{
    			i++;
    		}
    	}
    
    	if (i == n)
    	{
    		printf("\n\t\t未找到!");
    		return;
    	}
    
    	printf("\n\t\t学号:%s\n", stu[i].num);
    	printf("\t\t姓名:%s\n", stu[i].name);
    	printf("\t\t成绩:%3.1f\n", stu[i].score);
    }
    

    从上述代码中可以看到,在定义两个字符串数组时,均赋了初值0,若此处没有赋初值0时,上段代码在 Visual Studio 2019 IDE 中编译时,strcmp()函数会报警告,警告代码为:C6054,说明为:可能没有为字符串“xxx”添加字符串零终止符。深入了解strcmp()函数可以知道,其功能是两个字符串自左向右逐个字符相比(按 ASCII 值大小相比较),直到出现不同的字符或遇 ‘\0’ 为止。所以此处在定义字符串数组时,将其初始化为 ‘\0’ ,即char search_num[10] = { 0 };,就可以消除此类警告。
    运行效果
    在这里插入图片描述


    • modify_infor() 函数

    这是实现信息修改功能的函数,函数声明为:int modify_infor(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n。函数内部,可选择通过学号查找修改和通过姓名查找修改两种方式。查找部分与void find_infor(STUDENT stu[], int n)函数一致;修改部分有修改学号、姓名、成绩三个选项,修改的实现形式是:通过查找部分得出待修改的数组下标,然后通过strcpy()函数,将输入的修改后的学号和姓名赋值给下标对应的成员,分数的修改则直接赋值。
    完整代码

    int modify_infor(STUDENT stu[], int n)
    {
    	int option, choice;
    	int i = 0;
    	char old_temp[20] = { 0 };
    	char new_temp[20] = { 0 };
    	float new_score;
    
    	printf("\n\t\t\t1、按学号查找修改\n");
    	printf("\t\t\t2、按姓名查找修改\n");
    	printf("\n\t\t请输入选项选择功能:");
    	scanf("%d", &option);
    
    	system("cls");
    
    	if (1 == option)
    	{
    		printf("\n\t\t请输入学号:");
    		scanf("%s", &old_temp);
    
    		while ((strcmp(stu[i].num, old_temp) != 0) && i < n)
    		{
    			i++;
    		}
    
    		if (i == n)
    		{
    			printf("\n\t\t未找到!");
    		}
    	}
    
    	if (2 == option)
    	{
    		printf("\n\t\t请输入姓名:");
    		scanf("%s", &old_temp);
    
    		while ((strcmp(stu[i].name, old_temp) != 0) && i < n)
    		{
    			i++;
    		}
    
    		if (i == n)
    		{
    			printf("\n\t\t未找到!");
    		}
    	}
    
    	printf("\n\t\t待修改学生的信息:\n");
    	printf("\n\t\t学号:%s\n\t\t姓名:%s\n\t\t成绩:%3.1f\n", stu[i].num, stu[i].name, stu[i].score);
    
    	printf("\n\t\t请选择要修改的信息(1.学号 2.姓名 3.成绩):");
    	scanf("%d", &choice);
    
    	if (1 == choice)
    	{
    		printf("\n\t\t输入修改后的学号:");
    		scanf("%s", &new_temp);
    
    		strcpy(stu[i].num, new_temp);
    		printf("\t\t修改成功!\n");
    	}
    
    	if (2 == choice)
    	{
    		printf("\n\t\t输入修改后的姓名:");
    		scanf("%s", &new_temp);
    
    		strcpy(stu[i].name, new_temp);
    		printf("\t\t修改成功!\n");
    	}
    
    	if (3 == choice)
    	{
    		printf("\n\t\t输入修改后的成绩:");
    		scanf("%f", &new_score);
    
    		stu[i].score = new_score;
    		printf("\t\t修改成功!\n");
    	}
    }
    

    此函数中的两个字符串数组在定义时,也需要赋初值,以消除函数strcmp()strcpy()使用时的警告。
    运行效果
    在这里插入图片描述


    • sort_score() 函数

    此函数完整声明为:void sort_score(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,实现的功能是排序,用的是冒泡排序法,按从小到大的顺序给成绩排序。具体实现形式就是,通过两层循环,外层循环是排序趟数,内层循环是每趟比较的次数,相邻两元素比较,若前者大于后者,则两者进行交换,此时为顺序,即从小到大;若前者小于后者且两者交换,则为逆序,即从大到小。此函数为顺序,且在交换两者值时,学号和姓名使用strcpy()函数,成绩的交换使用指针。
    完整代码

    void sort_score(STUDENT stu[], int n)
    {
    	int i, j;
    	float * p, * q, s;
    	char temp[20];
    
    	for (i = 0; i < n - 1; i++)
    	{
    		for (j = 0; j < n - 1 - i; j++)
    		{
    			if (stu[j].score > stu[j + 1].score)
    			{
    				strcpy(temp, stu[j].num);
    				strcpy(stu[j].num, stu[j + 1].num);
    				strcpy(stu[j + 1].num, temp);
    
    				strcpy(temp, stu[j].name);
    				strcpy(stu[j].name, stu[j+1].name);
    				strcpy(stu[j+1].name,temp);
    
    				p = &stu[j].score;
    				q = &stu[j + 1].score;
    				s = *p;
    				*p = *q;
    				*q = s;
    			}
    		}
    	}
    }
    

    运行效果
    在这里插入图片描述


    • delete_infor() 函数

    此函数是信息删除函数,完整声明为:int delete_infor(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,返回值是删除后的数组个数。函数内部,可通过按学号和按姓名两种方式查找并删除,其中查找部分与void find_infor(STUDENT stu[], int n)函数一致;删除部分的实现形式是,从查找部分获得找到的数组下标,从下标处开始,将后一值赋给前一值,直至数组的末尾,以此实现删除的功能。
    完整代码

    int delete_infor(STUDENT stu[], int n)
    {
    	char search_num[10] = { 0 };
    	char search_name[20] = { 0 };
    	int i = 0;
    	int j;
    	int option;
    	
    	printf("\n\t\t\t1、按学号查找删除\n");
    	printf("\t\t\t2、按姓名查找删除\n");
    	printf("\n\t\t\t请输入选项选择功能:");
    	scanf("%d", &option);
    	
    	system("cls");
    
    	if (1 == option)
    	{
    		printf("\n\t\t请输入要删除的学生的学号:");
    		scanf("%s", &search_num);
    
    		while ((strcmp(stu[i].num, search_num)) != 0 && (i < n))
    		{
    			i++;
    		}
    
    		if (i == n)
    		{
    			printf("\t\t未找到!\n");
    			return n;
    		}
    	}
    	
    	if (2 == option)
    	{
    		printf("\n\t\t请输入要删除的学生的姓名:");
    		scanf("%s", &search_name);
    
    		while ((strcmp(stu[i].num, search_name) != 0) && (i < n))
    		{
    			i++;
    		}
    
    		if (i == n)
    		{
    			printf("\t\t未找到!\n");
    			return n;
    		}
    	}
    
    	for (j = i; j < n; j++)
    	{
    		strcpy(stu[j].num, stu[j + 1].num);
    		strcpy(stu[j].name, stu[j + 1].name);
    		stu[j].score = stu[j + 1].score;
    	}
    
    	printf("\t\t删除成功!\n");
    	return (n - 1);
    }
    

    注意此函数的返回值,由于删除了一条信息,即从结构体数组中删除了一项,所以返回值应当是传入参数n减去1之后的值,即返回值return (n-1);
    运行效果
    在这里插入图片描述


    • writetofile() 函数

    此函数的功能是将录入的数据保存到文件中,完整声明为:void writetofile(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n。函数内部,用 FILE 结构体类型定义文件类型的指针变量 fp,输入要写入的文件的名称,然后以只写 “w” 的方式,向文件写入数据,若指定的文件不存在则创建它,如果存在则先删除它再重建一个新文件,首先向文件内写结构体数组的个数,然后通过 while 循环,将所有信息写入文件中,最后fclose(fp)关闭文件。
    完整代码

    void writetofile(STUDENT stu[], int n)
    {
    	FILE* fp;
    	int i = 0;
    	char filename[20] = { 0 };
    	
    	printf("\n\t\t\t请输入文件名称:");
    	scanf("%s", filename);
    
    	if ((fp = fopen(filename, "w")) == NULL)
    	{
    		printf("\n\t\t\t打开文件失败!\n");
    		return;
    	}
    
    	fprintf(fp, "%d\n", n);
    
    	while (i < n)
    	{
    		fprintf(fp, "%-6s%-10s%3.1f\n", stu[i].num, stu[i].name, stu[i].score);
    		i++;
    	}
    
    	fclose(fp);
    
    	printf("\n\t\t\t写入文件成功!\n");
    }
    

    由于只需要向文件写数据,所以fopen()中 mode 参数只需要"w"即可,数据写入文件成功后,一定要使用fclose(fp)关闭文件。
    运行效果
    在这里插入图片描述
    在这里插入图片描述
    “向文件写入数据”字样由 main() 函数在调用 writetofile() 函数前打印


    • readfromfile() 函数

    此函数的功能是从文件中读出数据,完整声明为:int readfromfile(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,返回值为读入数据后的数组总个数。函数内部,用 FILE 结构体类型定义文件类型的指针变量 fp,输入要读出数据的文件的名称,以只读方式,通过 while 循环,从文件中读出数据,存放到数组中,然后将读到的数据个数加上传进的参数 n 作为返回值,最后关闭文件。
    完整代码

    int readfromfile(STUDENT stu[], int n)
    {
    	FILE* fp;
    	int i, num;
    	char filename[20];
    
    	i = 0;
    
    	printf("\n\t\t\t请输入文件名称:");
    	scanf("%s", filename);
    
    	if ((fp = fopen(filename, "r")) == NULL)
    	{
    		printf("\n\t\t\t无法打开文件!\n");
    
    		return n;
    	}
    
    	fscanf(fp, "%d", &num);
    
    	while (i < num)
    	{
    		fscanf(fp, "%-5s%-10s%3.1f\n", stu[n + i].num, stu[n + i].name, stu[n + i].score);
    		i++;
    	}
    
    	n += num;
    	fclose(fp);
    
    	printf("\n\t\t\t读出数据成功!\n");
    
    	return n;
    }
    

    同样,在打开文件并执行操作完毕后,需要fclose(fp)来关闭文件。注意,此函数的返回值应该是读到的数据个数 num 加上传进的参数 n ,返回的才是此时总的数组个数。
    运行效果
    在这里插入图片描述
    “从文件读出数据”字样由 main() 函数在调用 readfromfile() 函数前打印


    • main() 函数

    main函数部分,主要是由while(1)死循环构成的,循环内部首先调用home_page()函数显示主界面,然后通过 switch-case 语句,来匹配用户输入的选项。

    完整代码

    int main()
    {
    	int select = 0;
    	int n = 0;
    
    	while (1)
    	{
    		system("cls");
    		
    		home_page();
    
    		printf("\t\t输入标号选择功能: ");
    		scanf("%d", &select);
    
    		switch (select)
    		{
    			case 1:
    				system("cls");
    				printf("\n\t\t********录入学生成绩信息********\n");
    				n = add_infor(stu, n);
    				break;
    			case 2:
    				system("cls");
    				printf("\n\t\t********浏览学生成绩信息********\n");
    				browse_infor(stu, n);
    				getchar();
    				break;			
    			case 3:
    				system("cls");
    				printf("\n\t\t**********查询学生信息**********\n");
    				find_infor(stu, n);
    				getchar();
    				break;
    			case 4:
    				system("cls");
    				printf("\n\t\t*********修改学生信息*********\n");
    				n = modify_infor(stu, n);
    				getchar();
    				break;
    			case 5:
    				system("cls");
    				printf("\n\t\t*********按成绩排序*********\n");
    				sort_score(stu, n);
    				printf("\n\t\t\t排序成功!");
    				getchar();
    				break;	
    			case 6:
    				system("cls");
    				printf("\n\t\t*********删除学生信息*********\n");
    				n = delete_infor(stu, n);
    				getchar();
    				break;
    			case 7:
    				system("cls");
    				printf("\n\t\t********向文件写入数据********\n");
    				writetofile(stu, n);
    				getchar();
    				break;
    			case 8:
    				system("cls");
    				printf("\n\t\t********从文件读出数据********\n");
    				n = readfromfile(stu, n);
    				getchar();
    				break;
    			default:
    				system("cls");
    				printf("\n\n\t\t**********谢谢使用!**********\n");
    				exit(0);
    				break;
    		}
    
    		getchar();
    	}
    }
    

    注意,switch-case 语句的每个 case 结束都应加上break;,且最后要加上default,同时,为了美观,在每个 case 语句调用函数前,都加上system("cls")清屏函数;在调用后,加上getchar ()语句等待用户操作。


    • 完整代码

    链接: 完整代码

    结束语

    第一次写博客,方方面面的都有些不熟悉,脑子里有很多想法,但无从下手,拿了以前写的程序作主要内容,进行一次尝试。虽然内容啥的都很简单,程序也没有什么技术含量,但这是一次从0到1的尝试吧,以后也会继续努力。文中如有错误之处,还请指正,如遇大佬,还请多多指教!

    展开全文
  • 学生成绩信息管理系统C语言实现

    千次阅读 多人点赞 2019-12-29 22:46:58
    学生成绩信息管理系统 一、该系统所要实现的功能 1.手动录入学生信息 void InputScore(); //录入学生信息 2.查询学生信息 void SearchByName(); //按名查询 void SearchByNumber(); //按学号查询 3.修改学生信息 ...

    学生成绩信息管理系统

    一、该系统所要实现的功能

    1.手动录入学生信息

    void InputScore();  //录入学生信息
    

    2.查询学生信息

    void SearchByName();    //按名查询
    void SearchByNumber();  //按学号查询
    

    3.修改学生信息

    void EditByName();  //按名字修改
    void EditByNumber();    //按学号修改
    

    4.删除学生信息

    void Delete();  //删除学生信息
    

    5.显示学生信息

    void ShowStudentInfo(); //显示学生信息
    

    6.统计学生信息

    void Statistics();  //统计学生信息
    

    7.按照平均分排序

    void Sort_Average();  //按平均分排序
    

    8.插入学生信息

    void Insert();  //插入新的学生的成绩
    

    9.文件导入学生成绩信息和将录入的信息保存到文件中

    void FreadFile();   //从文件读取学生信息
    void save();    //保存学生信息
    

    二、存储结构和逻辑结构

    struct score    //分数结构体
    {
        float m_DataStructurescore;
        float m_Englishscore;
        float m_Mathscore;
        float m_PEscore;
        float m_Probabilityscore;
        struct score *next;
    };
    
    struct student  //学生信息结构体
    {
        string number;
        string name;
        string sex;
        score chengji;
        float average;
        struct student *next;
    };
    
    int amount = 0;  //全局变量,记录学生的个数
    int const Q =80;	//假定学生人数最大为80
    float A[Q];	//后面的排序算法需要用到
    student *head = (student*)malloc(sizeof(student));	 //head为学生信息组成链表的表头
    

    三、具体各个功能实现的代码如下

    1.录入学生信息

    void InputScore()  //录入学生信息
    {
     head->next = NULL;  //要录入学生信息,必须删除以前所有的信息
     amount = 0;
     char c;
     int j = 0;
     student *p = head;
    
     do
     {
         student *stu = new student;
         cout<<"请输入学号:(8位)"<<setw(4);
         cin>>(*stu).number;
         cout<<"请输入姓名:"<<setw(4);
         cin>>(*stu).name;
         cout<<"请输入性别:"<<setw(2);
         cin>>(*stu).sex;
         cout<<"请输入数据结构成绩:"<<setw(3);
         cin>>(*stu).chengji.m_DataStructurescore;
         cout<<"请输入英语成绩:"<<setw(3);
         cin>>(*stu).chengji.m_Englishscore;
         cout<<"请输入数学成绩:"<<setw(3);
         cin>>(*stu).chengji.m_Mathscore;
         cout<<"请输入体育成绩:"<<setw(3);
         cin>>(*stu).chengji.m_PEscore;
         cout<<"请输入概率成绩:"<<setw(3);
         cin>>(*stu).chengji.m_Probabilityscore;
    
         //求平均分
         (*stu).average = 0.2*((*stu).chengji.m_DataStructurescore+
                               (*stu).chengji.m_Englishscore+(*stu).chengji.m_Mathscore
                               +(*stu).chengji.m_PEscore+(*stu).chengji.m_Probabilityscore);
         stu->next = p->next;
         p->next = stu;
         amount++;
         cout<<"数据信息录入成功,是否继续录入?(y/n)";
         cin>>c;
         p = p->next;
         while(c!='y' && c!='n')
         {
             cout<<"指令错误<请输入y/n>!!!!"<<endl;
             cin>>c;
         }
     }while(c == 'y');
     j++;
    
     cout<<"输入了"<<amount<<"个学生的信息。"<<endl;
    }
    

    2.查询学生信息

    void SearchByName()    //按名查询
    {
        char c;
        string name;
        do
        {
            student *stu = head->next;
            bool flag = 0;
            cout<<"请输入你要查询的学生姓名:"<<endl;
            cin>>name;
            for(int i=1; i<=amount; i++)
            {
                if(name == stu->name)
                {
                    flag = 1;
                    cout<<"您要查询的学生是:"<<stu->name<<endl;
                    cout<<"学号 姓名 性别 数据结构 英语 数学 体育 概率 平均分"<<endl;
                    cout<<setw(8)<<(*stu).number;
                    cout<<setw(8)<<(*stu).name;
                    cout<<setw(5)<<(*stu).sex;
                    cout<<setw(10)<<(*stu).chengji.m_DataStructurescore;
                    cout<<setw(12)<<(*stu).chengji.m_Englishscore;
                    cout<<setw(8)<<(*stu).chengji.m_Mathscore;
                    cout<<setw(8)<<(*stu).chengji.m_PEscore;
                    cout<<setw(8)<<(*stu).chengji.m_Probabilityscore;
                    cout<<setw(8)<<(*stu).average<<endl;
                    break;
                }
                else stu = stu->next;
            }
            if(flag == 1)
            {
                cout<<"您想继续查询吗?(y/n)"<<endl;
                cin>>c;
                while(c!='y' && c!='n')
                {
                    cout<<"指令错误<请输入y/n>!!!!"<<endl;
                    cin>>c;
                }
            }
            if(flag == 0)
            {
                cout<<"对不起!您要查找的学生不存在!!!!!!!"<<endl;
                cout<<"您想继续查询吗(y/n)"<<endl;
                cin>>c;
                while(c!='y' && c!='n')
                {
                    cout<<"指令错误<请输入y/n>!!!!"<<endl;
                    cin>>c;
                }
            }
        }while(c == 'y');
    }
    
    void SearchByNumber()  //按学号查询
    {
        char c;
        string no;
        do
        {
            student *stu = head->next;
            bool flag = 0;
            cout<<"请输入您要查询的学生学号"<<endl;
            cin>>no;
            for(int i=1; i<=amount; i++)
            {
                if(no == stu->number)
                {
                    flag = 1;
                    cout<<"您要查询的学生是"<<stu->name<<endl;
                    cout<<"学号 姓名 性别 数据结构 英语 数学 体育 概率 平均分"<<endl;
                    cout<<setw(8)<<(*stu).number;
                    cout<<setw(8)<<(*stu).name;
                    cout<<setw(5)<<(*stu).sex;
                    cout<<setw(10)<<(*stu).chengji.m_DataStructurescore;
                    cout<<setw(12)<<(*stu).chengji.m_Englishscore;
                    cout<<setw(8)<<(*stu).chengji.m_Mathscore;
                    cout<<setw(8)<<(*stu).chengji.m_PEscore;
                    cout<<setw(8)<<(*stu).chengji.m_Probabilityscore;
                    cout<<setw(8)<<(*stu).average<<endl;
                    break;
                }
                else stu = stu->next;
            }
            if(flag == 1)
            {
                cout<<"您想继续查询吗?(y/n)"<<endl;
                cin>>c;
                while(c!='y' && c!='n')
                {
                    cout<<"指令错误<请输入y/n>!!!!"<<endl;
                    cin>>c;
                }
            }
            if(flag == 0)
            {
                cout<<"对不起!您要查找的学生不存在!!!!!!!"<<endl;
                cout<<"您想继续查询吗(y/n)"<<endl;
                cin>>c;
                while(c!='y' && c!='n')
                {
                    cout<<"指令错误<请输入y/n>!!!!"<<endl;
                    cin>>c;
                }
            }
        }while(c == 'y');
    }
    

    3.修改学生信息

    void EditByName()  //按名字修改
    {
        string name;
        char c;
        do
        {
            bool flag = 0;
            student *stu = head;
            score chengji;
            cout<<"请输入您要修改的学生的姓名:"<<endl;
            cin>>name;
            do
            {
                if(name == (*stu).name)
                {
                    flag = 1;
                    cout<<"请输入新的数据结构成绩"<<endl;
                    cin>>chengji.m_DataStructurescore;
                    (*stu).chengji.m_DataStructurescore=chengji.m_DataStructurescore;
                    cout<<"请输入新的英语成绩"<<endl;
                    cin>>chengji.m_Englishscore;
                    (*stu).chengji.m_Englishscore=chengji.m_Englishscore;
                    cout<<"请输入新的数学成绩"<<endl;
                    cin>>chengji.m_Mathscore;
                    (*stu).chengji.m_Mathscore=chengji.m_Mathscore;
                    cout<<"请输入新的体育成绩"<<endl;
                    cin>>chengji.m_PEscore;
                    (*stu).chengji.m_PEscore = chengji.m_PEscore;
                    cout<<"请输入新的概率成绩"<<endl;
                    cin>>chengji.m_Probabilityscore;
                    (*stu).chengji.m_Probabilityscore = chengji.m_Probabilityscore;
                    (*stu).average = 0.2*((*stu).chengji.m_DataStructurescore+
                                  (*stu).chengji.m_Englishscore+(*stu).chengji.m_Mathscore
                                  +(*stu).chengji.m_PEscore+(*stu).chengji.m_Probabilityscore);
                    cout<<"学号 姓名 性别 数据结构 英语 数学 体育 概率 平均分"<<endl;
                    cout<<setw(8)<<(*stu).number;
                    cout<<setw(8)<<(*stu).name;
                    cout<<setw(5)<<(*stu).sex;
                    cout<<setw(10)<<(*stu).chengji.m_DataStructurescore;
                    cout<<setw(12)<<(*stu).chengji.m_Englishscore;
                    cout<<setw(8)<<(*stu).chengji.m_Mathscore;
                    cout<<setw(8)<<(*stu).chengji.m_PEscore;
                    cout<<setw(8)<<(*stu).chengji.m_Probabilityscore;
                    cout<<setw(8)<<(*stu).average<<endl;\
                    cout<<".........数据修改成功!"<<endl;
                    break;
                }
                stu = stu->next;
            }while(stu != NULL);
            if(flag == 0)
            {
                cout<<"对不起,您要修改的学生不存在!请重新输入!!!!!!!"<<endl;
                cout<<"您想继续修改吗(y/n)"<<endl;
                cin>>c;
                while(c!='y' && c!='n')
                {
                    cout<<"指令错误<请输入y/n>!!!!"<<endl;
                    cin>>c;
                }
            }
        }while(c == 'y');
    }
    
    void EditByNumber()    //按学号修改
    {
        string number;
        char c;
        do
        {
            bool flag = 0;
            student *stu = head;
            score chengji;
            cout<<"请输入您要修改的学生的学号:"<<endl;
            cin>>number;
            do
            {
                if(number == (*stu).number)
                {
                    flag = 1;
                    cout<<"请输入新的数据结构成绩"<<endl;
                    cin>>chengji.m_DataStructurescore;
                    (*stu).chengji.m_DataStructurescore=chengji.m_DataStructurescore;
                    cout<<"请输入新的英语成绩:"<<endl;
                    cin>>chengji.m_Englishscore;
                    (*stu).chengji.m_Englishscore=chengji.m_Englishscore;
                    cout<<"请输入新的数学成绩:"<<endl;
                    cin>>chengji.m_Mathscore;
                    (*stu).chengji.m_Mathscore=chengji.m_Mathscore;
                    cout<<"请输入新的体育成绩:"<<endl;
                    cin>>chengji.m_PEscore;
                    (*stu).chengji.m_PEscore = chengji.m_PEscore;
                    cout<<"请输入新的概率成绩:"<<endl;
                    cin>>chengji.m_Probabilityscore;
                    (*stu).chengji.m_Probabilityscore = chengji.m_Probabilityscore;
                    (*stu).average = 0.2*((*stu).chengji.m_DataStructurescore+
                                  (*stu).chengji.m_Englishscore+(*stu).chengji.m_Mathscore
                                  +(*stu).chengji.m_PEscore+(*stu).chengji.m_Probabilityscore);
                    cout<<"学号 姓名 性别 数据结构 英语 数学 体育 概率 平均分"<<endl;
                    cout<<setw(8)<<(*stu).number;
                    cout<<setw(8)<<(*stu).name;
                    cout<<setw(5)<<(*stu).sex;
                    cout<<setw(10)<<(*stu).chengji.m_DataStructurescore;
                    cout<<setw(12)<<(*stu).chengji.m_Englishscore;
                    cout<<setw(8)<<(*stu).chengji.m_Mathscore;
                    cout<<setw(8)<<(*stu).chengji.m_PEscore;
                    cout<<setw(8)<<(*stu).chengji.m_Probabilityscore;
                    cout<<setw(8)<<(*stu).average<<endl;
                    cout<<".........数据修改成功!"<<endl;
                    break;
                }
                stu = stu->next;
            }while(stu != NULL);
            if(flag == 0)
            {
                cout<<"对不起,您要修改的学生不存在!请重新输入!!!!!!!"<<endl;
                cout<<"您想继续修改吗(y/n)"<<endl;
                cin>>c;
                while(c!='y' && c!='n')
                {
                    cout<<"指令错误<请输入y/n>!!!!"<<endl;
                    cin>>c;
                }
            }
        }while(c == 'y');
    }
    

    4.删除学生信息

    void Delete()  //删除学生信息
    {
        char c;
        string no;
        do
        {
            bool flag = 0;
            cout<<"请输入您要删除的学生的学号:"<<endl;
            cin>>no;
            student *q, *p;
            q = head;
            while(q->next != NULL && q->next->number != no) q = q->next;
            if(q->next != NULL)
            {
                flag = 1;
                p = q->next;
                q->next = q->next->next;
                amount--;
                free(p);
                cout<<"..........删除成功!!!!!"<<endl;
            }
            if(flag == 0)
            {
                cout<<"对不起,您要删除的学生不存在!请重新输入!!!!!!!"<<endl;
                cout<<"您想继续修改吗(y/n)"<<endl;
                cin>>c;
                while(c!='y' && c!='n')
                {
                    cout<<"指令错误<请输入y/n>!!!!"<<endl;
                    cin>>c;
                }
            }
        }while(c=='y');
    }
    

    5.显示学生信息

    void ShowStudentInfo() //显示学生信息
    {
        student *stu = head->next;
        cout<<"学号   姓名   性别   数据结构   英语   数学   体育   概率   平均分"<<endl;
        int i=1;
        while(stu != NULL && i<=amount){
            cout<<setw(8)<<(*stu).number;
            cout<<setw(8)<<(*stu).name;
            cout<<setw(5)<<(*stu).sex;
            cout<<setw(10)<<(*stu).chengji.m_DataStructurescore;
            cout<<setw(12)<<(*stu).chengji.m_Englishscore;
            cout<<setw(8)<<(*stu).chengji.m_Mathscore;
            cout<<setw(8)<<(*stu).chengji.m_PEscore;
            cout<<setw(8)<<(*stu).chengji.m_Probabilityscore;
            cout<<setw(8)<<(*stu).average<<endl;
            i++;
            stu=stu->next;
        }
    }
    

    6.统计学生信息

    void Statistics()  //统计学生信息
    {
        //记录数据结构的不及格人数
        student *p1 = head->next;
        int a=0, b=0, c=0, d=0, e=0;    //用来累计五科不及格的人数
        for(int i=1; i<=amount; i++)
        {
            if(p1->chengji.m_DataStructurescore < 60)
                a++;
            p1 = p1->next;
        }
        //记录英语不及格的人数
        student *p2 = head->next;
        for(int i=1; i<amount; i++)
        {
            if(p2->chengji.m_Englishscore < 60)
                b++;
            p2 = p2->next;
        }
        //记录数学不及格的人数
        student *p3 = head->next;
        for(int i=1; i<amount; i++)
        {
            if(p3->chengji.m_Mathscore < 60)
                c++;
            p3 = p3->next;
        }
        //记录体育不及格人数
        student *p4 = head->next;
        for(int i=1; i<amount; i++)
        {
            if(p4->chengji.m_PEscore < 60)
                d++;
            p4 = p4->next;
        }
        //记录概率不及格人数
        student *p5 = head->next;
        for(int i=1; i<amount; i++)
        {
            if(p5->chengji.m_Mathscore < 60)
                e++;
            p5 = p5->next;
        }
        cout<<"数据结构不及格人数"<<a<<endl;
        cout<<"英语不及格人数"<<b<<endl;
        cout<<"数学不及格人数"<<c<<endl;
        cout<<"体育不及格人数"<<d<<endl;
        cout<<"概率不及格人数"<<e<<endl;
        student *p6 = head->next;
        int j=1;
        while(p6 != NULL && j<amount)
        {
            int f=0;
            if(p6->chengji.m_DataStructurescore <60) f++;
            if(p6->chengji.m_Englishscore <60) f++;
            if(p6->chengji.m_Mathscore <60) f++;
            if(p6->chengji.m_PEscore <60) f++;
            if(p6->chengji.m_Probabilityscore <60) f++;
            cout<<p6->name<<"同学不及格门数:"<<f<<endl;
            if( f != 0 ) cout<<"分别是:";
            if(p6->chengji.m_DataStructurescore <60)    cout<<"数据结构";
            if(p6->chengji.m_Englishscore <60)  cout<<"英语";
            if(p6->chengji.m_Mathscore <60) cout<<"数学";
            if(p6->chengji.m_PEscore <60)   cout<<"体育";
            if(p6->chengji.m_Probabilityscore <60)  cout<<"概率"<<endl;
            j++;
            p6 = p6->next;
        }
    }
    

    7.按照平均分排序

    void Sort_Average()  //按平均分排序
    {
        student *q = head->next;
        int i,j,pos;    //pos用来标识每一轮找到的最小关键字位置
        int temp;   //temp用来临时存放数据
        for(i=0; i<amount-1; i++)
            A[i] = q->average;  //讲所有的平均分放入A[Q]存储
        
        for(i=0; i<amount-1; i++)
        {
            pos=i;  //假定第i条记录为第i轮选择的初始时的最小值
            for(j=i+1; j<amount; j++)
                if(A[j]<A[pos])
                    pos=j;
            if(pos != i)
            {
                temp = A[i];
                A[i] = A[pos];
                A[pos] = temp;
            }
        }
        cout<<"学号  姓名  性别  数据结构  英语  数学  体育  概率  平均分  名次"<<endl;
        for(i=0; i<amount-1; i++)
        {
            if(q->average == A[i])
            {
                cout<<setw(8)<<q->number;
                cout<<setw(8)<<q->name;
                cout<<setw(5)<<q->sex;
                cout<<setw(9)<<q->chengji.m_DataStructurescore;
                cout<<setw(9)<<q->chengji.m_Englishscore;
                cout<<setw(8)<<q->chengji.m_Mathscore;
                cout<<setw(8)<<q->chengji.m_PEscore;
                cout<<setw(7)<<q->chengji.m_Probabilityscore;
                cout<<setw(9)<<q->average;
                cout<<setw(7)<<amount-i+
            }
        }
    }
    

    8.插入学生信息

    void Insert()  //插入新的学生的成绩
    {
        char c;
        student *q = head->next;
        for(int i=1; i<=amount-1; i++) q=q->next;    //找文件的尾
        do
        {
            student *stu = new student;
            cout<<"请输入学号:(8位)"<<setw(4);
            cin>>stu->number;
            cout<<"请输入姓名:"<<setw(4);
            cin>>(*stu).name;
            cout<<"请输入性别:"<<setw(2);
            cin>>(*stu).sex;
            cout<<"请输入数据结构成绩:"<<setw(3);
            cin>>(*stu).chengji.m_DataStructurescore;
            cout<<"请输入英语成绩:"<<setw(3);
            cin>>(*stu).chengji.m_Englishscore;
            cout<<"请输入数学成绩:"<<setw(3);
            cin>>(*stu).chengji.m_Mathscore;
            cout<<"请输入体育成绩:"<<setw(3);
            cin>>(*stu).chengji.m_PEscore;
            cout<<"请输入概率成绩:"<<setw(3);
            cin>>(*stu).chengji.m_Probabilityscore;
            (*stu).average = 0.2*((*stu).chengji.m_DataStructurescore+
                                  (*stu).chengji.m_Englishscore+(*stu).chengji.m_Mathscore
                                  +(*stu).chengji.m_PEscore+(*stu).chengji.m_Probabilityscore);
            q->next = stu;
            amount++;
            cout<<"数据信息插入成功,想继续插入吗?(y/n)";
            cin>>c;
            q = q->next;
            while(c != 'y' && c!= 'n')
            {
                cout<<"指令错误<请输入y/n>!!!!!!"<<endl;
                cout<<"数据信息插入成功,想继续插入吗?(y/n)";
                cin>>c;
            }
        }while(c == 'y');
    }
    

    9.文件导入学生成绩信息和将录入的信息保存到文件中

    void FreadFile()   //从文件读取学生信息
    {
        student *p2, *p1;
        p1 = p2 = new student;
        ifstream fin("成绩管理.txt",ios::out);
        fin>>amount;
        cout<<"共读出"<<amount<<"个学生信息"<<endl;
        head = p2;  //把表头传给head
        if(!fin)
        {
            cout<<"不能打开文件!!!!!"<<endl;
        }
        for(int i=1; i<=amount; i++)
        {
            p1 = new student;
            fin>>p1->number>>p1->name>>p1->sex
            >>p1->chengji.m_DataStructurescore>>p1->chengji.m_Englishscore
            >>p1->chengji.m_Mathscore>>p1->chengji.m_PEscore
            >>p1->chengji.m_Probabilityscore>>p1->average;
            p2->next = p1;
            p2 = p1;
        }
        cout<<"    学号     姓名   性别   数据结构   英语   数学   体育   概率   平均分"<<endl;
        student *q = head->next;
        for(int i=1; i<=amount; i++)
        {
            cout<<setw(8)<<q->number;
            cout<<setw(8)<<q->name;
            cout<<setw(5)<<q->sex;
            cout<<setw(9)<<q->chengji.m_DataStructurescore;
            cout<<setw(9)<<q->chengji.m_Englishscore;
            cout<<setw(8)<<q->chengji.m_Mathscore;
            cout<<setw(8)<<q->chengji.m_PEscore;
            cout<<setw(7)<<q->chengji.m_Probabilityscore;
            cout<<setw(9)<<q->average<<endl;
            q=q->next;
        }
        fin.close();
        cout<<"******************数据读取完毕*********************"<<endl;
    }
    
    void save()    //保存学生信息
    {
        student *stu = head->next;
        ofstream out("成绩管理.txt", ios::out);
        out<<amount<<"\t";
        int i = 1;
        while(stu != NULL && i<amount)
        {
            out<<stu->number<<"\t"<<stu->name<<"\t"
            <<stu->sex<<"\t"<<stu->chengji.m_DataStructurescore<<"\t"
            <<stu->chengji.m_Englishscore<<"\t"<<stu->chengji.m_Mathscore
            <<"\t"<<stu->chengji.m_PEscore<<"\t"<<stu->chengji.m_Probabilityscore<<"\t"
            <<stu->average<<"\t";
            stu = stu->next;
            i++;
            cout<<endl;
        }
        cout<<"**********成功将学生信息保存到(成绩管理.txt)中!!!!!***********"<<endl;
        out.close();
    }
    

    四、界面设计和测试函数

    界面菜单设计函数(可以根据自己的审美来设计)

    void DisplayMainMenu() //显示菜单
    {
        cout<<"\t\t---------------------------------------------\n";
        cout<<"\t\t|************学生成绩管理系统****************|\n";
        cout<<"\t\t|*------------------------------------------*|\n";
        cout<<"\t\t|* a.录入学生信息          b.查询学生信息   *|\n";
        cout<<"\t\t|* c.修改学生信息          d.删除学生信息   *|\n";
        cout<<"\t\t|* e.显示学生信息          f.统计学生信息   *|\n";
        cout<<"\t\t|* g.按照平均分排序        h.插入学生信息   *|\n";
        cout<<"\t\t|* i.退出软件        j.从文件中读取学生信息 *|\n";
        cout<<"\t\t|********************************************|\n";
        cout<<"\t\t---------------------------------------------\n";
    }
    

    测试函数main

    int main()
    {
        char x;
        bool flag2 = 0;
        DisplayMainMenu();
        do
        {
            do
            {
                cin>>x;
                if(x>='a' && x<='z')    flag2 =1;
                else{
                    cout<<"指令错误!!!!!!!!"<<endl;
                    cout<<"请选择相应的数字进行操作:"<<endl;
                }
            }while(flag2 == 0);
            switch(x)
            {
            case 'a':
                cout<<"**************现在进行学生信息录入*****************\n";
                InputScore();
                cout<<"输入的学生信息为:"<<endl;
                ShowStudentInfo();
                cout<<"***************************************************\n";
                DisplayMainMenu();
                break;
    
            case 'b':
                {
                    char z;
                    cout<<"**************现在进行学生信息查询*****************\n";
                    cout<<"请选择查询方式:"<<endl;
                    cout<<"0--按名字查询;     1--按学号查询"<<endl;
                    cin>>z;
                    while(z != '0' && z!= '1')
                    {
                        cout<<"指令错误(请选择0或1)!!!!!!"<<endl;
                        cout<<"请选择查询方式\n0--按名字查询;     1--按学号查询"<<endl;
                        cin>>z;
                    }
                    switch(z)
                    {
                        case '0': SearchByName(); break;    //按姓名查询
                        case '1': SearchByNumber(); break;  //按学号查询
                    }
                    cout<<"***************************************************\n";
                    DisplayMainMenu();
                    break;
                }
            case 'c':
                {
                    char p;
                    cout<<"**************现在进行学生信息修改*****************\n";
                    cout<<"请选择修改方式:0--按姓名修改     1--按学号修改"<<endl;
                    cin>>p;
                    while(p != '0' && p != '1')
                    {
                        cout<<"指令错误(请选择0或1)!!!!!!"<<endl;
                        cout<<"请选择修改方式:0--按姓名修改     1--按学号修改"<<endl;
                        cin>>p;
                    }
                    switch(p)
                    {
                        case '0':EditByName(); break;   //按姓名修改
                        case '1':EditByNumber(); break; //按学号修改
                    }
                    cout<<"***************************************************\n";
                    DisplayMainMenu();
                    break;
                }
            case 'd':
                cout<<"**************现在进行学生信息删除*****************\n";
                Delete();   //删除
                ShowStudentInfo();
                cout<<"***************************************************\n";
                DisplayMainMenu();
                break;
            case 'e':
                cout<<"**************现在进行显示学生信息*****************\n";
                ShowStudentInfo();  //显示数据
                cout<<"***************************************************\n";
                DisplayMainMenu();
                break;
            case 'f':
                cout<<"**************现在进行统计学生信息*****************\n";
                Statistics();   //统计学生信息
                cout<<"***************************************************\n";
                DisplayMainMenu();
                break;
            case 'g':
                cout<<"**************现在按照平均分排序*************\n";
                Sort_Average();
                cout<<"***************************************************\n";
                DisplayMainMenu();
                break;
            case 'h':
                cout<<"**************现在进行插入学生信息*****************\n";
                Insert();
                cout<<"***************************************************\n";
                DisplayMainMenu();
                break;
            case 'i':
                cout<<"***************************************************\n";
                cout<<"**************您已退出学生成绩管理系统*************\n";
                cout<<"***************************************************\n";
                cout<<endl;
                exit(0);
                break;
            case 'j':
                cout<<"**************现在进行读取学生信息*****************\n";
                FreadFile();
                DisplayMainMenu();
                break;
            }
        }while(flag2 == 1);
        return 0;
    }
    

    核心算法是直接选择排序,具体实现看排序函数
    还有什么不懂得可以留言
    以上代码来自《C++基础案例开发详解》教材,核心的排序算法是我自己写的

    展开全文
  • Java大作业 | 学生成绩信息管理系统

    千次阅读 2018-08-29 19:34:56
    Java大作业 学生成绩信息管理系统(无用户界面) ** import java.util.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.List; class Person{ public String ...

    **

    Java大作业 学生成绩信息管理系统(无用户界面)

    **

    import java.util.*;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.List;
    class Person{
    public String name;
    public String sex;
    public int Id;
    }

    class Student extends Person{
    int grade;
    public Student(String name,int Id,String sex,int grade){
    this.name= name;
    this.Id= Id;
    this.sex = sex;
    this.grade = grade;
    }
    public String getName(){
    return name;
    }
    public String getSex(){
    return sex;
    }
    public int getStudentId(){
    return Id;
    }
    public int getGrade(){
    return grade;
    }
    public void setGrade(int g){
    this.grade = g;
    }
    }

    interface stuTest{
    abstract void Tprint();
    }

    class stuIdException extends Exception{
    String message;
    public stuIdException(int m) {
    message =”学生学号输入错误 “+m+”是错误学号 请输入正确四位数 学号”;
    }
    public String Warn() {
    return message;
    }
    }

    class menu extends JFrame
    {
    public menu()
    {
    super(“学生信息登录系统”);
    JPanel root = new JPanel();

      root.add(new JLabel("用户名:"));
      root.add(new JTextField("       "));
      root.add(new JLabel("密码:"));
      root.add(new JTextField("请输入6位数字密码"));
      root.add(new JButton("点击登录"));
      add(root);
      setSize(300, 250);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      setVisible(true);
    

    }

    }
    public class Manager implements stuTest {
    static List StudentList = new ArrayList();

    public void Tprint(){
        System.out.println(" **----  请再次选择功能  ---- **   "); 
    }
    static void testselect(List<Student> StudentList ){
        System.out.println("          ");
        System.out.println(" **----   #大连海事大学   学生信息管理系统#   ---- **   "); 
        System.out.println("           ----- 系统功能如下-----      ");
        System.out.println("          ");
        System.out.println("           No 1.  进行学生的信息输入");
        System.out.println("           No 2.  进行学生的信息删除");
        System.out.println("           No 3.  进行学生的信息修改");
        System.out.println("           No 4.  进行学生的信息查询");
        System.out.println("          ");
        System.out.println("(///! 请先输入  数字 1  对所有学生的信息进行输入:///)"); 
        System.out.println("          ");
        System.out.println("{ 若已经输入完所有学生信息 "); 
        System.out.println("  则输入其他功能编号 对学生信息进行管理:}"); 
        System.out.println("          ");
    
        Scanner sc = new Scanner(System.in);
        int choice = sc.nextInt(); 
    
        if(choice>4) {
            throw new RuntimeException();
        }
    
        switch(choice){
        case 1:
            System.out.print("请输入该学生的姓名:");
            Scanner Sname = new Scanner(System.in);
            String name = Sname.nextLine();
            System.out.print("请输入该学生的性别:");
            Scanner Ssex = new Scanner(System.in);
            String sex = Ssex.nextLine();
            System.out.print("请输入该学生的学号(入学注册四位数号码):");
            Scanner SId = new Scanner(System.in);
            int studentId = SId.nextInt();
    
            if(studentId<=999) {
                throw new RuntimeException();
            }
    
            System.out.print("请输入该学生的java实验成绩分数:");
            Scanner Sgrade = new Scanner(System.in);
            int grade = Sgrade.nextInt();
            StudentList.add(new Student(name,studentId,sex,grade));
            System.out.println("已经完成信息输入");
    
            testselect(StudentList);
            break;
    
        case 2:
            System.out.print("请输入需要删除学生的学号:");
            Scanner Sid = new Scanner(System.in);
            int SstudentId = Sid.nextInt();
            for (int i = 0; i < StudentList.size(); i++) {
                if(SstudentId==(StudentList.get(i).getStudentId())){
                    StudentList.remove(i);
                    System.out.println("已经完成信息删除");                    
                }
            }
    
            testselect(StudentList);
            break;
    
        case 3:
            System.out.print("请输入需要修改成绩学生的学号:");
            Scanner GId = new Scanner(System.in);
            int GstudentId = GId.nextInt();
            if(GstudentId<=999) {
                throw new RuntimeException();
            }
            for (int j = 0; j < StudentList.size(); j++) {
                if(GstudentId==(StudentList.get(j).getStudentId())){
    
                    System.out.print("请输入修改后学生的成绩:");
                    Scanner Ggrade = new Scanner(System.in);
                    int grade2 = Ggrade.nextInt();
                    StudentList.get(j).setGrade(grade2);
                    System.out.println("已经完成信息修改"); 
                }
    
                }
                testselect(StudentList);
                break;
    
            case 4:
                System.out.print("请输入需要查询学生的学号:");
                Scanner CId = new Scanner(System.in);
                int CstudentId = CId.nextInt();
                if(CstudentId<=999) {
                    throw new RuntimeException();
                }
                for (int i = 0; i < StudentList.size(); i++) {
                    if(CstudentId==(StudentList.get(i).getStudentId())){
                        System.out.println("************************");
                        System.out.println("          ");   
                        System.out.println("该学生名字:"+StudentList.get(i).getName());
                        System.out.println("          ");
                        System.out.println("该学生性别:"+StudentList.get(i).getSex());
                        System.out.println("          ");
                        System.out.println("该学生学号:"+StudentList.get(i).getStudentId());
                        System.out.println("          ");
                        System.out.println("该学生成绩:"+StudentList.get(i).getGrade());
                        System.out.println("          ");     
                        System.out.println("************************");   
    
                    }
                }
                testselect(StudentList);
                break;
            }
    
        }
    
        public static void main(String[] args)
        {
    
           new menu();
           testselect(StudentList);                    
        }
    
    }
    展开全文
  • 基于jsp+Spring+mybatis的SSM学生成绩信息管理系统源码代码 项目已经托管到Github 下载链接: https://github.com/newworldallenge666/javawebproject 功能预览 SSM学生成绩信息管理系统-学生角色-查看课程信息↓↓ ...
  • ASP.NET学生成绩信息管理系统
  • JAVA大作业 | 学生成绩信息管理系统

    万次阅读 多人点赞 2018-08-29 19:37:35
    * *JAVA大作业 | 学生成绩管理系统(含有用户界面)*** ————- ps :多个包写在一起———– package test; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util....
  • 用C++与MFC写一个简单的学生成绩信息管理系统 1. 添加信息 通过在文本框中填写需要添加的信息,然后点击添加学生按钮进行添加 2.修改信息 通过在列表中选择要修改的学生,填写需要修改的信息,然后点击修改学生...
  • C语言学生成绩信息管理系统课程设计报告

    万次阅读 多人点赞 2016-10-07 22:19:22
    学生成绩管理系统 主要功能: (1)能按学期、按班级完成对学生成绩的录入、 修改,删除 (2)能按班级统计学生的成绩,求学生的总分及 平均分,并能根据学生的平均成绩进行排序 (3)能查询学生...
  • 1、设计学生成绩管理文件结构,编程实现学生成绩信息输入 2、实现按学号进行学生成绩的修改和删除,并保存到文件 3、按号查询某个学生的所有课程的成绩,并按分数从高到低排序输出 4、根据选择的课程和班级、查询和...
  • 基于ACCESS中小学生成绩信息管理系统-VB(论文+系统+开题报告+答辩PPT) 目 录  第一章 绪论……………………………………………………………1  第二章 系统分析  2.1 系统的可行性调查………………...
  • 今天使用序列数据(字典、列表、元组等)实现一个简单的学生成绩信息管理小程序,包括对学生信息的添加、查询和删除等操作,希望能够帮助到你喔~
  • 基于二叉树实现一个学生成绩信息管理系统

    千次阅读 多人点赞 2020-08-15 14:18:06
    众所周知,二叉树在数据结构领域属于一个较难的课题,本文针对二叉树的基本操作逻辑,实现了一个...2、输入编号,找到相应的二叉树节点,可查询学生成绩信息 3、打印出二叉树所有节点的信息 4、按编号删除相应的节点.
  • 【C#】实现学生成绩信息管理系统

    千次阅读 多人点赞 2020-10-09 19:01:34
    } //查询指定学生的总成绩 int x = 0; int k = 0; bool flag = false; //查询总成绩 public double getSum(string s) { for (x = 0; x ; x++) { if (stu[x].name == s) { k = x; flag = true; } } if (flag == true...
  • 1. 适用人群 本课程主要是针对计算机专业相关正在做毕业设计、或者是需要实战项目的Java开发学习者。...本课程演示的是一套基于SSM实现的物流管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目
  • 要求: 1.该程序以链表的形式存储信息; 2.系统实现添加,查找,修改,删除,遍历操作的基本功能; ...//************************************学生信息管理系统********************#include #
  • 学生成绩信息管理系统(c++)

    千次阅读 2014-06-25 11:06:51
    现有学生成绩信息文件1(1.txt),内容如下: 姓名 学号 语文 数学 英语  张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38...
  • C语言开发简单的学生成绩管理系统(附源码)

    万次阅读 多人点赞 2019-04-15 21:08:22
    学生成绩管理系统 开发语言:C语言 开发工具:Visual Studio 2019 开发时间:2019.4.14 开发者:summer @一、系统使用展示 @二、系统功能 @三、菜单 @四、录入学生信息 @五、打印学生信息 @六、保存学生信息 @七、...
  • C语言学生成绩管理系统源代码

    万次阅读 多人点赞 2018-03-21 20:27:20
    大学C语言实训课,C语言学生成绩管理系统。 #include<stdio.h> #include<string.h> #include<math.h> struct student { int num; char name[20]; float pingshi; float shiyan; ...
  • 学生成绩管理信息系统

    千次阅读 多人点赞 2017-09-10 00:23:03
    设计题目:学生成绩管理信息系统设计与实现。 软件功能分为服务器功能与客户端功能两部分。其中: 管理员通过系统管理界面进入,建立各种课程、班级,将课程、班级信息保存在数据库中并可以对课程、班级进行改动和...
  • 基于C#窗体的学生成绩/信息管理系统

    千次阅读 多人点赞 2020-06-23 23:27:51
    前段时间发布了一个网页版的基于C#的学生信息管理系统,有很多同学都跑来问我有没有窗体版本的,所以为了满足大家的要求,在近段时间就写了一个窗体版的学生成绩/信息管理系统学生成绩/信息管理是一个必不可少的...
  • 学校课程设计作业,完成一个简单的学生信息管理系统,考虑到系统实用性,把它做成了一个简单的能够使用的学生成绩管理系统,包含了学生信息管理,就当做练手吧。 发一个博客,做展示用!! 第一次做的一个比较完整...
  • 学生成绩管理管理系统

    万次阅读 多人点赞 2020-06-23 15:18:26
    学生成绩管理管理系统 一,需求分析 1、编写目的 ...学生信息管理系统能够方便地查询和变更学生的基本数据(包括学籍数据和成绩数据),节省大量工作时间,有效地提高学生信息管理的效率。而查询信息的直观显
  • JavaWeb学生成绩管理系统

    万次阅读 多人点赞 2018-07-06 21:12:05
    基于JavaWeb开发的学生成绩,使用MyEclipse2014开发,连接MySQL数据库,存储学生的身份信息、成绩,管理员的身份信息,课程信息。功能说明:学生注册。学生身份:跳转到学生登录界面,点击查询成绩按钮,以表格的形式...
  • 基于javaweb实现学生成绩管理系统,实现了学生信息管理,课程管理,教师信息管理,学生成绩汇总,学生登录注册,教师和管理员的登录,个人信息修改等。 系统功能大致描述:基于javaweb实现学生成绩管理系统,实现了学生信息...
  • 学生成绩管理系统

    万次阅读 多人点赞 2018-06-02 13:58:58
    基于Jsp+sql server数据库的学生成绩管理系统需求分析学生成绩管理系统需求服务对象为在校学生和在校交工校教工. 整体分为学生模块和教师模块.学生模块 需求 :1:学生个体通过学号登录系统.2:网页页面显示学生信息...
  • C++ 学生成绩管理系统

    万次阅读 多人点赞 2019-10-04 20:26:09
    用c++实现学生成绩管理系统,此系统可以提供成绩的录入,可以按学生成绩进行排名,求总分和平均分以及提供成绩查询功能等。 实现功能 提供成绩录入 统计每个学生的总分和平均分 按总分由大到小排出名次 提供成绩...
  • java 学生信息管理系统

    万次阅读 多人点赞 2015-10-06 14:03:33
    学生信息管理包括添加,删除,修改,查询,显示全部等 具体结构如图 在SQL Server 2005数据库上实现数据操作。使用纯面向对象的java语言作为开发语言 在sql server 2005新建一个名为Student的数据库,在下面新建一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,768
精华内容 19,507
关键字:

学生成绩信息管理系统