• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    利用CGI方式實現Web查詢

    發布: 2007-7-04 20:04 | 作者: admin | 來源:  網友評論 | 查看: 11次 | 進入軟件測試論壇討論

    領測軟件測試網 摘要:本文分析討論了將WEB與后以數據源相連的方法之一——公共網關界面CGI的概念與特點,并以成績查詢系統作為實例詳細分析了用C語言進行CGI程序設計的方法與過程。
    關鍵詞:CGI、Web集成

    一CGI簡述
    公共網關界面(CGI)是一種編程標準,它規定了Web服務器調用其它可執行程序(CGI程序)的接口協議標準。CGI程序通過Web服務器與運行Web服務器調用其它可執行程序交互,它接受Web瀏覽器發送給Web服務器的信息,并進行處理,然后將結果再送給Web服務器及Web瀏覽器。CGI程序可以用任何程序設計語言編寫,如Shell、perl、C、Java等,用C語言編寫的CGI程序具有速度快、安全性高等特點。CGI程序
    通常用于加入查詢機制、搜索機制、交互式應用及其它一些應用。
    CGI接口標準包括輸入、環境變量、標準輸出三部分,CGI程序可以通過標準輸入stdin)從Web服務器得到輸入信息,例如從FORM中得到數據,這就是常用的POST方法。由于不同的操作系統采用了不同的信息交換機制,其參數傳遞的處理過程也有別,在Unix與DOS中,環境信息反映著本級程序運行時的某些系統狀況,可用于父序與子程序間的信息傳遞,CGI正是通過設量環境變量在服務器與客戶機間傳遞數
    據的,各操作系統都提供了許多環境變量,它們定義了程序的執行環境,應用程序可以存取它們。Web服務器和CGI接口也設置了一些環境變量用以傳遞一些重要的參數。CGI程序通過標準輸出(stdout)將輸出信息傳送給Web服務器,傳送給服務器的信息可以是HTML文本也可以是純文本。本文將利用C語言編寫一個CGI應用程序——學生成績查詢系統,并分析了CGI程序設計的方法、過程、技巧。

    二、成績查詢系統介紹
    一個在WWW環境下的學生成績公布欄必將成為日后各類成績發布的主要手段,每位學生交將有自己的密碼,所以不必擔心成績上網之后的保密性。任何學生以任何形式上網進入本站點的成績查詢系統之后,只要輸入自己的系列、班別、學號及密碼,便可以利用這個學生績查詢系統查詢自己的成績,該設計思路與系統不僅適合各類校內部的成績發布,也適合于全國高考、統考等大規?荚嚨某煽儼l布。本文介
    紹的只是一個功能單一的查詢系統,若需完善還需加入成績維護部分,由成績管理者進行內容維護,包括成績輸入、修改、刪除等功能。

    三、HTML FORM格式部分
    3.1 FORM輸放的分解
    UNIX系統上,CGI信息是利用STDIN/STDOUT方式傳輸的,所以若要編寫一個C語言的CGI程序,就必須要了解如何解剖與截取STDIN的CGI信息。當用戶提交一個HTML FORM時,WEB瀏覽器首先對FORM中的數據以名字/值對的形式進行編碼,并發送給WEB 服務器,然后再由WEB服務器傳遞給CGI程序,其格式如下:
    NAME1=VALUEL&NAME2=VALUE2&NAME3····
    名字是FORM中定義的INPUT,SELECT等標置名字,值是用戶輸入或選擇的標值,在程序中將對其進行分析與解碼,將其分解成一組組的名字/值對,這個過程是通過在輸入流中查找字符“=”與“&”來完成的,每當找到字符“=”,標志著一個FORM變量名字的結束,當找到字符“&”,標志著一個FORM變量值的結束。當名字/值對分解完之后,還須將輸入中的一些特殊字符轉換成相應的ASCII字符,如需將“+”轉換成空格符,將一些特殊字符轉換成ASCII字符,對以上分所分析的分解與轉換過程,在下面的程序中有詳細注明。
    3.2HTML FORM文件
    成績查詢系統的HTML文件P.htrnl
    <TITLE>學生成績查詢系統</TITLE>
    <H1>學生成績查詢系統</H1>
    <FORM METHOD="POST"ACTION="URL地址"
    <H3>系列:<SELECTNAME="Department">
    <OPTION>計算機系
    <OPTION>英語系
    <OPTION>無線電系
    </SELECT><P>
    學號:<INPNT TYPE="TEXT"NAME="ID"><P>
    密碼:<INPNT TYPE="PASSWORD"NAME"PASSWORD"><P>
    <INPNT TYPE="SUBMIT"VALUE"查詢”>
    <INPNT TYPE+"RESET"VALUE="放棄”〉
    </FORM>

    四、學生成績查詢CGI程序
    該CGI程序分解、接收HTML FORM中提供的查詢條件,然后查詢出該學生的成績并返回。學生成績有兩個數據文件,一個是***SUB DAT,其中含有學生的各個科目,*** 表示系別,如計算機系的科目文件是COMPSUB DAT,英語系的科目文件是ENGSUB.DAT,無線電系科目文件是ELECSUB.DAT;另一個數據文件是***SCOER.DAT,該文件中包含有每個學生的學號、密碼與成績,***表示系別,如計算機系的學生成績文件是COMPSCORE.DAT,同理,其他系的學生成績文件按此原則以此類推。當學生輸入的學號及密碼符合數據文件的內容時,就會顯示該學生的成績。
    main(int argc,char*argv[])
    {
    register int i,m=0;
    int len;
    FILE*fp,*fpl,*fopen();
    char filename1[100],filename2[100],title[100];/*設定資料變量*/
    char subject[10][10];
    char id[100][10],password[100][10];
    int score[100][20],sum[100],allsum;
    float avg[100],alltotalavg;
    int rank,number,index,find,j,kind;
    printf("content-type:text/html%c%c",10,10);
    len=atoi(getenv("CONTENT_LENGITH"));
    for(i=0;len && (!feof(stdin));i++){
    m=i
    inputs[i].val=readdstdin(stdin,&,&len);/*讀STDiN信息*/
    AddToSpace(inputs[i].val);
    Convert(inputs[i].val);
    inputs[i].name=ReadData(inputs[i].val,=);
    }
    strcpy(filename1,"/score/setup/");
    stucpy(filename2,"/xcore/data/");
    if(strcmp(inputs[o].val,"計算機系/)==0
    strcat(filename1,"compusb.dat");
    strcat(filename2,"compscore.dat");
    }
    if(strcmp(inputs[o].val,"英語系")==0
    strcat(filenamel,"engsub.dat");
    strcat(filename2,"engscore.dat");
    }
    if(strcmp(inputs[o].val,"無線電系")==0
    }
    strcat(filename1,"elecsub.dat");
    strcat(filename2,"elecscore.dat");
    }
    fp=fopen(filename1,"r");/*打開文件*/
    kind=0;
    while(fscanf(fp,"%s",subject[kind]!=EOF
    kind=kind+1;
    fclose(fp);

    fp1=fopen(filename2,"r");/*打開文件*/
    allsum=0;
    for(i=0;i<100;i++)
    {
    numbde=i;
    if(fscanf(fp1,"%s%s",id[i],
    password[i]!=EOF){
    sum[i]=0;
    for{j=0;j<kind;j++){
    fscanf(fp1,"%d",&score[i][j]);
    sum[i]+=score[i][j];
    }
    avg[i]=sum[i]/kind;
    allsum+=sum[i];
    }
    else
    break;
    }
    fclose(fp1);
    find=0;
    if(strcmp(inputs[2].val,id[i])==0&&
    strcmp(inputs[3].val,password[i]==0){
    index=i;
    find=i;
    }
    }
    if(find==0)
    {
    printf{"<H>輸入有誤,請再輸一次!</h1>\n");
    }
    else
    {
    rank=1
    for(i=o;i<number;i++)
    if(sum[index]<sum[i])
    rank=rank+1;
    slltotalavg=allsum/number;
    printf("<center><H1>學生成績查詢系統</H1></center>");
    pritf("\n<center>查詢學生學號:%s</center>
    ",
    inputs[2].val);
    printf("\n<center>成績如下:</certer><hr>");

    for(i=0;i<kind;i++)
    printf{"%s\t",subject[kind]);
    printf("總分
    \n");
    for(i=0;i<kind;i++)
    printf("%d\t",score[index][i]);
    printf["%d
    \n",sum[index]);
    }
    }

    五、結束語
    本文以學竽成績查詢系統作為實例,詳細分析了用C語言進行CGI程序設計的方法與過程,隨著INTERET/INTRANET應用的深入,將WEB與多臺數據庫聯接的需求也日益迫切,CGI可以使得WEB能夠能最低程序的復雜性與其后臺信息集成,成為一種支持多種類型的通用環境,但是由于在CGI方式中每執行一次交互都需啟動一個外部程序,因此其在實時應用方面受到了限制,因而,WEB SENER API及JOCBC等應用方式也正在成熟。

    參考文獻
    1、華南理工大學信息網絡工程研究中心編《Inrternet國際互連網》中山大學出版
    社
    2、蔡奇玉等《WWW上HTML與CGI寫作大全》北京理工大學出版社
    3、肖治延用C語言進行CGI程序設計微電腦世界1996.5
    4、[美]Tim Ritchey 《JavaScrip for Netscape》清華大學出版社

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>