五子棋游戏软件工程课程设计(推荐8篇)
4.1 总体设计分析
总体设计是软件开发过程中的另一个重要阶段,在这一阶段中将根据需求分析中提出的逻辑模型,科学合理地进行物理模型的设计。这个阶段的主要目标是将反映用户信息需求的逻辑方案转换成物理方案,并为下一阶段提供必要的技术资料。
4.1.1 总体设计原则
(1)整体性:软件是作为统一整体而存在的。因此,在总体设计中要从整个软件的角度进行考虑。
(2)灵活性:为保持软件长久的生命力,要求该手机游戏软件具有很强的环境适应性。为此,游戏软件应具有较好的开放性和结构的可变性。
(3)可靠性:可靠性是指软件抵御外界干扰的能力及受外界干扰时的恢复能力。
(4)经济性:经济性是指在满足游戏软件需求的前提下,尽可能地减小游戏软件的开销。
4.1.2 软件模块总体设计
软件中各模块之间的关系通常利用层次图来表示。它是一种一系列多层次的用树形结构的矩形框描绘数据的层次结构框图。一个单独的矩形框作为树形结构的顶层,各个数据的子集由下面的各层矩形框代表,最底层的各个矩形框代表组成这个数据的实际数据元素(不能再分割的元素),它代表完整的数据结构。这模式非常适合于需求分析阶段的需要,层次方框图对数据结构描绘随着结构精细化也越来越详细。反复细化沿着图中每条路径,从对顶层信息的分类开始,直到确定了数据结构的全部细节为止。
开始游戏重新游戏游戏选项悔棋认输五子棋游戏背景音乐退出游戏先后手设置游戏设置棋盘底纹设置棋盘大小设置游戏帮助帮助关于 图4-1 游戏功能结构
本研究中将游戏软件分为三大模块,如图4-1所示,包括:游戏选项、游戏设置和帮助。按照在调研中搜集的资料对每个模块的功能进行编排制作。依据上述功能的分析,本研究中,将游戏软件在三大模块的基础上又对每一大模块又分为几个子模块:
游戏选项包括六个模块:开始游戏、重新游戏、悔棋、认输、背景音乐和退出游戏。
游戏设置包括三个模块:先后手设置、棋盘底纹颜色设置和棋盘大小设置。
帮助包括两个模块:游戏帮助和关于。
4.2 游戏设计
4.2.1 游戏前的准备
本游戏在开发之前需要做一些前期准备工作,尤其是对于精通五子棋游戏的Java 游戏开发者来说。通常情况下,一款运用起来比较熟练地 J2ME 开发工具
是必不可少的。本游戏使用的是J2ME的简化开发工具 Sun Java(TM)Wireless Toolkit 2.5.2 for CLDC,他需先将Java虚拟机安装调试好之后才能使用。WTK 2.5.2 不带有文本编辑功能,所以需要另寻搭配使用。本游戏采用 Ultra Edit 进行编辑。本游戏需要几张后缀名为.png格式的卡通图,除了一张用作五子棋游戏的 Logo 外,其余的都将在游戏中使用。4.2.2 游戏界面和事件驱动设计
游戏的界面设计采取传统游戏界面风格,如图4-2所示。游戏设计中采用传统界面游戏风格,首先启动游戏,然后进入游戏开始界面,界面中放置“设置”、“开局”、“帮助”、“关于”四个选项供玩家选择。其中“设置”选项主要是对游戏的相关功能进行设置,如游戏难度设置。另外还有“悔棋”、“重玩”等项目的设置。除此之外还包括查看游戏帮助、游戏介绍等。
图4-2 游戏界面设计
所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数)。当然事件不仅限于用户的操作。我们知道,事件是事件驱动的核心自然是。从事件角度说,一个事件收集器、一个事件发送器和一个事
件处理器组成了事件驱动程序的基本结构。事件收集器专门负责收集包括来自硬件的(如时钟事件等)、来自用户的(如键盘、鼠标事件等)及来自软件的(如应用程序本身、操作系统等)的所有事件。将收集器收集到的事件分发到目标对象中则由事件发送器负责完成。具体的事件响应工作则由事件处理器完成,它需要运用虚函数机制(函数名取为类似于 Handle Msg 的一个名字),它往往要到实现阶段才完全确定。事件处理器对于框架的使用者来说是他们唯一能够看到的。棋类游戏通常具备两个重要特性,首先是对战双方轮流落子,其次是落子间隔通常是不确定的,尤其是对战后期,可能每一步棋都要经过深思熟虑,无论是人还是计算机,都无法对时间间隔有事先的预期。基于以上两个特性,本游戏摒弃了大多数游戏采用的线程或定时器驱动游戏的方法,而采用了事件驱动的方法,即玩家的键盘或触摸笔触发游戏的下一个动作。事件驱动大大减少了不必要的工作量,只有玩家发出消息时,计算机才启动运算,而在玩家思考期间,计算机不做任何运算和重绘操作。4.2.3 游戏的类设计
五子棋游戏属于二维棋类游戏,因此可以定义一个 Chesses 类来表示棋子,用一个 Chess 类型的二维数组来包含棋盘上的所有棋子,对于该棋子玩家的区分使用Chesses 的 boolean 型的变量 is Player1 来区分。可以考虑直接生成数组的每一个对象而不是在数组建立后,而是把每一个棋子对象(Chesses)放在游戏的进行中生成,这主要是考虑到移动设备的资源有限,尽可能减少系统资源占用。这样在游戏进行时,可以避免还没有下的棋子在一开始就占用了系统内存,玩家每下一步棋,在数组相应位置生成该棋子的对象。
对于游戏中的每一类的设计,首先就是一个 MIDlet 类,Gobang 类继承自MIDlet 类,通过方法 start App,pause App,destroy App 来通知游戏的开始,暂停和销毁结束,用于连接设备的应用程序管理器(Application Manager)。
本游戏共由7个类组成,它们各自的功能如下:
(1)Gobang MIDlet类
负责程序的启动和屏幕之间的切换;
(2)Gobang Canvas 类
玩家的对战平台,他继承于 Canvas 类;(3)Setting 类
用于创建游戏的各项设置参数表单;
(4)Gobang Logic 类
游戏的逻辑类,负责胜负判断和计算机落子;
(5)Dot 类
棋子类,包含了棋子的位置信息;(6)Help 类
游戏的帮助类,包含五子棋的一些常识信息和五子棋教学内容;(7)About类
游戏的关于类,包含游戏的版本、版权等信息。各个类之间的关系如图4-3所示:
图4-3游戏类设计
4.2.4 游戏的流程设计
对于棋盘界面的更新,游戏进行绘制棋子时是按照棋子的二维数组来完成的,玩家下棋后,设置is Player1 值,程序修改数组相应位置,然后重新绘制(repaint)。为了使游戏的操作尽可能的简便,本文设计上不在游戏进入时设计菜
单,玩家可以直接开始对战,而是在开始游戏的过程中设置重新开始和退出的按钮。即一键开始,运行即玩,重来或退出都使用一键操作。游戏流程的设计依据主要是游戏的界面设计和游戏的类的设计。游戏启动时,Gobang MIDlet 对象先显示游戏的主屏幕,在屏幕下方一侧是出软键(软键指描述抽象客户端设备如何显示),另一侧是用软件构成的菜单,菜单元素主要有“开局”、“游戏设置”、“游戏帮助”、“关于”选项。当玩家选择“游戏设置”软键时,则显示游戏参数设置表单;当玩家选择“开局”软键时,则显示游戏对战主界面;当玩家选择“游戏帮助”软键时,则显示游戏帮助表单;当玩家选择“关于”软键时,则显示游戏关于表单。玩家进入游戏参数设置表单,当玩家按下“确定”软键时,则确认当前游戏参数,返回游戏主屏幕;当玩家按下“取消”软键时,则放弃此次对游戏的修改,直接返回游戏主屏幕。玩家进入游戏对战画布,对战中画布有两个软键,当玩家按下“返回主菜单”软键时,则退出游戏到达游戏主菜单;当玩家按下“悔棋”软键时,则进行悔棋操作;当游戏结束时,“悔棋”软键被换成了“重玩”软键。玩家进入游戏介绍表单,当玩家按下“确定”软键时,返回游戏主屏幕。4.2.5 游戏算法的设计
1、五子棋的获胜组合
有哪些获胜组合是在一场五子棋的游戏中计算机必须要知道的,因此,获胜组合的总数必须要求得。在本文中我们假定当前的棋盘为15*15:
(1)每一列的获胜组合是11,共15列,计算水平方向的获胜组合数,所以水平方向的获胜组合数为:11*15=165。
(2)每一行的获胜组合是11,共15列,则可计算垂直方向的获胜组合总数,垂直方向的获胜组合数为:11*15=165。
(3)同理,可计算正对角线方向的获胜组合总数,正对角线上的获胜组合总数为11+(10+9+8+7+6+5+4+3+2+1)*2=121。
(4)计算反对角线上的获胜组合总数。计算反对角线方向的获胜组合总数可计算为11+(10+9+8+7+6+5+4+3+2+1)*2=121。这样可计算得所有的获胜组合数为:165+165+121+121=572。
2、设计获胜棋型
通过上面的计算,一个15*15的屋子棋盘在此已经计算出了会有572中获胜方式,因此,我们就可以利用数组建立一些常规棋型,棋型的主要作用是:
(1)判断是否有任何一方获胜;
(2)根据当前格局判断最可能的落子方式。
然而在现实中,高手留给我们的经验就是把握前奏,如“冲四”、“活三”,除了“连五”以外,这些也是同向胜利的捷径。
3、攻击与防守
获胜棋型的算法是中性的,不区分计算机和玩家,这就涉及到攻击和防守何者优先的问题。而许多高手都认为五子棋的根本是“防守”,“攻击”是灵魂。进攻是取胜的手段,是防守的延续和发展。许多经验和研究表明,一个棋手只要掌握了全面的、基本的防守原理和技巧,就能和比自己棋力高一个等级的进攻型选手对抗,起码能立于不败之地。对手进过越偏激,则防守的效果越好。没有进攻的防守就像只开花不结果,没有实际意义,顽强的防守是反攻的前奏,没有进攻的延续,防守也失去了价值。而这缺一不可。根据以上原理,计算机在接受最佳的攻击位置之前,还要计算当前玩家的最佳攻击位置。如果玩家存在最佳攻击位置,那么计算机就将下一步的棋子摆在玩家的最佳攻击位置上以阻止玩家的进攻,否则计算机便将棋子下在自己的最佳攻击位置上进行攻击。
4、用到的典型算法(1)坐标变换算法
游戏的实质其实是对所下棋子的位置进行操作和判断,因此将己方、对方以及棋盘上空点的位置坐标存储在相应的List中。我对所下棋子的坐标进行了处理,因为我所采用的棋盘为15*15,所以棋子横坐标为0到14的整数,纵坐标也为0到14的整数。因此,每次在棋盘上下子之后,计算机在存储该点的坐标时,便要对坐标进行加工。假设左上角点为firstPoint,它的实际坐标为(x1,y1),而我是将它作为(0,0)存储的,其它的坐标,其它点都是以该点为标准进行变换的,假设棋盘上每个格子的宽度为w,某实际点为(x2,y2),变换后的坐标为(x,y),x=(x2-x1)/w,y=(y2-y1)/w。
(2)胜负判断算法
胜负判断的规则很简单,就是判断游戏双方的棋子在同一条水平线、同一条竖线或是同一条斜线上谁先出现5个连续的棋子,谁先达到这样的目标,谁就获得胜利。在本设计中,是在每次下完一个子后进行判断,看己方是否达到了胜利的标准,若胜利游戏便结束;否则,游戏继续。
(3)人工智能算法
人工智能算法的主体思想分为以下三个步骤:
第一步:根据双方的当前的形势循环地假设性的分别给自己和对方下一子(在某个范围内下子),并判断此棋子能带来的形势上的变化,如能不能冲4,能不能形成我方或敌方双3等。
第二步:根据上一步结果,组合每一步棋子所带来的所有结果(如某一步棋子可能形成我方1个活3,1个冲4(我叫它半活4)等),包括敌方和我方的。
第三步:根据用户给的规则对上一步结果进行排序,并选子(有进攻形、防守形规则)。
5、典型类的具体设计(1)应用程序类
Gobang 类用于连接设备的应用程序管理器(Application Manager),Gobang类继承自 MIDlet 类,通过 Gobang 类的方法 start App,pause App,destroy App 来通知游戏的开始,暂停和销毁结束。源代码如下:
package com.occo.j2me.game.gobang;import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;public class Gobang extends MIDlet
//定义游戏界面的 Canvas 类 Gobang Canvas 的对象 Gobang public { Gobang Canvas gobang;Gobang(){
super();
gobang=new Gobang Canvas(this);//生成 Gobang Canvas 类的对象 gobang
} protected void start App(){
Display.get Display(this).set Current(gobang);
} protected void pause App(){
} protected void destroy App(boolean arg0){
}} //在屏幕上绘出游戏见面 gobang(2)游戏界面类
Gobang Canvas 类继承自 Canvas,游戏的核心类是 Gobang Canvas 类,此类将完成游戏的绘图、互动、控制、逻辑、等所有功能,此类的框架代码如下:
Package com.occo.j2me.game.gobang;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command Listener;public Gobang Canvas(Gobang gobang){
this.gobang=gobang;
}
protected void paint(Graphics g){
}
import javax.microedition.lcdui.Graphics;public class Gobang Canvas extends Canvas implements Command Listener{protected Gobang gobang;
public Gobang Canvas(){
}
}(3)棋子类
整个棋盘是一个 Chesses 类型的二维数组,棋盘上的每一个棋子都对应着一个Chesses 的对象,此类定义了一个棋子,源代码如下:
package com.occo.j2me.game.gobang;public Chesses(){
}
public class Chesses {boolean is Player1;
public Chesses(boolean is Player1){
this.is Player1=is Player1;
}}
4.3 游戏实现
4.3.1 主类的实现
YpkWuZiQiActivity类是五子棋游戏的主类,同时也是五子棋游戏的入口,它继承自Activity类。进入程序后,首先调用init()方法,init()方法通过调用setContentView(R.layout.welcomeview)显示登录该游戏的第一个界面。welcomeview.xml是一个布局文件,里面存储了界面信息。该界面中有四个Button,分别为welButton1、welButton12、welButton3、welButton4,点击每个Button都会触发一个事件,其中点击welButton1和welButton2还会给它的成员变量FIGHTINGMODE赋值,因为在人人对战和人机对战是写在同一个ChessBoard类中的,所以需要通过FIGHTINGMODE的值来区分是人人对战还是人机对战。
点击welButton1时,FIGHTINGMODE=1,然后会调用initTwo()方法,该方法通过调用setContentView(R.layout.chess)方法,来显示对战的界面。chess.xml文件存储了对战界面的信息。在chess.xml文件中调用了ChessBoard类,该类中主要定义了棋盘的信息,下文会对该类做具体的介绍的。在对战界面中也有四个Button,分别是b1、b2、b3、b4。
首先来介绍一下b2,该Button的功能是返回主页,调用init()方法就可以实现。b3的功能是重新开始,这个也只需要调用initTwo()方法。b3的功能是退出,调用了系统方法:System.exit(1)。下面重点介绍一下b1,该Button的功能是悔棋。该Button设定的点击事件详细内容如下:
b1.setOnClickListener(new OnClickListener(){ public void onClick(View v){ ChessBoard chess =(ChessBoard)findViewById(R.id.chess);Point temp = null;if(chess.whoRun == 1){
if(chess.firstPlayer.getMyPoints().size()>=1 &&chess.secondPlayer!=null){ temp=chess.secondPlayer.getMyPoints().get(chess.secondPlayer.getMyPoints().size()-1);
chess.secondPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);temp=chess.firstPlayer.getMyPoints().get(chess.firstPlayer.getMyPoints().size()-1);chess.firstPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);chess.freshCanvas();
}
} if(chess.whoRun == 2){ if(chess.firstPlayer.getMyPoints().size()>=1 && chess.secondPlayer!=null){ temp=chess.firstPlayer.getMyPoints().get(chess.firstPlayer.getMyPoints().size()-1);chess.firstPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);temp=chess.secondPlayer.getMyPoints().get(chess.secondPlayer.getMyPoints().size()-1);chess.secondPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);chess.freshCanvas();
} })首先获取ChessBoard对象,该对象继承自View,详细的定义了棋盘信息,主要负责显示棋盘的内容。接下来判断一下触发悔棋事件的是哪一个玩家,再判断是否符合悔棋的条件,这个条件很简单,就是棋盘上至少要有两个棋子。之后便进行悔棋操作,分别将两个玩家最后下的棋子取出,程序实现就是将两个ArrayList的最后一个元素remove出来,再分别放到记录棋盘中没有棋子的点的}
}
集合中,最后更新一下画布,主要是调用ChessBoard的invalidate()方法。通过以上步骤之后,呈现在我们面前的便是悔完棋的画面了。
点击welButton2时,FIGHTINGMODE=2,之后的步骤便会点击welButton1是相同的了,不同的是,由于对战模式的改变,从人人对战变成了人机对战。
点击welButton
3时,通
过
initThree()
方
法
调
用setContentView(R.layout.netchess)方法实现网络对战。详细的对战实现细节将会在下文一一介绍。在这个界面中只保留了两个Button:b2和b4。这两个Button所实现的功能和上面的b2和b4是相同的。
最后,welButton4比较简单。它所实现的功能为退出应用程序,调用System.exit(1)方法。4.3.2 游戏设置类的实现
游戏设置表单用来对游戏参数进行设置,包括棋盘大小、先手选择、智能级别。表单中使用了 Gauge 和 Choice Group 两种高级用户界面组件。
1、棋盘尺寸选择
标准的五子棋棋盘为 15*15,但为了满足不同玩家的需求,这里提供了大小为10*10 到 20*20 的棋盘,用户可以通过 Gauge 组件改变。棋盘的最小值为 10,而Gauge 组件的最小值为 0,所以当前的 Gauge 值需要角上 10 才是当前棋盘大小。创建 Gauge 组件的代码如下:
form = new Form(“ 游戏设置”);// 创建参数设置表单并添加标签 gauge Size = new Gauge(“棋盘规格: ” + board Size + “ X ” + board Size, true, 10, board Size-10);//棋盘规格
form.append(gauge Size);
图4-4 棋盘尺寸的设计
在Gauge交互模式下可以为Gauge对象所在的表单对象绑定一个Item State Listener 事件监听器,并在监听器上捕捉 Gauge 对象的事件,当 Gauge 的值发生变化时就会触发事件。这里将根据 Gauge 的当前值改变标签,显示当前的棋盘大小。其代码如下:
public void item State Changed(Item item){
if(item == gauge Size)//当 Gauge 组件发生变化时
{
int bs = gauge Size.get Value()+ 10;//获取当前的 Gauge 值并计算棋盘大小(加10)
gauge Size.set Label(“棋盘规格: ” + bs + “ X ” + bs);//改变 Gauge 组件的标签
}
}
2、难度选择
游戏的难易程度根据计算机的智能级别来控制,创建及添加选项的方法和复选框一样,所不同的是在创建 Choice Group 对象时,类型设置为 1(单选)。对于单选框,set Selected Index 只能用来指定某个选项被选中,因此,布尔值 selected 的值必然为 true,否则便没有意义。
游戏共有 3 个难度级别,分别是:拜师学艺、棋行天下、谁与争锋(此游戏中并未作出区分),初始情况下为拜师学艺,该选项的索引值为 0。创建难度选择单选框的代码如下:
level = 1;//默认情况下的难度级别
choicelevel = new Choice Group(“电脑智能级别:”, 1);//创建难度级别选项组 choicelevel.append(“拜师学艺”, null);//难度 1 choicelevel.append(“棋行天下”, null);//难度 2 choicelevel.append(“谁与争锋”, null);//难度 3
choicelevel.set Selected Index(level-1 , true);//设置默认情况为难度 1,索引值为0
form.append(choicelevel);//将选项组添加到主表单中
游戏设置选项表单还有两个 Command 对象,分别用于玩家却热和取消,所以表单需要监听软键事件和组件事件:
public class Setting implements Command Listener, Item State Listener
3、棋手选择
选择先手和难度等级用 Choice Group 组件来实现。Choice Group 组件用来构造选择框,其构造函数如下:
Choice Group(String label, int choice Type)选择先手的选项框为选择组件,属性为复选框,标签名为空。创建好选择组件后,逐条添加选项元素。添加选项的方法如下:
int append(String string Part, Image image Part)该方法追加一个选项元素到选择组中,追加的选项为选择组中的最后一个元素,选择组的大小加 1。
对于多选类型的 Choice Group,还可以设置个别选项的选择状态。设置初始选择状态的方法如下:
void set Selected Index(int element Num, Boolean selected)这里创建一个只有一个选项元素的多选框用于玩家设置是否计算机先行,在默认情况下为true,创建完成多选框后将其添加到主表单中,代码如下:
Computer First = true;//在默认情况下为计算机先行 choice First = new Choice Group(null, 2);//创建复选框 choice First.append(“电脑先手”, null);//添加选项元素
choice First.set Selected Index(0, Computer First);//设置多选框的默认状态 form.append(choice First);//将多选框添加到主表单中 4.3.3 棋子类的实现
1、棋子的行列位置
此五子棋游戏是一个二维棋类游戏,所以定了了一个 Dot 类来表示棋子。由于移动设备的局限性,所以程序不在下每一步棋时生成一个对象,而是在游戏进行时,玩家或者计算机没下一步棋,在数组相应位置生成该棋子的对象,而将已经下过的棋子保存到数组中随时检索,这样可以避免过多棋子对象占用系统内存。Dot 类的 UML 图如图 4-5 所示:
图4-5棋子行列设计
Dot 类主要有两个变量 row 和 col,分别表示行和列:
public int row;//行
public int col;//列
2、检查越位
棋子的位置并非是任意的,玩家和计算机每走一步棋之前都要线检查该位置的合法性,即棋子是否在棋盘上,否则判为无效落子。检查是否越界的代码如下:
public boolean is In Board(int board Size)//判断棋子是否越界(超出棋盘){ return row >= 0 && row < board Size && col >= 0 && col < board Size;}
3、修改棋子位置
在创建好 Dot 对象后,Dot 类提供了两种方法更改棋子位置,包括设置行列位置和从已有棋子中复制参数。
public void set Row Col(int r, int c)//设置棋子位置
{
row = r;col = c;
}
public void copy From(Dot d)//复制已有的棋子
{
row = d.row;
col = d.col;
} 4.3.4 对战逻辑类的实现
1、建立数据结构
本程序以数组保存当前盘面的情况,每个位置可能有三种状态:空、玩家的落子、计算机的落子,分别用 0、1、2 来表示。代码如下:
public static int PLAYER_NONE = 0;//该位置为空
public static int PLAYER_COMPUTER = 1;//该位置有电脑的落子
public static int PLAYER_HUMAN = 2;//该位置有玩家的落子
棋盘在初始情况下为空,即棋子上没有任何棋子,在Gobang Logic类的构造函数中对棋盘进行初始化:
table = new int[board Size][board Size];//创建棋盘数组 for(int r = 0;r < board Size;r++){
for(int c = 0;c < board Size;c++)
table[r][c] = 0;//初始化盘面为空 }
除了记录棋盘上每个位置的落子状态外,程序还将对每种状态的位置个数进行统计,以对算法进行简化。对三种状态的统计存储在整型数组中,该数组为全局变量。
private int player Counter[];
在 Gobang Logic 类的构造函数中对三种状态的计数进行初始化,即棋盘上都是空、计算机的落子或玩家的落子状态的个数为 0,在数据结构上,把空也当做某一特殊玩家。
初始化代码如下:
player Counter = new int[3];//落子状态计数器
player Counter[0] = board Size * board Size;//整个棋盘都是空的状态 player Counter[1] = 0;//电脑落子0 player Counter[2] = 0;//玩家落子0
2、落子和悔棋
这里使用了一个 Dot 类棋子对象来记录最后一步棋的位置,当玩家下了一步棋后需要将上一步重新绘制,以消除旗子上的引导框。另外,还是用了堆栈来存储最近的几步落子,以便玩家悔棋。
private Dot last Dot;//棋子对象,存储最后一步落子 private Stack steps;//棋子对象的堆栈
最后一步棋子和棋子堆栈在 Gobang Logic 类的构造函数中进行初始化;
last Dot = new Dot(board Size);//创建棋子对象用来存储最后一步棋,初始化
位置为棋盘中央steps = new Stack();//堆栈对象,用来存储最近的几部棋在棋盘上落子的代码如下:
private void go At(int row, int col, int player)//电脑或人在 row、col 位置上走
{
int last Row = last Dot.row;//记录上一步的行坐标
int last Col = last Dot.col;//记录上一步的列坐标
table[row][col] = player;//当前位置填充玩家代码
last Dot.set Row Col(row, col);//将这一部设置为“最后一步”
game Canvas.repaint At(last Row, last Col);//重新绘制上一步(将引导框去掉)
game Canvas.repaint At(row, col);//绘制当前这步
switch(player)//统计双方落子数量
{
case 1:
player Counter[1]++;//电脑的步数
break;
case 2:
player Counter[2]++;//玩家的步数
break;
}
player Counter[0]--;//空白的个数
if(steps.size()> 10)//堆栈数量超过上限(10)
steps.remove Element At(0);//清除栈底
steps.push(new Dot(row, col));//将当前这步棋子压入堆栈
}
Stack(堆栈类)从 Vector 集成而来,它使用 push()方法进入堆栈,需要时使用 pop()方法从堆栈的顶部将其取出。悔棋动作由玩家做出,从数据结构来看,是同时后退两步(将最后两步棋位置的落子状态设置为空)。
Stack 类的 peek()方法将获取栈顶对象,但不移。悔棋代码如下: :
public boolean undo()//悔棋
{
if(steps.size()>= 3)
{
Dot d = new Dot();//创建棋子对象
d.copy From((Dot)steps.pop());//从堆栈弹出的棋子中复制行列位置坐标
table[d.row][d.col] = 0;//将该位置设置为空
game Canvas.repaint At(d.row, d.col);//在棋盘上重新绘制该位置
d.copy From((Dot)steps.pop());//从堆栈弹出的棋子中复制行列位置坐标
table[d.row][d.col] = 0;//将该位置设置为空
game Canvas.repaint At(d.row, d.col);//在棋盘上重新绘制该位置
d.copy From((Dot)steps.peek());//获取栈顶对象,作为最后一步棋存储 last Dot.copy From(d);
game Canvas.repaint At(d.row, d.col);//重新绘制最后一步(添加引导框)return true;//悔棋成功
}
else
{
return false;
//悔棋失败
}
} 4.4 本章小结
关键词:软件工程,学习情境,任务驱动
1 设计思路
课程标准是对学生在经过一段时间的学习后应该具备的能力和素质的描述,是对应掌握什么和能做什么的界定和表述,是规定某一课程的性质、目标、内容、实施建议的教学纲领性文件。高职学院的《软件工程》课程服务于软件技术专业、计算机应用技术专业等计算机相关专业,是一门综合性和实践性很强的专业核心课程,也是其他一些计算机相关专业的专业课。
新疆农业职业技术学院是国家首批示范性职业技术学院,长期以来,学院积极深化教育教学改革,发扬“艰苦奋斗、开拓创新、自强不息、追求卓越”的精神,努力探索和创新农业高等职业教育办学思路和人才培养模式,构筑“双赢”机制,走出了一条独具特色的人才培养之路,得到了教育部、农业部、自治区党委和人民政府的肯定以及社会各界的普遍赞誉,其软件技术、计算机应用技术、计算机网络技术等专业就是在这样的大环境下发展起来的。
学院的软件技术专业基于职业岗位工作特点、学生认知规律、教学规律,采用“项目导向、工学交替”人才培养模式,坚持工学结合,实现做中学、学中做,不断提高学生的整体综合能力。高职《软件工程》课程标准按照软件开发的流程,依据专业岗位工作任务所需选取教学内容,依据岗位工作流程设计课程链路,以任务驱动组织教学,教学效果受到学生、社会和学校的普遍好评。
2 课程教学目标
根据培养高技能应用型人才的需要,本课程应使学生了解软件项目开发和维护的一般过程,掌握软件开发的传统方法和最新方法,为更深入地学习和今后从事软件工程实践打下良好的基础。学生应熟练掌握软件与软件工程基本概念和基本知识、熟练掌握生存周期与软件开发模式、掌握结构化程序设计的编程思想、面向对象分析、设计与编码方法、掌握有关软件的评审、测试与维护,项目计划与项目管理方法、能用软件工程的方法参与软件项目的分析、设计、实现和维护。同时,通过本课程的学习,使学生充分理解软件开发的流程,并能通过软件工程的知识和原理提高对软件的理解能力和分析设计能力;培养学生具有勤奋好学、积极向上的精神;对于新知识具有持续学习的能力。
3 教学内容的选取
职业教育的课程教学内容来源于工作岗位的需求,本课程教学团队深入企业一线调研,经过分析和论证,确定了课程的教学内容。(表1)
4 教学组织与实施
4.1 运行范式。
经过调研和论证,该课程的教学运行范式确定为“项目导入、任务驱动”,是指教师根据当前项目的需求设计并提出一系列任务,针对提出的任务,采取启发式教学,引导学生学到完成任务的思路、方法、操作和结果,再通过学生的训练,进行总结提高,最终达到教学目标的一种教学方法。其中的项目要求具有技术典型、内容全面、思路科学、结合实际,这样的项目才能使学生从整体体会解决实际问题的过程性,然后再通过任务将项目完成各个环节串联起来。该方法有利于真正培养学生的创新能力、自学能力、实践能力,增强学生独立思考能力和协作精神。(图1)
4.2 学时分配(表2)。
虽然,我们对教育教学模式的探索和改革从未停止,但人才培养质量的最终效果会落实到课程的实施上。高职《软件工程》课程标准是课程实施的基本依据,但是,一门课程的实施效果还与教学理念、师资队伍、教学条件、教学方法等因素密切相关,只有多种因素的密切配合,才有希望取得最优的教学效果。
参考文献
[1]吴隆升.高职院校课程标准及其制定的必要性[J].长春教育学院学报, 2011, (4) .
[2]贾长云, 朱敏.软件工程课程教学探讨与软件工程初步介绍[J].中国职业教育, 2004, (12) .
[3]刘强, 陈越等.“软件工程”课程教学实施方案[J].中国大学教学, 2011, (2) .
[4]陈云芳, 孙力娟.软件工程专业课程体系研究[J].高等工程教育研究, 2009, (2) .
摘 要:高端软件设计人才不仅要有过硬的设计技能,还要有牢固的工程观、系统观和产品观。本文基于南京大学软件学院的教学实践,以软件系统的设计与构造为主线,提出了围绕软件设计设置和实施的软件工程专业关键课程方案。该方案强调在专业入门课程就开始培养学生的软件工程观念和系统观念,并一以贯之地教授学生在软件工程思想的指导下进行软件设计的能力。
关键词:软件工程;软件设计;教学改革;课程建设;教材建设
一、概述
作为国家战略性新兴产业,软件业急需一批领军型软件人才。教育部在2002年批准开办软件工程(以下简称SE)专业并设立国家示范性软件学院,2011年批准设立软件工程一级学科并把软件工程师培养列入了卓越工程师教育培养计划。至2013年,我国有425所高校开设软件工程专业,设点数、招生数及就业质量均进入前十。因此,研究与建设软件工程专业关键课程体系对于软件人才培养具有重要的现实意义和积极的推动作用。
国际上,IEEE和ACM共同制定了软件工程学科教程CCSE[1,2],给出了软件工程专业的教育知识体系,提出了组织和设计课程体系的若干建议,是公认的软件人才培养工作基础。CCSE推荐课程包括SE基础课程5门、CS中级课程3门和SE高级课程6门,并提出了SE优先的课程方案和CS过渡的课程方案。
但是,SE专业在教学实施中面临以下难题[3]:(1)传统计算机科学(以下简称CS)专业的软件工程课程如何合理过渡到SE基础课程和6门SE高级课程;(2)如何落实SE优先的教学理念,解决关键课程的教学实践与教学资源;(3)如何实施软件工程课程与程序设计类课程的融合教学。
具体来说,目前国际国内缺乏对SE关键课程的教学实践,SE优先的基础课程与部分高级课程属于全新构造,难觅教材和成熟的教学资源,从而导致SE专业教学在实施时面临很大困难,大多数学校只能因循计算机科学专业传统课程过渡。因此,贯彻SE优先的教育理念与落实系统化的SE专业教学体系成为摆在广大SE教育者面前的一个巨大挑战。针对这些问题,南京大学软件工程专业经过多年教学实践,以软件开发的核心工作——软件系统设计与构造为主线,提出了面向软件系统设计与构造的SE专业关键课程教学实施方案。
二、设置思路
CS传统课程按照知识领域安排,非常适合于培养研究性人才。软件产业则迫切需要能够综合运用各种工程技术知识解决具体问题的实用性人才。为此,南京大学SE专业教学体系从能力培养入手,强调持续培养学生的工程观、系统观和产品观;面向“软件系统设计与构造”主线,规划专业关键课程,实践并求精CCSE的SE优先课程设置方案;探索关键课程的教学内容与教学方法,建设相关教材与教学案例。
1.提出软件工程专业课程改革的基本策略。在专业教学早期开始培养学生工程观、系统观与产品观,引导学生持续以软件工程观的角度学习与体验软件系统分析、设计与构建的过程。在一年级开设软件工程课程,专业入门时就树立学生的工程观和系统观,将质量、成本、度量、折中、决策、纪律、规范等工程理念贯穿后续课程,通过反复强化来培养学生牢固的工程理念以及基于工程理念解决问题和进行开发的能力。
2.规划与实践SE优先的专业关键课程。遵循工程的集成与创新特征,面向“软件系统设计与构造”,按照软件系统规模由小及大的次序建立专业教学主线,即以小规模系统、中规模系统、中规模产品、大规模系统技术、应用领域来部署SE专业课程的展开。在单门课程中强调构建系统的全面知识融合教学,培养学生解决实际问题的综合能力。
3.探索适应培养卓越软件人才的教学方法。软件人才培养必须重视学生的工程实践能力、设计能力与创新能力培养,重视实验、实训、实习等培养过程,特别是理论教学与实践教学的完美融合。主要的教学方法包括:面向具体的软件系统构造项目开展综合性知识教学;加强课程教学案例与实践用例建设,实施理论、案例、实践相辅相成的教学;探索校企合作教学、面向问题教学、体验式教学、面向实际教学、研讨式教学、软件创新设计竞赛教学等适合卓越人才培养的新型教学方法。
三、课程体系框架
下图给出了南京大学SE专业的课程体系框架[4,5],其中左侧为重点建设的SE专业关键性基础课程,右侧为其他SE专业基础课程和高级课程,后者在教学上较为成熟,故不赘述。
面向“软件系统设计与构造”的SE专业关键课程共7门,分别为计算系统基础、软件工程与计算Ⅰ、软件工程与计算Ⅱ、软件工程与计算Ⅲ、软件需求工程、软件系统设计与体系结构、人机交互的软件工程方法,分别重点解决学生计算系统分层构建、个人级小规模软件系统设计与构造、小组级中小规模软件系统设计与构造、模拟团队级中规模软件产品设计与构建、大规模软件系统的需求技术、大规模软件系统的设计技术、交互式软件系统设计与评估技术等关键性能力培养。
南京大学软件工程专业课程体系结构图
这7门关键课程均围绕一个具体的软件系统教学案例,融合构建系统所需的多方面知识展开每门课程的教学。各课程都精心设计了一个教学讲解用的软件系统构建案例,并同步设计了一个培养学生工程能力的实践用例。课程围绕教学案例和实践用例的构建活动组织课程教学和实践教学。课程同时力图打破传统课程的技术藩篱,将程序设计、软件工程、交流与沟通、团队动力学、职业素质、过程管理、工程经济学等知识进行融合教学,在案例中引导学生使用软件工程的观念来观察、体验和实践计算系统软件的设计与构建过程,训练其软件系统设计与构造的综合能力。
四、课程描述
“计算系统基础”,以一个经典计算机指令集MIPS的简化版本DLX为线索,以C语言为载体,使初学者可以建立起完整的计算概念,了解经典计算系统的工作原理,理解计算系统自底向上、逐次构造的过程;理解结构化程序设计,能够利用自顶向下、逐步求精的方法完成小规模的结构化程序。具体教学内容包括:数据的机器级表示、数字逻辑、冯·诺伊曼模型、机器语言、汇编语言、输入和输出、Trap 机制和子例程、结构化程序设计和语言处理。endprint
“软件工程与计算Ⅰ”,在软件工程理念指导下,侧重于程序设计教学。以一个计算示例和实践用例的迭代式增量开发实践为线索,全面培养学生在个人开发级别的小规模软件系统构建能力,让学生初步体验软件工程方法与技术在系统开发中的关键作用。具体教学内容包括:程序设计基础、面向对象程序设计语言;OOA、OOD、调试与测试等软件工程知识;个人级别的软件开发活动管理、个人级别的软件职业知识。
“软件工程与计算Ⅱ”,以经典软件工程方法与技术为主线,软件设计与构造知识为教学重点,软件系统构建实例(计算系统示例与学生实践用例)为切入点,培养学生基于瀑布模型的、简单小组开发级别的、中小规模软件系统构建能力。具体教学内容包括:软件工程历史、软件职业知识;适用于中小规模软件产品开发的软件工程方法、原则与实践;软件工程方法指导下的程序设计原则与实践;小组级别的简单软件开发活动管理;包括代码和重要文档在内的关键软件开发制品。
“软件工程与计算Ⅲ”,以螺旋模型和团队实践为特征,通过开发一个中等规模软件产品的方式,培养学生对程序设计和软件工程方法的实际运用能力,同时强化学生的职业技能和项目管理能力。将学生组织成8人左右的团队,按照6个阶段(即项目启动阶段、第一循环、第二循环、第三循环、第四循环、项目部署阶段)合作完成一个具有一定复杂度的具体项目。在项目完成过程中,涉及需求、设计、实现和质量保障,强调团队协作、文档写作、工具使用、陈述等能力,并在软件团队中对软件开发进行管理。
“软件需求工程”,以需求工程技术、软件经济学和迭代过程为特征,结合工业界实例综合分析,培养学生构建大规模软件系统所需要的需求获取、分析与建模能力,试图让学生把握需求工程工作给后继软件项目工作带来的影响。具体教学内容包括:需求工程基础、需求获取方法与技术、需求分析方法、需求分析模型与建模技术、需求管理与需求工程过程知识、软件工程经济学等。
“软件系统设计与体系结构”,以软件设计、体系结构、可复用软件过程为特征,结合复杂工程案例及其重构,培养学生构建大规模软件系统所需要的综合设计技术能力。具体教学内容包括:软件设计的要素、软件设计的支持与评价、软件设计方法、体系结构设计、详细设计、基于中间件的设计、基于复用的设计和设计演化。
“人机交互的软件工程方法”,以用户为中心的设计与软件再工程为特征,培养学生交互式产品开发的软件分析、设计和评估技术。具体教学内容包括:可用性工程、人机交互界面的经典模型、人机交互的需求工程方法、人机交互的设计方法以及基于行为观测与眼动分析的交互评估技术等。
五、教学方法
软件人才培养需要重视教学方法改革,面向软件系统设计与构造的SE专业采用了一系列新型教学方法。
面向问题教学要求各课程都以工程问题开始,并依照工程问题的解决过程和活动来组织教学,这既体现了多种知识的融合运用,又培养了学生的问题解决能力。体验式教学要求各课程在实验设计时必须考虑模拟现实环境的不确定性因素,让学生体验真实的开发氛围,这既能培养他们综合运用各种知识与方法解决问题的能力,又能重点训练他们的折中、决策、沟通等非技术能力。面向实际教学要求各课程在讲授软件开发方法与技术时,要结合实践调查数据说明企业对不同方法、技术的选择与权衡情况以及应用效果,要突出企业界的主流方法与技术,遵循企业界的行业标准与规范,这既能让学生更深入地理解方法与技术,又能开拓他们的视野。研讨式教学要求各课程针对教学难点和重点,给出启发式问题,让学生自行收集资料,研讨解决,这既培养了学生的问题解决能力,又培养了他们的创新能力。基础课程结合软件创新设计竞赛教学鼓励低年级学生在导师指导下,结合课程教学内容,自由选题,参加软件创新设计竞赛,鼓励学生创新。部分高级课程采取实训实习后回顾教学,通过理论教学考试和实训实习后再回顾总结报告综合评定分数,促使学生学习理论、实践体验、再总结提高,以提高他们的工程认知能力与创新能力。还有部分高级课程采取校企联合设计课程、联合实施教学的校企合作教学。
这些教学方法可以培养学生牢固的工程观念、综合运用设计技术进行创新以解决复杂工程问题的能力、基本的职业素质与交流沟通团队组织能力以及良好的开发过程驾驭能力等。
面向软件系统设计与构造的SE专业关键课程建设秉承教材系列化、案例行业化、实践系统化、资源公开化的原则,围绕教材、案例和实践,打造了软件工程专业课程精品教学资源。多门课程入选国家精品课程,出版系列教材,建设教学案例和学生实验教学用例,建设课程教学资源示范网站,提供丰富的教学资源(课件、教学与实践案例、实验设计、教学视频),可供我国软件工程专业教育者参考。
参考文献:
[1] ACM/IEEE Joint Task Force on Computing Curricula[EB/OL]. Software Engineering 2004, Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering, http://sites.computer.org/ccse/.
[2] 骆斌,臧斌宇,丁二玉. 软件工程专业教学知识体系的分析、重构与求精[J]. 计算机教育,2010(23):2-8.
[3] 刘强,陈越,骆斌等. “软件工程”课程教学实施方案[J]. 中国大学教学,2011(2).
[4] 骆斌,葛季栋,丁二玉等. 软件工程专业课程体系的研究与创新实践[J]. 计算机教育,2010(23):9-13.
[5] Eryu Ding, Bin Luo, Daliang Zhang, etal. Research and Practice on Software Engineering Curriculum NJU-SEC2006, CSEE&T2011[R]. Proceedings of 24th IEEE-CS Conference on Software Engineering Education and Training.
1.个人通讯录管理系统
要求:增加记录、删除记录、显示所有记录、查询记录、退出。通讯录记录信息包括:姓名,电话,email等。(其中,用户输入正确的用户名和密码才能看到自己的通讯录信息)
2.图书销售系统 要求:系统可以:
显示每本书的详细信息
显示购物车和顾客选购的图书信息 增加新购买的新书
对定单的修改、确认、提交等 图书销售数量的排行
3.企业办公自动化管理系统(企业客户管理)
要求:针对企业常用的功能设计一个普遍适用的企业办公自动化管理系统,包括考勤管理,客户管理,每天的工作管理,个人信息修改,权限管理,注销等功能。
4.ATM柜员机模拟程序
要求:当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行(规则可以按照实际系统做需求):
查询余额:初始余额为10000元
ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
ATM存款:不能出现负存款。修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
5.火车订票系统
要求:可输入、添加、删除及修改列车信息,并能实现查询、订票、退票等功能。此系统还应能够打出取票通知和帐单,以保证能使每个旅客在出发的前一天凭取票通知和帐单交款取票。
6.超市收银系统(不考虑条码处理部分)
要求:接收收银台(客户端)的信息,经服务器处理后,把结果返回到收银台。即:客户端由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等,然后把信息提交服务器。由服务器从数据库中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次购物满200员,可为其发放一张会员卡,以后在该商场购物可向9折优惠。
7.教师工资管理系统: 其中包括:基本信息管理,考勤信息管理,加班信息管理,工资信息管理,工种工资参数设置和年终奖生成几大模块。本项目数据库设计针对不同角色的用户需求,设计了三种角色.其中包括超级管理员,系统管理员和教师用户.帐户信息
不同的登录用户有对应的用户角色,登录用户名和登录密码,用户角色针对不同的用户群,而登录名则是帐户信息全局唯一的.用户基本信息
每个用户有对应的详细信息,包括:类别编号,类别名称,用户类型,部门编号,职称编号,级别编号,性别,地址,工作时间,出行日期,手机,家庭电话,办公室电话,政治面貌和教育程度等.教师部门信息
教师部门具有全局唯一的部门编号和部门名称.教师工资信息参数设置
教师工资工种编号,工资名称和工资金额.其中工种编号全局唯一.教师工资信息
教师工资包括教师编号,教师基本工资编号,教师职称工资编号,教师级别工资编号,教师工龄工资编号和教师津贴工资编号.8.图书馆管理系统
目的:方便图书馆对书籍借阅的管理
主要功能:学生基本信息查询,书籍借阅管理, 书籍管理 图书管理系统主要有三种角色,分别是读者、图书、工作人员.主要分成五个功能模块:图书管理, 图书流通管理, 读者管理, 统计查询, 系统管理.9.简易办公系统
(1)收发文管理:
对收到的公文进行登记,分类编号,(学校主要发文部门分为:教务处、财务处、学生处、人事处、保卫处、工会以及其他),并形成文件主要内容关键字,使收文能够按照关键字、时间和部门查询;对发文进行登记,并形成文件主要内容关键字,使发文能够按照关键字、时间和部门查询
(2)会议管理:
对所管理的2个会议室进行自动化管理,即由申请部门提交申请,然后统一安排会议室以及各种会议资源(如投影仪、计算机、桌子、凳子等),能形成会议资源使用通知单送达申请部门,主管领导随时查询会议室使用情况(管理者直接负责管理)。能够按照申请者的要求自动生成会议通知单,由办公室负责通知发放。能够形成会议纪要,存档并送到需要的部门(由申请者提供的信息决定)
10.选课管理系统: 主要由以下几个模块构成: 登陆:学生依照学生姓名,学号,密码等基本信息登陆 学生选课:列出所有可选课程供学生选择
课程相关信息查询:所设课程名称,教师,教材,学分,学时等信息 成绩查询:查询该门课成绩
选课方案建议:根据学生专业提供建议
信息修改:学生基础信息修改,学生选课修改 打印功能:打印所选课程信息
11.学校教材定购系统
系统简介:本系统可以细化为两个子系统:销售系统和采购系统
销售系统的主要工作过程为:首先由教师或学生提交购书单,经教材发行人员审核是有效购书单后,开发票,登记并返给教师或学生领书单,教师或学生可以到书库领书.采购系统的主要工作过程为:若是教材脱销,则登记缺书,发缺书单给书库采购人员;一旦新书入库后,即发进书通知给教材发行人员.12、音像租赁管理系统的开发与实现
目的:通过资料收集,了解音像租赁连锁店的基本业务需求,完成系统需求分析和概要设计,完成一个简单的光盘租赁管理系统的开发。任务:
音像租赁连锁店的基本业务需求,完成需求分析报告; 利用Java、C++或C#编写一个基本功能的光盘租赁管理系统,包括客户信息管理、音像资料管理、音像检索、业务统计等;
13、学生综合信息管理信息系统的设计与实现
目的:通过实际编写一个学生综合信息管理软件,将所学多门课程的技能、技巧加以综合运用,达到较大规模软件独立设计与开发的能力。任务:
软件可以对学院大学生综合信息(姓名、学号、成绩、籍贯、家庭所在地、特长、宿舍号等)进行管理(录入、删除、修改)、统计、分析(排序)、查询与打印
课程设计报告要求涵盖需求分析、概要设计、详细设计的主要内容,包括系统功能定义、模块划分、对象设计与实现的技术细节。
14、家庭财务管理信息系统设计与开发
目的:通过实际编写一个家庭财务管理软件,将所学多门课程的技能、技巧加以综合运用,达到较大规模软件独立设计与开发的能力。任务:
软件能够对家庭的收入、支出进行分类统计,用户可以自定义收入、指出的类别,自定义分类查询和统计的条件。系统可以按照用户定义自动生成统计报表(月报、季报、年报)。通过财务分析,对家庭收支提出改进建议;
课程设计报告要求涵盖需求分析、概要设计、详细设计的主要内容,包括系统功能定义、模块划分、对象设计与实现的技术细节。
15、文化用品库存管理信息系统的设计与实现
目的:完成一个商品库存管理系统的简单业务流程分析,在此基础上,开发一个库存管理系统,掌握应用的开发。任务:
通过资料检索与整理,分析文化用品库存管理系统的基本功能; 完成软件开发和文档的编写。
16、大学生运动会运动成绩管理及统计分析系统实现
目的:通过本题目的设计,深入体会软件工程需求分析、概要设计、详细设计等主要环节,掌握面向对象程序设计的基本方法、训练编写一个基本的GUI应用程序。任务:
完成系统的需求分析和功能设计;
完成运动成绩统计、分析算法和模型的设计;
本课程属专业必修课,是一门实践性较强的计算机类课程,授课对象为计算机专业及相关专业的本科生。本课程是对软件工程课程所述内容的进一步深化与具体应用,通过启发式教学和大量实例的练习,引导学生完成不同类型系统的分析与设计工作,培养学生关于软件工程理论的实际运用能力、软件开发实践动手与文档编写及组织管理能力,同时培养和提高学生在软件开发过程中的团队协作精神。
在课程设计过程中必须完成以下一些环节:
1、任务布置与说明,备有多个题目供学生选择。
2、学生自主分组,并展开软件项目的选题与论证,要求提交分组项目选题和组织分工。
3、进行可行性研究,编写可行性分析报告和项目开发计划,并进行审查。
4、获取需求,编写软件需求规格说明书,并进行审查。
5、进行系统分析和设计,编写软件分析设计报告,并进行审查。
6、通过实现系统主要界面来模拟软件实现,并进行审查。
7、编写软件测试计划,编写软件测试分析报告,并进行审查。
8、编写用户使用说明书,并进行审查。
可供选择的课程设计方案:
1、图书馆图书预定系统的设计与实现
功能如下:(1)由供书部门提供书目给订购组;(2)订书组从各单位取得要订的书目;(3)根据供书目录和订书书目产生订书文档留底;(4)将订书信息(包括数目,数量等)反馈给供书单位;(5)将未订书目通知订书者;(6)对于重复订购的书目由系统自动检查,并把结果反馈给订书者。
2、网络考试系统的设计与实现
要求基于B/S模式来构建整个网络考试系统,整个系统拟由试题库管理子系统、学籍管理子系统、成绩管理子系统、网络考场四大模块组成。系统用户端划分为学生端、教师端和管理员端,通过数据库操作权限设定等机制来保证系统及相关数据的安全性。
3、网上购物系统的设计与实现
着重研究、设计与实现用户管理、目录管理、信息录入管理、定单管理、浏览和查找、购物结帐等功能。
(1)会员注册、登录与管理模块,包括新会员注册、会员身份验证、会员身份注销和预定制商品。
(2)商品陈列上架模块,实现商店所有商品的分类上架,供用户浏览选择。(3)为客户提供各个商品信息细节展示模块。
(4)为客户提供所选择商品的浏览、退货等管理模块。(5)购物车模块,需要完成用户选购商品,购物订单生成功能。
4、病员监护系统的设计与实现 I.问题概述
本例为医院特级护理病房的病员监视系统。1)在每一病床旁有一个监护器。
2)在病员身上附着各种传感器,监测各种生理参数,诸如血压、呼吸、体温等,信号被送到监护器。
3)监护器带有输入键盘,用以输入病员的病号的病历号、各种监测的生理因素的安全范围值(上下限值),以及监测频率定期(监测周期)等。
4)各监测部件与中心计算机相连,后者按指定的监测频率定期地对监视器进行检查。5)检查所得到的数据记录在每个病员的记录文件上。
6)如果发现病员的生理因数超出安全范围时,在护理室有各病员的各种报警信号(灯光)出现。
7)每个监视器有一开关,用来控制监测工作。
8)本例中假设监视255个病员,每人设定4个因素。监视周期可从秒到小时变化,对每一病员进行24小时监视。
9)安全范围为十进制数值,内部表示为浮点数。病历号为9位整数。II.需要设计实时系统。
首先要确定按适当的频率监测病员的办法:一种是用中断的方法,在每个监测器内设置一个定时器;另一种是对各病员进行巡回监视。
5、学籍管理系统的设计与实现
学生学籍管理系统由三部分组成,分别是学生档案管理模块、学生成绩管理模块、学生成绩查询模块。学生档案管理模块主要是对学生档案(如基本资料、学习情况、学籍变动、备注等)进行管理,本模块又分为添加学生档案、查询学生档案、修改/删除学生档案、打印学生档案、数据库管理五个子模块。学生成绩管理模块主要是由教师对学生成绩进行管理,本模块又分为添加学生、学生管理、成绩添加、成绩管理、数据库管理等子模块。学生成绩查询模块是指学生通过输入自己的姓名和密码登陆成绩查询系统,便可查询各个科目的考试成绩,同时也可以进行密码修改。要求采用B/S结构,可以对不同角色进行权限管理。
6、内容管理系统的设计与实现
为了让用户能够实现模块共享,并考虑到安全性,需要开发一个平台展示模块的相关信息,并实现用户申请、模块的开发者上传、管理员审核等功能。
该平台需要完成的功能为:每个用户可以对模块的相关信息进行浏览,查找,若需要下载某个模块,可向管理员提出申请;模块的开发者可以上传模块的相关信息;管理员对用户的申请进行审核。
具体需求如下:
用户可以对模块的相关信息进行浏览并申请使用某些模块:
进行注册、登录;
能够对模块的相关信息进行浏览;
可按标题、内容、作者、时间、分类等方式进行查找;
将想要下载使用的模块记录下来,待浏览完毕后形成申请单,提交给管理员。模块开发者能够将自己制作的模块的相关信息进行上传:
将模块的标题、图片、作者、类别、日期、内容等信息进行上传。管理员进行管理:
对新注册的用户信息进行统计察看;
对用户的关于模块使用的申请信息进行统计审核; 对开发者上传的模块信息进行统计察看; 对已经批准并提供模块下载的用户信息进行统计察看。
7、教学网站的设计与实现
网站主要面向三类人:老师、学生、管理员,包括一个BBS。三类人权限各不相同,老师可以布置作业、修改作业、登记成绩;学生则可以通过这个网站看老师的通知、做作业、利用丰富的资源等等;管理员则主要做后台的一些修改操作; BBS模块主要用于师生之间、学生之间的交流。
学生端的功能包括:主页、登入、作业模块、查询模块、个人设置、交流、资料下载、BBS;教师端的功能包括:主页、登入、查询、通知管理、作业管理、上机管理、成绩管理、收信箱、BBS、个人设置;管理员端包括:主页、登入、数据初始化、学生管理、教师管理、BBS管理、修改个人信息。
课程设计评分标准:
1、按照参考的范例,完成规定的文档。
2、2-3人一组,完成同一文档的学生成绩相同。
3、行文流畅,格式标点正确。
4、插图必须是矢量图。
5、涉及UML的内容资料必须完整。
6、文档必须真实反映分析、设计、实现和测试的内容。
1.1 系统简述
学院将举行庆元旦暨迎新春联欢晚会,其中有抽奖活动,需要一个抽奖程序。首先将班级同学分发抽奖券,奖券号码与学号、姓名绑定,联欢会上由抽奖活动主持人输入奖票号码范围,并指定获奖等级后,在给定的号码范围内产生一个随机号码,作为该获奖等级的一个中奖号码。如果产生的中奖号码与已产生的中奖号码重复,则给出明确的提示“无效”(即不允许一个奖票重复获奖)。可随时显示或打印抽奖结果。1.2 软件设计目标 1.2.
1、程序功能:
1.输入奖票号码范围:输入最小奖票号码,输入最大奖票号码。
2.产生中奖号码:产生一个界于最小奖票号和最大奖票号之间的数。并且判定该数是 否为一个有效的中奖号。
3.显示中奖信息:显示到目前为止所有抽出的中奖奖票号码、姓名、学号和中奖等级。4.更新中奖记录:将中奖信息写入表格文件。5.查看中奖记录:可随时查看中奖记录的内容。1.2.2非功能性需求:
从安全性、美观性等角度入手。
任务
2.1 文档类
2.1.
1、可行性报告 2.1.
2、需求说明书 2.2 建模类
2.2.1 用例图 2.2.2 时序图 2.2.3 类图 2.3 设计类
2.3.1 软件平台设计 2.3.2 程序流程图设计 2.3.3 界面设计 2.4 源程序 2.5测试记录
附录:文档规格
系统可行性分析
可行性研究主要分析要开发的系统是否具有必要性、可能性,从技术上、经济上、操作上、社会各个方面对所开发系统进行分析和研究,减少可能发生的投资失误概率,确保开发的顺利完成。在最短时间内用最低的成本解决尽量多的问题是可行性分析的意义所在。
1.技术可行性
在技术上主要是分析当前所用软件以及开发人员所使用的技术对系统开发是否可行,硬件、软件等等能不能满足开发人员的需要。该系统为B/S模式,采用J2EE体系和JAVA技术开发,开发平台是Eclipse,使用SQL Server数据库,相关的技术都已相当成熟。同时,计算机硬件技术也越来越先进,且性价比高,可以满足系统的需求。所以系统在技术上完全可行。
2.经济可行性
在经济可行性方面,主要考虑使用成本、开发成本、回报三方面的因素。首先,开发成本主要使用 Windows 操作系统,Eclipse,在数据库方面主要使用 SQL Server进行数据操作,这些软件是开发系统所需成本。开发成员主要一人负责。回报主要是系统开发成功,可以实现项目管理系统的所有功能,通过项目管系统的应用,企业可以提高员工的工作效率和项目完成的效率,从而为企业带来经济效益。因而在经济上完全可行。
3.操作可行性
操作可行性重点了解系统的操作流程、运行方式在组织内部是否可以有效,顺利实施等问题。计算机技术、网络技术的发展,使得人们的日常办公和生活的诸多方面都使用计算机办公,这已经成为现代办公的必备技能。此外,人们对于操作对于工作是否简洁而方便越来越重视,本系统的设计就能够做到这一点,它很好地解决了人工操作的不便,在实践上具备了可行性。本系统的设计明晰,用户界面良好,简洁的操作,有完善的异常处理机制和验证提示信息,因此操作方面可行。
4.社会可行性
首先,本系统从功能模块的提出到各个界面的设计再到每个功能模块的开发与实现到后期的测试过程,全部由本人独立完成,开发过程参考,借鉴过网上资料和所学课程,因此不存在侵权的法律问题。其次,在开发过程中,各部门配合将现有的人员,项目等相关信息导入到系统中。完成这些工作后,项目管理会变得更加简便。最后,系统的大部分功能模块都是根据需求分析提出的要求完成的,并且在开发过程中对需求分析的介绍进行了深入的研究,因此,已经熟悉业务流程。因此本系统在社会方面也是可行的。
所以,系统在技术上、经济上操作上、社会方面都是可行的,系统的设计和开发可以顺利进行。
需求分析
系统采用面向对象的分析方法,从管理员、教师用户、学生用户对系统的需求分析来建立本系统的需求。
具体定义如下:(1)用户管理
① 用户注册:注册功能相当于系统的入口,注册功能用户体验的良好性直接影响的用户的使用心理,注册功能简单、明快便于操作,会大大吸引用户对成为系统会员的兴趣。同时,友好型的使用体验也促使用户乐于分享。② 登录:验证用户所提供的登录信息,从而判断是否准许该用户进入系统。
③ 验证信息主要有:账号或密码是否为空、验证码正确与否、库中是否存在此用户、账号和密码匹配与否。
可以对用户相关信息预览,对多余的用户进行删除等管理操作。(2)教师管理
教师登录后台,验证教师提供的登录信息正确与否。
验证信息主要有:账号或密码是否为空、验证码正确与否、库中是否存在此教师用户、教师名和密码是否匹配。
管理员具有对教师相关信息的预览,教师信息的维护等操作。(3)试卷管理
教师具有相关信息的预览,录入新的试卷,修改试卷,删除试卷等功能。(4)考试管理
随着教育体制的改革和高校扩招的推进,我国普通高校的学生人数日益增长。据统计,我国普通高等教育在学人数位居世界第一,高等教育毛入学率达到22%。由于在校人数的激增,各高校在学校的各项管理上都会作出一些调整,以便更好地管理学生。而作为各高校的重点管理项目系统——课程管理系统,则更需要作出应对措施,以便达到很好的管理效果。传统的人工课程管理方式已不能适应这样的大环境。本文研究的课程管理系统,从以下几点对普通的人工课程管理方式作出了改进,达到用网络系统进行管理的效果,使学校能更好地进行课程管理:
(1)建立健全的选课制度;
(2)实现学生与教师在线交流;
(3)在校学生选课更具弹性。
课程管理系统就是为课程建立网站,老师可以在网站上发布课程大纲、教学计划以及每堂课的教学内容,并布置作业、批改作业、公布学生成绩等。
课程管理系统的应用,将会大大提高教务管理的工作效率。本文将重点探讨如何在信息查询、数据维护及统计等方面体现自身特色,采用安全可靠的C/S开发模式实现学生课程信息管理的信息化、规范化、科学化。本系统还分析了系统在高校管理系统应用后的系统兼容性问题,最终提出“数据仓库+数据挖掘+OLAP”组成的DSS解决方案。在开发过程中,系统开发使用目前最为流行的MVC设计模式和基于MVC的WEB应用开发框架。本系统主要分为评教管理、选课管理和考试管理三大部分,将功能需求与非功能需求结合,同时考虑系统的综合性能。在系统框架设计上最大程度减少系统开发和维护的工作量,大大提高了工作效率。
二、系统需求分析
软件工程课程管理系统的功能需求是根据部分高校软件工程专业学生的课程管理的实际情况分析的,由于课程管理工作较为繁琐、量大,且是学生管理中重要的一部分。学校为了使学生能够更好地完成课业,给学生创造了自主学习的条件:让学生自主安排上课时间,选择自己喜欢的老师,同时也可以选择与自己专业无关的课程。在这些基本课程管理的基础上,作为软件工程专业特有的课程特点,该课程管理系统也为学生提供了工作室的选择。
1. 系统功能概述
软件工程课程管理系统主要为了提高课程管理水平而设计。根据用户类型将本系统划分为选课管理、文件管理、成绩管理三个子系统。
(1)选课管理。在学生进行评教之后,系统为其自动开通选课功能。根据学校提供的课程信息,学生根据个人情况自主安排上课时间、授课老师以及课程,但选课时必须遵循以下规定:每个学期选择的课程总学分不能超过30;同一课程不能重复选择;两个或两个以上的课程不能有时间冲突;软件工程专业的学生在大三时要进入工作室,因此要进行工作室选择。
(2)文件管理。选课成功后,开始授课。由于大学课程成绩由平时成绩和期末考试共同考核而得,所以对于平时成绩的管理也很重要,平时成绩的重要部分就是老师布置的课堂作业的评定。老师将课件上传,学生下载课件温习课堂内容,课堂作业布置后,学生将作业上传,老师在线打分,以此分数作为最终成绩的审核指标。
(3)成绩管理。期末时,老师公布成绩,最终成绩是根据期末考试成绩和平时成绩两项按比例综合给出。当学生查询自己的成绩,发现有科目未达到及格分数时,就应该在规定时间进行补考登记。同时成绩管理还包括计算各专业、各班级成绩及格率和优秀率,为学生的各项评选提供有力依据。
2. 系统业务流程分析
根据软件工程课程管理工作的流程,该项目可以分选课管理、文件管理、成绩管理三大模块。系统分成为用户端和管理端,用户端主要提供学生选课的相关信息,管理端主要是教务处公布课程信息以供学生参考选课,在学生提交成绩复查时进行成绩审核。
3. 系统数据流分析
在具体分析了系统的各个业务流程后,设计系统的数据流图明确系统中数据的具体流向。对于该系统来说,学生、教室和教务处是系统的外部实体,选课管理、文件管理、成绩管理是系统对数据的主要处理工程。数据从实体流出,经过加工处理后流入实体中,系统同时对处理好的数据进行储存。
图1是对选课管理业务中学生选择课程的详细数据流图,图中学生进行评教,为上学期选择课程的老师打分;评教成功后,参考教务处公布的课程信息进行选课,选择的课程不能有时间冲突,不能超过每学期要求的最高学分;选择好课程后,学生的选课信息提交到教务处,形成学生个人课程表。
三、软件工程专业课程管理系统设计
1. 系统总体结构
该系统采用B/S设计结构以实现学生课程信息管理的信息化、规范化、科学化。
(1)按系统功能分。该系统分为选课管理、文件管理、成绩管理三大管理模块。
(2)按用户对象分。该系统分为学生申请查询系统和院校管理系统两个部分。
2. 系统功能模块设计
软件工程课程管理系统主要分为三大模块,即选课管理模块、文件管理模块、成绩管理模块。选课管理模块主要是实现学生选课功能,在此模块中,先进行学生评教,评教成功后,系统自动开通选课功能;再由学生根据教务处提供的课程信息开始选课,选择的课程全部符合规定后,选课成功;同时,学生在大三时,可以进行工作室的选择。
文件管理模块主要是教师与学生通过该系统进行交流的模块。课程开始后,教师将该课程的课件上传,方便学生进行下载。当教师需要对学生进行考核时可以上传作业,学生下载完成后再提交给教师。
成绩管理模块主要是对学生的成绩进行综合评定。教师将学生的平时成绩和考试成绩公布,统计最终成绩。若成绩低于60分,学生应申请复查;若复查结果无误,该学生就要在相应的时间进行补考登记。
3.数据库设计
分析系统的功能并结合各个实体之间的关系得出系统总体的E-R图,如图2所示。
在系统中,教务处公布一份完整的课程信息,教务处和课程信息是一对一的关系;所有在校学生都可以查询这份课程信息,学生和课程信息是多对一的关系;所有在校教师也可以查看这份课程信息,教师和课程信息也是多对一的关系;每个学生只能选择一份选课信息,学生和选课信息是一对一的关系;教务处将所有学生的选课信息进行备份,教务处和选课信息是一对多的关系;每个教师公布所教授学生的成绩信息,教师和成绩情况是一对多的关系;每个学生只能查到自己对应的成绩信息,学生和成绩情况是一对一的关系;当学生需要提交复查申请时,一个学生只能提交一份复查申请,学生和复查申请是一对一的关系;教务处接受复查申请,教务处和复查申请是一对多的关系;教务处核对复查结果,教务处和复查结果是一对多的关系;学生只能查看自己的复查结果,学生和复查结果是一对一的关系。
四、结论
本文就目前高校课程管理进行分析,然后从系统开发的角度,对软件工程课程管理系统开发的可行性及功能模块进行分析研究,系统包括三大模块,即选课管理、文件管理、成绩管理。本文分析了系统的业务流程以及系统的数据流,对系统功能模块进行设计,按照结构化的方法划分模块,对各个模块中的子系统划分功能,详细介绍了各个功能的作用,设计了系统的E-R图及数据表。系统采用B/S结构模式进行开发,集合了其分布性特点,随时随地进行业务处理,同时业务扩展简单方便。此系统仍有部分局限性,在设计中存在一些缺陷。系统在性能方面也需要很大的改进,在功能处理的时候系统的响应速度比较慢,但这些通过数据库优化和程序语言的版本升级可以得到较好的解决。
摘要:随着高等教育日渐被人们重视、高校招生计划日渐递增,我国普通高等教育在学人数位居世界第一,高等教育毛入学率达到22%。大学作为学生迈入社会之前的一个阶段,在每个学生的人生中是极其重要的一部分。在大学里学生主要学习的是知识,课程管理就显得尤其重要。本文以软件工程专业课程管理为背景,从系统开发的角度,对课程管理系统进行用户需求分析和系统设计。该系统着重分析了三个模块,即选课管理、文件管理、成绩管理。该系统采用B/S模式进行设计,在一定程度上减少了学校对于学生选课及成绩管理的工作量。
关键词:软件工程专业课程,信息管理系统,B/S模式
参考文献
[1]毕朝国,许建平,霍训根.基于B/S架构的教师课程管理系统的研究与设计[J].软件导刊,2011(3).
[2]张海藩.软件工程导论[M].北京:清华大学出版社,2003.
【关键词】软件工程;课程群;人才培养
1.引言
软件工程是一种融合计算机科学与技术、工程管理与科学以及数学等原理,并且把软件产品的开发与维护相关联的技术及其管理方法作为其核心内容,利用标准化的规范和指标优化软件开发整个生命周期的过程。软件工程借鉴传统工程化的原理和方法来提高软件开发的质量、降低软件的开发和维护成本,其思想是软件开发人员必须具备的技能和职业素养。传统的软件专业课程体系、形式单一的课程教学模式与市场对软件人才的需求还存在着较大的差距。目前地方高校的软件工程课程设置一般是在计算机专业教学计划的基础上适当地添加一些软件类课程,同时减少一些不相关的硬件课程;然而在教学改革中的人才培养方案中主要关注的是单独课程建设,事实上课程建设相对于整个软件工程课程体系是局部的,于是在教学中一般是对单门课程的教学内容及其体系结构作适当的调整和优化,对软件工程课程体系的系统化、科学化、模块化以及广泛性考虑不充分,有针对性的教学改革也不够。在计算机教学过程中,计算机教师要重点考虑人才培养目标和市场对软件人才的需要,从而形成一套适合于软件专业的课程群体系,以课程群的方式提高软件专业的教育教学质量。
2.软件工程课程体系存在的问题
2.1 人才培养目标定位不合理
软件工程课程的人才培养目标应该以行业市场需求作为向导,使课程培养出来的学生能够真正在软件行业中发挥作用,应该依据人才培养目标重新确立软件课程的教学体系,设置教学的内容,教学内容的定制应该紧密结合行业的发展和需要。在注重软件工程思想的基本理论、方法与技术的基础上,强调软件管理的必要性和重要性,把软件过程控制与管理等方面的内容融合到常规的教学内容中,并增加必要的实践环节。通过选择合理课程体系的模式结构,技术线路对教学计划进行修订,从而构建科学、合理的人才培养方案。
2.2 课程内容需要调整
以广西某地方院校的计算机科学与技术专业(信息技术方向)为例,所开设的软件工程相关课程中的部分内容在逻辑上就存在许多重复现象。如《面向对象程序设计》、《面向对象方法》和《软件工程》的课程内容体现了面向对象的核心思想相关内容,主要体现的差别是前者重点突出面向对象语言相关的实现技术,后两门侧重于利用UML来描述面向对象的思想。面向对象技术与思想是该专业的理论基础内容,同时也是这三门课程重复的知识要点。《数据结构》、《面向对象程序设计》和《算法设计与分析》则重复的内容更加明显。除了语法等的重复,在算法理论方面也同样存在许多重复的内容。《软件工程》课程的总体思想和《信息系统分析与设计》课程较为类似;《软件工程》中的统一建模语言与《UML基础与ROSE建模》课程也有重复之处;《软件工程》中的软件测试部分的内容在《软件测试》课程中也有详细的论述。
目前软件工程课程群所设置的各门课程之间除了在内容方面重复外,在授课时间的安排上虽然在形式上表现出了一定的先后关系,但每门课程的教学大纲都相互独立,任不同课程的老师也各自依照课程大纲授课,造成了不利于学生对该专业知识的整体性、一致性和系统化地掌握。
2.3 课程体系需要建立
相对于计算机软件专业,软件工程课程是一门非常重要的专业课。培养目标必须以行业市场人才需求为导向,培养出来的人才要能够为软件行业的企业提供专业化的服务,适应企业发展的需求,促进企业的竞争力。为此,软件工程相关课程的教学内容应该不断更新教学内容,构建新的课程体系,使课程的培养目标更能适应软件行业需求的变化。如软件能力成熟度模型、软件项目管理、软件质量管理、软件风险管理、软件配置管理以及软件过程管理等应该作为课程教学的内容。同时,不断引入新的开发方法和技术,如基于UML面向对象的软件建模方法、软件度量方法、数据建模方法、软件测试方法、现代软件管理方法,以及开发工具如Rose、Visio、PowerDesigner等。这些知识内容必须建立一个科学的课程体系,以确立所需的课程内容。
3.软件工程课程群建设的原则
(1)课程群的建设应当以专业的培养目标为基本出发点,对软件工程系列课程进行较深入的分析,研究教师教与学生学的问题,坚持软件工程课程体系整体优化的原则。
(2)课程群的培养目的明确。每个群或模块至少由3门以上的课程组成,各课程教学内容不可重复,同时各个知识点间存按照逻辑顺序相对独立开设。课程群之间能够有机衔接,重点突出技能的培养,弱化课程的个性概念,呈现较科学的梯次关系,适合对学生的创新精神、专业技能以及实践动手能力的培养,实现应用型人才的培养与市场的需求无间隙的连接。
(3)课程群建设应该实现知识性同操作性相融合。通过课程群的建设虽然可以有效地实现并协调好相关课程间的联系,但必须在加大理论教学力度的同时,还必须加大实践教学的强度。在课程群建设的过程中必须依照科学性、实践性和可控性的宗旨,课程群的建设立足于软件整个课程群体,对课程群所涉及到的内容进行整合,使得课程之间的关系更加密切、逻辑性加强,整个知识体系具有层次性,知识点之间的切换相对科学,从而更好的组织教学。
4.软件工程课程群知识体系
根据教育部教学指导委员会对软件工程课程体系建设的要求,结合我校应用型人才培养办学理念,我校计算机软件方向的专家和教师在2013年暑假就人才培养方案进行了详细的调研与讨论,规划出一套符合地方应用型人才培养目标的软件人才培养建设标准。这套知识体系结构的基础依托于软件工程的行业思想,内容不仅仅包含软件工程建设的职业技能能力和实践能力,还融合了软件管理相关的管理学相关的知识内容,以及经济学等其它学科的知识。课程内容的安排顺序按照软件开发的过程进行开设,包含有软件项目的洽谈,软件的可行性分析,软件需求的获取与分析,软件系统的架构与设计,软件项目的具体实现,软件项目的测试,软件项目的维护等软件开发的所有环节。同时,为了实现对软件项目实施高效科学的管理,开设了软件项目管理、质量保证、过程控制、风险管理以及成本分析等知识点,并且在教学过程中,通过案例驱动的方式进行授课,使学生和老师都加强的理论学习和动手实践能力的培养,真正实现了“双赢”。每年学校还安排多位教师去企业去进行软件项目的实战培训,学生也可以在校内外实训基地进行实习,为教师和同学积累了实际工作经验以及团队合作的能力。图1所示为我校软件工程课程群知识体系结构。
图1 软件工程课程群知识体系结构
5.软件工程课程群课程体系建设
依据软件工程课程群建设的思路并且结合我校的实际情况,整个软件工程课程体系划分为四子个群:专业基础课程群、专业发展平台课程群、综合实践能力培养课程群、新技术新知识能力培养课程群。四个课程子群之间的相对独立、其关联性、整体性和应用性都体现最新的软件开发技术和方法,教师的课程内容及时更新,课程前后衔接好,在实现人才培养目标、改进学生的知识能力结构方面有比较大的突破。整个课程群体系结构如图2所示。
图2 软件工程课程群课程体系结构
6.结束语
地方院校的发展对地方的经济和社会的发展具有巨大的推进作用,以应用型人才培养目标的地方院校应当以服务地方为依托,不断的进行人才培养模式的探索与创新。而以课程群的建设方法优化软件工程课程体系对于地方院校软件人才培养模式的探索具有重要意义。本文在我校计算机科学与技术专业(信息技术方向)的教学基础上对软件工程课程体系的设计进行了较深入的分析,并建立了适合自己的一套软件人才培养模式,在教学过程中取得了一定的成效。同时,由于课程群的建设与实际操作还存在许多有待于探索和完善的问题,如教学方法的改革、课程群中“双师型”师资队伍的建设、合适的教材建设等。因此,只有在不断实践过程中、改革和创新培养模式,才能消除存在的问题,提高软件工程课程的教学质量。
参考文献
[1]吕会庆,张巍.软件工程专业课程群建设教学实践[J].计算机教育,2012(14):27-29.
[2]彭佳红,曹晓兰.程研软件工程专业课程体系与课程群研究[J].高等农业教育,2013(2):74-76.
[3]万臣,谢芳,胡泉.计算机专业程序设计课程群的建设与研究[J].合肥工业大学学报(社会科学版),2009,23(1):33-36.