zoukankan      html  css  js  c++  java
  • 控制台Student Management System <C++>

    #include "student.h"
    
    CStu::CStu() 
    {
        //链表头指针
        m_pHead = NULL;  
        //链表尾指针
        m_pEnd = NULL;
    
        m_stuCount = 0;
    }
    
    CStu::~CStu()
    {
        while (m_pHead)
        {
            Student* pTemp = m_pHead;
            m_pHead = m_pHead->pNext;
            delete pTemp;
        }
    }
    
    //添加功能
    void CStu::AddStudent()
    {
        //输入学生信息
        char stuNum[15];
        cout << "输入学生学号: ";
        cin >> stuNum;
        //1、检测编号重复
        Student* pTemp = m_pHead;  
        while (pTemp)
        {
            if (strcmp (pTemp->stuNum , stuNum) == 0)
            {
                cout << "学号已存在,请重新添加
    ";
                return ;
            }
            pTemp = pTemp->pNext;
        }
    
        //2、添加
        //创建节点
        Student *pTempStu = new Student;
        //节点成员赋值
        strcpy(pTempStu->stuNum,stuNum);
        cout << "
    输入学生名字: ";
        cin >> pTempStu->stuName;
        cout << "
    输入学生性别: ";
        cin >> pTempStu->stuSex;
        cout << "
    输入学生年龄: ";
        cin >> pTempStu->stuAge;
        cout << "
    输入学生系别: ";
        cin >> pTempStu->stuSystem;
        cout << "
    输入学生班级: ";
        cin >> pTempStu->stuClass;
        cout << "
    输入学生联系方式: ";
        cin >> pTempStu->stuTel;
        //指针赋值
        pTempStu->pNext = NULL;
        pTempStu->pPre = NULL;
    
        //链接到链表上
        if (NULL == m_pHead)
        {
            m_pHead = pTempStu;    
            m_pEnd = pTempStu;
        }
        else
        {
            m_pEnd->pNext = pTempStu;
            pTempStu->pPre = m_pEnd;
            m_pEnd = pTempStu;
        }
    
        m_stuCount++; //学生人数增加
    }
    
    //查询  根据名字 或者学号
    void CStu::SCanStudentMsg()
    {
        //判断 是否有学生, 没有学生就不用查了
        if (NULL == m_pHead)
        {
            cout << "没有学生,请添加学生再查询
    ";
            return ;
        }
    
        //输入名字或者学号
        cout << "
    输入名字或者学号: ";
        char arrTemp[15];
        cin >> arrTemp;
    
        //判断下是学号还是名字
        Student* pTemp = m_pHead;  
        if (arrTemp[0] >= '0' && arrTemp[0] <= '9')
        {
            while (pTemp)
            {
                if (strcmp (pTemp->stuNum , arrTemp) == 0)
                {
                    //输出学生信息
                    ShowStu(pTemp);
                    return ;
                }
                pTemp = pTemp->pNext;
            }
        }
        else
        {
            while (pTemp)
            {
                if (strcmp (pTemp->stuName , arrTemp) == 0)
                {
                    //输出学生信息
                    ShowStu(pTemp);
                    return ;
                }
                pTemp = pTemp->pNext;
            }
        }
    
        cout << "
    查无此学生
    ";
    }
    
    //删除指定学生
    void CStu::DeleteStu()
    {
        //判断 是否有学生, 没有学生就不用编辑
        if (NULL == m_pHead)
        {
            cout << "记录为空!
    ";
            return ;
        }
    
        //输入名字或者学号
        cout << "
    输入需要删除的学生的学号: ";
        char arrTemp[15];
        cin >> arrTemp;
    
        //判断下是学号还是名字
        Student* pTemp = m_pHead;  
        while (pTemp)
        {
            if (strcmp (pTemp->stuNum , arrTemp) == 0)
            {
                //删除学生信息
                DeleteStu(pTemp);
                m_stuCount--; //学生人数减少一个
                return ;
            }
            pTemp = pTemp->pNext;
        }
    
        cout << "
    查无此学生
    ";
    }
    
    //删除指定学生
    void CStu::DeleteStu(Student* pTemp)
    {
        //链表有一个几点
        if (m_pHead == m_pEnd)
        {
            delete m_pHead;
            m_pHead = NULL;
            m_pEnd = NULL;
        }
        else if(m_pHead->pNext == m_pEnd)  //有两个节点
        {
            if (pTemp == m_pHead)  //是头
            {
                delete m_pHead;
                m_pHead = m_pEnd;
                m_pEnd->pPre = NULL;
            }
            else  //是尾巴
            {
                delete m_pEnd;
                m_pEnd = m_pHead;
                m_pHead->pNext = NULL;
            }
        }
        else
        {
            if (pTemp == m_pHead)  //是头
            {
                m_pHead = m_pHead->pNext;
                m_pHead->pPre = NULL;
                delete pTemp;
            }
            else if (pTemp == m_pEnd) //是尾巴
            {
                m_pEnd = m_pEnd->pPre;
                m_pEnd->pNext = NULL;
                delete pTemp;
            }
            else  //中间节点
            {
                pTemp->pPre->pNext = pTemp->pNext;
                pTemp->pNext->pPre = pTemp->pPre;
                delete pTemp;
            }
        }
    }
    
    
    //编辑
    void CStu::EditStuMsg()
    {
        //判断 是否有学生, 没有学生就不用编辑
        if (NULL == m_pHead)
        {
            cout << "没有学生,请添加学生再查询
    ";
            return ;
        }
    
        //输入名字或者学号
        cout << "
    输入需要修改的学生的名字或者学号: ";
        char arrTemp[15];
        cin >> arrTemp;
    
        //判断下是学号还是名字
        Student* pTemp = m_pHead;  
        if (arrTemp[0] >= '0' && arrTemp[0] <= '9')
        {
            while (pTemp)
            {
                if (strcmp (pTemp->stuNum , arrTemp) == 0)
                {
                    //编辑学生信息
                    EditStu(pTemp);
                    return ;
                }
                pTemp = pTemp->pNext;
            }
        }
        else
        {
            while (pTemp)
            {
                if (strcmp (pTemp->stuName , arrTemp) == 0)
                {
                    //编辑学生信息
                    EditStu(pTemp);
                    return ;
                }
                pTemp = pTemp->pNext;
            }
        }
    
        cout << "
    查无此学生
    ";
    }
    
    //编辑指定学生信息
    void CStu::EditStu(Student* pTemp)
    {
        //输入学生信息
        char stuNum[15];
        cout << "输入修改后的学生学号: ";
        cin >> stuNum;
        //1、检测编号重复
        Student* pTemp1 = m_pHead;  
        while (pTemp1)
        {
            if (strcmp (pTemp1->stuNum , stuNum) == 0)
            {
                cout << "学号已存在,请重新添加
    ";
                return ;
            }
            pTemp1 = pTemp1->pNext;
        }
    
        strcpy(pTemp->stuNum, stuNum);
        cout << "
    输入修改后的名字: ";
        cin >> pTemp->stuName;
        cout << "
    输入修改后的性别: ";
        cin >> pTemp->stuSex;
        cout << "
    输入修改后的年龄: ";
        cin >> pTemp->stuAge;
        cout << "
    输入修改后的系别: ";
        cin >> pTemp->stuSystem;
        cout << "
    输入修改后的班级: ";
        cin >> pTemp->stuClass;
        cout << "
    输入修改后的联系方式: ";
        cin >> pTemp->stuTel;
    }
    
    void CStu::ShowStu(Student* pTemp)
    {
        cout << "学号   姓名   性别   年龄   系别   班级   联系方式
    ";
        cout << pTemp->stuNum << "      " << pTemp->stuName << "   " << pTemp->stuSex << 
            "     " << pTemp->stuAge << "     " << pTemp->stuSystem
            << " " << pTemp->stuClass << "    " << pTemp->stuTel << "
    ";
    }
    
    //显示
    void CStu::ShowAllStuMsg()
    {
        //没有人就不用显示了
        if (NULL == m_pHead)
        {
            cout << "没有学生
    ";
            return ;
        }
    
        //循环显示
        cout << "学号   姓名   性别   年龄   系别   班级   联系方式
    ";
        Student* pTemp = m_pHead;  
        while (pTemp)
        {
            //输出学生信息
            cout << pTemp->stuNum << "      " << pTemp->stuName << "   " << pTemp->stuSex << 
                "     " << pTemp->stuAge << "     " << pTemp->stuSystem
                << " " << pTemp->stuClass << "    " << pTemp->stuTel << "
    ";
    
            pTemp = pTemp->pNext;
        }
    }
    
    //菜单
    
    
    //1、统计学生总人数
    int CStu::StuCount()
    {
        cout << m_stuCount << endl;
        return m_stuCount;
    }
    
    //保存进文件
    void CStu::SaveInFile()
    {
        //打开文件,覆盖打开
        FILE* pFile = fopen("stu.txt", "w");
    
        Student* pTemp = m_pHead;  
        while (pTemp->pNext)
        {
            //写入文件
            fprintf(pFile, "%s %s %s %u %s %s %s
    ",  pTemp->stuNum, pTemp->stuName, pTemp->stuSex, pTemp->stuAge, pTemp->stuSystem, pTemp->stuClass, pTemp->stuTel);
            pTemp = pTemp->pNext;
        }
        fprintf(pFile, "%s %s %s %u %s %s %s",  pTemp->stuNum, pTemp->stuName, pTemp->stuSex, pTemp->stuAge, pTemp->stuSystem, pTemp->stuClass, pTemp->stuTel);
    
        //关闭文件
        fclose(pFile);
    }
    //读取
    void CStu::ReadFromFile()
    {
        FILE* pFile = fopen("stu.txt", "r");
    
        while (!feof(pFile))
        {
            Student* pTemp = new Student;  
            //写入文件
            fscanf(pFile, "%s%s%s%u%s%s%s",  pTemp->stuNum, pTemp->stuName, pTemp->stuSex, &pTemp->stuAge, pTemp->stuSystem, pTemp->stuClass, pTemp->stuTel);
            pTemp->pNext = NULL;
            pTemp->pPre = NULL;
    
            //加入链表
            //链接到链表上
            if (NULL == m_pHead)
            {
                m_pHead = pTemp;    
                m_pEnd = pTemp;
            }
            else
            {
                m_pEnd->pNext = pTemp;
                pTemp->pPre = m_pEnd;
                m_pEnd = pTemp;
            }
        }
    
        //关闭文件
        fclose(pFile);
    }
  • 相关阅读:
    浙大《数据结构》第二章:线性结构
    浙大《数据结构》第一章:基本概念
    《软技能:代码之外的生存指南》读书笔记
    《高质量程序设计指南》读书笔记
    《大话无线通信》读书笔记
    使用Tensorflow训练神经网络模型
    掌握功率谱估计的方法
    网络安全宣传周活动
    ICMP数据包
    DNS数据包
  • 原文地址:https://www.cnblogs.com/WinonaJia/p/8324496.html
Copyright © 2011-2022 走看看