码迷,mamicode.com
首页 > 编程语言 > 详细

Student Management System <C++>

时间:2018-01-21 17:39:35      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:编辑   span   删除   name   inf   pen   fscanf   count()   显示   

#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 << "学号已存在,请重新添加\n";
            return ;
        }
        pTemp = pTemp->pNext;
    }

    //2、添加
    //创建节点
    Student *pTempStu = new Student;
    //节点成员赋值
    strcpy(pTempStu->stuNum,stuNum);
    cout << "\n输入学生名字: ";
    cin >> pTempStu->stuName;
    cout << "\n输入学生性别: ";
    cin >> pTempStu->stuSex;
    cout << "\n输入学生年龄: ";
    cin >> pTempStu->stuAge;
    cout << "\n输入学生系别: ";
    cin >> pTempStu->stuSystem;
    cout << "\n输入学生班级: ";
    cin >> pTempStu->stuClass;
    cout << "\n输入学生联系方式: ";
    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 << "没有学生,请添加学生再查询\n";
        return ;
    }

    //输入名字或者学号
    cout << "\n输入名字或者学号: ";
    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 << "\n查无此学生\n";
}

//删除指定学生
void CStu::DeleteStu()
{
    //判断 是否有学生, 没有学生就不用编辑
    if (NULL == m_pHead)
    {
        cout << "记录为空!\n";
        return ;
    }

    //输入名字或者学号
    cout << "\n输入需要删除的学生的学号: ";
    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 << "\n查无此学生\n";
}

//删除指定学生
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 << "没有学生,请添加学生再查询\n";
        return ;
    }

    //输入名字或者学号
    cout << "\n输入需要修改的学生的名字或者学号: ";
    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 << "\n查无此学生\n";
}

//编辑指定学生信息
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 << "学号已存在,请重新添加\n";
            return ;
        }
        pTemp1 = pTemp1->pNext;
    }

    strcpy(pTemp->stuNum, stuNum);
    cout << "\n输入修改后的名字: ";
    cin >> pTemp->stuName;
    cout << "\n输入修改后的性别: ";
    cin >> pTemp->stuSex;
    cout << "\n输入修改后的年龄: ";
    cin >> pTemp->stuAge;
    cout << "\n输入修改后的系别: ";
    cin >> pTemp->stuSystem;
    cout << "\n输入修改后的班级: ";
    cin >> pTemp->stuClass;
    cout << "\n输入修改后的联系方式: ";
    cin >> pTemp->stuTel;
}

void CStu::ShowStu(Student* pTemp)
{
    cout << "学号   姓名   性别   年龄   系别   班级   联系方式\n";
    cout << pTemp->stuNum << "      " << pTemp->stuName << "   " << pTemp->stuSex << 
        "     " << pTemp->stuAge << "     " << pTemp->stuSystem
        << " " << pTemp->stuClass << "    " << pTemp->stuTel << "\n";
}

//显示
void CStu::ShowAllStuMsg()
{
    //没有人就不用显示了
    if (NULL == m_pHead)
    {
        cout << "没有学生\n";
        return ;
    }

    //循环显示
    cout << "学号   姓名   性别   年龄   系别   班级   联系方式\n";
    Student* pTemp = m_pHead;  
    while (pTemp)
    {
        //输出学生信息
        cout << pTemp->stuNum << "      " << pTemp->stuName << "   " << pTemp->stuSex << 
            "     " << pTemp->stuAge << "     " << pTemp->stuSystem
            << " " << pTemp->stuClass << "    " << pTemp->stuTel << "\n";

        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\n",  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);
}

 

Student Management System <C++>

标签:编辑   span   删除   name   inf   pen   fscanf   count()   显示   

原文地址:https://www.cnblogs.com/WinonaJia/p/8324496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!