溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用MFC怎么實(shí)現(xiàn)一個(gè)學(xué)生選課系統(tǒng)

發(fā)布時(shí)間:2021-04-20 17:16:55 來源:億速云 閱讀:263 作者:Leah 欄目:編程語言

使用MFC怎么實(shí)現(xiàn)一個(gè)學(xué)生選課系統(tǒng)?很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

void Cversion02Dlg::OnBnClickedButton1()
{
  UpdateData(true);
  printmenshu=0;//將顯示的選課門數(shù)、已選學(xué)分、學(xué)費(fèi)清零
  yixuanxf=0;
  xuefei=0;
  yixuanms=0;//printmenshu是用來顯示在MFC上,程序里處理的是yixuanms,最后將yxuanms賦給printmenshu,其實(shí)可以不用yixuanms,將yixuanms全部替換為printmenshu也可以
  if(yixuan.GetItemCount()!=0){//如果yixuan列表不為空,則選課總?cè)藬?shù)加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("請輸入正確的學(xué)號"),_T("錯(cuò)誤"),MB_OK|MB_ICONERROR);
    return; //這里不寫return會直接運(yùn)行下面的程序
  }else{
    yixuannum[k]=xuehao;//將找到的學(xué)號存在數(shù)組里,用來判斷后面輸入的學(xué)號是否前面輸入過
    k++;
  }
  if(k>1){ //這里的k是從1開始的,即當(dāng)k=1時(shí),只輸入了第一個(gè)學(xué)號,不用判斷是否已經(jīng)選過課
    for(int q=0;q<k-1;q++){ //這里注意q<k-1,當(dāng)k=2時(shí)表示此時(shí)的學(xué)號是第二次輸入的,需判斷與第一次輸入的學(xué)號是否相同,第一次的學(xué)號存在yixuannum[0]里
      if(xuehao==yixuannum[q]){
        MessageBox(_T("該學(xué)生已經(jīng)選過課了"),_T("錯(cuò)誤"),MB_OK|MB_ICONERROR);
        break;//這里如果寫成return,不知道為什么選課總?cè)藬?shù)不會刷新了
      }
    }
  }

  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清空,否則后面產(chǎn)生的列表都會加在原來的列表后面。這里只需循環(huán)清掉第一行就可以,因?yàn)榍宓粢恍邢旅嬉恍袝詣由蟻?

  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中參數(shù)是CString類型,必須將各個(gè)參數(shù)轉(zhuǎn)為CString
      kmc=c[q].kmc();
      krs.Format(_T("%d"),yixuankrs[q]); //正常應(yīng)該寫成krs.Format("%d",yixuankrs[q]);但是會報(bào)錯(cuò),前面加上_T就可以了
      kxh.Format(_T("%d"),c[q].kxh());
      kxf.Format(_T("%d"),c[q].kxf());
      kexuan.InsertItem(k,kxh);
      kexuan.SetItemText(k,1,inputklx);
      kexuan.SetItemText(k,2,kmc);
      kexuan.SetItemText(k,3,kxf);
      kexuan.SetItemText(k,4,krs);
      k++;
    }
  }
  if(k==0){
    MessageBox(_T("請輸入正確的課程類型"),_T("錯(cuò)誤"),MB_OK|MB_ICONERROR);
    for(int p=0;p<12;p++){ //前面已經(jīng)將列表清空,這里提示錯(cuò)誤信息之后,將所有課程顯示出來
   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);
  }
  }
  }
  else if(inputklx.IsEmpty()){//判斷輸入課程類型是否為空
  int l=0;
  for(l=0;l<12;l++){
    if(inputkmc==c[l].kmc()){
      CString klx,kxh,kxf,krs;
      klx=c[l].klx();
      krs.Format(_T("%d"),yixuankrs[l]);
      kxh.Format(_T("%d"),c[l].kxh());
      kxf.Format(_T("%d"),c[l].kxf());
      kexuan.InsertItem(0,kxh);
      kexuan.SetItemText(0,1,klx);
      kexuan.SetItemText(0,2,inputkmc);
      kexuan.SetItemText(0,3,kxf);
      kexuan.SetItemText(0,4,krs);
      break;
    }
  }
  if(l==12){
    MessageBox(_T("請輸入正確的課程名稱"),_T("錯(cuò)誤"),MB_OK|MB_ICONERROR);
    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);
  }
  }
  }
  else{
  int m=0;
  for(m=0;m<12;m++){
    if(inputkmc==c[m].kmc()&&inputklx==c[m].klx()){//如果輸入課程類型和課程名稱都不為空,判斷課程類型和課程名稱是否匹配
      CString kxh,kxf,krs;
      krs.Format(_T("%d"),yixuankrs[m]);
      kxh.Format(_T("%d"),c[m].kxh());
      kxf.Format(_T("%d"),c[m].kxf());
      kexuan.InsertItem(0,kxh);
      kexuan.SetItemText(0,1,inputklx);
      kexuan.SetItemText(0,2,inputkmc);
      kexuan.SetItemText(0,3,kxf);
      kexuan.SetItemText(0,4,krs);
      break;
    }
  }
  if(m==12){
    MessageBox(_T("請輸入正確的課程類型和課程名稱"),_T("錯(cuò)誤"),MB_OK|MB_ICONERROR);
    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);
}

“選課”按鍵:

這里有一個(gè)關(guān)鍵的地方,就是假如用戶選了兩門相同的課,采用的是先添加后刪掉的方法

void Cversion02Dlg::OnBnClickedButton3()
{
  // TODO: 在此添加控件通知處理程序代碼
  UpdateData(true);

  if(printxueli!="本科生"&&printxueli!="研究生"){//防止沒輸學(xué)號直接點(diǎn)選課導(dǎo)致程序錯(cuò)誤
    MessageBox(_T("請選輸入學(xué)號"),_T("錯(cuò)誤"),MB_OK|MB_ICONERROR);
    return;
  }

  if(yixuanms<5){ //yixuanms是從0開始的
  CString krs;
  yixuankrs[chosexh-1]++;//這里不能用chosehanghao,要用chosexh-1。因?yàn)槿绻唤?jīng)過查詢,chosehanghao=chosexh-1,但是如果查詢成功之后,這里chosehanghao不一定等于chosexh-1
  krs.Format(_T("%d"),yixuankrs[chosexh-1]);
  kexuan.SetItemText(chosehanghao,4,krs);

  int n=0;
  for(n=0;n<12;n++){ //在這個(gè)循環(huán)里即使選擇的是同一門課也會添加進(jìn)yixuan,若是想在這里不添加同一門課,不易做到
    if(chosexh==c[n].kxh()){
      CString klx,kmc,kxf,kxh;
      klx=c[n].klx();
      kmc=c[n].kmc();
      kxf.Format(_T("%d"),c[n].kxf());
      kxh.Format(_T("%d"),chosexh);
      yixuan.InsertItem(yixuanms,kxh);
      yixuan.SetItemText(yixuanms,1,klx);
      yixuan.SetItemText(yixuanms,2,kmc);
      yixuan.SetItemText(yixuanms,3,kxf);
      yixuanxf=yixuanxf+c[n].kxf();
      if(printxueli=="本科生"&&n>=0&&n<=3){
        xuefei=xuefei+200*c[n].kxf();
      }
      else if(printxueli=="本科生"&&n>=4&&n<=7){
        xuefei=xuefei+150*c[n].kxf();
      }
      else if(printxueli=="本科生"&&n>=8&&n<=11){
        xuefei=xuefei+100*c[n].kxf();
      }
      else if(printxueli=="研究生"&&n>=0&&n<=3){
        xuefei=xuefei+200*c[n].kxf();
      }
      else if(printxueli=="研究生"&&n>=4&&n<=7){
        xuefei=xuefei+180*c[n].kxf();
      }
      else if(printxueli=="研究生"&&n>=8&&n<=11){
        xuefei=xuefei+150*c[n].kxf();
      }
      yixuanms++;
      break;
      }
    }
  }
  else{
    MessageBox(_T("最多選擇5門課"),_T("錯(cuò)誤"),MB_OK|MB_ICONERROR);
  }
  for(int i=0;i<=yixuanms;i++){ //在這里判斷選擇的是否是同一門課,若是同一門課則將其刪掉。相應(yīng)的學(xué)分、選課人數(shù)和學(xué)費(fèi)也要減掉
    for(int j=i+1;j<=yixuanms;j++){
      if(yixuan.GetItemText(i,0)==yixuan.GetItemText(j,0)){
        CString str,str1,krs;
        int strnum=0,strnum1=0;
        str=yixuan.GetItemText(i,3);
        strnum=_ttoi(str);
        yixuanxf=yixuanxf-strnum;

        str1=yixuan.GetItemText(i,0);
        strnum1=_ttoi(str1)-1;

        yixuankrs[chosexh-1]--;
        krs.Format(_T("%d"),yixuankrs[chosexh-1]);
        kexuan.SetItemText(chosehanghao,4,krs);

        if(printxueli=="本科生"&&strnum1>=0&&strnum1<=3){
        xuefei=xuefei-200*c[strnum1].kxf();
      }
      else if(printxueli=="本科生"&&strnum1>=4&&strnum1<=7){
        xuefei=xuefei-150*c[strnum1].kxf();
      }
      else if(printxueli=="本科生"&&strnum1>=8&&strnum1<=11){
        xuefei=xuefei-100*c[strnum1].kxf();
      }
      else if(printxueli=="研究生"&&strnum1>=0&&strnum1<=3){
        xuefei=xuefei-200*c[strnum1].kxf();
      }
      else if(printxueli=="研究生"&&strnum1>=4&&strnum1<=7){
        xuefei=xuefei-180*c[strnum1].kxf();
      }
      else if(printxueli=="研究生"&&strnum1>=8&&strnum1<=11){
        xuefei=xuefei-150*c[strnum1].kxf();
      }

        yixuan.DeleteItem(j);
        MessageBox(_T("已經(jīng)選過該門課"),_T("錯(cuò)誤"),MB_OK|MB_ICONERROR);
        yixuanms--;
        break;
      }
    }
  }
  printmenshu=yixuanms;

  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);
}

“退課”按鍵:

這里要弄清楚列表項(xiàng)里的行號和序號

void Cversion02Dlg::OnBnClickedButton4()
{
  // TODO: 在此添加控件通知處理程序代碼
  UpdateData(true);
  if(yixuanms>0){
  yixuanms--;//點(diǎn)擊退課之后,選課門數(shù)-1
  CString str,str1,krs;
  int tuixf=0,tuixh=0;
  str=yixuan.GetItemText(tuihanghao,3);
  tuixf=_ttoi(str);//CString轉(zhuǎn)為int
  yixuanxf=yixuanxf-tuixf;//已選學(xué)分減掉相應(yīng)的學(xué)分

  str1=yixuan.GetItemText(tuihanghao,0);
  tuixh=_ttoi(str1)-1;//這里要注意課程序號是從1開始的,而對象數(shù)組和每門課已選人數(shù)數(shù)組是從0開始的

  yixuankrs[tuixh]--;//每門課已選人數(shù)-1

  if(printxueli=="本科生"&&tuixh>=0&&tuixh<=3){//兩個(gè)列表控件屬性已經(jīng)設(shè)置為只能單選一行,所以點(diǎn)擊一次這里只需減一次
        xuefei=xuefei-200*c[tuixh].kxf();
      }
      else if(printxueli=="本科生"&&tuixh>=4&&tuixh<=7){
        xuefei=xuefei-150*c[tuixh].kxf();
      }
      else if(printxueli=="本科生"&&tuixh>=8&&tuixh<=11){
        xuefei=xuefei-100*c[tuixh].kxf();
      }
      else if(printxueli=="研究生"&&tuixh>=0&&tuixh<=3){
        xuefei=xuefei-200*c[tuixh].kxf();
      }
      else if(printxueli=="研究生"&&tuixh>=4&&tuixh<=7){
        xuefei=xuefei-180*c[tuixh].kxf();
      }
      else if(printxueli=="研究生"&&tuixh>=8&&tuixh<=11){
        xuefei=xuefei-150*c[tuixh].kxf();
      }

  printmenshu=yixuanms;
  yixuan.DeleteItem(tuihanghao);

  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);
  }  
  }
  else{
    MessageBox(_T("已經(jīng)退完全部課程"),_T("錯(cuò)誤"),MB_OK|MB_ICONERROR);
  }
  UpdateData(false);
}

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

mfc
AI