MFC学生选课系统

该博客展示了使用MFC构建的学生选课系统,具备学号查询、课程选择、选课统计等功能。用户输入学号后,系统显示学生信息并列出可选课程。选课与退课操作会实时更新选课状态,且处理重复选课的特殊情况。提供完整工程文件下载链接。
摘要由CSDN通过智能技术生成

先上效果图:
这里写图片描述
主要功能:
输入学号,从数据库中查找学号,若找到相匹配的学号,则显示数据库中姓名、学历、导师,同时将所有可选课程显示出来。输入课程类型和课程名称查询课程进行选课,选课之后相应的选课门数、学分、学费、已选门数都会进行刷新。换个学号输入,选课总人数就会刷新,还有一些小功能就在代码里解释了。
我就只把按键的代码贴出来,完整工程下面有链接。
“确认输入”按键:

void Cversion02Dlg::OnBnClickedButton1()
{
    UpdateData(true);
    printmenshu=0;//将显示的选课门数、已选学分、学费清零
    yixuanxf=0;
    xuefei=0;
    yixuanms=0;//printmenshu是用来显示在MFC上,程序里处理的是yixuanms,最后将yxuanms赋给printmenshu,其实可以不用yixuanms,将yixuanms全部替换为printmenshu也可以
    if(yixuan.GetItemCount()!=0){
  //如果yixuan列表不为空,则选课总人数加1。
        xuankezrs++;
    }
    while ( yixuan.DeleteItem (0));//yixuan列表清空

    int i=0,j=0;
    for(i=0;i<30;i++){
        if(ugs[i].chaxunxuehao(xuehao)){
            CString edit1,edit2,edit3;
            edit1=ugs[i].printname();
            edit2=ugs[i].printban();
            edit3=ugs[i].printxue();
            SetDlgItemText(IDC_EDIT2,edit1);//这里也可以直接在控件上添加变量,直接赋给它。就像printxueli=edit3
            SetDlgItemText(IDC_EDIT3,edit2);
            //SetDlgItemText(IDC_EDIT3,edit3);
            printxueli=edit3;
            break;
        }
    }
    for(j=0;j<15;j++){
        if(gs[j].chaxunxuehao(xuehao)){
            CString edit1,edit2,edit3;
            edit1=gs[j].printname();
            edit2=gs[j].printdao();
            edit3=gs[j].printxue();
            SetDlgItemText(IDC_EDIT2,edit1);
            SetDlgItemText(IDC_EDIT3,edit2);
            //SetDlgItemText(IDC_EDIT3,edit3);
            printxueli=edit3;
            break;
        }
    }
    if(i==30&&j==15){
        INT_PTR nRes;
        nRes=MessageBox(_T("请输入正确的学号"),_T("错误"),MB_OK|MB_ICONERROR);
        return;  //这里不写return会直接运行下面的程序
    }else{
        yixuannum[k]=xuehao;//将找到的学号存在数组里,用来判断后面输入的学号是否前面输入过
        k++;
    }
    if(k>1){ //这里的k是从1开始的,即当k=1时,只输入了第一个学号,不用判断是否已经选过课
        for(int q=0;q<k-1;q++){ //这里注意q<k-1,当k=2时表示此时的学号是第二次输入的,需判断与第一次输入的学号是否相同,第一次的学号存在yixuannum[0]里
            if(xuehao==yixuannum[q]){
                MessageBox(_T("该学生已经选过课了"),_T("错误"),MB_OK|MB_ICONERROR);
                break;//这里如果写成return,不知道为什么选课总人数不会刷新了
            }
        }
    }

    while ( kexuan.DeleteItem (0));

    for(int p=0;p<12;p++){
      CString klx,kmc,kxh,kxf,krs;
      klx=c[p].klx();
      kmc=c[p].kmc();
      krs.Format(_T("%d"),yixuankrs[p]);
      kxh.Format(_T("%d"),c[p].kxh()); 
      kxf.Format(_T("%d"),c[p].kxf());
      kexuan.InsertItem(p,kxh);
      kexuan.SetItemText(p,1,klx);
      kexuan.SetItemText(p,2,kmc);
      kexuan.SetItemText(p,3,kxf);
      kexuan.SetItemText(p,4,krs);
    }
    UpdateData(false);
}

“查询”按键:

void Cversion02Dlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码
    UpdateData(true);
    while ( kexuan.DeleteItem (0));//首先将kexuan清空,否则后面产生的列表都会加在原来的列表后面。这里只需循环清掉第一行就可以,因为清掉一行下面一行会自动上来

    if(inputkmc.IsEmpty()){//判断输入课程名称是否为空
    int q=0,k=0;
    for(q=0;q<12;q++){
   
        if(inputklx==c[q].klx()){
            CString kmc,kxh,kxf,krs;//下面SetItemText中参数是CString类型,必须将各个参数转为CString
            kmc=c[q].kmc();
            krs.Format(_T("%d"),yixuankrs[q]); //正常应该写成krs.Format("%d&
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值