Các chức năng của chương trình:

Một phần của tài liệu Xây dựng chương trình hỗ trợ thiết kế cơ sở dữ liệu (Trang 52)

• Tạo quan hệ.

• Lưu quan hệ dưới dạng tập tin .xml. • Mở quan hệ.

• Tìm khóa của quan hệ.

• Tìm dạng chuẩn của quan hệ.

• Chuẩn hóa quan hệ bằng phương pháp phân rã. • Chuẩn hóa quan hệ bằng phương pháp tổng hợp. • Tìm phủ tối tiểu.

• Tìm đường đi của một nút trong lược đồ quan hệ. II. Giới thiệu chương trình:

Giao diện chính của chương trình:

Hình 1. Giao diện chương trình

Các chức năng trên thanh Menu:

• Khi người dùng click vào menu Hệ thống chương trình sẽ hiển thị như hình bên dưới:

Ngơ Vũ Bình Tâm MSSV: 02ĐHTH197

Hình 2. Menu hệ thống

• Click vào chức năng tạo lược đồ quan hệ, chương trình sẽ hiển thị cữa sổ:

Hình 3. Tạo lược đồ quan hệ.

Trong ô tập quan hệ, người dùng click phải vào chọn chức năng thêm quan hệ để tạo ra 1 quan hệ mới như hình bên dưới:

Cho phép người dùng tạo các quan hệ. Tập thuộc tính của quan hệ. Tập phụ thuộc hàm của quan hệ. Thuộc tính ở vế trái của phụ thuộc hàm. Thuộc tính ở vế phải của phụ thuộc hàm.

Hình 4. Menu quan hệ

Để tạo phụ thuộc hàm, người dùng chọn thuộc tính trong ơ thuộc tính và kéo vào thuộc tính bên vế phải hoặc trái. Phụ thuộc hàm được tạo sẽ hiển thị trên ô phụ thuộc hàm.

• Click vào chức năng mở lược đồ quan hệ, chương trình sẽ gọi Dialog Open của Window cho phép người dùng chọn một tập tin .xml để mở:

Hình 5. Dialog Open

Ngơ Vũ Bình Tâm MSSV: 02ĐHTH197

Hình 6. Giao diện mở tập tin .xml

• Click phải vào quan hệ, sẽ hiển thị menu như hình 4. Người dùng có thể click vào các chức năng trên menu này hoặc các button bên phía trái của quan hệ để sử dụng các chức năng của chương trình.

• Tìm khóa: click chọn quan hệ cần tìm khóa rồi chọn chức năng tìm khóa, chương trình sẽ hiển thị Dialog cho người dùng xem tất cả các khóa trong quan hệ mà chương trình tìm được như hình bên dưới:

Hình 7. Dialog khóa của quan hệ

Nếu các thuộc tính của quan hệ chưa được nhập thì chương trình sẽ khơng thể tìm khóa và hiển thị Dialog nhắc nhở người dùng nhập thuộc tính vào:

Hình 8. Dialog nhập thuộc tính vào quan hệ

• Tìm phủ tối tiểu: click chọn quan hệ cần tìm phủ tối tiểu rồi chọn chức năng tìm phủ tối tiểu, chương trình sẽ hiển thị Dialog cho người dùng xem phủ tối tiểu mà chương trình tìm được dựa vào phụ thuộc hàm của quan hệ như hình bên dưới:

Hình 9. Dialog phủ tối tiểu của quan hệ

• Xác định dạng chuẩn: click chọn quan hệ cần tìm phủ tối tiểu rồi chọn chức năng xác định dạng chuẩn, chương trình sẽ hiển thị Dialog cho người dùng xem dạng chuẩn của quan hệ mà chương trình tìm được, nếu quan hệ đạt dạng chuẩn thấp thì chương trình sẽ hiển thị Dialog dạng chuẩn thấp, ngược lại sẽ hiển thị Dialog dạng chuẩn cao:

Ngơ Vũ Bình Tâm MSSV: 02ĐHTH197 (adsbygoogle = window.adsbygoogle || []).push({});

Hình 11. Dialog dạng chuẩn cao của quan hệ.

• Chuẩn hóa: khi quan hệ đạt dạng chuẩn thấp người dùng click vào chức năng chuẩn hóa để tạo thành các quan hệ con đạt dạng chuẩn cao hơn.

Chương 5. TỔNG KẾT VÀ ĐỊNH HƯỚNG PHÁT TRIỂN

Những chức năng chương trình đã làm được:

• Tạo quan hệ.

• Lưu quan hệ dưới dạng tập tin .xml. • Mở quan hệ.

• Tìm khóa của quan hệ.

• Tìm phủ tối tiểu của quan hệ. • Tìm dạng chuẩn của quan hệ.

• Chuẩn hóa quan hệ bằng phương pháp phân rã. • Chuẩn hóa quan hệ bằng phương pháp tổng hợp. • Tìm đường đi của một nút trong lược đồ quan hệ.

Hướng phát triển:

• Giao diện chương trình đẹp hơn.

• Thêm một số chức năng để chương trình hồn thiện hơn.

Tài liệu tham khảo:

[1] Giáo trình cơ sở dữ liệu của thầy Cao Tùng Anh.

[2] Giáo trình cơ sở dữ liệu của trường Cao Đẳng Công Nghiệp 4. [3] Giáo trình thiết kế cơ sở dữ liệu của thầy Văn Như Bích. [4] MSDN trong Visual Studio 2005.

Ngơ Vũ Bình Tâm MSSV: 02ĐHTH197

Chương 6. PHỤ LỤC

I. Giới thiệu về .NET:

.NET Framework là một platform mới làm đơn giản việc phát triển ứng dụng trong môi trường phân tán của Internet. .NET Framework được thiết kế đầy đủ để đáp ứng theo quan điểm sau:

• Để cung cấp một mơi trường lập trình hướng đối tượng vững chắc, trong đó mã nguồn đối tượng được lưu trữ và thực thi một cách cục bộ. Thực thi cục bộ nhưng được phân tán trên Internet, hoặc thực thi từ xa.

• Để cung cấp một môi trường thực thi mã nguồn mà tối thiểu được việc đóng gói phần mềm và sự tranh chấp về phiên bản.

• Để cung cấp một mơi trường thực thi mã nguồn mà đảm bảo việc thực thi an toàn mã nguồn, bao gồm cả việc mã nguồn được tạo bởi hãng thứ ba hay bất cứ hãng nào mà tuân thủ theo kiến trúc .NET. • Để cung cấp một mơi trường thực thi mã nguồn mà loại bỏ được

những lỗi thực hiện các script hay mơi trường thơng dịch.

• Để làm cho những người phát triển có kinh nghiệm vững chắc có thể nắm vững nhiều kiểu ứng dụng khác nhau. Như là từ những ứng dụng trên nền Windows đến những ứng dụng dựa trên web.

• Để xây dựng tất cả các thông tin dựa triên tiêu chuẩn công nghiệp để đảm bảo rằng mã nguồn trên .NET có thể tích hợp với bất cứ mã nguồn khác.

• .NET Framework có hai thành phần chính: Common Language Runtime (CLR) và thư viện lớp .NET Framework.

• CLR là nền tảng của .NET Framework. Chúng ta có thể hiểu runtime như là một agent quản lý mã nguồn khi nó được thực thi, cung cấp các dịch vụ cốt lõi như: quản lý bộ nhớ, quản lý tiểu trình, và quản lý từ xa. Ngồi ra nó cịn thúc đẩy việc sử dụng kiểu an tồn và các hình thức khác của việc chính xác mã nguồn, đảm bảo cho việc thực hiện được bảo mật và mạnh mẽ. Thật vậy, khái niệm quản lý mã nguồn là nguyên lý nền tảng của runtime. Mã nguồn mà đích tới runtime thì được biết như là mã nguồn được quản lý (managed code). Trong khi đó mã nguồn mà khơng có đích tới runtime thì được biết như mã nguồn khơng được quản lý (unmanaged code). • Thư viện lớp, một thành phần chính khác của .NET Framework là

một tập hợp hướng đối tượng của các kiểu dữ liệu được dùng lại, nó cho phép chúng ta có thể phát triển những ứng dụng từ những ứng dụng truyền thống command-line hay những ứng dụng có giao diện đồ họa (GUI) đến những ứng dụng mới nhất được cung cấp bởi ASP.NET, như là Web Form và dịch vụ XML Web.

Ngơ Vũ Bình Tâm MSSV: 02ĐHTH197

II. Ngôn ngữ C#: (adsbygoogle = window.adsbygoogle || []).push({});

1. Sơ lược về C#:

Ngôn ngữ C# là một ngôn ngữ được dẫn xuất từ C và C++, nhưng nó được tạo từ nền tảng phát triển hơn. Microsoft bắt đầu với công việc trong C và C++ và thêm vào những đặc tính mới để làm cho ngơn ngữ này dễ sử dụng hơn. Nhiều trong số những đặc tính này khá giống với những đặc tính có trong ngơn ngữ Java. Khơng dừng lại ở đó, Microsoft đưa ra một số mục đích khi xây dựng ngơn ngữ này. Những mục đích này được được tóm tắt như sau:

• C# là ngơn ngữ đơn giản: vì nó dựa trên nền tảng C và C++. Nếu chúng ta thân thiện với C và C++ hoậc thậm chí là Java, chúng ta sẽ thấy C# khá giống về diện mạo, cú pháp, biểu thức, toán tử và những chức năng khác được lấy trực tiếp từ ngôn ngữ C và C++, nhưng nó đa được cải tiến để làm cho ngơn ngữ đơn giản hơn. Một vài trong các sự cải tiến là loại bỏ các dư thừa, hay là thêm vào những cú pháp thay đổi.

Web Services Web Forms Windows Forms

Data and XML classes

(ADO.NET, SQL, XSLT, Xpath, XML, …) Framework Base Class Library

(IO, String, net, security, threading, text, reflection, collection,

GUI, XML/SOAP…)

Common Language Runtime(CLR) Common Type Spec.

(CTS) Common Lang. Spec.(CLS)

• C# là ngơn ngữ hiện đại: vì C# có các đặc tính như: xử lý ngoại lệ, thu gom bộ nhớ tự động, những kiểu dữ liệu mở rộng, và bảo mật mã nguồn.

• C# là ngôn ngữ hướng đối tượng: C# hỗ trợ tất cả những đặc tính:

đóng gói (encapsulation), kế thừa (inheritance), và đa hình

(polymorphism).

2. Nạp chồng phương thức:

Thơng thường khi xây dựng các lớp, ta có mong muốn là tạo ra nhiều hàm có cùng tên. Ta có thể xây dựng nhiều các phương thức cùng tên nhưng nhận các tham số khác nhau. Chức năng này được gọi là nạp chồng phương thức.

Một ký hiệu (signature) của một phương thức được định nghĩa như tên của phương thức cùng với danh sách tham số của phương thức. Hai phương thức khác nhau khi ký hiệu của chúng khác là khác nhau tức là khác nhau khi tên phương thức khác nhau hay danh sách tham số khác nhau. Danh sách tham số được xem là khác nhau bởi số lượng các tham số hoặc là kiểu dữ liệu của tham số. Ví dụ đoạn mã sau, phương thức thứ nhất khác phương thức thứ hai do số lượng tham số khác nhau. Phương thức thứ hai khác phương thức thứ ba do kiểu dữ liệu tham số khác nhau:

void myMethod( int p1 );

void myMethod( int p1, int p2 ); void myMethod( int p1, string p2 );

Một lớp có thể có bất cứ số lượng phương thức nào, nhưng mỗi phương thức trong lớp phải có ký hiệu khác với tất cả các phương thức thành viên còn lại của lớp.

3.Một số kiểu dữ liệu:

Môi trường .NET cung cấp rất đa dạng số lượng các lớp về tập hợp, bao gồm: Array, ArrayList, Queue, Stack, BitArray, NameValueCollection, và StringCollection.

Ngơ Vũ Bình Tâm MSSV: 02ĐHTH197 Trong số đó tập hợp đơn giản nhất là Array, đây là kiểu dữ liệu tập hợp mà ngôn ngữ C# hỗ trợ xây dựng sẵn. Và thành phần không thể thiếu của kiểu dữ liệu tập hợp là phần chỉ mục indexer, đây là cách thiết lập để làm cho việc truy cập những thuộc tính giống nhau trở nên đơn giản hơn, một lớp được chỉ mục thì giống như một mảng.

.NET cũng cung cấp nhiều các giao diện, như IEnumerable và ICollection. Những phần thực thi của các giao diện này cung cấp các tiêu chuẩn để tương tác với các tập hợp.

a. Array:

Mảng là một tập hợp có thứ tự của những đối tượng, tất cả các đối tượng này cùng một kiểu.

Ngôn ngữ C# cung cấp cú pháp chuẩn cho việc khai báo những đối tượng Array. Tuy nhiên, cái thật sự được tạo ra là đối tượng của kiểu System.Array.

Khai báo mảng

Chúng ta có thể khai báo một mảng trong C# với cú pháp theo sau: <kiểu dữ liệu>[] <tên mảng>

Cặp dấu ngoặc vng ([]) báo cho trình biên dịch biết rằng chúng ta đang khai báo một mảng. Kiểu dữ liệu là kiểu của các thành phần chứa bên trong mảng. (adsbygoogle = window.adsbygoogle || []).push({});

Chúng ta tạo thể hiện của mảng bằng cách sử dụng từ khóa new như sau:

int[] myIntArray;

myIntArray = new int[6];

Khai báo này sẽ thiết lập bên trong bộ nhớ một mảng chứa sáu số nguyên.

Truy cập các thành phần trong mảng

Để truy cập vào thành phần trong mảng ta có thể sử dụng tốn tử chỉ mục ([]). Mảng dùng cơ sở 0, do đó chỉ mục của thành phần đầu tiên

trong mảng ln ln là 0. Như ví dụ trước thành phần đầu tiên là myArray[0].

Mảng là đối tượng nên có những thuộc tính. Một trong những thuộc tính hay sử dụng là Length, thuộc tính này sẽ báo cho biết số đối tượng trong một mảng. Một mảng có thể được đánh chỉ mục từ 0 đến Length –1. Do đó nếu có năm thành phần trong mảng thì các chỉ mục là: 0, 1, 2, 3, 4.

Khởi tạo thành phần của mảng

Chúng ta có thể khởi tạo nội dung của một mảng ngay lúc tạo thể hiện của mảng bằng cách đặt những giá trị bên trong dấu ngoặc ({}). C# cung cấp hai cú pháp để khởi tạo các thành phần của mảng, một cú pháp dài và một cú pháp ngắn:

int[] myIntArray = new int[5] { 2, 4, 6, 8, 10}; int[] myIntArray = { 2, 4, 6, 8, 10};

Khơng có sự khác biệt giữa hai cú pháp trên, và hầu hết các chương trình đều sử dụng cú pháp ngắn hơn do sự tự nhiên và lười đánh nhiều lệnh của người lập trình.

Sử dụng từ khóa params

Chúng ta có thể tạo một phương thức rồi sau đó hiển thị các số nguyên ra màn hình console bằng cách truyền vào một mảng các số nguyên và sử dụng vòng lặp foreach để duyệt qua từng thành phần trong mảng. Từ khóa params cho phép chúng ta truyền một số biến của tham số mà không cần thiết phải tạo một mảng.

Ví dụ, chúng ta sẽ tạo một phương thức tên DisplayVals(), phương thức này sẽ lấy một số các biến của tham số nguyên:

public void DisplayVals( params int[] intVals)

Phương thức có thể xem mảng này như thể một mảng được tạo ra tường minh và được truyền vào tham số. Sau đó chúng ta có thể tự do lặp lần lượt qua các thành phần trong mảng giống như thực hiện với bất cứ mảng nguyên nào khác:

Ngơ Vũ Bình Tâm MSSV: 02ĐHTH197 {

Console.WriteLine(“DisplayVals: {0}”, i); }

Tuy nhiên, phương thức gọi không cần thiết phải tạo tường minh một mảng, nó chỉ đơn giản truyền vào các số nguyên, và trình biên dịch sẽ kết hợp những tham số này vào trong một mảng cho phương thức DisplayVals, ta có thể gọi phương thức như sau:

t.DisplayVals(5,6,7,8);

và chúng ta có thể tự do tạo một mảng để truyền vào phương thức nếu muốn:

int [] explicitArray = new int[5] {1,2,3,4,5}; t.DisplayArray(explicitArray);

Câu lệnh lặp foreach

Câu lệnh lặp foreach khá mới với những người đa học ngơn ngữ C, ừ khóa này được sử dụng trong ngôn ngữ Visual Basic. Câu lệnh

foreach cho phép chúng ta lặp qua tất cả các mục trong một mảng

hay trong một tập hợp.

Cú pháp sử dụng lệnh lặp foreach như sau:

foreach (<kiểu dữ liệu thành phần> <tên truy cập> in <mảng/tập hợp> )

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

// thực hiện thông qua <tên truy cập> tương ứng với // từng mục trong mảng hay tập hợp

}

b. Bộ chỉ mục:

Đôi khi chúng ta chúng ta mong muốn truy cập một tập hợp bên trong một lớp như thể bản thân lớp là một mảng. Ví dụ, giả sử chúng ta tạo một điều khiển kiểu ListBox tên là myListBox chứa một danh sách các chuỗi lưu trữ trong một mảng một chiều, một biến thành viên private myStrings. Một List Box chứa các thuộc tính thành viên

và những phương thức và thêm vào đó mảng chứa các chuỗi của nó. Tuy nhiên, có thể thuận tiện hơn nếu có thể truy cập mảng ListBox với chỉ mục như thể ListBox là một mảng thật sự. Ví dụ, ta có thể truy cập đối tượng ListBox được tạo ra như sau:

string theFirstString = myListBox[0];

string theLastString = myListBox[myListBox.Length - 1];

Bộ chỉ mục là một cơ chế cho phép các thành phần client truy cập một tập hợp chứa bên trong một lớp bằng cách sử dụng cú pháp giống như truy cập mảng ([]). Chỉ mục là một loại thuộc tính đặc biệt và bao gồm các phương thức get() và set() để xác nhận những hành vi của chúng. Chúng ta có thể khai báo thuộc tính chỉ mục bên trong của lớp bằng cách sử dụng cú pháp như sau:

<kiểu dữ liệu> this [<kiểu dữ liệu> <đối mục>] { get; set; }

Kiểu trả về được quyết định bởi kiểu của đối tượng được trả về bởi bộ chỉ mục, trong khi đó kiểu của đối mục được xác định bởi kiểu của đối mục dùng để làm chỉ số vào trong tập hợp chứa đối tượng đích. Mặc dù kiểu của chỉ mục thường dùng là các kiểu nguyên, chúng ta cũng có thể dùng chỉ mục cho tập hợp bằng các kiểu dữ liệu khác, như kiểu chuỗi. Chúng ta cũng có thể cung cấp bộ chỉ mục với nhiều tham số để tạo ra mảng đa chiều. Từ khóa this tham chiếu đến đối tượng nơi mà chỉ mục xuất hiện. Như một thuộc tính bình thường, chúng ta cũng có thể định nghĩa phương thức get() và set()

Một phần của tài liệu Xây dựng chương trình hỗ trợ thiết kế cơ sở dữ liệu (Trang 52)