Страница 23 из 30
А Пока Ради примера я вам напишу скрипт,который ведет социологическое исследование насчет курения и отношения к нему.Может он слишком массивен для данного пособия, но зато он наглядно показывает как достаточно простыми средствами можно проводить социологические исследования. <HTML><!-- HTML файл с формой,можете повесить его себе на сайт! -> <HEAD> <TITLE>Социологический опрос насчет курения</TITLE></HEAD> <BODY> <CENTER><H1>Социологический опрос насчет курения</H1></CENTER> <FORM action="cgi-bin/smoketest.cgi"> <TABLE> <TR><TD>Ваш возраст:</TD><TD> <INPUT name="age"></TD></TR> <TR><TD>Вы курите(Y/N):</TD> <TD> <INPUT type="radio" name="smoke" value="Yes" checked>Да <INPUT type="radio" name="smoke" value="No">Нет</TD></TR> <TR><TD>Как вы относитесь если рядом кто-то курит?</TD> <TD><SELECT name="sm_near"> <OPTION value="0">Резко негативно <OPTION value="1">Негативно <OPTION value="2" selected>Мне все равно <OPTION value="3">Позитивно <OPTION value="4">Резко позитивно </SELECT> </TD></TR> <TR><TD>Сколько вы выкуриваете в день?</TD> <TD><SELECT name="sm_day"> <OPTION value="0">Ни сколько <OPTION value="1">1 сигарету <OPTION value="2">2 сигареты <OPTION value="5">около 5 <OPTION value="0.5pac">полпачки <OPTION value="pac">пачку <OPTION value="2pac">2 пачки <OPTION value="more">больше </SELECT> </TD></TR> <TR><TD>Как давно вы начали курить?</TD> <TD><SELECT name="sm_stage"> <OPTION value="noatall">Не начинал <OPTION value="onetime">Бросил <OPTION value="0.5year">Полгода <OPTION value="1year">Год <OPTION value="2year">2 Года <OPTION value="5year">5 Лет <OPTION value="more">Больше </SELECT> </TD></TR> <TR><TD>Считаете ли вы это опасным для своего здоровья?</TD> <TD><SELECT name="sm_danger"> <OPTION value="0">Очень Опасно <OPTION value="1">Думаю,что да <OPTION value="2" selected>Не знаю <OPTION value="3">Может самую малость <OPTION value="4">Нет,Безопасно. </SELECT> </TD></TR> <TR><TD>Хотите ли вы бросить?</TD> <TD><SELECT name="sm_nosmoke"> <OPTION value="0">Уже бросаю <OPTION value="1">Думаю бросить <OPTION value="2" selected>Иногда <OPTION value="3">Очень Редко <OPTION value="4">Никогда. </SELECT> </TD></TR> <TR><TD><INPUT type="submit" value="Послать Данные"></TD> <TD><INPUT type="reset" value="Очистить Форму"> </TD></TR> </TABLE> </FORM> </BODY></HTML> А вот скрипт для его обработки: #!/usr/bin/perl #smoketest.cgi $datafile="smoke.dat"; sub urldecode{ local($val)=@_; $val=~s/\+/ /g; $val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge; return $val; } sub print_err{ print "Content-Type: text/html\n\n"; print "<HTML><HEAD><TITLE>Error!!</TITLE></HEAD>"; print "<BODY><CENTER><H1>@_</H1>"; print "</BODY></HTML>"; exit; } if($ENV{'REQUEST_METHOD'} eq 'GET'){ $query=$ENV{'QUERY_STRING'}; } elsif( $ENV{'REQUEST_METHOD' } eq 'POST') {ysread STDIN,$query,$ENV{'CONTENT_LENGTH'}; } if($query ne ''){ @formfields=split /&/,$query; foreach(@formfields){ if(/^age=(.*)/){$age=urldecode($1); } if(/^smoke=(.*)/){ $smoke=urldecode($1); } if(/^sm_near=(.*)/){ $sm_near=urldecode($1); } if(/^sm_day=(.*)/){ $sm_day=urldecode($1); } if(/^sm_stage=(.*)/){ $sm_stage=urldecode($1); } if(^sm_danger=(.*)/){ $sm_danger=urldecode($1); } if(/^sm_nosmoke=(.*)/){ $sm_nosmoke=urldecode($1); } } if((!$age)||($age=~/\D/)){ print "Content-Type: text/html\n\n"; print "<HTML><BODY><H2>Возраст введен неправильно,должен состоять из цифр.</H2>"; print "<FORM><INPUT type=\"button\" value=\"Вернуться назад к Анкете\""; print "onClick=\"history.back();\"></FORM>"; print "</BODY></HTML>"; } $anket_str=join '\t',($age,$smoke,$sm_near,$sm_day,$sm_stage,$sm_danger,$sm_nosmoke); open DATA,">>$datafile" || print_err("Cannot open $datafile $!"); print DATA "$anket_str\n"; close DATA; } open DATA,"$datafile" || print_err("Cannot open $datafile $!"); @AllData=<DATA>; close DATA; $total=$#AllData; foreach(@AllData){ ($age,$smoke,$sm_near,$sm_day,$sm_stage,$sm_danger,$sm_nosmoke)=split /\t/,$_; $smok_total++ if ($smoke eq 'Yes'); $nosmok_total++ if ($smoke eq 'No'); if($age<16){$age16_total++; if($smoke eq 'Yes'){$age16_sm++; }else{ $age16_nosm++; } } if(($age>16)&&($age<=18)){$age16_18_total++; if($smoke eq 'Yes'){$age16_18_sm++;} else{$age16_18_nosm++;} } if(($age>18)&&($age<=20)){$age18_20_total++; if($smoke eq 'Yes'){$age18_20_sm++;} else{$age18_20_nosm++;} } if($age>20){$age20_total++; if($smoke eq 'Yes'){$age20_sm++;} else{$age20_nosm++;} } if($sm_near eq '0'){$near0++;} if($sm_near eq '1'){$near1++;} if($sm_near eq '2'){$near2++;} if($sm_near eq '3'){$near3++;} if($sm_near eq '4'){$near4++;} if($sm_day eq '0'){$day0++;} if($sm_day eq '1'){$day1++;} if($sm_day eq '2'){$day2++;} if($sm_day eq '5'){$day5++;} if($sm_day eq '0.5pac'){$dayhalfpac++;} if($sm_day eq 'pac'){$daypac++;} if($sm_day eq '2pac'){$day2pac++;} if($sm_day eq 'more'){$daymore++;} if($sm_stage eq 'noatall'){$stagenoatall++;} if($sm_stage eq 'onetime'){$statgeonetime++;} if($sm_stage eq '0.5year'){$stagehalfyear++;} if($sm_stage eq '1year'){$stage1year++;} if($sm_stage eq '2year'){$stage2year++;} if($sm_stage eq '5year'){$stage5year++;} if($sm_stage eq 'more'){$stagemore++;} if($sm_danger eq '0'){$danger0++;} if($sm_danger eq '1'){$danger1++;} if($sm_danger eq '2'){$danger2++;} if($sm_danger eq '3'){$danger3++;} if($sm_danger eq '4'){$danger4++;} if($sm_nosmoke eq '0'){$stopsmoke0++;} if($sm_nosmoke eq '1'){$stopsmoke1++;} if($sm_nosmoke eq '2'){$stopsmoke2++;} if($sm_nosmoke eq '3'){$stopsmoke3++;} if($sm_nosmoke eq '4'){$stopsmoke4++;} } ######### print "Content-Type: text/html\n\n"; print "<HTML><HEAD><TITLE>Результаты обработки данных</TITLE></HEAD>"; print "<BODY bgcolor=\"yellow\">"; unless($total){print "<H1>Еще нет данных</H1></BODY></HTML>"; exit; } print "<CENTER><H1>Результаты обработки данных</H1></CENTER>"; print "<BR>\n"; print "Обработано анкет: $total<BR>\n"; print "Общие данные Всего:<BR>\n"; print "Курящие:$smok_total (".(($smok_total/$total)*100) ."%)<BR>\n"; print "Некурящие:$nosmok_total (".(($nosmok_total/$total)*100)."%)<BR>\n"; print "<TABLE>\n"; print "<TR><TD colspan=4>Возрастные группы:(<16,16..18,18..20,>20)</TD></TR>\n"; print "<TR><TD>Возраст</TD><TD>Курящие</TD><TD>Некурящие</TD> <TD>Всего</TD></TR>\n"; print "<TR><TD><16:</TD><TD>$age16_sm</TD><TD>$age16_nosm</TD> <TD>$age16_total</TD></TR>\n"; print "<TR><TD>16..18:</TD><TD>$age16_18_sm</TD><TD>$age16_18_nosm</TD> <TD>$age16_18_total</TD></TR>\n"; print "<TR><TD>18..20:</TD><TD>$age18_20_sm</TD><TD>$age18_20_nosm</TD> <TD>$age18_20_total</TD></TR>\n"; print "<TR><TD>>20:</TD><TD>$age20_sm</TD><TD>$age20_nosm</TD> <TD>$age20_total</TD></TR>"; print "</TABLE>\n"; print "<TABLE>\n"; print "<TR><TD colspan=2>Отношение когда кто-то курит рядом:(%)</TD></TR>\n"; print "<TR><TD>Резко негативно</TD><TD>".(($near0/$total)*100)."</TD></TR>\n"; print "<TR><TD>Негативно </TD><TD>".(($near1/$total)*100)."</TD></TR>\n"; print "<TR><TD>Мне все равно </TD><TD>".(($near2/$total)*100)."</TD></TR>\n"; print "<TR><TD>Позитивно </TD><TD>".(($near3/$total)*100)."</TD></TR>\n"; print "<TR><TD>Резко позитивно</TD><TD>".(($near4/$total)*100)."</TD></TR>\n"; print "</TABLE>\n"; print "<TABLE>\n"; print "<TR><TD colspan=2>В среднем выкуривают:(%)</TD></TR>\n"; print "<TR><TD>не курят: </TD><TD>".(($day0/$total)*100)."</TD></TR>\n"; print "<TR><TD>1 сигарету:</TD><TD>".(($day1/$total)*100)."</TD></TR>\n"; print "<TR><TD>2 сигареты:</TD><TD>".(($day2/$total)*100)."</TD></TR>\n"; print "<TR><TD>5 сигарет: </TD><TD>".(($day5/$total)*100)."</TD></TR>\n"; print "<TR><TD>полпачки: </TD><TD>".(($dayhalfpac/$total)*100)."</TD></TR>\n"; print "<TR><TD>пачку: </TD><TD>".(($daypac/$total)*100)."</TD></TR>\n"; print "<TR><TD>2 пачки: </TD><TD>".(($day2pac/$total)*100)."</TD></TR>\n"; print "<TR><TD>больше: </TD><TD>".(($daymore/$total)*100)."</TD></TR>\n"; print "</TABLE>\n"; print "<TABLE>\n"; print "<TR><TD colspan=2>Стаж курения:(%)</TD></TR>\n"; print "<TR><TD>Не начинал</TD><TD>".(($stagenoatall /$total)*100)."</TD></TR>\n"; print "<TR><TD>Бросил </TD><TD>".(($statgeonetime/$total)*100)."</TD></TR>\n"; print "<TR><TD>Полгода </TD><TD>".(($stagehalfyear/$total)*100)."</TD></TR>\n"; print "<TR><TD>Год </TD><TD>".(($stage1year /$total)*100)."</TD></TR>\n"; print "<TR><TD>2 Года </TD><TD>".(($stage2year /$total)*100)."</TD></TR>\n"; print "<TR><TD>5 Лет </TD><TD>".(($stage5year /$total)*100)."</TD></TR>\n"; print "<TR><TD>Больше </TD><TD>".(($stagemore /$total)*100)."</TD></TR>\n"; print "</TABLE>\n"; print "<TABLE>\n"; print "<TR><TD colspan=2>Курение опасно:(%)</TD></TR>\n"; print "<TR><TD>Очень Опасно </TD><TD>".(($danger0/$total)*100)."</TD></TR>\n"; print "<TR><TD>Думаю,что да </TD><TD>".(($danger1/$total)*100)."</TD></TR>\n"; print "<TR><TD>Не знаю </TD><TD>".(($danger2/$total)*100)."</TD></TR>\n"; print "<TR><TD>Может самую малость</TD><TD>".(($danger3/$total)*100)."</TD></TR>\n"; print "<TR><TD>Нет,Безопасно. </TD><TD>".(($danger4/$total)*100)."</TD></TR>\n"; print "</TABLE>\n"; print "<TABLE>\n"; print "<TR><TD colspan=2>Хотели ли вы бросить:(%)</TD></TR>\n"; print "<TR><TD>Уже бросаю </TD><TD>".(($stopsmoke0/$total)*100)."</TD></TR>\n"; print "<TR><TD>Думаю бросить</TD><TD>".(($stopsmoke1/$total)*100)."</TD></TR>\n"; print "<TR><TD>Иногда </TD><TD>".(($stopsmoke2/$total)*100)."</TD></TR>\n"; print "<TR><TD>Очень Редко </TD><TD>".(($stopsmoke3/$total)*100)."</TD></TR>\n"; print "<TR><TD>Никогда. </TD><TD>".(($stopsmoke4/$total)*100)."</TD></TR>\n"; print "</TABLE>\n"; print "</BODY></HTML>"; |