• 【<私活案例3>】 获取某市网站普通高中录取分数小工具


    私活案例3:获取某市网站普通高中录取分数小工具
    0 前言

    年龄越来越大,记性越来越差,只想把自己一些零零散散的私活经历记录下来,日后回头看,还能想起这些小项目、小技术点,还能想起那些和客户、朋友打交道的各种过往。

    个人喜欢实用,不喜欢做研究,此私活案例系列,都是小工具、小应用,无高深技术和复杂流程。一直相信,能适用到实际项目中的技术就是好技术。

    不谈赚钱,技术却是可以学到多而杂,但不精通。

    不谈社会,现实却是可以看到真而实,但不学坏。

    1 背景

    威客是在几年前新生的名词,所以威客网在国内也是很火的。曾几何时,我也浪迹于国内的各大威客网过,当过一段时间的威客。当时,认识了不少同行,也认识了不少客户,做过一些小项目,赚过一些小钱。此小工具是在国内现在应该算最大的威客网接过的一个私活案例。

    2 需求

    一高中男教师发布的一个任务。大概要求描述如下:他要从网站http://www.cczsb.com/zklq_2010.asp查询大概200多个学生的高中录取信息(主要有3种信息:准考证号、姓名、录取分数),他现在有200多个学生的准考证号信息,但是每次手动去网站查询,再复制出来,很慢且很耗时耗力。他想做一个小工具,根据他提供的准考证信息,能自动去获取出这些信息,并保存成TXT文本。

    手动查询过程如下所示:

    1)打开网页,输入要查询的准考证号:

    2)点击:提交查询内容 按钮,查询出信息:

    3)手动复制查询出来的信息到TXT文本中:

    3 进展

    接下这个活后,第一反映就是webBrowser控件,于是果断开始,VS2005,C#开工(当时也是刚学C#,正好趁此机会练手),由于以前做过VC下面的webBrowser开发,还算熟练,很快就写完了。

    4 后事

    当时,有个小插曲,就是自己很快就写完了,但是拿了人家钱,又不能立马告诉他写完了,不然人家会以为这么简单的东西还要那么多钱,于是,就拖了3天才交付(现在想想,当时真是不厚道呀,但是又想想苦B的程序员怎么办,有时还是要有点小心眼的)。当时交付完小工具,测试OK的时候,老师那个开心呀,历历在目。

    5 思考

    此小工具,说实话真的没有什么技术含量,但是对于一窍不通的非专业人士来说,却是感觉很高深莫测,有时程序员们,一定要善于利用这个优势去创造最大价值。

    6 案例

    效果图:

    PS:源码真的很简单,也不好意思上传了,贴点关键代码吧,想要源码的留个邮箱,我发他(不要骂就行,说实话,我现在看了当时写的代码都想骂人)。

    View Code
    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("查询成功!!!");
                    }
                }
            }

    版权声明: 本博客地址 http://www.cnblogs.com/joinclear,欢迎转载,转载请标明原文作者和链接。

    文章说明: 一家之辞难免有误,欢迎您中肯的指正;如对您有帮助,不胜荣幸,但更希望能够抛砖引玉。

    - joinclear     

  • 相关阅读:
    C 字符串
    C 函数指针、回调函数
    C 指针
    C 数组、枚举类型enum
    C 函数声明、函数参数
    C 内置函数
    C 流程控制
    C 储存类与运算符
    C变量和常量
    名词解释
  • 原文地址:https://www.cnblogs.com/joinclear/p/2981744.html
Copyright © 2020-2023  润新知