M6 ta bài toán Một hệ thống quản lý chuyến bay đòi hỏi sự tổ chức chỉ tiết và hiệu quả đề phục vụ cả hai đối tượng chính: khách hàng và nhân viên, mỗi người có quyền truy cập vảo các chứ
CHUONG 2: PHAN TICH THIET KE HE THONG
1 Thiết kê cơ sở dữ liệu mức quan niệm
Từ mô tả về dữ liệu cần có ở phần mô tả của bài toán ta hình thành được sơ đề thực thể kết hợp (ERD)
2 Thiết kế cơ sở dữ liệu mức logic Từ sơ đồ thực thê kết hợp (ERD), ta có các lược đồ quan hệ:
MayBay(SoHieuMB, HangMB, NamSX, TenLoai, SoLuongGhe) KhachHang(MakH, CCCD, TenKH, NgaySinh, SDT, DiaChi, GioiTinh)
TheKhachHang(MatThe, TenLoai, DiemTichLuy,MaKH)
VeMayBay(MaVe, MaKH, MaChuyenBay, SoGhe, LoaiVe, NgayMua, TienVe, PhiDV, TongChiPhi, MaNguoiDat, MaNeguoiD1)
ChuyenBay(MaChuyenBay, NoiDi, NoiDen, ThoiGianKhoiHanh, ThoiGianDenDuKien, SoLuongGheTrong, Trang Thai)
NhanVien(MaNV, TenNV, GioiTinh, NgaySinh, SDT, CCCD, DiaChi, LoaiNV, Luong, MaTaiKhoan)
PhanCong(MaChuyenBay, MaNhan Vien, HoanThanh)
3.Các ràng buộc cần có 8 LoaiDV(MaLoaiDV, TenLoaiDV) 9 DichVu(MaDV, TenDV, GiaTien, MaLoaiDV) 10 DonDatDich Vu(MaChuyenBay, MaKH, MaDV, SoLuong)
11 TaiKhoan(TenNguoiDung, MatKhau, LoaiTK, MaTaiKhoan, SoDuKhaDung,
12 DanhGia(MakKH, MaChuyenBay, SoDiem, NhanXet) 13 PhieuChi(MaPhieuChi, MaMB, TenPhi, Ngay XuatPhieu, SoTienChi) 14 ThamGia(SoHieuMB, MaChuyenBay)
15 XuLy Ve(MaYC, MaVe, LoatYC, ThoiGian,GhiChu)
Ràng buộc check (DATEDIFF(year,NamSX, GETDATE())0)
NhanVien Khoa chinh (MaNV)
Khóa ngoại (MaTaiKhoan) tham chiếu đến Bang TaiKhoan(MiaTaiKhoan)
Ràng buộc - check (DATEDIFF(year, NgaySinh, GETDATE())> and
- check (len(SDT)) - check (len(CCCD)) - check(Luong>0)
PhanCong Khoa chinh (MaChuyenBay,MaNhan Vien)
Khoa ngoai (MaChuyenBay) tham chiéu dén Bang ChuyenBay(MaCB)
Khoa ngoai (MaNhan Vien) tham chiéu dén Bang NhanVien(MaNV)
DichVu Khóa chính (MaDV)
Khóa ngoại (MaLoaiDV) tham chiếu đến Bảng LoaiDichVu(MaL- oaiDV)
10 XuLy Ve Khoa chinh (MaYC)
Khoa ngoai (MaVe) tham chiéu téi bang VeMayBay(MaVe) Ràng buộc: -check(dbo.KiemTraXuLy(MavVe)=l)
II ThamGia Khoa chinh (SoHieuMB, MaChuyenBay)
Khoa ngoai (SoHieuMB) tham chiéu dén bang MayBay(So-
Khoa ngoai (MaChuyenBay) tham chiéu dén bang ChuyenBay(MaChuyenBay)
12 DonDatDichVu Khoa chinh (MaChuyenBay,MaKH,MaDV)
Khoa ngoai (MaChuyenBay) tham chiéu dén bang ChuyenBay(MaChuyenBay)
Khóa ngoại (MaKH) tham chiếu đến bảng KhachHang(MaKH) Khóa ngoại (MaDV) tham chiếu đến bảng DichVu(MaDV)
Khóa ngoại(MaKH) tham chiếu đến bảng KhachHans(MaKH) Ràng buộc
- check(len(MatKhau)>=8 and (MatKhau COLLATE Latnl_Gen- eral BIN LIKE N'%[A-Z]%'))
14 DanhGia Khoa chinh (MaKH,MaCB)
Khoa ngoai (MaCB) tham chiéu dén Bang ChuyenBay(MaCB)
Rang bu6éc check(Diem< and Diem>=0)
Khóa ngoại (MaMB) tham chiếu đến Bảng MayBay(SoHieuMB)
4 Cài đặt các CSDL và các ràng buộc 4.1 Tạo bảng và các ràng buộc create table MayBay(
SoHieuMB nvarchar (198) primary key, HangMB nvarchar(1@@) ,
NamSX date , TenLoai nvarchar(1@0) , SoLuongGhe int
MaKH nvarchar(1@@) primary key, TenKH nvarchar(109),
NgaySinh date , SDT nvarchar(10@) unique, DiaChi nvarchar(1@@) , GioiTinh nvarchar (1@@) , CCCD nvarchar(10@) unique, create table TheKhachHang( )3
MaThe nvarchar(1@@) primary key, TenLoai nvarchar(1@0) ,
DiemTichLuy int , MaKH nvarchar(1@@) references KhachHang(MaKH)
ChuyenBay (MaChuyenBay , MaMB, NoiDi, NoiDen, ThoiGianKhoiHanh, ThoiGian- DenDuKien, SoLuongGheTrong, TrangThai) create table ChuyenBay(
MaChuyenBay nvarchar(10@) primary key, NoiDi nvarchar(1@@) ,
NoiDen nvarchar(1@@) , ThoiGianKhoiHanh datetime, ThoiGianDenDuKien datetime, SoLuongGheTrong nvarchar (106), TrangThai nvarchar (198)
VeMayBay (MaVe, MaKH, MaChuyenBay, SoGhe, LoaiVe, NgayMua, PhuongThucTT, Ti enVe, PhiDV, TongChiPhi) create table VeMayBay(
MaVe nvarchar(1@@) primary key, MaNguoiDat nvarchar(1@@) references KhachHang (MaKH), MaNguoiDi nvarchar(1@@) references KhachHang(MaKH), MaChuyenBay nvarchar(1@@) references ChuyenBay(MaChuyenBay ) , SoGhe int,
TienVe int, PhiDV int default 6, TongChiPhi as (TienVe + PhiDV)
TenNguoiDung nvarchar (106), MatKhau nvarchar (106), LoaiTaiKhoan nvarchar (196), MaTaiKhoan nvarchar(108) primary key,
SoDuKhaDung int default 9, MaKH nvarchar(1@@) references KhachHang(MaKH)
NhanVien(MaNV, TenNV, GioiTinh, NgaySinh, SDT, CCCD, DiaChi, LoaiNv, Lu- ong) create table NhanVien(
MaNV nvarchar(1@@) primary key, TenNV nvarchar(1@@) ,
SDT nvarchar(10@) unique, CCCD nvarchar(10@) unique, DiaChi nvarchar(1@@) , LoaiNV nvarchar(1@@), Luong int,
MaTaikhoan nvarchar(10@) references TaiKhoan(MaTaikhoan)
MaKH nvarchar(1@@) references KhachHang(MaKH), MaChuyenBay nvarchar(1@@) references ChuyenBay (MaChuyenBay), SoDiem nvarchar (16),
NhanXet nvarchar (198), Primary key(MaKH, MaChuyenBay ) create table PhieuChi( )3
MaPhieuChi nvarchar(1@@) primary key, MaMB nvarchar(1@@) references MayBay(SoHieuMB) , TenPhi nvarchar (198),
MaChuyenBay nvarchar(1@@) references ChuyenBay(MaChuyenBay ) , MaNhanVien nvarchar(10@) references NhanVien(MaNV) ,
HoanThanh nvarchar(1@@) , primary key (MaChuyenBay , MaNhanVien) create table LoaiDVv()3
MaLoaiDV nvarchar (198) primary key, TenLoaiDV nvarchar(196), create table DichvVu( )3
MaDV nvarchar(1@@) primary key, TenDV nvarchar(1@@) ,
GiaTien int, MaLoaiDV nvarchar(1@@) references LoaiDV(MaLoaiDV) , create table XuLyVe( )3
MaYC nvarchar(1@@) primary key, MaVe nvarchar(10@) references VeMayBay(MaVe) , LoaiYC nvarchar(1@@),
bang quan he create table ThamGia(
SoHieuMB nvarchar(10@) references MayBay(SoHieuMB) , MaChuyenBay nvarchar(1@@) references ChuyenBay(MaChuyenBay ) , primary key(SoHieuMB , MaChuyenBay )
MaChuyenBay nvarchar(108) references ChuyenBay (MaChuyenBay), MaKH nvarchar(1@@) references KhachHang (MaKH),
MaDV nvarchar(10@) references DichVu(MaDV) , SoLuong int, primary key (MaChuyenBay , MaKH, MaDV)
); Kiểm tra tuổi đi làm của nhân viên tối thiểu là 18 và tối đa là 40 tuổi alter table NhanVien add constraint chktuoinv check (DATEDIFF(year, NgaySinh, GETDATE())> and DATEDIFF(year, NgaySinh, GET-
Kiểm tra độ dài hợp lệ của SĐT alter table KhachHang add constraint chksdtkh check (len(SDT)) alter table NhanVien add constraint chksdtnv check (len(SDT))
Kiểm tra độ dài hợp lệ của CCCD alter table KhachHang add constraint chkcccdkh check (1en(CCCD)) alter table NhanVien add constraint chkcccdnv check (len(CCCD))
Kiểm tra tuổi hưu của máy bay alter table MayBay add constraint chktuoimb check (DATED- IFF(year,NamSX, GETDATE())=8 and (MatKhau COLLATE Latini_General_ BIN LIKE N'%[A-Z]%'))
Kiểm tra thời gian khởi hành phải nhỏ hơn thời gian dự kiến alter table ChuyenBay add constraint chkthoigian check (DATED- TFF (minute, ThoiGianKhoiHanh, ThoiGianDenDuKien) >8)
Kiểm tra lương nhân viên phải lớn hơn ô alter table NhanVien add constraint chkluong check(Luong>8)
Kiểm tra loại khách nào có thể đổi hoặc hủy vé CREATE FUNCTION KiemTraXuLy(@mave nvarchar(1@@) ) RETURNS INT
AS BEGIN declare @tenlv nvarchar (108) select @tenlv=LoaiVe from VeMayBay where MaVe=@mave if(@ten1v=N'hạng thương gia' or @tenlv=N'hạng phổ thông đặc biệt ' ) return 1; return 0;
END;
CHUONG 3: THIET KE CAC CHUC NANG
L Kết nối cơ sở đữ liệu
SqlConnection conn=new SqlConnection("Data Source=LAPTOP- Q1B01240\TRANVANHUNG; Initial Catalog=DoAnSapCuoi;Integrated Security=True");
Khi bạn thực hiện các thao tác với cơ sở dữ liệu trong C# sử dụng đối tượng SqlConnection, bạn nên mở kết nối (conn.Open()) trước khi thực hiện các lệnh SQL vả đóng kết nối (conn.Close()) sau khi hoàn thành
2 Các chức năng của khách hàng 2.1 Hàm tìm dịch vụ create function TimDichVu(@LoaiDV nvarchar(1@@),@GiaTien int) returns table as return(select DichVu.* from DichVu join LoaiDV on DichVu.MaLoaiDV=LoaiDV.MaLoaiDV where @LoaiDV=TenLoaiDV and @GiaTien>GiaTien) select * from dbo.TimDichVu(N'Nước giải khát', '59999") Thực thi trên C# public DataTable TimDichVu(string LoaiDV, int GiaTien) { try conn.Open(); string sqlStr = String.Format("Select MaDV,TenDV,GiaTien from TimDichVu(N'{0}','{1}')", LoaiDV, GiaTien);
Sq|DataAdapter adapter = new SqIDataAdapter(sqIStr, conn);
DataTable dt = new DataTable(); adapter.Fill(dt); return dt; catch (Exception ex)
MessageBox.Show(ex.Message); return null; finally { conn.Close(); }
2.2 Ham tim kiém chuyén bay create function TimKiemChuyenBay(@noidi nvarchar(10@),@noiden nvarchar (199) ,@thoigiandi date) returns @table table(MACB nvarchar(199) nu11,NoiDi nvarchar(1@@) null,NoiDen nvarchar(199) null, ThoiGianKhoiHanh datetime null, ThoiGianDenDuKien datetime null,TVPT int null,TVPTDB int null,TVTG int null) begin if (@noidi='Khong' ) begin insert into @table(MACB,NoiDi, NoiDen, ThoiGianKhoiHanh, ThoiGianDenDuKien) se- lect MaChuyenBay, NoiDi, NoiDen, ThoiGianKhoiHanh, ThoiGianDenDuKien from ChuyenBay where
@noiden=NoiDen and TrangThai=N'Chờ cất cánh' and @thoigiandi = CONVERT(DATE, ThoiGianKhoi- Hanh) update @table set TVPT.TinhTienVe (MACB,N'hạng phổ thông" ),TVPTDB Tin- hTienVe(MACB,N'hạng phổ thông đặc biệt" ), TVTG.TinhTienVe (MACB,N'hạng thương gia'}) return end insert into @table(MACB,NoiDi,NoiDen, ThoiGianKhoiHanh, ThoiGianDenDuKien) select MaChuyenBay , NoiDi, NoiDen, ThoiGianKhoiHanh, ThoiGianDenDuKien from ChuyenBay where
@noiden=NoiDen and TrangThai=N'ChO cat canh' and @noidi=NoiDi and @thoigiandi = CON- VERT (DATE, ThoiGianKhoiHanh) update @table set TVPT.TinhTienVe (MACB,N'hạng phổ thông" ),TVPTDB Tin- hTienVe(MACB,N'hạng phổ thông đặc biệt" ), TVTG.TinhTienVe (MACB,N'hạng thương gia'}) return end Thực thi trên C# public DataTable TimChuyenBay(string noidi, string noiden, DateTime thoigian) { try conn.Open(); string sqlStr = String.Format("Select * from TimKiemChuyenBay(N'{0}',N'{1}','{2}')", noidi, noiden, thoigian.ToString("yyyy/MM/dd"));
SqlDataAdapter adapter=new SqlDataAdapter(sqlStr,conn);
DataTable dt = new DataTable(); adapter.Fill(dt); return dt;
MessageBox.Show(ex.Message); return null; finally { conn.Close(); }
2.3 Xem lịch sử mua vé của khách hàng create function XemLichSu(@makhachhang nvarchar (199) ) returns @table table(MaVe nvarchar(199) nu11,SoGhe int null, LoaiVe nvarchar(199) null,Ngay- Mua datetime null,TongCP int null,NoiDi nvarchar(199) nu11,NoiDen nvarchar (199) null, ThoiGianDi datetime null,ThoiGianDen datetime null,MaChuyenBay nvarchar(1@@) null) begin insert @table select MaVe,SoGhe, LoaiVe, NgayMua, TongChiPhi, NoiDi, NoiDen, ThoiGianKhoi- Hanh, ThoiGianDenDuKien, ChuyenBay MaChuyenBay from VeMayBay join ChuyenBay on VeMayBay - MaChuyenBay=ChuyenBay.MaChuyenBay where @makhachhang=MaNguoiDat return end Thực thi trên C# public DataTable LichSuDatVe(string MaNguoiDi) { try conn.Open(); string sqlStr = String.Format("Select * from dbo.XemLichSu('{0}')", MaNguoiDi);
SqlDataAdapter adapter = new SqlDataAdapter(sqlStr, conn);
DataTable dt = new DataTable(); adapter.Fill(dt); return dt; catch (Exception ex)
MessageBox.Show(ex.Message):; return null; finally { conn.Close(); }}
3 Chức năng tính tiền 3.1 Thủ tục tính tiền hành lý
BEGIN declare @loaive nvarchar (199) ,@makh nvarchar (199) ,@machuyenbay nvarchar(1@@) select @loaive=LoaiVe ,@makh=MaNguoiDi ,@machuyenbay=MaChuyenBay from VeMayBay where
@mave=MaVe if (@loaive=N'hang phổ thông đặc biệt' or @loaive=N'hạng thương gia') set @sokg=@sokg-18 else set @sokg=@sokg-12 if (@sokg