Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý Giáo trình lập trình quản lý
Trang 1Phân công:
MỤC LỤC
I Giới Thiệu 2
1 Giới thiệu về namespace System.xml (introduction to namespace System.xml) 2
2 Đọc và Ghi XML (Read and write Streamed XML) 4
2.1 Sử dụng lớp XmlTexReader 4
2.2 Các phương thức Read 6
2.3 Lấy thuộc tính của dữ liệu: 7
2.4 Sử dụng lớp XmlValidatingReader 8
2.5 Sử dụng Schema property 9
2.6 Sử dụng lớp XmlTextWriter 9
II Hướng dẫn làm demo Chương trình kết nối C d ng ile hình 11
Bước 1: Tạo project mới có tên là DemoKetNoiSQL 11
Bước 2: Tao form với các control như hình bên dưới 11
Bước 3: Tạo file xml trong thư mục debug của chương trình 12
Bước 4: Thêm class DataProvide vào chương như hình bên dưới: 13
Bước 5:Tạo thêm class SQLInformation 16
Bước 6: Ta viết các hàm sự kiện cho form 17
Bước 7: Vào SQL tạo một cơ sở dữ liệu tên là QLBH vậy là chúng ta có thể kết nối thành công 20 III Câu hỏi 20
1 Câu hỏi Thực hành: 20
2 Câu hỏi lý thuyết: 20
3 Câu hỏi trắc nghiệm 21
Trang 2I Giới Thiệu
XML (eXtensible Markup Langue) đóng một vai trò quan trọng trong NET Không chỉ
vì NET cho phép bạn sử dụng XML trong các ứng dụng của bạn, mà bản thân nó cũng sử dụng XML cho những file cấu hình và tài liệu mã nguồn, như SOAP, các dịch vụ web và Ado.net Do
đó tìm hiểu về các xử lý XML trong Net với ngôn ngữ C# là một điều nên làm Bài viết này
1 Giới thiệu về namespace System.xml (introduction to namespace System.xml)
- namespace System.xml trong NET cung cấp một số lớp hỗ trợ cho việc xử lý XML Dưới đây là những lớp đọc và ghi XML
Tên lớp Giải thích
XmlReader
Một lớp đọc trừu tượng nhanh và non-cached dữ liệu XML
XmlReader được thiết kế giống như bộ phân tách SAX
Trang 3- Một vài lớp hữu ích khác trong XML:
XmlDataDocument
Mở rộng của XmlDocument Đây là một tài liệu có thể được tải
từ dữ liệu XML hoặc từ dữ liệu trong một ADO.NET DataSet Cho phép hòa trộn XML và dữ liệu quan hệ trong cùng một view
XmlResolver
Một lớp trừu tượng dùng giải quyết các tài nguyên XML ngoài như DTD và tham chiếu sơ đồ Cũng dùng để xử lí các thành phần <xsl:include> và <xsl:import>
Trang 42 Đọc và Ghi XML (Read and write Streamed XML)
- Cả 2 lớp XmlReader và XmlWriter đều là những lớp
trừu tượng Hình dưới đây minh họa các lớp kế thừa từ 2
lớp này:
+ XmlTextReader và XmlTextWriter làm việc chung trên
các đối tượng stream hoặc các đối tượng
TextReader/TextWriter trong namespace System.IO
+ XmlNodeReader sử dụng XmlNode cho một nguồn
thay cho một stream XmlValidatingReader thêm DTD
với sơ đồ tích hợp và tất nhiên là cả dữ liệu hợp lệ
2.1 Sử dụng lớp XmlTexReader
- XmlTexReader rất giống SAX Một trong những khác biệt lớn nhất: SAX là một mô hình kiểu push, còn XmlTextReader là một mô hình pull, ở đó dữ liệu được kéo vào ứng dụng yêu cầu nó Nó tạo ra một mô hình lập trình dễ dàng và trực quan hơn Một lợi ích khác của mô hình pull là có thể lựa chọn dữ liệu để gởi đến ứng dụng: nếu bạn không muốn tất cả các dữ liệu,
vì không cần xử lý tất cả chúng Còn trong mô hình push, tất cả dữ liệu XML cần phải được xử
lý bởi ứng dụng, mặc cho nó có muốn hay không
- Để sử dụng lớp này bạn cần khai báo :
using System.Xml;
- Bây giờ hãy mở visual studio của bạn lên:
+ Kéo vào một ListBox và một Button như hình bên;
+ Sau đó viết sự kiện cho button Load XML như sau:
Trang 5- Kết quả khi chạy chương trình trên và click vào button LoadXML như hình bên dưới
- XmlTextReader này sử dụng khá đơn giản
+ Trước tiên chúng ta tạo ra một đối tượng string chứa dường dẫn tới file xml Sau đó tạo một đối tượng XmlTextReader mới với tham số là đường dẫn tới file xml
+ Khi chương trình chạy đến vòng lặp while, phương thức Read sẽ được di chuyển sang mục tiêu đầu tiên trong tài liệu Nó tiêu biểu cho các mục khai báo XML
Trang 6Trong ví dụ này, chúng ta duyệt qua từng mục và so sánh xtr.NodeType với bộ
XmlNodeType, và thêm các mục được tìm thấy vào listbox
2.2 Các phương thức Read
- Có một vài cách di chuyển trong tài liệu Như bạn đã thấy trong ví dụ trên, Read() có thể di chuyển sang mục tiếp theo Chúng ta có thể xem nêu mục đó có giá trị (HasValue()) , hoặc nếu mục đó có thuộc tính (HasAttributes()) Chúng ta cũng có thể dùng phương thức ReadStartElement(), để kiểm tra xem nếu mục hiện tại là thành phần khởi đầu, và chuyển sang mục tiếp theo Nếu không phải là mục khởi đầu một ngoại lệ XmlException sẽ được phát ra Việc gọi phương thức này giống như gọi phương thức IsStartElement(), bởi một Read()
- Các phương thức ReadString() và ReadChars() đều đọc dữ liệu văn bản từ một thành tố ReadString() tra về một chuỗi dữ liệu, trong khi ReadChars() trả về một mảng
dữ liệu kiểu char
- ReadElementString() cũng giống như ReadString(), ngoại trừ việc bạn không phải truyền tên của một thành tố Nếu nội dung của mục tiếp theo không phải là một start tag, hoặc nếu tham số Name không không phải là Name của mục hiện hành, thì một ngoại lệ sẽ được phát ra
- Dưới đây là ví dụ chỉ ra cách sử dụng ReadElementString(), lưu ý khai báo:
1 using System.IO;
2 private void btnLoadXML_Click(object sender, EventArgs e)
3 {
4 string fileName = “Book.xml”;
5 FileStream fs = new FileStream(fileName, FileMode.Open);
6 XmlTextReader xtr = new XmlTextReader(fs);
Trang 7Element của named title, mệnh đề else phát ra một phương thức Read() để di chuyển sang mục tiếp theo Khi chúng ta tìm thấy một mục thỏa điều kiện, chúng ta trả kết quả của ReadElementString() cho listbox Nó cho phép các tựa sách được liệt kê trong listbox Chú ý rằng chúng ta không tạo ra một lời gọi Read() sau khi một ReadElementString() thực hiện thành công Bởi vì ReadElementString() cũng sẽ di chuyển sang mục tiếp theo
- Nếu bạn bỏ && tr.Name==”title” trong mệnh đề if, bạn sẽ nhận được ngoại lệ XmlException Nếu nhìn vào file dữ liệu, bạn sẽ thấy thành tố đầu tiên mà
MoveToContent() tìm ra là <bookstore> Tất nhiên nó vì nó không chứa một kiểu text chuẩn, nên ReadElementString() phát ra một ngoại lệ XmlException
2.3 Lấy thuộc tính của dữ liệu:
- Khi bạn chạy các ví dụ trên, bạn nhận ra rằng khi các mục được đọc, bạn không thấy bất kì thuộc tính nào cả Đó là vì các thuộc tính không nằm trong tài liệu Khi đang đứng trên một mục, bạn có thể kiểm tra các thuộc
tính và có thể lấy giá trị của bất kì giá trị thuộc tính
nào
- Thuộc tính HasAttributes sẽ trả về giá trị true nếu có bất kì thuộc tính nào còn không sẽ trả về
false Thuộc tính AttributeCount sẽ cho bạn biết có
bao nhiêu thuộc tính, và phương thức GetAttribute()
sẽ trả về một thuộc tính thông qua tên hoặc chỉ mục
Nếu bạn muốn lặp qua các thuộc tính bạn có thể
dùng các phương thức MoveToFirstAttribute() và MoveToNextAttribute()
- Dưới đây là một ví dụ về việc lặp qua các thuộc tính
1.string fileName = “Book.xml”;
Trang 82.FileStream fs = new FileStream(fileName, FileMode.Open);
3.XmlTextReader xtr = new XmlTextReader(fs);
4.while (xtr.Read()) 5.{
6.if (xtr.NodeType == XmlNodeType.Element) 7.{
8.for (int i = 0; i < xtr.AttributeCount; i++) 9.{
2.4 Sử dụng lớp XmlValidatingReader
- Nếu bạn muốn xác nhận một tài liệu XML, bạn sẽ cần phải sử dụng lớp
XmlValidatingReader Nó chứac các khả năng giống như XmlTextReader (Cả hai đều xuất phát
từ XmlReader) nhưng XmlValidatingReader có thêm thuộc tính ValidationType, thuộc tính Schemas và SchemaType
- Nếu bạn gán thuộc tính ValidationType giá trị xác nhận mà bạn muốn Giá trị hợp lệ của thuộc tính này được liệt kê trong bảng sau:
Nếu một không gian tên với tiếp đầu ngữ MSXML x-schema được tìm thấy, nó sẽ load và xử lí sơ đồ XDR và trả về các thuộc tính mặc định đã
Trang 9được định nghĩa
DTD Phù hợp theo chuẩn DTD
Schema Phù hợp theo sơ đồ XSD
XDR Phù hợp theo sơ đồ XDR
None Không giá trị hợp lệ nào được thực thi
- Khi một thuộc tính trong này được chọn, Một ValidationEventHandler cần phải được gán Đây
là một sự kiện được tạo ra do các lỗi Bạn có thể tác động lại lỗi theo các mà bạn cho là phù hợp
2.5 Sử dụng Schema property
Schemas property của XmlValidatingReader chứa một XmlSchemaCollection, có thể tìm thấy trong không gian tên System.Xml.Schema Tập hợp này tổ chức load lại loaded XSD và XDR schemas Nó cực nhanh đặc biệc là khi bạn cần kiểm tra sự hợp lệ của nhiều tài liệu khác nhau, vì sơ đồ sẽ không được load mỗi khi kiểm tra Các bước sử dụng thuộc tính này như sau, bạn tạo một đối tượng XmlSchemaCollection Phương thức Add(), nằm trong một XmlSchemaCollection, có bốn quá tải Bạn có thể truyền nó cho một đối tượng xuất phát từ XmlSchema, một đối tượng xuất phát từ
XmlSchemaCollection, một chuỗi không gian tên với chuỗi URI của file sơ đồ và một đối tượng xuất phát từ XmlReader chứa trong sơ đồ
2.6 Sử dụng lớp XmlTextWriter
- Lớp XmlTextWriter cho phép bạn xuất XML thành một chuỗi, một file hoặc một đối tượng a TextWriter Giống như XmlTextReader, nó là một kiểu forward-only, non-cached XmlTextWriter có thể cấu hình cao, cho phép bạn chỉ rõ những thứ như cho phép thục đầu dòng, số thục đầu dòng, kí tự chỉ dẫn nào được dùng trong các giá trị thuộc tính cho phép namespace hỗ trợ
- Hãy xem ví dụ sau, để biết cách sử dụng lớp XmlTextWriter
1 privatevoid btnGhiXML_Click(object sender, EventArgs e)
2 {
3 SaveFileDialog sfd = new SaveFileDialog();
4 sfd.Filter = "XML file(*.xml)|*.xml";
5 sfd.RestoreDirectory = true;\
Trang 1013 xtw.WriteAttributeString("QuocTich", "Viet Nam");
14 xtw.WriteElementString("HoTen", txtHoTen.Text);
15 xtw.WriteElementString("QueQuan", txtQueQuan.Text);
16 xtw.WriteElementString("NgaySinh", txtNgaySinh.Text);
giao diện như sau:
Khi nhấn button ghi ra file XML
thì hộp thoại saveFileDialog sẽ hiện ra
để bạn chọn đường dẫn lưu file Bạn
điền tên file rồi sau đó chọn save thì file
sẽ lưu lại với đuôi mở rộng là xml với
tên mà bạn đã đặt cho nó
Sau đó bạn click chuột phải vào
file xml vừa được tạo ra chọn Edit thì sẽ
thấy nội dung mà chương trình đã ghi ra
- Các thành phần được điều khiển bằng việc theo dõi khi nào bạn bắt đầu và kết thúc thao tác viết các thành phần các thuộc tính Bạn có thể bắt gặp chúng khi chúng ta thêm vào tên của thành phần con cho các thành phần lớn Chú ý việc các lời gọi phương thức WriteStartElement()
và WriteEndElement() được tổ chức như thế nào và các tổ chức các sản phẩm các bộ thành phần trong file xuất
- Các phương thức WriteElementString() và WriteAttributeString(), có một vài phương thức ghi đặc biệc WriteCData() sẽ xuất ra một đoạn CData (<!CDATA[ ]]>), việc xuất ra các text cần một tham số WriteComment() xuất ra một ghi chú theo định dạng XML WriteChars() xuất ghi chi của của một chuỗi các kí tự Điều này cũng tương tự phương thức ReadChars() mà
Trang 11chúng ta đã biết; chúng đều sử dụng cùng các tham số WriteChars() cần một vùng đệm (một mảng kí tự) Vị trí bắt đầu đẻ ghi (một số integer) số các kí tự sẽ ghi (một số integer)
- Thao tác đọc và ghi XML dùng các lớp xuất phát từ XmlReader và XmlWriter đơn giản
và mềm dẻo đến hơn chúng ta tưởng tượng rất nhiều
II Hướng dẫn làm demo Chương trình kết nối C d ng ile hình XML
Bước 1: Tạo project mới có tên là DemoKetNoiSQL Bước 2: Tao form với các control như hình bên dưới
Combobox Name: cbserver
na
Textbox Name: txtUser,txtPass
Listbox Name:
listBox1 Các button chức năng
Trang 12Bước 3: Tạo file xml trong thư mục debug của chương trình
Tạo file notpad++ trong đó ghi các dòng sau:
Trang 13Bước 4: Thêm class DataProvide vào chương như hình bên dưới:
Trong class này, đầu tiên tạo là lớp DataProvide sẽ kết thừa lớp DataTable:
1 classDataProvide : DataTable Trong lớp DataProvide có các thuộc tính như:
1 publicstaticstring m_ConnectString;
2 privatestaticSqlConnection m_Connection;
3 privateSqlCommand m_Command;
4 privateSqlDataAdapter m_DataAdapter;
Tiếp theo, tạo các hàm lấy dữ liệu cho thuộc tính:
1 publicstaticSqlConnection Connection
2 { get { return m_Connection; } }
3 publicSqlCommand SqlCmd
4 {
5 get { return m_Command; }
Trang 14Tiếp theo trong class này tạo thêm các hàm mở, đóng kết nối,…
1 publicbool OpenConnection()
2 {
3 try
4 {
5 if (m_Connection == null)
7 if (m_Connection.State == ConnectionState.Closed)
Trang 15Sau cùng trong class này tạo 2 hàm đó là hàm Load() và hàm DocFileCauHinh()
1 publicvoid Load(SqlCommand cmd)
2 {
3 m_Command = cmd;
4 try
5 {
6 this.Clear(); 7 m_Command.Connection = m_Connection; 8 m_DataAdapter = newSqlDataAdapter(); 9 m_DataAdapter.SelectCommand = m_Command; 10 m_DataAdapter.Fill(this); 11 }
12 catch (Exception e) 13 {
14 MessageBox.Show(e.Message); 15 }
16 } 17 publicstaticvoid DocFileCauHinh(string patch) 18 {
19 XmlTextReader reader = newXmlTextReader(patch); 20 reader.MoveToElement(); 21 while (reader.Read()) 22 {
23 if (reader.NodeType == XmlNodeType.Element && reader.Name == "cauhinh") 24 {
25 while (reader.Read()) 26 {
27 if (reader.NodeType == XmlNodeType.Element && reader.Name == "connectStr") 28 {
29 30 DataProvide.m_ConnectString = reader.ReadString(); 31 break; 32 }
33 }
34 }
35 }
Trang 16Bước 5:Tạo thêm class SQLInformation
Trong class SQLInformation này ta code như sau:
1 publicstaticstring m_SQLServer;
2 publicstaticstring m_Username;
3 publicstaticstring m_Password;
4 publicArrayList GetSQLServersDatabases()
5 {
6 ArrayList data = newArrayList();
7 SqlConnection con = newSqlConnection("server=" + m_SQLServer +
";uid=" + m_Username + ";pwd=" + m_Password);
Trang 1727 s = patch.Split(c);
28 string ten = "";
29 ten = s[s.Length - 1];
30 string patch1 = "";
31 patch1 = patch.Substring(0, patch.Length - 4);
32 SqlConnection con = newSqlConnection(@"Data Source=" + m_SQLServer + "; Initial Catalog = master; User=" + m_Username +
Bước 6: Ta viết các hàm sự kiện cho form
Để viết các hàm cho sự kiện click đầu tiên ta viết thêm các hàm hỗ trợ khác code như sau:
1 SQLInformation sql = newSQLInformation();
2 DataProvide data = newDataProvide();
3 OpenFileDialog open = newOpenFileDialog();
4 privatebool ktraHople()
Trang 1831 SQLInformation.m_Username = txtUser.Text;
32 SQLInformation.m_Password = txtPass.Text;
33 SQLInformation.m_SQLServer = cbServer.SelectedItem.ToString();
34 ArrayList data = sql.GetSQLServersDatabases();
35 for (int i = 0; i < data.Count; i++)
1 privatevoid Form1_Load(object sender, EventArgs e)
Trang 19Kế đến, nhấn đúp vào nút Truy cập để viết code cho sự kiện Click của nút Truy cập
1 privatevoid btn_Load_Click(object sender, EventArgs e)
2 {
3 if (data.OpenConnection())
4 {
5 MessageBox.Show("Truy cập thành công", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Information);
11 MessageBox.Show("Truy cập thất bại", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error);
11 DialogResult dgResult = open.ShowDialog();
12 if (dgResult == DialogResult.OK)
1 privatevoid btn_Xoa_Click(object sender, EventArgs e)
Trang 20=>Vậy là chương trình chúng ta đã hoàn thành sau đây là một số câu hỏi nhỏ dành cho các bạn
III Câu hỏi
1 Câu hỏi Thực hành:
Dựa vào word và video hướng dẫn các bạn hãy viết chương trình kết nối CSDL dung file cấu hình XML(bài giải trong thư mục DemoKetNoiSQL của nhóm)
2 Câu hỏi lý thuyết:
A XML là gì? Lợi ích của sử dụng XML trong ngôn ngữ C#?
Trả lời: XML (eXtensible Markup Langue) đóng một vai trò quan trọng trong NET Không chỉ vì NET cho phép bạn sử dụng XML trong các ứng dụng của bạn, mà bản thân nó cũng sử dụng XML cho những file cấu hình
và tài liệu mã nguồn, như SOAP, các dịch vụ web và Ado.net Do đó tìm hiểu về các xử lý XML trong Net với ngôn ngữ C# là một điều nên làm
C Nêu các tên lớp đọc và ghi file XML và giải thích các tên lớp đó Trả lời:
Tên lớp Giải thích
XmlReader
Một lớp đọc trừu tượng nhanh và non-cached dữ liệu XML
XmlReader được thiết kế giống như bộ phân tách SAX
XmlWriter Một lớp viết trừu tượng nhanh và non-cached dữ liệu XML trong
Trang 21một dòng hoặc định dạng file
XmlTexReader
Mở rộng của XmlReader Cung cấp chuỗi truy cập nhanh dữ liệu XML
XmlTexWriter Mở rộng của XmlWriter Phát nhanh các dòng XML
D Bạn hãy viết một chuỗi kết nối trong file cấu hình để kết nối C# với CSDL Trả lời: <connectStr>Data Source=ADMIN\SQLEXPRESS; Initial Catalog =QLBH; Integrated Security=SSPI;</connectStr>
E Hãy nêu cách sử dụng Schema property?
Trả lời: Schemas property của XmlValidatingReader chứa một XmlSchemaCollection, có thể tìm thấy trong không gian tên System.Xml.Schema Tập hợp này tổ chức load lại loaded XSD và XDR schemas Nó cực nhanh đặc biệc là khi bạn cần kiểm tra sự hợp lệ của nhiều tài liệu khác nhau, vì sơ đồ sẽ không được load mỗi khi kiểm tra Các bước sử dụng thuộc tính này như sau, bạn tạo một đối tượng XmlSchemaCollection Phương thức Add(), nằm trong một
XmlSchemaCollection, có bốn quá tải Bạn có thể truyền nó cho một đối tượng xuất phát từ XmlSchema, một đối tượng xuất phát từ
XmlSchemaCollection, một chuỗi không gian tên với chuỗi URI của file
sơ đồ và một đối tượng xuất phát từ XmlReader chứa trong sơ đồ
F Để sử dụng XmlTexReader cần khai báo thư viện nào?
Trả lời: using System.Xml;
3 Câu hỏi trắc nghiệm
1 Một lớp viết trừu tượng nhanh và non-cached dữ liệu XML trong một dòng hoặc định dạng file
Trang 223 Thuộc tính HasAttributes sẽ????
A Trả về giá trị tr e nế ó b t kì th ộ tính nào òn không sẽ trả về false
B Cho bạn biết có bao nhiêu thuộc tính
C Trả về một thuộc tính thông qua tên hoặc chỉ mục
4 Nếu bạn muốn xác nhận một tài liệu XML, bạn sẽ cần phải sử dụng lớp
XmlValidatingReader Nó chứa các khả năng giống như XmlTextReader (Cả hai đều xuất phát từ XmlReader) nhưng XmlValidatingReader có thêm thuộc
Trang 23MỤC LỤC
I Giới thiệu 23
II Phân công nhóm 24
I Giới thiệu thư viện thực thi 25
II Qui trình tạo thư viện thực thi 26
có thể tìm ra ai đã làm điều đó Vì lý do trên, nhóm chúng em đã chọn đề tài “Thư viện thực thi trong hương trình q ản lý”
Trên cơ sở tự nghiên cứu, phát triển và sự giúp đỡ của thầy Huỳnh Lý Thanh Nhàn đã đóng góp những ý kiến cho việc nghiên cứu của chúng em cũng như trong các thức lập trình Bài báo được viết với mục đích giúp cho các bạn đọc biết về công dụng, hiểu quả của thư viện thực thi cũng như có thể thiết kế được một phần mềm hiệu quả và sáng tạo với những thư viện thực thi của chính mình
Trang 24II Phân công nhóm
Trang 25PHẦN II: NỘI DUNG
1 Giới thiệ thư viện thực thi
Thư viện thực thi là một file giúp cho người dùng có thể quản lý được những đối tượng nào đã đăng nhập, đăng xuất ở thời điểm và thực hiện những chức năng nào trên cơ sở dữ liệu File thư viện thực thi có thể sử dụng nhiều loại file khác nhau để lưu trữ nhưng ở đây mình sử dùng file txt để lưu dữ liệu và truy xuất đơn giản hơn
Ví dụ: file thực thi text.txt
Cơ chế hoạt động của file thư viện thực thi như sau: Đầu tiên file sẽ lưu lại tên người dùng đang sử dụng chương trình với quyền tương ứng của họ, thời điểm đối tượng đăng nhập vào hệ thống và thực hiện trên CSDL nào Tiếp theo là đối tượng đã
sử dụng chức năng nào trong CSDL đó Cuối cùng là thời gian đăng xuất
Trang 262 Qui trình tạo thư viện thực thi
Bước 1: Tạo class thư viện với 2 phương thức ghi thông tin đăng nhập và ghi thông tin đăng xuất
Bước 2: Tạo phương thức GhiThongTinDangNhap() trong class thư viện Phương thức này có 5 đối số truyền vào và đều là kiểu string, phương thức này giúp lưu lại những thông tin của đối tượng đã đăng nhập vào hệ thống với quyền nào, thời điểm đăng nhập và thực hiện trên CSDL nào của hệ thống Các đối số truyền vào có thể thay đổi tùy vào từng hệ thống khác nhau
string them,string xoa,string luu, string inbang)
6 {
7 //luu file voi ten text va định dang la txt
Trang 279 //khai bien cho lop StreamWriter
12 {
20 sw.WriteLine("Thao tác trên bảng: " + bang);
21 }
23 {
25 sw.WriteLine("Thực hiện chức năng: " + them);
26 sw.WriteLine("Thực hiện chức năng: " + xoa);
27 sw.WriteLine("Thực hiện chức năng: " + luu);
28 sw.WriteLine("Thực hiện chức năng: " + inbang);
Trang 286 //lay ten nguoi dung tu lop DN_taikhoan va luu lai
10 sw.Close();
12 }
Bước 4: Tạo form thư viện để hiển thị file thực thi
Bước 5: Tạo các control trong form
Trong toolbox, ta kéo thả button và richtextbox vào form thư viện và đổi tên thành btn_mofile và rtb_thuvien, cụ thể như sau:
Trang 30Bước 8: Tạo 1 buton để khi click vào sẽ hiển thị form thư viện.
Và khi ckick vào sẽ hiển thị form thư viện ta đã tạo trước đó
Trang 325 tv.GhiThongTinDangNhap( null , "Thêm(Phòng)" , null , null , null );
6
Tương tự cho các thao tác xóa, sửa, in
PHẦN III: KẾT LUẬN Qua bài viết, nhóm chúng em hy vọng sẽ giúp bạn đọc phần nào hiểu được cách xây dựng được một thư viện thực thi
Cuối cùng, chân thành cảm ơn đến thầy Huỳnh Lý Thanh Nhàn đã tạo điều kiện, giúp đỡ nhóm trong quá trình nghiên cứu và phát triển đề tài Mặc dù chương trình vẫn chưa hoàn thiện như nhóm em mong muốn, nhóm chúng em mong đươc sự góp ý của thầy và các bạn để xây dựng chương trình tốt hơn
Xin chân thành cảm ơn !
Trang 33Mục Lục
I MÔ TẢ VÀ LỢI ÍCH CỦA ĐỀ TÀI. 0
II DANH SÁCH CÁC CHỨC NĂNG CHÍNH TRONG CHƯƠNG TRÌNH. 1
III KHAI BÁO NGƯỜI DÙNG SỬ DỤNG VÀ PHÂN QUYỀN 4
1 anh sá h người dùng và chứ năng được sử dụng tương ứng 4
2 Thiết kế bảng người dùng (CSDL). 5
3 Thực hiện phân quyền theo mô hình ba lớp. 5
IV HƯỚNG DẪN CÁC BƯỚC PHÂN QUYỀN CHI TIẾT 20
Bước 1:Thiết kế quan hệ NGUOIDUNG 20 Bước 2:Thiết kế FormMain 21 Bước 3:Thiết kế form đăng nhập 25 Bước 4:Xây dựng lớp người dùng DataLayer 28 Bước 5:Xây dựng lớp BusinessLayer 30 Bước 6: Viết code cho DangNhap.cs ( Lớp GUI) 32 Bước 7: Phân quyền cho FornMain.cs ( Lớp GUI) 32
Trang 34‒ Ở hầu hết các chương trình quản lý, để đảm bảo tính an toàn cho dữ liệu cũng như tránh tình trạng ai cũng sủ dụng được những chức năng mang quyền hạn cao, vấn đề đặt ra cho người lập trình là phải phân cấp tất cả các chức năng trong chương trình, với mỗi người dùng đăng nhập vào hệ thống thì
họ có những quyền hạn để sử dụng chương trình, với mỗi quyền hạn tương ứng với những chức năng cụ thể
‒ Với đề tài trên, nhóm tiến hành phân quyền trên chương trình quản lý nhân sự của một công ty (tự xây dựng) và tiến hành phân quyền người dùng trên chính phần mềm này
‒ Trong chương trình chúng ta sẽ có danh sách những người dùng sau đây :
+ Người dùng Admin (Giám Đốc)
+ Người dùng Nhân Viên Quản Lý
+ Người dùng Nhân Viên
‒ Với người dùng Admin (Giám Đốc) : người dùng này sẽ có toàn quyền, có nghĩa là Giám Đốc sẽ sử dụng được tất cả các chức năng trong chương chình quản lý nhân sự
‒ Với quyền là nhân viên quản lý thì người dùng này có quyền sử dủng các chức năng quản lý như : quản lý nhân viên, quàn lý phòng ban, quản lý lương của nhân viên, v.v
‒ Quyền nhân viên bình thường thì hầu như chỉ được sử dụng các chức năng cơ bản của hệ thống
‒ Công việc phân quyền người dùng được thực hiện trên ngôn ngữ lập trình cấp cao C# Với mỗi loại người dùng sau khi đăng nhập vào hệ thống sẽ lấy quyền người dùng dựa vào tên đăng nhập và cuối cùng là cho các tắt/bật các chức năng tương ứng với quyền người dùng
2 Mụ đí h ủa phân quyền người dùng
Việc phân quyền ngày nay không còn nhằm chỉ là phân công công việc Phân quyền ngày nay còn có nhiều mục đích Những mục đích của việc ủy quyền, tránh thoái thác trách nhiệm của những nhân sự trong công ty :
+ Phân rõ chức năng và nhiệm vụ của mỗi nhân viên
+ Xác lập quyền hạn, trách nhiệm với tửng đầu công việc
II DANH SÁCH CÁC CHỨC NĂNG CHÍNH TRONG CHƯƠNG TRÌNH
1 Hệ thống
1 Đăng nhập Cho phép người dùng sử dụng tài khoảng
của mình đăng nhập để giao tiếp với úng dụng
2 Đăng xuất Thoát khỏi tài khoảng của người dùng đang
sử dụng chương trình
3 Đổi mật khẩu Cho phép người dùng đổi mật khẩu của tài
Trang 35khoảng hiện tại đang đăng nhập vào hệ thống
4 Quản lý người dùng Cho phép nhà quản người dùng admin thực
hiện thêm xoá sửa thông tin người dùng
5 Sao lưu dữ liệu Sao lưu dữ liệu của cơ sở dữ liệu để tránh
trường hợp hệ thống bị sự cố làm mất dữ liệu của CSDL
6 Phục hồi dữ liệu Khôi phục lại dữ liệu dựa vào mẫu tin đã
dược sao lưu trước đó Phục hồi lại nguồn dữ liệu có trạng thái lúc được sao lưu
7 Thoát Thoát khỏi ứng dụng (tắt chương trình)
2 Danh mục
1 Danh mục Nhân viên Hiển thị form Nhân Viên cho phép nhà quản
trị thực hiện xoá, sửa thông tin nhân viên trong công ty hoặc thêm một nhân viên mới vào danh sách nhân viên của công ty
2 Danh mục Phòng ban Cho phép người dùng là nhà quản trị quản lý
danh mục các phòng ban trong công ty
3 Danh mục Chức vụ Cho phép người dùng là nhà quản trị quản lý
danh sách các chức vụ có trong công ty
4 Danh mục Chuyên
môn
Cho phép người dùng là nhà quản trị quản lý danh mục các chuyên môn của mỗi nhân viên trong công ty
5 Danh mục Trình độ Cho phép người dùng là nhà quản trị quản lý
danh mục trình độ trong công ty
6 Danh mục Hợp đồng Cho phép người dùng là nhà quản trị quản lý
danh mục các hợp đồng trong công ty
7 Danh mục Khen
thưởng Cho phép người dùng là nhà quản trị quản lý danh sách nhân viên được khen thưởng trong
công ty
8 Danh mục Kỹ luật Cho phép người dùng là nhà quản trị quản lý
danh mục các phòng ban trong công ty
9 Danh mục Bảo hiểm Cho phép người dùng là nhà quản trị quản lý
danh mục các bảo hiểm có trong công ty của mỗi nhân viên
10 Danh mục Nghỉ phép Cho phép người dùng là nhà quản trị quản lý
danh sách nhân viên đã nghỉ phép ban trong công ty
11 Danh mục Thân nhân Cho phép người dùng là nhà quản trị quản lý
danh mục các thân nhân của mỗi nhân viên trong công ty
12 Danh mục Dân tộc Cho phép người dùng là nhà quản trị quản lý
danh mục dân tộc trong công ty
Trang 3613 Danh mục Tôn giáo Cho phép người dùng là nhà quản trị quản lý
danh mục tôn giáo trong công ty
3 Nghiệp vụ
1 Quản lý Nhân Viên Quản lý thông tin nhân viên trong công ty
2 Chuyển phòng ban Giải quyết chuyển phòng ban cho các nhân
viên khi được thay đổi chức vụ
3 Quản lý Lương Cho phép người dùng đổi mật khẩu của tài
khoảng hiện tại đang đăng nhập vào hệ thống
4 Giải quyết ứng lương Cho phép nhà quản người dùng admin thực
hiện thêm xoá sửa thông tin người dùng
4 Tìm kiếm
1 Tìm kiếm Nhân Viên Cho phép tìm kiếm thông tin của tất cả nhân
viên có trong công ty
2 Tìm kiếm Thân nhân Thực hiện tìm kiếm thông tin thân nhân của
mỗi nhân viên thông qua mã của nhân viên
đó
3 Tìm kiếm Bảng Lương Cho phép tìm kiếm bảng lương tháng của
các nhân viên, bảng lương theo quý hoặc theo năm của các nhân viên, hay bảng lương
cá nhân của mỗi nhân viên
5 Báo cáo – Thống kê
1 Lập Bảng kỹ luật Cho phép xem, thêm, xoá, sửa hoặc in bảng
danh sách nhân viên bị kỹ luật
2 Lập Bảng nghỉ phép Thực hiện xem, thêm, xoá, sửa hoặc in bảng
danh sách nhân viên được giải quyết nghỉ phép
3 Lập Bảng danh sách
khen thưởng
Cho phép xem, thêm, xoá, sửa hoặc in bảng danh sách nhân viên được khen thưởng
4 Lập Bảng lương Thực hiện xem, thêm, xoá, sửa bảng lương
tháng của các nhân viên, bảng lương theo quý hoặc theo năm của các nhân viên, hay bảng lương cá nhân của mỗi nhân viên
Trang 37trình
III KHAI BÁO NGƯỜI DÙNG SỬ DỤNG VÀ PHÂN QUYỀN
1 anh sá h người dùng và chứ năng được sử dụng tương ứng
STT Tên người dùng Danh sách chứ năng được sử dụng
1 Giám đốc ( Admin) Sử dụng được tất cả các chức năng của chương
trình
2 Nhân viên quản lý Đăng nhập
Đăng xuấtĐổi mật khẩuThoát
Danh mục Nhân viênDanh mục Phòng banDanh mục Chức vụDanh mục Chuyên mônDanh mục Trình độDanh mục Hợp đồngDanh mục Khen thưởngDanh mục Danh mục Kỹ luật Danh mục Bảo hiểm
Danh mục Nghỉ phépDanh mục Thân nhânDanh mục Dân tộcDanh mục Tôn giáoQuản lý Nhân ViênChuyển phòng banQuản lý LươngGiải quyết ứng lươngTìm kiếm Nhân ViênTìm kiếm Thân nhân Tìm kiếm Bảng LươngLập Bảng kỹ luậtLập Bảng nghỉ phép Lập Bảng danh sách khen thưởngLập Bảng lương
Thông tin chương trìnhHướng dẫn sử dụng
Đăng xuấtĐổi mật khẩuThoát
Danh mục Nhân viênDanh mục Phòng banDanh mục Chức vụDanh mục Chuyên mônDanh mục Trình độ
Trang 38Danh mục Hợp đồngDanh mục Khen thưởngDanh mục Danh mục Kỹ luật Danh mục Bảo hiểm
Danh mục Nghỉ phépDanh mục Thân nhânDanh mục Dân tộcDanh mục Tôn giáo Thông tin chương trìnhHướng dẫn sử dụng
2 Thiết kế bảng người dùng (CSDL)
không quy định về chiều dài để tính bảo mật cao hơn
các số nguyên, được đánh
số từ 1 tới n (n là tổng số quyền có trong công ty)
người dùng đăng nhập hệ thống hiện tại có các quyền sau : Admin, nhân viên quản lý, nhân viên
Bảng người dùng trong mô hình quan hệ :
Hình 1
3 Thực hiện phân quyền theo mô hình ba lớp
a) Phân quyền chi tiết trên form chính (frmMain)
Trang 39‒ Với quyền Admin (Giám Đốc)
+ Danh sách các control của Ribon:
Trang 40Hình 2.1 : Admin – Hệ thống
Hình 2.2 : Admin – Danh Mục