<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 20  文章 - 57  trackbacks - 0
    <2010年10月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    51CTO

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    MVC

    MVC

    MVC含義

    一種軟件構(gòu)架,簡單的說就是在做軟件的時候,可以將軟件分為不同的模塊,不同的模塊實(shí)現(xiàn)了不同功能。

    MVC 組成部分

    Model 模型

    View 視圖

    Controller 控制器 

    MVC就是三種組成部分的縮寫。

    MVC 不同模塊的功能

    Model(模型層) 程序員編寫程序應(yīng)用的功能,數(shù)據(jù)庫設(shè)計(jì)等。屬于后臺操作。

    View (視圖層) 前臺界面,也就是用戶可以看到的圖形見面,一般在web中是一些*.jsp*.html

    Controller(控制器) 處理前臺和后臺請求。

    MVC 優(yōu)點(diǎn)

    采用MVC的優(yōu)點(diǎn)太多了,說再多不如你在真正的項(xiàng)目中自己體會,在這里不做太多解釋。

    MVC 包結(jié)構(gòu)




    雖然,這并不能說明所有MVC框架所有的包模式,不過我覺得新手對于這個包結(jié)構(gòu)還是比較容易接受的。

    DAO  模式

    DAO層,最主要的作用是:完成數(shù)據(jù)的操作。在這層,你可以完成對任何表的數(shù)據(jù)操作,不過個人認(rèn)為DAO層最大的作用是簡單了編程人員的編程邏輯,簡單的說就是將一個大的問題,分成了幾個比較小的問題,這樣不管在測試還是在維護(hù)都起著很大的方便。

    Factory  工廠

    Factory 工廠在這里也可以說成是DAO的工廠,這里Factory僅僅產(chǎn)生了DAO。那么Factory工廠模式有什么好處呢?

    MVC中的Factory 層,你完全可以把它想象成現(xiàn)實(shí)中的工廠,生產(chǎn)某些東西,如果在程序中使用工廠模式,你可以簡化編程代碼,相當(dāng)與現(xiàn)實(shí)中你需要某個產(chǎn)品不需要自己去生產(chǎn),完全可以去工廠“拿”一個,這樣程序的編程更加符合現(xiàn)實(shí)中的邏輯。

    MVC  總結(jié)

    本節(jié),我僅僅是將MVC的編輯思想簡單的介紹了一下,我沒有加入一些詳細(xì)的例子,因?yàn)槲矣X得你在接觸MVC的時候,最好先了解MVC的編程思想,如果你要了解MVC的編程思想之后,你再接觸MVC的編程時,你就會覺得特別簡單。

    最后,希望我這篇文章可以讓大家簡單的了解MVC的編程模式。

    posted @ 2011-01-25 09:30 tovep 閱讀(2168) | 評論 (9)編輯 收藏
         摘要: ForEach小結(jié)            <c:forEach>標(biāo)簽具有以下一些屬性:              var:迭代參數(shù)的名稱。在迭代體中可以使用...  閱讀全文
    posted @ 2011-01-24 08:37 tovep 閱讀(2360) | 評論 (0)編輯 收藏

    通過以下Servlet程序和web.xml來說明web.xml的配置以及過程


    創(chuàng)建一個Login的HTML文件



    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>login.html</title>
       
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
     
     </head>
      <body>
        <form action="test1" method="post">
          <table border="0" width="379" height="79">
            <tr>
              <td>帳號:</td>
              <td><input type="text" name="username"></td>
            </tr>
            <tr>
              <td>密碼:</td>
              <td><input type="password" name="password"></td>
            </tr>
            <tr>
              <td colspan="5" align="center"><input type="submit" value="登錄"></td>
            </tr>
          </table>
        </form>
      </body>
    </html>



    以上HTML標(biāo)簽中要說明的是:
    <form>標(biāo)簽中的 action="test_Web_xml" 和 method="post" 分別定義了Html將登陸的信息發(fā)送給了誰,以及發(fā)送信息的方法!


    創(chuàng)建一個Servlet程序

    public class LoginServlet extends HttpServlet{
       
        public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            String username = null;
            username = request.getParameter("username");
            String password = null;
            password = request.getParameter("password");
           
            if(username.equals("username")&&password.equals("password")){
                request.getRequestDispatcher("成功登陸!!!").forward(request,response);
            }else{
                request.getRequestDispatcher("登陸失敗!!!").forward(request,response);   
            }
        }
    }



    web.xml配置


    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      
       
        <servlet>
          <servlet-name>
          Login
          </servlet-name>
         
          <servlet-class>
            com.rise.LoginServlet
            </servlet-class>
         </servlet>
     
     
         <servlet-mapping>
          <servlet-name>
           Login
          </servlet-name>
          <url-pattern>
          /test1

          </url-pattern>

         </servlet-mapping>
       
       
       
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>



    我理解web.xml的作用就是將頁面和后臺程序正確連接!!!



    通過一張圖片說明我理解的web.xml的作用






    以上的內(nèi)容是我自己對web.xml的理解,我覺得很簡單,但真正寫程序的時候部署程序是非常復(fù)雜的!

    posted @ 2010-12-11 20:43 tovep 閱讀(6301) | 評論 (2)編輯 收藏
       

    什么是JDBC

    JDBC是由一組Java語言編寫的類和接口組成,用來處理關(guān)系數(shù)據(jù)庫!利用JDBC的API,可用Java語法去訪問各種各樣的SQL數(shù)據(jù)庫。
    個人認(rèn)為:
    把JDBC當(dāng)做是一門連接Java程序連接數(shù)據(jù)庫的技術(shù)不如把JDBC當(dāng)做連接程序和數(shù)據(jù)庫的橋梁。

    以下我要寫的例子是用純Java的Driver來連接數(shù)據(jù)庫的方式。連接的數(shù)據(jù)庫是mysql。


    JDBC編程步驟


           1.加載數(shù)據(jù)庫驅(qū)動(jar文件)
                //需要下載一個數(shù)據(jù)庫的jar包,并導(dǎo)入相應(yīng)的JDBC項(xiàng)目中,創(chuàng)建路徑!
                Class.forName("com.mysql.jdbc.Driver");
          
           2.獲得數(shù)據(jù)庫連接
                DriverManager.getConnection("jdbc:mysql://Database_IP:3306/DATABASE","DATAROOT","PASSWORD");//返回Connection————獲得數(shù)據(jù)庫連接
           
           3.創(chuàng)建語句
                String sql = "SQL_TORUNNING";
                向DATABASE發(fā)送一個執(zhí)行語句
                Statement stmt = conn.createStatement();//創(chuàng)建一個 Statement 對象來將 SQL 語句發(fā)送到數(shù)據(jù)庫.
                     Statement—————SQL_RUNNING!!!
          
           4.執(zhí)行查詢
                ResultSet rs = Statement.executeQuery(SQL_RUNNING);//執(zhí)行SQL_RUNNING命令,返回ResultSet
                //如果執(zhí)行的數(shù)據(jù)庫語句不是對數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeQuery()
                //如果執(zhí)行的數(shù)據(jù)庫語句是修改數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeUpdate()
                //當(dāng)然他們返回值的類型也不同!
                    //根據(jù)命令的不同Statement的方法也不同
                      
                        創(chuàng)建一個表      
                        Statement.execute(create a table)
                       
                        增刪改查Insert、update、delete...
                        Statement.executeUpdate()
                      
                        查詢語句Select
                        Statement.executeQuery(Select);
                      
           5.遍歷結(jié)果集
                while(ResultSet.next()){
                    ResultSet.getInt(int);
                    ResultSet.getString(int);
                    ......
                }
           
           
           6.關(guān)閉數(shù)據(jù)庫連接
                   Connection.close();
         
          

    步驟分析


    (圖一)


    1.加載數(shù)據(jù)庫驅(qū)動

            
             我們來看圖一,工廠和幾個農(nóng)村之間有一條河,不能夠直接進(jìn)行溝通,工廠就相當(dāng)于一個Java程序,而幾個農(nóng)村就相當(dāng)于不同的數(shù)據(jù)庫;
             工廠為B村生產(chǎn)一些材料,但是生產(chǎn)出來之后并不能直接交給B村,然后工廠的廠長就想在工廠和B村之間架設(shè)一座橋梁來運(yùn)送生產(chǎn)出來的材料——我們大可把數(shù)據(jù)庫驅(qū)動加載當(dāng)做這個架設(shè)橋梁的想法。


             在程序中我們要怎么做呢?   
             在加載數(shù)據(jù)庫驅(qū)動的時候,必須要將相應(yīng)的mysql-connector-java-5.0.4-bin.jar包,然后將jar包導(dǎo)入相應(yīng)的項(xiàng)目中如下圖
            
             在mysql-connector-java-5.0.4-bin.jar右擊建立路徑,就相當(dāng)于import的過程——我不確定這么說對不對,但我是這么理解的。
             建立路徑后,你的項(xiàng)目將出現(xiàn)一個新的文件,如下圖
            
             這樣的話,你就可以順利加載數(shù)據(jù)庫驅(qū)動,否則當(dāng)你在運(yùn)行的時候會出現(xiàn)找不到Driver.class的異常,也就是無法加載數(shù)據(jù)庫驅(qū)動。
                 Class.forName("com.mysql.jdbc.Driver");



    2.獲得數(shù)據(jù)庫連接

            
             既然廠長有想法和B村之間架設(shè)一座橋梁,那就要和B村商量一下啊!然后,廠長就要去河的對岸,那條河呢?就是在工廠和B村之間的那條河(這條河就相當(dāng)于Database_IP),然后去找B村的村長(在這里要明白是B村的村長不是A村的,所以不能找錯了!!!),找到B村村長,“我要在工廠和B村之間建設(shè)一座橋,來運(yùn)輸我們的東西”,下一步談的當(dāng)然是條件了,工廠老板說“我要B村出資90%,剩下的由工廠出!!”村長當(dāng)然不干了,這橋當(dāng)然也就沒法建設(shè)了!!!所以只有當(dāng)兩者都滿意的情況下才可以建設(shè)橋梁(比如,各處50%)其實(shí)談條件的過程就相當(dāng)于驗(yàn)證數(shù)據(jù)庫的"DATAROOT"和"PASSWORD"!!!只有兩者都正確的情況下才可以進(jìn)行下一步的計(jì)劃——也就是建設(shè)橋梁!!!

             在程序中的過程如下:
             Connection conn = null;
             conn = DriverManager.getConnection("jdbc:mysql://Database_IP:3306/DATABASE","DATAROOT","PASSWORD");
             //返回Connection————獲得數(shù)據(jù)庫連接


    3.創(chuàng)建語句


             橋已經(jīng)建好了,然后工廠要準(zhǔn)備一些卡車來運(yùn)輸生產(chǎn)的貨物,然后農(nóng)村需要根據(jù)不同的貨物來處理這些貨物,有些貨物直接卸在B村就可以了,但有些貨物卸在B村之后,B村要做一些處理然后運(yùn)回工廠!!!
           
             這個過程在程序是怎么體現(xiàn)的呢?
             String sql = "SQL_TORUNNING";
             向DATABASE發(fā)送一個執(zhí)行語句
             Statement stmt = conn.createStatement();//創(chuàng)建一個 Statement 對象來將 SQL 語句發(fā)送到數(shù)據(jù)庫.
             Statement—————SQL_RUNNING!!!


    4.處理數(shù)據(jù)庫發(fā)送來的消息

             如果工廠運(yùn)輸?shù)紹村的貨物,只要B村的村長給工廠開一張條就行了;但也會有一些貨物需要運(yùn)回工廠!!

             在程序中:
             ResultSet rs = Statement.executeQuery(SQL_RUNNING);//執(zhí)行SQL_RUNNING命令,返回ResultSet
             //如果執(zhí)行的數(shù)據(jù)庫語句不是對數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeQuery()——需要返回一些貨物
             //如果執(zhí)行的數(shù)據(jù)庫語句是修改數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeUpdate()——開張條就行了
             //當(dāng)然他們返回值的類型也不同!
             //根據(jù)命令的不同Statement的方法也不同
                      
                     創(chuàng)建一個表      
                     Statement.execute(create a table)
                       
                     增刪改查Insert、update、delete...
                     Statement.executeUpdate()
                      
                     查詢語句Select
                     Statement.executeQuery(Select);
                      


    5.處理數(shù)據(jù)庫傳回的內(nèi)容


            這個過程由工廠完成,如果是返回的一些貨物的話,工廠要做一些處理。
     
            處理的過程:
                    while(ResultSet.next()){
                    ResultSet.getInt(int);
                    ResultSet.getString(int);
                    ......
                }

    6.關(guān)閉數(shù)據(jù)庫

            這樣的話,工廠和B村的交易就完成,在現(xiàn)實(shí)世界中工廠和B村之間的橋梁不會被拆除,因?yàn)榻ㄒ蛔鶚虻拇鷥r很大,但在程序和數(shù)據(jù)庫之間架設(shè)一座橋梁簡直太簡單了,所以在這里我們要把這座橋梁拆除。

            Connection.close();




    簡單的舉了一個例子來說明數(shù)據(jù)庫和程序之間是怎么連接的,望對大家有所幫助。








    posted @ 2010-12-09 18:37 tovep 閱讀(1661) | 評論 (1)編輯 收藏
    SQL語言是操作數(shù)據(jù)庫的基礎(chǔ)語言,對于不同的數(shù)據(jù)庫語言產(chǎn)品,SQL語言大多是通用的,本篇博客旨在介紹一些最常用的SQL語句。希望對大家能有所幫助。
    注:
    本文中的紅色字體黃色背景的內(nèi)容為SQL語句!!
    笨人也是菜鳥,如果我寫的有錯誤,大家一定要指出來啊!!!好了,廢話不說了,切入正題:

    首先,使用status查看MySQL當(dāng)前的信息



    1.使用show databases;語句查看當(dāng)前數(shù)據(jù)庫:
        



    2.使用create database DATABASE_NAME;語句來創(chuàng)建DATABASE_NAME數(shù)據(jù)庫



    這樣,我們創(chuàng)建好了一個名字為database_name的數(shù)據(jù)庫。
    注:數(shù)據(jù)庫語句對字母大小寫不敏感!


    3.使用use DATABASE_NAME;切換到使用DATABASE_NAME數(shù)據(jù)庫模式。




    4.在database_name數(shù)據(jù)庫創(chuàng)建一個表:

      create table if not exists table_name      -- 如果表table_name不存在則創(chuàng)建       
         (id int primary key auto_increment,     -- 創(chuàng)建int類型為主鍵,且自動增長      
          name varchar(200) not null,            -- 創(chuàng)建字符類型的列,最大長度是200字節(jié)
          age int(3),                            -- 創(chuàng)建int類型,長度為3個字節(jié)         
          sex varchar(2),                        -- 創(chuàng)建字符類型,長度是2個字節(jié)        
          salary float(11,2),                    -- 創(chuàng)建float類型的列,長度為2個字節(jié)   

          address varchar(50),                   -- 創(chuàng)建字符類型,長度為50個字節(jié)       
          birthday date                          -- 創(chuàng)建日期類型                       
         );                                                                            






    這樣就創(chuàng)建好了一張表,可以用 describe 或則 desc來查看表的結(jié)構(gòu)
    describe table_name;
    desc table_name;   
        



        

    這樣數(shù)據(jù)就創(chuàng)建好了一張表,我們可以用show tables; 來查看數(shù)據(jù)庫中所有表

    然后,我們就可以看見我們創(chuàng)建的表
    ====================================================================================
    數(shù)據(jù)庫最具核心的用法——對數(shù)據(jù)庫表的數(shù)據(jù)的增刪改查

    向表中增加數(shù)據(jù)(要了加入表的結(jié)構(gòu),看哪項(xiàng)可以為空)
    insert table_name (name,age,sex) values ('tovep',22,'男');

    向表中加入數(shù)據(jù)的時候,并不是要把所有的信息都要寫近期,只要表中結(jié)構(gòu)設(shè)置為可以為空的都
    可以不寫!!
    id不用寫,因?yàn)樗亲詣釉鲩L的!

    要想查看表中的內(nèi)容,可以用select語句———為了說明下面的情況,我加入了多條信息
    select * from table_name;      -- 將table_name表中的所有數(shù)據(jù)都打印出來





    select name from table_name;      --查看所有人的名字



    select * from table_name where id<5;     --將表中id小于100的都打印出來




    在使用select 語句查詢的時,常常用到別名
    select t.name,t.id,t.age from table_name as t;



    select 語句中的where表示查詢的條件
    where中還可以使用like與"%"對字符類型的列進(jìn)行模糊查詢
    select * from table_name where name like 't%';






    update語句:修改數(shù)據(jù)

    update 表名 set 字段名 =  '修改的值'

    update table_name set name='tvoep1' where id>2;




    刪除用
    delete from 表名 where 判斷信息

    delete from table_name where id=5;


    這樣的話就刪除了id=5的信息


    ====================================================================================


    使用drop 來刪除表或者數(shù)據(jù)庫
    drop table table_name;




    drop database database_name;













    posted @ 2010-12-06 11:04 tovep 閱讀(2309) | 評論 (2)編輯 收藏

    經(jīng)過一個多月的Java學(xué)習(xí),我們慢慢深入了解了Java中的一些比較高級的方法!但這些方法在你調(diào)試的時候一定要慎重!!不要等待失去了整個硬盤,才后悔莫及!!! 如果你在編程的時候多長個心眼,這些小的錯誤是可以避免的!!!


    下面我們來看一下一個讓人很崩潰的錯誤,這個錯誤讓我感到不可思議!!代碼如下:

    import java.io.File;

    public class KillBackServer {
     
     public static void main(String[] args){
      File f = new File("C:\\");
      fun(f);
     }
     
    //定義一個靜態(tài)函數(shù),用來實(shí)現(xiàn)對一盤文件的遍歷
     public static void fun(File f)
        {
       if(f.isDirectory())
        {
          File file[] = f.listFiles();
          try
          {
            for(int i = 0 ; i <file.length ; i++)
            {
                 fun(file[i]);
            }
          }
                 catch(Exception e){}
        }
       else
       {
            if("我是病毒.exe".equals(f.getName()))                                           
                   System.out.println(f);
                   //僅僅當(dāng)程序找到"我是病毒.exe"的 時候才執(zhí)行這一句代碼                            
                   //f.delete();                                                   
                   System.out.println("該病毒已被查殺");}  
                   System.out.println(f.getPath() + "***********************");                    
        }
     
     }

    }
     

    大家一定要注意紅色字體的代碼!!!我之所以注釋了,就是怕直接復(fù)制我的代碼,然后運(yùn)行…… 
    如果這樣后果你是知道的……


     本來這段代碼是用來掃描C盤,找到"我是病毒.exe"文件,并把它刪除,判斷一個文件名,用的是equals這是對的!!!
    錯就錯在:if()判斷,大家都明白了吧!
    希望大家以后不要因?yàn)榉噶诉@個低級錯誤,而把自己的硬盤給了格了= = |||

    其實(shí),有很多方法可以避免這種錯誤!!!比如,你可以在f.delete(); 后面加上一句打印語句,這樣的話,在你測試的時候就會發(fā)現(xiàn),原來if語句后面少一個大括號…… 


    這個錯誤寫出來僅僅為了提醒大家規(guī)范的重要性!!!




     


    posted @ 2010-11-17 21:29 tovep 閱讀(2671) | 評論 (16)編輯 收藏
    /**
         *         Robot類   :
         *
         *             exec 函數(shù)聲明:
         *                 public Process exec (String command) throws IOException ,參數(shù)及功能說明:
         *                     command: 一條指定的系統(tǒng)命令
         *                     功能:在單獨(dú)的進(jìn)程中執(zhí)行指定的字符串命令
         *
         *             keyPress 函數(shù)說明:
         *                 public void keyPress(int keycode),參數(shù)及功能說明:
         *                     keycode:要按下的鍵(例如,KeyEvent.VK_A)
         *                     功能:模擬按下指定鍵
         *
         *             keyRelease 函數(shù)說明:
         *                 public void keyRelease(int keycode),參數(shù)及功能說明:
         *                     keycode:要釋放的鍵
         *                     功能:模擬釋放指定鍵
         *
         * @param tovep
         */
    import java.awt.Robot;
    import java.awt.event.KeyEvent;

    public class Exce {

        public static void main(String[] args) {
            try{
                //創(chuàng)建自動操作類
                Robot robot = new Robot();
               
               
                /**
                 *
                 *         利用Runtime類運(yùn)行Word程序的方法為:
                 *             Runtime.getRuntime().exec("cmd /c start winword");
                 *                                         括號里的是系統(tǒng)命令
                 *
                 */
               
                //啟動記事本程序
                Runtime.getRuntime().exec("cmd /c start notepad");
               
                //延緩幾秒鐘,等待記事本程序啟動成功
                robot.delay(3000);
               
                //模擬按下"Ctrl + Space" 組合鍵,啟動輸入法
                pressKeyWithCtrl(robot,KeyEvent.VK_SPACE);
               
                //模擬隨機(jī)按下100個字母,輸入漢字
                for(int i=0;i<100;i++){
                    pressKey(robot, (int) (Math.random()* 25) + 'A');
                    pressKey(robot,KeyEvent.VK_SPACE);
                }
               
                //延緩5秒鐘,一共觀察
                robot.delay(5000);
               
                //關(guān)閉記事本
                //closeApplication(robot);
            }catch (Exception e){
                System.out.println(e.getMessage());
            }
           
        }
       
        //模擬按下鍵盤字符鍵
        public static void pressKey(Robot robot, int keyvalue){
            //模擬按下
            robot.keyPress(keyvalue);
           
            //模擬彈起
            robot.keyRelease(keyvalue);
        }
       
        //模擬同時按下"Ctrl"鍵和字符鍵
        public static void pressKeyWithCtrl(Robot robot, int keyvalue){
            //模擬按下
            robot.keyPress(KeyEvent.VK_CONTROL);
            robot.keyPress(keyvalue);
           
            //模擬彈起
            robot.keyPress(keyvalue);
            robot.keyRelease(KeyEvent.VK_CONTROL);
           
        }
       
        //模擬按下"Alt + F4"組合鍵,關(guān)閉當(dāng)前應(yīng)用程序
        public static void closeApplication(Robot robot){
            //模擬按下"Alt + F4"組合鍵
            //模擬按下
            robot.keyPress(KeyEvent.VK_ALT);
            robot.keyPress(KeyEvent.VK_F4);
           
            //模擬彈起
            robot.keyRelease(KeyEvent.VK_ALT);
            robot.keyRelease(KeyEvent.VK_F4);
           
            //模擬按下"N",不保存文件退出記事本程序
            //模擬按下
            robot.keyPress(KeyEvent.VK_N);
           
            //模擬彈起
            robot.keyRelease(KeyEvent.VK_N);
        }
       

    }


    posted @ 2010-11-17 00:14 tovep 閱讀(5416) | 評論 (1)編輯 收藏

    在Java中,Everything is Object!所以在文件中,要不例外!

    在Java中,可以用File類來表示一個文件!!!(注意這里的文件可以是所有文件,包括文件夾)


    下面的代碼表示一個文件:

    public class Demo {

        public static void main(String[] args){
           
            File f = new File("e:\\file");
           
            if(f.isDirectory()){
                System.out.println(f.getPath());
            }
        }
    }

    運(yùn)行結(jié)果是:

    代碼中isDirectory()方法是判斷文件是文件夾還是一個文件(這里可能有點(diǎn)迷糊),也可以這么理解,我所說的文件夾就是一個目錄,
    getPath()方法是打印文件(這里指的是file文件夾)的路徑!!!


    看看下面的代碼還有注釋:

    /**
     *
     *          File.speparator的作用是判斷在不同的系統(tǒng)中斜杠的方向
     *
     * 在windows中斜杠的方向是向右斜的\\
     * 在Linux  中斜杠的方向是向左斜的//
     *
     *
     *         File中createNewFile方法:
     *          當(dāng)且僅當(dāng)不存在具有此抽象路徑名指定名稱的文件時,不可分地創(chuàng)建一個新的空文件。
     *          檢查文件是否存在,若不存在則創(chuàng)建該文件,這是單個操作,對于其他所有可能影響該文件的文件系統(tǒng)活動來說,該操作是不可分的。
     *   
     *            注:此方法不應(yīng)該 用于文件鎖定,因?yàn)樗脜f(xié)議可能無法可靠地工作。應(yīng)該使用 FileLock 機(jī)制替代。
     *
     *
     */


    import java.io.File;


    public class Demo01 {
        public static void main(String[] args) throws Exception{
           
            File f;
           
            f = new File("e:" + File.separator + "file" + File.separator + "io.txt");
            System.out.println(f.createNewFile());
        }

    }
    ===================================
    運(yùn)行結(jié)果是:




    大家注意,如果你的直接復(fù)制這些代碼的話,可能會出現(xiàn)以下異常


    看看大家都明白了吧! 系統(tǒng)找不到指定的文件,就是在e盤下新建一個file文件夾就可以啦!!!

    下面代碼詳細(xì)的介紹了File類中的createNewFile()方法:

    /**
    *
    *         File中createNewFile方法:
    *          當(dāng)且僅當(dāng)不存在具有此抽象路徑名指定名稱的文件時,不可分地創(chuàng)建一個新的空文件。
    *          檢查文件是否存在,若不存在則創(chuàng)建該文件,這是單個操作,對于其他所有可能影響該文件的文件系統(tǒng)活動來說,該操作是不可分的。
    *   
    *            注:此方法不應(yīng)該 用于文件鎖定,因?yàn)樗脜f(xié)議可能無法可靠地工作。應(yīng)該使用 FileLock 機(jī)制替代。
    *         返回:是布爾型
    *
    */

    import java.io.File;

    public class Demo02 {
        public static void main(String[] args) throws Exception{
            File f = new File("f:\\demo.txt");
            System.out.println(f.createNewFile());
        }

    }


    運(yùn)行結(jié)果如下:




    下面介紹一下File類中delete()方法,代碼如下:

    /**
     *
     *             要操作一個文件,必須要找到這個文件
     *             在Java中,只有File類能表示一個文件,所有用File表示一個文件
     *             File的屬性就是文件的路徑,虛擬機(jī)會根據(jù)File類的參數(shù)找到指定的文件
     *             找到問及那后可以用File類的方法進(jìn)行操作!
     *
     *             delete()方法可以刪除一個文件或者一個整個文件夾(整個目錄),返回結(jié)果是布爾類型!!
     *
     * */



    import java.io.File;

    public class Demo11 {

        public static void main(String[] args) {
           
            File f = new File("f:\\demo.txt");
           
            f.delete();
            if(boo){
                System.out.println("成功刪除文件");
            }
        }
    }

    這個程序運(yùn)行的結(jié)果:



    下面的代碼是介紹查看一個文件的目錄,以及判斷這個文件是否是文件夾,代碼如下:

    /**
     *
     *         File的一個方法File.getPath()
     *                     是將此抽象路徑名轉(zhuǎn)換為一個路徑名字符串。
     *
     *         File的exists方法
     *                     是測試此抽象路徑名表示的文件或目錄是否存在。
     *
     *
     *         File的getParent()方法
     *                     是返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null
     *
     * */

    import java.io.File;

    public class Demo21 {

        public static void main(String[] args) {

            File f = new File("f:" + File.separator + "demo.txt");
            System.out.println(f.getPath());
            System.out.println(f.getParent());
            if(f.exists()){
                f.delete();
            }
            else{
                try{
                    System.out.println(f.createNewFile());
                }catch(Exception e){}
            }

        }

    }
    運(yùn)行結(jié)果:


    再看一個判斷目錄的方法:


    /**
     *
     *         File的一個方法File.getPath()
     *                     是將此抽象路徑名轉(zhuǎn)換為一個路徑名字符串。
     *
     *         File的isDirectory()的方法
     *                     是測試此抽象路徑名表示的文件是否是一個目錄。
     *         當(dāng)且僅當(dāng)此抽象路徑名表示的文件存在且 是一個目錄時,返回 true;否則返回 false。   
     *
     *
     * */

     
    import java.io.File;

    public class Demo51 {
       
        public static void main(String[] args){
            File f = new File("f:" + File.separator + "aa");
            System.out.println(f.getPath());
            System.out.println(f.isDirectory());
        }

    }

    運(yùn)行結(jié)果:



    注意下一個代碼,可能對你很有幫助啊!!

    /**
     *
     *             File的list()方法可以:
     *             返回一個字符串?dāng)?shù)組,
     *             這些字符串指定此抽象路徑名表示的目錄中的文件和目錄。
     *
     * */

    import java.io.File;

    public class Demo61 {

        public static void main(String[] args) {
           
            File f = new File("f:\\book");
           
           
            //使用list列出
            //列出的只是一個名稱
            String[] str = f.list();
            for(int i=0;i<str.length;i++){
                System.out.println(str[i]);
            }

        }

    }
    這個程序的運(yùn)行結(jié)果是你目錄下的文件:



    下面的程序 你可能會很感興趣!因?yàn)槟阆胪鍴K,或者你想給別人整個惡作劇,你必須要掃描下他的電腦,以下方法就實(shí)現(xiàn)了怎樣去掃描一個電腦里的所有文件(我的代碼選擇的是掃描C盤下的所有文件,如果你想掃描其他盤,只要把文件改一下就OK啦)

    import java.io.File;

    public class Demo81 {

        public static void main(String[] args) {
           
            String str = "C:\\";
            File f = new File(str);
            fun(f);
        }
       
        //要不斷列出,因?yàn)榻o出的File類對象可能是一個目錄
        public static void fun(File f){
            //判斷給定的路徑是否是目錄,如果是目錄在列出
            if(f.isDirectory()){
                File[] file = f.listFiles();
                //再依次循環(huán)進(jìn)行判斷
                try{
                    for(int i = 0;i < file.length;i++){
                        //繼續(xù)把內(nèi)容傳入到fun方法之中進(jìn)行驗(yàn)證
                        fun(file[i]);
                    }
                }catch(Exception e){}
            }
            else{
                System.out.println(f);
            }
        }

    }


    運(yùn)行結(jié)果我就不貼出來了,因?yàn)镃盤的文件太多啦!!!如果你想知道,自己把代碼帶下看看,你會很吃驚的!你會想原來掃描的原理這么簡單!!!







    posted @ 2010-11-07 23:05 tovep 閱讀(59656) | 評論 (2)編輯 收藏

            Java線程類有兩種實(shí)現(xiàn)方式,第一種就是繼承Thread類,另一種是現(xiàn)實(shí)Runnable接口。這兩種實(shí)現(xiàn)方式的區(qū)別很大,下面就說一下它們之間到底有什么區(qū)別。

    我們首先用第一種方式寫一個線程類:
    代碼如下:


    package Ticket;


    public class Extends {
     
     public static void main(String[] args){
              //實(shí)例化進(jìn)程并準(zhǔn)備執(zhí)行
              new Thread(new MyThread(),"001窗口").start();
              new Thread(new MyThread(),"001窗口").start();
              new Thread(new MyThread(),"001窗口").start();
     
             }

    }

    class MyThread extends Thread{
             //定義一個變量
              private int ticket = 10;
     
              public void run(){
         
              //這里之所以要循環(huán)300次,就是為了讓所有的 車票都賣出去!可能你會想,為什么不是30呢?
              //嘿嘿。。。聰明的你肯定明白這個循環(huán)的次數(shù)為什么會多出票數(shù)很多?=====其實(shí)我開始也不知道!!!  ==||| 
            
              for(int i=0;i<300;i++){
                   try {
                        //調(diào)用sell()方法
                        this.sell();
                        Thread.sleep(10);
                     } catch (InterruptedException e) {
                                e.printStackTrace();
                     }
      }
     
     }
               public void sell(){
                      if(ticket>0){
                               System.out.println(Thread.currentThread().getName() + " ===> 還剩下" + (ticket--) + "車票");
                      }
     }
    }



    看看這個程序的運(yùn)行結(jié)果你就明白為什么繼承Thread類實(shí)現(xiàn)線程類的一個弊端 




    ------------------------------------------------
    大家都發(fā)現(xiàn)了吧!輸出的結(jié)果和預(yù)想的不一樣!!!

    我們來分析一下代碼,查看main函數(shù):
              new Thread(new MyThread(),"001窗口").start();
              new Thread(new MyThread(),"001窗口").start();
              new Thread(new MyThread(),"001窗口").start();

    我們可以看出,實(shí)例化了三個MyThread類,這樣的話,private int ticket = 10;就運(yùn)行了三次,所以ticket打印出來的 也就是30張;在這里注意一下并不是ticket賦值為30,而是ticket賦值為10,但賦值了三次!!!也就是現(xiàn)在有三個ticket!!!
    這樣并不能實(shí)現(xiàn)資源共享!
    我們知道我們利用多線程就是為了將多個線程去處理一個數(shù)據(jù)的集合!!! 他們是同時處理的!!!如果向上面的話,并沒有將數(shù)據(jù)的集合(ticket)進(jìn)行共享,而是將每一個類都從新建了一個數(shù)據(jù)的集合,分別對自己的集合進(jìn)行處理!!!!
    如果想解決這個問題,其實(shí)也很簡單,不過如果當(dāng)數(shù)據(jù)的類型和種類比較多的時候,這樣寫就太麻煩了!!!!

    那實(shí)現(xiàn)Runnable接口的線程類可不可以呢!!???

    下面來看一看:

    代碼如下:


    package IO;

    public class Inter {

        public static void main(String[] args){
            //聲明并實(shí)例化一個MyThread01類
            MyThread01 mt = new MyThread01();
            new Thread(mt,"001窗口").start();
            new Thread(mt,"002窗口").start();
            new Thread(mt,"003窗口").start();

        }
       
    }

    class MyThread01 implements Runnable{
       
        private int ticket = 10;   
        public void run(){   
            for(int i=0;i<200;i++){
                try {
                    this.sell();
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
           
        }
        public void sell(){
            if(ticket>0){
                System.out.println(Thread.currentThread().getName() + " ===> 還剩下" + (ticket--) + "車票");
            }
           
        } 
    }
           

    ---------------------------------------------
    這段程序的運(yùn)行結(jié)果:


    看看這個結(jié)果是不是和自己想的一樣啊!!!這樣就可以了!!!用這個方法去創(chuàng)建一個線程類是不是可以達(dá)到資源共享啊!!!
    其實(shí)啊!我看來,所謂的資源共享也就是將一個數(shù)據(jù)的集合讓多個線程去處理!!!
    我們看一下代碼!!!
            MyThread01 mt = new MyThread01();
            new Thread(mt,"001窗口").start();
            new Thread(mt,"002窗口").start();
            new Thread(mt,"003窗口").start();

    我們可以看出這個過程中,我們只聲明并實(shí)例化了一個MyThread01類,也就是說在這里過程中,給ticket進(jìn)行了初始化!!!
    但大家要注意的是:真正創(chuàng)建處理數(shù)據(jù)的線程是
            new Thread(mt,"001窗口").start();
            new Thread(mt,"002窗口").start();
            new Thread(mt,"003窗口").start();
    因此,這樣可以將一個ticket的數(shù)據(jù)集 由三個線程來處理!!!
    這樣就是所謂的資源共享!!!
    ok???



    =====================================================================


    總結(jié)一下這兩種方式的特點(diǎn):

    1.繼承Thread來創(chuàng)建線程類的方法,在繼承了Thread后,不能再繼承其他類,這樣靈活性就不如實(shí)現(xiàn)Runnable接口來創(chuàng)建線程類的方法了!!!
    2.正如上面所說的使用實(shí)現(xiàn)Runnable接口來創(chuàng)建線程類的方法可以達(dá)到資源共享!!!(在這里說明一下:繼承Thread類來創(chuàng)建線程類的方法也可以實(shí)現(xiàn)資源共享,只不過比較麻煩!!!因此,在創(chuàng)建線程類的時候,應(yīng)優(yōu)先選擇實(shí)現(xiàn)Runnable接口來創(chuàng)建線程類的方法!!!)







    posted @ 2010-11-07 20:30 tovep 閱讀(5957) | 評論 (8)編輯 收藏
    今天寫一個具有簡單功能的學(xué)生管理系統(tǒng)!不過,這個系統(tǒng)的構(gòu)建基于現(xiàn)實(shí)中的Java程序開發(fā)框架!所有的代碼全部自己去寫,并且要在程序中體現(xiàn)出面向?qū)ο蟮募?xì)想和程序開發(fā)中的框架實(shí)現(xiàn)原理。

    首相,對問題進(jìn)行分析:

    程序要完成的功能很簡單,當(dāng)程序運(yùn)行的時候出現(xiàn)以下信息
    --------圖1--------
    然后程序等待用戶輸入

    如果用戶選擇1,那么進(jìn)入增加人員的信息(

    下面來分析增加人員的過程:

    首先,要新建一個Person類,當(dāng)用戶選擇1的時候就實(shí)例化Person類,并將Person進(jìn)行初始化,這并沒有結(jié)束此次的操作,最后的操作是將Person類存儲到文件中,這個文件名我定義為Person.ser。這樣這個過程才算結(jié)束,但這里的結(jié)束并不是程序結(jié)束,而是完成了1操作,整個程序并沒有結(jié)束,除非用戶選擇4退出程序,否則程序一直執(zhí)行。
    )

    如果用戶選擇2,那么程序查看所有人員的信息(
    在這個過程中,程序要將Person.ser文件中的內(nèi)容寫入到程序中,并打印到控制臺顯示,執(zhí)行完這一步之后,程序返回上一步操作,在這里程序仍然沒有退出。
    )

    如果用戶選擇3,程序進(jìn)入的是對信息進(jìn)行修改的頁面(
    這個過程相對來說比較復(fù)雜,因?yàn)檫@個過程涉及到Person.ser文件內(nèi)容的寫入和寫出過程,也就是先把文件中的內(nèi)容輸出到控制臺顯示當(dāng)前用戶的信息,等待用戶輸入新的信息,當(dāng)用戶輸入信息后,要將原來的信息進(jìn)行覆蓋,也就是將信息從新寫到Person.ser中——這里我們僅僅考慮Person.ser中只有一個Person的情況。
    )



    通過以上分析,我們可以很清楚的知道,這個程序需要一個循環(huán)來做支撐,并且這個循環(huán)每執(zhí)行一次都要輸出圖1的內(nèi)容。

    首先新建一個Persion類


    package Object;

    import java.io.Serializable;

    //要想將類存儲在文件中必須實(shí)現(xiàn)Serializable接口!!!


    public class Person implements Serializable{
     private String name;
     private int age;
     private float score;
     
     public Person(String name, int age, float score){
      this.name = name;
      this.age = age;
      this.score = score;
     }
     
     public String getName() {
      return name;
     }
     public void setName(String name) {
      this.name = name;
     }
     public int getAge() {
      return age;
     }
     public void setAge(int age) {
      this.age = age;
     }
     public float getScore() {
      return score;
     }
     public void setScore(float score) {
      this.score = score;
     }
     
     public String toString(){
      return "NAME: " + this.name + " AGE: " + this.age + " SCORE: " + this.score;
     }

    }



    Text類中包含了程序中所有的text信息


    package Text;

    /**
     *
     *   這個類是用來輸出整個程序中要輸出的所有的Text信息!!!
     *   Text類中沒有任何屬性,只有幾個輸出文本的方法!!!
     *
     *
     * */


    public class Text {
     
     //這個方法用來顯示用戶運(yùn)行程序時的信息
     public String mainText(){
      return "\n\t\t1.增加人員的信息" + "\n\t\t2.瀏覽人員的信息" + "\n\t\t3.修改人員的信息" + "\n\t\t4.退出系統(tǒng)" + "\n\n請選擇要使用的操作:";
     }
     
     //輸入有誤信息
     public String errText(){
      return "您所輸入的信息有誤,請重新輸入!!!";
     }
     
     //增加信息顯示
     public String addText(){
      return "請輸入您要增加的學(xué)生的信息";
     }
     public String addName(){
      return "請輸入學(xué)生的姓名:";
     }
     public String addAge(){
      return "請輸入學(xué)生的年齡:";
     }
     public String addScore(){
      return "請輸入學(xué)生的成績:";
     }
     //修改的內(nèi)容Modify
     
     public String modifyText(){
      return "請輸入您要修改的內(nèi)容";
     }
     public String edd(){
      return "操作成功";
     }
     
    }

    Methods類中包含了所有的方法:

    package Methods;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.util.Scanner;

    import Object.Person;
    import Text.Text;

    /**
     *
     *   這個方法中包括了整個程序所要用到的方法,包括:
     *    從控制臺寫入(Input)信息方法;
     *    向控制臺寫出(Output)信息的方法;
     *    基本上包含了所有的方法
     *
     *
     * */
    public class Methods {
     
      private static Person obj; 
     //用戶從控制臺向程序?qū)懭霐?shù)據(jù),用來選擇用戶想要的操作
     public int InputSelect(){
      Scanner inputSelect = new Scanner(System.in);
      int select = inputSelect.nextInt();
      return select;
     }
     
     //增加Person信息方法
     public Person InputPerson(){
      Text text = new Text();
      Scanner str = new Scanner(System.in);
      
      System.out.println(text.addText() + "\n" + text.addName());
      String name = str.next();
      System.out.println(text.addAge());
      int age = str.nextInt();
      System.out.println(text.addScore());
      float score = str.nextFloat();
      
      Person p = new Person(name, age, score);
      return p;
     }
     
     
     //將類從程序中寫出,寫到文件中
     public void Output(Person p) throws Exception{ 
      ObjectOutputStream out = null;
      out = new ObjectOutputStream(new FileOutputStream(new File("e:\\person.ser")));
      out.writeObject(p);
      out.close();
     }
     
     //從文件中讀入信息
     public Person Output() throws Exception{
      ObjectInputStream in = null;
      in = new ObjectInputStream(new FileInputStream(new File("e:\\person.ser")));
      obj = (Person)in.readObject();
      Person p = obj; 
      in.close();
      return p;
     }

     //修改類的方法
     public void ModifyPerson() throws Exception{
      Text text = new Text();
      Scanner str = new Scanner(System.in);
      
      //先從文件中讀入信息
      Person p = this.Output();
      System.out.println(text.modifyText());
      System.out.println("修改前的內(nèi)容為: \n" + p);
      this.Output(this.InputPerson());
      text.edd();
     }
     }


    Main用來調(diào)用這些方法,完成想要的結(jié)果

    package Main;

    import Methods.Methods;
    import Object.Person;
    import Text.Text;

    /**
     *
     *   這里是程序的入口,當(dāng)執(zhí)行這個程序的時候首先打印了圖1的內(nèi)容,為了表現(xiàn)面向?qū)ο蟮乃枷耄覍⒊绦蛑惺紫纫蛴〉男畔?br />  *   放入到一個Text類中。
     *   因?yàn)閮H僅當(dāng)用戶選擇了退出程序的時候才能退出程序,所以這個程序必須用一個‘死’循環(huán),只有當(dāng)用戶選擇了4的時候,用戶
     *   才退出程序!
     *
     * */

     

    public class Main {
     final static Text text = new Text();
     static Methods m = new Methods();
     public static void main(String[] args) throws Exception{
      
      boolean mainCycle = true;
      
      //有一個循序
      while(mainCycle){
       //只有當(dāng)用戶輸入的是4的時候程序才退出循環(huán)
       System.out.println( text.mainText());
       //捕獲控制臺用戶輸入的選擇信息
       int select = m.InputSelect();
       
       if(select == 4)//這里的判斷是——用戶輸入的信息等于4的時候程序結(jié)束循環(huán)
       {
        mainCycle = false;
       }
       else
       {
        switch(select)//用戶選擇的數(shù)據(jù)
        {
        case 1 : {
         Person pp = m.InputPerson();
         m.Output(pp);
         System.out.println(text.edd());
         {}//利用輸入方法
        };break;//用戶增加人員信息方法
        case 2 : {
         System.out.println(m.Output());
        };break;//瀏覽人員的信息
        
        case 3 : {
         Person p = m.Output();
         System.out.println(text.modifyText());
         p = m.InputPerson();
         m.Output(p);
         System.out.println(text.edd());
        };break;//修改人員的信息
        
        default : {
         System.out.println(text.errText());
        }
        }
       }
       
      }
     
      
     }

    }


    這個程序的運(yùn)行結(jié)果如下:




    posted @ 2010-11-06 17:15 tovep 閱讀(361) | 評論 (0)編輯 收藏

    ======================================================================================

    這僅僅是一個很簡單的醫(yī)院掛號系統(tǒng),雖然涉及到一些C/S架構(gòu)思想,但并沒有按照C/S架構(gòu)去實(shí)現(xiàn)

    還請大家見諒!!!

    ======================================================================================



    **************************************************************************************

    首先,新建一些輔助的類。
           比如:Patients類,用于存放掛號的病人;Init類,用于預(yù)先存儲一些病人,這樣就可以方
    便的測試Doctor類;還有一個Server類,相當(dāng)于一個服務(wù)器。

    **************************************************************************************


    Patients類


    package Queue;
            /**

                    定義一個Patients類,這個類從寫了toString方法,可以方便的進(jìn)行輸出!

            */


    public class Patients {
       
       
        private String name;
        private String id;
       
       
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        //這里從寫了toString方法
        public String toString(){
            return "病人的ID是: " + this.id + " \n\n病人的姓名是: " + this.name;
        }
    }



    Init類:

    package Queue;

    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.Map;
    import java.util.Queue;


            /**
             *
             * @author toveping
             * 向一個隊(duì)列中加入一些病人,對醫(yī)生的客戶端進(jìn)行測試!!!
             *
             *      
             */
    public class Init {
        public Map init(String no){
            Map<String, LinkedList<Patients>> queueSystem = new HashMap<String, LinkedList<Patients>>();
            LinkedList<Patients> patQueue = new LinkedList<Patients>();   
            for(int i =0;i<20;i++){
                Patients p =  new Patients();
                p.setId(i + "");
                p.setName("A" + i);
                patQueue.add(p);
            }
            queueSystem.put(no, patQueue);
            return queueSystem;
        }
    }



    Server類:


    package Queue;

            /**

                    定義一個Server類相當(dāng)于服務(wù)器,掛號客戶端增加一個病人的話,相應(yīng)的存儲在這里,可以供Doctor調(diào)用!!!

            */

    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.Map;
    import java.util.Queue;

    public class Server {
       
       
        //這是病人的隊(duì)列
        Queue<Patients> patQueue = new LinkedList<Patients>();
        //String 是醫(yī)生的代號 ;Queue 是病人的隊(duì)列
        Map<String, Queue> queueSystem = new HashMap<String, Queue>();
       
       
        public int serverAdd(String no){
            Map<String, LinkedList<Patients>> queueSystem = new HashMap<String, LinkedList<Patients>>();
            LinkedList<Patients> patQueue = new LinkedList<Patients>();   
            Patients p = new Patients();
            p.setId(patQueue.size()+"");
            patQueue.add(p);
            queueSystem.put(no, patQueue);
           

            return patQueue.size();
        }
    }



    **************************************************************************************



    下面是掛號客戶端:

    **************************************************************************************

    package Queue;

            /**

                    這是一個掛號客戶端,對會診的病人進(jìn)行掛號,以及方便掛號的病人容易的掛到自己想要的專家!!!

            */

    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Text;

    public class Client {
        public static void main(String[] args){
            Display display = new Display();  
            Shell shell = new Shell(display);  
            shell.setLayout(new FillLayout());  
            shell.setText("專家掛號系統(tǒng)");     
            shell.open();  
            shell.setBounds(190, 100, 800, 600);
           
            final Text txt = new Text(shell,SWT.MULTI);
            txt.setBounds(200, 50, 400, 300);
           
            Button firstButton = new Button(shell,SWT.NULL);
            firstButton.setText("一號專家");
            firstButton.setBounds(100, 400, 120, 65);
           
            firstButton.addSelectionListener(new SelectionAdapter() {
                    Server ser =  new Server();
                    int i = ser.serverAdd("1");
                public void widgetSelected(SelectionEvent e) {
                   
                    txt.setText("掛號成功\n" + "您選的專家是一號專家\n" + "您前面有" + i + "\n請耐心等待!!");
                    i++;
                    }
            });
           

            Button secondButton = new Button(shell,SWT.NULL);
            secondButton.setText("二號專家");
            secondButton.setBounds(250, 400, 120, 65);
           
            secondButton.addSelectionListener(new SelectionAdapter() {
                    Server ser =  new Server();
                    int i = ser.serverAdd("2");
                public void widgetSelected(SelectionEvent e) {
                   
                    txt.setText("掛號成功\n" + "您選的專家是二號專家\n" + "您前面有" + i + "\n請耐心等待!!");
                    i++;
                   
                    }
            });
           
           
            Button thirdButton = new Button(shell,SWT.NULL);
            thirdButton.setText("三號專家");
            thirdButton.setBounds(400, 400, 120, 65);
           
            thirdButton.addSelectionListener(new SelectionAdapter() {
                    Server ser =  new Server();
                    int i = ser.serverAdd("3");
                public void widgetSelected(SelectionEvent e) {
                   
                    txt.setText("掛號成功\n" + "您選的專家是三號專家\n" + "您前面有" + i + "\n請耐心等待!!");
                    i++;
                   
                    }
            });
           
           
            Button fourthButton = new Button(shell,SWT.NULL);
            fourthButton.setText("四號專家");
            fourthButton.setBounds(550, 400, 120, 65);
           
           
            fourthButton.addSelectionListener(new SelectionAdapter() {
                Server ser =  new Server();
                int i = ser.serverAdd("4");
                public void widgetSelected(SelectionEvent e) {
                   
                   
                    txt.setText("掛號成功\n" + "您選的專家是四號專家\n" + "您前面有" + i + "\n請耐心等待!!");
                    i++;
                   
                    }
            });
           
           
           
          
            while (!shell.isDisposed()) {  
                if (!display.readAndDispatch())  
                display.sleep();  
           } 
           
            display.dispose();  
        }

    }



    運(yùn)行結(jié)果如下圖:





    **************************************************************************************


    最后是Doctor的客戶端:

    **************************************************************************************

    package Queue;

            /**

                    這里定義了Doctor使用的客戶端,用來顯示會診的一些基本信息!

            */


    import java.util.LinkedList;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Text;

    public class Doctor {
        public static void main(String[] args){
            Display display = new Display();  
            Shell shell = new Shell(display);  
            shell.setLayout(new FillLayout());  
            shell.setText("醫(yī)生會診系統(tǒng)");     
            shell.open();  
            shell.setMaximized(true);
           
            final Text firsttxt = new Text(shell,SWT.MULTI);
            firsttxt.setBounds(100, 50, 200, 300);
           
            Button firstButton = new Button(shell,SWT.NULL);
            firstButton.setText("下一個(一號專家)");
            firstButton.setBounds(150, 400, 120, 65);
           
            firstButton.addSelectionListener(new SelectionAdapter() {
                    Init aInit = new Init();
                    LinkedList lin = (LinkedList) aInit.init("1").get("1");
                public void widgetSelected(SelectionEvent e) {
                   
                    firsttxt.setText("\n您正在診斷的病人信息:\n\n" + lin.remove());
                    }
            });
           
            final Text secondtxt = new Text(shell,SWT.MULTI);
            secondtxt.setBounds(400, 50, 200, 300);
           
            Button secondButton = new Button(shell,SWT.NULL);
            secondButton.setText("下一個(二號專家)");
            secondButton.setBounds(450, 400, 120, 65);
           
            secondButton.addSelectionListener(new SelectionAdapter() {
                    Init aInit = new Init();
                    LinkedList lin = (LinkedList) aInit.init("2").get("2");
                public void widgetSelected(SelectionEvent e) {
                    secondtxt.setText("\n您正在診斷的病人信息:\n\n" + lin.remove());
                    }
            });
           
            final Text thirdtxt = new Text(shell,SWT.MULTI);
            thirdtxt.setBounds(750, 50, 200, 300);
           
            Button thirdButton = new Button(shell,SWT.NULL);
            thirdButton.setText("下一個(三號專家)");
            thirdButton.setBounds(800, 400, 120, 65);
           
            thirdButton.addSelectionListener(new SelectionAdapter() {
                Init aInit = new Init();
                LinkedList lin = (LinkedList) aInit.init("3").get("3");
                public void widgetSelected(SelectionEvent e) {
                    thirdtxt.setText("\n您正在診斷的病人信息:\n\n" + lin.remove());
                    }
            });
           
            final Text fourthtxt = new Text(shell,SWT.MULTI);
            fourthtxt.setBounds(1050, 50, 200, 300);
           
            Button fourthButton = new Button(shell,SWT.NULL);
            fourthButton.setText("下一個(四號專家)");
            fourthButton.setBounds(1100, 400, 120, 65);
           
           
            fourthButton.addSelectionListener(new SelectionAdapter() {
                Init aInit = new Init();
                LinkedList lin = (LinkedList) aInit.init("4").get("4");
                public void widgetSelected(SelectionEvent e) {
                    fourthtxt.setText("\n您正在診斷的病人信息:\n\n" + lin.remove());
                    }
            });
           
           
           
          
            while (!shell.isDisposed()) {  
                if (!display.readAndDispatch())  
                display.sleep();  
           } 
           
            display.dispose();  
        }
    }


    運(yùn)行的結(jié)果如下圖:






    **************************************************************************************


    讓大家見笑了!

    posted @ 2010-10-31 21:10 tovep 閱讀(379) | 評論 (0)編輯 收藏
    主頁
    主站蜘蛛池模板: 久久免费观看国产精品| 免费国产污网站在线观看不要卡| 亚洲日本久久一区二区va| 亚洲中文精品久久久久久不卡| 亚洲aⅴ无码专区在线观看| 又大又硬又粗又黄的视频免费看 | 久久国产免费福利永久| 少妇高潮太爽了在线观看免费| 国产视频精品免费| 亚洲爽爽一区二区三区| 亚洲人成网www| 亚洲中文无码永久免费| 精品人妻系列无码人妻免费视频| 无码少妇精品一区二区免费动态| 青青草免费在线视频| 免费不卡中文字幕在线| 亚洲日韩区在线电影| 亚洲国产午夜精品理论片在线播放 | 羞羞视频免费网站在线看| 99国产精品免费视频观看| 四虎影视www四虎免费| 在线a亚洲v天堂网2019无码| 亚洲欧洲日产专区| 黄网站色视频免费看无下截| 日本免费在线观看| 免费看香港一级毛片| 亚洲情综合五月天| 久久久国产亚洲精品| 中国一级毛片免费看视频| 青娱乐免费在线视频| 国产亚洲?V无码?V男人的天堂 | 亚洲综合亚洲国产尤物| 日本亚洲高清乱码中文在线观看| 成全视频免费观看在线看| 成年人视频在线观看免费| 亚洲精品色午夜无码专区日韩| 亚洲Av无码一区二区二三区| 国产无遮挡色视频免费观看性色| 24小时在线免费视频| 亚洲精品无码久久久| 亚洲av无码电影网|