学生成绩管理系统 2

//  *   算法描述:
//  *       程序主要用于学生成绩管理,包括录入、添加、删除、修改、排序、输出等。
//  *   程序源代码主要由二个类和一个界面控制模块组成。类StudentResult用于保存单
//  *   个成绩记录的内容;类ResutlList用于维护整个成绩表,主要操作一条保存有各个
//  *   学生成绩记录对象(StudentResult)的链表,可对其进行上述提到的各种操作,
//  *   是程序的主体;另外还有一个界面控制的模块,界面主要仿命令行方式,这样可以
//  *   使程序的流量控制交由用户控制,而且更加灵活。
//  ****************************************************************************


#include <iostream>
#include <stdlib.h>
#include "main.h"

using std::cout;
using std::cin;
using std::endl;

void ShowWelcome();
void WaitCmd(char szCmdLine[MAX_CMDLINE_LENGTH]);
bool RunCmd(char szCmdLine[MAX_CMDLINE_LENGTH]);
void cmd_add();
void cmd_close();
void cmd_del();
void cmd_help();
void cmd_list();
void cmd_mb();
void cmd_mf();
void cmd_ml();
void cmd_mn();
void cmd_new();
void cmd_open();
void cmd_rcr();
void cmd_save();
void cmd_sbavg();
void cmd_sbchs();
void cmd_sbcls();
void cmd_sbeng();
void cmd_sbmth();
void cmd_sbnam();
void cmd_sbnum();
void cmd_sbttl();
void cmd_vcr();

ResultList m_rl;

int main(int argc, char *argv[])
{
    char szCmdLine[MAX_CMDLINE_LENGTH] = {'/0'};
   
    ShowWelcome();
    do
    {
        WaitCmd(szCmdLine);
    }while (RunCmd(szCmdLine));

    return 0;
}

 

 

//显示欢迎使用界面
void ShowWelcome()
{
    int i = 0;
   
    system("CLS");
   
    for (i=0; i<10; i++) cout << endl;
    cout << "              +-------------------------------------------------+" << endl;
    cout << "              |  欢迎使用Student Result Manage学生成绩管理系统  |" << endl;
    cout << "              +-------------------------------------------------+" << endl;
    for (i=0; i<10; i++) cout << endl;
    cout << "输入help命令查看帮助。" << endl;
}

//等待命令输入
void WaitCmd(char szCmdLine[MAX_CMDLINE_LENGTH])
{
    do
    {
        cout << "CMD> ";
        gets(szCmdLine);
    }while (0 == strlen(szCmdLine));   
}

//执行命令,如果用户输入了退出命令,则返回false,否则返回true
bool RunCmd(char szCmdLine[MAX_CMDLINE_LENGTH])
{
    if (0 == strcmp(szCmdLine, "exit"))
        return false;
    else if (0 == strcmp(szCmdLine, "add"))
        cmd_add();
    else if (0 == strcmp(szCmdLine, "clear"))
        system("CLS");
    else if (0 == strcmp(szCmdLine, "close"))
        cmd_close();
    else if (0 == strcmp(szCmdLine, "del"))
        cmd_del();
    else if (0 == strcmp(szCmdLine, "help"))
        cmd_help();
    else if (0 == strcmp(szCmdLine, "list"))
        cmd_list();
    else if (0 == strcmp(szCmdLine, "mb"))
        cmd_mb();
    else if (0 == strcmp(szCmdLine, "mf"))
        cmd_mf();
    else if (0 == strcmp(szCmdLine, "ml"))
        cmd_ml();
    else if (0 == strcmp(szCmdLine, "mn"))
        cmd_mn();
    else if (0 == strcmp(szCmdLine, "new"))
        cmd_new();
    else if (0 == strcmp(szCmdLine, "open"))
        cmd_open();
    else if (0 == strcmp(szCmdLine, "rcr"))
        cmd_rcr();
    else if (0 == strcmp(szCmdLine, "save"))
        cmd_save();
    else if (0 == strcmp(szCmdLine, "sbavg"))
        cmd_sbavg();
    else if (0 == strcmp(szCmdLine, "sbchs"))
        cmd_sbchs();
    else if (0 == strcmp(szCmdLine, "sbcls"))
        cmd_sbcls();
    else if (0 == strcmp(szCmdLine, "sbeng"))
        cmd_sbeng();
    else if (0 == strcmp(szCmdLine, "sbmth"))
        cmd_sbmth();
    else if (0 == strcmp(szCmdLine, "sbnam"))
        cmd_sbnam();
    else if (0 == strcmp(szCmdLine, "sbnum"))
        cmd_sbnum();
    else if (0 == strcmp(szCmdLine, "sbttl"))
        cmd_sbttl();
    else if (0 == strcmp(szCmdLine, "vcr"))
        cmd_vcr();
    else
        cout << "未知命令,请使用help命令查看帮助。" << endl;
       
    return true;
}


//==============================================================================
//                                  命令处理
//==============================================================================
void cmd_add()
{
    StudentResult *lpsr = NULL;
    SRRecord srrTemp = {0, {'/0'}, {'/0'}, 0.0f, 0.0f, 0.0f};
   
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    cout << "学号: ";
    cin >> srrTemp.uiNumber;
    cout << "班别: ";
    cin >> srrTemp.szClass;
    cout << "姓名: ";
    cin >> srrTemp.szName;
    cout << "语文: ";
    cin >> srrTemp.fChinese;
    cout << "英语: ";
    cin >> srrTemp.fEnglish;
    cout << "数学: ";
    cin >> srrTemp.fMath;
    getchar();
   
    lpsr = new StudentResult(srrTemp);
   
    m_rl.Add(*lpsr);
    cout << "添加成功。" << endl;
}   
 
void cmd_close()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.Close();
   
    cout << "关闭成绩表成功。" << endl;
}

void cmd_del()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.Delete(*(m_rl.GetCurrentSR()));
   
    cout << "当前记录已成功删除。" << endl;
}

void cmd_help()
{
    cout << "Student Result Manage Ver 1.00 beta" << endl;
    cout << "Copyright(C) Science Valley Studio 2006 , All Rights Reserved." << endl;
    cout << "Design by Ke QiongPan (goyejin)." << endl;
    cout << endl;
    cout << "  add/t添加学生成绩记录" << endl;
    cout << "  clear/t清除屏幕" << endl;
    cout << "  close/t关闭打开的成绩表" << endl;
    cout << "  del/t删除当前记录" << endl;
    cout << "  exit/t退出程序" << endl;
    cout << "  help/t显示帮助信息" << endl;
    cout << "  list/t列出成绩表内容" << endl;
    cout << "  mb/t将当前记录指针移到上一个记录" << endl;
    cout << "  mf/t将当前记录指针移到第一个记录" << endl;
    cout << "  ml/t将当前记录指针移到最后一个记录" << endl;
    cout << "  mn/t将当前记录指针移到下一下记录" << endl;
    cout << "  new/t新建一张成绩表" << endl;
    cout << "  open/t打开一个成绩表文件" << endl;
    cout << "  rcr/t修改当前记录内容" << endl;
    cout << "  save/t保存成绩表到一个文件" << endl;
    cout << "  sbavg/t按平均分从大到小排序" << endl;
    cout << "  sbchs/t按语文成绩从大到小排序" << endl;
    cout << "  sbcls/t按班别从小到大排序" << endl;
    cout << "  sbeng/t按英语成绩从大到小排序" << endl;
    cout << "  sbmth/t按数学成绩从大到小排序" << endl;
    cout << "  sbnam/t按姓名从小到大排序" << endl;
    cout << "  sbnum/t按学号从小到大排序" << endl;
    cout << "  sbttl/t按总分从大到小排序" << endl;
    cout << "  vcr/t显示当前记录内容" << endl;
    cout << endl;
}

void cmd_list()
{
    StudentResult *lpsr = NULL;
    StudentResult *lpsrCurrentSR = m_rl.GetCurrentSR();
   
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    cout << "/t序号/t学号/t班别/t姓名/t语文/t英语/t数学/t平均分/t总分" << endl;
    cout << "/t----/t----/t----/t----/t----/t----/t----/t------/t----" << endl;
   
    if (NULL == lpsrCurrentSR) return;
   
    lpsr = m_rl.MoveFirst();
    while (NULL != lpsr)
    {
        if (lpsr == lpsrCurrentSR)
        {
            cout << "      *";
        }
       
        cout << '/t';
        cout << m_rl.GetSRPos(*lpsr);
        cout << '/t';
        cout << lpsr->GetNumber();
        cout << '/t';
        cout << lpsr->GetClass();
        cout << '/t';
        cout << lpsr->GetName();
        cout << '/t';
        cout << lpsr->GetChinese();
        cout << '/t';
        cout << lpsr->GetEnglish();
        cout << '/t';
        cout << lpsr->GetMath();
        cout << '/t';
        cout << lpsr->GetAverage();
        cout << '/t';
        cout << lpsr->GetTotal();
        cout << endl;
       
        if (lpsr == m_rl.MoveNext())
            lpsr = NULL;
        else
            lpsr = m_rl.GetCurrentSR();
    }
   
    m_rl.MoveToSR(*lpsrCurrentSR);
}   

void cmd_mb()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.MoveBack();
   
    cout << "前移记录指针成功。" << endl;
}

void cmd_mf()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.MoveFirst();
   
    cout << "记录指针已成功移到第一个记录。" << endl;
}

void cmd_ml()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.MoveLast();
   
    cout << "记录指针已成功移到最后一个记录。" << endl;
}

void cmd_mn()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.MoveNext();
   
    cout << "后移记录指针成功。" << endl;
}


void cmd_new()
{
    if (m_rl.IsLoad())
    {
        cout << "已有文件打开,请使用close命令关闭之后再新建一张成绩表。" << endl;
        return;
    }
   
    if (m_rl.New())
        cout << "已新建了一张成绩表。" << endl;
    else
        cout << "在新建成绩表时发生错误。" << endl;
}

void cmd_open()
{
    char szFilePath[MAX_FILEPATH_LENGTH] = {'/0'};
   
    if (m_rl.IsLoad())
    {
        cout << "已有文件打开,请使用close命令关闭之后再打开新的文件。" << endl;
        return;
    }
   
    cout << "文件路径: " ;
    gets(szFilePath);
   
    if (m_rl.Open(szFilePath))
        cout << "文件打开成功。" << endl;
    else
        cout << "文件打开错误。" << endl;
}   

void cmd_rcr()
{
    StudentResult *lpsr = m_rl.GetCurrentSR();
    SRRecord srrTemp = {0, {'/0'}, {'/0'}, 0.0f, 0.0f, 0.0f};
   
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表可供保存。"  << endl;
        return;
    }
   
    cout << "学号[" << lpsr->GetNumber() << "]: ";
    cin >> srrTemp.uiNumber;
    cout << "班别[" << lpsr->GetClass() << "]: ";
    cin >> srrTemp.szClass;
    cout << "姓名[" << lpsr->GetName() << "]: ";
    cin >> srrTemp.szName;
    cout << "语文[" << lpsr->GetChinese() << "]: ";
    cin >> srrTemp.fChinese;
    cout << "英语[" << lpsr->GetEnglish() << "]: ";
    cin >> srrTemp.fEnglish;
    cout << "数学[" << lpsr->GetMath() << "]: ";
    cin >> srrTemp.fMath;
    getchar();
   
    lpsr->SetRecord(srrTemp);
   
    cout << "记录修改成功。" << endl;
}   

void cmd_save()
{
    char szFilePath[MAX_FILEPATH_LENGTH] = {'/0'};
    char cTemp = 'n';
   
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表可供保存。"  << endl;
        return;
    }
   
    if (0 != strlen(m_rl.GetFilePath()))
    {
        cout << '[' << m_rl.GetFilePath() << ']' << endl;
        cout << "是否以这个路径保存?(y/n) ";
        do
        {
            cTemp = getchar();
        }while (('y' != cTemp) && ('n' != cTemp));
        getchar();
    }
   
    if ('y' == cTemp)
    {
        strcpy(szFilePath, m_rl.GetFilePath());
    }
    else
    {
        cout << "文件路径: " ;
        gets(szFilePath);
    }
   
    if (m_rl.Save(szFilePath))
        cout << "文件保存成功。" << endl;
    else
        cout << "文件保存失败。" << endl;
}

void cmd_sbavg()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.SortByAverage();
   
    cout << "已成功按平均分从大到小排序。" << endl;
}

void cmd_sbchs()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.SortByChinese();
   
    cout << "已成功按语文成绩从大到小排序。" << endl;
}

void cmd_sbcls()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.SortByClass();
   
    cout << "已成功按班别从小到大排序。" << endl;
}

void cmd_sbeng()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.SortByEnglish();
   
    cout << "已成功按英语成绩从大到小排序。" << endl;
}

void cmd_sbmth()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.SortByMath();
   
    cout << "已成功按数学成绩从大到小排序。" << endl;
}

void cmd_sbnam()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.SortByName();
   
    cout << "已成功按姓名从小到大排序。" << endl;
}

void cmd_sbnum()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.SortByNumber();
   
    cout << "已成功按学号从小到大排序。" << endl;
}

void cmd_sbttl()
{
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }
   
    m_rl.SortByTotal();
   
    cout << "已成功按总分从大到小排序。" << endl;
}

void cmd_vcr()
{
    StudentResult *lpsr = m_rl.GetCurrentSR();
   
    if (!m_rl.IsLoad())
    {
        cout << "没有成绩表被打开。" << endl;
        return;
    }

    cout << "/t序号/t学号/t班别/t姓名/t语文/t英语/t数学/t平均分/t总分" << endl;
    cout << "/t----/t----/t----/t----/t----/t----/t----/t------/t----" << endl;
   
    cout << '/t';
    cout << m_rl.GetSRPos(*lpsr);
    cout << '/t';
    cout << lpsr->GetNumber();
    cout << '/t';
    cout << lpsr->GetClass();
    cout << '/t';
    cout << lpsr->GetName();
    cout << '/t';
    cout << lpsr->GetChinese();
    cout << '/t';
    cout << lpsr->GetEnglish();
    cout << '/t';
    cout << lpsr->GetMath();
    cout << '/t';
    cout << lpsr->GetAverage();
    cout << '/t';
    cout << lpsr->GetTotal();
    cout << endl;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值