按照老师的要求,期末必须交一次大作业!这次C++的大作业,其实也就是课程设计是用C++ MFC写一个学籍管理系统。虽然听人家说C++ MFC已经被淘汰了,但是按照要求还是得去写呗,况且都是面向对象的语言可能对我的java学习也会有点帮助的!但是还是不的不吐槽下VC++ 6.0这款编译器!是在是太糟糕了,出错了什么都不提示,就一个错误框给你,所以你不得不去调试看下再哪步出错,然后在这步去找哪里错了!况且我对debug用的也不怎么熟悉所以只能用注释和MessageBox来调试了!而且有的时候会莫名的出现错误,过会又好了,类名什么的在类视图中有的时候又找不到等等的一些问题,真是太浪费时间了。很不好,中间也有尝试去用VS2010,但是确实很卡,后来也就放弃了!但是呢在写代码的过程中还是有一点收获的!下面就把这些收获记录下来,供以后学习参考!
1.出现语法错误
我在一个类中定义了一个方法
int ADO:: GetRecordCount(){ int nCount = 0; try{ m_pRecordset->MoveFirst(); } catch(_com_error e){ AfxMessageBox(e.Description()); return 0; } while(!(m_pRecordset->adoEOF)){ m_pRecordset->MoveNext(); nCount = nCount+1; } m_pRecordset->MoveFirst(); return nCount; }
然后在其他类中调用这个方法循环输出结果集的数据
for(int k=0;k<ado.GetRecordCount();k++){ value = ado.m_pRecordset->GetCollect(_variant_t((long)0)); if(value != m_information) count++; else{ break; } ado.m_pRecordset->MoveNext();
}
结果就出现输出的数据一直是结果集的第一行数据。后来才发现k<ado.GetRecordCount()里面的ado.GetRecordCount(),每次循环判断条件的时候都会运行,而子啊这个方法里面最后一句是m_pRecordset->MoveFirst();把结果集移到第一行!所以就会发生上面的情况!
解决办法:
1.在循环体外面定义一个int变量来接受行数,然后写进判断条件。
2.直接用while(!(ado.m_pRecordset->adoEOF))也就是判断结果集是否到了最后来控制!
2.语法错误
If判断语句和循环语句的误用导致结果出错。比如说while(!(ado.m_pRecordset->adoEOF)),这里把while换成if就会导致方法体值运行一次!切记切记,不要粗心,主要还是自己开发的太少了,要多练多练!
过程中暴露出来的问题
1.对SQL语句还不是很了解,所以对一些表的处理,数据的筛选还不是很合理!在期间学会了group by和ORDER BY语句有的了运用但是对group by还不是很熟悉。这里可以参考http://www.w3school.com.cn/sql/sql_groupby.asp和http://www.w3school.com.cn/sql/sql_orderby.asp里面的信息!
2.对数据库的处理很不理想!对表的参照完整性一点概念都没有!对事务处理什么的不了解!以后需要在这方面的了解!
3.对面向对象语言的3大特性封装,继承,多态。在开发的时候没有很好的体现!所以在开发过程中会发现代码的重用性很高!需要加强!
4.可能是自己的方法不对,在开发过程中会出现逻辑稍复杂的语句!(循环里面套循环),因为自己对算法这些的不是很了解,所以可能会觉得有点繁琐!有时间可以抽空看下算法!
哎~~转眼到大四了,时间真的不够!以前实在是玩的太疯了!要努力要努力!