除双 2021-07-04 22:24 采纳率: 0%
浏览 40

有人会吗 用C++需要有类和继承和派生

学生考勤管理系统设计与实现1、问题描述学生信息包括:学号、姓名、性别、年龄、班级等信息。考勤信息包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。2、功能要求(1)添加功能:程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。(3)显示功能:可显示当前系统中所有学生的记录和缺课记录,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。(6)统计功能:能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。

  • 写回答

1条回答 默认 最新

  • CSDN专家-sinJack 2021-07-04 22:39
    关注

    可以参考一下:
    #include
    #include
    #include
    #include
    #include
    #include<map>
    #include
    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;
    };</map>

    //主菜单
    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;
    

    }

    评论

报告相同问题?