LỜI CẢM ƠN
Đầu tiên, em xin dành lời cảm ơn thầy cô ở trường Đại học công nghệ
thông tin và truyền thông. Đặc biệt, là các thầy cô trong khoa hệ thống thông tin.
Những người đã chỉ lối, dẫn đường cho em trên hành trình đi tìm tri thức, những
người đã hướng dẫn, dạy bảo em tận tình trong quá trình học tại mái trường. Cùng
lời cảm ơn chân thành tới cô giáo TS. Nông Thị Hoa, người đã hướng dẫn và tạo
điều kiện để em hoàn thành đề tài đồ án này.
Do còn hạn chế về kinh nghiệm và kiến thức nên chương trình còn nhiều
thiếu sót cần được bổ xung.Vậy em mong muốn thầy cô và các bạn đóng góp ý
kiến giúp cho đề tài của em ngày càng được hoàn thiện hơn.
Một lần nữa em xin chân thành cảm ơn thầy cô và các bạn !
Thái Nguyên, tháng 06 năm 2016
Sinh viên
Hoàng Văn Mười
1
LỜI CAM ĐOAN
Tôi Hoàng Văn Mười xin cam đoan:
Đồ án tốt nghiệp là thành quả từ sự nghiên cứu hoàn toàn thực tế trên cơ
sở các số liệu thực tế và được thực hiện theo hướng dẫn của giáo viên hướng dẫn.
Đồ án được thực hiện hoàn toàn mới, là thành quả của riêng tôi, không
sao chép theo bất cứ đồ án tương tự nào.
Mọi sự tham khảo sử dụng trong đồ án đều được trích dẫn các nguồn tài
liệu trong báo cáo và danh mục tài liệu tham khảo.
Mọi sao chép không hợp lệ, vi phạm quy chế của nhà trường, tôi xin
hoàn toàn chịu trách nhiệm
Thái Nguyên, ngày 15 tháng 05 năm 2016
Sinh viên
Dễ dàng được khách hàng biết đến hơn so với cách quảng cáo trên các
trang web khách tại Việt Nam.
Chi phí giảm trong khi hiệu quả tăng cao.
Thái Nguyên, tháng 06 năm 2016
Sinh viên
Hoàng Văn Mười
CHƯƠNG I: CƠ SỞ LÝ THUYẾT
1.1. Lịch sử ngôn ngữ C#
3
Ngôn ngữ C# được phát triển bởi đội ngũ kỹ sư của Microsoft, trong đó
người dẫn đầu là Anders Hejlsberg và Scott Wiltamuth. Cả hai người này điều là
những người nổi tiếng, trong đó Anders Hejlsberg được biết đến là tác giả của
Turbo Pascal, một ngôn ngữ lập trình PC phổ biến. Và ông đứng đầu nhóm
thiết kế Borland Delphi, một trong những thành công đầu tiên của việc xây dựng
môi trường phát triển tích hợp (IDE) cho lập trình client/server.
1.2. Giới thiệu ngôn ngữ lập trình C#.net
Ngôn ngữ C# khá đơn giản, chỉ khoảng 80 từ khóa và hơn mười mấy kiểu
dữ liệu được xây dựng sẵn. Tuy nhiên, ngôn ngữ C# có ý nghĩa cao khi nó thực
thi những khái niệm lập trình hiện đại. C# bao gồm tất cả những hỗ trợ cho cấu
trúc, thành phần component, lập trình hướng đối tượng. Những tính chất đó hiện
diện trong một ngôn ngữ lập trình hiện đại. Và ngôn ngữ C# hội đủ những
điều kiện như vậy, hơn nữa nó được xây dựng trên nền tảng của hai ngôn
ngữ mạnh nhất là C++và Java.
C# được xây dựng và kiến trúc bởi Anders Hejlsberg, người đã viết nên
trình biên dịch Pascal và có nhiều đóng góp cho Delphi cũng như Java.
C# là một trong rất nhiều ngôn ngữ lập trình được hỗ trợ bởi .NET
Framework . C# do Microsoft đề ra là ngôn ngữ hướng đối tượng rất thuần nhất và
giao diện cho người sử dụng.
Nền tảng về ngôn ngữ C#
1.3. Lớp, đối tượng và kiểu
Bản chất của lập trình hướng đối tượng là tạo ra các kiểu mới. Một kiểu
biểu diễn một vật gì đó. Giống với các ngôn ngữ lập trình hướng đối tượng khác,
một kiểu trong C# cũng định nghĩa bằng từ khoá class(và được gọi là lớp) còn
thểhiện của lớp được gọi là đối tượng.
Xem Ví dụ1 ta thấy cách khai báo một lớp HelloWorld. Ta thấy ngay là
cách khai báo và nội dung của một lớp hoàn toàn giống với ngôn ngữ Java và C++,
chỉ có khác là cuối khai báo lớp không cần dấu “;”
5
1.3.1. Phương thức (Main)
Các hành vi của một lớp được gọi là các phương thức thành viên (gọi tắt là
phương thức) của lớp đó. Một phương thứclà một hàm(phương thức thành viên
còn gọi là hàm thành viên). Các phương thức định nghĩa những gì mà một lớp có
thể làm. Cách khai báo, nội dung và cách sửdụng các phương thức giống hoàn toàn
với Java và C++. Trong ví dụtrên có một phương thức đặc biệt là phương thức
Main()(như hàm main()trong C++) là phương thức bắt đầu của một ứng dụng C#,
có thể trảvề kiểu voidhay int. Mỗi một chương trình (assembly) có thể có nhiều
phương thức Main nhưng khi đó phải chỉ định phương thức Main() nào sẽ bắt đầu
chương trình.
b) Namespace
- .NET cung cấp một thư viện các class rất đồ sộ, trong đó Console là một
class nhỏ trong thư viện các class này.
- Mỗi class có một tên riêng, vì vậy người lập trình không thể nào nhớ hết
tên các class trong .NET. Để giải quyết vấn đề này là việc tạo ra một namespace,
namespace sẽ hạn chế phạm vi của một tên, làm cho tên này chỉ có ý nghĩa trong
+ Kiểu liệt kê (enumerations)
1.4.4. Toán tử
7
a) Toán tử toán học: + , - , * , / , %
b) Toán tử tăng / giảm: += , -= , *= , /= , %=
c) Toán tử tăng / giảm 1 đơn vị: ++ , --d) Toán tử gán: =
e) Toán tử quan hệ: == , != , > , >= , < ,
integer
64-bit signed-9,223,372,036,854,775,808:
9,223,372,036,854,775,807 (-263:263-1)
integer
8-bit
integer
signed
0:255 (0:28-1)
8
Ushort
System.UInt16
16-bit signed
0:65,535 (0:216-1)
integer
Uint
System.UInt32
32-bit signed
0:4,294,967,295 (0:232-1)
7
floating- point
64-bit doubleDouble
System.Double
precision
15/16
floating- point
±1.5 × 10-45 to ±
3.4 × 1038
±5.0 × 10-324 to
±1.7 × 10308
Quá trình chuyểu đổi kiểu (Type Conversions)
Bảng sau hiển thị cách chuyển đổi kiểu implicit được hỗ trợ trong C#.
From
To
Sbyte
short, int, long, float, double, decimal
10
* Bảng trình bày các ký tự đặc biệt
Kiểu C#
Số
Kiểu
byte
.NET
Mô tả
Byte
1
Byte
Số nguyên dương không dấu từ 0 đến 255
Char
2
Char
Uint16
Số nguyên dương không dấu từ 0 đến 65535
int
4
Int32
Số nguyên có dấu từ -2.147.483.647 đến
2.147.483.647
uint
4
Uint32
Số
nguyên
không
dấu
từ
0
Kiểu số nguyên có dấu có giá trị trong
khoảng
-9.223.370.036.854.775.808
đến
9.223.372.036.854.775.807
ulong
8
Uint46
Số
nguyên
0xfffffffffffffff
11
không
dấu
từ
0
biến thành viên để lưu trữ dữ liệu cho các phương thức(hàm) để tác động lên biến
12
thành viên. Mỗi đối tượng thuộc về một lớp đối tượng nào đó. Các đối tượng có
cùng lớp thì có cùng các biến thành viên và phương thức.
13
Lớp
Kiểu dữ liệu trong C# được định nghĩa là một lớp (class).
Người lập trình tạo ra các kiểu dữ liệu mới bằng cách xây dựng các lớp đối
tượng. Một lớp có thể chứa sự kết nối của các dữ liệu (fields), các hoạt động được
thực hiện trên dữ liệu (method) và sự truy nhập tới dữ liệu (properties)
Cú pháp:
[Thuộc tính] [Bổ từ truy xuất] class <Định danh lớp> [: Lớp cơ sở]
{
thân lớp
}
Đối tượng
Để khai báo một đối tượng của lớp ta dùng từ khóa new và khai báo nó theo
cấu trúc sau:
<tên lớp> <tên đối tượng> = new <tên lớp> ([các giá trị khởi tạo nếu
có])
Để truy nhập đến một phương thức ta thông qua tên biến đối tượng và toán
tử chấm “.”:
<tên đối tượng>. <tên phương thức> ([danh sách các đối số nếu có])
Đối với các lớp lồng nhau, để truy cập đến những thuộc tính và phương
thức của class lồng thì khi khai báo cần chỉ ra lớp chứa đựng nó. Muốn sử dụng
toàn cục mà không cần tạo ra bất cứ một thể hiện nào của lớp cả. Toàn cục ở đây
hiểu theo nghĩa là toàn cục trong lớp.
Gọi một phương thức static:
Về bản chất thành phần static là một thành phần của lớp không thể hiện trả
về vì vậy không có một tham chiếu this. Một hàm static không thể trực tiếp truy
xuất đến các thành viên không static mà phải thông qua một đối tượng thể hiện của
lớp đó như sau:
Tenlop.tenhamtinh ([danh sach tham so neu co]:
15
Ví dụ diem.hien() là lời gọi đến phương thúc tĩnh có tên là hien() của lớp
diem
Sử dụng các phương thức khởi tạo static:
Trong khai báo một static constructor không có từ khóa truy cập. Phương
thức tĩnh chỉ có thể truy nhập đến thành phần dữ liệu cũng có tính chất tĩnh mà
thôi. Nếu trong khai báo lớp có một hàm static constructor thì hàm này sẽ được gọi
trước khi bất cứ một thể hiện nào của lớp được tạo ra.
Việc sử dụng hàm khởi tạo static cần được cân nhắc kỹ lưỡng vì chúng ta
không thể theo dõi nó được như trong C++ vì thế thường gây ra những hậu quả
khó lường.
- Khởi tạo private constructor:
Việc sử dụng một hàm khởi tạo private trong lớp sẽ có tác dụng ngăn chặn
tạo ra bất kì một đối tượng nào của lớp. Hàm khởi tạo private này mặc nhiên,
không có tham số gì cả và trống rỗng. Khi đó trong lớp sẽ không có hàm khởi tạo
public nên sẽ không khởi tạo được bất cứ một thành viên thể hiện nào.
Ví dụ không muốn tạo ra bất kì một đối tượng nào của lớp diem thì trong
khi định nghĩa lớp ta sẽ định nghĩa thêm một hàm khởi tạo tầm vực là private như
sau:
private diem ()
+ Khác nhau các tham số: khác nhau về số lượng tham số
+ Khác nhau về kiểu dữ liệu của tham số, kiểu dữ liệu trả về của phương
thức.
1.7. Cấu trúc chương trình C#
C# là một ngôn ngữ phân biệt chữ hoa và chữ thường.
Dấu ; được dùng để kết thúc câu lệnh.
Tất cả các khai báo và câu lệnh thực hiện đều được đặt trong một file với
phần mở rộng là cs.
1.7.1 Cấu trúc điều khiển
Câu lệnh điều kiện if :
Câu lệnh phân nhánh if...else dựa trên một điều kiện. Điều kiện là một biểu
thức sẽ được kiểm tra giá trị ngay khi bắt đầu gặp câu lệnh đó. Nếu điều kiện được
kiểm tra là đúng, thì câu lệnh hay một khối các câu lệnh bên trong thân của câu
lệnh if được thực hiện.
Trong câu điều kiện if...else thì else là phần tùy chọn. Các câu lệnh bên
trong thân của else chỉ được thực hiện khi điều kiện của if là sai. Do vậy khi câu
18
lệnh đầy đủ if...else được dùng thì chỉ có một trong hai if hoặc else được thực hiện
19
Cú pháp như sau:
If(condition)
Statement(s)
[else
Startemant(s)]
Câu lệnh switch:
DoSomeWork();
condition = CheckCondition(); // cho rằng CheckCondition() trả về kiểu
bool
}
Lệnh do . . . while (The do…while Loop)
bool condition;
do
{
// Vòng lặp này sẽ thực hiện ít nhất một lần thậm chí nếu câu điều kiện sai
MustBeCalledAtLeastOnce();
condition = CheckCondition();
} while (condition);
Vòng lặp foreach (The foreach Loop)
Cho phép bạn rảo qua tất cả các phần tử bản dãy hoặc các tập hợp khác, và
tuần tự xem xét từng phần tử một
Ngoài ra C# còn sử dụng các câu lệnh điều khiển như: goto, break,
return,… Chúng có tác dụng nhảy ra khỏi hàm hay thoát khỏi các vòng lặp.
1.8. Mảng – Chuỗi – Ngoại lệ
1.8.1 Array (mảng)
* Mảng 1 chiều
a) Định nghĩa
- Mảng là một tập hợp có thứ tự của những đối tượng (objects), tất cả các
21
đối tượng này có cùng một kiểu dữ liệu.
- Mảng trong ngôn ngữ C# sử dụng những phương thức và các thuộc tính.
Thể hiện của mảng trong C# có thể truy cập những phương thức và các thuộc tính
của System.Array.
b) Khai báo mảng:
nhiệm vụ riêng biệt và độc lập với các thành phần khác.
Các thành phần trong MVC:
Controller: Giữ nhiệm vụ nhận điều hướng các yêu cầu từ người dùng xử
lý các chức năng cụ thể của yêu cầu.
Model: Đây là thành phần chứa tất cả đối tượng của ứng dụng.
View: Hiển thị nội dung, tương tác với người dùng, chứa toàn bộ các
control giao diện
1.9.2 Entity Framework (EF)
Entity Framework là một bộ ánh xạ đối tượng – quan hệ cho phép người lập
trình .NET làm việc với dữ liệu quan hệ qua các đối tượng (object) nó giúp lập
trình viên không cần viết câu truy vấn cho (hầu hết) những gì liên quan đến xử lý
dữ liệu.
Các thành phần trong Entity Framework:
- Code là mã lệnh tạo thành các lớp đối tượng dữ liệu cho phép thao tác với
dữ liệu.
- Model là sơ đồ gồm các hộp mô tả các thực thể và các đường nối kết mô
tả các quan hệ.
- Database là cơ sở dữ liệu (có thể là SQL Server, Compact SQL Server,
Local database, MySQL, Oracle,…)
Các hình thức sử dụng EF
23
- Database first: là phương pháp chỉ nên dùng khi ta đã có sẵn CSDL
(không phải tạo), EF Wizard sẽ tạo Model và Code cho ta.
- Models first: nên dùng khi ta bắt đầu thiết kế CSDL từ đầu (từ chưa có gì).
Ta sẽ thiết kế mô hình CSDL (Model) EF sẽ tự tạo code cho ta, sau đó nhờ EF
Wizard tạo CSDL.
- Code first: nên dùng khi đã có mô hình CSDL, ta sẽ chỉ viết code từ đó tạo