zoukankan      html  css  js  c++  java
  • c++学生成绩管理系统

    虽然比较水 =。= 但是写了两节课+一个中午 都是强迫症的锅

     http://www.cnblogs.com/wenruo/p/4940182.html 

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    
    using namespace std;
    
    class student       // student 类为管理系统的一个节点
    {
        friend class studentMessage;
        student      *next;
        char         name[30];
        char         num[30];
        double       score[6];
    public:
        student()
        {
            strcpy(name, "null");
            strcpy(num, "null");
            for (int i = 0; i < 6; ++i) score[i] = 0;
        }
        student(const student &a)
        {
            strcpy(name, a.name);
            strcpy(num, a.num);
            for (int i = 0; i < 6; ++i)
                score[i] = a.score[i];
        }
        student &input()
        {
            cout << "姓名:";  cin >> name;
            cout << "学号:";  cin >> num;
            for (int i = 0; i < 5; ++i)
            {
                cout << "输入第" << (i + 1) << "门成绩:";
                cin >> score[i];
                score[5] += score[i];
            }
            return *this;
        }
        student* get_next()
        {
            return next;
        }
        void print()
        {
            printf("%8s %10s ", name, num);
            for (int i = 0; i < 6; ++i) printf(" %6.2f ", score[i]);
            printf("
    ");
        }
        void Swap() // 交换当前结点和下一个
        {
            char temp[30];
            strcpy(temp, name);
            strcpy(name, next->name);
            strcpy(next->name, temp);
    
            strcpy(temp, num);
            strcpy(num, next->num);
            strcpy(next->num, temp);
    
            for (int i = 0; i < 6; ++i)
            {
                int tmp = score[i];
                score[i] = next->score[i];
                next->score[i] = tmp;
            }
        }
    };
    
    class studentMessage
    {
    protected:
        student *first;
        student *last;
    public:
        studentMessage()
        {
            first = last = new student;
        }
        ~studentMessage()
        {
            Clear();
            delete first;
        }
        studentMessage &Append();           // 在链表尾部插入节点
        student *Find(const char *x);       // 查找
        void Query();                       // 查询
        studentMessage &Delete();           // 删除查找结点
        studentMessage &Clear();            // 删除所有结点
        studentMessage &Sort();             // 按第i门课排序
        void print();                       // 显示所有节点
        int menu();                         // 显示菜单
    };
    
    studentMessage &studentMessage::Append()
    {
        student x;
        x.input();
        student *ptr = last;
        *ptr = x;
        last = new student;
        ptr->next = last;
        return *this;
    }
    
    studentMessage &studentMessage::Delete()
    {
        char x[30];
        cout << "输入要删除的信息(学号或姓名)
    ";
        cin >> x;
        student *ptr = Find(x);
    
        if (ptr == last)
        {
            cout << "未找到相关信息
    ";
            return *this;
        }
        ptr->print();
        cout << "是否删除此信息?(是输入1,否输入0)";
        cin >> x;
        if (*x == '1')
        {
            if (ptr == first)
            {
                first = first->next;
                delete first;
            }
            else
            {
                student *temp = first;
                while (temp->next != ptr) temp = temp->next;
                temp->next = ptr->next;
                delete ptr;
            }
            cout << "已删除
    ";
        }
        else
        {
            cout << "已取消
    ";
        }
        return *this;
    }
    
    studentMessage &studentMessage::Clear()
    {
        char ch[30];
        cout << "将删除所有信息。确认请按Y";
        cin >> ch;
        if (*ch != 'Y' && *ch != 'y')
        {
            cout << "已取消
    ";
            return *this;
        }
        student *ptr = first;
        while (ptr != last)
        {
            student *next = ptr->next;
            delete ptr;
            ptr = next;
        }
        first = last;
        return *this;
    }
    
    void studentMessage::print()
    {
        if (first == last)
        {
            cout << "暂无信息
    ";
            return ;
        }
        cout << "---------------------------------成绩列表------------------------------" << endl;
        cout << "序号  姓名      学号      成绩1   成绩2   成绩3   成绩4   成绩5  总成绩" << endl;
        int no = 1;
        student *ptr = first;
        while (ptr != last)
        {
            printf("%3d:", no++);
            ptr->print();
            ptr = ptr->next;
        }
    }
    
    student *studentMessage::Find(const char *x)
    {
        student *ptr = first;
        while (ptr != last)
        {
            if (strcmp(ptr->name, x) == 0 || strcmp(ptr->num, x) == 0)
                break;
            ptr = ptr->next;
        }
        return ptr;
    }
    
    void studentMessage::Query()
    {
        char x[30];
        cout << "输入你要查询的信息(学号或姓名)";
        cin >> x;
        student *ptr = Find(x);
        if (ptr == last)
        {
            cout << "没有查询到相关信息
    ";
        }
        else
        {
            ptr->print();
        }
    }
    
    // 冒泡排序
    studentMessage &studentMessage::Sort()
    {
        int x;
        cout << "输入你想按照哪门课的成绩来排序?((1-5)总成绩输入6):";
        cin >> x;
        x--;
        student *ptr, *cnt = last;
        while (cnt != first)
        {
            ptr = first;
            while (ptr->next != cnt)
            {
                if (ptr->next->score[x] > ptr->score[x])
                {
                    ptr->Swap();
                }
                ptr = ptr->next;
            }
            cnt = ptr;
        }
        return *this;
    }
    
    int studentMessage::menu()
    {
        cout << "===============================
    ";
        cout << "      学生成绩管理系统
    
    ";
        cout << "      1.显示所有学生成绩
    ";
        cout << "      2.添加信息
    ";
        cout << "      3.查询信息
    ";
        cout << "      4.删除信息
    ";
        cout << "      5.成绩排序
    ";
        cout << "      6.删除所有信息
    ";
        cout << "      0.退出
    ";
        cout << "===============================
    ";
    
        int ch;
        cin >> ch;
        return ch;
    }
    
    int main()
    {
        studentMessage ls;
        int ch;
        while (ch = ls.menu())
        {
            switch(ch)
            {
                case 1: ls.print(); break;
                case 2: ls.Append(); break;
                case 3: ls.Query(); break;
                case 4: ls.Delete(); break;
                case 5: ls.Sort(); break;
                case 6: ls.Clear(); break;
            }
        }
    
    
        return 0;
    }
    

      

  • 相关阅读:
    论文阅记 YOLOv4: Optimal Speed and Accuracy of Object Detection
    【项目实战】yolov3-tiny人脸数据模型训练
    面试题54. 二叉搜索树的第k大节点
    102. 二叉树的层序遍历
    107. 二叉树的层次遍历 II
    连续子数组的最大和
    172. 阶乘后的零
    26 进制
    405. 数字转换为十六进制数
    504. 七进制数
  • 原文地址:https://www.cnblogs.com/wenruo/p/4940182.html
Copyright © 2011-2022 走看看