Module xem điểm ( xem_diem.cgi )

Một phần của tài liệu Lập trình CGI bằng Perl trên Linux (Trang 53 - 69)

III. Cài đƯt và chạy chơng trình CGI

4.Module xem điểm ( xem_diem.cgi )

Module này yêu cèu ngới dùng nhỊp vào tên mĩt tên lớp và mĩt hục kỳ nào đờ. Dựa vào các thông tin nhỊp vào module sẽ mị các tỊp tin cơ sị dữ liệu tơng ứng, thực hiện kết nỉi giữa cơ sị dữ liệu sinhvien.db, khht.db, diem.db và cho hiển thị kết quả lên màn hình browser.

Module xem_diem.cgi xem phụ lục mục IV

Chơng V

kết quả thực hiện chơng trình

.I Xây dựng môi trớng hệ thỉng

Hệ thỉng chơng trình "Quản lý sinh viên trớng Đại hục kỹ thuỊt" đợc viết bằng ngôn ngữ Perl theo công nghệ CGI trên hệ điều hành Linux phiên bản 6.1.Toàn bĩ chơng trình nguơn đợc đƯt trong th mục /home/httpd/cgi-bin/database/*.cgi. Các tỊp tin cơ sị dữ liệu đợc đƯt trong cùng th mục với tên là *.db.

Browser đăng nhỊp sử dụng chơng trình với quyền hạn cho phép cờ thể tạo, cỊp nhỊt sửa chữa trong các tỊp tin cơ sị dữ liệu. Để làm điều này chúng ta cèn đƯt các thuĩc tính cho th mục bằng lệnh UNIX sau:

chmod 777 /home/httpd/cgi-bin/database

Để hiện thực hệ thỉng chơng trình này, cèn cờ mĩt máy Linux server, cờ cài đƯt Apache Web server. Môi trớng mạng với các máy trạm cờ thể là máy chạy Linux, Unix, Winđows9X, 2000 . . .miễn là cờ thể chạy đợc các trình duyệt nh Netscape, Internet Explorer . . .

.II Chạy chơng trình

Bớc 1. Tại máy trạm, trong trình duyệt gđ vào URL chỉ đến Form chính của chơng trình, cụ thể nh sau:

http://192.0.1.2/html/home.htm

Form hiện ra nh sau:

Bớc 2. ị bớc này, ngới dùng cờ thể chụn mĩt trong các nút lệnh ị pannel bên trái. Cờ thể chụn các chức năng nh: NhỊp mới danh sách mĩt lớp, nhỊp điểm mĩt hục kỳ nào đờ cho mĩt lớp nào đờ, xem danh sách mĩt lớp nào đờ, tìm kiếm thông tin, xem kết quả hục tỊp . . .

Bớc 3. Nếu ngới dùng chụn các mục nh: "NhỊp danh sách", "NhỊp điểm" thì chơng trình sẽ hõi mỊt khỈu sử dụng. Nếu đúng, thì mới cờ thể thực hiện chức năng chụn, nếu không thì không thể chạy tiếp.

Bớc 4. Kết thúc chơng trình, chỉ việc đờng cửa sư trình duyệt Mĩt sỉ Form minh hụa trong chơng trình

Form chính

Form yêu cèu mỊt khỈu đăng nhỊp

Form nhỊp điểm hục kỳ I cho sinh viên lớp 95T

Form kết quả hục tỊp hục kỳ I củalớp 95T

Chơng VI

Kết luỊn

.I Những kết quả đạt đợc I.1 Lý thuyết

- Sử dụng thành công phèn mềm Apache Server trên Linux hỡ trợ các ứng dụng CGI - Hiểu đợc công nghệ CGI và cách thức lỊp trình CGI trên Linux.

- Tìm hiểu giao thức HTTP và các phơng thức của nờ hỡ trợ lỊp trình trên mạng.

- Biết cách lỊp trình bằng ngôn ngữ Perl trong môi trớng Linux theo công nghệ CGI phục vụ giải quyết bài toán truy cỊp các cơ sị dc liệu trong các bài toán.

I.2 Thực tiễn

- Hiện thực và cài đƯt thành công hệ điều hành Linux phiên bản 5.2, 6.1

-Xây dựng chơng trình quản lý sinh viên đã đáp ứng đợc phèn lớn các yêu cèu đề ra. - Chơng trình đã vỊn hành thành công trên mạng.

- Sử dụng chơng trình, các vị giáo vụ cờ thể nhỊp, cỊp nhỊt điểm cho sinh viên sau mỡi kỳ thi về phòng mĩt cách dễ dàng.

- Gia đình của sinh viên ị nhà chỉ cèn cờ máy tính kết nỉi vào mạng thì cờ thể truy cỊp đến đợc thông tin về con cái của mình đang hục tại trớng. (adsbygoogle = window.adsbygoogle || []).push({});

.II Tính khả thi

Nh ý tịng đã nêu trong chơng đèu. Mục đích của đề tài này mang nhiều tính khai thông, nghiên cứu, cha chú trụng vào mục tiêu hiện thực chơng trình trên thực tế. Tuy nhiên, đề tài này cờ tính khả thi ngay từ ý tịng "Liên lạc giữa gia đình và nhà trớng", "Liên lạc giữa các giáo vụ khoa với phòng đào tạo".

Để hiện thực đợc toàn bĩ ý tịng của đề tài, chỉ cèn mĩt máy tính chạy Linux kết nỉi vào mạng Internet, đợc công nhỊn trên mạng và đợc cài đƯt chơng trình này. Mỉi liên hệ giữa các vị giáo vụ khoa và phòng đào tạo chỉ cèn là mạng cục bĩ hoƯc Intranet là đợc.

.III Hạn chế

- Các thao tác sử lý trong chơng trình còn đơn sơ cha đáp ứng hết nhu cèu thực tế.

- Công cụ sử dụng để mô tả các cơ sị dữ liệu còn dơn giản, cha đáp ứng đợc các yêu cèu truy vÍn phúc tạp.

- Phân chia quyền hạn đỉi với các đỉi tợng sử dụng hệ thỉng cha cụ thể.

.IV Hớng phát triển

Ngôn ngữ Perl hoàn toàn cờ thể thao tác với các hệ quản trị cơ sị dữ liệu mạnh nh Oracle, Sysbase. . . Nếu cờ thể tư chức đợc cơ sị dữ liệu của chơng trình trên Oracle thì tèm vờc của chơng trình sẽ đợc nâng lên rÍt cao, đáp ứng đợc nhiều thao tác quản lý phức tạp.

Phát triển các kỹ thuỊt đã nghiên cứu, tỉi u hoá chơng trình và tiến hành hoàn thiện các chức năng ngới dùng, tích hợp thêm vào chơng trình các dịch vụ tìm nhanh trên mạng. . .

Đề tài hoàn toàn cờ thể đa vào ứng dụng trong thực tế, hiện thực ý tịng của tác giả và giúp trớng Đại hục kỹ thuỊt quản lý sinh viên trên mạng.

Tài liệu tham khảo

[1] Kamran Husain and Robert F. Breedlove, Perl 5 Unleashed

[2] David Till, Teach Yourself Perl5 in 21 days

[3] David Harlan, Special Edition Using Perl for Web programming

[4] Jeffry Dwight and Michael Erwin , Special Edition Using CGI

[6] Eugene Eric Kim, CGI Developer's Guide

[7] Moscheofl ees Foghlys, Perl 5 Qick Reference

[8] Jonathan Hagey, Programming Perl 5.0 CGI Web Page for Windows NT

[9] Web Programming with Perl5

[10] Eugene Eric Kim, CGI Programming Unleashed

[11] Eric Herrmann,

Teach Yourself CGI Programming with PERL 5 in a Week, 2E

[12] Edward S.Peschko and Michele DeWolfe, Perl 5 Complete

[13] Shishir Gundavaram, CGI Programming on the World Wide Web

[14] Red Hat Software, Inc, The complete Red Hat Linux Installation Guide 5.2

[15] Jack Tackett, Jr. Steve Burnett, Special Edition Using Linux, Fourth Edition [16] Bill Ball, Stephen Smoogen, Sams' Teach Yourself LINUX in 24 Hours

[17] David Pitts, Linux Unleashed, Second Edition

Phụ lục .I Module nhapds.cgi #!/usr/bin/perl #nhapds.cgi require 'cgi-lib.pl'; use AnyDBM_File; &ReadParse(*input);

print &PrintHeader,&HtmlTop("Quan ly sinh vien"); $db_name="Lop"; (adsbygoogle = window.adsbygoogle || []).push({});

$db_name.=$input{'T1'}; $db_lop=$db_name;

dbmopen(%lop,$db_lop,0666);

while(($ma_sv,$info)=each(%lop)){ if ($input{'ma_sv'}==$ma_sv){

print "Ma sinh vien nay da ton tai\n";

print "Nhan Back o trinh duyet de lam lai\n"; print &HtmlBot; dbmclose(%lop); die; last; } } if (defined($input{'ma_sv'})){ if (!defined($lop{$input{'ma_sv'}})){ $lop{$input{'ma_sv'}} = "$input{'ho_lot'}:$input{'ten_sv'}: $input{'n_sinh'}:$input{'d_chi'}"; } } dbmclose(%lop); print <<HTM; <form ACTION="http://192.0.1.1/cgi-bin/database/nhapds.cgi" METHOD="POST">

<table border="0" width="80%"> <tr>

<td width="43%"><strong><em><font face=".VnArial"><u>Mã sinh viên :</u></font></em></strong></td>

<td width="67%"><input SIZE="18" name="ma_sv"></td> </tr>

<tr>

<td width="43%"><strong><em><font face=".VnArial"><u>Hụ lờt: </u></font></em></strong></td>

<td width="67%"><input SIZE="24" name="ho_lot"></td> </tr>

<tr>

<td width="43%"><strong><em><font face=".VnArial"><u>Tên sinh viên:</u></font></em></strong></td>

<td width="67%"><input SIZE="15" name="ten_sv"></td> </tr>

<tr>

<td width="43%"><strong><em><font face=".VnArial"><u>Ngay sinh:</u></font></em></strong></td>

<td width="67%"><input SIZE="15" name="n_sinh"></td> </tr>

<tr>

<td width="43%"><strong><em><font face=".VnArial"><u>Dia chi:</u></font></em></strong></td>

<td width="67%"><input SIZE="15" name="d_chi"></td> </tr>

HTM

print " </table>"; print " <h4><br>";

print " <input TYPE=\"submit\" Value=\" Them sinh vien \"><input TYPE=\"reset\" Value=\"Nhap lai\"></h4>";

print"<input TYPE=\"hidden\" NAME=\"T1\" Value=\"$input{'T1'}\"></h4>"; print "</form>";

print "</body>";

print"<a href=\"http://192.0.1.2/home1.htm\">Ve trang dau</a>"; print &HtmlBot;

dbmclose(%lop);

.II Module xemdanhsach.cgi

#!/usr/bin/perl #xemdanhsach.cgi require 'cgi-lib.pl'; use AnyDBM_File; &ReadParse(*input); print &PrintHeader; #

if (($input{'R1'} eq 'V1') && ($input{'D1'} eq "Lop95T")) {print &HtmlTop("Danh sách sinh viên $input{'D1'}"); $db_name=$input{'D1'};&openfile();} (adsbygoogle = window.adsbygoogle || []).push({});

if (($input{'R1'} eq 'V1') && ($input{'D1'} eq "Lop96T1")) {print &HtmlTop("Danh sách sinh viên $input{'D1'}"); $db_name="Lop96T1";&openfile();}

if (($input{'R1'} eq "V1") && ($input{'D1'} eq "Lop96T2")) {Print &HtmlTop("Danh sách sinh viên $input{'D1'}"); $db_name="Lop96T2";&openfile();}

if (($input{'R1'} eq "V1") && ($input{'D1'} eq "Lop97T")) {print &HtmlTop("Danh sách sinh viên $input{'D1'}"); $db_name="Lop97T";&openfile();}

if (($input{'R1'} eq "V1") && ($input{'D1'} eq "Lop98T")) {print &HtmlTop("Danh sách sinh viên $input{'D1'}"); $db_name="Lop98T";&openfile();}

elsif (($input{'R1'} eq "V1") && ($input{'D1'} eq "Lop99T")) {print &HtmlTop("Danh sách sinh viên $input{'D1'}"); $db_name="Lop99T";&openfile();}

else {print &HtmlTop();&thoat();} sub openfile(){

dbmopen(%stocks,$db_name,0666); $number_of_record=0;

print <<TAB;

<table border="10" width="100%"> <tr>

<td width="12%" align="center"><strong>Mã SV</strong></td> <td width="27%" align="center"><strong>Hụ lờt</strong></td> <td width="14%" align="center"><strong>Tên</strong></td>

<td width="17%" align="center"><strong>Ngày sinh</strong></td> <td width="30%" align="center"><strong>Quê quán</strong></td> </tr>

TAB

while (($key,$info) = sort(each (%stocks))){ @info=split(/:/,$info); print <<EOP; <tr> <td width="12%" align="center"><font size="2"><big>$key</big></font></td> <td width="27%" align="left"><font size="2"><big>$info[0]</big></font></td> <td width="14%" align="left"><font size="2"><big>$info[1]</big></font></td> <td width="17%" align="center"><font size="2"><big>$info[2]</big></font></td> <td width="30%" align="left"><font size="2"><big>$info[3]</big></font></td> </tr> EOP $number_of_record++; } print "</table>";

print "<strong>Danh sách này cờ $number_of_record Sinh viên</strong>"; dbmclose(%stocks);

die(); }

sub thoat(){

print "<p>Danh sách lớp này cha tơn tại. Cèn nhỊp danh sách sinh viên cho lớp này.</p>";

print "<p>NhÍn <strong>Back </strong>ị trình duyệt để làm lại hoƯc nhỊp danh sách.</p>";

}

print &HtmlBot;

.III Module xemdiem.cgi

#!/usr/bin/perl #xemdiem.cgi

require 'cgi-lib.pl'; use AnyDBM_File; &ReadParse(*input);

print &PrintHeader,&HtmlTop("Ket qua hoc tap Lop $input{'D1'} ky $input{'D2'}"); # $db_name="Lop"; $db_name.=$input{'D1'}; $db_lop=$db_name; $db_name.=$input{'D2'}; $db_diem=$db_name;

dbmopen(%lop,$db_lop,0666); dbmopen(%diem,$db_diem,0666); dbmopen(%mh,"khht",0666);

while(($key_mh,$ds_mh)=each(%mh)){

if ($key_mh=~ /$input{'D1'}/&&$key_mh=~ /$input{'D2'}/){ @ds_mh=split(/:/,$ds_mh);

print "$key_mh:[@ds_mh]"; }

} (adsbygoogle = window.adsbygoogle || []).push({});

$number_of_record=0;

print "<table border=\"10\" width=\"120%\">"; print " <tr>";

print " <td width=\"15%\" align=\"center\"><font size=\"2\"><big><strong>Ma sv</strong></big></font></td>"; print " <td width=\"25%\" align=\"center\"><font size=\"2\"><big><strong>Ho lot</strong></big></font></td>"; print " <td width=\"15%\" align=\"center\"><font size=\"2\"><big><strong>Ten</strong></big></font></td> ";

$so_mon_hoc=@ds_mh;

foreach($i=0;$i<$so_mon_hoc;$i++){

print " <td width=\"12%\" align=\"center\"><font size=\"2\">$ds_mh[$i]</font></td>";

}

print " </tr>"; $i=0;

while (($key,$info) = each(%lop)){ $temp[$i++]=$key; } $size=@temp; foreach ($i=0;$i<$size-1;$i++){ foreach ($j=$i+1;$j<$size;$j++){ if ($temp[$j]<$temp[$i]){ $tam=$temp[$i]; $temp[$i]=$temp[$j]; $temp[$j]=$tam; } } } foreach($i=0;$i<$size;$i++){ @info=split(/:/,$lop{$temp[$i]}); @diem=split(/:/,$diem{$temp[$i]}); print " <tr>";

print " <td width=\"15%\" align=\"center\"><font size=\"2\">$temp[$i]</font></td>";

print " <td width=\"25%\" align=\"left\"><font size=\"2\">$info[0]</font></td>";

print " <td width=\"15%\" align=\"left\"><font size=\"2\">$info[1]</font></td>";

foreach($j=0;$j<$so_mon_hoc;$j++){

print "<td width=\"12%\" align=\"center\"><font size=\"2\">$diem[$j]</font></td>";

}

print " </tr>"; $number_of_record++; }

print "</table>";

print "Co so du lieu co $number_of_record ban ghi"; dbmclose(%lop);

dbmclose(%diem); print $db_name; dbmclose(%mh); print &HtmlBot;

.IV Module timkiem.cgi

#!/usr/bin/perl #timkiem.cgi require 'cgi-lib.pl'; &ReadParse(*input); print &PrintHeader; $dbname="Lop95T"; dbmopen(%handle,$dbname,0666); @results=(); if(($ma_sv_input = $input{'ma_sv'})&& ($ho_lot_input = $input{'ho_lot'})&& ($ten_input = $input{'ten_sv'})){

$kiemtra=0; while (($ma_sv,$info)=each(%handle)){ if(($ma_sv_input eq $ma_sv)&& ($info=~/$ho_lot_input/)&& ($info=~/$ten_input/)){ $kiemtra=1; push(@results,$ma_sv); &in_ket_qua(); last;} }#while(1) }elsif(($ho_lot_input = $input{'ho_lot'})&& ($ten_input = $input{'ten_sv'})){ $kiemtra=0; while (($ma_sv,$info)=each(%handle)){ if(($info=~/$ho_lot_input/)&& ($info=~/$ten_input/)){ $kiemtra=1; push(@results,$ma_sv); } }#while(2) &in_ket_qua(); if(!$kiemtra) {&exitnone();} }#elsif (1) sub exitnone { print <<EOE;

<HTML><HEAD><TITLE>Khong tim thay</title></head> <BODY>

<h4>Can nhap lai thong tin de tim kiem</h4>

<A HREF="http://192.0.1.2/html/tim_kiem.htm">Go</a> back to the form to try again. </body></html> EOE die; } sub in_ket_qua{

print "<HTML><HEAD><TITLE>Ket qua</title></head>"; print "<BODY>";

print "<h3>Ket qua tim kiem</h3>"; foreach $r (@results) {

print "---</br>"; @info = split(/:/,$handle{$r});

print "Info: $handle{$r}</br>"; print "Ma_sv: $r</br>";

print "Ho lot: $info[0]</br>"; print "Ten: $info[1]</br>"; (adsbygoogle = window.adsbygoogle || []).push({});

print "Ngay sinh: $info[2]</br>"; print "Que quan: $info[3]</br>"; }

}

print <<EOH; </pre><br>

<A HREF="http://192.0.1.2/html/tim_kiem.htm">Go</a> back to the form to make another search.

</body></html> EOH

Một phần của tài liệu Lập trình CGI bằng Perl trên Linux (Trang 53 - 69)