程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 對《一個簡單的學生成績管理系統》優化的一點意見

對《一個簡單的學生成績管理系統》優化的一點意見

編輯:關於VC++

現在我們開始討論優化的問題,在討論之前,建議先看看《一個簡單的學生成績管理系統》這篇文章。我看過《一個簡單的學生成績管理系統》後,覺他其中的show()這個函數用得不是很好。

show()函數的代碼如下:

show()
{
    m_Set.MoveFirst();
    do
    {
     CString s;
     s.Format("%d",m_Set.m_column1);
     m_ListCtrlx.InsertItem(i,s,0);
     m_ListCtrlx.SetItemText(i,1,m_Set.m_column2);
     s.Format("%.1f",m_Set.m_column3);
     m_ListCtrlx.SetItemText(i,2,s);
     s.Format("%.1f",m_Set.m_column4);
     m_ListCtrlx.SetItemText(i,3,s);
     s.Format("%.1f",m_Set.m_column5);
     m_ListCtrlx.SetItemText(i,4,s);
     s.Format("%.1f",m_Set.m_column6);
     m_ListCtrlx.SetItemText(i,5,s);
     s.Format("%.1f",m_Set.m_column7);
     m_ListCtrlx.SetItemText(i,6,s);
     s.Format("%.1f",m_Set.m_column8);
     m_ListCtrlx.SetItemText(i,7,s);
     s.Format("%.2f",m_Set.m_column9);
     m_ListCtrlx.SetItemText(i,8,s);
     i++;
     m_Set.MoveNext();
    }while(!m_Set.IsEOF());
    m_Set.Close();
}
大家可以看出來,這個函數的作用是用來顯示和列表控件綁定的數據庫表的內容,並且這個函數在初始化的時候就調用了,這一點我覺得沒有問題,問題是我覺得他在使用添加記錄功能的時候會再次調用這個show()函數,我覺得這樣做在效率上面會有很大的損失,為什麼這麼說呢?因為,每次調用show()函數以前都要清空列表中的內容,然後再把數據庫表的內容又重新顯示一次,這樣我想在效率上面是有影響的。那我們是否可以並不要每次添加記錄的時候都要show()函數呢? 有這個想法就按這個想法做下去,我仔細看過後有了新的想法,我覺得可以只要每次都顯示添加的記錄那不就可以了嗎?而且還可以解決調用show()函數帶來了抖動.

下面我就具體說說我的解決辦法,其實,很簡單,我們只要在添加記錄的時候不要調用show()函數就可以了,而用代碼直接來顯示就可以了。

void CBaDialog::OnAdd()
{
  Selec=TRUE;
  CAddialog dlg;
  if( dlg.DoModal()==IDOK)
  {
  if(this->Select()=="一班")
  {
    if(dlg.m_nxue>=200)
    {
    AfxMessageBox("一班學號在1—200之間");
    return;
    }
  }
  else
  {
    if(dlg.m_nxue<200||dlg.m_nxue>=400)
    {
    AfxMessageBox("二班學號在200—400之間");
    return;
    }
  }
  m_Set.AddNew();
  m_nRecordCount+=1;
  m_Set.m_column1=dlg.m_nxue;
  m_Set.m_column2=dlg.m_strName;
  m_Set.m_column3=dlg.m_fmaths;
  m_Set.m_column4=dlg.m_fphysical;
  m_Set.m_column5=dlg.m_fchemistry;
  m_Set.m_column6=dlg.m_fenglish;
  m_Set.m_column7=dlg.m_fpolitic;
  m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fenglish+dlg.m_fpolitic;
  m_Set.m_column9=(float)(m_Set.m_column8/5);
  this->Equal();
  m_Set.Update();//Update()一定放在Equal()後
  m_Set.Requery();
  this->Xuan();
  }
}
我們可以不要調Xuan()這個函數,因為這個函數就是用來調用show()函數的,但是Xuan()函數中還調用了一個和show()功能一樣的diaplay()函數,請讀者注意,好了,我們可以添加如下代碼

CString s;
s.Format("%d",m_dlg.m1);
m_ListCtrlx.InsertItem(i,s,0);
m_ListCtrlx.SetItemText(i,1,m_dlg.m2);
s.Format("%.1f",m_dlg.m3);
m_ListCtrlx.SetItemText(i,2,s);
s.Format("%.1f",m_dlg.m4);
m_ListCtrlx.SetItemText(i,3,s);
s.Format("%.1f",m_dlg.m5);
m_ListCtrlx.SetItemText(i,4,s);
s.Format("%.1f",m_dlg.m6);
m_ListCtrlx.SetItemText(i,5,s);
s.Format("%.1f",m_dlg.m7);
m_ListCtrlx.SetItemText(i,6,s);
s.Format("%.1f",m_dlg.m8);
m_ListCtrlx.SetItemText(i,7,s);
s.Format("%.2f",m_dlg.m9);
m_ListCtrlx.SetItemText(i,8,s);

細心的人一定發現了這就是show()函數中的部分代碼,這確實是的,只是我將他對話框中的內容直接用列表顯示出來了,其中 m_dlg.m1~m9分別是對話框中編輯框中的內容,還有一點就是要將他定義的變量 i 變成類的成員,這樣就可以獲得插入的准確的位置了。這樣修改後的問題就是代碼會增加不少,如何取捨就看各位的需要了。

這是我對這個系統的一點不成熟的意見,希望和各位高手交流看法。更希望和劉永超聯系,一起解決問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved