对《一个简单的学生成绩管理系统》优化的一点意见

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

对《一个简单的学生成绩管理系统》优化的一点意见

作者:xieyuntian

大家好,我是第一次在VCKBASE.com上面发表东西,由于经常在VCKBASE.com看东西,而有一点心得,今天写出来和大家一起分享。

我这次是对《一个简单的学生成绩管理系统》的优化发表一点我自己的意见。

好的,现在我们开始讨论优化的问题,在讨论之前,建议先看看《一个简单的学生成绩管理系统》这篇文章。我看过《一个简单的学生成绩管理系统》后,觉他其中的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=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 变成类的成员,这样就可以获得插入的准确的位置

了。这样修改后的问题就是代码会增加不少,如何取舍就看各位的需要了。

这是我对这个系统的一点不成熟的意见,希望和各位高手交流看法。更希望和刘永超联系,一起解决问题。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航