用CGI編寫WEB查詢系統(tǒng)
發(fā)表時間:2024-05-26 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]摘要:本文分析討論了將WEB與后以數(shù)據(jù)源相連的方法之一——公共網(wǎng)關(guān)界面CGI的概念與特點,并以成績查詢系統(tǒng)作為實例詳細分析了用C語言進行CGI程序設(shè)計的方法與過程。一CGI簡述公共網(wǎng)關(guān)界面(CGI)是一種編程標準,它規(guī)定了Web服務(wù)器調(diào)用其它可執(zhí)行程序(CGI程序)的接口協(xié)議標準。CGI程序通...
摘要:本文分析討論了將WEB與后以數(shù)據(jù)源相連的方法之一——公共網(wǎng)關(guān)界面CGI的概念與特點,并以成績查詢系統(tǒng)作為實例詳細分析了用C語言進行CGI程序設(shè)計的方法與過程。
一CGI簡述
公共網(wǎng)關(guān)界面(CGI)是一種編程標準,它規(guī)定了Web服務(wù)器調(diào)用其它可執(zhí)行程序(CGI程序)的接口協(xié)議標準。CGI程序通過Web服務(wù)器與運行Web服務(wù)器調(diào)用其它可執(zhí)行程序交互,它接受Web瀏覽器發(fā)送給Web服務(wù)器的信息,并進行處理,然后將結(jié)果再送回給Web服務(wù)器及Web瀏覽器。CGI程序可以用任何程序設(shè)計語言編寫,如Shell、perl、C、Java等,用C語言編寫的CGI程序具有速度快、安全性高等特點。CGI程序通常用于加入查詢機制、搜索機制、交互式應(yīng)用及其它一些應(yīng)用。CGI接口標準包括輸入、環(huán)境變量、標準輸出三部分,CGI程序可以通過標準輸入(stdin)從Web服務(wù)器得到輸入信息,例如從FORM中得到數(shù)據(jù),這就是常用的POST方法。由于不同的操作系統(tǒng)采用了不同的信息交換機制,其參數(shù)傳遞的處理過程也有差別,在Unix與DOS中,環(huán)境信息反映著本級程序運行時的某些系統(tǒng)狀況,可用于父程序與子程序間的信息傳遞,CGI正是通過設(shè)量環(huán)境變量在服務(wù)器與客戶機間傳遞數(shù)據(jù)的,各操作系統(tǒng)都提供了許多環(huán)境變量,它們定義了程序的執(zhí)行環(huán)境,應(yīng)用程序可以存取它們。Web服務(wù)器和CGI接口也設(shè)置了一些環(huán)境變量用以傳遞一些重要的參數(shù)。CGI程序通過標準輸出(stdout)將輸出信息傳送給Web服務(wù)器,傳送給服務(wù)器的信息可以是HTML文本也可以是純文本。本文將利用C語言編寫一個CGI應(yīng)用程序——學(xué)生成績查詢系統(tǒng),并分析了CGI程序設(shè)計的方法、過程、技巧。
二、成績查詢系統(tǒng)介紹
一個在WWW環(huán)境下的學(xué)生成績公布欄必將成為日后各類成績發(fā)布的主要手段,每位學(xué)生交將有自己的密碼,所以不必擔(dān)心成績上網(wǎng)之后的保密性。任何學(xué)生以任何形式上網(wǎng)進入本站點的成績查詢系統(tǒng)之后,只要輸入自己的系列、班別、學(xué)號及密碼,便可以利用這個學(xué)生績查詢系統(tǒng)查詢自己的成績,該設(shè)計思路與系統(tǒng)不僅適合各類高校內(nèi)部的成績發(fā)布,也適合于全國高考、統(tǒng)考等大規(guī)模考試的成績發(fā)布。本文介紹的只是一個功能單一的查詢系統(tǒng),若需完善還需加入成績維護部分,由成績管理者進行內(nèi)容維護,包括成績輸入、修改、刪除等功能。
三、HTML FORM格式部分
3.1 FORM輸放的分解
在UNIX系統(tǒng)上,CGI信息是利用STDIN/STDOUT方式傳輸?shù),所以若要編寫一個C語言的CGI程序,就必須要了解如何解剖與截取STDIN的CGI信息。當用戶提交一個HTMLFORM時,WEB瀏覽器首先對FORM中的數(shù)據(jù)以名字/值對的形式進行編碼,并發(fā)送給WEB服務(wù)器,然后再由WEB服務(wù)器傳遞給CGI程序,其格式如下:
NAME1=VALUEL&NAME2=VALUE2&NAME3····
名字是FORM中定義的INPUT,SELECT等標置名字,值是用戶輸入或選擇的標值,在程序中將對其進行分析與解碼,將其分解成一組組的名字/值對,這個過程是通過在輸入流中查找字符“=”與“&”來完成的,每當找到字符“=”,標志著一個FORM變量名字的結(jié)束,當找到字符“&”,標志著一個FORM變量值的結(jié)束。當名字/值對分解完之后,還須將輸入中的一些特殊字符轉(zhuǎn)換成相應(yīng)的ASCII字符,如需將“+”轉(zhuǎn)換成空格符,將一些特殊字符轉(zhuǎn)換成ASCII字符,對以上分所分析的分解與轉(zhuǎn)換過程,在下面的程序中有詳細注明。3.2HTML FORM文件成績查詢系統(tǒng)的HTML文件P.htrnl學(xué)生成績查詢系統(tǒng)學(xué)生成績查詢系統(tǒng)系列:計算機系英語系無線電系學(xué)號:密碼:四、學(xué)生成績查詢CGI程序
該CGI程序分解、接收HTML FORM中提供的查詢條件,然后查詢出該學(xué)生的成績并返回。學(xué)生成績有兩個數(shù)據(jù)文件,一個是***SUB DAT,其中含有學(xué)生的各個科目,***表示系別,如計算機系的科目文件是COMPSUB DAT,英語系的科目文件是ENGSUB.DAT,無線電系科目文件是ELECSUB.DAT;另一個數(shù)據(jù)文件是***SCOER.DAT,該文件中包含有每個學(xué)生的學(xué)號、密碼與成績,***表示系別,如計算機系的學(xué)生成績文件是COMPSCORE.DAT,同理,其他系的學(xué)生成績文件按此原則以此類推。當學(xué)生輸入的學(xué)號及密碼符合數(shù)據(jù)文件的內(nèi)容時,就會顯示該學(xué)生的成績。main(int argc,char*argv[]){register int I,m=0;int len;FILE*fp,*fpl,*fopen();char filename1[100],filename2[100],title[100];/*設(shè)定資料變量*/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=Iinputs[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,"計算機系/)==0strcat(filename1,"compusb.dat");strcat(filename2,"compscore.dat");}if(strcmp(inputs[o].val,"英語系")==0strcat(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]!=EOFkind=kind+1;fclose(fp);fp1=fopen(filename2,"r");/*打開文件*/allsum=0;for(I=0;I輸入有誤,請再輸一次!\n");}else{rank=1for(I=o;I學(xué)生成績查詢系統(tǒng)");pritf("\n查詢學(xué)生學(xué)號:%s
",inputs[2].val);printf("\n成績?nèi)缦?");for(I=0;I五、結(jié)束語
本文以學(xué)竽成績查詢系統(tǒng)作為實例,詳細分析了用C語言進行CGI程序設(shè)計的方法與過程,隨著INTERET/INTRANET應(yīng)用的深入,將WEB與多臺數(shù)據(jù)庫聯(lián)接的需求也日益迫切,CGI可以使得WEB能夠能最低程序的復(fù)雜性與其后臺信息集成,成為一種支持多種類型的通用環(huán)境,但是由于在CGI方式中每執(zhí)行一次交互都需啟動一個外部程序,因此其在實時應(yīng)用方面受到了限制,因,WEB SENER API及JOCBC等應(yīng)用方式也正在成熟。