• Java课程设计选题 Java课程设计说明 本次课程设计的目的是通过课程设计的各个项目的综合训练,培养学生实际分析问题、编程和动手能力,提高学生的综合素质。本课程设计尝试使用一些较生动的设计项目,激发学生的...

    Java课程设计选题

    Java课程设计说明

      本次课程设计的目的是通过课程设计的各个项目的综合训练,培养学生实际分析问题、编程和动手能力,提高学生的综合素质。本课程设计尝试使用一些较生动的设计项目,激发学生的学习兴趣,引导学生主动学习,正确理解和接受需要重点掌握的知识点。

     

    所有项目的源码:链接:https://pan.baidu.com/s/1_vgdmSAsA1m0zPBzZBUgww          提取码:vddh

     

    课程设计步骤
    1、分析项目要求

     每个课程设计项目都有其相关的设计要求,其中对项目实现的功能做了详细定义。如果某些知识面掌握的不是很好,可以再返回去重新熟悉与掌握。

    2、自学新知识
    每个课程设计项目都涉及一些新的知识面(老师没有在课堂上讲解的内容),在开始设计前,首先要查阅相关资料,学习和掌握项目中涉及的新知识,提高自学能力。
    3、界面设计
    本次课程设计都是图形界面程序,所以在实现程序功能前,可以先完成图形界面设计(建议采用swing组件或第三方swt组件)。在部分项目运行效果示例中,抓取了运行结果界面。项目图形界面所涉及了容器、组件、布局知识,在设计图形界面前,可以再回顾下以上知识(建议采用较智能的开发工具如:eclipse、Jbuilder等)。
    4、项目功能实现
    每种功能其实就是相应控件的响应事件,所以要根据课程设计要求把各种功能转换成相应组件的响应事件。如动作事件(ActionEvent)、键盘事件(KeyEvent)、鼠标事件(MouseEvent)、焦点事件(FocusEvent)。对于比较复杂的功能,先要设计该功能实现的算法和程序流程图,然后再用程序语句去实现。

    5、项目测试与扩展
    项目程序设计完以后,运行该项目,一一测试所有项目功能,如有不合要求的话,重新修改程序以达到项目要求。如有时间的话,可以在项目要求的基础上扩展创新一些功能,根据其创新情况可以给予适当的加分。
     

    普通题

    题目  计算器

    设计内容  设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算、

    设计要求  设计的计算器应用程序可以完成家法、减法、乘法、除法和取余运算。且有小数点、正负号、求倒数、退格和清零功能。

    学习要点 本程序主要练习使用布局管理器设计一个计算器的界面,并练习使用事件监听器处理数据的输入,并完成相关的计算。

    设计思路 本应用程序继承自框架类(Frame),此程序使用Frame布局管理器BorderLayout,将单行文本框加入到“North”区域,包含各种按钮的面板Panel p加入到”Center”区域。         包含各种按钮的面板Panel p 采用4行5列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中。同时注册按钮事件监听器。如:

    Button b=new Button();

    b.addActionListener(事件监听器);

    事件监听器中的事件处理方法void actionPerformed(ActionEvent evt)完成主要的按钮事件的处理。事件处理分以下几种情况:数字按钮事件(”0”,”1”,”2”…”8”,”9”)、运算符按钮事件(”+”,”-“,”*”,”/”,”%”)、正负号按钮事件(”+/-“)、小数点按钮事件(”.”)、等号按钮事件(”=”)、求倒按钮事件(”1/x”)、退格按钮事件(”退格”)、清楚按钮事件(“C”)。

    在事件处理。

    触发按钮事件时,要进一步分析,是重新开始计算时触发的按钮事件还是计算中间触发的按钮事件。

    计算器完成的是一个数学表达式,如:3+2,所以可以采用一个链表(LinkedList类)来存储数字或字符,如3,+,2分别存储在链表中,最后运算时,可以一一取出来进行运算。

    本应用程序中的数字按钮和运算符按钮可以分别定义以下两个类的对象组件

    数字按钮NumberButton类如下:

    import java.awt.*;

    import java.awt.event.*;

    import javax.swing.*;

    public class NumberButton extends Button

    {

      int number;

      public NumberButton(int number)

       {

        super(""+number);

        this.number=number;

        setForeground(Color.blue);

       }

      public int getNumber()

       {

         return number;

       }

    }

    运算符按钮OperationButton类如下

    import java.awt.*;

    import java.awt.event.*;

    import javax.swing.*;

    public class OperationButton extends Button

    {

      String 运算符号;

      public OperationButton(String s)

       {

        super(s);

        运算符号=s;

        setForeground(Color.red);

       }

      public String get运算符号()

       {

         return 运算符号;

       }

    }

     

    相关学习资料

    LinkedList类:

    LinkedList类在Java标准类库的java.util包定义,它提供域数组类似的服务,包括可以插入或删除元素。与数组不同的是,LinkList对象可以根据需要,动态地改变大小。LinkList对象中存储的是对Object类的一系列引用,对任何类型对象的引用都可以被添加倒LinkList对象中。LinkedList类中有以下方法
        public LinkedList() //构造方法  

        public Object getFirst() //返回链表中的第一个元素     

        public Object getLast()  //返回链表中的最后一个元素   

        public Object removeFirst() 删除并返回第一个链表元素    

        public Object removeLast() 删除并返回最后一个链表元素   

        public void addFirst(Object o) //插入一个元素在为链表的第一个元素   

        public void addLast(Object o) //插入一个元素为链表的最后一个元素   

        public boolean contains(Object o) //是否存在该元素  

        public int size() //返回链表元素个数    

        public boolean add(Object o) //添加元素o  

        public boolean remove(Object o)//删除元素o   

        public boolean addAll(Collection c) //添加一个对象集 c  

        public void clear() //清除列表中的所有元素  

        public Object get(int index)   //返回指定位置(index)的链表元素  

        public Object set(int index, Object element)//设定指定位置(index)的链表元素为元素element

        public void add(int index, Object element) //在链表特定位置(index)上插入链表元素

    public Object remove(int index)//删除指定位置(index)上的链表元素

     

    下面举例应用LinkedList类

    import java.awt.*;

    import java.awt.event.*;

    import java.util.LinkedList;

    public class UseLinkedList extends Frame

    {

     

    Public static void main(String args[])

    {

    String opertation1[]={“+”,”-“,”*”,”/”,”%”};

    String ipe0,ope1,ope2,ope3,ope4;

    Int n;

    LinkedList  list1;

    For(int I=0;I<opertation.length;I++)

    list1.add(opertation[i]);

    ope0=(String)list1.getFirst();

    ope1=(String)list1.get(1);

    ope4=(String)list1.getLast();

    list1.set(2,”&”);

    ope2=(String)list1.get(2);

    list1.remove(“/”);

    list1.removeLast();

    n=list1.size();

    System.out.println(“链表中一共有”+n+”元素”);

    System.out.println(“ope0-ope4分别为”+ope0+ope1+ope2+ope3+ope4);

    }

    }

    运算结果为:3

    + - &

    运行效果示例:           

     

    题目 简单投票管理系统

    设计要求

    设计一个如图1所示的投票管理系统界面,要求输入候选人名单后,点击确认按钮实现使用选择框代表候选人,计选择框的名字就是候选人的名字。点击取消按钮候选人输入框为空,重新输入候选人名单。选中候选人的选择框时,表示给该候选人投一票。点击确定按钮时表示产生一张选票。点击刷新按钮回到程序的初始界面重新设置候选人。根据选择框的状态变化统计出候选人的最后得票数,并可按票选取多少点击排序按钮对候选人进行排序。(其中,最多从候选人中选取3人,如果一张选票选取多于3人,该票就作废票处理。如果一个也没投票,就作弃权处理。程序能显示一共统计了多少选票,并能统计出废票和弃权票的票数。

    学习要点

    本程序主要学习窗口的布局以及按钮事件的触发。

    设计思路

    定义几个类变量来记录投票相关记录如:

    Checkbox checkbox[]                        //选择框数组,代表候选人

    TextField personVote[]                       //文本条数组,显示每个人的得票情况

           int count[]                                 //记录每个人的得票数

    int totalVote=0,                             //总票数

           int peopleNumber=0;                        //候选人个数

           int 有效人数=3,废票数=0,弃权票数=0;   

    在输入候选人名单时是输入一串名字,所以要从这一串名字中单个的提取出来并统计出候选人个数,在完成这项功能时要用到StringTokenizer类。点击确认按钮后,根据候选人个数添加单选按钮,并以候选人名字作为单选按钮的标签名。然后通过确定按钮事件分别给以上定义的各变量赋值。把结果显示出来,同时可以根据peopleNumber的值对各候选人文本框排序,即调整候选人文本框中的内容。   

    相关学习资料

    StringTokenizer

    有时我们需要分析字符串并将字符串分解成可被独立使用的单词,这些单词叫做语言符号。例如,对于字符串We are Students,如果我们把空格作为该字符串的分隔符,那么该字符串有3个单词(语言符号)。而对于字符串WE,are,Student,如果我们把逗号作为了该字符串的分隔符,那么该字符串有3个单词(语音符号)。

      当我们分析一个字符串并将字符串分解成可别独立使用的单词时,可以使用java.util包中的StringTokenizer类,改类有两个常用的构造方法:

    StringTokenizer(String s)为字符串s构造一个分析器。使用默认的分隔符集合,即空格符(若干个空格被看作一个空格)、换行符、回车符、Tab符、进纸符。

    StringTokenizer(String sString delim)为字符串s构造一个分析器。参数delim中的字符被作为分隔符。

    例如:StringTokenlizer fenxi=new StringTokenizer(“We are student”);

    StringTokenlizer fenxi=new StringTokenizer(“We,are;student”,”,”);

      我们把一个StringTokenzier对象作一个字符串分析器。一个分析器可以使用nextToken()方法逐个获取字符串中的语言符号(单词),每当调用nextToken()时,都将在字符串中活得下一个语言符号。通常用while循环来逐个获取语言符号,为了控制循环,我们可以使用

    StringTokenizer类中的hasMoreTokens()方法,只要字符串中还有语言符号,该方法就返回true,否则返回false。另外我们还可以调用countTokens()方法得到字符串一共有多少个语言符号。 

    运行效果示例

     

    图1

     

     

    题目:小学生数学练习题目自动生成系统

           【设计要求】

           编写一个能够自动生成小学生数学练习题目的程序。设计一个程序,能够根据用户的选择生成“10以内加法”、“10以内减法”、“20以内加法”、“20以内减法”、“100以内加法”、“100以内减法”、“100以内乘法”、“100以内除法”8种类型的题目,要求每个题目能够随机生成,并符合以下要求:

    1. 10以内加法的得数在不大于10的范围内;
    2. 20以内加法的得数在不大于20的范围内;
    3. 100以内加法的得数在不大于100的范围内;
    4. 10以内减法的两个运算数在不大于10的范围内并且差为非负数;
    5. 20以内减法的两个运算数在不大于20的范围内并且差为非负数;
    6. 100以内减法的两个运算数在不大于100的范围内并且差为非负数;
    7. 100以内乘法的得数在不大于100的范围内;
    8. 100以内除法的两个运算数在不大于100的范围内并且被除数应该是除数的整数倍;

    要求程序具备以下功能:根据用户对“题目类型”的选择,在按下“出题”按钮之后,每次显示20个相应类型的题目,用户可以在界面上填写计算结果;答题完成之后,当用户按下“评卷”按钮时,根据用户的答题结果,在界面上可以显示红色的“√”或“╳”符号,以作为对用户的答题结果的评判。当用户按下“答案”按钮时,在界面上显示正确的运算结果。

    输入/输出要求

    输入要求:用户能够在界面上输入题目的计算结果;

    输出要求:程序可以在界面上显示20个用户所需的类型的题目,以红色的“√”或“╳”

    符号显示对用户计算结果的评判结果,以及所给出的题目的正确答案。

    题目:华容道-一个传统的智利游戏

    【设计要求

    编写一个按钮的子类,使用该子类创建的对象代表华容道中的人物。通过焦点事件控制人物颜色,当人物获得焦点时颜色为蓝色,当失去焦点时颜色为灰色。通过键盘事件和鼠标事件来实现曹操、关羽等人物的移动。当人物上发生鼠标事件或键盘事件时,如果鼠标指针的位置是在人物的下方(也就是组件的下半部分)或按下键盘的“↓“键,该人物向下移动。向左、向右和向上的移动原理类似。
    学习要点  本程序主要练习使用布局管理器设计一个华容道游戏界面,并练习使用事件监听器(鼠标事件、键盘事件和焦点事件)实现按钮的移动。

    设计思路  首先是界面设计,该界面主要包括十个人物按钮(马、曹操、关羽等)以及旁边的四个边框按钮和重新开始按钮。对于人物按钮,我们可以创建Button按钮的子类,在该类中定义按钮的一些新的属性和焦点事件监听器,如:按钮的标签名、按钮的颜色、按钮的排号(如这里有十个人物按钮,从1排到十,在程序中可以依靠这个属性区分人物按钮)、按钮颜色、按钮获得或失去焦点事件。同时在设计该界面时要考虑到各个按钮的位置、大小等情况。在这给出了各按钮的位置和大小参数:(其中Person为继承Button按钮的人物按钮类)

           String name[]={"曹操","关羽","张","刘","马","许","兵","兵","兵","兵"};

                                for(int i=0;i<name.length;i++)

                                {

                                       person[i]=new Person(i,name[i]);

                                       person[i].addKeyListener(this);

                                       person[i].addMouseListener(this);

                                //     person[i].addFocusListener(new Person)

                                       add(person[i]);

                                }

                                person[0].setBounds(104,54,100,100);

                                person[1].setBounds(104,154,100,50);

                                person[2].setBounds(54,154,50,100);

                                person[3].setBounds(204,154,50,100);

                                person[4].setBounds(54,54,50,100);

                                person[5].setBounds(204,54,50,100);

                                person[6].setBounds(54,254,50,50);

                                person[7].setBounds(204,254,50,50);

                                person[8].setBounds(104,204,50,50);

                                person[9].setBounds(154,204,50,50);
    四个边框按钮的位置和大小参数为:

    left.setBounds(49,49,5,260);

                                right.setBounds(254,49,5,260);

                                above.setBounds(49,49,210,5);

                                below.setBounds(49,304,210,5);

     

    其次我们是对界面上的各人物按钮添加相应的相应事件(鼠标事件、键盘事件),通过这两种事件去完成界面上各人物按钮的移动。对重新开始按钮定义动作事件(ActionEvent)完成界面初始化功能(也就是各人物按钮重新归位)。

    相关学习资料

    该程序主要涉及到鼠标事件和键盘事件及焦点事件三个方面的新知识。

    1. 触发焦点事件

    组件可以触发焦点事件。组件可以使用

    public void addFocusListener(FocusListener Listener)

    增加焦点事件监视器如:button1.addFocusListener(事件监听器)

    当组件具有焦点监视器后,如果组件从无输入焦点变成有输入焦点或从有输入焦点到无输入焦点都会触发FocusEvent事件。创建监视器的类必须要实现FocusListener接口,该接口有两个方法:

    public void focusGained(FocusEvent e)   //获得焦点触发

    public void focusLost(FocusEvent e)     //失去焦点触发

    当组件从无输入焦点变成有输入焦点并触发FocusEvent事件时,监视器调用类实现的接口方法focusGained(FocusEvent e);当组件从有输入焦点变成无输入焦点并触发FocusEvent事件时,监视器调用类实现方法focusLost(FocusEvent e)。

     方法   public Boolean requestFocusInwindow()方法可以获得输入焦点:如Button1.requestFocusInwindow()

    1. 鼠标事件

    组件是可以触发鼠标事件的事件源。

    如:鼠标指针进入组件,退出、停留组件上方单击鼠标、拖动鼠标、按下、释放、移动。

       鼠标事件的类型是MouseEvent,即组件触发鼠标时,MouseEvent类自动创建一个事件对象。Java分别使用MouseListener接口与MouseMotionListener接口来处理鼠标事件。MouseListener接口可以处理5种鼠标事件:单击、按下、释放、进入和退出。MouseMotionListener接口可以处理2种鼠标事件:拖动、移动。

    1. 键盘事件

    当按下、释放或敲击键盘上一个键时就发生了键盘事件,如:当一个组件处于激活状态时(获得焦点),敲击键盘上一个键就导致了这个组件发生了键盘事件。事件源使用addKeyListener方法获得监视器。KeyEvent为键盘事件的类型,KeyListener是事件监视器实现的接口,其中有三种相应事件:按键、释放键、按下和释放的组合事件。

    Public void KeyPressed(KeyEvent e)

    Public void KeyTyped(KeyEvent e)

    Public void KeyReleased(KeyEvent e)

    用KeyEvent类的public int getKeycode()方法和public char getKeychar()判断哪个键被按下、敲击或释放。如:

    public void keyPressed(KeyEvent e)

                  {

                         Person man=(Person)e.getSource();//返回事件源

                         if(e.getKeyCode()==KeyEvent.VK_DOWN)  //判断是否按下了向下箭头

                         {

                                goDown(man);

                         }

                         if(e.getKeyCode()==KeyEvent.VK_UP)  //判断是否按下了向下箭头

                         {

                                goUp(man);

                         }

                         if(e.getKeyCode()==KeyEvent.VK_LEFT)  //判断是否按下了向下箭头

                         {

                                goLeft(man);

                         }

                         if(e.getKeyCode()==KeyEvent.VK_RIGHT)  //判断是否按下了向下箭头

                         {

                                goRight(man);

                         }

                  }

    运行效果示例

    题目: 用图形界面实现P208页,过桥问题

    设计要求: 1. 用多线程技术实现多人过独木桥;

          2. 模拟不同速度过桥;

          3. 用面向对象方法设计程序。

    题目  编写一个记事本程序

    设计要求

    1、  用图形用户界面实现。

    2、  能实现编辑、保存、另存为、查找替换等功能。

    3、  提示:使用文件输入输出流。

     

     

    题目   电子英汉词典

    设计要求

      1. 用图形用户界面实现。
      2. 能够编辑词典库中的信息
      3. 能够实现英译汉,汉译英。(要考虑一词多义)

     

    题目   加密与解密

    设计要求

    1. 采用图形用户界面
    2. 给定任意一个文本文件,进行加密,生成另一个文件。
    3. 对加密后的文件还原。

    提高题

     

    题目:标准化考试系统

    内容:

      本系统可以进行任何标准化考试,具有选择试题,查看得分、考试计时等功能。

    设计要求:

    1. 用户可以选择一套标准化考试试题。
    2. 每套试题的考试用时由试题文件(.txt)给出。
    3. 开始读取试题后,计时器开始计时,用户提交答案后,可以读取下一道题目。
    4. 一个提示栏显示所剩余的考试时间,当规定时间用尽后,用户将不能再读取任何题目。
    5. 为了增加模拟考试练习的灵活性,用户也可以选择暂停计时。
    6. 用户答完一个题目后,可以查看该题目的正确答案和目前的分数。

    运行效果图:

     

     

    题目:排球比赛计分系统

    【设计要求】

         编写一个能够对排球比赛实时统计比分和显示比分的程序。排球竞赛规则规定:排球竞赛为五局三胜制,每局比赛中得够25分并且领先对方2分以上的一方将获得一局胜利,先获得三局胜利的一方将获得比赛的胜利。若比赛中出现24:24的比分,则一方必须领先对方2分方可结束一局。若双方前四局的比分为2:2,则将进行第五局的比赛,第五局比赛中得够15分并且领先对方2分以上的一方将获得胜利。若比赛中出现14:14的比分,则一方必须领先对方2分方可结束比赛。

          设计一个程序,分别用两个按钮来输入比赛一方的得分。根据比赛进展,用两个固定的按钮输入比赛双方的得分,如果一方得分,则按下对应的按钮一次,GUI界面上的分数将增加1分。当完成一局比赛时,程序自动将比赛得分清零,并且相应地将获得本局胜利一方的局分增加1分。若一方获得三局比赛的胜利,则程序自动显示获胜一方的名称。

          要求程序具备以下功能:可以实时输入和显示比赛双方的比分和局分,可以存储比赛的得分过程,并且可以调用已经存储的比赛得分记录。

    输入/输出要求

          输入要求:在程序启动之后输入参加比赛的两只球队的名称和队旗画面图像。按照比赛进展,实时输入比赛得分。

          输出要求:程序运行时,可以在GUI界面上显示球队的名称和队旗、双方的当前赛局的比分、双方的局分。

    数据管理能力要求

          比赛结束之后,可以将整个比赛的整个得分过程存储到文件中,以供回顾使用

     

     

    题目:Hannoi

    设计内容

      设计GUI界面的Hannoi塔,用户可以通过拖动鼠标移动各个塔上的盘子,程序也可以自动演示盘子的移动过程。

    设计要求

    1. 有三个表示塔的对象,分别命名为A、B和C。A塔上有若干个盘子,盘子的大小不等,并按着大小顺序依次摆放在A塔上,大盘在下,小盘在上。用户可以用鼠标拖动盘子,把A 塔上的盘子全部移动到另外两个塔中的任何一个塔上。要求每次只能移动一个盘子,在任何时候不允许大盘压在小盘的上面。
    2. 用户也可以选择让程序自动演示。选择自动演示后,程序将以动画形式演示把A塔上的盘子全部移到C塔的过程,并将移动过程以文本形式显示在一个文本区中。

    运行效果图

     

     

     

    题目  学籍管理系统

    设计内容

    设计基于文件结构的学籍管理系统。

    设计要求

    1录入学生基本信息的功能

    2修改学生基本信息的功能

    3查询学生基本信息的功能

    4删除学生基本信息的功能

    运行结果图

                     

     

     

    题目  制作一个图形编辑系统

    设计要求:1、能用拖橡皮筋的手法绘制各类图形(直线、椭圆、矩形、文字)

             2、支持画笔颜色、文字大小设置;

             3、能将画面中的所有图形存储到文件中;

             4、能从文件读取图形进行增补;

             5、采用对话框获取图形文件名。

             6、思考如何利用鼠标选取图形,删除。

     

    题目  图书信息管理系统

    设计要求:

    1. 使用图形用户界面
    2. 用数据库建立1或2个图书信息表。(不限使用哪种数据库)
    3. 能连接数据库并实现查询、增、删、改等功能。

    题目  ATM柜员机模拟系统

    设计要求:

    使用图形用户界面。

    需求:

    当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:

    1、查询余额:初始余额为10000元

    2、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。

    3、ATM存款:不能出现负存款。

    4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。

     

    题目  一个简单的万年历

    功能要求:

    1. 能够显示实现1800-2100年的日期,包括公历、农历、星期、二十四节气。

    2. 能够按照月份格式显示,或按照星期格式显示。

    3. 能够显示系统时间。

    4. 能够设置闹钟。

    5. 能够查询若干国际大城市(分布在不同时区)的时间。

     

    题目  学生成绩管理信息系统

    数据库要求:

    1. 建立的数据库中包含如下信息:学生学号、姓名、班级,语文、数学、英语成绩。

    2. 至少要有5个班级,每个班级要有10名以上学生。

    3. 使用.txt格式文本表示各种表。

    功能需求:

    1. 能够实现根据以下关键字查询:学生姓名 、学号、班级、课程名称。

    2. 能够实现按照单科成绩、总成绩、平均成绩、学号排序。

    3. 能够实现学生信息的插入、删除和修改。

    4. 能够查询每个课程的最高分、最低分及相应学生姓名、班级和学号。

    5. 能够查询每个班级某门课程的优秀率(90分及以上)、不及格率,并进行排序

     

    题目  聊天小程序

    设计要求

    1. 使用图形用户界面。
    2. 能实现一个聊天室中多人聊天。
    3. 可以两人私聊。
    4. 提示:使用socket通信

     

    挑战题

    题目:记忆测试系统

    设计内容:

     记忆测试系统通过回忆法测试记忆,分为初级、中级、高级三个级别,并通过记忆榜存储每个级别的成绩。

    设计要求:

    1. 单击“记忆测试”菜单可以选择初级/中级/高级,也可以查看初级记忆榜/中级记忆榜或高级记忆榜。
    2. 选择级别后,将显示相应级别的测试区域。测试区域由若干个方块组成,每个方块都有一个图标,但该图标默认情况下不可见。用鼠标单击测试区中的任何一个方块,则计时器开始启动,同时该方块上的图标将显示出来。对于初级级别,用户必须用鼠标连续单击出6个图标相同的方块,也就是说,如果用户已经用鼠标连续单击出n(n<6)个图标相同的方块,单击另一个房块时,如果该方块的图标和上一个相同,那么该方块的图标和前n 次单击出的方块的图标仍然可见,否则,前n次单击出的方块的图标都变为不可见。
    3. 连续单击出该级别所要求的若干个图彪相同的方块后,将显示保存成绩对话框,成绩按所用时间排序。用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。

    运行效果图:

     

     

     

    题目  超市收银系统

    设计要求:

    使用图形用户界面。

    需求:

    由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。从数据库中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。

    另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次购物满200元,可为其发放一张会员卡,以后在该商场购物可向9折优惠。

     

    题目  算法演示程序

    功能要求:

    1. 选择一个算法(提供选择见下),利用各种方法(图形、动画等)演示算法的演示过程。

    2. 可以进行手动演示,也可以自动步进式演示。

    3. 允许用户设置算法的各个输入参数,以及自动步进式演示中的时间间隔。

    4. 不同的算法输入要求见下。

    参考算法:

    1. 最小生成树算法:Prim算法、Kruskal算法。允许以下方式输入一个图形:绘制图形、输入邻接矩阵、输入边及其关联的顶点。要求在图形方式下进行演示算法执行步骤。

    2. 单源最短路算法:Dijkstra算法。允许以下方式输入一个图形:绘制图形、输入邻接矩阵、输入边及其关联的顶点。要求在图形方式下进行演示算法执行步骤。

    3. 最优编码算法:Huffman编码算法。允许用户输入一段英文文字,或者打开一个txt文档(英文内容),据此文档内容进行编码。要求动态列出每个字符的出现概率统计结果以及对应编码。

    1. 其他可供演示的具有一定难度的算法,如关键路径问题、有向图的极大连通分支等。

     

    题目  网络聊天程序

    功能要求:

    1. 实现类似与飞鸽的功能,自动侦测局域网内部启动该软件的用户,并显示在用户列表中。

    2. 可以进行两个人之间的私聊。

    3. 可以群聊。

    4. 可以发送文件。

                                                                                               

    展开全文
  • Java课程设计 【题目】:使用已经学习的java知识编写一个简单的记事本 【实现功能】: 【1】文件: 新建 打开 保存 另存为 退出 【2】编辑: 剪切 复制 粘贴 删除 撤销 【3】格式: 自动换行 字体格式 字体颜色...

    Java课程设计

    【题目】:使用已经学习的java知识编写一个简单的记事本

    【实现功能】:

    【1】文件: 新建 打开 保存 另存为 退出

    【2】编辑: 剪切 复制 粘贴 删除 撤销

    【3】格式: 自动换行 字体格式 字体颜色 查找||替换

    【4】查看: 关于记事本

    【5】帮助 :帮助选项

    【6】显示当前时间

    【使用的类】:

    import.java.io; 
    import java.swt; 
    import javax.swing; 
    import javax.swing.undo.UndoManager

    代码:

    package Note;
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.GraphicsEnvironment;
    import java.awt.GridLayout;
    import java.awt.Insets;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    
    import javax.swing.JButton;
    import javax.swing.JCheckBoxMenuItem;
    import javax.swing.JColorChooser;
    import javax.swing.JDialog;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.JToolBar;
    import javax.swing.undo.UndoManager; // 对菜单活动事件撤销的实现
    
    public class NotePad extends JFrame /// extends继承JFrame类
    {
    
    	int start = 0, end = 0;
    	private UndoManager manager = new UndoManager();// 添加布局管理器
    	private JTextArea text = new JTextArea();
    	private JFileChooser jfc = new JFileChooser();
    	private String jsb = "新建记事本";
    	private File file;
    	private JMenuBar menu;
    
    	// ---------------菜单栏
    	private JMenu File_bar, Edit_bar, Format_bar, View_bar, Help_bar;
    
    	// ---------------文件菜单
    	private JMenuItem File_bar_creat, File_bar_open, File_bar_save, File_bar_othersave, File_bar_exit;
    
    	// ---------------编辑菜单
    	private JMenuItem Edit_bar_Revoke, Edit_bar_shear, Edit_bar_copy, Edit_bar_paste, Edit_bar_delete;
    
    	// ---------------格式菜单
    	private JMenuItem Format_bar_hl, m30, Format_bar_ztxz, Format_bar_ztsz, View_bar_about, Help_bar_help;
    
    	// ---------------查找替换菜单
    	private JMenuItem Format_bar_find_replace;
    
    	private JLabel statusLabel1;
    	private JToolBar statusBar;
    
    	GregorianCalendar time = new GregorianCalendar();
    	int hour = time.get(Calendar.HOUR_OF_DAY);
    	int min = time.get(Calendar.MINUTE);
    	int second = time.get(Calendar.SECOND);
    
    	/* 文件格式过滤器 */
    	public class filter extends javax.swing.filechooser.FileFilter
    	{
    		public boolean accept(File file)
    		{
    			String name = file.getName();
    			name.toString(); // 该字符串中的数字被转换为字符
    			/* 文件后缀是.txt且是个目录 */
    			if (name.endsWith(".txt") || file.isDirectory())
    			{
    				return true;
    			} else
    				return false;
    		}
    
    		/* 将引用具体子类的子类对象的方法,不可以省略类中的getDescription(),原因是编译器只允许调用在类中声明的方法. */
    		public String getDescription()
    		{
    			return ".txt";
    		}
    	}
    
    	/* 将菜单项 JMenu添加菜单 JMenuBar */
    	public JMenu AddBar(String name, JMenuBar menu)
    	{
    		JMenu jmenu = new JMenu(name);
    		menu.add(jmenu);
    		return jmenu;
    	}
    
    	/* 将菜单项JMenuItem添加到菜单JMenu */
    	public JMenuItem AddItem(String name, JMenu menu)
    	{
    		JMenuItem jmenu = new JMenuItem(name);
    		menu.add(jmenu);
    		return jmenu;
    	}
    
    	class Clock extends Thread
    	{ // 模拟时钟
    		public void run()
    		{
    			while (true)
    			{
    				GregorianCalendar time = new GregorianCalendar();
    				int hour = time.get(Calendar.HOUR_OF_DAY);
    				int min = time.get(Calendar.MINUTE);
    				int second = time.get(Calendar.SECOND);
    				statusLabel1.setText(" 当前时间:" + hour + ":" + min + ":" + second);
    				try
    				{
    					Thread.sleep(950);
    				} catch (InterruptedException exception)
    				{
    				}
    
    			}
    		}
    	}
    
    	NotePad note;
    
    	// public void NotePad()
    	{
    		Container container = getContentPane();
    		setTitle(jsb); // 设置窗口标题
    		setBounds(250, 250, 500, 500);// 设置边界
    		JMenuBar menu = new JMenuBar(); // 添加菜单 JMenuBar
    		this.setJMenuBar(menu);// 调用this方法
    		text.getDocument().addUndoableEditListener(manager);// 用于获得程序当前有效的文档
    		/*
    		 * Font是JAVA中的字体类,PLAIN是Font类中的静态常量( static final ) ,表示是:普通样式常量 BOLD
    		 * :粗体样式常量 ,ITALIC: 斜体样式常量,14:磅
    		 */
    		text.setFont(new Font("宋体", Font.PLAIN, 14));
    
    		/* 光标颜色 */
    		text.setCaretColor(Color.gray);
    
    		/* 选中字体颜色 */
    		text.setSelectedTextColor(Color.blue);
    
    		/* 选中背景颜色 */
    		text.setSelectionColor(Color.green);
    
    		/* 是否换行 */
    		text.setLineWrap(true);
    
    		/* 是否单词边界换行(即有空白) */
    		text.setWrapStyleWord(true);
    
    		/* 文本区与边框的间距,四个参数分别为上、左、下、右 */
    		text.setMargin(new Insets(3, 5, 3, 5));
    
    		/* 创建一个 JScrollPane,它将视图组件显示在一个视口中,视图位置可使用一对滚动条控制 */
    		add(new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
    				JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
    
    		File_bar = this.AddBar("文件(F)", menu);
    		// File_bar.setMnemonic('F');
    		Edit_bar = this.AddBar("编辑(E)", menu);
    		Format_bar = this.AddBar("格式(O)", menu);
    		View_bar = this.AddBar("查看(V)", menu);
    		Help_bar = this.AddBar("帮助(H)", menu);
    
    		/* 文件选项 */
    		/* 新建选项 */
    		File_bar_creat = this.AddItem("新建(N)   Ctrl+N", File_bar);
    		File_bar_creat.addActionListener(new ActionListener()
    		{
    			// @Override
    			public void actionPerformed(ActionEvent arg0)
    			{
    				// 设置新文件内容
    				text.setText("");
    			}
    		});
    
    		/* 打开选项 */
    		File_bar_open = this.AddItem("打开(O)   Ctrl+O", File_bar);
    		File_bar_open.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				try
    				{
    					jfc.setCurrentDirectory(new File("."));// 设置当前目录
    					jfc.setFileFilter(new filter()); // 过滤文件
    
    					/*
    					 * 确定是否将AcceptAll FileFilter用作可选择过滤器列表中一个可用选项。如果为假,
    					 * 则AcceptAll文件过滤器从可用的文件过滤列表中删除。
    					 * 如果为true,则AcceptAll文件过滤器将成为可用的文件过滤器。
    					 */
    					jfc.setAcceptAllFileFilterUsed(false); // 全选文件
    
    					jfc.showOpenDialog(null); // 弹出一个 "Open File" 文件选择器对话框。
    					file = jfc.getSelectedFile(); // 获取已经选择目录
    					jsb = file.getName(); // 获取目录名
    					setTitle(jsb); // 显示目录名
    					int length = (int) (jfc.getSelectedFile()).length();
    					char[] ch = new char[length];
    					FileReader fr = new FileReader(file);
    					fr.read(ch);
    					jsb = new String(ch);
    					text.setText(jsb.trim()); // 获得对象的字段的值,然后转成string类型,并且去掉前后空白~~ToString()是转化为字符串的方法
    					// Trim()是去两边空格
    				} catch (Exception e)
    				{
    					JOptionPane.showMessageDialog(null, e);
    				}
    			}
    		});
    
    		/* 保存选项 = (1)如果文件为空,新建一个目录保存;(2)如果当前文件存在,直接保存 */
    		File_bar_save = this.AddItem("保存(S)   Ctrl+O", File_bar);
    		File_bar_save.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				if (file == null)
    				{
    					try
    					{
    						jfc = new JFileChooser();
    						jfc.setCurrentDirectory(null);
    						jsb = JOptionPane.showInputDialog("请输入文件名:") + ".txt";
    						/*
    						 * setSelectedFile返回的是对话框中选中的文件但如果对话框类型是showSaveDialog的话,
    						 * 那么这里返回的值是你要保存的文件, 这个文件可能存在,可能不存在,就是你在对话框中输入的文件名了,
    						 * 既然知道了文件,如果不存在,就新建一个,然后向文件写入数据,这样就可以实现保存了
    						 */
    						jfc.setSelectedFile(new File(jsb));
    						jfc.setFileFilter(new filter());
    						int temp = jfc.showSaveDialog(null); // 获取当前对象
    						if (temp == jfc.APPROVE_OPTION) // 获得选中的文件对象
    						{
    							if (file != null)
    								file.delete();
    							file = new File(jfc.getCurrentDirectory(), jsb);
    							file.createNewFile();
    							FileWriter fw = new FileWriter(file);
    							fw.write(text.getText());
    							fw.close();
    						}
    					} catch (Exception e)
    					{
    						JOptionPane.showMessageDialog(null, e);
    					}
    				} else
    				{
    					try
    					{
    						FileWriter fw = new FileWriter(file);
    						fw.write(text.getText());
    						fw.close();
    					} catch (Exception e)
    					{
    						JOptionPane.showMessageDialog(null, e);
    					}
    				}
    			}
    		});
    
    		/* 另存为选项 */
    		File_bar_othersave = this.AddItem("另存为(A)...", File_bar);
    		File_bar_othersave.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				// file fw = new file();
    				jfc = new JFileChooser();
    				jfc.setCurrentDirectory(new File("."));
    				try
    				{
    					if (file == null)
    					{
    						jsb = JOptionPane.showInputDialog("请输入文件名:") + ".txt";
    					} else
    						jsb = file.getName();
    					jfc.setSelectedFile(new File(jsb));
    					jfc.setFileFilter(new filter());
    					int temp = jfc.showSaveDialog(null);
    					if (temp == jfc.APPROVE_OPTION) // 获得选中的文件对象
    					{
    						if (file != null)
    							file.delete();
    						file = new File(jfc.getCurrentDirectory(), jsb);
    						file.createNewFile();
    						FileWriter fw = new FileWriter(file);
    						fw.write(text.getText());
    						fw.close();
    					}
    				} catch (Exception e)
    				{
    					JOptionPane.showMessageDialog(null, e);
    				}
    			}
    		});
    
    		/* 将默认大小的分隔符添加到工具栏的末尾。 */
    		File_bar.addSeparator();
    
    		/* 退出选项 + 退出提示 */
    		File_bar_exit = this.AddItem("退出(X)", File_bar);
    		File_bar_exit.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				int state = JOptionPane.showConfirmDialog(note, "您确定要退出?退出前请确定您的文件已保存");
    				if (state == JOptionPane.OK_OPTION)
    					System.exit(0);
    			}
    		});
    
    		/* 编辑选项 */
    		/* 撤消选项 */
    		Edit_bar_Revoke = this.AddItem("撤销(U)   Ctrl+Z", Edit_bar);
    		Edit_bar_Revoke.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				if (manager.canUndo())
    					manager.undo();
    			}
    		});
    
    		/* 剪切选项 */
    		Edit_bar_shear = this.AddItem("剪切(T)   Ctrl+X", Edit_bar);
    		Edit_bar_shear.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				text.cut();
    			}
    		});
    
    		/* 复制选项 */
    		Edit_bar_copy = this.AddItem("复制(C)   Ctrl+C", Edit_bar);
    		Edit_bar_copy.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				text.copy();
    			}
    		});
    
    		/* 粘贴选项 */
    		Edit_bar_paste = this.AddItem("粘贴(P)   Ctrl+V", Edit_bar);
    		Edit_bar_paste.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				text.paste();
    			}
    		});
    
    		/* 删除选项=用空格替换从当前选取的开始到结束 */
    		Edit_bar_delete = this.AddItem("删除(L)   Del", Edit_bar);
    		Edit_bar_delete.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				text.replaceRange("", text.getSelectionStart(), text.getSelectionEnd());
    			}
    		});
    
    		/* 自动换行选项 */
    		// m26 = this.AddItem("自动换行(W)", m3);
    		JCheckBoxMenuItem Format_bar_hl = new JCheckBoxMenuItem("自动换行", true);
    		Format_bar.add(Format_bar_hl);
    		Format_bar_hl.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				/* 根据文件名获取文件信息 */
    				if (Format_bar_hl.getState())
    					text.setLineWrap(true);
    				else
    					text.setLineWrap(false);
    			}
    		});
    
    		/* 字体选项 */
    		/*
    		 * 字体格式设置选项 GraphicsEnvironment 类描述了 Java(tm) 应用程序在特定平台上可用
    		 * 
    		 * 的 GraphicsDevice 对象和 Font 对象的集合
    		 */
    		Format_bar_ztxz = this.AddItem("字体选择(F)", Format_bar);
    		Format_bar_ztxz.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				/* 获取本地图形环境 */
    				GraphicsEnvironment gr = GraphicsEnvironment.getLocalGraphicsEnvironment();
    				/* 字体名称列表框 */
    				JList fontnames = new JList(gr.getAvailableFontFamilyNames());
    				/* JScrollPane 管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口 */
    				int selection = JOptionPane.showConfirmDialog(null, new JScrollPane(fontnames), "请选择字体",
    						JOptionPane.OK_CANCEL_OPTION);
    				Object selectedFont = fontnames.getSelectedValue();
    				if (selection == JOptionPane.OK_OPTION && selectedFont != null)
    				{
    					text.setFont(new Font(fontnames.getSelectedValue().toString(), Font.PLAIN, 20));
    				}
    			}
    		});
    		/* 字体颜色设置选项 */
    		Format_bar_ztsz = this.AddItem("颜色(C)", Format_bar);
    		Format_bar_ztsz.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				Color color = JColorChooser.showDialog(null, "文字颜色选择", Color.BLACK);
    				text.setForeground(color);
    			}
    		});
    		Format_bar_find_replace = this.AddItem("替换(R)||查找(F)", Format_bar);
    		Format_bar_find_replace.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				JDialog search = new JDialog();
    				search.setSize(300, 100);
    				search.setLocation(450, 350);
    				JLabel label_1 = new JLabel("查找的内容");
    				JLabel label_2 = new JLabel("替换的内容");
    				JTextField textField_1 = new JTextField(5);
    				JTextField textField_2 = new JTextField(5);
    				JButton buttonFind = new JButton("查找下一个");
    				JButton buttonChange = new JButton("替换");
    				JPanel panel = new JPanel(new GridLayout(2, 3));
    				panel.add(label_1);
    				panel.add(textField_1);
    				panel.add(buttonFind);
    				panel.add(label_2);
    				panel.add(textField_2);
    				panel.add(buttonChange);
    				search.add(panel);
    				search.setVisible(true);
    				// 为查找下一个 按钮绑定监听事件
    				buttonFind.addActionListener(new ActionListener()
    				{
    					public void actionPerformed(ActionEvent e)
    					{
    						String findText = textField_1.getText();// 查找的字符
    						String textArea = text.getText();// 当前文本框的内容
    
    						start = textArea.indexOf(findText, end);
    						end = start + findText.length();
    						if (start == -1) // 没有找到
    						{
    							JOptionPane.showMessageDialog(null, "没找到" + findText, "记事本", JOptionPane.WARNING_MESSAGE);
    							text.select(start, end);
    						} else
    						{
    							text.select(start, end);
    						}
    
    					}
    				});
    				// 为替换按钮绑定监听时间
    
    				buttonChange.addActionListener(new ActionListener()
    				{
    					public void actionPerformed(ActionEvent e)
    					{
    						String changeText = textField_2.getText();// 替换的字符串
    						/* 如果选定文件为真 */
    						if (text.getSelectionStart() != text.getSelectionEnd())
    							text.replaceRange(changeText, text.getSelectionStart(), text.getSelectionEnd());
    					}
    				});
    			}
    		});
    
    		View_bar_about = this.AddItem("关于记事本(About)", View_bar);
    		View_bar_about.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				JOptionPane.showMessageDialog(null, "记事本\n开发语言:JAVA\n开发者:【herongwei&&limiao】\n联系方式:rongweihe1995@gmail.com", "关于",
    						JOptionPane.PLAIN_MESSAGE);
    			}
    		});
    
    		Help_bar_help = this.AddItem("帮助选项(H)", Help_bar);
    		Help_bar_help.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				JOptionPane.showMessageDialog(null, "详细代码请移步\n博客:https://rongweihe.github.io/", "帮助", JOptionPane.PLAIN_MESSAGE);
    			}
    		});
    
    		JPanel toolBar = new JPanel();
    		toolBar.setLayout(new FlowLayout(FlowLayout.LEFT));
    		// --------------------------------------向容器添加工具栏
    
    		container.add(toolBar, BorderLayout.NORTH);
    		// -----------------------------------创建和添加状态栏
    
    		// toolBar.add(File_bar);
    		// toolBar.add(Edit_bar);
    		// toolBar.add(Format_bar);
    		// toolBar.add(Help_bar);
    		// toolBar.add(View_bar);
    
    		statusBar = new JToolBar();
    		statusBar.setLayout(new FlowLayout(FlowLayout.LEFT));
    		statusLabel1 = new JLabel(" 当前时间:" + hour + ":" + min + ":" + second);
    		statusBar.add(statusLabel1);
    		statusBar.addSeparator();
    		container.add(statusBar, BorderLayout.SOUTH);
    		statusBar.setVisible(true);
    		Clock clock = new Clock();
    		clock.start();
    		this.setResizable(true); // 窗体是否可变
    		this.setVisible(true); // 窗体是否可见
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    
    	public static void main(String args[])
    	{
    		NotePad example = new NotePad();
    
    	}
    
    	/*
    	 * public class jjishiben{ public static void main(Strin args[]) { public
    	 * void Run() { NotePad note = new NotePad(); note.setTitle("记事本");
    	 * note.setVisible(true); note.setBounds(250, 250, 500, 500);
    	 * note.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } }
    	 */
    }

     

     

    2015/12/15   新增获取本机时间功能,显示在一个StausBar里面。

    2015/12/15   新增查找和替换功能,当用户没有选择任何字符时,不会默认在最后面添加字符。

    展开全文
  • JAVA 课程设计

    2018-07-03 11:12:12
    课程设计目的:复习、巩固Java语言的基础知识,进一步加深对Java可视化程序设计的理解和掌握;课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决...

     

    一、设计内容与设计要求

    1.课程设计目的:

    复习、巩固Java语言的基础知识,进一步加深对Java可视化程序设计的理解和掌握;课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力;为后继课程的实验以及课程设计打下较扎实的基础。

    2.设计要求:

    掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的中型问题,为将来开发软件积累一些典型的案例处理经验。具体要求如下:

    1)设计课题题目: 实验选课系统 

    ⑵根据自己对应的课题完成以下主要工作:①完成系统需求分析:包括系统设计目的与意义;系统功能需求;输入输出的要求。②完成系统概要设计:程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。③完成系统详细设计:包括采用java语言定义相关的数据类型;写出各模块的算法;画出函数的调用关系图。④调试分析、设计体会、测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。⑤关键源程序(带注释)

    ⑶按规定格式完成课程设计报告,将其打印稿(A4)上交给老师存档。

    ⑷不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。

     

     

     

       

    随着计算机的普及,计算机技术有快速的发展,计算机在各行各业的应用也越来越广泛,为了满足时代的需要,我们开发了许多与实际相应的应用系统,实验选课系统就是一个很好的例子。实验选课系统的用处非常大,它是记录学生选课以及教师等相关信息的软件,应用不同的用户权限加以控制,解决了数据的安全性问题。使用简单、方便,对学校的选课有很大的帮助。

     

     

    关键词:数据库应用;学生实验选课;权限;数据库


     



      言

    数据结构在计算机应用中的作用非常大,程序=数据结构+算法,算法的实现也离不开数据结构,一个好的算法必须要有合适的数据结构加以实现,才能保证算法的优越性。课程设计实际上就是程序的集合,是数据结构和算法方面的综合应用,课程设计不仅仅是考验我们的编程,对语言的学习能力,更主要的是培养我们对系统软件开发的方法的学习和团队合作能力的考验。当然,课程设计的意义并不是完全局限于此,每个人在课程设计中都可以得到不同的锻炼。本次课程设计的题目是实验选课系统。

    主要任务:1实验选课系统分为教师,学生及系统管理员三类用户,学生的功能包括选课,查寻实验信息等,教师的功能包括考勤,学生实验成绩录入,查寻实验信息等。管理员的功能包括新建教师,学生账户,设定实验课程信息(设定实验时间,地点,任课教师)。2、管理员可对教师,学生及实验课程信息进行修改;教师可对任课的考勤,成绩进行修改;学生可以对自己选修的课程重选,退选。3、管理员可删除教师,学生及实验课程信息。4、教师可查询所任课程的学生名单,实验时间,考勤及实验成绩,并可按成绩分数段进行统计;学生可查寻所学课程的实验时间,教师名单;管理员具有全系统的查寻功能。

    本次设计采用了SQL Sever2008VS2010等软件实现系统。


    1 需求分析

    系统用户分为三类:学生、教师、管理员;

    学生有选课、退选、查询成绩和课程信息、教师名单等功能。

    教师有添加成绩,查询学生名单和课程信息、统计、考勤等功能。

    管理员具有全系统的使用功能。

    1.1 系统分析

    实验选课系统针对不同的用户,对系统有着不同的使用权限,因此要求系统有密码登录功能。

    1.2 用户需求

    l  实验选课系统分为教师,学生及系统管理员三类用户,学生的功能包括选课,查寻实验信息等,教师的功能包括考勤,学生实验成绩录入,查寻实验信息等。管理员的功能包括新建教师,学生账户,设定实验课程信息(设定实验时间,地点,任课教师)。

    l  管理员可对教师,学生及实验课程信息进行修改;教师可对任课的考勤,成绩进行修改;学生可以对自己选修的课程重选,退选。

    l  管理员可删除教师,学生及实验课程信息。

    l  教师可查询所任课程的学生名单,实验时间,考勤及实验成绩,并可按成绩分数段进行统计;学生可查寻所学课程的实验时间,教师名单;管理员具有全系统的查寻功

     

     

     

     

     

     

     

     

    2 概要设计  

    2.1系统流程图

    2-1 系统流程图

    2.2 系统功能模块设计

    系统主要功能如下所示:



    2-2 系统功能模块

     

     

    2.3 系统总体设计

    实验选课系统分为教师,学生管理员三个功能模块。

    学生模块:选课、查寻实验信息、教师名单等功能。

    教师模块:考勤、成绩统计、学生实验成绩录入、查寻实验信息、所任课程的学生名单等功能。

    管理员模块:具有全系统的查询、更新功能。

    3 数据库设计

    3.1 概念模型设计

    3.1.1 设计原理

    通过对系统的总体结构的把握,采用自顶向下和自底向上像结合的混合策略,先采用自顶下策略设计出全局概念结构,再使用自底向上的方法设计出各局部概念结构。

    3.1.2 概念模型

    经过对实验选课系统所涉及到的数据进行分析,得到如下的实体:

    (1)    学生:属性包括学号、姓名、密码。

    (2)    课程:属性包括课程号、课程名称、课程信息(包括上课时间、上课地点、上课教师)。

    (3)    教师:职工号、教师姓名、密码。

    (4)    管理员:管理员编号、管理员姓名、密码。

    联系有:

    (1)    考勤:表示教师、实验课程、学生之间的关系。它有属性:状态

    (2)    选课:表示学生与实验课程之间的关系。它有属性:成绩。

    所设计的概念模型(E-R图)

                                
                                          图3-1 系统E-R

                         

        图 3-2 管理员分E-R

                               

    3-3 学生分E-R

     



    图 3-4 教师分E-R

     



    图 3-5 实验课程分E-R

     

     

    3.2 逻辑结构设计

    3.2.1 将实体转换为关系模式

    S(Sno,Sname,password)

    C(Cno,Cname,Ctine,Cplace,Tno)

    T(Tno,Tname,password)

    A(Ano,Aname,password)

    3.2.2将联系转换为关系模式

    SC(Sno,Cno,grade)

    TCS(Tno,Cno,Sno,status)

    3.3 物理结构设计

    3.3.1  基本表设计

    1、学生表:

    3-1 职工信息表

    字段名

    字段描述

    字段类型

    备注

    Sno

    学号

    Char(10)

    主键

    Sname

    姓名

    Char(10)

    password

    密码

    Char(10)

     

    创建学生表的SQL语句如下:

    Create table S

    (

    Sno char(10) primary key,

    Sname char(10),

    Password char(10)

    );

    2、教师表:

    3-2 教师信息表

    字段名

    字段描述

    字段类型

    备注

    Tno

    职工号

    Char(10)

    主键

    Tname

    教师姓名

    Char(10)

    password

    密码

    Char(10)

     

    创建教师表的SQL语句如下:

    Create table T

    (

    Tno char(10) primary key,

    Tname char(10),

    Password char(10)

    );

     

    3、管理员表:

    3-3 管理员信息表

    字段名

    字段描述

    字段类型

    备注

    Ano

    管理员编号

    Char(10)

    主键

    Aname

    姓名

    Char(10)

    password

    密码

    Char(10)

     

    创建管理员表的SQL语句如下:

    Create table A

    (

    Ano char(10) primary key,

    Aname char(10),

    Password char(10)

    );

     

    4、实验课程表:

    3-4 实验课程信息表

    字段名

    字段描述

    字段类型

    备注

    Cno

    课程号

    Char(10)

    主键

    Cname

    课程名称

    Char(20)

    Ctime

    上课时间

    Char(20)

    Cplace

    上课地点

    Char(10)

    Tno

    任课教师

    Char(10)

    T表外键

     

    创建实验课程表的SQL语句如下:

    Create table C

    (

    Cno char(10) primary key,

    Cname char(20),

    Ctime char(20),

    Cplace char(10),

    Tno char(10) foreign key references T(Tno)

    );

     

    5、学生选课表:

    3-5 学生选课信息表

    字段名

    字段描述

    字段类型

    备注

    Sno

    学号

    Char(10)

    主键

    Cno

    课程号

    Char(10)

    主键

    grade

    成绩

    Int

     

    创建学生选课表的SQL语句如下:

    Create table SC

    (

    Sno char(10) foreign key references S(Sno),

    Cno char(10) foreign key references S(Sno),

    grade int,

    primary key(Sno,Cno)

    );

    6、考勤表:

    3-6 考勤信息表

    字段名

    字段描述

    字段类型

    备注

    Tno

    职工号

    Char(10)

    主键

    Cno

    课程号

    Char(20)

    主键

    Sno

    学号

    Char(20)

    主键

    status

    状态

    Char(10)

    创建考勤表的SQL语句如下:

    Create table TCS 

    (

    Tno char(10) foreign key references T(Tno),

    Cno char(10) foreign key references S(Sno),

    Sno char(10) foreign key references S(Sno),

    status char(10),

    primary key(Tno,Cno,Sno)

    );

     

    4 程序模块设计

    4.1 开发环境及数据库连接

    本系统使用VS2010编程环境编写,使用SQL Sever (SQLEXPRESS)数据库,基于JFrame窗体设计,采用ADO.NET数据库访问技术。

    4.2 学生模块设计

    4.2.1设计思路

    根据任务书的内容,明确学生模块需要实现的功能,根据功能使用不同的方法设计不同的子模块。

    4.2.2实现方法(以程序流程图或伪码表示 )

    学生模块代码:

    private void 学生选课ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new Sxuanke().Show();

    }

    private void 已选课程ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new Syixuan().Show();

    }

     

     

    private void 查询实验信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectshiyan().Show();

    }

    private void 教师名单ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new Tmingdan().Show();

     }

    private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         this.Close();

         new login().Show();

    }

    4.3教师模块设计

    4.3.1设计思路

    根据任务书的内容,明确教师模块需要实现的功能,根据功能使用不同的方法设计不同的子模块。

    4.2.2实现方法(以程序流程图或伪码表示 )

    private void 录入成绩ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new gradeAdd().Show();

    }

    private void 查询实验课程信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectshiyan().Show();

    }

    private void 学生名单ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new xueshengmingdan().Show();

    }

    private void 考勤ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new kaoqing().Show();

    }

    private void 统计ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new tongji().Show();

    }

    private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         this.Close();

         new login().Show();

    }

    4.4 管理员模块设计

    4.4.1设计思路

    根据任务书的内容,明确管理员模块需要实现的功能,根据功能使用不同的方法设计不同的子模块。

    4.2.2实现方法(以程序流程图或伪码表示 )

    private void 添加学生用户ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new AddS().Show();

    }

    private void 添加教师用户ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new AddT().Show();

    }

    private void 添加实验课程信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new AddC().Show();

    }

    private void 学生信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectS().Show();

    }

    private void 教师信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectT().Show();

    }

    private void 实验课程信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectC().Show();

     }

    private void 学生选课信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectSC().Show();

    }

    private void 考勤信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectTCS().Show();

    }

     

    private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         this.Close();

         new login().Show();

    }

    5.系统测试

    5.1测试环境

    系统测试的时候主要是黑盒测试,进行功能的验证。

    工具:Windows 10 、VS2010SQL Sever

    5.2 测试用例及结果

    5.2.1 界面测试

    测试界面是否整洁美观,人机对话是否友好,检查所有的页面是否能够正确的显示,每个页面的风格是否一致,界面是否有错别字,页面每一个链接是否有对应的界面,页面控件和操作按钮的位置是否合理,界面中的下拉列表的值是否正确,是否有重复的值。

    界面测试结果,界面整洁美观,界面友好,界面风格一致,无错别字,控件按钮位置合适易于操作,输入框、下拉列表等显示正确。

    5.2.2功能测试

    1、登录测试

     



    5-1管理员登录测试1



    5-2登录失败测试

     




    学生登录测试



    查询结果



       

    通过本次数据库课程设计,对数据库的使用有了更深的了解,对于数据库的设计过程和方法有了更全面的认识。当然,本次课程设计使用的是数据库语言,对这门语言也有了初步的认识。在完成系统的过程中,让我认识到了自己的不足,自己在项目综合实训方面还比较欠缺。本次课程设计完成了任务书的全部内容,系统的详细设计还有欠缺,系统界面还有待完善。对数据库安全的方面了解甚少,以至于不知道怎样去维护,在数据库的设计方面花了很多时间,但是,有些问题还没有考虑进去。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    参考文献

    1]梁勇JAVA语言程序设计(基础篇)第十版,机械工业出版社

    2Bain T. SQL server 2008数据仓库与Analysis Services. 中国电出版社  

    3周龙骧.《数据库管理系统实现技术》.中国地质大学出版社

     

    展开全文
  • 大学java课程设计-简单五子棋前言效果图课设要求五子棋介绍五子棋介绍游戏玩法系统需求分析系统的设计与实现项目工程结构运行环境代码设计 前言 第一次写博客,不知道写些什么,就打算记录自己在大学期间的课程设计...

    前言

    第一次写博客,不知道写些什么,就打算记录自己在大学期间的课程设计。在大学期间学过几门编程语言,这篇文章记录了大学自己写的第一个java小程序。

    效果图

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    课设要求

    通过课设熟悉Java的GUI图形界面设计、Java编程基础知识和面向对象编程技术。

    五子棋介绍

    五子棋介绍

    五子棋是起源于中国古代的传统黑白棋种之一。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源远流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。

    游戏玩法

    五子棋规则:棋盘采用15条横线×15条坚线组成交叉的每个点都可以放棋。
    游戏分黑白两方,每局由规定黑方先行。黑方玩家移动鼠标在棋盘中点击行棋。当黑方行棋完毕,转由白方行棋。同色棋子在棋盘上形成横、竖、斜形成 “五子相连”则获胜。如果弃权,则判为输。

    系统需求分析

    五子棋游戏的基本功能如下:

    1. 下棋功能:此功能是五子棋的基本功能之一,主要是实现了鼠标点击的棋盘位置出现棋子
    2. 悔棋功能:下棋时下错棋子,则可以通过这个功能来取消下错棋子的步骤,从而达到悔棋的效果。
    3. 重新开局功能:当其中一个玩家无法继续完成一场游戏,或者当判断胜负之后棋盘扔保留的情况,可以通过这个功能来实现重新开新的一局游戏。

    系统的设计与实现

    项目工程结构

    在这里插入图片描述

    运行环境

    Eclipse4.7、jre1.8

    代码设计

    Chess.java

    package impl;
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RadialGradientPaint;
    import java.awt.RenderingHints;
    
    public class Chess {
    	Chessboard cp; 	//棋盘
    	int row;		//横坐标
    	int col;		//纵坐标
    	Color color;	//棋子颜色
    
    	public Color getColor() {
    		return color;
    	}
    
    	public void setColor(Color color) {
    		this.color = color;
    	}
    
    	public int getRow() {
    		return row;
    	}
    
    	public void setRow(int row) {
    		this.row = row;
    	}
    
    	public int getCol() {
    		return col;
    	}
    
    	public void setCol(int col) {
    		this.col = col;
    	}
    
    	public static final int BANJING = 18;
    
    	public Chess(Chessboard cp, int col, int row, Color color) {
    		this.cp = cp;
    		this.col = col;
    		this.row = row;
    		this.color = color;
    	}
    
    	//画棋子
    	public void draw(Graphics g) {
    		//定义棋子圆心
    		int xPos = col * 20 + 15;
    		int yPos = row * 20 + 15;
    
    		Graphics2D g2d = (Graphics2D) g;
    
    		RadialGradientPaint paint = null;
    		Color[] c = { Color.WHITE, Color.BLACK };
    		float[] f = { 0f, 1f };
    		int x = xPos + 3;
    		int y = yPos - 3;
    		if (color == Color.WHITE) {
    			paint = new RadialGradientPaint(x, y, BANJING * 3, f, c);
    		} else {
    			paint = new RadialGradientPaint(x, y, BANJING, f, c);
    		}
    		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    		g2d.setPaint(paint);
    		g2d.fillOval(xPos - BANJING / 2, yPos - BANJING / 2, BANJING, BANJING);
    	}
    }
    
    

    Chessboard.java

    package impl;
    
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    
    public class Chessboard extends JPanel {
    	public static final int MARGIN = 15;
    	public static final int SPAN = 20;
    	public static final int ROWS = 19;
    	public static final int COLS = 19;
    	Chess[] chessList = new Chess[19 * 19]; 
    	int chessCount = 0;
    	boolean iso = false;
    	boolean isBlack = true;
    	String message = "黑棋先下";
    
    	public Chessboard() {
    		this.addMouseListener(new MouseAdapter() {
    
    			@Override
    			public void mousePressed(MouseEvent e) {
    				// TODO Auto-generated method stub
    				if (iso) {
    					return;
    				}
    				int col, row;
    				col = (e.getX() - 15 + 10) / 20;
    				row = (e.getY() - 15 + 10) / 20;
    
    				if (col > 19 || col < 0 || row > 19 || row < 0) {
    					return;
    				} else {
    					if (haschess(col, row)) {
    						return;
    					} else {
    						Color c = Color.BLACK;
    						if (isBlack) {
    							c = Color.BLACK;
    							message = "轮到白棋";
    						} else {
    							c = Color.WHITE;
    							message = "轮到黑棋";
    						}
    						Chess cc = new Chess(Chessboard.this, col, row, c);
    						chessList[chessCount++] = cc;
    						repaint();
    
    						if (isWin(col, row)) {
    							if (c == Color.BLACK) {
    								JOptionPane.showMessageDialog(Chessboard.this, "黑棋获胜!");
    							} else if (c == Color.WHITE) {
    								JOptionPane.showMessageDialog(Chessboard.this, "白旗获胜!");
    							}
    							iso = true;
    							return;
    						}
    						isBlack = !isBlack;
    					}
    				}
    			}
    		});
    	}
    
    	@Override
    	public void paint(Graphics e) {
    		e.setColor(Color.ORANGE);
    		e.fillRect(0, 0, 410, 460);
    		e.setColor(Color.black);
    		for (int i = 0; i < 20; i++) {
    			e.drawLine(MARGIN, MARGIN + SPAN * i, MARGIN + 19 * 20, MARGIN + 20 * i);
    		}
    		for (int i = 0; i < 20; i++) {
    			e.drawLine(15 + SPAN * i, 15, 15 + SPAN * i, 15 + 19 * 20);
    		}
    
    		e.fillRect(15 + 3 * 20 - 2, 15 + 3 * 20 - 2, 5, 5);
    		e.fillRect(15 + 9 * 20 - 2, 15 + 3 * 20 - 2, 5, 5);
    		e.fillRect(15 + 15 * 20 - 2, 15 + 3 * 20 - 2, 5, 5);
    		e.fillRect(15 + 3 * 20 - 2, 15 + 9 * 20 - 2, 5, 5);
    		e.fillRect(15 + 9 * 20 - 2, 15 + 9 * 20 - 2, 5, 5);
    		e.fillRect(15 + 15 * 20 - 2, 15 + 9 * 20 - 2, 5, 5);
    		e.fillRect(15 + 3 * 20 - 2, 15 + 15 * 20 - 2, 5, 5);
    		e.fillRect(15 + 9 * 20 - 2, 15 + 15 * 20 - 2, 5, 5);
    		e.fillRect(15 + 15 * 20 - 2, 15 + 15 * 20 - 2, 5, 5);
    
    		Graphics2D e2 = (Graphics2D) e;
    		e2.setStroke(new BasicStroke(3f));
    		e2.drawLine(10, 10, 10, 400);
    		e2.drawLine(10, 10, 400, 10);
    		e2.drawLine(400, 10, 400, 400);
    		e2.drawLine(10, 400, 400, 400);
    
    		for (int i = 0; i < chessCount; i++) {
    			chessList[i].draw(e);
    		}
    		e.setFont(new Font("黑体", Font.BOLD, 15));
    		e.drawString("游戏提示:" + message, 20, 420);
    	}
    
    	private boolean haschess(int col, int row) {
    		boolean result = false;
    		for (int i = 0; i < chessCount; i++) {
    			Chess cc = chessList[i];
    			if (cc != null && cc.getCol() == col && cc.getRow() == row) {
    				return true;
    			}
    		}
    		return result;
    	}
    
    	private boolean haschess(int col, int row, Color c) {
    		Boolean result = false;
    		for (int i = 0; i < chessCount; i++) {
    			Chess ch = chessList[i];
    			if (ch != null && ch.getCol() == col && ch.getRow() == row && ch.getColor() == c) {
    				result = true;
    			}
    		}
    		return result;
    	}
    
    	private boolean isWin(int col, int row) {
    		boolean result = false;
    		int CountCh = 1;
    		Color c = null;
    		if (isBlack) {
    			c = Color.BLACK;
    		} else {
    			c = Color.WHITE;
    		}
    
    		// 水平向左
    		for (int x = col - 1; x >= 0; x--) {
    			if (haschess(x, row, c)) {
    				CountCh++;
    			} else {
    				break;
    			}
    		}
    		// 水平向右
    		for (int x = col + 1; x <= 19; x++) {
    			if (haschess(x, row, c)) {
    				CountCh++;
    			} else {
    				break;
    			}
    		}
    		// 水平取胜
    		if (CountCh >= 5) {
    			result = true;
    			message = "游戏结束";
    		} else {
    			result = false;
    			CountCh = 1;
    		}
    		// 竖直向上
    		for (int y = row - 1; y >= 0; y--) {
    			if (haschess(col, y, c)) {
    				CountCh++;
    			} else {
    				break;
    			}
    		}
    		// 竖直向下
    		for (int y = row + 1; y <= 19; y++) {
    			if (haschess(col, y, c)) {
    				CountCh++;
    			} else {
    				break;
    			}
    		}
    		// 竖直取胜
    		if (CountCh >= 5) {
    			result = true;
    			message = "游戏结束";
    		} else {
    			result = false;
    			CountCh = 1;
    		}
    		// 斜向右上
    		for (int x = col + 1, y = row - 1; x <= 19 && y >= 0; x++, y--) {
    			if (haschess(x, y, c)) {
    				CountCh++;
    			} else {
    				break;
    			}
    		}
    		// 斜向左下
    		for (int x = col - 1, y = row + 1; x >= 0 && y <= 19; x--, y++) {
    			if (haschess(x, y, c)) {
    				CountCh++;
    			} else {
    				break;
    			}
    		}
    		// 斜向取胜
    		if (CountCh >= 5) {
    			result = true;
    			message = "游戏结束";
    		} else {
    			result = false;
    			CountCh = 1;
    		}
    		// 斜向左上
    		for (int x = col - 1, y = row - 1; x >= 0 && y >= 0; x--, y--) {
    			if (haschess(x, y, c)) {
    				CountCh++;
    			} else {
    				break;
    			}
    		}
    		// 斜向右下
    		for (int x = col + 1, y = row + 1; x <= 19 && y <= 19; x--, y--) {
    			if (haschess(x, y, c)) {
    				CountCh++;
    			} else {
    				break;
    			}
    		}
    		// 斜向取胜
    		if (CountCh >= 5) {
    			result = true;
    			message = "游戏结束";
    		} else {
    			result = false;
    			CountCh = 1;
    		}
    
    		return result;
    	}
    
    	public void againGame() {
    		for (int i = 0; i < chessList.length; i++) {
    			chessList[i] = null;
    		}
    		chessCount = 0;
    		iso = false;
    		message = "开局黑棋先手";
    		repaint();
    	}
    
    	public void huiqi() {
    		if (iso) {
    			return;
    		}
    		chessList[chessCount - 1] = null;
    		chessCount--;
    		if (isBlack) {
    			message = "白棋悔棋";
    		} else {
    			message = "黑棋悔棋";
    		}
    		isBlack = !isBlack;
    		repaint();
    	}
    }
    
    

    GameMain.java

    package impl;
    
    import java.awt.BorderLayout;
    import java.awt.Button;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    
    public class GameMain extends JFrame {
    
    	Chessboard qpan;
    
    	public GameMain() {
    		qpan = new Chessboard();
    		// 创建菜单栏
    		JMenuBar menubar = new JMenuBar();
    
    		JMenu menu = new JMenu("游戏(G)");
    		JMenuItem item1 = new JMenuItem("新游戏");
    		JMenuItem item2 = new JMenuItem("退出");
    		menu.add(item1);
    		menu.addSeparator();
    		menu.add(item2);
    		menubar.add(menu);
    
    
    		// 按钮
    		JPanel btn = new JPanel();
    		btn.setLayout(new GridLayout(10, 1));
    		Button btn1 = new Button("重新开始");
    		Button btn2 = new Button("悔棋");
    		btn.add(btn1);
    		btn.add(btn2);
    
    		// 窗口设置
    		BorderLayout bl = new BorderLayout();
    		this.setTitle("五子棋");
    		this.setSize(480, 490);
    		this.setLocationRelativeTo(null);
    		this.setVisible(true);
    		this.setResizable(false);
    		this.add(menubar, bl.NORTH);
    		this.add(qpan, bl.CENTER);
    		this.add(btn, bl.EAST);
    
    		// 按钮事件
    		btn1.addMouseListener(new MouseAdapter() {
    
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				// TODO Auto-generated method stub
    				qpan.againGame();
    			}
    
    		});
    		//悔棋
    		btn2.addMouseListener(new MouseAdapter() {
    
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				// TODO Auto-generated method stub
    				qpan.huiqi();
    			}
    
    		});
    
    		// 新游戏
    		item1.addActionListener(new ActionListener() {
    
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				qpan.againGame();
    			}
    		});
    
    		// 退出
    		item2.addActionListener(new ActionListener() {
    
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				System.exit(0);
    			}
    		});
    
    	}
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		new GameMain();
    	}
    
    }
    
    展开全文
  • JAVA课程设计报告:记事本的设计与实现 首先声明:  由于正在学习Java,正好找到了关于记事本的许多资料,所以就参考网上的课程设计和源代码,自己翻版一个记事本小程序,目的只在于熟悉应用Java中所学知识点.总结一下...

                                           JAVA课程设计报告:记事本的设计与实现

    首先声明:
         由于正在学习Java,正好找到了关于记事本的许多资料,所以就参考网上的课程设计和源代码,自己翻版一个记事本小程序,目的只在于熟悉应用Java中所学知识点.总结一下所有相关的知识点,方便自己和他人查看和学习.

    一:课程设计:

    1.总体框架:
           包括概要,前言,需求分析,概要设计,详细设计,系统测试和小结.

    2.目录:

    摘要1

    第1章  前言

        1.1 研究背景

        1.2 开发意义

        1.3 本文的组织结构

    第2章 需求分析

            2.1系统功能分析

            2.2 设计目标

    第3章 概要设计

    第4章 详细设计

           4.1文件模块的详细设计

           4.2编辑模块的详细设计

           4.3格式模块的详细设计

    第5章  系统测试

           5.1 程序主界面

           5.2文件界面

           5.3编辑菜单

    第6章 小 结

    参考文献


    3.主要部分的内容展示:

     

    (1).第2章 需求分析

             系统的需求分析根据记事本建立的一般流程,分析了系统的具体功能,对系统做了总体的规划,提出了系统的设计目标,介绍了系统的开发及运行环境。


    (2).第3章 概要设计

                                

             

                                      图3.1主模块

       

                         图3.2 实现文件功能的模块

                 

                         图3.3 文档编辑模块

                   

     

                         图3.4  格式设置模块


    (3).第4章 详细设计

     

    4.1文件模块的详细设计

            4.1.1新建模块的详细设计:

           用户选择新建后,先检测当前的文本内容是否修改过。如果未修改过,则新建一个空文本文档。如果修改过,先弹出提示保存对话框,提示用户是否保存,如果选择“是”,先保存当前文本内容,再新建一个空文本文档。如果选择“否”,则直接新建一个空文本文档。

             4.1.2打开模块的详细设计

        用户选择打开后,先检测当前的文本内容是否修改过。如果未修改过,则打开选择的文本文件。如果修改过,先弹出提示保存对话框,提示用户是否保存,如果选择“是”,先保存当前文本内容,再打开文本文件。如果选择“否”,则直接打开文件。

                

                     图4.2  打开模块流程图

             4.1.3保存、另存模块的详细设计

             当用户选择保存或另存时,先检测文件内容是否修改过。如果修改过,保存对文档的修改。如图4.3所示

                              

    图4.3 保存、另存模块流程图

         4.1.4退出模块的详细设计

        当用户选择退出时,弹出提示保存对话框,询问用户是否保持。如果选择“是”,先保存文档,再退出程序。如果选择“否”,直接退出程序。如图4.4所示:

                                     

                      图4.4  退出模块流程图


    4.2编辑模块的详细设计

            4.2.1撤销模块的详细设计

            打开一个文本文档,当用户选择编辑或右键弹出菜单中的撤消操作后,判断一个文本是否已被修改,若已修改,撤消上一步的操作,否则不进行任何操作。如图4.5所示:

           4.2.2剪切模块的详细设计

            打开一个文本文档,当用户选择编辑菜单或右键弹出菜单中的剪切操作后,判断一个文本是否被选中,若已选中,删除选中的文字,并将选中的文字传输到系统剪切板中,否则不进行任何操作。如图4.6所示:

     4.2.3复制模块的详细设计

         打开一个文本文档,当用户选择编辑菜单或右键弹出菜单中的复制操作后,判断一个文本是否被选中,若已选中,将选中的文字传输到系统剪切板中,否则不进行任何操作。如图4.7所示:

                                                          

                                                       图4.6剪切模块流程图                                                                         

    图4.7复制模块流程图

     

          4.2.4粘贴模块的详细设计

             运行程序,打开一个文本文档,在菜单栏上选中编辑菜单或者在文档中右键鼠标菜单,选中“粘贴”,判断文本文档是否进行了复制和剪切操作(即判断系统剪切板是否有内容),如果有就将剪切板的内容粘贴到光标处,没有就继续执行其他操作步骤。如图4.8所示:

         4.2.5删除模块的详细设计

             运行程序,打开一个文本文档,在菜单栏上选中编辑菜单或者在文档中右键鼠标菜单选中“删除”,程序判断文本文档是否有已选中的内容,如果有就将选中的内容删除掉,没有就执行其他操作。如图4.9所示:


                                     




    展开全文
  • Java课程设计完整版

    2015-07-05 22:32:30
    补充之前的java课程设计,不仅仅只有方法,更加人性化的在控制台给予提示输入,加入了键盘输入的代码 下面是源码,很长的前两个类仅仅是判断是多了equals()方法,不知道为什么,加入了键盘输入方法就必须这么判断,...
  • 点击下载:  代码:StudentSystem  数据库名:db_student  数据表:tb_student    tb_class    admin   转载于:https://www.cnblogs.com/daxiang2008/p/11090251.html...
  • Java Web课程设计

    2019-07-02 20:43:44
    为时两周的Java Web课程设计,使用目前流行的Spring Boot后端框架,Layui前端框架,做了一个业务逻辑较简单,具有前后台的图书借阅管理系统,还有很多很多很多的不足,该项目已放在github上,欢迎交流,批评指正~~~ ...
  • java课程设计登陆界面

    2015-06-25 02:03:26
    java课程设计需要一个登陆界面,要包含登陆和注册,要最简单的代码,也要好理解
  • 采用Java+前端+servlet+mysql设计的图书馆管理系统。 源代码:https://download.csdn.net/download/lk888666/11892227 可以实现注册发送手机验证码,借书发送邮箱通知。 欢迎访问个人博客点击访问 可回答问题...
  • 这是我在大二上学期的java课程设计,我的课程设计是做一个简易记事本。其中有这些要求:1. 摸拟windows操作系统中的记事本软件,开发一款简易记事本2. 具有新建文件、保存文件、复制和粘贴功能3. 可以根据自身能力...
  • 具体到我的下载页下载(开源)
  • import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JPanel; //主函数 public class test01 { public static void main(String[] args) { MyFrame01 my=new MyFrame01(); ...
  • java课程设计——租房管理系统,实现代码和主要思路。 效果图 数据库设计 admin表 租房管理系统需要有人管理,使用者拥有管理员账号。管理员账号拥有查看房间,增加房间,出租房间,结算租金,增加租金,查看...
  • import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.sql.*; import javax.swing.table.*; class allstudent extends JFrame implements Act...
  • #Java课程设计—日历记事本 ##日历记事本 要求:有日程提醒功能的日历(数据库可采用Access、SQL Server或者MySQL)。 (1)显示信息:用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。 ...
  • JAVA课程 设 计 报 告  1206401-18 瞿杰 一、设计时间  2013年6月 24日-----6月28日 二、设计地点  湖南城市学院实验楼计算机506机房 三、设计目的  1、巩固学习VB基础知识方面的基本算法,进一步熟悉...
  • 课程设计感想
  • import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MoveBox extends JFrame implements KeyListener { MovePanel drawing = new MovePanel(); int x, y, m, n; public ...
1 2 3 4 5 ... 20
收藏数 68,209
精华内容 27,283