关于软件工程第一次项目的一些感想
2014-09-24 23:37
232 查看
在奋斗了24+小时之后,终于完成了软件工程第一次项目。中间有很多曲折,也收获了很多经验。
[b]预计完成时间:[/b]复习C++(一小时);构思(半小时);编码(四小时);调试(二小时);其他(半小时)。合计(八小时)。
实际完成时间:复习C++(两小时);构思(半小时);编码(三小时);调试(五小时+);优化(三小时)。合计(十三小时+)。
首先是审题方面。
这个要求里面最需要注意的有三点:
1、单词的构成,前三个必须是字母,后面可以接任意多的字母或数字,其他字符均视为分隔符。
2、忽略大小写
3、123file里的file不能算为一个单词,所以在用正则表达式的时候需要特别注意。
其次是软件的初步构思。
这里我思考了如下几点
1、首先是语言的选择,C++和C#。这两种语言我都没有系统的用过,暑假的时候自学过C#,上学期也阅读过《C++编程思想》,但最终还是选择了与C语言相近的C++。
2、其次是面向过程还是面向对象。这个程序有三个部分,但三个部分不会同时运行,而是根据命令行参数输入的不同来决定运行哪一个部分。所以我选择了面向对象的程序设计。将程序的三个部分分别写入三个类,根据命令行输入的不同来new相应的对象。这样设计程序相对条理清晰,也减少了出错的几率。
注:这三个部分其实有很多功能是一样的,可以考虑将类划分开来,合并相同的部分,减少代码重复,减轻编码工作量。(不过我还没这样做,实在是没精力修改了)
3、再者是文件的扫描。之前使用java语言的时候,有文件类可以直接用,相当方便。但是当我开始写程序的时候发现c++并没有这样的类,所以经过各种百度和询问同学,使用了_finddata_t这个强大的结构体。(虽然我还没完全弄明白这个结构体的功能)这样一来就可以递归文件目录进行文件扫描。
4、然后是单词读入。大致分为两种方法,一种是逐个字符读入,另一种是读入全部字符然后进行分析。我个人倾向于后者,因为这样批量处理效率高,代码简洁。
5、最后是结果存储的数据结构。一种是线性表,一种是二叉树。但程序涉及查找有无相同元素,所以二叉树会节省很多时间。
下面是程序测试结果,我先测试了vs的安装目录。
性能分析如下:
由于我没有使用哈希表,所以程序效率并不太高,但也还能接受。
编码过程中遇到的问题:
1、初始化的问题,任何对象在使用之前最好初始化,避免程序崩溃。
2、建立二叉树的问题。这个问题我不止一次犯过。(应该好好反思)就是递归建立的时候,新建立的节点没有接到树根上。所以导致程序崩溃。
3、关于程序效率的问题。最开始我用的vector来存的数据,在测试数据量较大时,耗时明显过长。后来改为用二叉树存储,效率明显提升。
学到了什么:
1、编程之前对程序应有整体的构想。
2、应养成良好的编程习惯,降低代码出错率。
3、应在数据结构和算法上对程序进行优化。
[b]预计完成时间:[/b]复习C++(一小时);构思(半小时);编码(四小时);调试(二小时);其他(半小时)。合计(八小时)。
实际完成时间:复习C++(两小时);构思(半小时);编码(三小时);调试(五小时+);优化(三小时)。合计(十三小时+)。
首先是审题方面。
这个要求里面最需要注意的有三点:
1、单词的构成,前三个必须是字母,后面可以接任意多的字母或数字,其他字符均视为分隔符。
2、忽略大小写
3、123file里的file不能算为一个单词,所以在用正则表达式的时候需要特别注意。
其次是软件的初步构思。
这里我思考了如下几点
1、首先是语言的选择,C++和C#。这两种语言我都没有系统的用过,暑假的时候自学过C#,上学期也阅读过《C++编程思想》,但最终还是选择了与C语言相近的C++。
2、其次是面向过程还是面向对象。这个程序有三个部分,但三个部分不会同时运行,而是根据命令行参数输入的不同来决定运行哪一个部分。所以我选择了面向对象的程序设计。将程序的三个部分分别写入三个类,根据命令行输入的不同来new相应的对象。这样设计程序相对条理清晰,也减少了出错的几率。
注:这三个部分其实有很多功能是一样的,可以考虑将类划分开来,合并相同的部分,减少代码重复,减轻编码工作量。(不过我还没这样做,实在是没精力修改了)
3、再者是文件的扫描。之前使用java语言的时候,有文件类可以直接用,相当方便。但是当我开始写程序的时候发现c++并没有这样的类,所以经过各种百度和询问同学,使用了_finddata_t这个强大的结构体。(虽然我还没完全弄明白这个结构体的功能)这样一来就可以递归文件目录进行文件扫描。
4、然后是单词读入。大致分为两种方法,一种是逐个字符读入,另一种是读入全部字符然后进行分析。我个人倾向于后者,因为这样批量处理效率高,代码简洁。
5、最后是结果存储的数据结构。一种是线性表,一种是二叉树。但程序涉及查找有无相同元素,所以二叉树会节省很多时间。
下面是程序测试结果,我先测试了vs的安装目录。
性能分析如下:
由于我没有使用哈希表,所以程序效率并不太高,但也还能接受。
编码过程中遇到的问题:
1、初始化的问题,任何对象在使用之前最好初始化,避免程序崩溃。
2、建立二叉树的问题。这个问题我不止一次犯过。(应该好好反思)就是递归建立的时候,新建立的节点没有接到树根上。所以导致程序崩溃。
3、关于程序效率的问题。最开始我用的vector来存的数据,在测试数据量较大时,耗时明显过长。后来改为用二叉树存储,效率明显提升。
学到了什么:
1、编程之前对程序应有整体的构想。
2、应养成良好的编程习惯,降低代码出错率。
3、应在数据结构和算法上对程序进行优化。
相关文章推荐
- 关于这个项目的一些感想
- 关于最近项目出现的一些问题的感想
- 关于团队项目的一些感想——刘宇翔
- 关于项目中异常处理的一些总结
- 关于项目尾期的一些问题
- [wind]关于该开源项目的一些想法
- 关于Borland公司Dbexpress mssql一些感想
- 又是一点关于过年前做的项目的一些想法!
- 关于软件工程的一些观点
- 关于项目管理的一些知识要点
- 对Web项目开发的一些感想[草稿]
- 关于实施MVC框架结构的WEB项目的一些见解
- 关于Borland,Delphi9的一些杂七杂八的感想
- 关于“龙芯”的一些感想...
- 关于银行项目的练习——对Account/Bank的一些小改动
- 关于项目开发中的一些问题
- 关于项目开发中的一些问题(回答waitu)
- 关于多项目管理过程中的一些感悟
- 关于实施MVC框架结构的WEB项目的一些见解(转)
- 从网络上找到的一些关于软件工程的东西