作业代码:https://coding.net/u/liyi175/p/Dianti/git

伙伴成员:石开洪 http://www.cnblogs.com/shikaihong/(博客)

这次的作业是一个结对作业,我对我的Partner比较熟悉,信任和放心,而他对我也是如此,这对我们顺利完成项目有很大的有利影响。

我们一开始比较默契的是都想到用Java语言进行编写代码,我认为以后工作可能对Java的优势比较大,另外我对Java,Eclipse也比较熟悉,于是

我们就想通过这次作业提升一下自己的Java编程的能力。

好了,下面介绍我们的代码——

可以看到,我们设计了一共6个类,其中电梯有四个类,分别对应一号(firstdt),二号(seconddt),三号(thirddt),四号(forth)电梯,Show类是具体的调度程序,

而xianshi类则是界面设计及其响应组件的类。

下面来看界面——

由于我的原因,要准备校园招聘的面试,所以时间比较紧 ,做的界面不是那么好看,此外电梯内部按钮的开关门也没有加,而在电梯类内部设计了超重,开门,关门函数,但由于时间关系,就没有具体写入进系统,希望以后有时间时能完善一下这个模拟程序吧。

再说这个界面,我们用的组件全部是按钮组件,可能有人会问,为什么外部显示也要用按钮,我想说当时突然的一个想法(利用按钮的透明与实化的变化来实现模拟的电梯运行状态)占据了我的头脑,于是我就这样做了......但是我选的Java语言 和按钮组件对以后埋下了一个问题,后文再说......

接下来介绍具体的调度系统,我个人认为,一个按钮控制四部电梯这种情况及其不合理......我认为实际情况最好是设置成一个按钮控制一部或两部。因此我的调度写的也比较简单。

上代码——

  1. if(num%2==0) //当前楼层为双层,第二部电梯无法停靠
  2. {
  3. int a1=f.getzt(); //确定三部电梯目前的状态
  4. int a3=t.getzt();
  5. int a4=f2.getzt();
  6. int b1=f.getfloor(); //
  7. int b2=t.getfloor(); //
  8. int b3=f2.getfloor(); //
  9. int b7=sd.getfloor();//
  10.  
  11. if(a1==0)
  12. {
  13.  
  14. diaodu1(ck,num,b8); //调度第一部电梯
  15. }
  16.  
  17. if(a1!=0&&a3==0&&a4!=0)
  18. {
  19. diaodu3(ck,num,b4);
  20. }
  21. if(a1!=0&&a3==0&&a4==0)
  22. {
  23. diaodu3(ck,num,b4); //调度第三部电梯
  24.  
  25. }
  26. if(a1!=0&&a3!=0&&a4==0)
  27. {
  28. diaodu4(ck,num,b5); //调度第四部电梯
  29.  
  30. }
  31. if(a1!=0&&a3!=0&&a4!=0)
  32. {
  33. if(a1==2&&b1>num) //三个下降的电梯判断楼层是否在当前楼层之上
  34. {
  35. diaodu1(ck,num,b8);
  36. }
  37. else if(a3==2&&b2>num)
  38. {
  39. diaodu3(ck,num,b4);
  40. }
  41. else if(a4==2&&b3>num)
  42. {
  43. diaodu4(ck,num,b5);
  44. }
  45. else {
  46. a1=f.getzt(); //确定三部电梯目前的状态
  47. a3=t.getzt();
  48. a4=f2.getzt();
  49. while(a1!=0&&a4!=0&&a3!=0)
  50. {
  51. try{
  52. Thread.sleep(3000);
  53. } catch (InterruptedException e) {
  54. // TODO Auto-generated catch block
  55. e.printStackTrace();
  56. }
  57. a1=f.getzt(); //确定三部电梯目前的状态
  58. a3=t.getzt();
  59. a4=f2.getzt();
  60. }
  61. if(a1==0)
  62. {
  63. diaodu1(ck,num,b8);
  64. }else if(a1!=0&&a3==0&&a4!=0)
  65. {
  66. diaodu3(ck,num,b4);
  67. }else if(a1!=0&&a3!=0&&a4==0)
  68. {
  69. diaodu4(ck,num,b5);
  70. }else if(a1==0&&a3==0&&a4==0)
  71. {
  72. diaodu1(ck,num,b8);
  73. }
  74.  
  75. }
  76.  
  77. }
  78. }

这是一个楼层为双层的并且按下的是向下状态的调度,首先要接受四部电梯的正在运行的状态,当前楼层,之后再进行调度。

这是调度函数。(请忽略f.getgate(),并没有具体设计开门,关门,超重等问题......)

  1. public void diaodu1(JButton ck,int num,JButton b8[])
  2. {
  3.  
  4. f.setfloor(ck,num,b8);
  5. f.getgate(false);
  6.  
  7. }
  8.  
  9. public void diaodu2(JButton ck,int num,JButton b[])
  10. {
  11.  
  12. sd.setfloor(ck,num,b);
  13.  
  14. sd.getgate(false);
  15.  
  16. }
  17. public void diaodu3(JButton ck,int num,JButton b4[])
  18. {
  19.  
  20. t.setfloor(ck,num,b4);
  21.  
  22. t.getgate(false); //开门
  23.  
  24. }
  25. public void diaodu4(JButton ck,int num,JButton b5[])
  26. {
  27.  
  28. f2.setfloor(ck,num,b5);
  29.  
  30. f2.getgate(false);
  31.  
  32. }

单层的与其类似。

然后是类内部的代码——

  1. public void goup(JButton b8[]){
  2.  
  3. try{
  4. Thread.sleep(2000);
  5. } catch (InterruptedException e1) {
  6. // TODO Auto-generated catch block
  7. e1.printStackTrace();}
  8. floor++;
  9. b8[floor].setContentAreaFilled(true);
  10. b8[floor-1].setContentAreaFilled(false);
  11.  
  12. }
  13.  
  14. public void godown(JButton b8[]){
  15. try{
  16. Thread.sleep(2000);
  17. } catch (InterruptedException e) {
  18. // TODO Auto-generated catch block
  19. e.printStackTrace();
  20. }
  21.  
  22. floor--;
  23. b8[floor].setContentAreaFilled(true);
  24. b8[floor+1].setContentAreaFilled(false);
  25.  
  26. }
  27. public void setfloor(JButton ck,int goal,JButton b8[]) {
  28.  
  29. Thread thread=new Thread(){
  30.  
  31. @Override
  32. public void run(){
  33.  
  34. while(floor!=goal)
  35. {
  36. if(floor<goal)
  37. {
  38.  
  39. goup(b8);
  40. zt=1;
  41.  
  42. }
  43. else
  44. {
  45. godown(b8);
  46. zt=2;
  47. }
  48. }
  49. zt=0;
  50. ck.setContentAreaFilled(false);
  51. JOptionPane.showMessageDialog(null, "电梯已经到达该层", "警告", JOptionPane.WARNING_MESSAGE);
  52. JOptionPane.showMessageDialog(null, "当前是一号电梯 ,请选择目的楼层", "电梯提示",JOptionPane.PLAIN_MESSAGE);
  53.  
  54. }
  55. };
  56. thread.start();
  57.  
  58. }

这是主要的代码,执行上下楼的功能,以及按钮的透明,实体的变化。上面我说的问题就出现在这里,我最初设计的时候是只设计了一个线程睡眠放在了goup(),godown()函数里,setfloor()函数里面知识一个简单的循环,并没有线程,目的是想让界面在响应时能一个一个的让按钮变化。但是在测试时呈现的是先执行完了所有循环,最后按钮才一起变化。这个问题令我困扰了很长时间,我去请教了很多人,表示都不明白,我也是在无奈去群里问了一句,虽然得到了几个同学热心的帮助,提供了他们的几种看法,但是并不能解决问题,于是我就上网,看书学习,了解更多的线程方面的问题。最后我才在setfloor()函数里新建了一个内部线程类,利用创建线程来实现了电梯的上下按钮显示。以后就没有什么困难了,顺利的完成了编程。

几张运行效果图——

好了,以上就是我们这次的项目,代码还有待优化,功能有待添加,线程弹出提示框有待设计,我们有还待提升。

 

第四,五周——Java编写的电梯模拟系统(结对作业)的更多相关文章

  1. Java编写的电梯模拟系统《结对作业》

    作业代码:https://coding.net/u/liyi175/p/Dianti/git 伙伴成员:李伊 http://home.cnblogs.com/u/Yililove/ 对于这次作业,我刚 ...

  2. 第五周Java学习总结(补)

    第五周java学习内容(补) 学习内容: File类方法的操作 public String getName() public boolean canRead() public boolean canW ...

  3. 20145304 第五周Java学习报告

    20145304<Java程序设计>第5周学习总结 教材学习内容总结 1.使用try.catch: 如果使用了try.catch,编译时会尝试执行try区块中的程序代码,如果有错误,执行流 ...

  4. 第五周java学习总结

    学号 20175206<Java程序设计>第五周学习总结 教材学习内容总结 6.1 接口 为了克服Java单继承的缺点,Java使用了接口,一个类可以实现多个接口. 使用关键字interf ...

  5. 20175215 2018-2019-2 第五周java课程学习总结

    第六章学习内容 1.接口 使用interface来定义一个接口. 接口体中包含常量的声明(没有变量)和抽象方法两部分.接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是pu ...

  6. 第十五周java实验作业

    实验十五  GUI编程练习与应用程序部署 实验时间 2018-12-6 1.实验目的与要求 (1) 掌握Java应用程序的打包操作: Java程序的打包,程序编译完成后,程序员将.class文件压缩打 ...

  7. 20165319第五周java学习笔记

    教材内容总结 1.String类和StringBuffer类都覆盖了toString方法,都是返回字符串. 所以带不带toString效果是一样的. 2.instanceOf运算符可以用来判断某个对象 ...

  8. 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周

    java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...

  9. 2017-2018-1 JAVA实验站 第四、五周作业

    2017-2018-1 JAVA实验站 第四.五周作业 JAVA实验站小组成员 学号 名字 职务 20162318 张泰毓 组长 20162303 石亚鑫 组员 20162304 张浩林 组员 201 ...

随机推荐

  1. 洛谷P1208

    #include <iostream>#include <algorithm>#include <cstdio>using namespace std; struc ...

  2. 编程算法 - 左旋转字符串 代码(C)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/37689725 左旋转字符串 代码(C) 本文 ...

  3. Spring IOC 之 SmartInitializingSingleton

    使用 实现该接口后,当所有单例 bean 都初始化完成以后, 容器会回调该接口的方法 afterSingletonsInstantiated. 主要应用场合就是在所有单例 bean 创建完成之后,可以 ...

  4. 2298: [HAOI2011]problem a

    Description 一次考试共有n个人参加,第i个人说:"有ai个人分数比我高,bi个人分数比我低."问最少有几个人没有说真话(可能有相同的分数) 这句话的意思就等于是说第i个 ...

  5. Odoo附件传输

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9307319.html  一:odoo后端上传附件 odoo中的ir.attachment模型是附件模型,可以用 ...

  6. pycharm2017自建注册服务器

    root运行: wget http://home.ustc.edu.cn/~mmmwhy/jetbrain.sh && sh ./jetbrain.sh 注意:需要安装screen软件 ...

  7. extern C的用法解析

    1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言,C++保留了一部分过程式语 ...

  8. maven使用及创建项目

    一:简单介绍 他是一个帮我们管理jar,并帮助我们处理jar包依赖. 他是一个我们编译.测试.运行.打包的一键构建. 我们在使用后面的命令的同时,前面的过程也自动执行. 二.仓库的分类: 分本地仓库. ...

  9. rownum与row_number() OVER (PARTITION BY COL1 ORDER BY COL2)

    1)rownum 为查询结果排序.使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序 select rownum n, a.* from ps_user a order by ...

  10. FFT&NTT

    https://winniechen.cn/?p=377 内容有些多,我就不复制了...