年齡越來越大,記性越來越差,只想把自己一些零零散散的私活經歷記錄下來,日后回頭看,還能想起這些小項目、小技術點,還能想起那些和客戶、朋友打交道的各種過往。
個人喜歡實用,不喜歡做研究,此私活案例系列,都是小工具、小應用,無高深技術和復雜流程。一直相信,能適用到實際項目中的技術就是好技術。
不談賺錢,技術卻是可以學到多而雜,但不精通。
不談社會,現實卻是可以看到真而實,但不學壞。
威客是在幾年前新生的名詞,所以威客網在國內也是很火的。曾幾何時,我也浪跡於國內的各大威客網過,當過一段時間的威客。當時,認識了不少同行,也認識了不少客戶,做過一些小項目,賺過一些小錢。此小工具是在國內現在應該算最大的威客網接過的一個私活案例。
一高中男教師發布的一個任務。大概要求描述如下:他要從網站http://www.cczsb.com/zklq_2010.asp查詢大概200多個學生的高中錄取信息(主要有3種信息:准考證號、姓名、錄取分數),他現在有200多個學生的准考證號信息,但是每次手動去網站查詢,再復制出來,很慢且很耗時耗力。他想做一個小工具,根據他提供的准考證信息,能自動去獲取出這些信息,並保存成TXT文本。
手動查詢過程如下所示:
1)打開網頁,輸入要查詢的准考證號:
2)點擊:提交查詢內容 按鈕,查詢出信息:
3)手動復制查詢出來的信息到TXT文本中:
接下這個活后,第一反映就是webBrowser控件,於是果斷開始,VS2005,C#開工(當時也是剛學C#,正好趁此機會練手),由於以前做過VC下面的webBrowser開發,還算熟練,很快就寫完了。
當時,有個小插曲,就是自己很快就寫完了,但是拿了人家錢,又不能立馬告訴他寫完了,不然人家會以為這么簡單的東西還要那么多錢,於是,就拖了3天才交付(現在想想,當時真是不厚道呀,但是又想想苦B的程序員怎么辦,有時還是要有點小心眼的)。當時交付完小工具,測試OK的時候,老師那個開心呀,歷歷在目。
此小工具,說實話真的沒有什么技術含量,但是對於一竅不通的非專業人士來說,卻是感覺很高深莫測,有時程序員們,一定要善於利用這個優勢去創造最大價值。
效果圖:
PS:源碼真的很簡單,也不好意思上傳了,貼點關鍵代碼吧,想要源碼的留個郵箱,我發他(不要罵就行,說實話,我現在看了當時寫的代碼都想罵人)。

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { this.button1.Enabled = true; this.textBox1.Enabled = true; this.textBox2.Enabled = true; if(!bFlag) this.lbMsg.Text = ""; //this.webBrowser1.Document.Window.ScrollTo(500,280); if (iFlag) { string sHtml = ""; sHtml = this.webBrowser1.Document.Body.InnerHtml; sHtml = sHtml.Replace(" ", ""); sHtml = sHtml.Replace("\t", ""); sHtml = sHtml.Replace("\r\n", ""); //得到准考證號 string sNumberTagBegin = "<FONTsize=4face=宋體>准考證號</FONT></TD><TD><FONTsize=4face=宋體> "; int iNumber = sHtml.IndexOf(sNumberTagBegin); string sNumberTemp = ""; sNumberTemp = sHtml.Substring(iNumber + sNumberTagBegin.Length, 50); string sNumberTagEnd = "</FONT></TD></TR><TR>"; int jNumber = 0; jNumber = sNumberTemp.IndexOf(sNumberTagEnd); string sNumber = ""; sNumber = sNumberTemp.Substring(0, jNumber); //得到姓名 //姓名前部分標志 string sNameTagBegin = "<FONTsize=4face=宋體>姓 名</FONT></TD><TD><FONTsize=4face=宋體> "; int iName = sHtml.IndexOf(sNameTagBegin);//姓名前部分標志開始位置 string sNameTemp = ""; sNameTemp = sHtml.Substring(iName + sNameTagBegin.Length, 50);//姓名前部分標志結束位置后50位字符 string sNameTagEnd = "</FONT></TD></TR><TR>";//姓名后部分標志 int jName = 0; jName = sNameTemp.IndexOf(sNameTagEnd);//姓名后部分標志開始位置 string sName = ""; sName = sNameTemp.Substring(0, jName);//姓名 //得到錄取分數 //分數前部分標志 string sCountTagBegin = "<FONTsize=4face=宋體>錄取分數</FONT></TD><TD><FONTsize=4face=宋體> "; int iCount = sHtml.IndexOf(sCountTagBegin); string sCountTemp = ""; sCountTemp = sHtml.Substring(iCount + sCountTagBegin.Length, 50); string sCountTagEnd = "</FONT></TD></TR><TR>"; int jCount = 0; jCount = sCountTemp.IndexOf(sCountTagEnd); string sCount = ""; sCount = sCountTemp.Substring(0, jCount); string sResult = ""; sResult = "准考證號:" + sNumber + "\t" + "姓名:" + sName + "\t" + "錄取分數:" + sCount; iFlag = false; loading = false; // MessageBox.Show(sResult); string sPath = System.IO.Directory.GetCurrentDirectory() + "/kskh.txt"; sResult = sResult + "\r\n"; this.lbMsg.Text = "程序正在查詢,請稍等......"; this.button1.Enabled = false; this.textBox1.Enabled = false; this.textBox2.Enabled = false; MakeFile(sPath, sResult); iTotal--; if (iTotal == 0) { this.lbMsg.Text = "查詢成功!!!"; this.button1.Enabled = true; this.textBox1.Enabled = true; this.textBox2.Enabled = true; MessageBox.Show("查詢成功!!!"); } } }