隨筆 - 20  文章 - 57  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          51CTO

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          MVC

          MVC

          MVC含義

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

          MVC 組成部分

          Model 模型

          View 視圖

          Controller 控制器 

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

          MVC 不同模塊的功能

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

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

          Controller(控制器) 處理前臺(tái)和后臺(tái)請(qǐng)求。

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

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

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




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

          DAO  模式

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

          Factory  工廠

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

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

          MVC  總結(jié)

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

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

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

          通過(guò)以下Servlet程序和web.xml來(lái)說(shuō)明web.xml的配置以及過(guò)程


          創(chuàng)建一個(gè)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>帳號(hào):</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)簽中要說(shuō)明的是:
          <form>標(biāo)簽中的 action="test_Web_xml" 和 method="post" 分別定義了Html將登陸的信息發(fā)送給了誰(shuí),以及發(fā)送信息的方法!


          創(chuàng)建一個(gè)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的作用就是將頁(yè)面和后臺(tái)程序正確連接!!!



          通過(guò)一張圖片說(shuō)明我理解的web.xml的作用






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

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

          什么是JDBC

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

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


          JDBC編程步驟


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

          步驟分析


          (圖一)


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

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


                   在程序中我們要怎么做呢?   
                   在加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)的時(shí)候,必須要將相應(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的過(guò)程——我不確定這么說(shuō)對(duì)不對(duì),但我是這么理解的。
                   建立路徑后,你的項(xiàng)目將出現(xiàn)一個(gè)新的文件,如下圖
                  
                   這樣的話,你就可以順利加載數(shù)據(jù)庫(kù)驅(qū)動(dòng),否則當(dāng)你在運(yùn)行的時(shí)候會(huì)出現(xiàn)找不到Driver.class的異常,也就是無(wú)法加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)。
                       Class.forName("com.mysql.jdbc.Driver");



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

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

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


          3.創(chuàng)建語(yǔ)句


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


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

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

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


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


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

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

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

                  Connection.close();




          簡(jiǎn)單的舉了一個(gè)例子來(lái)說(shuō)明數(shù)據(jù)庫(kù)和程序之間是怎么連接的,望對(duì)大家有所幫助。








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

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



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



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



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


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




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

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

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






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



              

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

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

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

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

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





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



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




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



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






          update語(yǔ)句:修改數(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 來(lái)刪除表或者數(shù)據(jù)庫(kù)
          drop table table_name;




          drop database database_name;













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

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


          下面我們來(lái)看一下一個(gè)讓人很崩潰的錯(cuò)誤,這個(gè)錯(cuò)誤讓我感到不可思議!!代碼如下:

          import java.io.File;

          public class KillBackServer {
           
           public static void main(String[] args){
            File f = new File("C:\\");
            fun(f);
           }
           
          //定義一個(gè)靜態(tài)函數(shù),用來(lái)實(shí)現(xiàn)對(duì)一盤文件的遍歷
           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"的 時(shí)候才執(zhí)行這一句代碼                            
                         //f.delete();                                                   
                         System.out.println("該病毒已被查殺");}  
                         System.out.println(f.getPath() + "***********************");                    
              }
           
           }

          }
           

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


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

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


          這個(gè)錯(cuò)誤寫出來(lái)僅僅為了提醒大家規(guī)范的重要性!!!




           


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

          public class Exce {

              public static void main(String[] args) {
                  try{
                      //創(chuàng)建自動(dòng)操作類
                      Robot robot = new Robot();
                     
                     
                      /**
                       *
                       *         利用Runtime類運(yùn)行Word程序的方法為:
                       *             Runtime.getRuntime().exec("cmd /c start winword");
                       *                                         括號(hào)里的是系統(tǒng)命令
                       *
                       */
                     
                      //啟動(dòng)記事本程序
                      Runtime.getRuntime().exec("cmd /c start notepad");
                     
                      //延緩幾秒鐘,等待記事本程序啟動(dòng)成功
                      robot.delay(3000);
                     
                      //模擬按下"Ctrl + Space" 組合鍵,啟動(dòng)輸入法
                      pressKeyWithCtrl(robot,KeyEvent.VK_SPACE);
                     
                      //模擬隨機(jī)按下100個(gè)字母,輸入漢字
                      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);
              }
             
              //模擬同時(shí)按下"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 閱讀(5428) | 評(píng)論 (1)編輯 收藏

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

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


          下面的代碼表示一個(gè)文件:

          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()方法是判斷文件是文件夾還是一個(gè)文件(這里可能有點(diǎn)迷糊),也可以這么理解,我所說(shuō)的文件夾就是一個(gè)目錄,
          getPath()方法是打印文件(這里指的是file文件夾)的路徑!!!


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

          /**
           *
           *          File.speparator的作用是判斷在不同的系統(tǒng)中斜杠的方向
           *
           * 在windows中斜杠的方向是向右斜的\\
           * 在Linux  中斜杠的方向是向左斜的//
           *
           *
           *         File中createNewFile方法:
           *          當(dāng)且僅當(dāng)不存在具有此抽象路徑名指定名稱的文件時(shí),不可分地創(chuàng)建一個(gè)新的空文件。
           *          檢查文件是否存在,若不存在則創(chuàng)建該文件,這是單個(gè)操作,對(duì)于其他所有可能影響該文件的文件系統(tǒng)活動(dòng)來(lái)說(shuō),該操作是不可分的。
           *   
           *            注:此方法不應(yīng)該 用于文件鎖定,因?yàn)樗脜f(xié)議可能無(wú)法可靠地工作。應(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ù)制這些代碼的話,可能會(huì)出現(xiàn)以下異常


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

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

          /**
          *
          *         File中createNewFile方法:
          *          當(dāng)且僅當(dāng)不存在具有此抽象路徑名指定名稱的文件時(shí),不可分地創(chuàng)建一個(gè)新的空文件。
          *          檢查文件是否存在,若不存在則創(chuàng)建該文件,這是單個(gè)操作,對(duì)于其他所有可能影響該文件的文件系統(tǒng)活動(dòng)來(lái)說(shuō),該操作是不可分的。
          *   
          *            注:此方法不應(yīng)該 用于文件鎖定,因?yàn)樗脜f(xié)議可能無(wú)法可靠地工作。應(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()方法,代碼如下:

          /**
           *
           *             要操作一個(gè)文件,必須要找到這個(gè)文件
           *             在Java中,只有File類能表示一個(gè)文件,所有用File表示一個(gè)文件
           *             File的屬性就是文件的路徑,虛擬機(jī)會(huì)根據(jù)File類的參數(shù)找到指定的文件
           *             找到問(wèn)及那后可以用File類的方法進(jìn)行操作!
           *
           *             delete()方法可以刪除一個(gè)文件或者一個(gè)整個(gè)文件夾(整個(gè)目錄),返回結(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("成功刪除文件");
                  }
              }
          }

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



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

          /**
           *
           *         File的一個(gè)方法File.getPath()
           *                     是將此抽象路徑名轉(zhuǎn)換為一個(gè)路徑名字符串。
           *
           *         File的exists方法
           *                     是測(cè)試此抽象路徑名表示的文件或目錄是否存在。
           *
           *
           *         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é)果:


          再看一個(gè)判斷目錄的方法:


          /**
           *
           *         File的一個(gè)方法File.getPath()
           *                     是將此抽象路徑名轉(zhuǎn)換為一個(gè)路徑名字符串。
           *
           *         File的isDirectory()的方法
           *                     是測(cè)試此抽象路徑名表示的文件是否是一個(gè)目錄。
           *         當(dāng)且僅當(dāng)此抽象路徑名表示的文件存在且 是一個(gè)目錄時(shí),返回 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é)果:



          注意下一個(gè)代碼,可能對(duì)你很有幫助啊!!

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

          import java.io.File;

          public class Demo61 {

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

              }

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



          下面的程序 你可能會(huì)很感興趣!因?yàn)槟阆胪鍴K,或者你想給別人整個(gè)惡作劇,你必須要掃描下他的電腦,以下方法就實(shí)現(xiàn)了怎樣去掃描一個(gè)電腦里的所有文件(我的代碼選擇的是掃描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類對(duì)象可能是一個(gè)目錄
              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é)果我就不貼出來(lái)了,因?yàn)镃盤的文件太多啦!!!如果你想知道,自己把代碼帶下看看,你會(huì)很吃驚的!你會(huì)想原來(lái)掃描的原理這么簡(jiǎn)單!!!







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

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

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


          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{
                   //定義一個(gè)變量
                    private int ticket = 10;
           
                    public void run(){
               
                    //這里之所以要循環(huán)300次,就是為了讓所有的 車票都賣出去!可能你會(huì)想,為什么不是30呢?
                    //嘿嘿。。。聰明的你肯定明白這個(gè)循環(huán)的次數(shù)為什么會(huì)多出票數(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--) + "車票");
                            }
           }
          }



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




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

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

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

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

          下面來(lái)看一看:

          代碼如下:


          package IO;

          public class Inter {

              public static void main(String[] args){
                  //聲明并實(shí)例化一個(gè)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é)果:


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

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



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


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

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







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

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

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

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

          下面來(lái)分析增加人員的過(guò)程:

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

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

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



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

          首先新建一個(gè)Persion類


          package Object;

          import java.io.Serializable;

          //要想將類存儲(chǔ)在文件中必須實(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;

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


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

          /**
           *
           *   這個(gè)方法中包括了整個(gè)程序所要用到的方法,包括:
           *    從控制臺(tái)寫入(Input)信息方法;
           *    向控制臺(tái)寫出(Output)信息的方法;
           *    基本上包含了所有的方法
           *
           *
           * */
          public class Methods {
           
            private static Person obj; 
           //用戶從控制臺(tái)向程序?qū)懭霐?shù)據(jù),用來(lái)選擇用戶想要的操作
           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用來(lái)調(diào)用這些方法,完成想要的結(jié)果

          package Main;

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

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

           

          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;
            
            //有一個(gè)循序
            while(mainCycle){
             //只有當(dāng)用戶輸入的是4的時(shí)候程序才退出循環(huán)
             System.out.println( text.mainText());
             //捕獲控制臺(tái)用戶輸入的選擇信息
             int select = m.InputSelect();
             
             if(select == 4)//這里的判斷是——用戶輸入的信息等于4的時(shí)候程序結(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());
              }
              }
             }
             
            }
           
            
           }

          }


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




          posted @ 2010-11-06 17:15 tovep 閱讀(371) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題  下一頁(yè)
          主頁(yè)
          主站蜘蛛池模板: 阳朔县| 晴隆县| 福泉市| 沅陵县| 富宁县| 当阳市| 温州市| 贵州省| 松滋市| 锦屏县| 洪雅县| 潜山县| 贞丰县| 吉隆县| 开平市| 锦屏县| 大足县| 治县。| 平昌县| 柘城县| 舞钢市| 靖西县| 安图县| 安平县| 岳普湖县| 衡山县| 砀山县| 浮山县| 墨竹工卡县| 民和| 瓮安县| 阳信县| 太仓市| 苍南县| 永胜县| 福海县| 多伦县| 青川县| 革吉县| 昌平区| 玉山县|