• C++项目作业 学生管理系统


    /*Student.h*/
    #pragma
    once #include<string.h> using namespace std; #include<string> class Student { public: //ID age name math english sport 专业 是子类都具有的 所以就在基类中声明 int ID; int age; string major = "1"; char name[20]; float math, english, sport; Student *next; //链表指针 //一下get函数 因为子类的专业不同 所以实现的方式不同 声明虚函数 在子类中实现 virtual float get_shi_bian_fun(); virtual float get_fan_han_fen_xi() ; virtual float get_wei_fen_jihe(); virtual float get_zonghe_english(); virtual float get_spoken_english(); virtual float get_zu_cheng_yuanli(); virtual float get_ti_xi_jie_gou(); virtual float get_hui_bian(); virtual string get_major(); //因为每个子类遍历的东西也不同 所以遍历函数也要为虚函数 在子类中以不同的方式来实现 virtual void traverse(Student *t); virtual float get_main_average();//取平均数也一样,返回平均成绩 virtual float get_average_score(); virtual void change(); //每个成员的科目不一样,需要修改的东西也不一样 Student(); virtual ~Student(); };
    /*Student.cpp
    /*Math_Student.h*/
    #pragma once
    #include "Student.h"
    #include <string>
    class Math_Student :
        public Student
    {
    public:
        //特有的科目成员  都声明为float
        float shi_bian_fun;
        float fan_han_fen_xi;
        float wei_fen_jihe;
        string major = "Math_Student";//专业直接初始化
        Math_Student();
        ~Math_Student();
        //get函数  方便在manage类里面拿到数据信息
        float get_shi_bian_fun();
        float get_fan_han_fen_xi() ;
        float get_wei_fen_jihe() ;
        float get_main_average();
        float get_average_score();
        string  get_major();
        //遍历信息
        void traverse(Student *t);
        void change(); //修改信息
        
    };
    /*Math_Student.cpp*/
    #include "Math_Student.h"
    
    #include<iostream>
    #include"string.h"
    using namespace std;
    
    
    Math_Student::Math_Student()
    {
        
        cout << "请输入学生信息:" << endl;
        cout << "age:" << endl;
        cin >> age;
        getchar();
        cout << "name:";
        cin >> name;
        getchar();
        cout << "ID:" << endl;
        cin >> ID;
        getchar();
        cout << "sport_score:" << endl;
        cin >>sport;
        getchar();
        cout << "math_score:" << endl;
        cin >> math;
        getchar();
        cout << "english_score" << endl;
        cin >> english;
        getchar();
        cout << "shi_bian_fun_score" << endl;
        cin >>shi_bian_fun;
        getchar();
        cout << "fan_han_fen_xi_score" << endl;
        cin >>fan_han_fen_xi;
        getchar();
        cout << "wei_fen_jihe_score" << endl;
        cin >>wei_fen_jihe;
        getchar();
    
        cout << "录入成功!" << endl;
    }
    
    
    Math_Student::~Math_Student()
    {
    }
    
    void Math_Student::change() {
        cout << "    实变函数:" << endl;
        cin >> shi_bian_fun;
        getchar();
        cout << "    泛函分析:" << endl;
        cin >> fan_han_fen_xi;
        getchar();
        cout << "    微分几何:" << endl;
        cin >> wei_fen_jihe;
        getchar();
    
    }
    
    void Math_Student::traverse(Student *t) {
        //公共的信息修改 在 manage 里面 这里来到类里面来修改特有的信息
                cout << "学生信息为:" << endl 
                     << "    学号:" << t->ID << "  姓名:" <<name << "  年龄:" <<age << "  专业:" <<major << endl
                     <<"公共课成绩:"<<endl
                     << "    数学:" <<math << "  英语:" <<english << "  体育:" << sport << endl
                     << "专业课成绩:"<<endl
                     <<"     实变函数:"<<t->get_shi_bian_fun()<<"  泛函分析:"<<t->get_fan_han_fen_xi()<<"  微分几何:"<<t->get_wei_fen_jihe()<<endl
                     <<endl;            
    }
        
    
    float Math_Student::get_main_average() {
    
        return ((math + english + sport) / 3.0);
    }
    
    float  Math_Student::get_average_score() {
        float av = 0;
        av += math; av += sport; av += english, av += shi_bian_fun, av += fan_han_fen_xi, av += wei_fen_jihe;
        return (av / 6.0);
    
    }
    
    float Math_Student:: get_shi_bian_fun() {
        return shi_bian_fun;
    }
    
    float Math_Student ::get_fan_han_fen_xi() {
        return fan_han_fen_xi;
    }
    
    float Math_Student::get_wei_fen_jihe() {
        return  wei_fen_jihe;
    }
    
    string  Math_Student::get_major() {
        return major;
    }
    ;
    /*English_Student.h*/
    #pragma once
    #include "Student.h"
    #include <string>
    class English_Student :
        public Student
    {
    public:
        //特有成员变量
        float zonghe_english;
        float spoken_english;
        string major = "English_Student";
        
        English_Student();
        ~English_Student();
        float get_zonghe_english();
        float get_spoken_english();
        string  get_major();
        float get_main_average();
        void change();
        void  traverse(Student *t);
        float get_average_score();
    };
    /*English_Student.cpp*/
    #include "English_Student.h"
    
    #include<iostream>
    #include"string.h"
    using namespace std;
    
    English_Student::English_Student()
    {
    
        cout << "age:" << endl;
        cin >> age;
        getchar();
        cout << "name:";
        cin >> name;
        getchar();
        cout << "ID:" << endl;
        cin >> ID;
        getchar();
        cout << "sport_score:" << endl;
        cin >> sport;
        getchar();
        cout << "math_score:" << endl;
        cin >> math;
        getchar();
        cout << "english_score" << endl;
        cin >> english;
        cout << "zonghe_english_score" << endl;
        cin >> zonghe_english;
        cout << "spoken_english_score" << endl;
        cin >> spoken_english;
        getchar();
        cout << "录入成功!" << endl;
    }
    
    
    English_Student::~English_Student()
    {
    }
    
    void English_Student::change() {
        //公共的信息修改 在 manage 里面 这里来到类里面来修改特有的信息
        cout << "    综合英语:" << endl;  
        cin >> zonghe_english;
        cout << "    口语英语:" << endl;
        cin >> spoken_english;
        getchar();
    }
    
     void  English_Student:: traverse(Student *t) {
        //因为实在 类里面 可以直接访问到数据
         //输出的信息 分了 几行 便于好看
                 cout << "学生信息为:" << endl 
                      << "    学号:" << ID << "  姓名:" << name << "  年龄:" << age << "  专业:" << major << endl
                      <<"公共课成绩:"<<endl 
                      << "    数学:" << math << "  英语:" << english << "  体育:" << sport << endl
                      << "专业课成绩:" <<endl
                      <<"     综合英语:"<< t->get_zonghe_english() << "  口语英语:" << t->get_spoken_english() <<endl
                      <<endl;
    }
    
     float  English_Student::get_average_score() {
         float av = 0.0;  //来求和  在类里面 可以访问到数据
         av += math; av += sport; av += english;
         av += zonghe_english; av += spoken_english;
        return (av / 5.0) ; //返回平均分 /5.0 为float
    
     }
    
     float English_Student::get_main_average() {
         //直接返回 公共课平均分   为float
         return ((math + english + sport) / 3.0);
     }
    
     float English_Student::get_zonghe_english() {
         return zonghe_english; //返回综合英语的分
     }
    
     float English_Student::get_spoken_english() {
         return spoken_english;//返回口语英语的分
     }
    
     string  English_Student::get_major() {
         return major; //返回专业  为string
     }
     ;
    /*IT_Student.h*/
    #pragma once
    #include "Student.h"
    #include <string>
    class IT_Student :
        public Student
    {
    public:
        //特有科目成员变量
        float zu_cheng_yuanli;
        float ti_xi_jie_gou;
        float hui_bian;
        string major = "IT_Student";
        //一系列get函数 返回float
        float get_zu_cheng_yuanli();
        float get_ti_xi_jie_gou();
        float get_hui_bian();
        float get_average_score();
        float get_main_average();
        string  get_major();
        IT_Student();
        ~IT_Student();
        void  traverse(Student *t);
        void change();
        
    };
    /*IT_Student.cpp*/
    #include "IT_Student.h"
    
    #include<iostream>
    #include"string.h"
    using namespace std;
    
    
    IT_Student::IT_Student()
    {
        cout << "age:" << endl;
        cin >> age;
        getchar();
        cout << "name:";
        cin >> name;
        getchar();
        cout << "ID:" << endl;
        cin >> ID;
        getchar();
        cout << "sport_score:" << endl;
        cin >> sport;
        getchar();
        cout << "math_score:" << endl;
        cin >> math;
        getchar();
        cout << "english_score" << endl;
        cin >> english;
        cout << "zu_cheng_yuanli_score" << endl;
        cin >> zu_cheng_yuanli;
        cout << "ti_xi_jie_gou_score" << endl;
        cin >> ti_xi_jie_gou;
        cout << "hui_bian_score" << endl;
        cin >> hui_bian;
        getchar();
        cout << "录入成功!" << endl;
    }
    
    IT_Student::~IT_Student()
    {
    }
    
    void  IT_Student::change() {
        //公共的信息修改 在 manage 里面 这里来到类里面来修改特有的信息
        cout << "    组成原理:" << endl;
        cin >> zu_cheng_yuanli;
        cout << "    体系结构:" << endl;
        cin >> ti_xi_jie_gou;
        cout << "    汇编语言:" << endl;
        cin >> hui_bian;
        getchar();
    }
    
    float IT_Student::get_main_average() {
        return ((math + english + sport) / 3.0);
    }
    
    void  IT_Student::traverse(Student *t) {
        //因为实在 类里面 可以直接访问到数据
        //输出的信息 分了 几行 便于好看
                cout << "学生信息为:" << endl 
                     << "    学号:" << ID << "  姓名:" << name << "  年龄:" << age << "  专业:" << major << endl
                     <<"公共课成绩:"<<endl
                     << "    数学:" <<math << "  英语:" << english << "  体育" << sport << endl
                     << "专业课成绩: "<<endl
                     <<"    组成原理:"<< t->get_zu_cheng_yuanli() << "  体系结构:" << t->get_ti_xi_jie_gou() <<"  汇编语言:"<<t->get_hui_bian()<< endl
                     <<endl;
        }
    
    float IT_Student::get_average_score() {
        float av = 0;
        av += math; av += sport; av += english; 
        av += zu_cheng_yuanli; av += ti_xi_jie_gou; av += hui_bian;
        return (av / 6.0);
    
    }
    
    float IT_Student::get_zu_cheng_yuanli() {
        return zu_cheng_yuanli;
    }
    /*main.cpp*/
    **#include "manage_student.h"
    #include "Student.h"
    #include<iostream>
    #include "Math_Student.h"
    #include "IT_Student.h"
    #include "English_Student.h"
    using namespace std;
    
    /*void traverse(Student *head) {
        int index = 1;    // 用于计数第几个学生
        Student *temp = head;
        while (temp != NULL) {  //同样一直到后面没有地址结束
            cout << temp->math;
            temp = temp->next;
        }
    }*/
    
    void menu(Student *head,manage_student Chead) {
        int m = 0;
        int ID = 0;
        int conter = 0;
        while (1) {
            cout << "                         ***************请选择您需要的操作:****************" << endl;
            cout << "                         *              1.  增加学生信息                   *" << endl;
            cout << "                         *              2.  删除学生信息                   *" << endl;
            cout << "                         *              3.  修改学生信息                   *" << endl;
            cout << "                         *              4.  按学号ID查询                   *" << endl;
            cout << "                         *              5.  查询某位学生的平均分           *" << endl;
            cout << "                         *              6.  某个学生的三科平均成绩         *" << endl;
            cout << "                         *              7.  按公共课平均分从高到低排序     *" << endl;
            cout << "                         *              8.  遍历学生信息                   *" << endl;
            cout << "                         *              9.  结束功能并把信息写入文件中     *" << endl;
            cout << "                         *              0.  退出程序                       *" << endl;
            cout << "                         ***************************************************" << endl;
            rewind(stdin);
            cin >> m;
            if (m >=0 && m < 10) {
                switch (m) {
                case 1: Chead.append_student(head); break;
                case 2: {cout << "要删除学生信息的学号:";
                    cin >> ID;
                    head = Chead.delete_student(head, ID, Chead.getlength(head)); }break;
                case 3: {cout << "需要修改学生信息的同学ID:";
                    cin >> ID;
                    Chead.change_message(head, ID); }break;
                case 4: {cout << "按学号查询  请输入需要查询的同学的ID为:";
                    cin >> ID;
                    Chead.search(head, ID); }break;
                case 5: { 
                    cout << "请输入您需要查询学生的平均成绩的ID:";
                        cin >> ID;
                        Chead.get_average_score(head,Chead.getlength(head),ID );
                     }break;
                case 6: {
                    cout << "请输入您需要查询学生的平均成绩的ID:";
                    cin >> ID;
                    Student *t = head;
                    while (t != NULL) {
                        if (t->ID == ID) {
                            cout << "该同学的公共课平均成绩为:" << t->get_main_average() << endl; 
                        }t = t->next;
                    }
                    break;
                }
    
                case 7: {
                    Chead.rank_average_score(head, Chead.getlength(head));
                    cout << "排序成功!"; break;
                }
                case 8: {
                    Student *t = head;
                    while (t != NULL) {
                        t->traverse(t);
                        t=t->next;
                    }break;
                }
                case 9: {
                    Chead.openfile(head, Chead.getlength(head)); 
                    cout << "写入文件成功!"; break;
                }
                case 0: {
                    Chead.release(head);//结束之前free掉链表
                    return; }
                }
            }
            else cout << "输入有错误  请输入0-9的整数"; continue;
        }
    /*manage_student.h*/
    #pragma once
    #include<iostream>
    #include "Student.h"
    
    class manage_student
    {
    public:
        //存入文件  传入头指针和长度
        void  openfile(Student *head, int len);
        //成绩排序   传入头指针和长度
        void rank_average_score(Student *head,int len);
        //修改信息   指定ID找到学生信息 修改 传入头 和 ID
        void change_message(Student *head, int ID);
        //增加信息  传入头就可以
        void append_student(Student *head);
        //删除学生信息   传入头 需要删除学生信息的ID 链表长度
        Student * delete_student(Student *head,int ID,int len);
        //创建链表 
        Student * create();
        //搜索查询学生信息 根据ID搜索
        void search(Student *head, int ID);
        //得到链表的长度  传入头  返回链表长度
        int getlength(Student *head);
        //得到平均分  显示平均分
        void get_average_score(Student *head, int len,int ID);
        void release(Student *head);
    
        manage_student();
        ~manage_student();
    };
    
    
    /*manage_student.cpp*/
    #include "manage_student.h"
    #include "Student.h"
    #include<iostream>
    #include "Math_Student.h"
    #include "IT_Student.h"
    #include "English_Student.h"
    #include<string.h>
    using namespace std;
    
    #include<fstream>
    #include<iomanip>
    
    
    manage_student::manage_student()
    {
    }
    
    manage_student::~manage_student()
    {
    
    
    }
     
    Student *  manage_student:: create() {
        int num = 0; //来计数 输入的第几个学生
        int temp;  //用来输入选择初始化的学生的专业
        int len = 0; //表示链表的长度
        cin >> len;  //也就是初始输入需要添加的学生数目
        Student stu;//用来初始化指针
        Student *pre = &stu;
        Student *c = &stu;
        Student *Head = &stu;  //最后要返回的头指针
        while (num < len) {
            cout << "************您需要添加此学生的专业是?  1:数学系  2:英语系  3:计算机系" << endl;
            cin >> temp;
            if (temp == 1) {
                c = new Math_Student;  //一定要new一个**********不然会覆盖之前的
                if (num == 0) {         // 千万不能 Math_Student c  这个错误调了几天!!!!!!
                    Head = c;   //  头指针的地址
                    Head->next = NULL;  //第一个的尾给空  
                    pre = Head;  //pre指向  前一个 也就是头
                }
                if (num) {
                    pre->next = c; //前一个的尾接到下一个的地址
                    pre = pre->next; //pre 指向next指针
                    pre->next = NULL;  //next指针指向的 弄为空
                }
                ++num;
                continue;
            }
            else if (temp ==2 ) {
                c = new English_Student;
                if (num == 0) {
                    Head = c;   //  头指针的地址
                    Head->next = NULL;  //第一个的尾给空  
                    pre = Head;  //pre指向  前一个 也就是头
                }
                if (num) {
                    pre->next = c; //前一个的尾接到下一个的地址
                    pre = pre->next; //pre 指向next指针
                    pre->next = NULL;  //next指针指向的 弄为空
                }
                ++num;
                continue;
            }
            else if (temp == 3) {
                c = new IT_Student;
                if (num == 0) {
                    Head = c;   //  头指针的地址
                    Head->next = NULL;  //第一个的尾给空  
                    pre = Head;  //pre指向  前一个 也就是头
                }
                if (num) {
                    pre->next = c; //前一个的尾接到下一个的地址
                    pre = pre->next; //pre 指向next指针
                    pre->next = NULL;  //next指针指向的 弄为空
                }
                ++num;
                continue;
            }
            else {
                cout << "输入有误!请重新输入" << endl; continue;
            }
        }
        return Head;  //把头指针返回到main里 便于取用
    }
    
    int manage_student::getlength(Student * head)
        {
            int num = 1; //=0 或者 =1 取决于while的判断条件
            Student *t=head;
            while (t->next != 0) {    //当head指向后面没有了 它就是NULL  结束
                ++num;
                t = t->next;  //如果head 不是NULL ++num后要把head指针指向最后
            }    
        return num;  //返回int长度
        }
    
    void manage_student::search(Student *head,int ID) {
        Student *t = head; //用*t来遍历
        while (t != NULL) {  //只要t不是空 就进入 
            if (t->ID == ID) { //如果匹配到 ID
                t->traverse(t); //用基类的指针调用子类的遍历方法
                }t = t->next;
        }
    }
    void manage_student::release(Student *head) {
        Student *n;   //需要一个指针存着下一个地址
        while (head != NULL) {
            n = head->next;  //把n指向下一块要释放的地址
            free(head);
            head = n;   //然后再把head从前一个地址移到下一个地址
        }
    }
    void manage_student::append_student(Student *head) {
        Student *c = head;  //都用基类的指针来操作
        Student *t = head; 
        int temp;       
        while (t->next != NULL) {
            t = t->next;  //把t移动到最后一块链表
        }
        cout << "************您需要添加此学生的专业是?  1:数学系  2:英语系  3:计算机系" << endl;
        cin >> temp;
        if (temp == 1) {
            c = new Math_Student;  //一定要new一个
                t->next = c; //前一个的尾接到下一个的地址
                t = t->next; //pre 指向next指针
                t->next = NULL;  //next指针指向的 弄为空
        }
        else if (temp == 2) {
                c = new English_Student;  //一定要new一个
                t->next = c; //前一个的尾接到下一个的地址
                t = t->next; //pre 指向next指针
                t->next = NULL;  //next指针指向的 弄为空
        }
        else if (temp == 3) {
                c = new IT_Student;  //一定要new一个
                t->next = c; //前一个的尾接到下一个的地址
                t = t->next; //pre 指向next指针
                t->next = NULL;  //next指针指向的 弄为空
        }
        else {
            cout << "输入有误!请重新输入" << endl;
        }
    } 
    
    Student * manage_student::delete_student(Student *head, int ID,int len)
    {
        //用*t来遍历
        Student *t = head;
        Student *temp;//临时指针
        for (int i = 0; i < (len - 1); ++i) {
            if (i == 0) {  //如果就是第一块链表  需要特殊处理  因为头Head会变
                if (head->ID == ID) { head = head->next;  delete t;  return head; } //一定要返回一个新的头Head
                if ((t->next)->ID == ID) {  //如果是第二块链表匹配
                    temp = t->next;  //把第一块跟第三块连接起来
                    t->next = (t->next)->next;
                    delete temp; return head; //delete调 第二块 返回头Head
                }
            }
            if (i != 0) {
                if ((t->next)->ID == ID) {  //如果遍历的不是第一块了,操作都一样
                    temp = t->next;  //前一块的next
                    t->next = (t->next)->next; //前后连接
                    delete temp; return head; //删掉中间
                }t = t->next;
            }
        }cout << "删除成功!" << endl; return head; //返回头指针
    }
    
    void manage_student::change_message(Student *head, int ID) {
        Student *t = head;
        while (t!= NULL) {
            if (t->ID == ID) {//ID匹配  进入
                //  匹配属于数学系
                if (t->get_major() == "Math_Student") {
                    //在此处修改公共的信息
                    cout << "*******请输入要修改的学生信息:" << endl;
                    cout << "          ID:" << endl;
                    cin >> t->ID;
                    cout << "          姓名:" << endl;
                    cin >> t->name;
                    cout << "          年龄:" << endl;
                    cin >> t->age;
                    cout << "          数学:" << endl;
                    cin >> t->math;
                    cout << "          英语:" << endl;
                    cin >> t->english;
                    cout << "          体育:" << endl;
                    cin >> t->sport;
                    t->change();  //然后再去子类里面调用change修改特有的成员变量
                }
                if (t->get_major() == "English_Student") {
                    cout << "*******请输入要修改的学生信息:" << endl;
                    cout << "          ID:" << endl;
                    cin >> t->ID;
                    cout << "          姓名:" << endl;
                    cin >> t->name;
                    cout << "          年龄:" << endl;
                    cin >> t->age;
                    cout << "          数学:" << endl;
                    cin >> t->math;
                    cout << "          英语:" << endl;
                    cin >> t->english;
                    cout << "          体育:" << endl;
                    cin >> t->sport;
                    t->change();
                }
                if (t->get_major() == "IT_Student") {
                    cout << "*******请输入要修改的学生信息:" << endl;
                    cout << "          ID:" << endl;
                    cin >> t->ID;
                    cout << "          姓名:" << endl;
                    cin >> t->name;
                    cout << "          年龄:" << endl;
                    cin >> t->age;
                    cout << "          数学:" << endl;
                    cin >> t->math;
                    cout << "          英语:" << endl;
                    cin >> t->english;
                    cout << "          体育:" << endl;
                    cin >> t->sport;
                    t->change();
                }
    
                cout << "信息修改完成!"<<endl; return;
            }
    
            t = t->next;
        }
        cout << "对不起!查无此人,请重新确认学号是否输入正确,谢谢!"<<endl;
    }
    
    void manage_student::rank_average_score(Student *head,int len) {
        Student *t = head;  //用*t来 遍历
        Student *pre = head;//把前面的存着 来跟后面的比较
        t = t->next; //t往后移动一个
        int ID;
        char name[20];
        float math,  english, sport;
        for (int i = 0; i < (len - 1); ++i) {
            while (t != NULL) {
                //如果后面的平均分比前面的平均分高 就进入
                if ( t->get_average_score() >pre->get_average_score() ){
                    strcpy_s(name, t->name); strcpy_s(t->name, pre->name); strcpy_s(pre->name, name);
                    ID = t->ID; t->ID = pre->ID; pre->ID = ID;
                    math = t->math; t->math = pre->math; pre->math = math;
                    sport = t->sport; t->sport = pre->sport; pre->sport = sport;
                    english = t->english; t->english = pre->english; pre->english = english;
                }
                t = t->next;
                //t每次循环完了之后 就把pre后移一个 t接在pre的后面
            }pre = pre->next; t = pre->next;  
        }
    }
    
    void manage_student::openfile(Student *head, int len) {
        //同样用t遍历
        Student *t = head;
        ofstream ofile;               //定义输出文件
        ofile.open("D:\学生信息");     //作为输出文件打开
        //for循环把链表 里面的信息写入文件
        for (int i = 0; i < len; ++i) {
            //判断系别  因为每个专业的成员不一样
            if (t->get_major() == "Math_Student") {
                ofile << "录入的各学生的信息如下:  " << endl;
                ofile << "  基本信息:" << "  学号" << t->ID << "  姓名:" << t->name << "  年龄:" << t->age << "  专业:" << t->get_major() << endl
                    << "  公共课成绩:" << "  数学:" << t->math << "  英语:" << t->english << "  体育:" << t->sport << endl
                    << "  专业课成绩:" << "  实变函数" << t->get_shi_bian_fun() << "  泛函分析:" << t->get_fan_han_fen_xi() << "  微分几何" << t->get_wei_fen_jihe() << endl;
                t = t->next; continue;
            }
        if (t->get_major() == "English_Student") {
            ofile << "录入的各学生的信息如下:  " << endl;
            ofile << "  基本信息:" << "  学号" << t->ID << "  姓名:" << t->name << "  年龄:" << t->age << "  专业:" << t->get_major() << endl
                << "  公共课成绩:" << "  数学:" << t->math << "  英语:" << t->english << "  体育:" << t->sport << endl
                << "  专业课成绩:" << "  综合英语:" << t->get_zonghe_english() << "  口语英语:" << t->get_spoken_english() << endl;
                t = t->next; continue;
            }
            if (t->get_major() ==  "IT_Student") {
                ofile << "录入的各学生的信息如下:  " << endl;
                ofile << "  基本信息:" << "  学号" << t->ID << "  姓名:" << t->name << "  年龄:" << t->age << "  专业:" << t->get_major() << endl
                    << "  公共课成绩:" << "  数学:" << t->math << "  英语:" << t->english << "  体育:" << t->sport << endl
                    << "  专业课成绩:" << "  组成原理:" << t->get_zu_cheng_yuanli() << "  体系结构:" << t->get_ti_xi_jie_gou() << "  汇编语言:" << t->get_hui_bian() << endl;
                t = t->next; continue;
            }
        }
        ofile.close();
        return ;
    }
    
    void manage_student::get_average_score(Student *head, int len,int ID) {
        Student *t = head; //用t遍历
        for (int i = 0; i < len; ++i) {
            if (t->ID == ID) {
                //用基类的指针调用子类的函数  返回平均分 输出
                cout << "该学生的平均成绩为:" << t->get_average_score() << endl; return;
            }
            t = t->next;
        }
        cout << "请确认您输入的ID是否有误" << endl;
    }
    ;
    
    }
    
    void main() {
        cout << "欢迎进入学生管理系统!请输入需要添加的学生数: "<<endl;
        Student temp; //用来初始化指针
        Student *Head=&temp;
        Student *t=&temp;
        int len;
        manage_student Chead;
        Head=Chead.create();//把头地址传回来给Head 指向的是第一个类stu
        
        menu(Head, Chead); //调用菜单函数
    
        system("pause");
        return;
    }
    
    
    
    float IT_Student::get_ti_xi_jie_gou() {
        return ti_xi_jie_gou;
    }
    
    float IT_Student::get_hui_bian() {
        return hui_bian;
    }
    
    string  IT_Student::get_major() {
        return major;
    }
    ;
    */
    #include "Student.h" #include<iostream> Student::Student() { } Student::~Student() { } //这些函数都是假的 真正实现在子类里面 float Student::get_average_score() { return 0; } float Student::get_main_average() { return 0; } void Student::traverse(Student *t) { cout << "我在Student 里面" << endl; } float Student:: get_shi_bian_fun() { return 0; } float Student::get_fan_han_fen_xi() { return 0; } float Student::get_wei_fen_jihe() { return 0; } float Student::get_zonghe_english() { return 0; } float Student::get_spoken_english() { return 0; } float Student::get_zu_cheng_yuanli() { return 0; } float Student::get_ti_xi_jie_gou() { return 0; } float Student::get_hui_bian() { return 0; } string Student::get_major() { return 0; } void Student::change() { } ;
  • 相关阅读:
    memwatch内存泄露检测工具
    JavasSript实现秒转换为“天时分秒”控件和TDD测试方法应用
    字符编码转换笔记
    AjaxFileUpload 方法与原理分析
    Lua Rings库介绍
    Virtualbox+UbuntuServer+Xshell搭建Linux开发环境
    HTTP下载文件名称编码说明
    lua metatable 和 _index 实验
    前向后瞻正则表达式及其JS例子
    浏览器浏览记忆(history)几则技巧记录
  • 原文地址:https://www.cnblogs.com/Stephen-Jixing/p/9865140.html
Copyright © 2020-2023  润新知