




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、长 沙 学 院课程设计说明书题目设计模式课程设计系(部)数学与计算机科学系专业(班级)数媒2班姓名胡辉衡学号B指导教师朱建凯起止日期2016年12月19日课程设计任务书课程名称:设计模式课程设计设计题目:基于设计模式的绘图程序已知技术参数和设计要求:1. 问题描述(功能要求):1需求分析该系统是一个画图程序,我们要用设计模式的思想来设计系统结构,然后实现基本图形的绘制功能。1.1 设计模式要求至少在其中运用 3 种模式,其中涉及到的模式有装饰模式、策略模式、桥梁模式三种。1.2 画图基本要求能实现基本图形的绘制功能1.3 画图高级要求实现图形的操作(如选取、移动、放大、缩小、改变颜色、改变线形
2、等)和持久化(利用文件或利用数据库)。1.4 参考界面图1 参考效果图1图2 参考效果图22. 运行环境要求:Windows操作系统;Eclipse3. 技术要求:给出至少3种设计模式,要求具体说明使用每种设计模式的动机,画出类图,并代码实现,然后评价该设计模式的优缺点。设计工作量:2周工作计划:(1) 2014级软件工程4课时:讲授32课时:上机、调试。计算机系机房4课时:答辩。计算机系机房。指导教师签名:日期:教研室主任签名: 日期:系主任签名: 日期:长沙学院课程设计鉴定表姓名胡辉衡学号B专业数字媒体班级2设计题目 基于设计模式的绘图程序指导教师朱建凯指导教师意见:评定等级: 教师签名:
3、 日期: 答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;目录第1章 系统需求81.1系统总需求81.2功能需求8第3章 系统设计93.1系统总功能模块设计93.2子功能模块设计93.2.1构建基本图形93.2.2装饰模式组合图形103.2.3 桥接模式修饰图形颜色线条粗细10第4章 系统实现114.1简单工厂模式绘制基本图形114.1.1装饰模式图形组合134.1.2桥接模式改变粗细绘制图形14第5章 系统测试155.1测试目的155.2测试手段155.3测试用
4、例155.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构建基本
5、图形功能:通过点击对应按钮,生成对应可控制大小的基本图形。 图.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绘制基本图形(矩形
6、)图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绘制组合图形鼠标点击
7、对应按钮绘制组合图形绘制桥接图形鼠标点击对应按钮绘制外观不同的新图形结论绘图程序实现了图形的基本绘制功能,并在绘制的其中运用到了本学期所学的设计模式的知识,使得整个系统变得更具结构性,便于后期的功能扩展或其他。参考文献1 谭浩强编著,java程序设计M,清华大学出版社,1991.72 姜仲秋编著,java程序设计M,南京大学出版社,1998.13 刘瑞挺主编,计算机二级教程M,南开大学出版社,1996.104 陈朔鹰编著,java程序设计基础教程M,兵器工业出版社,1994.95 李虹主编,java程序设计,M,南京大学出版社,2010.21 马石安、魏文平.面向对象程序设计教程M.北京:清华
8、大学出版社.2007.8 结束语为期两周的实训结束了,在老师和同学的帮助下,我基本完成绘图程序系统的设计。我们按照系统工程软件设计的要求,从需求分析,概念设计,总体设计,详细设计,系统测试等各个步骤,分步完成系统的各项任务,实现了系统中的学生信息查询,学生信息更新,学生信息添加等模块的功能。在这实训期间里我们的收获很多:巩固和加深了对JAVA的理解,提高了综合运用本课程所学知识的能力。使用窗体控件开发桌面程序。在Swing中使用控件可减少代码书写量加快开发速度。培养了我们查阅文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。通过实际编译系统的分析设计、编程调试,掌握应用软件的分
9、析方法和工程设计方法。通过这次实训,我们也认识到在以后的学习当中注意:认真上好专业实验课,多在实践中锻炼自己。写程序的过程中要考虑周到,严密。在做设计的时候要有信心,有耐心,切勿浮躁。认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。附录界面:package 界面;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.MouseInfo;import java.awt.Poi
10、nt;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.
11、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 JFramep
12、rivate 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(); / 初始化界面显示组件 p
13、rivate 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
14、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 =
15、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);
16、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
17、 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,
18、 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); jbtMod
19、1.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
20、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.setContentAreaFill
21、ed(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); jbt
22、Str1.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.setForegrou
23、nd(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, 1
24、0, 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(down
25、Panel.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); jpPan
26、el1.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(nu
27、ll); 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.ad
28、d(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.
29、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 = JColo
30、rChooser.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
31、.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) name2 = 圆形;if(name!=null&name.equals(矩形)flag=4;elseif(name!=null&name.equals(三角形)flag=5;else if(name!=null&name.equals(圆形)flag=6;); jbtMod3.addActionListener(new ActionListener() public void actionPerformed(ActionEven
32、t 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.setMultiSelect
33、ionEnabled(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()
34、;); 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 actionPer
35、formed(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(Mou
36、seEvent e) x1 = e.getX();y1 = e.getY();Graphics g = downPanel.getGraphics();/System.out.println(name=+name);switch (flag)case 0: Draw d =proFduce(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,
37、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, x
38、1, 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,
39、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();
40、pen p = new bigpen();p.draw(name, g, x, y, x1, y1, c,size);/* */if (flag=-1)Point point = MouseInfo.getPointerInfo().getLocation();int thisX = x1;int thisY = y1;System.out.println(thisX= + thisX + + thisY= + thisY);if (y - thisY 0)| (y - thisY -20) / Y 在20范围内移动认为是水平移动if (x thisX) / rightif (selected
41、Files != null& fileIndex 0) fileIndex-; else if (x thisX) / 右下width += 20;height += 20; else / 左上width -= 20;height -= 20;repaint();class ImagePanel extends JPanel public void paint(Graphics g) super.paint(g);if (selectedFiles != null) ImageIcon icon = new ImageIcon(selectedFilesfileIndex.getPath();
42、g.drawImage(icon.getImage(), 0, 0, width, height, this);public void mouseClicked(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) ); /public void showFrame() this.setTitle(DrawSomething); this.setLayout(null); this.setSize(1000, 700); this.setLocation(600, 3
43、00); this.setDefaultCloseOperation(3); this.setVisible(true); public static void main(String args) new MainFrame(); package 界面;import java.awt.Graphics;public class Jpanel public int n;public int x = null;public int y = null;public void paintComponent(Graphics g) g.drawPolygon(x, y, n);public void p
44、aintComponent1(Graphics g)g.drawOval(x0, x1, x2, x3);简单工厂模式:package 简单工厂模式;import java.awt.Color;import java.awt.Graphics;import 装饰模式.Decorator;public interface Drawpublic abstract void draw(Graphics g,int x,int y,int x1,int y1,Color c);public abstract void draw(Graphics g,int x,int y,int x1,int y1,
45、Color c,float size);package 简单工厂模式;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import 界面.*;import 装饰模式.Conpotent;public class DrawOval implements Drawpublic void draw(Graphics g, int x1, int y1, int x2, int y2, Color c) Jpanel jp = new Jpanel
46、();jp.n = 3;jp.x = new intx1x2?x1:x2, y10? (x2-x1):(x1-x2), (y2-y1)0?(y2-y1):(y1-y2);g.setColor(c);jp.paintComponent1(g);public void draw(Graphics g, int x1, int y1, int x2, int y2, Color c,float size) float lineWidth = size;(Graphics2D)g).setStroke(new BasicStroke(lineWidth);Jpanel jp = new Jpanel();jp.n = 3;jp.x = new intx1x2?x1:x2, y10? (x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年咨询工程师考试题库及答案(必刷)
- 预防库房错配管理
- 影城消防培训
- 语文-小升初语文6月18日题库
- 门诊皮试阳性护理查房
- 建筑行业绿色建筑材料与技术应用方案
- 电线电缆行业高压电缆研发方案
- 四年级数学(简便运算)计算题专项练习与答案
- 供应商合作质量奖励制度
- 防洪与减灾作业指导书
- 浙江省杭州市杭州二中钱江学校2024-2025学年高一物理下学期月考试题含解析
- 修复征信服务合同模板
- JGJ106-2014建筑基桩检测技术规范
- JT-T-1239-2019沥青路面抗凝冰涂层材料技术条件
- 建筑装饰行业风险管理与控制研究
- 连接器基础知识培训
- 医院培训课件:《白疕(银屑病)中医护理查房》
- 一汽-大众供应商管理流程介绍.sbx
- 招标代理机构入围 投标方案(技术方案)
- 招投标代理挂靠协议书
- 工作的时效性与时间管理课件
评论
0/150
提交评论