收藏 分销(赏)

画图画板设计模式.docx

上传人:pc****0 文档编号:7200823 上传时间:2024-12-27 格式:DOCX 页数:37 大小:889.11KB 下载积分:10 金币
下载 相关 举报
画图画板设计模式.docx_第1页
第1页 / 共37页
画图画板设计模式.docx_第2页
第2页 / 共37页


点击查看更多>>
资源描述
长 沙 学 院 课程设计说明书 题目 设计模式课程设计 系(部) 数学与计算机科学系 专业(班级) 姓名 学号 指导教师 起止日期 课程设计任务书 课程名称:设计模式课程设计 设计题目:基于设计模式的绘图程序 已知技术参数和设计要求: 1. 问题描述(功能要求): 1.需求分析 该系统是一个画图程序,我们要用设计模式的思想来设计系统结构,然后实现基本图形的绘制功能。 1.1 设计模式要求 至少在其中运用 3 种模式,其中涉及到的模式有装饰模式、策略模式、桥梁模式三种。 1.2 画图基本要求 能实现基本图形的绘制功能 1.3 画图高级要求 实现图形的操作(如选取、移动、放大、缩小、改变颜色、改变线形等)和持久化(利用文件或利用数据库)。 1.4 参考界面 图1 参考效果图1 图2 参考效果图2 2. 运行环境要求: Windows操作系统; Eclipse 3. 技术要求: 给出至少3种设计模式,要求具体说明使用每种设计模式的动机,画出类图,并代码实现,然后评价该设计模式的优缺点。 设计工作量: 2周 工作计划: (1) 2013级软件工程 4课时:讲授 32课时:上机、调试。计算机系机房 4课时:答辩。计算机系机房。 指导教师签名:         日期:         教研室主任签名:        日期:         系主任签名:          日期:         长沙学院课程设计鉴定表 姓名 学号 专业 班级 设计题目 指导教师 指导教师意见: 评定等级: 教师签名: 日期: 答辩小组意见: 评定等级:     答辩小组长签名:     日期:     教研室意见: 教研室主任签名: 日期:   系(部)意见: 系主任签名:        日期:      说明 课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类; 目录 第1章 系统需求 8 1.1系统总需求 8 1.2 功能需求 8 第3章 系统设计 9 3.1系统总功能模块设计 9 3.2子功能模块设计 9 3.2.1构建基本图形 9 3.2.2装饰模式组合图形 10 3.2.3 桥接模式修饰图形颜色线条粗细 10 第4章 系统实现 11 4.1登陆界面 11 4.2简单工厂模式绘制基本图形 11 4.2.1装饰模式图形组合 13 4.2.2桥接模式改变粗细绘制图形 14 第5章 系统测试 15 5.1测试目的 15 5.2测试手段 15 5.3测试用例 15 5.3.1登陆界面测试 15 结论 16 参考文献 17 结束语 18 附录 19 第1章 系统需求 1.1系统总需求 该系统是一个画图程序,我们要用设计模式的思想来设计系统结构,然后实现基本图形的绘制功能 1.2 功能需求 1. 至少在其中运用 3 种模式,其中涉及到的模式有装饰模式、策略模式、桥梁模式三种。 2. 选择图形模块: 点击图形后,可以用画笔绘画出对应的图形。 选择装饰模式模块: 点击模式,根据两次按钮的不同选择可以在原有的图形上进行组合。 选择桥接模式模块: 点击模式后,根据所选择色体,笔的型号,进行新的图形绘制。 第3章 系统设计 3.1系统总功能模块设计 图3.1程序总架构 3.2子功能模块设计 3.2.1构建基本图形 功能:通过点击对应按钮,生成对应可控制大小的基本图形。 图.3.2简单工厂模式设计 3.2.2装饰模式组合图形 (1)功能:对基本图形进行组合。 (2)程序流程图:基本信息管理的程序流程图如下图所示: 图3.3 装饰组合模式设计 3.2.3 桥接模式修饰图形颜色线条粗细 功能:选择颜色与画笔粗细,重新绘制图片。 图3.4 桥接模式设计 第4章 系统实现 4.1登陆界面 本系统启动后直接显示登陆界面。如图4.1所示: 图4.1登陆界面 4.2简单工厂模式绘制基本图形 点击工厂模式中的按钮可以控制鼠标绘制所选图形。如图4.1所示: 图4.2绘制基本图形(三角形) 图4.3绘制基本图形(圆形) 图4.4绘制基本图形(矩形) 图4.5选择色彩绘绘制图形 4.2.1装饰模式图形组合 此模块让图形进行组合共有9种形式。如图4.6所示: 图4.6各种图形组合 4.2.2桥接模式改变粗细绘制图形 图4.7桥接模式绘制图形 第5章 系统测试 5.1测试目的 通过测试发现软件错误; 功能的完备性:检验程序功能是否达到用户预先制定的需求; 错误检查:检查程序潜在的错误,为软件可靠性与安全性的评估提供依据。 5.2测试手段 人工测试技术。 5.3测试用例 5.3.1登陆界面测试 如表5.1所示: 表5.1 班级学生成绩管理测试用例 班级学生成绩管理 序 号 测试子项 输入/动作 期望输出/相应 实际 情况 1 绘制基本图形 鼠标点击对应按钮 绘制对应基本图形 √ 2 绘制组合图形 鼠标点击对应按钮 绘制组合图形 √ 绘制桥接图形 鼠标点击对应按钮 绘制外观不同的新图形 √ 结论 绘图程序实现了图形的基本绘制功能,并在绘制的其中运用到了本学期所学的设计模式的知识,使得整个系统变得更具结构性,便于后期的功能扩展或其他。 参考文献 [1] 谭浩强编著,java程序设计[M],清华大学出版社,1991.7 [2] 姜仲秋编著,java程序设计[M],南京大学出版社,1998.1 [3] 刘瑞挺主编,计算机二级教程[M],南开大学出版社,1996.10 [4] 陈朔鹰编著,java程序设计基础教程[M],兵器工业出版社,1994.9 [5] 李虹主编,java程序设计,[M],南京大学出版社,2010.2 [1] 马石安、魏文平.面向对象程序设计教程[M].北京:清华大学出版社.2007.8 结束语 为期两周的实训结束了,在老师和同学的帮助下,我基本完成绘图程序系统的设计。我们按照系统工程软件设计的要求,从需求分析,概念设计,总体设计,详细设计,系统测试等各个步骤,分步完成系统的各项任务,实现了系统中的学生信息查询,学生信息更新,学生信息添加等模块的功能。 在这实训期间里我们的收获很多:巩固和加深了对JAVA的理解,提高了综合运用本课程所学知识的能力。使用窗体控件开发桌面程序。在Swing中使用控件可减少代码书写量加快开发速度。培养了我们查阅文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。 通过这次实训,我们也认识到在以后的学习当中注意:认真上好专业实验课,多在实践中锻炼自己。写程序的过程中要考虑周到,严密。在做设计的时候要有信心,有耐心,切勿浮躁。认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。 附录 界面: package 界面; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.MouseInfo; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JColorChooser; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.filechooser.FileNameExtensionFilter; import 简单工厂模式.*; import 装饰模式.*; import 桥接模式.*; public class MainFrame extends JFrame{ private JPanel downPanel = new JPanel(); private Color c=Color.black; int x = 0; int y = 0; int x1 = 0; int y1 = 0; String name; String name2; int flag=0; Conpotent con; pen pen; File[] selectedFiles = null; int fileIndex = 0; int width = 200; int height = 200; public MainFrame(){ initUI(); showFrame(); } // 初始化界面显示组件 private void initUI() { final JTextField jtfGrap = new JTextField("图形"); final JTextField jtfModi = new JTextField("装饰"); final JTextField jtfStra = new JTextField("桥接"); final JButton jbtColo = new JButton("颜色"); final JButton jbtTria = new JButton("三角形"); final JButton jbtRoun = new JButton("圆形"); final JButton jbtRect = new JButton("矩形"); final JButton jbtClea = new JButton("清空"); final JButton jbtMod1 = new JButton("三角形"); final JButton jbtMod2 = new JButton("圆形"); final JButton jbtMod3 = new JButton("矩形"); final JButton jbtMod4 = new JButton("可移动"); final JButton jbtStr1 = new JButton("大笔红"); final JButton jbtStr2 = new JButton("大笔绿"); final JButton jbtStr3 = new JButton("小笔红"); final JButton jbtStr4 = new JButton("小笔绿"); final JPanel jpPanel1 = new JPanel(); final JPanel jpPanel2 = new JPanel(); final JPanel jpPanel3 = new JPanel(); jbtColo.setBounds(115, 10, 90, 20); jbtColo.setForeground(new Color(153, 217, 234)); jbtColo.setContentAreaFilled(false); jbtColo.setFont(new Font("黑体", Font.BOLD, 14)); jtfGrap.setBounds(15, 5, 40, 30); jtfGrap.setFont(new Font("黑体", Font.BOLD, 14)); jtfGrap.setBorder(null); jtfGrap.setEditable(false); jtfGrap.setOpaque(false); jbtTria.setBounds(15, 35, 90, 40); jbtTria.setForeground(new Color(153, 217, 234)); jbtTria.setContentAreaFilled(false); jbtTria.setFont(new Font("黑体", Font.BOLD, 14)); jbtRoun.setBounds(115, 35, 90, 40); jbtRoun.setForeground(new Color(153, 217, 234)); jbtRoun.setContentAreaFilled(false); jbtRoun.setFont(new Font("黑体", Font.BOLD, 14)); jbtRect.setBounds(15, 85, 90, 40); jbtRect.setForeground(new Color(153, 217, 234)); jbtRect.setContentAreaFilled(false); jbtRect.setFont(new Font("黑体", Font.BOLD, 14)); jtfModi.setBounds(15, 5, 40, 30); jtfModi.setFont(new Font("黑体", Font.BOLD, 14)); jtfModi.setBorder(null); jtfModi.setEditable(false); jtfModi.setOpaque(false); jbtMod1.setBounds(15, 35, 90, 40); jbtMod1.setForeground(new Color(153, 217, 234)); jbtMod1.setContentAreaFilled(false); jbtMod1.setFont(new Font("黑体", Font.BOLD, 14)); jbtMod2.setBounds(115, 35, 90, 40); jbtMod2.setForeground(new Color(153, 217, 234)); jbtMod2.setContentAreaFilled(false); jbtMod2.setFont(new Font("黑体", Font.BOLD, 14)); jbtMod3.setBounds(15, 85, 90, 40); jbtMod3.setForeground(new Color(153, 217, 234)); jbtMod3.setContentAreaFilled(false); jbtMod3.setFont(new Font("黑体", Font.BOLD, 14)); jbtMod4.setBounds(115, 85, 90, 40); jbtMod4.setForeground(new Color(153, 217, 234)); jbtMod4.setContentAreaFilled(false); jbtMod4.setFont(new Font("黑体", Font.BOLD, 14)); jtfStra.setBounds(15, 5, 40, 30); jtfStra.setFont(new Font("黑体", Font.BOLD, 14)); jtfStra.setBorder(null); jtfStra.setEditable(false); jtfStra.setOpaque(false); jbtStr1.setBounds(15, 35, 90, 40); jbtStr1.setForeground(new Color(153, 217, 234)); jbtStr1.setContentAreaFilled(false); jbtStr1.setFont(new Font("黑体", Font.BOLD, 14)); jbtStr2.setBounds(115, 35, 90, 40); jbtStr2.setForeground(new Color(153, 217, 234)); jbtStr2.setContentAreaFilled(false); jbtStr2.setFont(new Font("黑体", Font.BOLD, 14)); jbtStr3.setBounds(115, 85, 90, 40); jbtStr3.setForeground(new Color(153, 217, 234)); jbtStr3.setContentAreaFilled(false); jbtStr3.setFont(new Font("黑体", Font.BOLD, 14)); jbtStr4.setBounds(15, 85, 90, 40); jbtStr4.setForeground(new Color(153, 217, 234)); jbtStr4.setContentAreaFilled(false); jbtStr4.setFont(new Font("黑体", Font.BOLD, 14)); jbtClea.setBounds(620, 10, 70, 20); jbtClea.setForeground(new Color(153, 217, 234)); jbtClea.setContentAreaFilled(false); jbtClea.setFont(new Font("黑体", Font.BOLD, 14)); jbtClea.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { downPanel.removeAll(); downPanel.add(jbtClea); downPanel.update(downPanel.getGraphics()); } }); downPanel.setBounds(260, 15, 700, 627); downPanel.setBackground(Color.WHITE); downPanel.setLayout(null); downPanel.add(jbtClea); jpPanel1.setBorder(BorderFactory.createLineBorder(getForeground())); jpPanel1.setBounds(20, 15, 222, 142); jpPanel1.setBackground(Color.WHITE); jpPanel1.setLayout(null); jpPanel1.add(jbtTria); jpPanel1.add(jbtRoun); jpPanel1.add(jbtRect); jpPanel1.add(jbtColo); jpPanel1.add(jtfGrap); jpPanel2.setBorder(BorderFactory.createLineBorder(getForeground())); jpPanel2.setBounds(20, 177, 222, 142); jpPanel2.setBackground(Color.WHITE); jpPanel2.setLayout(null); jpPanel2.add(jbtMod1); jpPanel2.add(jbtMod2); jpPanel2.add(jbtMod3); jpPanel2.add(jbtMod4); jpPanel2.add(jtfModi); jpPanel3.setBorder(BorderFactory.createLineBorder(getForeground())); jpPanel3.setBounds(20, 339, 222, 142); jpPanel3.setBackground(Color.WHITE); jpPanel3.setLayout(null); jpPanel3.add(jbtStr1); jpPanel3.add(jbtStr2); jpPanel3.add(jbtStr3); jpPanel3.add(jbtStr4); jpPanel3.add(jtfStra); this.add(downPanel); this.add(jpPanel1); this.add(jpPanel2); this.add(jpPanel3); ////// jbtRoun.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { name = "圆形"; } }); jbtRect.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { name="矩形"; } }); jbtTria.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { name = "三角形"; } }); jbtColo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { c = JColorChooser.showDialog(null, "Choose a Color", jbtColo.getForeground()); } }); jbtMod1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { name2 = "三角形"; if(name!=null &&name.equals("矩形") ){ flag=1; }else if(name!=null &&name.equals("圆形") ){ flag=2; }else if(name!=null &&name.equals("三角形") ){ flag=3; } } }); jbtMod2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { name2 = "圆形"; if(name!=null &&name.equals("矩形") ){ flag=4; } else if(name!=null &&name.equals("三角形") ){ flag=5; } else if(name!=null &&name.equals("圆形") ){ flag=6; } } }); jbtMod3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { name2 = "矩形"; if(name!=null &&name.equals("矩形") ){ flag=7; }else if(name!=null &&name.equals("圆形") ){ flag=8; }else if(name!=null &&name.equals("三角形") ){ flag=9; } } }); jbtMod4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { flag=-1; JFileChooser chooser = new JFileChooser(); chooser.setMultiSelectionEnabled(true); FileNameExtensionFilter filter = new FileNameExtensionFilter( "JPG & GIF Images", "jpg", "gif"); // 设置文件类型 chooser.setFileFilter(filter); // 打开选择器面板 int returnVal = chooser.showOpenDialog(downPanel); if (returnVal == JFileChooser.APPROVE_OPTION) { selectedFiles = chooser.getSelectedFiles(); repaint(); } } }); jbtStr1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { c=Color.red; flag=10; } }); jbtStr2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { c=Color.green; flag=10; } }); jbtStr3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { c=Color.red; flag=11; } }); jbtStr4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { c=Color.green; flag=11; } }); downPanel.addMouseListener(new MouseListener(){ public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); } public void mouseReleased(MouseEvent e) { x1 = e.getX(); y1 = e.getY(); Graphics g = downPanel.getGraphics(); // System.out.println("name="+name); switch (flag){ case 0: Draw d =proFactory.produce(name); d.draw(g, x, y, x1, y1, c);break; case 1: con = new Rec(); con.paint(g, x, y, x1, y1, c); break; case 2: con = new Oval(); con.paint(g, x, y, x1, y1, c);break; case 3: con = new Tri(); con.paint(g, x, y, x1, y1, c);break; case 4: con = new Rec(); con.paint(g, x, y, x1, y1, c);break; case 5: con = new Tri(); con.paint(g, x, y, x1, y1, c);break; case 6: con = new Oval(); con.paint(g, x, y, x1, y1, c);break; case 7: con = new Rec(); con.paint(g, x, y, x1, y1, c);break; case 8: con = new Oval(); con.paint(g, x, y, x1, y1, c);break; case 9: con = new Tri(); con.paint(g, x, y, x1, y1, c);break; } if(flag==1||flag==2||flag==3){ Tri_Tri tr = new Tri_Tri(con); tr.paint(g, x, y, x1, y1, c); flag=0; } if(flag==4||flag==5||flag==6){ Oval_Oval tr = new Oval_Oval(con); tr.paint(g, x, y, x1, y1, c); flag=0; } if(flag==7||flag==8||flag==9){ Rec_Rec tr = new Rec_Rec(con); tr.paint(g, x, y, x1, y1, c); flag=0; } if(flag==10){ size s = new redbig(); float size; size = s.bepaint(); pen p = new bigpen(); p.draw(name, g, x, y, x1, y1, c,size); } if(flag==11){ size s = new greensmall(); float size; size = s.bepaint(); pen p = new bigpen();
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服