26
Lời mở đầu................................................ 2 I. Đặt vấn đề............................................. 3 1. Vấn đề internet ứng dụng cuộc sống...................3 2. Vấn đề lập trình trong trường đại học................4 3. Project1............................................. 4 II. Giải quyết vấn đề....................................4 1. Phân tích vấn đề.....................................4 1.1 Những vấn đề khi thực hiện bài toán..........4 1.2 Chọn lựa ngôn ngữ lập trình.......................4 2. Thiết kế cơ sở dữ liệu...............................5 3. Thực hiện các bước...................................6 3.1 Bước download trang WEB về........................6 3.2 Bước phân tích code trang web để lấy dữ liệu......8 3.3 Bước đưa dữ liệu vào CSDL và hiển thị trên Form. .10 3.4 Hoàn thành dự án.................................12 III. Phát triển dự án....................................20 IV. Lời kết............................................. 21 1

Báo cáo project

  • Upload
    tuanfet

  • View
    175

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Báo cáo project

Lời mở đầu.........................................................................................................................2I. Đặt vấn đề...................................................................................................................3

1. Vấn đề internet ứng dụng cuộc sống....................................................................32. Vấn đề lập trình trong trường đại học.................................................................43. Project1...................................................................................................................4

II. Giải quyết vấn đề...................................................................................................41. Phân tích vấn đề.....................................................................................................4

1.1 Những vấn đề khi thực hiện bài toán...........................................................41.2 Chọn lựa ngôn ngữ lập trình........................................................................4

2. Thiết kế cơ sở dữ liệu.............................................................................................53. Thực hiện các bước................................................................................................6

3.1 Bước download trang WEB về.....................................................................63.2 Bước phân tích code trang web để lấy dữ liệu............................................83.3 Bước đưa dữ liệu vào CSDL và hiển thị trên Form.................................103.4 Hoàn thành dự án........................................................................................12

III. Phát triển dự án...................................................................................................20IV. Lời kết...................................................................................................................21

1

Page 2: Báo cáo project

Lời mở đầu

Để hoàn thành được Project này, chúng em xin chân thành cảm ơn Giảng viên Nguyễn Đức Minh, giảng viên hướng dẫn Project1, đã tận tình chỉ bảo chúng em trong quá trình thực hiện. Chúng em cũng xin chân trọng cảm ơn những đóng góp quý báu của Thầy Vũ Song Tùng, giảng viên bộ môn KTPM, đã hướng dẫn chúng em về ngôn ngữ lập trình và CSDL. Chúng em đã được học hỏi rất nhiều từ kinh nghiệm làm việc của các Thầy, đó là niềm vui, niềm vinh hạnh rất lớn của chúng em.Một lần nữa, chúng em xin chân thành cảm ơn các Thầy!

Nhóm thực hiện Project : Nguyễn Huy Tình Đỗ Quang Trung Nguyễn Trọng Tú Đinh Việt Thắng Nguyễn Hữu TuấnLớp : DT5-K51

2

Page 3: Báo cáo project

I. Đặt vấn đề1. Vấn đề internet ứng dụng cuộc sống

Ngày nay, với sự phát triển vượt bậc của công nghệ, khoa học máy tính đặc biệt là mạng Internet băng rộng được triển khai mạnh mẽ đã giúp cho cuộc sống của chúng ta trở nên vô cùng phong phú và đa dạng. Với một chiếc máy tính có kết nối mạng Internet, dường như cả thế giới đang nằm trong tay bạn. Chúng ta có thể giải trí, làm việc, thăm hỏi người thân và bất kì những gì chúng ta muốn: mua báo, mua đồ ăn nhanh, …Đối với nhiều người thì việc có Internet đã là một thói quen hay là một tính cách, nó đã quá quen thuộc. Những tiện ích rất nhiều, vô cùng nhiều, trải rộng trên nhiều lĩnh vực, nếu muốn chúng ta có thể thu nhận được một lượng thông tin cực kì lớn, hữu ích. Ngay cả với sinh viên như chúng em, việc làm quen với máy tính, Internet và những ứng dụng trên đó là một nhu cầu hết sức cần thiết và quan trọng.

2. Vấn đề lập trình trong trường đại học Hầu hết chúng ta sử dụng máy tính, tài nguyên mà không hiểu nó được tạo ra như thế nào. Vì thế, việc học lập trình, nghiên cứu về lập trình là một vấn đề hầu hết các trường kĩ thuật không thể không quan tâm. Đặc biệt với Đại học Bách khoa Hà Nội, trường kĩ thuật hàng đầu của Việt Nam, thì việc đào tạo lập trình, tư duy lập trình chuyên nghiệp là điều rất được đề cao. Chính vì lẽ đó, sinh viên Khoa ĐTVT, sẽ có mộtmôn để rèn luyện về khả năng lập trình. Đó là Project 1.

3. Project1 Để đáp ứng được nhu cầu về ứng dụng trên Internet, và vấn đề lập trình một cách chuyên nghiệp trong nhà trường. Chúng em quyết định chọn chủ đề Project là một phần mềm được thiết kế dựa trên nền .Net, với sự hỗ trợ của Internet. Có thể nói đây là một ứng dụng trong vô vàn ứng dụng trên nền tảng mạng Internet.

Phần mềm :”Phân tích dữ liệu trang WEB”.

II. Giải quyết vấn đề1. Phân tích vấn đề

3

Page 4: Báo cáo project

1.1 Những vấn đề khi thực hiện bài toánNghe qua về dự án, chúng ta có thể thấy ngay những vấn đề cần quan tâm và giải quyết:+ Vấn đề Download trang WEB về máy tính của mình.+ Vấn đề bóc tách dữ liệu trang WEB đó ra.+ Lọc dữ liệu cần thiết và đưa vào CSDL.+ Hiển thị thông tin từ CSDL một cách trực quan, dễ hiểu.

1.2 Chọn lựa ngôn ngữ lập trìnhVới những yêu cầu như trên, chúng em thấy rằng ngôn ngữ C# rất phù hợp để thực hiện đề tài.+ Thứ nhất: C# là ngôn ngữ hiện đại, dựa trên nền .NET chúng em có thể triển khai ứng dụng với Web service rất dễ dàng.+ Thứ hai : C# có môi trường phát triển, viết code rất dễ dàng, tiện ích, câu lệnh dễ hiểu, ít từ khóa, thư việc đồ sộ đa năng.+ Thứ ba : Lập trình với C# trong bộ Visual Studio 2005, chúng em có thể sử dụng hệ quản trị CSDL SQL server được tích hợp sẳn trên đó.Giáo trình chúng em sử dụng để thực hiện Project nàyVisual C# 2005: How to Program, Second Edition.PUBLISHER : PRENTICE HALL Năm 2005.

2. Thiết kế cơ sở dữ liệu CSDL SQL được sử dụng ở đây vì nó rất mạnh về tính năng, đơn giản trong cách học, dễ dàng lập trình các ứng dụng trên môi trường C#. Để thiết kế CSDL cho chương trình, chúng em nhận thấy những điểm lưu ý sau:+ Thứ nhất: chúng ta tập trung vào việc phân tích dữ liệu trên một trang Web về các công ty trên thị trường chứng khoán. Do vậy, bảng dữ liệu chúng ta cần phân tích đưa ra là bảng dữ liệu công ty đó. + Thứ hai: Dữ liệu về một công ty gồm có: Tổng Doanh thu Tổng số nợ Vốn dài hạn

4

Page 5: Báo cáo project

Vốn lưu động Tổng lợi nhuận trước thuế Lợi nhuận thuần, lợi nhuận ròng… Do đó để lưu những dự liệu tách ra được từ trang WEB, chúng em tạo ra CSDL SQL tích hợp trong Visual Studio 2005.Chúng em sẽ tạo ra các bảng như sau: Bảng 1: Bảng Cong ty:

Với khóa chính là MaCT.Bảng 2: Bảng chỉ tiêu:

Với khóa chính là MaChiTieuBảng chỉ tiêu này tạo ra có mục đích là lưu những tiêu chí của một công ty như chúng ta đã liệt kê ở trên để tiện cho việc xử lý.Bảng 3: Bảng Báo Cáo:

Như vậy với 3 bảng dữ liệu như trên, chúng ta đã xây dựng xong CSDL. Bây giờ, nhiệm vụ quan trọng nhất là thực hiện yêu cầu của đề tài.3. Thực hiện các bước

3.1 Bước download trang WEB về C# là ngôn ngữ hỗ trợ rất nhiều cho người lập trình mạng, do vậy chúng ta có thao tác tải trang web như sau đây:

private string LoadHTML(string link) { try

5

Page 6: Báo cáo project

{ // Tạo yêu cầu. WebRequest obj = WebRequest.Create(link);

// Lấy đáp ứng. công việc này sẽ lấy nội dung trang web về WebResponse webRespone = obj.GetResponse();

// Đọc đáp ứng (dạng stream). StreamReader sr = new StreamReader(webRespone.GetResponseStream()); string result = sr.ReadToEnd(); return result; } catch (Exception ex) { return null; } }

Để tải một trang WEB về máy, trước hết chúng ta phải có địa chỉ URL của trang Web, hàm private string LoadHTML (string link) Còn đây là code của sự kiện Click vào nút Download thì chương trình sẽ Download trang web về:

private void btnDownLoad_Click(object sender, EventArgs e) { progressBar1.Visible = true; string pattern = "Tải xuống BCTC & Báo cáo khác(.|\\n)*?<table.*?>((.|\\n)*?)Bao gồm doanh thu"; string html = this.LoadHTML(comboBox1.Text); if (html == null) { MessageBox.Show("khong tai duoc web"); } else { string[] table = this.ExtractContent(html, pattern, 2); if (table.Length == 0) { MessageBox.Show("khong tim duoc du lieu phu hop"); } else { table[0] = removetable(table[0]); string[][] m = this.getdata(table[0]); string tenct = this.tenma(html, 1); string ma = this.tenma(html, 2); if (this.testCT(tenct) == 1) { MessageBox.Show("Da co du lieu"); } else { RunSQL("INSERT INTO CongTy(MaCT,TenCT) VALUES (\'"+ ma+"\',N\'"+ tenct+"\')"); for (int i = 2; i < 12; i++)

6

Page 7: Báo cáo project

{ if (i != 6) { if (GETDATA("SELECT TenChiTieu FROM ChiTieu WHERE MaChiTieu=" + i + "") == null) { RunSQL(String.Format("INSERT INTO ChiTieu(MaChiTieu,TenChiTieu) VALUES ({0},N\'{1}\')", new object[] { i, m[i][0] })); } } } int h = 5; do { for (int j = 4; j > 0; j--) { string qui = this.tach(m[0][j], 1); string nam = this.tach(m[0][j], 2); if ((qui == null)||(nam == null)) { break; } for (int i = 2; i < 12; i++) { if (i != 6) { object a = new object[] { ma, qui, nam, i, m[i][j] }; string sql = String.Format("INSERT INTO BaoCao(MaCT,Quy,Nam,MaChiTieu,GiatriCT) VALUES(\'" + ma + "\',\'" + qui + "\',\'" + nam + "\'," + i + ",\'" + m[i][j] + "\')");

RunSQL(sql); } }

}

string[] tg = this.ExtractContent(comboBox1.Text, "(.+).chn", 1); string url = tg[0] + "/" + h.ToString() + ".chn#anchorBCTT"; html = this.LoadHTML(url); table = this.ExtractContent(html, pattern, 2); table[0] = removetable(table[0]); m = this.getdata(table[0]); h = h + 4; } while (m[2][1] != ""); progressBar1.Minimum = 0; progressBar1.Maximum = html.Length; for (int i = 0; i <= html.Length; i++) { progressBar1.Value = i; } progressBar1.Visible = false; this.tree(); }

7

Page 8: Báo cáo project

} } }

3.2 Bước phân tích code trang web để lấy dữ liệu

8

Page 9: Báo cáo project

3.3 Bước đưa dữ liệu vào CSDL và hiển thị trên Form

Trước tiên, chúng ta tạo ra một số hàm được coi là chuẩn trong các chương trình có sử dụng CSDL SQL Bước 1: Viết hàm LoadData, nhận vào một câu lệnh SQL và trả về một DataTable.

Bước 2: Viết hàm RunSQL để chạy một câu lẹnh SQL, tham số nhận vào là một câu lệnh SQL

9

Page 10: Báo cáo project

Bước 3: Hàm GETDATA với kiểu trả về là object

Bước 4: Tạo một cấu trúc Tree trong C#

public void tree() { this.treeView1.Nodes.Clear(); DataTable tab = LoadData("SELECT DISTINCT TenCT FROM CongTy"); foreach (DataRow r in tab.Rows) { string name1 = r["TenCT"].ToString(); TreeNode nodes = this.treeView1.Nodes.Add(String.Format(name1)); nodes.Name = name1; DataTable tab1 = LoadData("SELECT DISTINCT Nam FROM BaoCao WHERE MaCT=(SELECT MaCT FROM CongTy WHERE TenCT= N\'" + r["TenCT"].ToString() + "\')"); foreach (DataRow r1 in tab1.Rows) { string name = r1["Nam"].ToString(); TreeNode node = nodes.Nodes.Add(String.Format(name)); node.Name = name; DataTable tab2 = LoadData("SELECT DISTINCT Quy FROM BaoCao WHERE MaCT=(SELECT MaCT FROM CongTy WHERE TenCT= N\'" + r["TenCT"].ToString() + "\')AND Nam=\'" + r1["Nam"].ToString() + "\'"); foreach (DataRow r2 in tab2.Rows) { string ten = r2["Quy"].ToString(); TreeNode not = node.Nodes.Add(String.Format(ten)); not.Name = ten;

} } }

10

Page 11: Báo cáo project

Còn đâu là đoạn mã để khi ta Click vào từng node của tree thì sẽ hiện ra nội dung tương ứng:

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)

{ string a1 = ""; string a2 = ""; string a3 = ""; DataTable tab = LoadData("SELECT DISTINCT Quy FROM BaoCao"); foreach (DataRow r in tab.Rows) { if (e.Node.Name == r["Quy"].ToString()) { a1 = e.Node.Name;

a2 = e.Node.Parent.Name; a3 = e.Node.Parent.Parent.Name; this.dataGridView1.DataSource = AutoNumberedTable(LoadData("SELECT ChiTieu.TenChiTieu,BaoCao.GiatriCT FROM BaoCao INNER JOIN ChiTieu ON(BaoCao.MaChiTieu=ChiTieu.MaChiTieu) INNER JOIN CongTy ON(CongTy.MaCT=BaoCao.MaCT) WHERE CongTy.TenCT=N\'" + a3 + "\' AND BaoCao.Nam=\'" + a2 + "\' AND BaoCao.Quy=\'" + a1 + "\' ORDER BY ChiTieu.TenChiTieu")); this.dataGridView1.Columns[0].Width = this.dataGridView1.Width / 8; this.dataGridView1.Columns[1].Width = this.dataGridView1.Width / 2; this.dataGridView1.Columns[2].Width = this.dataGridView1.Width / 4; }

}

3.4 Hoàn thành dự ánSau đây là toàn bộ phần code thực hiện chương trình:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Net;using System.IO;using System.Text.RegularExpressions;using System.Data.SqlClient;using System.Configuration;

11

Page 12: Báo cáo project

namespace BocTachTrangWeb{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static DataTable LoadData(string sql) { String conn1 = ConfigurationManager .ConnectionStrings ["BocTachTrangWeb.Properties.Settings.DataBocTachConnectionString"].ConnectionString;

SqlConnection conn = new SqlConnection(conn1); if (conn.State == ConnectionState.Closed) conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); IDataReader reader = cmd.ExecuteReader(); DataTable tab = new DataTable(); tab.Load(reader);

return tab; }

public static void RunSQL(string sql) {

string conn1 = ConfigurationManager.ConnectionStrings["BocTachTrangWeb.Properties.Settings.DataBocTachConnectionString"].ConnectionString;

SqlConnection conn = new SqlConnection(conn1);

if (conn.State == ConnectionState.Closed) conn.Open();

SqlCommand cmd = new SqlCommand(sql, conn); cmd.ExecuteScalar(); }

public static object GETDATA(string link) {

string conn1 = ConfigurationManager.ConnectionStrings["BocTachTrangWeb.Properties.Settings.DataBocTachConnectionString"].ConnectionString;

SqlConnection conn = new SqlConnection(conn1); SqlCommand cmd = new SqlCommand(); if (conn.State == ConnectionState.Closed) conn.Open(); cmd.Connection = conn;

12

Page 13: Báo cáo project

// tạo một lệnh cho đối tượng cmd.CommandText = @link; return cmd.ExecuteScalar(); }

public DataTable AutoNumberedTable(DataTable SourceTable) {

DataTable ResultTable = new DataTable(); DataColumn AutoNumberColumn = new DataColumn(); AutoNumberColumn.ColumnName = "S.No."; AutoNumberColumn.DataType = typeof(int); AutoNumberColumn.AutoIncrement = true; AutoNumberColumn.AutoIncrementSeed = 1;

AutoNumberColumn.AutoIncrementStep = 1;

ResultTable.Columns.Add(AutoNumberColumn);

ResultTable.Merge(SourceTable);

return ResultTable;

} private string LoadHTML(string link) { try { // Tạo yêu cầu. WebRequest obj = WebRequest.Create(link);

// Lấy đáp ứng. công việc này sẽ lấy nội dung trang web về WebResponse webRespone = obj.GetResponse();

// Đọc đáp ứng (dạng stream). StreamReader sr = new StreamReader(webRespone.GetResponseStream()); string result = sr.ReadToEnd(); return result; } catch (Exception ex) { return null; } }private string[] ExtractContent(string content, string pattern, int index) { Regex regEx = new Regex(pattern, RegexOptions.IgnoreCase); MatchCollection matches = regEx.Matches(content); string[] a = new string[matches.Count]; int i = 0; foreach (Match m in matches) {

13

Page 14: Báo cáo project

a[i] = m.Groups[index].Value; i++; } return a;

} private string remove(string name) //loai bo cac <tag> bo tro,xoa ki tu xuong dong { string tg = Regex.Replace(name, "<(.|\\n)*?>", ""); string tg1 = Regex.Replace(tg, "\\n", ""); return Regex.Replace(tg1, " ?", ""); } private string removetable(string name) //ham loai bo cac <table> bo tro { return Regex.Replace(name, "<table>(.|\\n)*?</table></center>", ""); } private string tenma(string name, int index) //ham tach ten va ma cong ty,ten //ung voi index=1,ma ung voi index=2 { string pattern = "Tin tức và dữ liệu (.+) - (.+)\\| CafeF.vn"; string[] a = this.ExtractContent(name, pattern, index); return a[0]; } private string tach(string name, int index) //ham tach quy va nam quy //ung voi index=1,nam ung voi index=2 { string pattern3 = "Quý (.)-(....)"; string[] a = this.ExtractContent(name, pattern3, index); if (a.Length != 0) { return a[0]; } else return null; }private string[][] getdata(string table)//tach ra cac dong tu bang <tr>...</tr>, //sau do tach du lieu tu cac dong { string pattern1 = "<tr.*?>((.|\\n)*?)</tr>"; string pattern2 = "<td.*?>((.|\\n)*?)</td>"; string[] row = this.ExtractContent(table, pattern1, 1); string[][] data = new string[row.Length][]; int j; for (j = 0; j < row.Length; j++) { string[] r = this.ExtractContent(row[j], pattern2, 1); int i; for (i = 0; i < r.Length; i++)

14

Page 15: Báo cáo project

{ r[i] = remove(r[i]); } data[j] = r; } return data; } private int testCT(string name) { int a = 0; DataTable test = LoadData("SELECT DISTINCT TenCT FROM CongTy"); foreach (DataRow r in test.Rows) { if (r["TenCT"].ToString() == name) { a = 1; } } return a; }

public void tree() { this.treeView1.Nodes.Clear(); DataTable tab = LoadData("SELECT DISTINCT TenCT FROM CongTy"); foreach (DataRow r in tab.Rows) { string name1 = r["TenCT"].ToString(); TreeNode nodes = this.treeView1.Nodes.Add(String.Format(name1)); nodes.Name = name1; DataTable tab1 = LoadData("SELECT DISTINCT Nam FROM BaoCao WHERE MaCT=(SELECT MaCT FROM CongTy WHERE TenCT= N\'" + r["TenCT"].ToString() + "\')"); foreach (DataRow r1 in tab1.Rows) { string name = r1["Nam"].ToString(); TreeNode node = nodes.Nodes.Add(String.Format(name)); node.Name = name;

DataTable tab2 = LoadData("SELECT DISTINCT Quy FROM BaoCao WHERE MaCT=(SELECT MaCT FROM CongTy WHERE TenCT= N\'" + r["TenCT"].ToString() + "\')AND Nam=\'" + r1["Nam"].ToString() + "\'"); foreach (DataRow r2 in tab2.Rows) { string ten = r2["Quy"].ToString(); TreeNode not = node.Nodes.Add(String.Format(ten)); not.Name = ten;

} } }

15

Page 16: Báo cáo project

}

private void btnDownLoad_Click(object sender, EventArgs e) { progressBar1.Visible = true; string pattern = "Tải xuống BCTC & Báo cáo khác(.|\\n)*?<table.*?>((.|\\n)*?)Bao gồm doanh thu"; string html = this.LoadHTML(comboBox1.Text); if (html == null) { MessageBox.Show("khong tai duoc web"); } else { string[] table = this.ExtractContent(html, pattern, 2); if (table.Length == 0) { MessageBox.Show("khong tim duoc du lieu phu hop"); } else { table[0] = removetable(table[0]); string[][] m = this.getdata(table[0]); string tenct = this.tenma(html, 1); string ma = this.tenma(html, 2); if (this.testCT(tenct) == 1) { MessageBox.Show("Da co du lieu"); } else { RunSQL("INSERT INTO CongTy(MaCT,TenCT) VALUES (\'"+ ma+"\',N\'"+ tenct+"\')"); for (int i = 2; i < 12; i++) { if (i != 6) { if (GETDATA("SELECT TenChiTieu FROM ChiTieu WHERE MaChiTieu=" + i + "") == null) { RunSQL(String.Format("INSERT INTO ChiTieu(MaChiTieu,TenChiTieu) VALUES ({0},N\'{1}\')", new object[] { i, m[i][0] })); } } } int h = 5; do { for (int j = 4; j > 0; j--) { string qui = this.tach(m[0][j], 1); string nam = this.tach(m[0][j], 2); if ((qui == null)||(nam == null)) { break; } for (int i = 2; i < 12; i++) { if (i != 6)

16

Page 17: Báo cáo project

{ object a = new object[] { ma, qui, nam, i, m[i][j] }; string sql = String.Format("INSERT INTO BaoCao(MaCT,Quy,Nam,MaChiTieu,GiatriCT) VALUES(\'" + ma + "\',\'" + qui + "\',\'" + nam + "\'," + i + ",\'" + m[i][j] + "\')");

RunSQL(sql); } }

}

string[] tg = this.ExtractContent(comboBox1.Text, "(.+).chn", 1); string url = tg[0] + "/" + h.ToString() + ".chn#anchorBCTT"; html = this.LoadHTML(url); table = this.ExtractContent(html, pattern, 2); table[0] = removetable(table[0]); m = this.getdata(table[0]); h = h + 4; } while (m[2][1] != ""); progressBar1.Minimum = 0; progressBar1.Maximum = html.Length; for (int i = 0; i <= html.Length; i++) { progressBar1.Value = i; } progressBar1.Visible = false; this.tree(); } } } }

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)

{ string a1 = ""; string a2 = ""; string a3 = ""; DataTable tab = LoadData("SELECT DISTINCT Quy FROM BaoCao"); foreach (DataRow r in tab.Rows) { if (e.Node.Name == r["Quy"].ToString()) { a1 = e.Node.Name;

a2 = e.Node.Parent.Name;

17

Page 18: Báo cáo project

a3 = e.Node.Parent.Parent.Name; this.dataGridView1.DataSource = AutoNumberedTable(LoadData("SELECT ChiTieu.TenChiTieu,BaoCao.GiatriCT FROM BaoCao INNER JOIN ChiTieu ON(BaoCao.MaChiTieu=ChiTieu.MaChiTieu) INNER JOIN CongTy ON(CongTy.MaCT=BaoCao.MaCT) WHERE CongTy.TenCT=N\'" + a3 + "\' AND BaoCao.Nam=\'" + a2 + "\' AND BaoCao.Quy=\'" + a1 + "\' ORDER BY ChiTieu.TenChiTieu"));this.dataGridView1.Columns[0].Width = this.dataGridView1.Width / 8;this.dataGridView1.Columns[1].Width = this.dataGridView1.Width / 2;this.dataGridView1.Columns[2].Width = this.dataGridView1.Width / 4; } } }

Sau khi chạy, chương trình sẽ có giao diện đơn giản như sau:

18

Page 19: Báo cáo project

Trong đó, chúng ta sẽ nhập URL của trang Web vào textbox trên cùng, sau đó click vào button Download. Những công ty có trong trang web sẽ được hiện ra dưới dạng cấu trúc cây bên trái, trong đó có thống kê cho từng quý trong các năm tính đến thời điểm hiện tại. Ví dụ trong hình ảnh của chúng ta là tình hình kinh doanh quý 1, năm 2007 của công ty Cổ phần Bao bì PP Bình Dương.

III. Phát triển dự án

Theo cách thức như trên, từ đầu tiên, mục tiêu của chúng ta là chỉ cần đưa ra một bảng dữ liệu của một công ty, nhưng sau đó đã có thể đưa ra bảng của tất cả các công ty có mặt trong web. Tuy nhiên, chúng ta mới chỉ thực hiện việc bóc tách cho một trang Web mà chúng ta đã biết định dạng trang Web, định dạng các bảng của nó rồi. Việc bóc tách một trang Web bất kì thì chúng ta sẽ gặp khó khăn vì các trang web khác nhau có thể có định dạng khác nhau, hiển thị khác nhau. Vì vậy, để thực hiện việc này, chúng ta nên chuyển việc phân tích File html sang việc phân tích file XML. Lý do là vì XML là

19

Page 20: Báo cáo project

ngôn ngữ đánh dấu dữ liệu đã chuẩn hóa. Tất cả bảng biểu trong đó đều có định dạng giống nhau. Và như vậy, chúng ta có thể tách được các bảng dữ liệu từ các trang khác nhau. Còn thao tác đưa vào CSDL thì vẫn tương tự như trên đây.

IV. Lời kết

Sau quá trình làm việc, hoàn tất dự án, chúng em thực sự đã có thêm những kinh nghiệm hết sức quý báu. Chúng em mong muốn có được những lời nhận xét, góp ý của quý Thầy cô để chương trình của chúng em được hoàn thiện hơn nữa. Một lần nữa chúng em xin chân thành cảm ơn sự giúp đỡ của các Thầy, các bạn đã hướng dẫn, giúp đỡ chúng em trong quá trình làm. Chúng em xin chân thành cảm ơn!

20