我是机械系的学生,老师出课题想让我们用在线网站控制移动机器人~~~如果分到底层我还能如期完工~~~但是老师分课题时不考虑学生实际情况 给予课题为 基于网络控制的移动机器人的用户管理模块~~~各位高手不要吓到~~~~在和老师沟通后,实际内容比较单一~~但对机械系的学生来说实在太难了~~~没学过数据结构和java啊~~~!    具体内容如下:首先用户登陆网站 登陆后(下面的内容是我负责的)用户点击"申请操作",如果这时没有人在队列里,则该用户直接进入操作,并记时5分钟,时间结束或用户自动结束操作后自动退出队列.如果有人正在操作,则排在队伍最后,(据学过一点数据结构的人说这是先进先出的单链表),等待操作,后面的用户依次按申请顺序排队.如果有管理员可以对队列做操作顺序的调整!
    
    我理解后认为这个东西是不是UC的语聊大厅的"抢麦"和"放麦"时排队的东西,老师也要求希望队列能显示在页面上,虽然说只要实现基本功能就行,但是仍然很难,还让我们用jsp来做~~~不知各位是不是常用UC,能不能了解我想要的东西.我把UC的图存在网上让各位高手查询 地址如下 用的我的msn空间
  
http://storage.msn.com/x1pgPj1u42AbK3W5bB7fmPrOD6Y21y3pTWj9UdAPQ-Kg0_O6Py3IUDy7YfL8nTHLO8bS849-qfMPNqU2noPIIt8Hi8slxm2Cp5oj-a8lPwGaYQunS0g2Gz04veJF6sqlDBOBFOjFaM_u6XACc02tZStJw
    
    把"抢麦"改成"申请操作",旁边有个"结束操作",我这样想的对不对啊?    我曾经想过用SQL2000的数据库来排列顺序,但是实际上好象没有用处.也不能显示.后来在天极网上把2005-2000的java贴都看了,找到以下东东
    
    编写一个JAVA的队列类    队列是设计程序中常用的一种数据结构。它类似日常生活中的排队现象,采用一种被称为“先进先出”(LIFO)的存储结构。数据元素只能从队尾进入,从队首取出。在队列中,数据元素可以任意增减,但数据元素的次序不会改变。每当有数据元素从队列中被取出,后面的数据元素依次向前移动一位。所以,任何时候从队列中读到的都是队首的数据。
  根据这些特点,对队列定义了以下六种操作:
  enq(x) 向队列插入一个值为x的元素;
  deq() 从队列删除一个元素;
  front() 从队列中读一个元素,但队列保持不变;
  empty() 判断队列是否为空,空则返回真;
  clear() 清空队列;
  search(x) 查找距队首最近的元素的位置,若不存在,返回-1。  Vector类是JAVA中专门负责处理对象元素有序存储和任意增删的类,因此,用Vector
  可以快速实现JAVA的队列类。
   public class Queue extends java 
  public synchronized void enq(Object x) {
  super.addElement(x);
  } 
  public synchronized Object deq() {
  /* 队列若为空,引发EmptyQueueException异常 */
  if( this.empty() )
  throw new EmptyQueueException();
  Object x = super.elementAt(0);
  super.removeElementAt(0);
  return x;
  } 
  public synchronized Object front() {
  if( this.empty() )
  throw new EmptyQueueException();
  return super.elementAt(0);
  } 
  public boolean empty() {
  return super.isEmpty();
  }
  public synchronized void clear() {
  super.removeAllElements();
  } 
  public int search(Object x) {
  return super.indexOf(x);
  } 
  }  public class EmptyQueueException extends java 
  }
   以上程序在JDK1.1.5下编译通过  这个是找到另一个JAVA实现队列类 
/**
 * Created by IntelliJ IDEA.
 * 用Vector实现队列的数据结构 ,扩展自VECTOR
 * Date: 2005-1-13
 * Time: 15:34:45
 * To change this template use File | Settings | File Templates.
 */
public class Queue extends java.util.Vector {
    public Queue() {
        super();
    }
    /**
     * 插入一个元素到队列末尾
     * @param x
     */
    public synchronized void enq(Object x) {
        super.addElement(x);
    }
    /**
     * 删除队列中一个元素,如果队列为空,则引发EmptyQueueException异常
     * @return
     */
    public synchronized Object deq() {
        if (this.empty())
            throw new EmptyQueueException();
        Object x = super.elementAt(0);
        super.removeElementAt(0);
        return x;
    }
    /**
     * 从队列中读取一个元素,队列保持不变
     * @return
     */
    public synchronized Object front() {
        if (this.empty())
            throw new EmptyQueueException();
        return super.elementAt(0);
    }
    /**
     * 判断队列是否为空,为空返回真,否则返回假
     * @return
     */
    public boolean empty() {
        return super.isEmpty();
    }
    /**
     * 清空队列
     */
    public synchronized void clear() {
        super.removeAllElements();
    }
    /**
     *  查找距队首最近的元素的位置,若不存在,返回-1
     * @param x
     * @return
     */
    public int search(Object x) {
        return super.indexOf(x);
    }
}-------------------------
/**
 * Created by IntelliJ IDEA.
 * Date: 2005-1-13
 * Time: 15:35:42
 * To change this template use File | Settings | File Templates.
 */
public class EmptyQueueException extends java.lang.RuntimeException {
    public EmptyQueueException() {
        super();
    }
}这些东西是不是有用~~~,如果用的话应该怎么用,如果不用它要用什么,怎么编 ,希望各位高手可以贴源码(知道各位都是高人不会被难住)如果有注释也可以让我学习学习.
    
   由于本人确实门外汉只有想法没有实际能力.望各位高手解燃眉之急,除积分赠送(我就100分这么多,各位高手见谅),如要报酬rmb,mop hp,可以加我QQ 18313838 或发信至[email protected] 小弟必涌泉相报~~~

解决方案 »

  1.   

    嘻嘻,我做过队列的调整的你们老师也太牛了,竟然让你们做这样的题目,佩服ING
      

  2.   

    改改java。util。LinkedList就可以了
      

  3.   

    两个都可以用,就是一个同步的问题,不过要自己增加调整队列的方法,来实现改变中间的某个元素的位置去下一个tomcat,写一个登录的jsp页面,提交到一个Servlet,在ServletContext里加上这个队列类,每个登录上去的用户加到这个队列里。计时5分钟的问题不知道如何处理,开一个线程来做??
      

  4.   

    再次置顶~~~谢谢前辈指点迷津~~~
        请问"提交到一个Servlet,在ServletContext中"这个怎么实现~~~意思是不是提取申请的用户的用户名?
        还有就是jsp的计时器怎么做,没有现成的好象~~~线城什么意思
        最后一个问题是如何让这个队列显示在网页上~~~~这个我是死也不明白了~~~
        希望高手踊跃解答~~~凑够100分我就结帐了~~~~我守信誉的~~~~~不过现在给的解决方案给我这个门外汉来说,不解燃眉之急啊~~~~谢谢~~~~~
      

  5.   

    你可以使用jsp的application与java的HashMap 一齐来完成队列.
    import javax.servlet.*;
    每当用户登录的时候,先生成用户对象userObj,
    UserInfo userObj = new UserInfo();
    userObj.id= ....
    userObj.pwd = ...
    ....
    然后从application取得存储队列的ArrayList
    HashMap applyqueue = (HashMap)application.getAttribute("applyqueue");
    然后把userObj 放入application的末尾
    applyqueue.add(userObj.id,userObj);
    显示队列就是在页面上按顺序显示applyqueue 的内容
    在userObj写一个监控的方法,监控是否超过5分钟,如果超过5分钟,就从application中取出HashMap ,删除此userObj的信息,并刷新页面
    定时器的用法:
    import java.util.*;
    class MyTimerTask extends TimerTask {
      public void run() {
        //从application中取出HashMap,删除此userObj的信息,并刷新页面  }
    }
    class TTest {
      public static void main(String args[]) {
        MyTimerTask myTask = new MyTimerTask();
        Timer myTimer = new Timer();
        myTimer.schedule(myTask, 300000);//300秒后会执行myTask 
        try {
          Thread.sleep(5000);
        } catch (InterruptedException exc) {}    myTimer.cancel();
      }
    }