面向对象C++课程的实训应用
——以进销存系统为例
2017-10-21李峰
李 峰
(湖南工程学院 计算机与通信学院,湖南 湘潭 411104 )
面向对象C++课程的实训应用
——以进销存系统为例
李 峰
(湖南工程学院 计算机与通信学院,湖南 湘潭 411104 )
因为学生需要掌握很多复杂的技术,比如面向对象软件的编程、团队合作的技巧,所以对在校大学生系统地教授面向对象程序开发比较困难。但学生可以通过学习项目课程获得软件开发的实践经验。因为需要学生能在规定时间内完成,设计这样的项目课程有一定的挑战性。项目设计课程应该灵活地适应学生多老师少的情况。为了避免抄袭,为不同的学生团队布置不同的任务,这样的设计使得项目具有可比性。2009年以来,我们使用进销存系统,一款基于C++的商业应用程序进行实训,对进销存系统的功能和教学效果进行了分析对比。
面向对象;C++;进销存
项目软件开发在C++中有很重要的作用。实际上学生需要大量的开发技巧和编程经验,学生不只是编写一些能在一个小时内完成的小程序,更应该开发大型应用系统。
国际上ACM(国际计算计学会)、IEEE(电气和电子工程师协会)倡导的大学生软件工程课程要求学生不但能完成个人任务而且能胜任团队协作,学生在强调团队纪律的重要性的基础上应能清楚团队精神和团队角色定位。团队纪律必须建立在项目截止日期、项目进展,团队交流基础之上。
就软件发展本身来说,设计一款好的项目课程是很困难的,学生不得不面对多种挑战,比如,面向对象编程的技术,团队合作,项目最后截止日期,对于学生团队来说,这是一项严峻的挑战。为了保证C++课程质量,我们应用了一套基于C++的应用项目软件——进销存系统。从2009年以来我们使用这套系统作为面向对象程序课程的实训系统。
(1)无论是理论学习还是实践学习,学生们往往一开始就加入项目团队,为了完成项目,学生不得不在项目中间找出足够的信息,然后学习怎么去运用这些信息。
(2)对于教师来说,很容易找到大量的难度不一的项目,由于这些项目是在相同的框架下面,所以在这些项目下进行实训,结果是可比的。
(3)对学生来说扩展项目比单纯地去设计它更容易,而且项目的框架提供了许多立马可用的部分。
(4)初学的学生可以养成很好的学习习惯,比如,修改已经设计好的框架进行编程,因此,授课模式可以很灵活。为了提高教学效果,我们提出了框架的重复使用,我们教学的目的就是让学生在编写程序时重复使用框架,锻炼出面向对象的能力。
虽然我们在2009年开始就使用这个程序,进销存系统依然是实验软件。通过学生对软件的使用,我们获得了学习效果的反馈。正如我们预期的那样,当学生扩展或者加强框架的时候,学生们获得了提高。同时,我们也不断升级该程序保证了程序的时效性。
一 针对初学学生的面向对象教学
面向对象的软件开发是面向对象教学中的核心。[1,2]
在这块领域众所周知的问题是需要相对来说比较长的时间让学生适应用面向对象的思想来思考解决,而且学生需要做到团队协作。
我们反复利用现有的进销存系统,没有开发新版本,这是为了让学生自己发现如何重复利用框架。学生需要灵活地思考软件开发的过程,要认识到软件有生命周期,要认识到软件需求分析[3-5]的重要性,要能理解并能够使用软件框架模式。
在教学中,我们将教学分为2个部分,包括15周的课程学习和12周的项目实践,接下来,我们给出所授课程的主要内容和时间节点。[6]
基于C++的程序设计课程教授速度快、强度大,[7-8]课程以C程序设计课程为基础,项目实践课程为其后续课程(见图1),课程覆盖了学生们在大学里面的计算机的所有课程和知识,例如学生会学到web设计,GUI图形设计,系统软件设计和开发。
表一 项目课程内容和时间节点表
理论课程只提供学生完成整个项目所需要的基础知识,但实训课程可以提供给学生更多的实践机会。学生如果想学得更深,可以在课程之后再继续学习。
在项目课程里,我们组织同学分成四到六组,每个组都设有主程序员、辅助程序员、秘书、系统测试员、管理者的角色,除了担任这些角色之外,每个学生还要承担编程的任务。团队中由高年级学生担任助教,助教同时也被项目领导所考察。助教有双层角色,首先是学生的顾问,其次是项目软件的客户。实训中学生不但可以面对面的交流技术问题,而且可以在论坛中展示项目成果。
为了提高教学效果,课程开通了网上交流平台,并严格执行项目进度。
网上交流意味所有信息都在线发布。包括框架、文档、指导书、定制的个人项目、学生团队要求。在项目的初始阶段,项目团队必须在线发布他们的项目解决方法;在项目的末尾阶段,项目团队必须以口头形式向老师或者助教汇报,并且在网页上发布项目结果。这种监管方式行之有效,然而,我们无法精确预测项目进程。因此,也无法在初学学生的第一个项目中给予精确的指导。
严格执行项目进度必须保证项目会按时完成。项目过程被严格执行,在表一中列出关键阶段的时间节点。项目团队允许增加开发工作量,但仍然要严格执行项目进度。
项目最后的结果包括展示程序代码、回答提出的问题,所有答辩都需要助教或者课程老师来参与。实践证明项目能够激起大多数组员的兴趣。
二 进销存程序
进销存程序提供货物或者服务。软件包括买卖商品、租用设备、接受订单、处理售后、维修清理等模块。管理员的责任包括会计、按时检验库存、现金结算、按时订货、增加新货物、从碟片销售到餐饮管理服务到航空订票系统都可以应用这个软件,但软件的容量不是很大,现在的版本只适合教学。如果要深入开发适合商用的版本,则需要更多的知识背景,比如分布式的数据库系统。对学生来说,这样的项目实训课程要求学生所具备知识背景显然超出了学生知识范畴。
软件能应用于实际而且提供了必要的升级功能,的实际商用软件不具备这些功能,增加这些功能是为了提高我们的教学的效果。而且升级功能模块不需要花很多时间就能够检测出学生程序的灵活性,而且能让学生集中更多的时间在程序开发上面。
程序的核心功能如下:
系统要求实现基本资料管理、进货管理、销售管理、库存管理、财务管理、自动编制记帐凭证、营业员的提成查询、各分机的销售情况汇总、数据库管理、数据库备份、恢复、期初建账等管理功能,支持如下要求:
(1)支持单仓/多仓或总店/分店管理体系,可以管理任意分仓或分店、任意品种的库存。
(2)支持条形码功能。您可以自定义条形码,设计、打印各种规格的条码标签,省去了购买条码打印机的开支。
(3)员工提成方式多样,可针对每个商品设置提成三种提成方式:数量提成率、销售额提成率及销售毛利提成率,员工的业绩及提成一目了然。
(4)操作权限设置功能强大。既可以设置各种菜单级别的操作权限,也可以设置“成本管理权”“会员管理权”“单据删除权”“销售退货权”“售价调整权” 及“销售反确认权”等权限。
(5)订货功能大。软件可根据商品资料中设置的最高库存、最低库存及当前库存自动升级定货清单,也可以通过提取补货数据生成定货清单,让订货工作轻松、方便。
(6)独创的单据确认与反确认功能,方便用户对单据输入、修改。
(7)批发价、零售价可自动生成,减轻了定价的工作量。
(8)功能强大的各类统计报表,能提供详尽的营业报告,能对商品进、销、存及利润等财务状况了如指掌。
(9)所有单据、报表均可以在打印前预览,并且可以导出为Excel文件,然后根据实际需要进行特别编排处理。所有单据的打印格式均可以重新设计。
(10)有专业的前台POS销售功能。
(11)“傻瓜化、人性化”设计的财务管理,简单易用,不懂会计、计算机也能轻松应对编制记帐凭证、登记记帐凭证、记帐凭证查询、会计帐册查询、损益表查询、资产负债表查询等操作。
(12)常用工具软件丰富。迷你计算器、帐套数据的导入导出、帐套初始化及帐套压缩或修复等为维护系统的正常运行提供了强有力的保障。
三 教学过程
为了平衡项目设计和实现之间的矛盾,我们让学生用系统的方法来进行设计,而不是拷贝代码。整个过程我们努力让学生感到从设计到完成是件很轻松的事,例如,为了完成项目我们使用的一种清晰的项目结构,这些结构从模型的使用到应用的完成都提供给学生清晰的思路。
在项目中,我们强调重复使用的设计模式和框架,我们的目的就是让学生可以重复使用设计模式和框架。学生从前面的课程中可能熟悉了其中的一些模式和框架,但对于其余的模式和框架,他们在实训中可能首次遇到。
我们鼓励学生使用这些模式和框架。比如,适配器模型、桥接模型,[8]或者反转控制模型。[9]实际我们使用修改后的模式和框架以便于和学生和助教讨论。
设计的关键就是使学生能够重复使用现有的模式和框架。早期的进销存版本因为设计缺陷让学生觉得实验很难,所以现在的版本被简化很多。但实际上有缺陷的设计版本能够让学生从中学习到更多的经验。
四 教学结果
每次实训以后,我们收集了实验数据,通过这些实验数据和学生们的反映,我们有了第一手的反馈资料。通过这些反馈资料我们得出以下经验。
1.使用框架教学有效地学习,常常要花很长的时间,而且是一项艰巨的任务,有研究员已经给出了他们的研究结果。[10,11]我们的研究表明学习项目的时间只占整个项目时间的30%,项目中学生往往会花费大量时间在桌面开发和网页开发中。这是由于桌面开发和网页开发只是基于学生的主观认识,桌面开发花费大量的时间是由于很多学生不了解如何使用复杂的lib-Phenom框架。进销存应用程序提供GUI的交互界面,在基于lib-Phenom桌面编写程序时候,用GUI的交互界面要容易得多,而学生们常常认为他们能够编写出更好的GUI。
2.学生们编程就意味着教他们如何重复使用面相对象程序中的框架。学生们常常由于团队中新加入的学生而感到惊奇,因此他们试图回避框架的开发,由此退出比赛[12,13]。研究发现助教的态度强烈地影响了框架的重复使用率,假如助教强调框架的重复使用,学生团队会照做,若助教不重视重复使用,那么即使有些方法已经被框架开发出来了学生也会使用他们自己的方法来开发程序(见表二)。
表二 学生在实训中使用C++框架对比 单位:人
3.在项目初始阶段,学生们要求根据前面的原始设计来编制程序,然后在项目分析阶段和设计阶段用UML编程。框架使用的时机很重要。根据我们的经验,这是一个开放研究课题。在课程里,我们要求学生在项目分析的时候,不要考虑框架的概念,只有在设计程序的时候再考虑它,然而并不是所有学生会按照我们的要求做。我们需要更多的研究来找到最有效的方法使应用框架的编程融入到程序开发中。
4.软件编程开始时很多学生都不理解为什么一定要建模。[14]但最后几乎所有学生能理解如果没有建模,就运行不了复杂的程序。
五 结 论
从2009年以来,我们使用进销存系统在大约420个学生中间成功地进行教学。总之,学生反映良好,但是也有反应工作量有点大。学生们普遍喜欢利用课外时间团队工作,研究发现每个学生每周大约花费17.9小时进行项目开发。绝大多数学生认为在实验软件中学习真实软件的开发是必要的。
我们在2013年到2015年中对实训中使用C++框架编程人数进行统计,得出数据如表二所示。从表中可以发现。(1)从事桌面开发的学生一般也会从事网页开发,桌面开发和从事网页开发的学生人数正相关;(2)从2013到2015年学生没有使用C++框架进行开发的平均人数是下降的(网页开发2014年比2013年多3个)使用C++框架的学生平均人数在上升。这说明由于我们反复强调框架的重复利用可以减少编写程序的复杂性,所以使用框架的学生逐年上升。学生在编程过程中由于使用C++模式框架开发,使得编程更加简单、容易、高效。
[1] Demuth,H.Hußmann,L.Schmitz,S.Zschaler.Teaching to Using a Frame Work and Both Direct and Net-Based Tutoring[C]. Proc. World Conf.On Educational Multimedia,Hypermedia & Tele-communications,Ed-Media2001,2001:145-156.
[2] Demuth, M.Fischer, H.Hußmann. Experience Inearlyand Late Software Engineering Project Courses[C].Proc.15thconf.On Software Engineering Education&Training,Csee&T2002, Ieeecomputersociety,2002:106-116.
[3] Wirfs-Brock,B.Wilkerson,L.Wiener,Designing Object-Oriented Software [J]. Prentice-Hall,Engle Wood Cliffs,Nj,2010:45-50.
[4] Wilkinson,Using Crc Cards.An Informal Approach to Object-Oriented Development[J].Sigs,Newyork,Ny,2005:78-86.
[5] J.Rumbaugh,G.Booch,I.Jacobson. Unified Modeling Language Reference Guide [J].Addison-Wesley,Reading,2007(11):34-38.
[6] Leblanc,A.Sobel,et al.Software Engineering 2004 (Se2004) [M]. Curriculum Guidelinesfor Undergraduate Degree Programs in Software Engineering, 2004:23-26.
[7] F.J.Hoover,L.Liu,P.Sorenson,Designing Object-Oriented Frame works [C]. Handbook of Object Technology,Crc Pre-ss ,2008.
[8] Gamma,R.Helm,R.Johnson,J.Vlissides. Design Patterns: Elem-ents of Reusable Object-Oriented Software [M]. Professional Computing Series,Addison Wesley professional,2005:34-44.
[9] Matthew. Examining The Validityof Inversion of Control. Examining[J] .The Validity of Inversion of Control,Feb.2015:(11):123-133.
[10] Shull,F.Lanubile,V.R.Basili.Investigating Reading Techni-ques for Object-Oriented Framework Learning [C]. Ieee trans. Softw.Eng, 2000 (26):1101-1118.
[11] Zeid,M.Elswidi. Apeer-Review Based Approach to Teaching Object-Oriented Frame work Development [C]. Software Eng ineering Education and Training, Ieeecomputer Society,2005: 51-58.
[12] 黄华军.C++程序设计教学改革探索[J].计算机教育,2014(1):38-41.
[13] 肖 明.案例教学法在“C++语言程序设计”教学中的应用[J].计算机教育,2010(6):83-86.
[12] 朱晓风.C++教学改革[J].信息与电脑,2015(20):168-169.
APracticalApplicationoftheObject-OrientedC++Course——TakeSalesSystemasanExample
LI Feng
(Department of Computer and Communication, Hunan Institute of Engineering, Xiangtan 411104,China)
Teaching students the systematic object-oriented software development is difficult because they need to develop a lot of complex skills. including technical skills in object-oriented software development, and collaboration with other developers. To acquire these skills, students need pralttial experiences, through team-oriented project courses. Designing such project courses is a challenge in itself. They must be both sufficiently challenging and achievable within the limited time in the situation of large numbers of students supervised by small numbers of staff. Different projects should be easily comparable while assigning different tasks for different teams to reduce the risk of plagiarism. since 2009, we have had a practical application of the object-oriented of C++ course, and we howe done a comparative analysis of the functions and teaching effeits of the sales sgslem.
object-oriented; C++; sales system
G642.0
A
1671-1181(2017)03-0109-04
2016-12-12
2012年湖南工程学院教改项目“C++面向对象程序设计课程的实践教学研究”(校教字〔2012〕69号);2013年湖南工程学院校教改项目“基于问题的学习(PBL)教学模式在面向对象课程中的应用研究”(校教字〔2013〕20号)
李 峰(1975-),男,湖南湘潭人,硕士,讲师,研究方向:计算机应用。