Hệ thống đặt vé xe lửa cho ga hòa hưng
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỒ ÁN CUỐI KỲ
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Trang 22Bảng phân công công việc: 3
3Giới thiệu tổng quan về đồ án 4
4Đặc tả hệ thống: 4
4.1Giới thiệu tổng quan về hệ thống: 4
4.2Đặc tả chi tiết các quy trình và quy đinh của hệ thống: 5
4.3Môi trường phát triển: 7
5Mô tả các phân hệ có trong hệ thống: 7
6Mô tả chi tiết các chức năng của hệ thống: 8
6.1Danh sách các chức năng: 8
6.2Sơ đồ thực hiện các chức năng: 9
7Thiết kế cơ sở dữ liệu: 11
7.1Lược đồ ER: 11
7.2Lược đồ cơ sở dữ liệu : 15
7.3Mô tả cấu trúc các bảng: 16
7.4Mô tả mối quan hệ giữa các bảng: 18
8Màn hình chính 21
9Màn hình login: 21
10Màn hình đặt vé: 23
11Màn hình hủy vé 23
Trang 312Màn hình Thông Tin Ga: 35
13Màn hình Thay Đổi Thông Tin Ga 38
14Màn hình xem Tuyến tàu: 39
15Màn hình thông tin Tuyến tàu: 40
16Thao Tác Trên Bảng Chuyến Tàu: 48
17Thao Tác Trên Bảng Ga Trung Gian: 64
18Màn hình xem thông tin: 71
19Màn hình thống kê: 74
1. Thông tin nhóm:
2. Bảng phân công công việc:
Khảo sát các website 100%
Trang 4Viết bảng mô tả hệ thống
Thiết kế cơ sở dữ liệu
Viết bảng mô tả các chức năng đụng độ
Xem, xóa, sửa thông tin Ga
Báo cáo doanh thu theo chuyến trong thời gian cụ thể
Báo cáo doanh thu trong thời gian cụ thể
Khảo sát các website
Vẽ mô hình, lược đồ liên quan
Viết bảng mô tả các chức năng đụng độ
Xem, xóa, sửa Tuyến
Xem, xóa, sửa Chuyến
100%
Khảo sát các websiteViết bảng mô tả CSDLViết bảng mô tả các chức năng đụng độ
Thiết kế giao diện
Thêm, xóa các ga trung gian
100%
-3. Giới thiệu tổng quan về đồ án
− Đồ án được chúng em xây dựng trên mô hình 3 Tier có thể cài đặt CSDL trên một máy
và chạy ứng dụng gọi tới CSDL đó trên một máy khác
− Đồ án xây dựng trên nền Visual Studio 2008, hệ quản trị CSDL SQL Server 2005
− Tổng số chức năng mô tả 15 chức năng, cài trên 6 table
4. Đặc tả hệ thống:
Trang 5− Với tình trạng hiện nay, ga xe lửa Hòa Hưng không có hệ thống giúp cho hành khách cóthể đặt vé trực tuyến mà chỉ có thể mua vé trực tiếp từ các quầy bán vé hoặc gọi điệnthoại đặt vé để được giao vé trực tiếp Điều này gây ra sự bất cập là một số nhân viên bán
vé có thể chặn vé lại để phe vé chợ đen Dưới tình trạng đó, Ban Giám Đốc ga xe lửa HòaHưng quyết định xây dựng một hệ thống đặt vé trực tiếp không thông qua nhân viên bán
vé Hệ thống các máy đặt vé này sẽ được đặt trực tiếp ở trước nhà ga phục vụ cho việcđặt vé của khách hàng
− Ga xe lửa Hòa Hưng cần quản lý việc đặt vé, hủy vé, quản lý lịch chạy các chuyến tàu.Sau đây là bảng mô tả cơ bản các hoạt động mà hệ thống thực cần thực hiện:
− Hệ thống cần lưu trữ thông tin về lịch chạy của các chuyến tàu Người ta gọi lịch chạycủa một tàu cụ thể trên một tuyến đường trong một khoảng thời gian cố định và đi quamột số lượng ga nhất định là một chuyến tàu ví dụ như tuyến Sài Gòn – Hà Nội do tàuSE2 chạy nó sẽ ghé qua các ga như: Sài Gòn, Biên Hòa, Nha Trang, nó sẽ bắt đầu đi vào19h00 và đến lúc 04h10 vào ngày 24/12/2009
− Tuyến tàu có tên tuyến thể hiện một đoạn đường mà tàu chạy xuyên suốt mà tại các thànhphố đó là nơi mà tại đó có ga lớn mà tàu có thể dừng lại để bảo trì hoặc sửa chữa Mỗi tàu
có thể chạy trên nhiều tuyến tàu khác nhau Mỗi tàu có mã tàu và tên tàu
− Mỗi chuyến tàu sẽ bắt đầu chạy ở một ga và kết thúc chuyến đi ở một ga khác Ngoài ratrong suốt hành trình nó sẽ dừng lại để cho khách xuống và rước khách mới ở một số ganhất định vào những khoảng thời gian cố định tùy thuộc vào loại tàu chạy chuyến đó Các
ga đó gọi là các ga trung gian Mỗi ga sẽ có tên ga, có thể trùng với tên địa phương hoặcđịa danh nơi đó, địa chỉ, điện thoại, fax và thông tin về quy mô của ga đó Mỗi chuyếntàu sẽ có thời gian đi và đến Trên chuyến tàu tùy theo chuyến đó tàu nào chạy sẽ có sốlượng ghế cố định thuộc nhiều loại khác nhau Để dễ dàng cho việc quản lý và đặt chỗ thìhành khách và cả hệ thống cần biết được tàu chạy chuyến đó còn bao nhiêu chỗ trống vànhững chỗ trống đó thuộc loại ghế nào ví dụ như ghế cứng, ghế mềm, ghế máy lạnh…
Vì mỗi loại ghế như vậy sẽ có giá khác nhau
4.2.1. Quản lý thông tin:
− Khi nhân viên của nhà ga dùng user và pass của mình đăng nhập vào hệ thống tùy theoquyền mà được cấp cho người đó thì nhân viên đó có thể thay đổi thông tin các tuyến tàunhư thêm tuyến, ngưng hoạt động của một tuyến nào đó Nếu sắp tới giờ tàu khởi hành
mà có vấn đề gì xảy ra thì nhân viên có quyền cập nhật lại thông tin của chuyến tàu nhưthay đổi giờ khởi hành, số lượng ghế trên tàu, hoặc đổi tàu chạy chuyến đó
− Các tàu chạy nếu quá thời gian được lưu hành thì các con tàu đó sẽ được liệt vào loạikhông được sử dụng nữa Khi đó các nhân viên cần cập nhật lại tình trạng của tàu đó làkhông được lưu thông nữa
Trang 6− Khi thêm một chuyến tàu nào đó thì tùy thuộc vào tàu sẽ chạy thì nhân viên cần tra cứuthông tin và quy mô của các ga Để xác định được chuyến tàu đó có thể và cần thiết dừnglại ở những ga nào trong suốt tuyến đường
4.2.2. Đặt vé:
− Khi khách hàng muốn đặt vé thì họ muốn biết thông tin liên quan đến tuyến đường mà họmuốn đi sẽ do tàu nào chạy và chạy vào ngày nào, ghế trên chuyến tàu đó có còn trốnghay không Vì vậy, đầu tiên hành khách cần phải nhập các thông tin tra cứu về ga đi (ga
mà hành khách bắt đầu xuất phát hoặc hành khách muốn đón tàu tại đó), ga đến (ga đích
mà mình muốn đến), tàu (tàu mà hành khách muốn đi) và ngày xuất phát Dựa trên cácthông tin này hệ thống sẽ phải thông báo các gợi ý về các chuyến tàu thỏa mãn các yêucầu trên cho hành khách Ngoài các thông tin ở trên, hệ thống còn cho biết trên tàu đichuyến đó còn trống bao nhiêu ghế, ghế đó thuộc loại nào Khi khách hàng muốn đặt loạighế nào số lượng bao nhiêu thì sẽ căn cứ vào các thông tin đó
− Khách hàng sẽ chọn loại ghế mà mình muốn đặt, khi đó khách hàng cần nhập các thôngtin về họ tên, địa chỉ, số điện thoại, CMND của người đặt và mã tài khoản nếu có (để cóthể thanh toán trực tiếp qua mạng) Số chỗ mà mình muốn đặt Sau khi đặt chỗ xong bạn
sẽ được cấp một mã đặt chỗ Căn cứ vào mã đặt chỗ này mà bạn sẽ đến lấy vé trực tiếptại quầy bán vé theo đúng các thông tin mà bạn đã đặt Khi yêu cầu đặt chỗ được chấpthuận thì tình trạng các vé tương ứng với thông tin đặt chỗ ở trên sẽ được bật lên tìnhtrạng là đã được đặt
− Khi nhận được vé thì trên vé ngoài các thông tin về mã vé và loại vé thì trên đó còn cócác thông tin về vị trí chỗ ngồi của bạn như: ghế của bạn nằm ở toa nào, có số thứ tự làbao nhiêu để giúp bạn thuận tiện hơn trong việc tìm ra chỗ ngồi của mình
− Một hành khách mỗi lần đặt vé thì có thể đặt nhiều loại ghế với từng số lượng khác nhautrên cùng một chuyến tàu
− Một hành khách chỉ được đặt tối đa một lượng vé nhất định Số lượng này được quy địnhtrong quy định đặt vé của công ty
4.2.3. Đăng ký:
− Sau khi đặt vé xong nếu khách hàng có nhu cầu hủy vé hoặc hủy một số vé nào đó thìkhách hàng cần đăng nhập vào hệ thống bằng số chứng minh thư của mình Từ đây hệthống sẽ kiểm tra xử lý trả ra cho khách hàng lịch sử đặt chỗ của họ: họ đặt vào ngày nào,trên chuyến nào, số vé đặt là bao nhiêu thuộc loại nào Tất cả các thông tin đó sẽ được thểhiện lên màn hình Khi đó khách hàng có quyền hủy đặt vé dựa trên các cơ sở đó
4.2.4. Hủy vé:
Trang 7− Khách hàng có thể chọn loại ghế và số lượng vé mà mình muốn hủy dựa trên phiếu đặtchỗ ban đầu của mình Có thể hủy toàn bộ phiếu đặt chỗ hoặc chỉ cập nhật lại số lượng vécần phải mua
− Khi yêu cầu hủy vé được chấp thuận thì hệ thống sẽ tiến hành cập nhật lại phiếu đặt chỗ
và cập nhật lại tình trạng vé là rãnh để có thể cho phép người khác đặt Khi hủy vé kháchhàng cũng sẽ chịu một số tiền phạt nhất định tùy theo quy định được quy định rõ trong hệthống quy định của nhà ga
− Hành khách chỉ được hủy vé khi thời gian tàu chạy được đăng ký còn lớn hơn 24h Sauthời gian đó thì không được hủy vé nữa
4.2.5. Phát sinh báo cáo thống kê:
Các báo cáo thống kê cần phát sinh như:
− Số lượng chuyến tàu chạy trong tháng
− Thống kê số lượng khách hàng đặt vé
− Thống kê tình hình bán vé theo tháng/quý/năm/chuyến
− Báo cáo doanh thu bán vé thu được trong tháng/quý/năm/chuyến
4.2.6. Các quy định của hệ thống:
− Số lượng vé tối đa mà mỗi hành khách được đặt mỗi lần là 5 vé
− Chỉ được trả vé trước thời gian tàu chạy 2 ngày Sau thời gian đó nếu hủy vé thì hànhkhách sẽ bị khấu trừ 20% trên đơn giá vé
− Các tàu SE chỉ dừng lại ở các ga trung gian thuộc loại lớn, không dừng lại ở các ga cóquy mô trung bình và nhỏ
− Đồ án này chúng em xây dựng trên nền Visual Studio 2008 Framework 3.5
− Sử dụng Hệ quản trị Cơ sở dữ liệu SQL 2005
− Tương thích với hệ điều hành Window
− Khi phát triển ứng dụng này chúng em phát triển theo mô hình 3 layer Mục đích củaviệc sử dụng nó là nhằm thuận tiện hơn trong việc chia nhỏ công việc để giao chocác thành viên, có thể tái sử dụng lại
5. Mô tả các phân hệ có trong hệ thống:
Các phân hệ được quy định trong hệ thống bao gồm:
− Khách vãn lai: có quyền xem các thông tin về lịch chạy các chuyến tàu, ga đi – ga đến của chuyến tàu Họ có quyền xem vé trống, đặt vé Ngoài ra họ còn có thể xem các thông tin cơ bản như: thông tin ga, tàu, tuyến, …
− Khách đã từng đặt vé: bao gồm các quyền của khách vãn lai và thêm quyền hủy vé
đã đặt
Trang 8− User: là người chịu trách nhiệm quản lí thông tin khách đã đặt vé, hủy vé Có nhiệm vụ báo biểu thống kê
− Manager: Là người chịu trách nhiệm quản lí về nội dung thông tin trong toàn bộ
hệ thống như cập nhật thông tin về tuyến tàu, chuyến tàu, hệ thống các nhà ga…
− Admin: quản trị kiến trúc hệ thống
6. Mô tả chi tiết các chức năng của hệ thống:
Yêu cầu lưu trữ:
− Lưu trữ thông tin nhân viên trong cty (thông tin cá nhân)
− Lưu trữ thông tin ga
− Lưu trữ thông tin tàu
− Lưu trữ thông tin tuyến tàu
− Lưu trữ thông tin chuyến tàu
− Lưu trữ thông tin vé (số toa, tình trạng, …)
− Lưu trữ thông tin đặt và hủy vé của khách hàng
− Lưu trữ thông tin khách hàng
Yêu cầu xử lí nghiệp vụ:
− Tiếp nhận đặt vé của khách hàng
− Tiếp nhận hủy vé của khách hàng
− Xem thông tin vé
− Xem thông tin ga
− Sửa thông tin ga
− Xóa Ga trong hệ thống ga đang quản lí
− Xem thông tin tuyến
− Sửa thông tin của tuyến
− Xóa (ngưng khai thác) Tuyến
− Xem thông tin Chuyến
− Sửa thông tin Chuyến
− Xóa chuyến
Trang 9− Xem thông tin đặt vé của khách hàng
− Thêm ga trung gian cho 1 chuyến
− Giảm bớt (xóa) ga trung gian nào đó của chuyến
Yêu cầu kết xuất
− Thống kê số lượng vé bán trong mỗi chuyến
− Thống kê số lượng vé bán trong mỗi tuyến
− Thống kê khách hàng đặt vé
− Thống kê các khách hủy vé
− Báo cáo doanh thu theo chuyến
− Báo cáo doanh thu theo tuyến
− Báo cáo doanh thu theo thời gian (tháng, quí, …)
Sơ đồ tổng quát:
Trang 10Ghi nhan Khach
Ghi nhan Dat ve
Cap Nhat Ve trong
Xem thong tin ve
Xem thong tin Ga Xem thong tinh Tuyen
Khách
xem Chuyen
Nhân Viên
Xem là Tra Cuu
Thong ke vé bán theo chuyen Thong ke khach hang dat ve
Thong ke ve ban theo Tuyen
Thong ke khách huy vé
Báo cáo doanh thu thoi gian
Bao cao Doanh thu Tuyen
Báo cáo doanh thu theo Chuyen
User
Xoa Chuyen
Sua Ga Xoa Tuyen Xoa ga trong he thong quan li
Sua thong tin Tuyen
Sua Chuyen Giam Ga trung gia
them Ga trung gian Manager
Trang 126 7.1.2. Thuyết minh mô hình ER
Các thuộc tính của thực thể:
− Chuyến tàu: bao gồm các thông tin mô tả chuyến tàu
− Tàu: bao gồm các thông tin về tàu chạy
− Tuyến tàu: các tuyến đường mà tàu chạy
− Ga: các thông tin về nơi mà tàu dừng
Trang 13mô của ga)
− Khách hàng: chứa các thông tin của khách hàng khi đặt mua vé
− Hủy vé: chứa các thông tin khi khách hàng hủy vé
− Phiếu đặt chỗ: chứa các thông tin khi khách hàng đặt chỗ
− Chi tiết đặt chỗ: thông tin chi tiết của phiếu đặt chỗ
mà khách hàng chọn
Vé tàu: chứa thông tin về vé
Trang 14− Loại vé: chứa các thông tin về việc phân loại vé
Các mối kết hợp:
Stt Tên mối kết hợp Bảng kết hợp Loại kết hợp Ý nghĩa
một tàu duy nhất chạy Mỗi tàu có thể chạy nhiềuchuyện khác nhau tùy ở thời điểm khác nhau
Tuyến tàu 1 – n Mỗi chuyến tàu chạy trên một tuyến tàu nhất định
Mỗi tuyến tàu thì có nhiều chuyến tàu chạy qua
hành trình có thể dừng ở nhiều nhà ga khác nhau.Mỗi nhà ga có nhiều chuyến tàu ghé qua.Thời gian đi và đến của mỗi chuyến tàu đến ga xác định
tàu 1 – n Mỗi vé tàu chỉ thuộc về một chuyến tàu
Mỗi chuyến tàu sẽ có nhiều vé tàu
Trang 15tàu n – n Trên mỗi chuyến tàu thì có nhiều loại vé khác
nhau
Số lượng ghế và ghế trống của mỗi loại trên mỗi chuyến tàu thì khác nhau
Loại vé – Chuyến tàu
1 - n Mỗi chi tiết đặt chỗ đặt
chỗ trên một chuyến tàu nhất định, đặt chỗ cho một loại vé nhất định.Một chuyến tàu thì có nhiều phiếu chi tiết đặt chỗ
Một loại vé cũng được đặtbởi nhiều CT phiếu đặt chỗ
đặt chỗ 1 – n Một phiếu hủy vé chỉ hủy trên một phiếu đặt chỗ
Một phiếu đặt chỗ có thể
có nhiều phiếu hủy vé
Trang 161) NhanVien ( MaNV, MaLoaiNV, HoTen, DiaChi, DienThoai, User, Pass)
− Mỗi nhân viên của Ga có các thông tin như họ tên, địa chỉ, điện thoại, user và pass đểđăng nhập vào hệ thống Mỗi nhân viên có một mã nhân viên duy nhất để phân biệt vớicác nhân viên khác Mỗi nhân viên có nhiệm vụ khác nhau và được quy định trong loạinhân viên
2) LoaiNhanVien ( MaLoaiNV, TenLoaiNV, Quyen)
− Mỗi loại nhân viên có một mã duy nhất để phân biệt Còn có tên nhân viên và quyền đểquy định quyền hạn của nhân viên đó lúc đăng nhập vào hệ thống
3) KhachHang ( CMND, MaTaiKhoan, HoTen, DiaChi, SDT, SoLanDi)
− Mỗi khách hàng có một số CMND duy nhất để phân biệt Ngoài ra còn có các thông tinnhư họ tên, địa chỉ, số điện thoại, mã tài khoản ngân hàng và số lần đặt vé đi tàu (ở đâyquy định người đặt vé cũng là người đi)
Trang 176 4) Tau ( MaTau, TenTau )
− Mỗi một con tàu có một mã duy nhất để phân biệt với các con tàu khác và có tên gọi tương ứng
5) Ga ( MaGa, TenGa, DiaChi, DienThoai, Fax, LoaiGa)
− Mỗi một ga dừng có một mã duy nhất để phân biệt ngoài ra còn có các thông tin về tên
ga, địa chỉ, điện thoại, số fax Nếu quy mô của ga dừng là ga lớn thì LoaiGa = 1, trungbình thì LoaiGa = 2 và nhỏ thì LoaiGa = 3 Thuộc tính LoaiGa này dùng trong trườnghợp mở rộng các tuyến tàu và chuyến tàu (vì chỉ có ga lớn mới được đặt là ga đi và gađến Ngoài ra một số tàu đặc biệt chỉ dừng ở các ga lớn và trung bình, không dừng ở các
ga nhỏ)
6) TuyenTau ( MaTuyen, TenTuyen)
− Mỗi tuyến tàu có một mã tuyến duy nhất để phân biệt với các tuyến khác Mỗi tuyến tàu
có tên gọi riêng
7) ChuyenTau ( MaChuyen, MaTuyen, MaTau, GaDi, GaDen, ThoiGianDi, ThoiGianDen, TongSoGhe, SoGheConTrong)
− Mỗi một chuyến tàu có một mã chuyến để phân biệt với các chuyến khác Mỗi tuyến tàuvào một ngày có thể có nhiều chuyến tàu chạy Tàu chạy ở mỗi chuyến khác nhau thì cóthể khác nhau ở cùng một tuyến tàu Mỗi chuyến tàu xuất phát từ một ga và đi đến một gakhác cố định, có thời gian đi và thời gian đến xác định, tổng số ghế và số lượng ghế còntrống của tàu chạy chuyến đó
8) GaTrungGian ( MaChuyen, MaGa, ThoiGianDen, ThoiGianDi)
− Với mỗi chuyến tàu ngoài ga đi và ga đến cố định thì trong lộ trình của nó, nó còn dừnglại ở một số ga trung gian để cho khách lên, xuống (tùy thuộc vào loại tàu chạy chuyến
đó mà số lượng ga nó ghé vào là nhiều hay ít Ví dụ như tàu SH2 chạy tuyến từ TpHCM
ra Đà Nẵng có ghé qua ga Sông Ray nhưng nếu là tàu TN2 chạy thì nó sẽ không ghé gađó) Thời gian đến và đi ở mỗi ga là khác nhau
9) VeTau ( MaVe, MaChuyen, SoToa, SoGhe, TinhTrang, MaLoaiVe)
− Mỗi chuyến tàu có số lượng vé tương ứng với tổng số ghế của chuyến đó Mỗi vé có mã
vé duy nhất để phân biệt với các vé khác Trên vé có các thông tin về vị trí của ghế tươngứng với vé đó (SoToa, SoGhe) Có nhiều loại vé khác nhau, mỗi vé thuộc về một loại vénào đó Nếu TinhTrang của vé là 1 thì nó đã được đặt, là 0 thì vị trí ghế của vé đó còntrống
10) LoaiVe ( MaLoaiVe, TenLoaiVe, DonGia)
Trang 18− Có nhiều loại vé khác nhau, mỗi loại có mã loại duy nhất để phân biệt chúng với nhau
Có tên loại vé và đơn giá tương ứng khác nhau cho từng loại
11) PhieuDatCho ( MaDatCho, NgayDat, MaChuyen, CMNDNguoiDat,
TongSoVeDat, TongTien )
− Mỗi khách hàng khi đặt vé tàu đi sẽ phát sinh một phiếu đặt chỗ, mỗi một phiếu đặt chỗ
có một mã duy nhất để phân biệt Phiếu đặt chỗ chứa số CMND của người đặt vé, ngàyđặt, đặt vé của chuyến nào, tổng số vé đặt và tổng tiền thanh toán
12) ChiTietDatCho ( MaCTDC, MaDatCho, LoaiVe, SoLuongDat, DonGiaDat )
− Mỗi phiếu đặt chỗ bao gồm nhiều chi tiết đặt chỗ Mỗi chi tiết đặt chỗ bao gồm các thôngtin về loại vé đặt, số lượng vé đặt và đơn giá đặt hiện tại Mỗi chi tiết đặt chỗ có một mãduy nhất để phân biệt với các chi tiết khác
13) ThongTinGheChuyen ( MaChuyen, MaLoaiVe, SoLuongGhe,
SoLuongGheTrong )
− Đối với mỗi chuyến tàu thì có nhiều loại ghế tương ứng với nhiều loại vé khác nhau Mỗiloại vé trên chuyến tàu đó có số lượng nhất định và khách hàng cần biết thông tin về sốlượng ghế còn trống của loại vé đó
14) HuyVe ( MaHuy, NgayHuy, MaDatCho, LoaiVe, SoLuongHuy, SoTienPhat )
− Khi khách hàng hủy vé cần lưu lại thông tin để xác lập lịch sử đặt vé và hủy vé của kháchhàng Mỗi phiếu hủy vé có một mã duy nhất để phân biệt với các phiếu hủy vé khác.Ngoài ra còn có các thông tin về ngày hủy, phiếu hủy này là của phiếu đặt chỗ nào Loại
vé cần hủy, số lượng vé vị hủy và mức phạt phải chịu (nếu có)
15) ThamSo ( MaThamSo, TenThamSo, KieuDuLieu, GiaTri, TinhTrang )
− Mỗi thông tin quy định trong bảng tham số có một mã duy nhất để phân biệt với các quyđịnh khác Nó có tên để miêu tả ngữ nghĩa Kiểu dữ liệu cho chúng ta biết giá trị củatham số trong thuộc tính GiaTri có kiểu dữ liệu gì Và TinhTrang của tham số cho chúng
ta biết hiện tại tham số đó có còn được sử dụng nữa hay không
1) NhanVien _ LoaiNhanVien:
− Mỗi một nhân viên thuộc về một loại nhân viên nào đó được thể hiện trong thuộc tínhMaLoaiNV trong bảng nhân viên
2) Tau _ ChuyenTau:
Trang 196) ChuyenTau _ GaTrungGian:
− Mỗi chuyến tàu sẽ đi qua và dừng lại ở nhiều ga khác nhau (ngoài ga cố định đi và đến).Mối quan hệ này cho ta biết chuyến tàu đó dừng ở những ga nào và nó được thể hiện ởthuộc MaChuyen và MaGa trong bảng GaTrungGian
7) ChuyenTau _ ThongTinGheChuyen:
− Trên mỗi chuyến tàu có nhiều loại ghế khác nhau tương ứng với nhiều loại vé Mối quan
hệ này cho ta biết trên chuyến tàu đó, loại vé đó có bao nhiêu ghế và số lượng ghế còntrống của loại vé đó
10)LoaiVe _ ChiTietDatCho:
− Mối quan hệ này cho ta biết phiếu chi tiết đặt chỗ đó đặt loại vé nào Mỗi phiếu chi tiếtđặt chỗ chỉ được đặt một loại vé duy nhất Điều này thể hiện ở thuộc tính LoaiVe trongbảng ChiTietDatCho
11) PhieuDatCho _ ChiTietDatCho:
Trang 20− Mối quan hệ này thể hiện trong một phiếu đặt chỗ có thể bao gồm 1 hoặc nhiều phiếu chitiết đặt chỗ Mỗi phiếu chi tiết đặt chỗ thuộc về một phiếu đặt chỗ duy nhất Điều này thểhiện ở thuộc tính MaDatCho trong bảng ChiTietDatCho
Trang 229.1. Chức năng:
− Khi khách hàng muốn hủy vé đã đặt cần đăng nhập vào hệ thống trước
− Khi nhân viên muốn thay đổi các thông tin liên quan đến chuyến, tuyến, tàu, ga thì cầnđăng nhập vào hệ thống trước mới thấy được các chức năng này
− Khi nhân viên muốn xem các báo cáo thống kê thì cũng cần đăng nhập
− Nhập user: hien; pass: 123
9.2. Đụng độ:
Không có
Thông tin đăng nhập
sai
Trang 2411.1. Chức năng:
− Khi khách hàng muốn hủy các vé mà mình đã đặt thì chỉ cần nhâp thông tin CMND củamình vào sau đó nhấp nút Tìm thì tự động chương trình sẽ liệt kê ra danh sách các vé màngười đó đặt có thể hủy được ra cho khách hàng coi
− Khách hàng chọn vé nào mà mình muốn hủy sau đó nhấp vào nút Hủy vé
− Nhấp nút Thoát để đóng màn hình
4.2 Đụng độ:
TestCase0
1 Tên lỗi : mất dữ liệu cập nhật
Tình huống gây ra lỗi
Hai giao tác cùng thực hiện trên đơn vị dữ liệu là Phieudatcho: T1 thêm một dòng dữ liệu , T2 cập nhật PhieuDatCho trong cùng một thời điểm,sau đó T1 đọc lại thì giá trị không khớp với
dữ liệu đang có
Hoạt động của các store procedure trước khi sửa lỗi
Trang 25set tran isolation level READ
Chỉnh mức cô lập thành mức REPEATABLE READ (mức 3)
cho giao tác T1, vì ở mức cô lập này sẽ giúp tránh được hiện tượng lỗi trên
Hoạt động của các store procedure sau khi đã sửa lỗi
T1 (isolation level REPEATABLE READ) T2
set tongtien=9
where madatcho=6
commit
Trang 26select Madatcho,tongtien
from PhieuDatCho with(UPDLOCK)
where madatcho=6
commit
begintranupdate phieudatcho
set tongtien=9
where madatcho=6
commit
Nhận xét Với mức cô lập 3 theo em là hợp lí nhất có thể, đã khắc phục
được hiện tượng lost update
Áp dụng cách khóa đó theo em là hợp lí vì nó chỉ khóa dòng nó
đang đọc đối với các lệnh ghi (update, delete) còn lại việc thao
tác đọc chung dữ liệu hay thao tác ở dòng khác là được chấp nhận
TestCase02 Tên lỗi : mất dữ liệu cập nhật
Tình huống gây ra lỗi
Hai giao tác cùng thực hiện trên đơn vị dữ liệu là chitietdatcho: T1 thêm một dòng dữ liệu , T2 cập nhật chitietdatcho trong cùngmột thời điểm,sau đó T1 đọc lại thì giá trị không khớp với dữ liệu đang có
Hoạt động của các store procedure trước khi sửa lỗi
Trang 27insertinto Chitietdatcho
(MaCTDC,Soluongdat)values(6,5)
Chỉnh mức cô lập thành mức REPEATABLE READ (mức 3)
cho giao tác T1, vì ở mức cô lập này sẽ giúp tránh được hiện tượng lỗi trên
Hoạt động của các store procedure sau khi đã sửa lỗi
T1 (isolation level REPEATABLE READ) T2
begintran
set tran isolation level REPEATABLE
READ
insertinto Chitietdatcho
(MaCTDC,Soluongdat)values(6,5)
set soluongdat=0
where MaCTDC=6
rollback
commit
Trang 286Cách giải quyết sử dụng
insertinto Chitietdatcho
(MaCTDC,Soluongdat)values(6,5)
set soluongdat=0
where MaCTDC=6
rollback
commit
Nhận xét Với mức cô lập 3 theo em là hợp lí nhất có thể, đã khắc phục
được hiện tượng lost update
Áp dụng cách khóa đó theo em là hợp lí vì nó chỉ khóa dòng nó
đang đọc đối với các lệnh ghi (update, delete) còn lại việc thao
tác đọc chung dữ liệu hay thao tác ở dòng khác là được chấp nhận
TestCase0
3 Tên lỗi : bóng ma
Tình huống gây ra lỗi
Hai giao tác cùng thực hiện trên đơn vị dữ liệu là Phieudatcho: T1 đọc lấy danh sách Phieudatcho, T2 thêm/xóa một
Phieudatcho trong cùng một thời điểm
Hoạt động của các store procedure trước khi sửa lỗi
Trang 29commit
Cách giải quyết sử dụng
mức cô lập
Chỉnh mức cô lập thành mức SERIALIZABLE (mức 4) cho
giao tác T1, vì ở mức cô lập này sẽ giúp tránh được hiện tượng Bóng Ma khi xử lý đồng thời Khi đó, hai lần đọc ở T1 sẽ cho kết quả giống nhau
Hoạt động của các store procedure sau khi đã sửa lỗi
begintran
set tran isolation level SERIALIZABLE
select *from phieudatcho
waitfor delay '00:00:05'
select *from phieudatcho
commit
begintrandeletefrom phieudatcho where
Trang 306select *from phieudatcho with(UPDLOCK)
waitfor delay '00:00:05'
select *from phieudatcho
commit
begintrandeletefrom phieudatcho where
Madatcho=1
commit
Nhận xét Với mức cô lập 4 theo em là hợp lí nhất có thể, đã khắc phục
được hiện tượng khác nhau giữa 2 lần đọc dữ liệu
Áp dụng cách khóa đó theo em là hợp lí vì nó chỉ khóa dòng nó
đang đọc đối với các lệnh ghi (update, delete) còn lại việc thao
tác đọc chung dữ liệu hay thao tác ở dòng khác là được chấp nhận
TestCase0
4 Tên lỗi : bóng ma
Tình huống gây ra lỗi
Hai giao tác cùng thực hiện trên đơn vị dữ liệu là Chitietdatcho: T1 đọc lấy danh sách Chitietdatcho, T2 thêm/xóa một
Chitietdatcho trong cùng một thời điểm
Hoạt động của các store procedure trước khi sửa lỗi
where MaCTDC=1
commit
Cách giải quyết sử dụng Chỉnh mức cô lập thành mức SERIALIZABLE (mức 4) cho
Trang 316mức cô lập giao tác T1, vì ở mức cô lập này sẽ giúp tránh được hiện tượng
Bóng Ma khi xử lý đồng thời Khi đó, hai lần đọc ở T1 sẽ cho kết quả giống nhau
Hoạt động của các store procedure sau khi đã sửa lỗi
begintran
set tran isolation level SERIALIZABLE
select *from chitietdatcho
waitfor delay '00:00:05'
select *from chitietdatcho
commit
begintrandelete chitietdatcho
where MaCTDC=1
commit
Nhận xét Với mức cô lập 4 theo em là hợp lí nhất có thể, đã khắc phục
được hiện tượng khác nhau giữa 2 lần đọc dữ liệu
Áp dụng cách khóa đó theo em là hợp lí vì nó chỉ khóa dòng nó
đang đọc đối với các lệnh ghi (update, delete) còn lại việc thao
tác đọc chung dữ liệu hay thao tác ở dòng khác là được chấp
Trang 32nhận
TestCase0
5 Tên lỗi : CONVERSION deadlock
Tình huống gây ra lỗi
Hai giao tác cùng thực hiện trên đơn vị dữ liệu là Phieudatcho: T1 thêm một dòng dữ liệu , T2 cập nhật PhieuDatCho trong cùng một thời điểm,sau đó T1 đọc lại, rồi T2 đọc lại Mà cả 2 đang ở mức cô lập 3 thì bị deadlock
Hoạt động của các store procedure trước khi sửa lỗi
T1(isolation level REPEATABLE READ) T2 (isolation level REPEATABLE READ)
READupdate phieudatcho
set tongtien=9
where madatcho=6
waitfor delay '00:00:05'select Madatcho,tongtien
from PhieuDatCho
where madatcho=6
commit
Cách giải quyết sử dụng
mức cô lập Mức cố lập vẫn như củ nhưng thêm lệnh
with(readuncommitted) sau lệnh select như sau
Hoạt động của các store procedure sau khi đã sửa lỗi
T1 (isolation level REPEATABLE READ) T2 (isolation level REPEATABLE READ)
begintran
Trang 336set tran isolation level REPEATABLE
READupdate phieudatcho
set tongtien=9
where madatcho=6
waitfor delay '00:00:05'select Madatcho,tongtien
from PhieuDatCho
with(readuncommitted)where madatcho=6
commit
Nhận xét Với mức cô lập 3 cộng với câu lệnh trên theo em là hợp lí nhất
có thể, đã khắc phục được hiện tượng deadlock này
TestCase0
6 Tên lỗi : CONVERSION deadlock
Tình huống gây ra lỗi
Hai giao tác cùng thực hiện trên đơn vị dữ liệu là ChiTietdatcho: T1 thêm một dòng dữ liệu , T2 cập nhật ChiTietdatcho trong cùng một thời điểm,sau đó T1 đọc lại, rồi T2 đọc lại Mà cả 2 đang ở mức cô lập 3 thì bị deadlock
Hoạt động của các store procedure trước khi sửa lỗi
T1(isolation level REPEATABLE READ) T2 (isolation level REPEATABLE READ)
Trang 34mức cô lập Mức cố lập vẫn như củ nhưng thêm lệnh
with(readuncommitted) sau lệnh select như sau
Hoạt động của các store procedure sau khi đã sửa lỗi
T1 (isolation level REPEATABLE READ) T2 (isolation level REPEATABLE READ)
READupdate ChiTietdatcho
Trang 356 from ChiTietdatcho
with(readuncommitted)where MaCTDC=6
commit
Nhận xét Với mức cô lập 3 cộng với câu lệnh trên theo em là hợp lí nhất
có thể, đã khắc phục được hiện tượng deadlock này
12. Màn hình Thông Tin Ga:
5.1 Chức năng:
Trang 367 Tên lỗi : không đọc lại được dữ liệu
Tình huống gây ra lỗi
Hai giao tác cùng thực hiện trên đơn vị dữ liệu là Chuyến tàu: T1 liệt kê những thông tin của Chuyến tàu và số lượng vé hiện chưa được mua của một Chuyến tàu, T2 cập nhật Chuyến tàu trong cùng một thời điểm
Hoạt động của các store procedure trước khi sửa lỗi
Chỉnh mức cô lập thành mức REPEATABLE READ (mức 3)
cho giao tác T1, vì ở mức cô lập này sẽ giúp tránh được hiện tượng không đọc lại được dữ liệu khi xử lý đồng thời
Hoạt động của các store procedure sau khi đã sửa lỗi
T1 (isolation level REPEATABLE READ) T2
Trang 37set tran isolation level REPEATABLE
Hoạt động của các store procedure sau khi đã sửa lỗi
set TongSoGhe=0
where machuyen<3
commit
Nhận xét Với mức cô lập 3 theo em là hợp lí nhất có thể, đã khắc phục
được hiện tượng khác nhau giữa 2 lần đọc dữ liệu
Áp dụng cách khóa đó theo em là hợp lí vì nó chỉ khóa dòng nó
Trang 38đang đọc đối với các lệnh ghi (update, delete) còn lại việc thao
tác đọc chung dữ liệu hay thao tác ở dòng khác là được chấp nhận
13. Màn hình Thay Đổi Thông Tin Ga
6.1 Chức năng:
− Khi bạn muốn thêm mới một ga nào đó thì bạn nhập các thông tin cần thiết vào các
textbox sau đó nhấp vào nút Thêm Ga
− Chọn Mã ga mà bạn muốn xóa sau đó nhấp nút Xóa Ga Khi đó ga đó sẽ bị xóa khỏi
CSDL
6.2 Đụng độ:
TestCase 08 Tên lỗi : Bóng ma
Tình huống gây ra lỗi Khi một người đang xem danh sách các ga của một chuyến tàu Y
thì giao tác thêm ga của chuyến tàu này ghi xuống làm cho khách hàng sau khi đọc lại thì thấy thông tin ga của chuyến tàu này thay