| 订阅 | 在线投稿
分享
 
 
 

用CGI编写WEB查询系统

来源:互联网  宽屏版  评论
2008-06-01 01:10:30

摘要:本文分析讨论了将WEB与后以数据源相连的方法之一——公共网关界面CGI的概念与特点,并以成绩查询系统作为实例具体分析了用C语言进行CGI程序设计的方法与过程。

一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环境下的学生成绩公布栏必将成为日后各类成绩发布的主要手段,每位学生交将有自己的密码,所以不必担心成绩上网之后的保密性。任何学生以任何形式上网进入本站点的成绩查询系统之后,只要输入自己的系列、班别、学号及密码,便可以利用这个学生绩查询系统查询自己的成绩,该设计思路与系统不仅适合各类高校内部的成绩发布,也适合于全国高考、统考等大规模考试的成绩发布。本文介绍的只是一个功能单一的查询系统,若需完善还需加入成绩维护部分,由成绩治理者进行内容维护,包括成绩输入、修改、删除等功能。

三、HTML FORM格式部分

3.1 FORM输放的分解

在UNIX系统上,CGI信息是利用STDIN/STDOUT方式传输的,所以若要编写一个C语言的CGI程序,就必须要了解如何解剖与截取STDIN的CGI信息。当用户提交一个HTMLFORM时,WEB浏览器首先对FORM中的数据以名字/值对的形式进行编码,并发送给WEB服务器,然后再由WEB服务器传递给CGI程序,其格式如下:

NAME1=VALUEL&NAME2=VALUE2&NAME3····

名字是FORM中定义的INPUT,SELECT等标置名字,值是用户输入或选择的标值,在程序中将对其进行分析与解码,将其分解成一组组的名字/值对,这个过程是通过在输入流中查找字符“=”与“&”来完成的,每当找到字符“=”,标志着一个FORM变量名字的结束,当找到字符“&”,标志着一个FORM变量值的结束。当名字/值对分解完之后,还须将输入中的一些非凡字符转换成相应的ASCII字符,如需将“+”转换成空格符,将一些非凡字符转换成ASCII字符,对以上分所分析的分解与转换过程,在下面的程序中有具体注明。3.2HTML FORM文件

成绩查询系统的HTML文件P.htrnl

学生成绩查询系统

学生成绩查询系统

系列:

计算机系

英语系

无线电系

学号:

密码:

四、学生成绩查询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输入有误,请再输一次!\n");

}

else

{

rank=1

for(I=o;I学生成绩查询系统");

pritf("\n查询学生学号:%s

",

inputs[2].val);

printf("\n成绩如下:");

for(I=0;I

\n");

for(I=0;I

\n",sum[index]);

}

}五、结束语

本文以学竽成绩查询系统作为实例,具体分析了用C语言进行CGI程序设计的方法与过程,随着INTERET/INTRANET应用的深入,将WEB与多台数据库联接的需求也日益迫切,CGI可以使得WEB能够能最低程序的复杂性与其后台信息集成,成为一种支持多种类型的通用环境,但是由于在CGI方式中每执行一次交互都需启动一个外部程序,因此其在实时应用方面受到了限制,因,WEB SENER API及JOCBC等应用方式也正在成熟。

 
 摘要:本文分析讨论了将WEB与后以数据源相连的方法之一——公共网关界面CGI的概念与特点,并以成绩查询系统作为实例具体分析了用C语言进行CGI程序设计的方法与过程。 一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环境下的学生成绩公布栏必将成为日后各类成绩发布的主要手段,每位学生交将有自己的密码,所以不必担心成绩上网之后的保密性。任何学生以任何形式上网进入本站点的成绩查询系统之后,只要输入自己的系列、班别、学号及密码,便可以利用这个学生绩查询系统查询自己的成绩,该设计思路与系统不仅适合各类高校内部的成绩发布,也适合于全国高考、统考等大规模考试的成绩发布。本文介绍的只是一个功能单一的查询系统,若需完善还需加入成绩维护部分,由成绩治理者进行内容维护,包括成绩输入、修改、删除等功能。 三、HTML FORM格式部分 3.1 FORM输放的分解 在UNIX系统上,CGI信息是利用STDIN/STDOUT方式传输的,所以若要编写一个C语言的CGI程序,就必须要了解如何解剖与截取STDIN的CGI信息。当用户提交一个HTMLFORM时,WEB浏览器首先对FORM中的数据以名字/值对的形式进行编码,并发送给WEB服务器,然后再由WEB服务器传递给CGI程序,其格式如下: NAME1=VALUEL&NAME2=VALUE2&NAME3···· 名字是FORM中定义的INPUT,SELECT等标置名字,值是用户输入或选择的标值,在程序中将对其进行分析与解码,将其分解成一组组的名字/值对,这个过程是通过在输入流中查找字符“=”与“&”来完成的,每当找到字符“=”,标志着一个FORM变量名字的结束,当找到字符“&”,标志着一个FORM变量值的结束。当名字/值对分解完之后,还须将输入中的一些非凡字符转换成相应的ASCII字符,如需将“+”转换成空格符,将一些非凡字符转换成ASCII字符,对以上分所分析的分解与转换过程,在下面的程序中有具体注明。3.2HTML FORM文件 成绩查询系统的HTML文件P.htrnl 学生成绩查询系统 学生成绩查询系统 系列: 计算机系 英语系 无线电系  学号: 密码:  四、学生成绩查询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输入有误,请再输一次!\n"); } else { rank=1 for(I=o;I学生成绩查询系统"); pritf("\n查询学生学号:%s ", inputs[2].val); printf("\n成绩如下:"); for(I=0;I \n"); for(I=0;I \n",sum[index]); } }五、结束语 本文以学竽成绩查询系统作为实例,具体分析了用C语言进行CGI程序设计的方法与过程,随着INTERET/INTRANET应用的深入,将WEB与多台数据库联接的需求也日益迫切,CGI可以使得WEB能够能最低程序的复杂性与其后台信息集成,成为一种支持多种类型的通用环境,但是由于在CGI方式中每执行一次交互都需启动一个外部程序,因此其在实时应用方面受到了限制,因,WEB SENER API及JOCBC等应用方式也正在成熟。
󰈣󰈤
 
 
 
>>返回首页<<
 
 热帖排行
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
©2005- 王朝网络 版权所有