• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            ::^喬喬^::明鏡臺(tái)::原創(chuàng)空間::C#.NET2.0,C++技術(shù)BLOG
            人最重要的是心境,一顆平靜安穩(wěn)的心才能更好的進(jìn)步,保持自己的心態(tài).成為夢(mèng)想中的高手QQ群:8664695
            posts - 17,comments - 32,trackbacks - 0

            1、lua學(xué)習(xí)之入門(一)----環(huán)境搭建

            2、lua學(xué)習(xí)之入門(二)----基礎(chǔ)語(yǔ)法1

            3、lua學(xué)習(xí)之入門(二)----基礎(chǔ)語(yǔ)法2

            4、lua學(xué)習(xí)之入門(三)----函數(shù)

            ????? 編程語(yǔ)言之所以叫做語(yǔ)言,因?yàn)樗哂姓Z(yǔ)言的特性,我們回憶一下學(xué)英語(yǔ)的過程,首先是學(xué)ABC字母,然后是單詞,然后是句子,最后到文章..其實(shí)編程語(yǔ)言也具有這樣的特性,標(biāo)識(shí)符等于"字母",值和變量還有API等于"單詞",語(yǔ)句塊或函數(shù),甚至是類等于"句子",一個(gè)程序就是一篇"文章"..今天我學(xué)習(xí)的是"句子",也就是語(yǔ)句塊.

            ????????在LUA里語(yǔ)句塊是由以下幾個(gè)構(gòu)成的

            第一:?? 語(yǔ)句組Chunks??

            chunk?:: = ?{stat?[`;′]}

            這兒不允許有空的語(yǔ)句段,所以?
            ' ;; ' ?是非法的。?

            lua?把一個(gè)?chunk?當(dāng)作一個(gè)擁有不定參數(shù)的匿名函數(shù)(參見?§
            2.5 . 9 )處理。正是這樣,chunk?內(nèi)可以定義局部變量,接收參數(shù),并且返回值。?

            chunk?可以被保存在一個(gè)文件中,也可以保存在宿主程序的一個(gè)字符串中。當(dāng)一個(gè)?chunk?被執(zhí)行,首先它會(huì)被預(yù)編譯成虛擬機(jī)中的指令序列,然后被虛擬機(jī)解釋運(yùn)行這些指令。?

            chunk?也可以被預(yù)編譯成二進(jìn)制形式;細(xì)節(jié)參考程序?luac。用源碼形式提供的程序和被編譯過的二進(jìn)制形式的程序是可以相互替換的;?Lua?會(huì)自動(dòng)識(shí)別文件類型并做正確的處理。?

            在手冊(cè)里,只有這簡(jiǎn)短的解析,對(duì)于一個(gè)初學(xué)者,其實(shí)真是很抽象(某XX教授:手冊(cè)有名字給你叫手冊(cè),用來查不是用來學(xué)的..我曰:沒有其他學(xué)習(xí)資料只有手冊(cè)的時(shí)候,它就是最好的學(xué)習(xí)資料.你是教授,級(jí)別高,可以單看代碼研究,偶水平差只能折騰手冊(cè)!)

            Chunks其實(shí)是一個(gè)代名,Chunk可以是簡(jiǎn)單的一句print("haha");也可以是一個(gè)函數(shù)外加一個(gè)輸出,輸入語(yǔ)句,甚至可以是一個(gè)文件,例如我們第一篇測(cè)試時(shí)候的test.lua....你可以簡(jiǎn)單的理解為Chunk是統(tǒng)稱..代表著一個(gè)由語(yǔ)句組成的集合..

            第二:語(yǔ)句塊blocks
            語(yǔ)句塊是一列語(yǔ)句段;從語(yǔ)法上來說,一個(gè)語(yǔ)句塊跟一個(gè)?chunk?相同:?

            ????block?::
            =?chunk

            一個(gè)語(yǔ)句塊可以被顯式的寫成一個(gè)單獨(dú)的語(yǔ)句段:?

            ????stat?::
            =?do?block?end

            顯式的語(yǔ)句塊對(duì)于控制變量的作用范圍很有用。有時(shí)候,顯式的語(yǔ)句塊被用來在另一個(gè)語(yǔ)句塊中插入?
            return?或是?break?
            代碼塊(語(yǔ)句塊):指一個(gè)控制結(jié)構(gòu)內(nèi),一個(gè)函數(shù)體,或者一個(gè)chunk(變量被聲明的那個(gè)文件或者文本串)。

            第三:控制結(jié)構(gòu)

            ??? 注意:??? 控制結(jié)構(gòu)的條件表達(dá)式結(jié)果可以是任何值,Lua認(rèn)為falsenil為假,其他值為真。

            ??????? 大學(xué)時(shí)候,老師跟我說,所有編程語(yǔ)言都是由三種結(jié)構(gòu)組成,順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu).個(gè)人認(rèn)為..這樣設(shè)置的原因,和人的生活有很大關(guān)系,我們從生老病死,這個(gè)就是一個(gè)最簡(jiǎn)單的順序結(jié)構(gòu).從生存到消失.人都需要的經(jīng)歷,但在生老病死的過程中我們又要面臨選擇..老爸老媽沒得選擇...你還沒生,就是你還不存在,所以你沒選擇的權(quán)利,那么就是說選擇是建立在已經(jīng)存在的基礎(chǔ)上的,所以編程就有了if(某某XX某某某)某某勝利..所以這個(gè)選擇必須要是有選擇前提的,如果這個(gè)選擇是永遠(yuǎn)都沒機(jī)會(huì)選擇..(例如選擇老母- -!沒得選的)這個(gè)選擇就沒有了選擇的意義了,還有循環(huán),就是重復(fù)實(shí)現(xiàn)某事情,例如讀書,7點(diǎn)起床然后上課,然后下課,然后沖涼,然后睡覺,然后又重復(fù)到7點(diǎn)起床然后上課,然后下課,然后沖涼,然后睡覺,然后又重復(fù)到7點(diǎn)起床..............,這就是一個(gè)循環(huán).你必須重復(fù)地做某些事情的時(shí)候,就可以用循環(huán)這個(gè)結(jié)構(gòu)是實(shí)現(xiàn)重復(fù)做某事.

            ???????? 既然人的一生都是用這三中結(jié)構(gòu)描述的,程序的出現(xiàn),目的就是幫助人,減輕人的工作量,做這些結(jié)構(gòu)也就是編程語(yǔ)言中的原住民了.

            LUA的選擇結(jié)構(gòu),貌似只有一種就是if
            stat?::=?if?exp?then?block?{elseif?exp?then?block}?[else?block]?end
            簡(jiǎn)單的一句,就表明了,if-else支持嵌套elseif? 寫法有點(diǎn)像VB....
            if?a>10?then??print("超過10歲")?
            else?print("小于10歲")?
            ?? end
            這個(gè)就是一個(gè)簡(jiǎn)單的選擇結(jié)構(gòu)...有編程基礎(chǔ)的一看就懂了.

            LUA的循環(huán)結(jié)構(gòu),有三種,分別是while exp do block end , repeat block until exp ,for Name `=′ exp `,′ exp [`,′ exp] do block end
            1.while exp do block end
            while?condition?do

            ????statements;

            end;
            2. repeat block until exp
            repeat

            ????statements;

            until?conditions;
            有點(diǎn)類似do?
            while
            3.for....在LUA里for是有兩種情況,如果用C#來描述的話,LUA的for含蓋了C#里的for和foreach兩種,

            ????? 數(shù)值for

            for?var=exp1,exp2,exp3?do

            ????loop
            -part

            end
            for將 從exp1(初始值)到exp2(終止值),exp3是一個(gè)變化跨度值, 執(zhí)行l(wèi)oop
            -part。其中exp3可以省略,默認(rèn)跨度默認(rèn)為1
            和傳統(tǒng)的for結(jié)構(gòu)一樣for(int i=0;i<10;i++),只是在LUA里簡(jiǎn)化了很多;
            例子:
            ?? for i=10,1,-2 do

            ?????? print(i)

            ?? end

            輸出結(jié)果為;
            10
            8
            6
            4
            2
            有幾點(diǎn)需要注意:
            ????????? 1. 三個(gè)表達(dá)式只會(huì)被計(jì)算一次,并且是在循環(huán)開始前。
            ????????? 2. 控制變量var是局部變量自動(dòng)被聲明,并且只在循環(huán)內(nèi)有效.
            ????????? 3. 循環(huán)過程中不要改變控制變量的值,那樣做的結(jié)果是不可預(yù)知的。如果要退出循環(huán),使用break語(yǔ)句


            范型for循環(huán):
            for?namelist?in?explist1?do?block?end

            這里和C
            #的foreach基本一樣
            c#:
            foreach(DataRow?ss?in?dataTbale.Rows)
            {
            ??
            //輸出ss[1]
            }

            LUA里
            days?
            =?{"Sunday",?"Monday",?"Tuesday",?"Wednesday",

            ??????????????
            "Thursday",?"Friday",?"Saturday"}

            for?v?in?ipairs(days)?do

            ????
            print(days[v]);

            end?

            只要自己測(cè)試一下就知道結(jié)果了.
            反正就是一個(gè)傳統(tǒng)循環(huán),一個(gè)迭代循環(huán)


            還需要補(bǔ)充一個(gè)語(yǔ)句就是break,和return
            break語(yǔ)句用來退出當(dāng)前循環(huán)(for、repeat、while)。在循環(huán)外部不可以使用。

            return用來從函數(shù)返回結(jié)果,當(dāng)一個(gè)函數(shù)自然結(jié)束時(shí),結(jié)尾會(huì)有一個(gè)默認(rèn)的return。(這種函數(shù)類似pascal的過程(procedure))

            Lua語(yǔ)法要求break和return只能出現(xiàn)在block的結(jié)尾一句(也就是說:作為chunk的最后一句,或者在end之前,或者else前,或者until前),例如:

            local?i?
            =?1

            while?a[i]?do

            ????
            if?a[i]?==?v?then?break?end

            ????i?
            =?i?+?1

            end

            有時(shí)候?yàn)榱苏{(diào)試或者其他目的需要在block的中間使用return或者break,可以顯式的使用do..end來實(shí)現(xiàn):

            function?foo?()

            ????
            return????????????--<<?SYNTAX?ERROR

            ????
            --?'return'?is?the?last?statement?in?the?next?block

            ????do?
            return?end????????--?OK

            ???????????????????
            --?statements?not?reached

            end

            基本的結(jié)構(gòu)我們都學(xué)習(xí)完了,學(xué)到這里我們基本的LUA都能看懂了,也不能算懂,起碼知道LUA的大概意思了,基礎(chǔ)語(yǔ)法(完)


            明鏡臺(tái)
            posted @ 2009-05-12 14:50 ^喬喬^ 閱讀(8693) | 評(píng)論 (0)編輯 收藏

            1、lua學(xué)習(xí)之入門(一)----環(huán)境搭建

            2、lua學(xué)習(xí)之入門(二)----基礎(chǔ)語(yǔ)法1

            3、lua學(xué)習(xí)之入門(二)----基礎(chǔ)語(yǔ)法2

            4、lua學(xué)習(xí)之入門(三)----函數(shù)


            ???? 學(xué)習(xí)LUA第6個(gè)小時(shí)了,這是第2篇文章,也是我今天學(xué)習(xí)的最后總結(jié)了,LUA我也是個(gè)初學(xué)者,我目標(biāo)只是想盡可能的把自己學(xué)習(xí)的一些想法表現(xiàn)出來.可能寫的沒有那些大蝦們好,大蝦們的生動(dòng).但至少是我個(gè)人的寫作,本人很不喜歡轉(zhuǎn)載的,轉(zhuǎn)載不如直接去別人BLOG看..再一次聲明..我是LUA初學(xué)者,一個(gè)初學(xué)者寫給初學(xué)者的....廢話不說..入正題.

            ?????
            ??????? 任何語(yǔ)言,首先要明白的是 標(biāo)識(shí)符 的命名規(guī)則,LUA的規(guī)則和C語(yǔ)言的沒太大分別都是由:字母,數(shù)字,下劃線組成,而且不能以數(shù)字開頭..貌似我會(huì)的編程語(yǔ)言都是這樣的規(guī)定..?? 這個(gè)沒啥技術(shù)難度....靠死記的..
            ??????? LUA的字符串表示是可以用單引號(hào)或者雙引號(hào)的...這點(diǎn)跟JAVASCRIPT是一樣的,
            ??????? 在LUA手冊(cè)里有一段這樣的東西

            ?????a? = ? ' alo\n123" '
            ?????a?
            = ? " alo\n123\ ""
            ?????a? = ? ' \97lo\10\04923" '
            ?????a?
            = ?[[alo
            ?????
            123 " ]]
            ?????a? = ?[ == [
            ?????alo
            ?????
            123 " ]==]
            手冊(cè)里的解釋是這樣的
            字符串還可以用一種長(zhǎng)括號(hào)括起來的方式定義。我們把兩個(gè)正的方括號(hào)間插入?n?個(gè)等號(hào)定義為第?n?級(jí)正長(zhǎng)括號(hào)。就是說,0?級(jí)正的長(zhǎng)括號(hào)寫作?[[?,一級(jí)正的長(zhǎng)括號(hào)寫作?[=[?,如此等等。反的長(zhǎng)擴(kuò)展也作類似定義;舉個(gè)例子,4?級(jí)反的長(zhǎng)括號(hào)寫作?]====]?。一個(gè)長(zhǎng)字符串可以由任何一級(jí)的正的長(zhǎng)括號(hào)開始,而由第一個(gè)碰到的同級(jí)反的長(zhǎng)括號(hào)結(jié)束。整個(gè)詞法分析過程將不受分行限制,不處理任何轉(zhuǎn)意符,并且忽略掉任何不同級(jí)別的長(zhǎng)括號(hào)。這種方式描述的字符串可以包含任何東西,當(dāng)然特定級(jí)別的反長(zhǎng)括號(hào)除外。?

            另一個(gè)約定是,當(dāng)正的長(zhǎng)括號(hào)后面立即跟了一個(gè)換行符,這個(gè)換行符就不包含在這個(gè)字符串內(nèi)。舉個(gè)例子,假設(shè)一個(gè)系統(tǒng)使用?ASCII?碼(這時(shí),
            'a'?編碼為?97?,換行符編碼為?10?,'1'?編碼為?49?),下面五種方式描述了完全相同的字符串:?

            很別扭啊手冊(cè)里的介紹是這個(gè)a所代表的字符串顯示都是一樣的...感覺犯暈啊...

            手冊(cè)例子想表達(dá)的意思我解析一下,
            a = 'alo\n123"'? 這個(gè)字符串是用單引號(hào)括起來的,123后面跟了個(gè)".....想表達(dá)的意思就是說,如果用單引號(hào)作為字符串的引用的話,內(nèi)部的雙引號(hào)做雙引號(hào)處理,
            a = "alo\n123\"" 這個(gè)字符串則是用雙引號(hào)括起來的,為了解決沖突,就要使用轉(zhuǎn)義字符\"去代表"
            a = '\97lo\10\04923"'? 這個(gè)其實(shí)就是ASCII碼轉(zhuǎn)義而已..
            最令人犯暈的是下面..
            a?=?[==[
            alo
            123"]==]
            這個(gè)想表達(dá)啥呢?其實(shí)這個(gè)作用和C#里的@""有點(diǎn)類似..有點(diǎn)像格式輸出吧,,
            里面的思想有個(gè)靈活的配對(duì),"[["? 在手冊(cè)里有個(gè)名字,叫長(zhǎng)括號(hào),而在"[==["中間的等號(hào)個(gè)數(shù)代表多少級(jí)的長(zhǎng)括號(hào),沒有等號(hào)為0級(jí),1個(gè)等號(hào)為1級(jí),類推下去.

            開始在代碼里,我以為這里"級(jí)"的意義在于這個(gè)字符串占多少行的意思,但是經(jīng)過我代碼的測(cè)試原來沒任何關(guān)系..
            依照我這個(gè)初學(xué)者的猜測(cè)...設(shè)置這些的意義,目的就是一個(gè)避免字符串內(nèi)過多的使用轉(zhuǎn)義字符吧,LUA的目標(biāo)是要做嵌入腳本語(yǔ)言,
            例如有個(gè)游戲的對(duì)白,
            小孩說:"很牛啊"
            牛說:
            "不牛"
            牛說:
            "]]"
            小孩說:
            "]=]"
            將以上字符
            a=[==[
            小孩說:"很牛啊"
            牛說:
            "不牛"
            牛說:
            "]]"
            小孩說:
            "]=]"]==]
            這樣在[==[里就可以使用任何的字符串表達(dá)符,提供了更大的靈活性.


            后來我咨詢了下LUA高手他給我的答復(fù)如下
            這個(gè)是5.1版本新加的功能,我想主要的作用是屏蔽轉(zhuǎn)義字符的作用的,在5.0的時(shí)候,我們寫lua都需要自己可意去回避一些轉(zhuǎn)義字符..這個(gè)只是我個(gè)人想法,你可以問問其他人,目前我實(shí)際應(yīng)用的開發(fā)都是5.0居多,這個(gè)是5.1新加的,我也不是很確定,但照字面意思..就算不全對(duì),也差不多了

            看來我的猜想是正確的.


            變量

            LUA稱為腳本語(yǔ)言,那么就注定了他的變量是弱類型的,就是說變量沒有類型,至少我認(rèn)識(shí)的腳本語(yǔ)言JAVASCRIPT就是沒類型的.所以姑且把腳本語(yǔ)言定義為變量沒有類型的語(yǔ)言就是腳本語(yǔ)言...(某XX教授:你丫的亂下定義誤人子弟!..純粹是幫助記憶...別教真...別教真).
            ?????????????????????????????????????變量沒有類型,有類型的只是值 (腳本語(yǔ)言的特點(diǎn))?????????
            Lua?中有八種基本類型:?nil,?boolean,?number,?string,?function,?userdata,?thread,?and?table.?Nil?類型只有一種值?nil?,它的主要用途用于標(biāo)表識(shí)和別的任何值的差異;通常,當(dāng)需要描述一個(gè)無意義的值時(shí)會(huì)用到它。?Boolean?類型只有兩種值:false?和?true。?nil?和?false?都能導(dǎo)致條件為假;而另外所有的值都被當(dāng)作真。?Number?表示實(shí)數(shù)(雙精度浮點(diǎn)數(shù))。(編譯一個(gè)其它內(nèi)部數(shù)字類型的?Lua?解釋器是件很容易的事;比如把內(nèi)部數(shù)字類型改作單精度浮點(diǎn)數(shù)或長(zhǎng)整型。參見文件?luaconf.h?。)?String?表示一串字符的數(shù)組。?Lua?是?8-bit?clean?的:字符串可以包含任何?8?位字符,包括零結(jié)束符?('\0')?

            userdata 類型用來將任意 C 數(shù)據(jù)保存在 Lua 變量中。這個(gè)類型相當(dāng)于一塊原生的內(nèi)存,除了賦值和相同性判斷,Lua 沒有為之預(yù)定義任何操作。然而,通過使用 metatable (元表) ,程序員可以為 userdata 自定義一組操作. userdata 不能在 Lua 中創(chuàng)建出來,也不能在 Lua 中修改。這樣的操作只能通過 C API。這一點(diǎn)保證了宿主程序完全掌管其中的數(shù)據(jù)。

            大家都知道,C語(yǔ)言里有幾個(gè)特別的數(shù)據(jù)構(gòu)造,例如,結(jié)構(gòu)體,共用體等,這個(gè)userdata 類型其實(shí)就滿足結(jié)構(gòu)體傳值的功能的數(shù)據(jù)類型,至少我現(xiàn)在是這樣理解的..至于元表我還沒有接觸,暫時(shí)將userdata 類型等同于一個(gè)只讀類型.

            Lua 中有三類變量:全局變量,局部變量,還有 table 的域。 其實(shí)今天大多的時(shí)候都花費(fèi)在字符串里,但是一種語(yǔ)言來說,字符也是一個(gè)很重要的重點(diǎn),例如C#基本提供了每個(gè)類都是 ToString()方法,C語(yǔ)言,單獨(dú)用一章介紹字符串,數(shù)據(jù)結(jié)構(gòu)里也獨(dú)立一個(gè)章專門說字符串,所以這個(gè)字符串是在我們?nèi)粘i_發(fā)中經(jīng)常用到的,對(duì)它理解得深其實(shí)是有好處的...今天就到這里

            明鏡臺(tái)
            posted @ 2009-05-12 00:20 ^喬喬^ 閱讀(4700) | 評(píng)論 (3)編輯 收藏

            絕對(duì)原創(chuàng)

            1、lua學(xué)習(xí)之入門(一)----環(huán)境搭建

            2、lua學(xué)習(xí)之入門(二)----基礎(chǔ)語(yǔ)法1

            3、lua學(xué)習(xí)之入門(二)----基礎(chǔ)語(yǔ)法2

            4、lua學(xué)習(xí)之入門(三)----函數(shù)

            要學(xué)習(xí)編程,必須的一肯定是編譯工具,和一些調(diào)試工具,我使用的Lua-5.1.4下載地址:http://www.lua.org/ftp/lua-5.1.4.tar.gz,

            接觸未知道的東西應(yīng)該怎么做,肯定是找GOOGLE咯,一搜索....網(wǎng)上教我是這樣做的的:

            (來自http://bbs.luaer.cn/read-Lua-tid-105.html)
            (1) 下載Lua壓縮包,下載頁(yè)面是http://www.lua.org/download.html 最新版本是lua-5.1.2
            也可以點(diǎn)擊這里直接下載:http://www.lua.org/ftp/lua-5.1.2.tar.gz? 它的體積很小,只有210K
            (2)解壓文件,比如解壓到 D:/lua-5.1.2 文件夾內(nèi)(以下均以此路徑為例)。
            (3)在 D:/lua-5.1.2內(nèi),存在名為 /etc的子目錄。在此目錄下找到 luavs.bat 文件,并將它復(fù)制到 D:/lua-5.1.2 中。
            (4)雙擊執(zhí)行 luavs.bat 批處理文件,如果執(zhí)行成功,在 D:/lua-5.1.2/src 文件夾中會(huì)存在 luac.exe lua.exe兩個(gè)文件。
            (5)將 D:/lua-5.1.2/src 加入到系統(tǒng)路徑中。
            (6)檢測(cè)Lua是否安裝成功:
            在"開始"--"運(yùn)行"處輸入 lua 然后回車,若出現(xiàn)cmd控制臺(tái)界面且含有"[backcolor=rgb(255,]Lua 5.1.2"之類的文字,則說明Lua已經(jīng)成功安裝。如果提示沒有找到該命令,請(qǐng)檢查D:/lua-5.1.2/src 文件夾中是否存在 luac.exe lua.exe 兩個(gè)文件,并確保已將 D:/lua-5.1.2/src 加入到系統(tǒng)路徑中。

            教的是5.1.2,我用的是5.1.4....相對(duì)我這種初學(xué)者來說,沒多大分別..
            所以我照著做了....
            運(yùn)行luavs.bat


            一閃,完全不知道什么事情,打開E:\lua-5.1.4\src(我放在E盤).什么都沒發(fā)生.好你有種你閃,我就不讓你閃,我->開始->運(yùn)行 CMD ->E: -> CD E:\lua-5.1.4->luavs.bat/得到的結(jié)果....LINK失敗等一大堆信息.....突然腦袋一片空白...咋辦...再試..認(rèn)真看了出錯(cuò)信息..原來...這個(gè)BAT是一個(gè)起編譯的作用的...我用我裝的VS2008編譯你試試吧!!死馬當(dāng)活馬醫(yī),開始->程序->Microsoft Visual Studio 2008->Visual Studio Tools->Visual Studio 2008 命令提示 輸入CD E:\lua-5.1.4->E:->luavs.bat
            ??? OK....成功生成luac.exe,lua.exe....進(jìn)行下一步打開環(huán)境變量->系統(tǒng)變量->Path加上E:\lua-5.1.4\SRC再去 CMD里,輸入LUA.....得到以下結(jié)果是LUA的版權(quán)信息...很好證明環(huán)境已經(jīng)成功搭建....我們可以開始下一步工作...

            然后我們?cè)谟浭卤鞠戮帉懸粋€(gè)
            print("-----------------------------");
            print("測(cè)試LUA~~~梁?jiǎn)谭?009");
            print("-----------------------------");
            并保存為test.lua
            然后在CMD下運(yùn)行 lua h:\test.lua

            ----------------------------------------
            測(cè)試LUA~~~梁?jiǎn)谭?009
            ----------------------------------------

            GOOD JOB.......我們終于成功地跑起第一個(gè)LUA了,激動(dòng)吧!!

            明鏡臺(tái)

            posted @ 2009-05-11 16:30 ^喬喬^ 閱讀(4203) | 評(píng)論 (5)編輯 收藏
                 摘要: Boost 類庫(kù)是個(gè)開源的類庫(kù),傳說中的準(zhǔn)標(biāo)準(zhǔn)庫(kù)這下將會(huì)是我閱讀Boost 多線程源代碼的心得.費(fèi)話少說,在使用BOOST的多線程我們都會(huì)引入boost/thread.hpp這一個(gè)文件好我們先找到這個(gè)文件將它打開?1//?Copyright?(C)?2001-2003?2//?William?E.?Kempf?3//?(C)?Copyright?2008?Anthony?Williams?4//?...  閱讀全文
            posted @ 2009-05-09 20:43 ^喬喬^ 閱讀(1967) | 評(píng)論 (1)編輯 收藏

            執(zhí)行審核上則是每處理一個(gè)環(huán)節(jié),就插入一個(gè)環(huán)節(jié)的信息.


            我個(gè)人認(rèn)為實(shí)現(xiàn)審核的代碼使用存儲(chǔ)過程去實(shí)現(xiàn)要比用C#代碼去實(shí)現(xiàn)要好,至于用事務(wù)處理感覺還是差點(diǎn),因?yàn)槿绻粋€(gè)系統(tǒng)的事務(wù)處理過多,會(huì)造成處理緩慢,而用C#代碼去實(shí)現(xiàn),則需要進(jìn)行多次的查詢數(shù)據(jù)庫(kù),操作過程也比較復(fù)雜..所以我覺得還是用存儲(chǔ)過程去實(shí)現(xiàn)是最理想的.


            ?1 Create ?? procedure ?ExecFlowAuditPass
            ?2 (
            ?3 @AuditMainID ? int ,
            ?4 @UserID ? varchar ( 100 ),
            ?5 @AuditOpinion ? ntext ,
            ?6 @Auditstatus ? int
            ?7 )
            ?8 As
            ?9 -- 獲取最后審核的節(jié)點(diǎn)
            10 declare ? @posid ? int
            11 select ? @posid ? = ? max (Sequence)? from ?審核子表? where ?MainID = ? @AuditMainID
            12 -- 獲取最大審核的節(jié)點(diǎn)
            13 declare ? @maxposid ? int
            14 select ? @maxposid = max (Sequence)? from ?流程子表? where ?MainID = ? @AuditMainID
            15 -- 獲取將審核節(jié)點(diǎn)角色資料
            16 declare ? @UserGroupID ? int
            17 select ? @UserGroupID ? = ?UserGroupID? from ?審核子表? where ?MainID = ? @AuditMainID ? and ?Sequence = @posid + 1
            18 -- 角色不符
            19 if ?( select ? count ( * )? from ?員工表? where ?員工ID = @UserID ? and ?角色I(xiàn)D? = ? @UserGroupID ) = 0
            20 begin
            21 ?? select ? * ? from ?審核子表? where ??MainID = ? @AuditMainID
            22 ?? print ? - 1 ;
            23 ?? return ? - 1 ;
            24 end
            25 -- 角色符合執(zhí)行
            26 if ? @Auditstatus ? = 1
            27 begin
            28 insert? into ?流程子表(MainID,AuditOpinion,Auditstatus,Sequence,AuditID,CreateDate,角色I(xiàn)D)? values ( @AuditMainID , @AuditOpinion , 1 , @posid + 1 , @UserID , getdate (), @UserGroupID )
            29 ??????????? if ? @posid ? + 1 ? = ? @maxposid
            30 ???????????? begin
            31 ????????????????? update ?審核主表? set ?Auditstatus? = ? 3 ? where ? [ ID ] = @AuditMainID ?
            32 ????????????? end
            33 end
            34 else
            35 begin
            36 ?????????????????? insert? into ?流程子表(MainID,AuditOpinion,Auditstatus,Sequence,AuditID,CreateDate,角色I(xiàn)D)? values ( @AuditMainID , @AuditOpinion , 0 , @posid + 1 , @UserID , getdate (), @UserGroupID )
            37 ???????????????? update ?審核主表? set ?Auditstatus? = ? 2 ? where ? [ ID ] = @AuditMainID ?
            38 end

            這個(gè)就是執(zhí)行審核的存儲(chǔ)過程,

            現(xiàn)在主任C1打開審核系統(tǒng),根據(jù)需要,他只能看到它能看的審核.

            ?1 Create ? procedure ?GetListAudit
            ?2 (
            ?3 ? @userid ? varchar ( 100 ),
            ?4 ? @statusid ? int ? -- 0待審核,1已審核,2歷史記錄
            ?5 )
            ?6
            ?7 AS
            ?8 if ? @statusid ? = 1
            ?9 begin ?
            10 ?? select ? * ?
            11 ?? from ?審核主表?
            12 ?? where ? [ ID ] ? in ?
            13 ??(
            14 ???? Select ?MainID? from ?審核子表?
            15 ???? where ?AuditID? = ? @userid
            16 ???)
            17 end
            18 if ? @statusid ? = 0
            19 begin
            20 ?? select ? *
            21 ?? from ?審核主表?
            22 ?? where ? [ ID ] ? not ? in
            23 ??(
            24 ????? select ?MainID? from ?審核子表?
            25 ?????? where ?AuditID? = ? @userid
            26 ??)
            27 ?? and ?ProcessID? in ?
            28 ??(
            29 ???? Select ?MainID? from ?流程子表
            30 ????? where ?UserGroupID? in ?
            31 ?????(
            32 ?????? select ?角色I(xiàn)D? from ?員工表
            33 ??????? where ?員工ID = @userid
            34 ??????)
            35 ??)
            36 end
            37 if ? @statusid ? = 2
            38 begin ?
            39 ?? select ? *
            40 ?? from ?審核主表?
            41 ?? where ?Auditstatus? in ( 2 , 3 )
            42 ?? and ?ProcessID? in
            43 ??(
            44 ???? Select ?MainID? from ?流程子表
            45 ????? where ?UserGroupID? in ?
            46 ?????(
            47 ?????? select ?角色I(xiàn)D? from ?員工表
            48 ??????? where ?員工ID = @userid
            49 ??????)
            50 ??)
            51 end

            上面的存儲(chǔ)過程還可以增加未提交的列表
            只需要一個(gè)存儲(chǔ)過程就實(shí)現(xiàn)了,未提交,已經(jīng)審核,未審核,和歷史審核記錄,
            并將這些不同的狀態(tài)定義為一個(gè)枚舉類型.

            我們實(shí)現(xiàn)了,審核操作,和查看審核信息,還缺少什么呢?還缺少一個(gè)文件跟蹤功能,就是審核流程走到哪個(gè)角色的功能

            ?1 Create ? procedure ?GetListAuditTrail
            ?2 (
            ?3 ?? @AuditMainID ? int ? -- 審核單號(hào)
            ?4 )
            ?5 AS
            ?6
            ?7 Select ?a. * ?b.AuditID,b.CreateDate?Dates
            ?8 from ?流程子表?a? left ? join ?審核子表?b
            ?9 on ?a.Sequence? = ?b.Sequence
            10 where ?b.MainID = @AuditMainID ? and ?
            11 ???a.MainID? in ?( select ?ProcessID? from ?審核主表? where ? [ ID ] = @AuditMainID ?)


            從安全性來說,我覺得應(yīng)該進(jìn)行下用戶權(quán)限檢驗(yàn)的.
            其實(shí)我個(gè)人寫存儲(chǔ)過程有個(gè)習(xí)慣的,如果這個(gè)存儲(chǔ)過程是返回一個(gè)列表的,我喜歡用GetList為開頭,如果執(zhí)行性存儲(chǔ)過程則喜歡Exec,如果只是返回一個(gè)值的用則是GetOnly開頭,

            明鏡臺(tái)

            posted @ 2009-05-09 15:37 ^喬喬^ 閱讀(2446) | 評(píng)論 (2)編輯 收藏

            最近在Q群里,有幾個(gè)人問到的文件上傳,大多數(shù)是問,如何判斷,如何獲取文件大小之類的,本文首先對(duì)FileUpload控件作出解析,

            一般文件上傳頁(yè)面都會(huì)作為一個(gè)獨(dú)立的頁(yè)面處理,因?yàn)樾枰薷膄rom標(biāo)記的傳輸方式,尤其是使用FileUpload里的PostedFile屬性的時(shí)候,必須要加上enctype="multipart/form-data".否則不能正確的獲取到PostedFile屬性,

            而PostedFile屬性里,封裝了幾個(gè)很有用的屬性,分別是:ContentType、ContentLength、FileName、InputStream.

            ContentType 主要獲取文件的類型,而不是文件的后聚名,在一定程度上,可以起來類型判定的作用,

            ContentLength 獲取文件大小。

            FileName 文件名字。

            InputStream 以流方式輸入。

            這個(gè)InputStream其實(shí)是個(gè)很有用的東西,很多人想問,如果我要在上傳的時(shí)候修改圖片大小,幫圖片加水印,這些加工工序,InputStream可以幫到你在上傳文件的同時(shí),作出上操作

            下面是我一個(gè)例子的代碼貼,主要作用是上傳圖片

            ASPX頁(yè)面

            ?

            < table? width ="340px" ?height ="180px" ?style ="margin:?0px;?padding:?0px" >
            ????????????
            < tr >
            ????????????????
            < td? class ="td3" ?width ="20px" >
            ????????????????????
            < asp:FileUpload? ID ="PhotoFileUpload" ?runat ="server" ? />
            ????????????????????
            < asp:Button? ID ="UpImageBtn" ?runat ="server" ?Text ="上傳圖片" ?OnClick ="UpImageBtn_Click" ? />
            ????????????????
            </ td >
            ????????????
            </ tr >
            ????????????
            < tr >
            ????????????????
            < td? class ="td4" ?height ="140px" ?valign ="top" >
            ????????????????????
            < ul? style ="color:?mediumslateblue;?text-align:?left" >
            ????????????????????????????
            < li > 本系統(tǒng)只支持200K以內(nèi)的圖片 </ li >
            ????????????????????????????
            < li > 只支持JPG、GIF、PNG格式 </ li >
            ????????????????????????
            </ ul >
            ????????????????????
            < asp:Panel? ID ="UpLoadedPanel" ?runat ="server" ?Visible ="false" >
            ????????????????????????
            < ul? style ="color:?Red;?text-align:?left" >
            ????????????????????????????
            < li > 文件位置: < asp:Literal? ID ="FilePlaceLi" ?runat ="server" ></ asp:Literal ></ li >
            ????????????????????????????
            < li > 文件類型: < asp:Literal? ID ="FileTypeLi" ?runat ="server" ></ asp:Literal ></ li >
            ????????????????????????????
            < li > 文件大小: < asp:Literal? ID ="FileLenghtLi" ?runat ="server" ></ asp:Literal > KB </ li >
            ????????????????????????
            </ ul >
            ????????????????????
            </ asp:Panel >
            ????????????????
            </ td >
            ????????????
            </ tr >
            ????????????
            < tr >
            ????????????????
            < td? class ="td3" >
            ????????????????????
            < asp:Label? ID ="MessageBoxLab" ?runat ="server" ></ asp:Label >
            ????????????????????
            < input? type ="button" ?id ="ClossWindows" ?value ="完成" ?onclick ="ThisOk()" ? />
            ????????????????
            </ td >
            ????????????
            </ tr >
            ????????
            </ table >

            ?

            CS代碼:

            ?1 protected ? void ?UpImageBtn_Click( object ?sender,?EventArgs?e)
            ?2 ???? {
            ?3 ???????? if ?(Page.IsValid)
            ?4 ???????? {
            ?5 ???????????? if ?(PhotoFileUpload.HasFile)
            ?6 ???????????? {
            ?7 ????????????????UpLoadedPanel.Visible? = ? true ;
            ?8 ????????????????FilePlaceLi.Text? = ?PhotoFileUpload.PostedFile.FileName;
            ?9 ????????????????FileLenghtLi.Text? = ?(PhotoFileUpload.PostedFile.ContentLength? / ? 1024 ).ToString();
            10 ????????????????FileTypeLi.Text? = ?PhotoFileUpload.PostedFile.ContentType;
            11 ???????????????? string ?fileName? = ?PhotoFileUpload.FileName;
            12 ???????????????? string ?strExPrentFile? = ?fileName.Substring(fileName.LastIndexOf( " . " )? + ? 1 );
            13 ???????????????? string ?strFileType? = ?PhotoFileUpload.PostedFile.ContentType;
            14 ???????????????? string []?upExPrentFile? = ? new ? string []? {? " image/pjpeg " ,? " image/gif " ,? " image/x-png " } ;
            15 ???????????????? bool ?IsUp? = ? false ;
            16 ???????????????? for ?( int ?i? = ? 0 ;?i? < ?upExPrentFile.Length;?i ++ )
            17 ???????????????? {
            18 ???????????????????? if ?(strFileType.Trim().ToLower().Equals(upExPrentFile[i].ToLower()))
            19 ???????????????????? {
            20 ????????????????????????IsUp? = ? true ;
            21 ????????????????????}

            22 ????????????????}

            23 ???????????????? if ?(IsUp)
            24 ???????????????? {
            25 ???????????????????? string ?SavePath? = ? string .Format( " ../Photo/{0}.{1} " ,?DateTime.Now.ToString( " mmhhddss " ),?strExPrentFile);
            26
            27
            28 ???????????????????? if ?((PhotoFileUpload.PostedFile.ContentLength? / ? 1024 )? < ? 200 )
            29 ???????????????????? {
            30 ???????????????????????? object ?imag? = ?PhotoFileUpload.PostedFile.InputStream;
            31 ????????????????????????ImageSize?mm? = ? new ?ImageSize(); //
            32 ???????????????????????? string ?oo? = ? "" ;
            33 ????????????????????????mm.SaveThreePicture(imag,?Server.MapPath(SavePath),? out ?oo);
            34
            35 ????????????????????????MessageBoxLab.Text? = ? " 上傳成功 " ;
            36 ????????????????????????HiddenText.Value? = ?oo;
            37 ????????????????????}

            38 ???????????????????? else
            39 ???????????????????? {
            40 ????????????????????????MessageBoxLab.Text? = ? " 文件大小不允許超過200K " ;
            41 ????????????????????}

            42 ????????????????}

            43 ???????????????? else
            44 ???????????????? {
            45 ????????????????????MessageBoxLab.Text? = ? " 文件類型不正確 " ;
            46 ????????????????}

            47 ????????????}

            48 ????????}

            49 ????}

            50
            posted @ 2009-05-09 11:29 ^喬喬^ 閱讀(1353) | 評(píng)論 (2)編輯 收藏
            在應(yīng)用OA中,審核流程是必不可少的部分,如何設(shè)計(jì)能令審核流程更動(dòng)態(tài),更靈活.以下是我個(gè)人的實(shí)現(xiàn)思想.有不同意的歡迎指出..

            ??????? 在審核流程部分,應(yīng)該需要三張數(shù)據(jù)表,流程主表,流程子表,角色表(職位等級(jí)表).

            ?????????流程主表:需要用以下字段
            ??????????????????自動(dòng)添加的主鍵ID int.
            ?????????????????? 流程名稱,title nvarchar(100),
            ???????????????????流程備注,Remove nvarchar(500),
            ?????????????????? 建立日期CreateDate?? DateTime,
            ????????? 流程子表:
            ?????????????????? 自動(dòng)添加的主鍵ID int.
            ????????????????????流程主表MainID int,
            ??????????????????? 流程序列Sequence int ,
            ????????????????????步驟名稱StepsName nvarchar(100),
            ????????????????????步驟備注,Remove nvarchar(500),
            ????????????????????角色名稱 UserName? nvarchar(100),
            ??????????????????? 流程角色(以職位區(qū)分) UserGroupID? int,
            ????????? 角色表:
            ?????????????????? 角色I(xiàn)D?? int,
            ???????????????????角色名稱, name varchar(100),
            ?????????????????? 建立日期CreateDate?? DateTime,
            ????????? 員工表:
            ?????????????????? 員工ID varchar(100)
            ???????????????????角色I(xiàn)D?int ,


            做到這里,我們基本實(shí)現(xiàn)了自定義流程的初始化信息數(shù)據(jù)表實(shí)現(xiàn)了,需要實(shí)現(xiàn)審核流程,必不可少的部分是審核功能表,
            ??????????? 審核主表,審核子表

            ??????????? 審核主表:
            ??????????????????? 審核文件單號(hào):ID? int
            ??????????????????? 審核文件日期: AuditDate? DateTime
            ????????????????????審核文件標(biāo)題:AuditTitle??nvarchar(500)
            ????????????????????審核文件內(nèi)容:AuditBody?ntext,
            ??????????????????? 審核狀態(tài):Auditstatus?int,??????? --0未提交,1未審核,2未通過,3已通過,
            ??????????????????? 審批手續(xù)ProcessID? int
            ??????????? 審核子表:
            ??????????????????? 審核子表ID? int?
            ??????????????????? 審核主表MainID int,
            ????????????????????審核意見AuditOpinion??ntext
            ????????????????????審核狀態(tài)Auditstatus bit?? ---0駁回,1是通過,
            ??????????????????? 審核角色I(xiàn)D? int ,
            ????????????????????審核流程序列?Sequence int,
            ??????????????????? 審核/提交人AuditID varchar(100) --(員工ID)
            ????????????????????審核日期CreateDate?? DateTime,

            整個(gè)審核流程所用的的數(shù)據(jù)表我們已經(jīng)全部建好了,現(xiàn)在我們模擬一下.
            ????????????????????

            某省某市的房產(chǎn)局,有三種房產(chǎn)審批流程.
            ?????????1\為房地產(chǎn)代辦,:???????????????ID為1
            ???????? 2\為二手房轉(zhuǎn)手???????????????? ID為2
            ???????? 3\為自建房?????????????????????????ID為3.

            ID為1,由房地產(chǎn)商統(tǒng)一辦理,走特殊通道,直接提交到XX部部長(zhǎng)審批-->局長(zhǎng)審批
            ID為2,有房產(chǎn)局員工提出,提交到主任審批-->SS部部長(zhǎng)審批-->局長(zhǎng)審批
            ID為3,由報(bào)建局-->房產(chǎn)局員工-->主任審批-->SS部部長(zhǎng)審批-->局長(zhǎng)審批


            基本的信息我們也已經(jīng)模擬好了,現(xiàn)在A1來到房產(chǎn)局,申請(qǐng)2類房產(chǎn)證審批流程,

            由房產(chǎn)局員工B1審查所有資料是否齊全,B1提交審查資料,我們得到一個(gè)ID為1的審核文件單號(hào),主任C1只能看到又B1提交的審查資料,SS部長(zhǎng)只能查看主任級(jí)提交的審查資料,局長(zhǎng)審查部長(zhǎng)級(jí)的資料.

            具體的實(shí)現(xiàn)代碼明天再寫

            明鏡臺(tái)
            posted @ 2009-05-09 00:39 ^喬喬^ 閱讀(3162) | 評(píng)論 (1)編輯 收藏
            僅列出標(biāo)題
            共2頁(yè): 1 2 
            久久久久亚洲AV片无码下载蜜桃| 久久久一本精品99久久精品88| 国产三级精品久久| 久久国产一区二区| 久久九九久精品国产| 99蜜桃臀久久久欧美精品网站 | 秋霞久久国产精品电影院| 国产三级精品久久| 无码AV波多野结衣久久| www亚洲欲色成人久久精品| 日韩欧美亚洲综合久久| 久久精品国产亚洲麻豆| 久久天天躁狠狠躁夜夜不卡| 99国产精品久久| 日产精品久久久久久久| 88久久精品无码一区二区毛片| 一本一本久久a久久精品综合麻豆| 国产精品免费看久久久| 欧美久久久久久| 99热成人精品免费久久| 亚洲伊人久久精品影院| 亚洲国产精品狼友中文久久久 | 久久久久女人精品毛片| 日本高清无卡码一区二区久久| 国产99精品久久| 久久99国产综合精品免费| 久久香综合精品久久伊人| 久久久国产精品| 国产精品激情综合久久| 中文字幕成人精品久久不卡| 99久久99久久精品免费看蜜桃 | 久久国产免费观看精品| 久久久久亚洲av无码专区喷水 | 国产精品久久久久久久久| 97精品依人久久久大香线蕉97| 亚洲精品无码久久不卡| 久久综合五月丁香久久激情| 久久精品国产精品亚洲下载| 久久久久亚洲av毛片大| 久久影视综合亚洲| 久久久久亚洲精品日久生情 |