作者game0416 (鳳狼)
看板NTUE-CS102
標題Re: [閒聊] 程設作業
時間Thu May 26 00:17:22 2011
人參,我覺得下份作業比較令人恐懼..吧
總而言之該來寫我自己覺得拖稿一個月的網頁小算盤hmm
雖然我也覺得拿jsp或php寫小算盤,從很多角度來看都亂詭異的感覺
只是說,要學習form的使用,還有基本語法等等
好像也沒其他正常點的東西可以寫的樣子
下頁正文
--
姑且先不論詳細
在做之前..簡單分析一下小算盤有些什麼東西,實作有多少東西要注意
: 啊..是說這題目對win7使用者意外麻煩的是找不到目標程式參考_A_
介面來看,大概是兩個區塊
顯示數值的一塊區域,跟底下各個按鈕兩塊
這邊應該不算明確的大問題,前者是個textarea,後者是群button
再來是後台,也就是運算這部分來看
這個"數值"分為兩個部分,一個是要顯示在畫面上的(我稱為
前景)
另外一個是運算子之前,那一項不會顯示在螢幕上的(
後景)
以及前次要求運算的
運算子
以一個數學式為例,與顏色對照在執行上,分別會存在哪個變數就會是
1 + 2 =
3
操作流程也蠻單純的..點1 點+ 點2 點= 螢幕上就顯示3
這樣做得完...
我是覺得就拿80%,那個小數沒嚴苛要求防呆,所以是嚇人用的計分標準
--
嗯..所以讓我們來從介面這部分看看..
html部分大原則還蠻單純的
一個textarea,然後大量的submit按鈕
這邊可以注意兩個點
一是所有的submit可以全部取為name相同,value不同
反正小算盤怎樣都是一次一個指令,這樣做會比較好取得進來的指令
可以統一用一套格式解決所有狀況
另外一個是排版這件事的話...
不要想太多,開個n*m表格就能處理掉了
不要想調整什麼東西,時間花在應該花的地方吧
此外,依據程式碼變數寫法部分,可以用hidden欄位做簡單保留值行為
反正小算盤沒有安全性需求(?)
--
看程式碼部分..
簡單來看這兩份作業,其實就是判別使用者submit的按鍵是什麼
然後對照作處理、存進應該存的變數就好
首先是jsp字串處理比較複雜的要用equals這個函式處理
php只要單純$var == "text"就能解決,無腦的好幫手(?)
用前述1+2=3,這樣做code範例來說明,應該是足夠表現整個內容怎麼寫了..
先做點基本前提的html部分
<form action="self.php" method="post">
<input type="submit" name="cmd" value="1">
<input type="submit" name="cmd" value="2">
<input type="submit" name="cmd" value="+">
<input type="submit" name="cmd" value="=">
</form>
--
首先,取得值蠻多方法..php來說,我是習慣post就用$_POST['hash'];來取得
然後呢..小算盤可以分為運算子與數值兩種輸入
然後數值部分全都是同一套處理流程,所以其實可以這樣寫判斷
<?php
$cmd = $_POST['cmd'];
if ($cmd == "+"){
}
else if ($cmd == "="){
}
else{
}
?>
else內就是數值、小數點等等的這樣
不做防呆的情況..數值都可以直接把輸入得到的$cmd接在字串最後
以下頁為例
--
假設既有數值 102
不管下一個輸入是小數點,或其他數值
都表示會變成
102. 或 1023
在程式中,這都同樣能用 $fn = $fn.$cmd; 處理掉
所以else裏頭就只要另外注意
如果是一開始沒有值要先改為0
然後原本是0,要輸入進其他數字而非小數點時,要取代過去即可
: fn即指前景數
再來看($cmd == "+")的情況
因為在小算盤的功能裏頭,+-*/同時會先把前面的運算式做次處理
所以這裡要先檢查有沒有前一個運算子...這裡用的變數是$pastcmd
只要存在的話,就照$pastcmd所表示的運算子處理,存進$fn
若不存在,或處理完後,就把$fn存進$bg
再把這次抓取的$cmd這個運算子,存進$pastcmd
喔有點複雜...來看看這頁說明的code實際長相
--
<?php
$cmd = $_POST['cmd'];
$fn = $_POST['fn'];
$bg = $_POST['bg'];
$pastcmd = $_POST['pastcmd']
if ($cmd == "+"){
if ($pastcmd == "+")
$fn = $fn + $bg;
$bg = $fn;
$fn = 0;
$pastcmd = $cmd;
}
else if ($cmd == "="){
}
else{
if ($fn!=0 || $cmd=="." )
$fn = $fn.$cmd;
else
$fn = $cmd;
}
?>
--
好,所以因為有了 + 的部分
=也是差不多的方法,此外就是-*/也用差不多的方法就能解決
要記得,php會自動轉型...所以運算上可以用這麼懶(?)的方式計算
針對0. 這樣的字串,也會轉型成 0 來算
至於特殊功能的部分,google "php math"
查查函式,直接對$fn開下去就是
有時候我不太懂這些評分要求的實質意義在哪(?)
至於MR MC M+ M-...查一下運作模式
多用幾個變數就能處理了
--
啊對,如果你們很有種的話可以putty上去伺服器,跑去隔壁的資料夾cat看code
--
所恐懼的,不是沒有知識的大眾 所憎恨的,不是深沉幽暗的人心
而是自以為是的思考之聲 而是自恃甚高的執法者
所毀滅的,不是溫馨和諧的世界 這是我最後的期許,沒有憤怒、沒有悔恨
而是自欺欺人的夢境 只剩下,渾沌的死亡呼吸
節自 新月神話-弒王者
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 119.14.21.184
推 jerry771210:感謝 05/26 00:19
→ game0416:是我要謝給成績的,哪有你謝的Q__Q 05/26 00:22
※ 編輯: game0416 來自: 119.14.21.184 (05/26 00:22)
推 CaptainWill:有見地 05/26 00:24
推 jerry771210:不負責任php教學:把"%"-->"?" , "var "-->"$" 05/26 00:35
→ jerry771210:把所有的變數前面加上"$",".jsp"-->".php"就成了php 05/26 00:36
推 SMUGEN:jsp版的如果寫乾淨清楚一點 php版的只要一下子就改好了 :D 05/26 00:39