c++学生考勤信息管理系统

学生考勤信息管理系统记录了学生的缺课情况,它包括:

缺课日期、第几节课、课程名称、学生姓名、学生学号、缺课类型(迟到、请假及旷课)。系统具有以下功能:

  1)录入学生的缺课记录;

  2)修改某个学生的缺课记录;

  3)查询某个学生的缺课情况;

  4)统计 旷课学生姓名及旷课次数,按旷课次数由多到少排序;

  5)统计 有学生旷课的课程及旷课人次(每次课时累加),按旷课人次由多到少排序;

重新修改了下,之前的4,5功能未实现。

#include<iostream>
#include<fstream>
#include<cstring>
#include<cstdlib>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
#define N 999
int n;
class STU
{
public:
    STU() {}
    void input(char d[],int X,string n,string sn,int sd,int cl)
    {
        strcpy(date,d);
        ClassX=X;
        ClassN=n;
        stuN=sn;
        stuID=sd;
        ClassL=cl;
    }
    void print()
    {
        cout<<"缺课日期 课节 课程名称 学生姓名 学生学号 缺课类型\t"<<endl;
        cout<<date<<"\t"<<ClassX<<"\t"<<ClassN<<"\t"<<stuN<<"\t"<<stuID<<"\t"<<ClassL<<endl;
    }
    friend void Change(STU stu[]);
    friend void Find(STU stu[]);
    friend void chaxun1(STU stu[]);
    friend void chaxun2(STU stu[]);
private:
    string  stuN;
    int  stuID;
    char date[15];
    int  ClassX;
    string ClassN;
    int  ClassL;
};

//主菜单
void meau()
{
    cout<<endl;
    cout<<endl;
    cout<<"学生后勤管理系统"<<endl;
    cout<<"1-录入学生的缺课记录"<<endl;
    cout<<"2-修改某个学生的缺课记录"<<endl;
    cout<<"3-查询某个学生的缺课情况"<<endl;
    cout<<"4-统计旷课信息"<<endl;
    cout<<"5-退出系统"<<endl;
    cout<<endl;
    cout<<endl;

}
//输入学生的缺课记录
void Input(STU stu[])
{
    char date[15];
    string stuN, ClassN;
    int  stuID,ClassX,ClassL;
    while(1)
    {
        cout<<"请输入记录情况个数"<<endl;
        cin>>n;
        for(int i=0; i<n; i++)
        {
            cout<<"请输入第"<<i+1<<"种情况"<<endl;
            cout<<"请输入缺课日期\n";
            cin>>date;
            cout<<"请输入第几节课\n";
            cin>>ClassX;
            cout<<"请输入课程名称\n";
            cin>>ClassN;
            cout<<"请输入学生姓名\n";
            cin>>stuN;
            cout<<"请输入学生学号\n";
            cin>>stuID;
            cout<<"请输入缺课类型,1代表请假,2代表旷课, 3代表迟到\n";
            cin>>ClassL;
            stu[i].input(date,ClassX,ClassN,stuN,stuID,ClassL);
        }
        cout<<"输入信息完毕!是否继续输入?y是继续,n是停止:"<<endl;
        char cc;
        getchar();
        cin>>cc;
        if(cc=='n')
            return ;
    }
}
//修改某个学生的缺课记录
void Change(STU stu[])
{
    cout<<"请输入将要修改的学生姓名或者学号,1代表姓名,2代表学号:"<<endl;
    int x;
    cin>>x;
    if(x==1)
    {
        cout<<"请输入将要修改的学生姓名:"<<endl;
        string name;
        cin>>name;
        for(int i=0; i<n; i++)
        {
            if(stu[i].stuN==name)
            {
                stu[i].print();
                cout<<"是否对该学生信息进行修改,y代表进行,n代表不进行:"<<endl;
                getchar();
                char cc;
                cin>>cc;
                if(cc=='n')
                    continue;
                else if(cc='y')
                {
                    cout<<"请选择修改内容:"<<endl;
                    cout<<"修改日期请按1:\n修改课节请按2:\n修改课程名称请按3:\n修改缺课类型请按4:\n";
                    cin>>x;
                    switch(x)
                    {
                    case 1:
                    {
                        char date[20];
                        cout<<"请输入正确日期"<<endl;
                        cin>>date;
                        strcpy(stu[i].date,date);
                    }
                    break;
                    case 2:
                    {
                        cout<<"请输入正确课节"<<endl;
                        cin>>x;
                        stu[i].ClassX=x;
                    }
                    break;
                    case 3:
                    {
                        cout<<"请输入正确课程名称"<<endl;
                        cin>>name;
                        stu[i].ClassN=name;
                    }
                    break;
                    case 4:
                    {
                        cout<<"请输入正确缺课类型"<<endl;
                        cin>>x;
                        stu[i].ClassL=x;
                    }
                    break;
                    default :
                        cout<<"抱歉,没有该选项。"<<endl;
                    }
                    break;
                    cout<<"输出修改后的学生信息:"<<endl;
                    stu[i].print();
                }
                else cout<<"抱歉,没有该选项。"<<endl;
            }
        }
    }
    else if(x==2)
    {
        cout<<"请输入要修改的学号:"<<endl;
        cin>>x;
        for(int i=0; i<n; i++)
        {
            if(stu[i].stuID==x)
            {
                cout<<"是否对该学生信息进行修改,y代表进行,n代表不进行:"<<endl;
                stu[i].print();
                getchar();
                char cc;
                cin>>cc;
                if(cc=='n')
                    continue;
                else if(cc='y')
                {
                    cout<<"请选择修改内容:"<<endl;
                    cout<<"修改日期请按1:\n修改课节请按2:\n修改课程名称请按3:\n修改缺课类型请按4:\n";
                    cin>>x;
                    switch(x)
                    {
                    case 1:
                    {
                        cout<<"请输入正确日期"<<endl;
                        char name[20];
                        cin>>name;
                        strcpy(stu[i].date,name);
                    }
                    break;
                    case 2:
                    {
                        cout<<"请输入正确课节"<<endl;
                        cin>>x;
                        stu[i].ClassX=x;
                    }
                    break;
                    case 3:
                    {
                        cout<<"请输入正确课程名称"<<endl;
                        string name;
                        cin>>name;
                        stu[i].ClassN=name;
                    }
                    break;
                    case 4:
                    {
                        cout<<"请输入正确缺课类型"<<endl;
                        cin>>x;
                        stu[i].ClassL=x;
                    }
                    break;
                    default :
                        cout<<"抱歉,没有该选项。"<<endl;
                    }
                    break;
                    cout<<"输出修改后的学生信息:"<<endl;
                    stu[i].print();
                }
                else
                    cout<<"抱歉,没有该选项。"<<endl;
            }
        }
    }
    else
        cout<<"抱歉,没有该选项。"<<endl;
}
//查询某个学生的缺课情况
void Find(STU stu[])
{
    cout<<"请输入将要查询的学生姓名(1)或者学号(2)"<<endl;
    int x;
    cin>>x;
    if(x==1)
    {
        cout<<"请输入将要查询的学生姓名"<<endl;
        string name;
        cin>>name;
        for(int i=0; i<n; i++)
        {
            if(stu[i].stuN==name)
                stu[i].print();
        }
    }
    else if(x==2)
    {
        cout<<"请输入将要查询的学生学号"<<endl;
        cin>>x;
        for(int i=0; i<n; i++)
        {
            if(stu[i].stuID==x)
                stu[i].print();
        }
    }
    else cout<<"抱歉,没有该选项。"<<endl;
}

//统计旷课学生信息
void chaxun1(STU stu[])
{
    map<string,int> A;
    A.clear();
    for(int s=0; s<n; s++)
    {
        if(stu[s].ClassL==2)
        {
            A[stu[s].stuN]++;
        }
    }
    map<string,int>::iterator it;
    int k=0,ant[N];
    string sn[N];
    for(it=A.begin(); it!=A.end(); it++)
    {
        sn[k]=(*it).first;
        ant[k]=(*it).second;

        k++;
    }
    for(int i=0; i<k-1; i++)
        for(int j=i+1; j<k; j++)
        {
            if(ant[i]<ant[j])
            {
                int temp;
                string ss;
                temp=ant[i];
                ant[i]=ant[j];
                ant[j]=temp;
                ss=sn[i];
                sn[i]=sn[j];
                sn[j]=ss;
            }
        }
    for(int m=0; m<k; m++)
    {
        cout<<"学生姓名 旷课次数"<<endl;
        cout<<sn[m]<<"\t"<<ant[m]<<endl;
    }

}
//统计旷课课程信息
void chaxun2(STU stu[])
{
    map<string,int> A;
    A.clear();
    for(int i=0; i<n; i++)
    {
        if(stu[i].ClassL==2)
        {
            A[stu[i].ClassN]++;
        }
    }
    map<string,int>::iterator it;
    for(it=A.begin(); it!=A.end(); it++)
    {
        cout<<"课程名称 旷课总人次"<<endl;
        cout<<(*it).first<<"\t"<<(*it).second<<endl;
    }
}
int main()
{

    STU stu[N];

    while(1)
    {
        meau();
        cout<<"请输入对应功能序号"<<endl;
        int x;
        cin>>x;
        switch(x)
        {
        case 1:
            Input(stu);
            break;
        case 2:
        {
            if(n==0)
                cout<<"错误,无信息!\n";
            else
                Change(stu);
        }
        break;
        case 3:
        {
            if(n==0)
                cout<<"错误,无信息!\n";
            else
                Find(stu);
        }
        break;
        case 4:
        {
            if(n==0)
                cout<<"错误,无信息!\n";
            else
            {
                cout<<"\n查看学生旷课信息请按1:\n";
                cout<<"\n查看课程旷课信息请按2:\n";
                cin>>x;
                if(x==1)
                    chaxun1(stu);
                else if(x==2)
                    chaxun2(stu);
                else
                    cout<<"抱歉,没有该选项。"<<endl;
            }

        }
        break;
        case 5:
        {
            cout<<"退出该系统。"<<endl;
            return 0;
            break;
        }
        default:
            cout<<"对不起,该项功能不存在."<<endl;

        }

    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lvhaoye/article/details/78974634