Tin học cơ bản

Học tập, chia sẻ kiến thức cơ bản về tin học.

[Tự học SQL] Học SQL cơ bản và nâng cao

SQL (là viết tắt của Structured Query Language – Ngôn ngữ truy vấn mang tính cấu trúc) được sử dụng để thực hiện các hoạt động trên các bản ghi được ghi lại trong Database (Cơ sở dữ liệu), chẳng hạn như cập nhật các bản ghi, xóa các bản ghi, tạo và sửa đổi các bảng, …

SQL chỉ là một ngôn ngữ truy vấn, chứ không phải là một Cơ sở dữ liệu. Để thực hiện các truy vấn SQL, bạn cần cài đặt bất cứ Cơ sở dữ liệu nào, như Oracle, MySQL, MongoDB, PostGres SQL, SQL Server, DB2, …

Dưới đây là danh sách các bài hướng dẫn học SQL cơ bản và nâng cao:
Cơ bản về SQL
SQL là gì
Các khái niệm RDBMS
Database là gì
Cú pháp SQL cơ bản
Kiểu dữ liệu
Toán tử
Biểu thức (Expression)
SQL Database
Lệnh Create Database
Lệnh Drop Database
Lệnh Select Database
Lệnh Rename Database
SQL Table
Lệnh Create Table
Lệnh Drop Table
Lệnh Delete Table
Lệnh Rename Table
Lệnh Truncate Table
Lệnh ALter Table
Sao chép bảng
Bảng tạm (Temp Table)

test

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

[Tự học xử lý ảnh] CÁC PHƯƠNG PHÁP PHÁT HIỆN BIÊN






4.1. Khái quát về biên các kỹ thuật biên
4.1.1 Khái quát ̀ biên
Biên vấn đề quan trọng trong trích chọn đặc điểm nhằm tiến tới hiểu ảnh. Cho đến nay chưa định nghĩa chính xác về biên, trong mỗi ứng  dụng người ta đưa ra các độ đo khác nhau về biên, một trong các độ đo đó  độ đo về sự thay đổi đột ngột về cấp xám. dụ: Đối với ảnh đen trắng, một điểm được gọi điểm biên nếu điểm đen ít nhất một điểm trắng bên cạnh. Tập hợp các điểm biên tạo nên biên hay đường bao của     đối tượng. Xuất phát từ sở này người ta thường sử dụng hai phương   pháp phát hiện biên bản:
4.1.1 Phát hiện biên trực tiếp
Phát hiện biên trực tiếp: Phương pháp này làm nổi biên dựa vào sự biến thiên mức xám của ảnh. Kỹ thuật chủ  yếu dùng để phát hiện biên ở  đây dựa vào sự biến  đổi cấp xám theo hướng. Cách tiếp cận theo đạo  hàm bậc nhất của ảnh dựa trên kỹ thuật Gradient, nếu lấy đạo hàm bậc hai của ảnh dựa trên biến đổi gia ta kỹ thuật Laplace.
4.1.2 Phát hiện biên gián tiếp
Phát hiện biên gián tiếp: Nếu bằng cách nào đó ta phân được ảnh thành các vùng thì ranh giới giữa các vùng đó gọi biên. Kỹ thuật biên phân vùng ảnh hai bài toán đối ngẫu nhau biên để thực hiện phân lớp đối tượng khi đã phân lớp xong nghĩa đã phân vùng được ảnh ngược lại, khi đã phân vùng ảnh đã được phân lớp thành các đối tượng, do đó thể phát hiện được biên.
Phương pháp phát hiện biên trực tiếp tỏ ra khá hiệu quả ít chịu ảnh hưởng của nhiễu, song nếu sự biến thiên độ sáng không đột ngột, phương pháp tỏ ra kém hiệu quả, phương pháp phát hiện biên gián tiếp tuy khó cài đặt, song lại áp dụng khá tốt trong trường hợp này.
4.2. Phương pháp phát hiện biên cục bộ
Hay còn gọi là phương pháp phát hiện biên trực tiếp, trong phương pháp này có các kỹ thuật sau:
4.2.1.Kỹ thuật phát hiện biên Gradient
Theo định nghĩa, gradient một véctơ các thành phần biểu thị tốc độ thay đổi giá trị của điểm ảnh, ta :
Trong đó, dx, dy khoảng cách (tính bằng số điểm) theo hướng x y.
* Nhận xét:
Tuy ta nói lấy đạo hàm nhưng thực chất chỉ pháng xấp xỉ đạo hàm bằng các kỹ thuật nhân chập (cuộn theo mẫu) ảnh số tín hiệu rời rạc nên đạo hàm không tồn tại.
dụ: Với dx = dy = 1, ta :
Chẳng hạn, ta có ma trận ảnh sau:
4.2.2.Kỹ thuật Prewitt
Kỹ thuật sử dụng 2 mặt nạ nhập chập xấp xỉ đạo hàm theo 2 hướng x    y :

Các bước tính toán của kỹ thuật Prewitt
Ví dụ ta có ảnh I:
4.2.3.Kỹ thuật Sobel
Tương tự như kỹ thuật Prewitt kỹ thuật Sobel sử dụng 2 mặt nạ nhân chập theo 2 hướng x, y :
Các bước tính toán tương tự Prewitt
Bài tập dành cho sinh viên, hãy tính toán tương ̣ với ảnh I đã tính toán với kỹ thuật Prewitt.
4.2.4.Kỹ thuật la bàn
Kỹ thuật sử dụng 8 mặt nạ nhân chập theo 8 hướng 00, 450, 900, 1350, 1800, 2250, 2700, 3150
Các bước tính toán thuật toán La bàn:
Trong đó, Hi được cho như sau:

4.2.3.Kỹ thuật phát hiện biên Laplace
Các phương pháp đánh giá gradient ở trên làm việc khá tốt khi độ sáng thay đổi nét. Khi mức xám thay đổi chậm, miền chuyển tiếp trải rộng, phương pháp cho hiệu quả hơn đó phương pháp sử dụng đạo hàm bậc hai Laplace. 
Toán tử Laplace được định nghĩa như sau:
Nên ta dùng:
Trong thực tế, người ta thường dùng nhiều kiểu mặt nạ khác nhau để xấp xỉ rời rạc đạo hàm bậc hai Laplace. Dưới đây ba kiểu mặt nạ  thường dùng:
Bài tập cho sinh viên, hãy tính toán dùng mặt nạ H, cho ảnh sau:


Bài tập cuối chương 4
Bài tập 4.1. Viết chương trình đọc vào 1 ảnh và ̉ dụng kỹ thuật Prewitt để phát hiện biên cho ảnh, hiển thị biên của ảnh.
Bài tập 4.2. Viết chương trình đọc vào 1 ảnh và ̉ dụng kỹ thuật Sobel để phát hiện biên cho ảnh, hiển thị biên của ảnh.
Bài tập 4.3. Viết chương trình đọc vào 1 ảnh và ̉ dụng kỹ thuật la bàn để phát hiện biên cho ảnh, hiển thị biên của ảnh.
Bài tập 4.4. Viết chương trình đọc vào 1 ảnh và ̉ dụng kỹ thuật phát hiện biên Laplace để phát hiện biên cho ảnh, hiển thị biên của ảnh.

[Lập trình windows] Thêm mới 1 bản ghi vào table trong CSDL theo mô hình 3 lớp.

Bài trước: Kết nối cơ sở dữ liệu - Lớp kết nối.

Mục tiêu: Trình bày 1 cách cấu trúc chương trình theo mô hình 3 lớp để thêm mới 1 bản ghi vào table trong cơ sở dữ liệu.

tinhoccoban.net - Mô hình 3 lớp trong lập trình windows
Mô hình 3 lớp trong lập trình windows

Bước 1. Tạo bảng tblSinhVien trong Database QLSV.

STT
Mã hóa tên
Ý nghĩa
Kiểu
Ghi chú
1
MaSV
Mã Sinh viên
char(10)

2
TenSV
Tên Sinh viên
nvarchar(30)

3
DiaChi
Địa chỉ 
nvarchar(50)

4
GhiChu
Ghi chú
nvarchar(50)

Mã tạo bảng tblSinhVien

CREATE TABLE [dbo].[tblSinhVien](
            [MaSV] [char](10) NOT NULL,
            [TenSV] [nvarchar](30) NULL,
            [DiaChi] [nvarchar](50) NULL,
            [GhiChu] [nvarchar](50) NULL,
 CONSTRAINT [PK_tblSinhVien] PRIMARY KEY CLUSTERED
(
            [MaSV] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


Tạo thủ tục thêm mới sinh viên


USE [QLSV]
GO
/****** Object:  StoredProcedure [dbo].[sp_inserttoSinhVienTable]    Script Date: 10/31/2018 10:35:06 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:                      <Author,,hoangtn>
-- Create date: <30-10-2018,,>
-- Description:   <Them moi 1 ban ghi vao bang sinh vien,,>
-- =============================================
CREATE PROCEDURE [dbo].[sp_inserttoSinhVienTable]
            -- Add the parameters for the stored procedure here
            (
            @MaSV char(10),
            @TenSV nvarchar(30),
            @DiaChi nvarchar(50),
            @GhiChu nvarchar(50)
            )
AS
BEGIN
            -- SET NOCOUNT ON added to prevent extra result sets from
            -- interfering with SELECT statements.
            SET NOCOUNT ON;

    -- Insert statements for procedure here
            insert into tblSinhVien(MaSV,TenSV,DiaChi,GhiChu)
            Values(@MaSV,@TenSV,@DiaChi,@GhiChu)
END


 Bước 2. Tạo interface và class cho thực thể Sinh viên: ISinhVien, clsSinhVien

Tạo project có cấu trúc như sau:
Cấu trúc Project theo mô hình 2 lớp trong lập trình Windows 
Trong đó:
ISinhVien

namespace Mohinh3Tang.DAL
{
    interface ISinhVien
    {
        /// <summary>
        /// Mã sinh viên
        /// </summary>
        string MaSV { get; set; }
        /// <summary>
        /// Tên sinh viên
        /// </summary>
        string TenSV { get; set; }
        /// <summary>
        /// Địa chỉ của sinh viên
        /// </summary>
        string DiaChi { get; set; }
        /// <summary>
        /// Ghi chú
        /// </summary>
        string GhiChu { get; set; }
        /// <summary>
        /// Chèn thêm 1 bản ghi với thông tin sinh viên mới đã có trong các thuộc tính.
        /// </summary>
        /// <param name="strConnectionString"></param>
        /// <returns>True: chèn được bản ghi mới;False: Không chèn được</returns>
        bool ChenMoiMotBanGhi(string strConnectionString);
    }
}
clsSinhVien
using System.Data.SqlClient;
namespace Mohinh3Tang.DAL
{
    class ClsSinhVien : ISinhVien
    {
        public string MaSV{get;set;}
        public string TenSV { get; set; }
        public string DiaChi { get; set; }
        public string GhiChu { get; set; }
        public ClsSinhVien()
        {
        }
        public ClsSinhVien(string masv, string tensv,string diachi, string ghichu)
        {
            MaSV = masv;
            TenSV = tensv;
            DiaChi = diachi;
            GhiChu = ghichu;
        }
        public bool ChenMoiMotBanGhi(string strConnectionString)
        {
            bool kt = false;
            SqlConnection sqlConn = new SqlConnection(strConnectionString);
            try
            {
                sqlConn.Open();
                SqlCommand sqlComm = new SqlCommand();
                sqlComm.Connection = sqlConn;
                sqlComm.CommandText = "sp_inserttoSinhVienTable";
                sqlComm.CommandType = System.Data.CommandType.StoredProcedure;

                //Truyen tham so vao cho thu tuc
                sqlComm.Parameters.Add("@MaSV", System.Data.SqlDbType.Char, 10).Value = MaSV ;               
                sqlComm.Parameters.Add("@TenSV", System.Data.SqlDbType.NVarChar,30).Value=TenSV;
                sqlComm.Parameters.Add("@DiaChi",System.Data.SqlDbType.NVarChar,50).Value=DiaChi;
                sqlComm.Parameters.Add("@GhiChu",System.Data.SqlDbType.NVarChar,50).Value=GhiChu;
               
                //Thuc thi cau lenh
                sqlComm.ExecuteNonQuery();
                kt = true;
            }
            catch
            { }
            return kt;
        }
    }
}


Bước 3. Tạo form SinhVien
STT
Đặt tên
Kiểu
Ghi chú
1
txtTenSV
Texbox

2
txtDiaChi
Texbox

3
txtGhiChu
Texbox

4
txtMaSV
Texbox

5
lblThongbao
Label


Có giao diện như sau:
tinhoccoban.net - Form thêm mới 1 sinh viên
Form thêm mới 1 sinh viên

Bước 4. Tạo thêm 1 contructor cho form frmSinhVien

public frmSinhVien(string strConnectionStringSent)
        {
            strConectionString = strConnectionStringSent;
            InitializeComponent();
        }

Bước 5. Viết code cho nút

Viết code cho nút thêm mới:
private void btnThem_Click(object sender, EventArgs e)
        {
            DAL.ClsSinhVien sinhvien = new DAL.ClsSinhVien(txtMaSV.Text,
                txtTenSV.Text,
                txtDiaChi.Text,
                txtGhiChu.Text);
            bool kt = sinhvien.ChenMoiMotBanGhi(strConectionString);
            if (kt)
            {
                lblThongbao.Text = "Đã chèn một bản ghi vào bảng Sinh viên.";
            }
            else
            {
                lblThongbao.Text = "Không chèn được.";
            }
        }

Bài tiếp theo: