(C++)学生成绩管理系统--封装链表

终于结束了期末考试,有时间将这学期C++作业整理一下,都是一些基础的内容,写出来希望给一些初学者一些参考。主要使用到C++的面对对象编程思想,对学生信息类及链表类进行封装
文章可能有点长,可以只参考需要的部分

题目要求

用C++及类和对象来进行抽象、封装与实现,用作课内的第四次作业。注意学生的成绩需要用链表来实现,并且链表也需要实现封装。
成绩管理系统
信息描述:
现有学生成绩信息,内容如下
姓名 学号 语文 数学 英语
张明明 01 67 78 82
李成友 02 78 91 88
张辉灿 03 68 82 56
王露 04 56 45 77
陈东明 05 67 38 47
… … … … …
请用C++编写一系统,实现学生信息管理,包含以下功能:
(1)信息维护
要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息 。所有的学生数据需要存放于文件中;能够从文件中读入数据,并在程序中以链表的形式予以实现。
(2)信息查询
要求:查询时可实现按姓名查询、按学号查询
(3)成绩统计
要求:

  1. 输入任意的一个课程名(如数学)给出该门课程的成绩的分段统计(以10分为一个成绩段,如90-100,80-89,70-79,60-69,小于60),给出在此分数段的学生数目。
  2. 根据指定的课程名求该门课所有学生的平均成绩
  3. 给出每个学生的平均成绩
  4. 排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果
  5. 至少采用文本菜单界面

整体分析

此系统为学生成绩管理系统,根据题目要求,它需要包含:信息维护、信息查询、成绩统计、排序、文本界面菜单五个模块。
为实现这些功能,该程序包含两个类:
1、Student类:包含一个学生的所有信息,以及学生信息的设置和获取函数
2、List类:包含对学生信息链表的所有操作

实现该系统共使用到7个文件:

1、 menu.cpp:内含多个创建菜单函数,用于实现不同模块的功能显示
2、 student.h:包含用于保存学生信息的Student类
3、 student.cpp:包含Student类的成员函数的实现
4、 list.h:包含用于操作学生信息的的List类
5、 list.cpp:包含List类的成员函数的实现
6、 main.cpp:调用所有的函数,并进行适当的组合实现完整的学生成绩管理系统
7、 student.txt:包含学生的全部信息

程序源码

menu.cpp
//全部的菜单函数
#include<iostream>
using namespace std;
//主界面
void menu()
{
   
    cout<<"\n\n\t\t----------------学生成绩管理系统------------------"<<endl<<endl;
    cout<<"\t\t1、信息维护功能"<<"           "<<"\t2、信息查询功能"<<endl<<endl;
    cout<<"\t\t3、成绩统计功能"<<"           "<<"\t4、排序功能"<<endl<<endl;
    cout<<"\t\t5、退出"<<endl<<endl;
    return;
}

//信息维护功能界面
void menu1()
{
   
    cout<<"\n\n\t\t信息维护功能"<<endl<<endl;
    cout<<"\t\t1、增加学生信息"<<endl<<endl;
    cout<<"\t\t2、删除学生信息"<<endl<<endl;
    cout<<"\t\t3、修改学生信息"<<endl<<endl;
    cout<<"\t\t4、返回"<<endl<<endl;
    return;
}

//信息查询功能界面
void menu2()
{
   
    cout<<"\n\n\t\t信息查询功能"<<endl<<endl;
    cout<<"\t\t1、按姓名查询"<<endl<<endl;
    cout<<"\t\t2、按学号查询"<<endl<<endl;
    cout<<"\t\t3、返回"<<endl<<endl;
    return;
}

//成绩统计功能界面
void menu3()
{
   
    cout<<"\n\n\t\t成绩统计功能"<<endl<<endl;
    cout<<"\t\t1、根据课程名对成绩进行分段统计"<<endl<<endl;
    cout<<"\t\t2、各科目的平均成绩"<<endl<<endl;
    cout<<"\t\t3、返回"<<endl<<endl;
    return;
}

//排序功能界面
void menu4()
{
   
    cout<<"\n\n\t\t排序功能"<<endl<<endl;
    cout<<"\t\t1、降序"<<endl<<endl;
    cout<<"\t\t2、升序"<<endl<<endl;
    cout<<"\t\t3、返回"<<endl<<endl;
    return;
}
main.cpp
//主函数,采用switch结构的多层嵌套
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include"student.h"
#include"list.h"

void menu();
void menu1();
void menu2();
void menu3();
void menu4();

using namespace std;
int main(void)
{
   

    int choice,choice1,choice2,choice3,choice4;
    List pHead;
    string subj;
    pHead.input_info();

    while(1)
    {
   
        menu();
        cout<<"请选择你要进行的操作:";
        cin>>choice;
        switch(choice)
        {
   
            //信息维护功能
            case 1:
                while(1)
                {
   
                    pHead.input_info();
                    system("cls");
                    menu1();
                    cout<<"请选择你要进行的操作:";
                    cin>>choice1;
                    switch(choice1)
                    {
   
                    //增加学生信息
                    case 1:
                        pHead.output_info();//遍历链表,并打印学生的信息
                        pHead.add_info();//增加学生信息
                        system("cls");
                        cout<<"\n\n\n\t\t学生成绩信息表(更新)"<<endl;
                        pHead.output_info();//遍历链表,并打印学生的信息
                        pHead.save_list();//将改动保存到文件中
                        cout<<"\n改动已保存到文件中"<<endl<<endl;
                        system("pause");
                        break;
                    //删除学生信息
                    case 2:
                        pHead.output_info();//遍历链表,并打印学生的信息
                        pHead.delete_info();//删除学生信息
                        system("cls");
                        cout<<"\n\n\n\t\t学生成绩信息表(更新)"<<endl;
                        pHead.output_info();//遍历链表,并打印学生的信息
                        pHead.save_list();//将改动保存到文件中
                        cout<<"\n改动已保存到文件中"<<endl<<endl;
                        system("pause");
                        break;
                    //修改学生信息
                    case 3:
                        pHead.output_info();//遍历链表,并打印学生的信息
                        pHead.modify_info();//修改学生信息
                        system("cls");
                        cout<<"\n\n\n\t\t学生成绩信息表(更新)"<<endl;
                        pHead.output_info();//遍历链表,并打印学生的信息
                        pHead.save_list();//将改动保存到链表中
                        cout<<"\n改动已保存到文件中"<<endl<<endl;
                        system("pause");
                        break;
                    default:
                        system("cls");
                        break;
                    }
                    if(choice1!=1&&choice1!=2&&choice1!=3)
                        break;
                }
                break;

            //信息查询功能
            case 2:
                while(1)
                {
   
                    system("cls");
                    menu2();
                    cout<<"请选择你要进行的操作:";
                    cin>>choice2;
                    switch(choice2)
                    {
   
                    //按姓名进行查询
                    case 1:
                        pHead.search_by_name();
                        system("pause");
                        break;
                    //按学号进行查询
                    case 2:
                        pHead.search_by_ID();
                        system("pause");
                        //system("cls");
                        break;
                    default:
                        system("cls");
                        break;
                    }
                    if(choice2!=1&&choice2!=2)
                        break;
                    //break;
                }
                break;

            //成绩统计功能
            case 3:
                while(1)
                {
   
                    system("cls");
                    menu3();
                    cout<<"请选择你要进行的操作:";
                    cin>>choice3;
                    switch(choice3)
                    {
   
                    //根据课程名给出成绩的分段统计
                    case 1:
                        cout<<"输入课程名称:";
                        cin>>subj;
                        if(subj=="数学")
                            pHead.separate_by_math();
                        else if(subj=="英语")
                            pHead.separate_by_english();
                        else if(subj=="C++")
                            pHead.separate_by_cpp();
                        else
                            cout<<"没有该科目!"<<endl;
                        system("pause");
                        break;
                    //计算各科目的平均成绩
                    case 2:
                        pHead.count_subject_avg();//计算各学科的平均成绩
                        system("pause");
                        break;
                    default:
                        system("cls");
                        break;
                    }
                    if(choice3!=1&&choice3!=2)
                        break;
                }
                break;

            //排序功能
            case 4:
                while(1)
                {
   
                    system("cls");
                    menu4();
                    cout<<"请选择你要进行的操作:";
                    cin>>choice4;
                    switch(choice4)
                    {
   
                    //升序排列
                    case 1:
                        cout<<"请输入科目名称:";
                        cin>>subj;
                        cout<<endl;
                        if(subj=="数学")
                        {
   
                            cout<<"\t\t数学成绩降序排列表"<<endl<<endl;
                            pHead.sortMath();
                        }
                        else if(subj=="英语")
                        {
   
                            cout<<"\t\t英语成绩降序排列表"<<endl<<endl;
                            pHead.sortEnglish();
                        }
                        else if(subj=="C++")
                        {
   
                            cout<<"\t\tC++成绩降序排列表"<<endl<<endl;
                            pHead.sortCpp();
                        }
                        else
                            cout<<"没有该科目!"<<endl;
                        pHead.output_info();
                        cout<<endl;
                        system("pause");
                        break;
                    case 2:
                        cout<<"请输入科目名称:";
                        cin>>subj;
                        cout<<endl;
                        if(subj=="数学")
                        {
   
                            cout<<"\t\t数学成绩升序排列表"<<endl<<endl;
                            pHead.sortMath_s();
                        }
                        else if(subj=="英语")
                        {
   
                            cout<<"\t\t英语成绩升序排列表"<<endl<<endl;
                            pHead.sortEnglish_s();
                        }
                        else if(subj=="C++")
                        {
   
                            cout<<"\t\tC++成绩升序排列表"<<endl<<endl;
                            pHead.sortCpp_s();
                        }
                        else
                            cout<<"没有该科目!"<<endl;
               
  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值