Đề tài Hệ thống quản lý phần cứng máy tính áp dụng cho các cơ quan trường học

TRƯỜNG ĐẠI HỌC BÀ RỊA VŨNG TÀU VIỆN CÔNG NGHỆ THÔNG TIN – ĐIỆN – ĐIỆN TỬ NGÀNH CÔNG NGHỆ THÔNG TIN TRÌNH ĐỘ ĐÀO TẠO: ĐẠI HỌC ĐỀ TÀI: Hệ thống quản lý phần cứng máy tính áp dụng cho các cơ quan trường học GIẢNG VIÊN HƯỚNG DẪN: TS. PHAN NGỌC HOÀNG SINH VIÊN THỰC HIỆN: LÊ ĐỨC ANH TUẤN LỚP: DH15MT2 MSSV: 15032304 Vũng tàu, tháng 6 năm 2019. LỜI CẢM ƠN Hệ thống quản lý phần cứng máy tính áp dụng cho các cơ quan trường học là nội dung tôi chọn sau 4 năm theo học Công

pdf193 trang | Chia sẻ: huong20 | Ngày: 07/01/2022 | Lượt xem: 287 | Lượt tải: 0download
Tóm tắt tài liệu Đề tài Hệ thống quản lý phần cứng máy tính áp dụng cho các cơ quan trường học, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
nghệ Thông tin chuyên ngành Kỹ Thuật Máy Tính tại trường Đại học Bà Rịa – Vũng Tàu. Để hoàn thành thành quá trình nghiên cứu và hoàn thiện luận văn này, lời đầu tiên tôi xin chân thành cảm ơn sâu sắc đến thầy Phan Ngọc Hoàng của Viện Công nghệ Thông tin – Điện – Điện tử. Thầy đã trực tiếp chỉ bảo và hướng dẫn tôi trong suốt quá trình nghiên cứu để tôi có thể hoàn thiện luận văn này. Tôi cũng xin cảm ơn thầy Cao Quang Tín thuộc trung tâm Công nghệ Thông tin Trường Đại học Bà Rịa – Vũng Tàu đã phác họa ý tưởng và hướng dẫn tôi những bước đầu tiên của đề tài này. Ngoài ra, tôi xin cảm ơn tất cả các thầy cô thuộc viện Công nghệ Thông tin – Điện – Điện tử. Kho kiến thức quý giá và tinh thần tiếp lửa tràn đầy nhiệt huyết của các thầy cô có lẽ là thứ quý giá nhất tôi nhận được trong 4 năm học tập tại Trường Đại học Bà Rịa – Vũng Tàu. Nhân dịp này, tôi cũng xin cảm ơn Viện Công nghệ Thông tin – Điện – Điện tử, Trường Đại học Bà Rịa – Vũng Tàu, lãnh đạo và các anh chị đã tạo điều kiện và thời gian cho tôi trong suốt quá trình học tập và nghiên cứu. Một lần nữa, tôi xin trân trọng cảm ơn. 2 LỜI CAM ĐOAN Tôi xin cam đoan: 1 Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của thầy Phan Ngọc Hoàng. 2 Mọi tham khảo dùng trong luận văn đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố. 3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, tôi xin chịu hoàn toàn trách nhiệm. Sinh viên Lê Đức Anh Tuấn 3 Thuật ngữ, ký hiệu và chữ viết tắt CSDL : Cơ sở dữ liệu. [PK] : Primary key, khóa chính của bảng trong CSDL. Phòng máy : Phòng có sử dụng máy tính. Người dùng : Các cá nhân có quyền đăng nhập vào hệ thống nói chung. Người sử dụng : Những người dùng hệ thống cấp thấp không có quyền quản trị. Nhân viên IT : Nhân viên làm việc trong hệ thống, được cấp một số quyền quản trị nhất định. 4 MỤC LỤC I. Đặt vấn đề ............................................................................................................ 8 II. Giải quyết vấn đề .............................................................................................. 9 III. Thực hiện đề tài .............................................................................................. 11 3.1. Thiết kế xây dựng CSDL ............................................................................ 11 3.1.1. Các đối tượng trong phạm vi làm việc.................................................. 11 3.1.2. Thiết kế cấu trúc cơ sở dữ liệu .............................................................. 12 3.1.2.1. Thông tin máy tính ......................................................................... 12 3.1.2.2. Thông tin linh kiện đã được lắp đặt máy tính ................................ 13 3.1.2.3. Thông tin phần cứng ....................................................................... 15 3.1.2.4. Thông tin người dùng ..................................................................... 17 3.1.2.5. Lịch sử cập nhật thông tin. ............................................................. 19 3.1.2.6. Thông tin phòng máy ...................................................................... 21 3.1.2.7. Thông tin Báo cáo người dùng ....................................................... 22 3.1.3. Phân tích thiết kế hệ thống .................................................................... 24 3.1.4. Quan hệ của các nhóm đối tượng thao tác ............................................ 27 3.1.5. Sơ đồ trang Web ................................................................................... 27 3.2. Thiết kế - Xây dựng trang Web ..................................................................... 29 3.2.1. Chức năng đăng nhập/Đăng xuất ............................................................ 33 3.2.2. Trang chủ Website ................................................................................... 34 3.2.2.1. Trang chủ của nhân viên IT và quản trị viên .................................... 34 3.2.2.2. Trang chủ của người dùng ................................................................. 35 3.2.3. Chức năng tìm kiếm – quản lý máy tính ................................................. 36 3.2.4. Chức năng thêm mới máy tính ................................................................ 42 3.2.5. Chức năng theo dõi lịch sử cập nhật hệ thống ........................................ 44 3.2.6. Chức năng Báo cáo vấn đề và Phản hồi báo cáo. .................................... 45 3.2.7. Chức năng Quản lý phần cứng ................................................................ 53 3.2.8. Chức năng Quản lý loại phần cứng – Hãng sản xuất .............................. 57 3.2.9. Chức năng Quản lý phòng máy ............................................................... 59 3.2.10. Chức năng quản lý người dùng ............................................................. 60 5 3.2.11. Chức năng quản lý tài khoản cá nhân ....................................................62 IV. Kết quả nghiên cứu .........................................................................................63 V. Tài liệu tham khảo ...............................................................................................64 Phụ lục: Code dùng trong chương trình ...................................................................67 1.Lớp DataAcessLayer .........................................................................................67 1.1. Dataprovider.cs ...........................................................................................67 1.2. Maytinh.cs ..................................................................................................68 1.3 Program.cs ...................................................................................................71 1.4 ThaoTacNguoiDung_DAO.cs .....................................................................71 1.5 ThongTinMayTinh_DAO.cs .......................................................................72 2. Lớp DataTransferObject .................................................................................73 2.1 Program.cs ...................................................................................................73 3. Lớp BusinessLogicLayer ................................................................................74 3.1 LichSuMayTinh.cs .......................................................................................74 3.2 Maytinh_BUS.cs ..........................................................................................76 3.9 User.cs........................................................................................................104 4. Lớp PresentationLayer .................................................................................105 4.1 Sitemaster.master .......................................................................................105 4.1.1 StyleMaster.Master.cs .........................................................................107 4.2 User.Master ................................................................................................108 4.2.1 User.Master.cs .....................................................................................110 4.3 TrangChu.aspx ...........................................................................................110 4.3.1 Trangchu.aspx.cs .................................................................................114 4.4 Quanlymaytinh.aspx ..................................................................................116 4.4.1 Quanlymaytinh.aspx.cs........................................................................118 4.5 ChinhSuaMayTinh.aspx ............................................................................120 4.5.1 ChinhSuaMayTinh.aspx.cs ..................................................................123 4.6 LichSuCapNhatMayTinh.aspx ..................................................................131 4.6.1 LichSuCapNhatMayTinh.aspx.cs ........................................................133 4.8 ChinhSuaPhanCung.aspx ..........................................................................139 4.8.1 ChinhSuaPhanCung.aspx.cs ................................................................140 6 4.9 ChiTietBaoCao.aspx .................................................................................. 142 4.9.1 ChiTietBaoCao.aspx.cs ....................................................................... 145 4.10 DangNhap.aspx ....................................................................................... 148 4.10.1 DangNhap.aspx.cs ............................................................................. 151 4.11 Logout.aspx ............................................................................................. 152 4.11.1 Logout.aspx.cs ................................................................................... 152 4.12 QuanLyLoaiPhanCung.aspx .................................................................... 153 4.12.1 QuanLyLoaiPhanCung.aspx.cs ......................................................... 155 4.13 QuanLyNguoiDung.aspx ......................................................................... 157 4.13.1 QuanLyNguoiDung.aspx.cs .............................................................. 160 4.14 QuanLyPhanCung.aspx ........................................................................... 165 4.15 Quanlyphongmay.aspx ............................................................................ 171 4.15.1 Quanlyphongmay.aspx.cs .................................................................. 172 4.16 Taikhoancanhan.aspx .............................................................................. 174 4.16.1 Taikhoancanhan.aspx.cs .................................................................... 176 4.17 Taikhoanuser.aspx ................................................................................... 177 4.17.1 Taikhoanuser.aspx.cs ........................................................................ 178 4.18 ThemMoiBaoCao.aspx ............................................................................ 179 4.18.1 ThemMoiBaoCao.aspx.cs ................................................................. 180 4.19 ThemMoiMayTinh.aspx .......................................................................... 180 4.19.1 ThemMoiMayTinh.aspx.cs ............................................................... 181 4.20 ThongBao.aspx ........................................................................................ 182 4.20.1 ThongBao.aspx.cs ............................................................................. 183 4.21 UserChiTietBaoCao.aspx ........................................................................ 185 4.21.1 UserChiTietBaoCao.aspx.cs ................................................................. 186 4.22 UserThongBao.aspx ................................................................................ 189 4.22.1 UserThongBao.aspx.cs ...................................................................... 190 4.23 UserTrangChu.aspx ................................................................................. 192 4.23.1 UserTrangChu.aspx.cs ...................................................................... 193 7 Lời nói đầu I. Đặt vấn đề Trên tinh thần đổi mới căn bản, toàn tiện nền giáo dục Việt Nam, báo cáo chính trị của Ban chấp hành Trung ương Đảng khóa X đã chỉ ra: « Tiếp tục phát triển và nâng cấp cơ sở vật chất - kỹ thuật cho các cơ sở giáo dục, đào tạo. Đầu tư hợp lý, có hiệu quả xây dựng một số cơ sở giáo dục, đào tạo đạt trình độ quốc tế. ». Cùng với những thay đổi căn bản về nội dung chương trình và phương pháp dạy học, phát triển và nâng cấp cơ sở vật chất sẽ là nhiệm vụ then chốt trong thời gian sắp tới của toàn bộ ngành Giáo dục. Do đó, có thể thấy rằng Cơ sở vật chất của trường học sẽ là một yếu tố rất quan trọng trong quá trình đảm bảo và nâng cao nội dung chất lượng giảng dạy của nhà trường. Hiểu rõ điều đó, Trường Đại học Bà Rịa – Vũng Tàu đã áp dụng nhiều biện pháp quản lý Cơ sở vật chất trong thời gian qua, trong đó có hệ thống phần mềm quản lý cơ sở vật chất Bước đầu, phần mềm đã nhận được phản hồi tốt và nâng cao chất lượng quản lý cơ sở vật chất trong nhà trường. Bên cạnh đó, có một số nhóm đối tượng đặc thù mà những phần mềm quản lý cơ sở vật chất chung chưa thể kiểm soát chặt chẽ, tiêu biểu cho nhóm đối tượng này là Máy vi tính. Bước vào thời đại 4.0, máy vi tính là công cụ quan trọng trong gần như mọi hoạt động của xã hội nói chung và trường học nói riêng. Đại học Bà Rịa – Vũng Tàu cũng không ngoại lệ. Kể từ khi thành lập đến nay, nhà trường luôn cố gắng đưa công nghệ vào cuộc sống hằng ngày của sinh viên và giảng viên. Chúng ta có thể kể đến một số công cụ rất mạnh mà nhà trường đã sử dụng như Cổng thông tin điện tử cho sinh viên tại địa chỉ 8 sinhvien.bvu.edu.vn, cổng thông tin cho từng khoa cũng như website riêng cho từng giảng viên. Những tiện ích vô cùng thực tế này đã tiết kiệm được rất nhiều thời gian và công sức cho cả sinh viên lẫn giảng viên. Đi cùng tiện ích này sẽ là một lượng lớn máy tính được sử dụng trong phạm vi nhà trường. Do được triển khai đầu tư vào những thời điểm khác nhau trải dài từ lúc trường Đại học Bà Rịa – Vũng Tàu vừa thành lập đến nay, các máy tính này có chất lượng không đồng đều, tạo nên nhiều bất cập và khó khăn trong công tác quản lý. Các phần mềm quản lý cơ sở vật chất thông thường mới chỉ có khả năng kiểm soát đến từng đầu máy tính chứ chưa thể đi sâu vào quản lý các thành phần bên trong như bộ nhớ truy xuất ngẫu nhiên (RAM), vi xử lí trung tâm (CPU) hay các thành phần khác. Xuất phát từ thực tiễn này, tôi đã chọn và nghiên cứu đề tài Hệ thống quản lý phần cứng máy tính áp dụng cho các cơ quan trường học, áp dụng đầu tiên tại trường Đại học Bà Rịa – Vũng Tàu. II. Giải quyết vấn đề Mục tiêu chính của đề tài hướng đến việc xây dựng ứng dụng Web hỗ trợ khả năng quản lý các máy tính đang hoạt động trong phạm vi Trường Đại học Bà Rịa – Vũng Tàu. Không chỉ vậy, ứng dụng web này cũng cần phải sở hữu khả năng sửa đổi, nâng cấp hệ thống dễ dàng trong tương lai. Trang Web sẽ cung cấp cho giảng viên, nhân viên IT và quản trị viên trang web cái nhìn bao quát về hệ thống máy tính đang hoạt động trong nhà trường. Do đó, trang Web sẽ cung cấp cho người dùng những tính năng chính sau : • Báo cáo lỗi từ phía người dùng và khả năng phản hồi trực tuyến của nhân viên IT cũng như quản trị viên. • Khả năng quản lý máy tính đến mức phần cứng cũng như quản lý các loại phần cứng, hãng sản xuất phần cứng. 9 • Theo dõi lịch sử cập nhật của từng máy trên hệ thống, theo dõi quá trình hệ thống làm việc. • Thêm mới, chỉnh sửa, xóa từng máy tính cũng như linh kiện bên trong máy tính. • Hiển thị, tìm kiếm, lọc kết quả tìm kiếm máy tính cũng như phần cứng máy tính. • Quản lý hệ thống theo từng cơ sở và phòng máy. • Trang trợ giúp cho người sử dụng. Để thực hiện mục tiêu trên, đề tài sẽ tiến hành nghiên cứu xây dựng trang Web quản lý hệ thống máy tính BVU phù hợp với : • Công nghệ đang được sử dụng rộng rãi. • Yêu cầu thực tiễn của công việc quản lý hệ thống máy tính. • Nhu cầu thẩm mỹ của người sử dụng. Ngoài ra, trang Web sẽ có thể phục vụ thêm nhiều chức năng phục vụ công tác quản lý máy tính như : • Theo dõi quá trình cập nhật thông tin của mọi thành phần dữ liệu trong hệ thống • Cung cấp thông tin về các thành phần linh kiện có mặt bên trong máy tính 10 III. Thực hiện đề tài 3.1. Thiết kế xây dựng CSDL Công việc chính của phần thiết kế CSDL nhằm thực hiện nhiệm vụ ghi nhận và phân loại dữ liệu đầu vào của hệ thống máy tính mà trường Đại học Bà Rịa – Vũng Tàu đang sử dụng để lưu trữ vào cơ sở dữ liệu đám mây phục vụ cho công tác quản lý. 3.1.1. Các đối tượng trong phạm vi làm việc Theo khảo sát về nhiệm vụ quản lý máy tính, các đối tượng và nhóm đối tượng chính mà chương trình sẽ phải làm việc cùng gồm có : a) Máy tính cá nhân - Lưu trữ thông tin sơ bộ về máy tính : Tên máy, phòng máy, ngày thêm mới vào hệ thống. - Lưu trữ thông tin chi tiết về máy tính : Các phần cứng đang có trong máy, trạng thái hoạt động, lịch sử thay đổi của máy tính. - Các máy tính sẽ bao gồm nhiều phần cứng khác nhau. Các phần cứng này sẽ có giới hạn nhất định về số lượng được lắp ráp trong từng máy. b) Hệ thống phần cứng - Lưu trữ thông tin về những dòng phần cứng mà nhà trường đang sử dụng. Ghi nhận về thời gian bắt đầu đưa vào sử dụng, số lượng, chi tiết thành phần,. - Lưu trữ thông tin về những phần cứng đang được sử dụng trong từng máy tính, thời gian bắt đầu sử dụng, người sử dụng, trạng thái hoạt động hiện tại, c) Cơ sở vật chất - Lưu trữ thông tin về những phòng máy đang được nhà trường sử dụng. Ghi nhận những thay đổi đã và sẽ xảy ra của những máy tính có trong phòng máy. 11 - Lưu trữ thông tin về vị trí phòng máy, ngày đi vào hoạt động, trạng thái hoạt động của phòng máy. 3.1.2. Thiết kế cấu trúc cơ sở dữ liệu 3.1.2.1. Thông tin máy tính Để tiến hành quản lý một cách hiệu quả, các máy tính được phân biệt với nhau bằng mã số id. Các mã id này là độc nhất, không trùng hợp. Ngoài ra, thông tin máy tính cơ bản cũng bao gồm tên máy, ngày đăng ký vào hệ thống, người đăng ký vào hệ thống, vị trí máy tính (nằm ở phòng máy nào) và trạng thái máy tính hiện tại. Các thông tin cần lưu trữ : • Tên máy tính : Tên của máy tính. Các máy tính khác nhau được phân biệt qua mã định danh. Mã định danh do hệ thống tự xử lí, người dùng chỉ thao tác với tên máy tính. • Vị trí hiện tại của máy tính : Là tài sản của nhà trường, mỗi máy tính cần được bố trí trong một phòng máy/phòng làm việc nhất định. Do đó, máy tính sẽ được gán cùng phòng máy để tiện cho việc quản lý. - Vị trí hiện tại của máy tính được biểu diễn bằng mã số của phòng máy/phòng làm việc mà máy tính đó đang được đặt vào. - Thông tin cơ sở được gắn liền với thông tin phòng máy. Do đó, không cần lưu trữ thông tin cơ sở chung với thông tin máy tính. • Thời gian đăng ký máy tính : Đánh dấu thời gian máy tính đang làm việc bắt đầu tham gia vào hệ thống. - Thời gian máy tính bắt đầu tham gia vào hệ thống được tính bằng thời gian mã định danh của máy tính xuất hiện trên hệ thống. - Thời gian đăng ký máy tính được ghi lại theo định dạng : yyyy-MM- dd HH:mm:ss phù hợp với kiểu dữ liệu DATETIME của hệ quản trị CSDL MySQL. 12 • Người đăng ký máy tính vào hệ thống : Người thêm mới máy tính vào hệ thống, dùng cho công tác quản lý. - Mỗi máy tính chỉ có duy nhất một người đăng ký và không thay đổi trong suốt quá trình hoạt động của hệ thống. - Người đăng ký máy tính được ghi nhận ngay từ lúc máy tính có mã định danh. Dựa vào những yêu cầu trên, thông tin cơ bản về máy tính có thể được biểu diễn trong một bảng của CSDL như sau : Bảng 1. Cấu trúc bảng lưu trữ thông tin cơ bản của máy tính Tên trường Giải thích nội dung [PK] idMay Đánh số id cho từng máy tính Tenmay Tên của máy tính Status Trạng thái hoạt động của máy tính idPhong Mã định danh của phòng máy chứa máy tính đang thao tác ThoiGianThemMoi Thời gian máy tính được đăng ký vào hệ thống NguoiThemMoi Người dùng đăng ký máy vào hệ thống 3.1.2.2. Thông tin linh kiện đã được lắp đặt máy tính Trên thực tế, mỗi máy tính có thể có nhiều linh kiện khác nhau và không giống nhau về những loại phần cứng mà chúng được trang bị. Chẳng hạn, cùng một tổng dung lượng RAM 4 GB, máy tính A có thể sử dụng 4 thanh RAM 1 GB còn máy tính B sử dụng 2 thanh RAM 2 GB. Do đó, hệ thống sẽ lưu trữ thông tin của tất cả các phần cứng được sử dụng trong tất cả các máy tính. Trong quá trình truy vấn dữ liệu, tiến hành đối chiếu bảng thông tin linh kiện với bảng Thông tin phần cứng (Bảng 3) và bảng Thông tin máy tính (Bảng 1) trong quá trình sử dụng sẽ là biện pháp tốt nhất. Các thông tin cần lưu trữ : 13 • Máy tính sử dụng phần cứng : Mỗi máy tính lại có một cách lắp đặt linh kiện khác nhau. Do đó, cần lưu lại mã định danh của máy tính để phân biệt. - Một số loại phần cứng có thể được lắp với số lượng nhiều hơn 1 trên máy tính. Vì vậy, mã định danh của máy tính không thể được dùng như cột ID của bảng. • Loại phần cứng : Thông tin cụ thể về linh kiện được lắp đặt trong máy tính. Thông tin này được lấy trực tiếp từ cơ sở dữ liệu của chương trình. • Thời gian thêm mới linh kiện : Được ghi lại theo định dạng : yyyy- MM-dd HH:mm:ss phù hợp với kiểu dữ liệu DATETIME của hệ quản trị CSDL MySQL. - Thời gian thêm mới linh kiện được tính theo thời gian cập nhật vào hệ thống, không phải thời gian lắp đặt thực tế của linh kiện. • Người thêm mới phần cứng : Người thêm mới máy tính vào hệ thống, dùng cho công tác quản lý. - Người đăng ký máy tính được ghi nhận từ lúc linh kiện có mã định danh. Dựa vào yêu cầu trên, thông tin về những phần cứng được lắp đặt trong máy tính có thể được biểu diễn trong bảng của CSDL như sau : Bảng 2. Cấu trúc bảng lưu trữ thông tin phần cứng máy tính Tên trường Giải thích nội dung [PK] id Mã định danh cho linh kiện hiện tại đang thao tác, dùng để liên kết giữa máy tính và phần cứng. idMayTinh Mã định danh của máy tính mà linh kiện này đang lắp vào. idPhanCung Mã số định danh của loại linh kiện đang thao tác, dùng để tham chiếu qua bảng Thông tin phần cứng (Bảng 3) 14 NgayThemMoi Ngày thêm mới phần cứng vào máy tính. NguoiThemMoi Người thêm mới phần cứng. 3.1.2.3. Thông tin phần cứng Mỗi kiểu phần cứng sẽ thuộc một loại phần cứng xác định được tham chiếu bằng bảng Loại phần cứng (Bảng 4). Ngoài ra, mỗi kiểu phần cứng sẽ có một nhà sản xuất xác định (được tham chiếu qua bảng 5) và hình ảnh minh họa đi kèm. Các thông tin cần lưu trữ : • Tên của kiểu phẩn cứng : • Nhà sản xuất : Được tham chiếu trên dữ liệu về các nhà sản xuất phần cứng đang có trong hệ thống (Bảng 5). Mỗi kiểu phần cứng chỉ có một nhà sản xuất xác định. • Thời gian cập nhật : Được ghi lại theo định dạng : yyyy-MM-dd HH:mm:ss phù hợp với kiểu dữ liệu DATETIME của hệ quản trị CSDL MySQL. - Thời gian cập nhật được xác định theo thời gian mà kiểu phần cứng được đăng ký lên hệ thống. • Loại phần cứng : Được tham chiếu trên dữ liệu về loại phần cứng đang có trên hệ thống (Bảng 4). Mỗi kiểu phần cứng chỉ thuộc một loại phần cứng xác định. • Hình ảnh : Đường dẫn đến hình ảnh minh họa của kiểu phần cứng. • Mô tả phần cứng : Đưa ra mô tả chi tiết về kiểu phần cứng. • Trạng thái : Trạng thái hoạt động của phần cứng trong hệ thống. - Phần cứng không hoạt động sẽ không xuất hiện trong các tùy chọn thêm mới phần cứng cũng như chỉnh sửa phần cứng. Tuy nhiên, những máy tính đã được lắp đặt phần cứng này vẫn sẽ nhìn thấy thông tin như bình thường. 15 Dựa vào các yêu cầu trên, chúng ta có thể thành lập bảng lưu trữ thông tin của các linh kiện máy tính vào cơ sở dữ liệu như sau : Bảng 3. Cấu trúc bảng lưu trữ thông tin kiểu phần cứng Tên trường Giải thích nội dung [PK] Mã định danh của kiểu phần cứng idphancung TenPhanCung Tên gọi của kiểu phần cứng NhaSanXuat Mã định danh của nhà sản xuất phần cứng NgayCapNhat Thời gian cập nhật kiểu phần cứng vào hệ thống LoaiPhanCung Mã định danh của loại phần cứng HinhAnh Đường dẫn đến hình ảnh minh họa của phần cứng. MoTa Mô tả về phần cứng. TrangThai Trạng thái hiện tại của phần cứng Tuy có nhiều kiểu phần cứng nhưng chỉ có một số loại phần cứng nhất định có thể được gắn vào máy tính và mỗi máy tính cũng chỉ có khả năng gắn một lượng xác định các thiết bị cùng loại vào trong cùng một thời điểm. Do đó, chúng ta cần lưu trữ những thông tin sau về loại phần cứng : • Tên loại phần cứng : Giúp người dùng phân biệt dễ dàng từng loại phần cứng • Giới hạn số lượng : Số lượng phần cứng tối đa cùng một loại có thể được lắp đặt trong máy tính. - Các phần cứng khác kiểu nhưng cùng loại sẽ được hệ thống tính chung. Vì vậy, chúng ta có bảng sau để lưu trữ thông tin theo yêu cầu : 16 Bảng 4. Cấu trúc bảng lưu trữ thông tin Loại phần cứng Tên trường Giải thích nội dung [PK] Mã định danh của loại phần cứng idLoaiPhanCung TenLoaiPhanCung Tên của loại phần cứng GioiHanSoLuong Giới hạn số lượng của những linh kiện cùng loại trong cùng một máy tính. TrangThai Trạng thái hiện tại của loại phần cứng Ngoài ra, thông tin về nhà sản xuất phần cứng cũng là một nhóm dữ liệu cần được lưu trữ. Chúng ta có bảng sau dùng để lưu trữ thông tin nhà sản xuất phần cứng : Bảng 5. Cấu trúc bảng lưu trữ thông tin nhà sản xuất Tên trường Giải thích nội dung [PK] Mã định danh của nhà sản xuất idNhaSanXuat TenNhaSanXuat Tên gọi của nhà sản xuất TrangThai Trạng thái hiện tại của nhà sản xuất 3.1.2.4. Thông tin người dùng Với 3 nhóm người dùng : Quản trị viên, kỹ thuật viên và giảng viên, chúng ta cần có các thông tin đăng nhập cơ bản như tài khoản mật khẩu, thời gian bắt đầu gia nhập hệ thống và quan trọng nhất là thông tin về vai trò của user trong hệ thống. Do đó, chúng ta cần lưu trữ những thông tin sau : • Tên đăng nhập : Tên đăng nhập của người dùng. Mỗi một người dùng sẽ có một tên đăng nhập duy nhất trên hệ thống và không thể trùng lặp. • Mật khẩu : Mật khẩu đăng nhập của người dùng. Mật khẩu 17 • Quyền hạn : Quyền hạn đăng nhập hệ thống của người dùng. Có 3 cấp độ quyền hạn : Người dùng, nhân viên IT và quản trị viên. - Người dùng có thể đăng nhập, xem tình trạng về tài khoản cá nhân, xem lại các báo cáo vấn đề mình đã gửi lên hệ thống, tạo mới báo cáo, xem trạng thái báo cáo, thay đổi thông tin cá nhân. - Nhân viên IT có thể đăng nhập, xem tình trạng hệ thống, thêm mới, xóa, thay thế phần cứng trong máy tính, xem thông tin về loại phần cứng – hãng sản xuất phần cứng, xem thông tin về người dùng, xem lịch sử cập nhật hệ thống, xem lịch sử cập nhật máy tính, xem những báo cáo của người dùng thuộc trách nhiệm xử lí của mình, thay đổi trạng thái của báo cáo vấn đề. - Quản trị viên là nhân sự có quyền tối đa của hệ thống. Quản trị viên có thể đăng nhập, xem tình trạng hệ thống, thêm mới máy tính, chỉnh sửa thông tin máy tính, Thêm, sửa, xóa toàn bộ các thông tin liên quan về kiểu phần cứng – loại phần cứng – hãng sản xuất phần cứng. Quản trị viên cũng có toàn quyền điều chỉnh thông tin của các người dùng trong hệ thống, có thể xem báo cáo của người dùng và chỉ thị nhân viên giải quyết vấn đề đó. Ngoài ra, quản trị viên còn có thể đóng báo cáo vấn đề đã xử lí hoàn thành. • Ngày tham gia hệ thống : Thời gian người dùng được thêm mới vào hệ thống. • Người thêm mới user : Người thêm mới người dùng vào hệ thống • Trạng thái hoạt động của người dùng : Đang hoạt động hoặc không. Nếu người dùng không hoạt động, tạm thời quyền đăng nhập hệ thống của người dùng sẽ bị khóa. Để lưu trữ những thông tin trên, chúng ta có bảng sau thoả mãn yêu cầu : 18 Bảng 6. Cấu trúc bảng lưu trữ thông tin người dùng Tên trường Giải thích nội dung [PK]idNguoiDung Mã định danh của người dùng TenDangNhap Tên đăng nhập của người dùng MatKhau Mật khẩu của người dùng Role Vai trò của người dùng trên hệ thống NgayThemMoi Thời gian người dùng tham gia vào hệ thống NguoiThemMoi Người thêm mới người dùng TrangThai Trạng thái hoạt động của người dùng Ngoài ra, chúng ta cần thêm một bảng phụ lưu giữ danh mục vai trò của người dùng trong hệ thống. Cấu trúc bảng như sau : Bảng 7. Cấu trúc bảng lưu trữ vai trò hệ thống của người dùng Tên trường Giải thích nội dung [PK]idQuyen Mã định danh của quyền TenQuyen Tên quyền người dùng 3.1.2.5. Lịch sử cập nhật thông tin. Mỗi máy tính có thể trải qua nhiều lần sửa chữa, nâng cấp với rất nhiều khác biệt về mặt phần cứng. Do đó, việc ghi nhận lại lịch sử thay đổi của từng máy tính là điều cần thiết. Để làm được việc này, chúng ta cần lưu lại những thông tin sau : • Máy tính được thay đổi : Mã định danh của máy tính thực hiện thay đổi, đối chiếu qua bảng 1. • Phần cứng được thay đổi : Mã định danh của phần cứng được thay đổi, đối chiếu qua bảng 2. • Mục đích thay đổi : Xóa, sửa, thêm mới. • Thời gian diễn ra : Thời gian diễn ra hoạt động cập nhật, được ghi nhận tại thời điểm cập nhật thông tin lên hệ thống. 19 • Người tiến hành : Người tiến hành cập nhật thông tin. Để thực hiện yêu cầu trên, chúng ta có bảng trong CSDL : Bảng 8. Cấu trúc bảng lưu trữ thông tin về lịch sử thay đổi của máy tính Tên trường Giải thích nội dung [PK]idThayDoi Mã định danh của lần thay đổi idMayTinh Mã định danh của máy tính tiến hành thay đổi idPhanCung Mã định danh của phần cứng được thay đổi GhiChu Nội dung thay đổi ThoiGian Thời gian tiến hành thay đổi NguoiThayDoi Người tiến hành thay đổi Ngoài ra, những thay đổi khác trong hệ thống cũng cần được ghi nhận lại như thêm máy tính, xóa máy tính, thêm mới người dùng, sửa đổi thông tin phần cứng, cập nhật thông tin người dùng, Để làm được việc này, chúng ta cần lưu lại những thông tin sau : • Nội dung cập nhật : Ghi nhận lại nội dung cập nhật đã được thực hiện. • Máy tính (tùy chọn) : Ghi nhận lại máy tính đã được thao tác. Tuy nhiên, không phải mọi hoạt động cập nhật hệ thống đều là hành động cập nhật máy tính. Do đó, đây chỉ là một thông tin bổ sung thêm. • Thời gian : Thời gian ............................................ . .................................................................................................................... 4. Đánh giá kết quả đề tài: . .................................................................................................................... . .................................................................................................................... . .................................................................................................................... . .................................................................................................................... . .................................................................................................................... . .................................................................................................................... Giảng viên hướng dẫn (Ký ghi rõ họ tên) 66 Phụ lục: Mã nguồn dùng trong chương trình 1.Lớp DataAcessLayer 1.1. Dataprovider.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; using System.Data; namespace DataAccessLayer { public class DataProvider { public static MySqlConnection MoKetNoi() { string connectionstring = "Server=13.67.38.34;Database= Quanlymaytinh;port=3306;User Id=bvu;password=bariavungtau; CharSet=utf8"; MySqlConnection ketnoi = new MySqlConnection(connectionstring); ketnoi.Open(); return ketnoi; } public static void DongKetNoi(MySqlConnection connection) { connection.Close(); } public static DataTable TruyVanDuLieu(string struyvan, MySqlConnection KetNoi) { MySqlDataAdapter da = new MySqlDataAdapter(struyvan, KetNoi); DataTable dt = new DataTable(); da.Fill(dt); KetNoi.Close(); return dt; } public static bool TruyVanKhongLayDuLieu(string struyvan, MySqlConnection KetNoi) { try { MySqlCommand cm = new MySqlCommand(struyvan, KetNoi); cm.ExecuteNonQuery(); KetNoi.Close(); return true; } catch (Exception) { KetNoi.Close(); return false; } } public static bool KiemTraDangNhap(string TenDangNhap, string MatKhau, MySqlConnection KetNoi) { string sTruyVan = "SELECT * FROM login WHERE tendangnhap='" + TenDangNhap + "' and matkhau='" + MatKhau + "';"; MySqlCommand KiemTra = new MySqlCommand(sTruyVan, KetNoi); MySqlDataReader res = KiemTra.ExecuteReader(); KetNoi.Close(); 67 return res.HasRows; } } } 1.2. Maytinh.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; using System.Data; using DataTransferObject; namespace DataAccessLayer { public class MayTinh_DAO { // static MySqlConnection con; public static List LayThongTinMayTinh() { string sTruyVan = "SELECT * FROM Quanlymaytinh.thongtinmaytinh;"; con = DataProvider.MoKetNoi(); DataTable dt = DataProvider.TruyVanDuLieu(sTruyVan, con); if (dt.Rows.Count == 0) { return null; } List lstThongTin = new List(); for (int i = 0; i < dt.Rows.Count; i++) { ThongTinMayTinh_DTO ThongTin = new ThongTinMayTinh_DTO(); ThongTin.SIdMay = dt.Rows[i]["idmay"].ToString(); ThongTin.SCPU = dt.Rows[i]["CPU"].ToString(); ThongTin.STenMayTinh = dt.Rows[i]["tenmaytinh"].ToString(); ThongTin.SHeDieuHanh = dt.Rows[i]["hedieuhanh"].ToString(); ThongTin.SPhienBanHeDieuHanh = dt.Rows[i]["phienbanhedieuhanh"].ToString(); ThongTin.SUser = dt.Rows[i]["User"].ToString(); lstThongTin.Add(ThongTin); } return lstThongTin; } public static bool dangnhap(string tendangnhap, string matkhau) { con = DataProvider.MoKetNoi(); return DataProvider.KiemTraDangNhap(tendangnhap, matkhau, con); } public static DataTable LayDuLieu(string queryString) { con=DataProvider.MoKetNoi(); DataTable dt = new DataTable(); dt = DataProvider.TruyVanDuLieu(queryString, con); return dt; } public static bool ChayLenhSQL(string queryString) { con = DataProvider.MoKetNoi(); return DataProvider.TruyVanKhongLayDuLieu(queryString, con); } public static bool SaoLuuPhanCung(string idphancungmaytinh) //clone phần cứng có id gốc vào bảng lịch sử thay đổi 68 { bool a; DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu("SELECT * FROM Phancungmaytinh WHERE id='" + idphancungmaytinh + "'"); if (dt.Rows.Count == 0) return false; else { string idmay; idmay = dt.Rows[0][1].ToString(); string idphancung; idphancung = dt.Rows[0][2].ToString(); a = ThongTinMayTinh_DAO.ChayLenhSQL("INSERT INTO LichSuPhanCung(idMayTinh, idPhanCung) VALUES ('" + idmay + "', '" + idphancung + "');"); return a; } } public static void CapNhatMayCuoiCungChinhSuaTrongPhong(string idmay) { string q; q = "UPDATE `Quanlymaytinh`.`PhongMay` SET `MayCapNhatCuoi` = '"+idmay+"' WHERE (`idPhongMay` = '"+idPhong(idmay)+"');"; bool a; a = MayTinh_DAO.ChayLenhSQL(q); } public static bool SaoLuuPhanCung(string idphancungmaytinh, string GhiChu, string TenNguoiSua) { CapNhatMayCuoiCungChinhSuaTrongPhong(idMay(idphancungmaytinh)); bool a; DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu("SELECT * FROM Phancungmaytinh WHERE id='" + idphancungmaytinh + "'"); if (dt.Rows.Count == 0) return false; else { string idmay; idmay = dt.Rows[0][1].ToString(); string idphancung; idphancung = dt.Rows[0][2].ToString(); a = ThongTinMayTinh_DAO.ChayLenhSQL("INSERT INTO LichSuPhanCung(idMayTinh, idPhanCung, GhiChu, NguoiThayDoi, ThoiGian) VALUES ('" + idmay + "', '" + idphancung + "', '"+GhiChu+"', '"+TenNguoiSua+"', '"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"); return a; } } public static bool XoaPhanCung(string idphancungmaytinh, string TenNguoiSua) { bool a; string query; if (SaoLuuPhanCung(idphancungmaytinh, "Xóa phần cứng", TenNguoiSua)) { query = "DELETE FROM `Quanlymaytinh`.`Phancungmaytinh` WHERE (`id` = '" + idphancungmaytinh + "'); "; a = MayTinh_DAO.ChayLenhSQL(query); return a; } else { 69 return false; } } public static bool CapNhatPhanCung(string idBangPhanCung, string idPhanCungMoi, string tennguoisua) //Cập nhật lại phần cứng được chọn, phần cứng cũ bỏ vào bảng lichsuphancung //idBangPhanCung (cột 0 của bảng) là id của tổ hợp máy tính và idphần cứng, miêu tả số thứ tự phần cứng được đăng ký trong bảng { bool a; a = MayTinh_DAO.SaoLuuPhanCung(idBangPhanCung, "Cập nhật phần cứng", tennguoisua); if (a == false) return false; else { string query; query = "UPDATE `Quanlymaytinh`.`Phancungmaytinh` SET `idphancung` = '" + idPhanCungMoi + "' WHERE (`id` = '" + idBangPhanCung + "');"; a = MayTinh_DAO.ChayLenhSQL(query); query= "UPDATE `Quanlymaytinh`.`Phancungmaytinh` SET `NguoiThemMoi` = '" + tennguoisua + "' WHERE (`id` = '" + idBangPhanCung + "');"; a = MayTinh_DAO.ChayLenhSQL(query); query = "UPDATE `Quanlymaytinh`.`Phancungmaytinh` SET `NgayThemMoi`= '" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' WHERE (`id` = '" + idBangPhanCung + "');"; a = MayTinh_DAO.ChayLenhSQL(query); return a; } } public static string idPhanCungMoiNhat() { string query = "SELECT DISTINCT id FROM Phancungmaytinh ORDER BY id desc LIMIT 1;"; DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt.Rows[0][0].ToString(); } public static bool ThemMoiPhanCung(string idMayTinh, string idPhanCungMoi, string TenNguoiThem) { bool a; string query; string formatForMySql = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); query = "INSERT INTO `Quanlymaytinh`.`Phancungmaytinh`(idmaytinh, idphancung,NgayThemMoi, NguoiThemMoi) VALUES ('" + idMayTinh + "', '" + idPhanCungMoi + "', '"+formatForMySql+"', '"+TenNguoiThem+"');"; a = MayTinh_DAO.ChayLenhSQL(query); a = SaoLuuPhanCung(idPhanCungMoiNhat(), "Thêm mới", TenNguoiThem); return a; } public static DataTable LocPhanCungTheoIdMayTinh(string idmaytinh) //Lấy tất cả các phần cứng gắn với id máy được nhập { bool a; string query; query = "SELECT * FROM Phancungmaytinh WHERE idmaytinh='" + idmaytinh + "';"; DataTable dt; dt = MayTinh_DAO.LayDuLieu(query); return dt; } 70 public static DataTable TimKiemMayTinh(string keyword) //Tìm kiếm mọi máy tính có dính đến keyword, có thể là phòng máy, cơ sở, tên máy tính,.. { string query; query = "SELECT * FROM Quanlymaytinh.maytinh, Quanlymaytinh.PhongMay, Quanlymaytinh.CoSo where Quanlymaytinh.maytinh.idPhong = Quanlymaytinh.PhongMay.idPhongMay and Quanlymaytinh.PhongMay.idCoSo=Quanlymaytinh.CoSo.idCoSo and (tenmay like '%" + keyword + "%' or TenPhongMay like '%" + keyword + "%' or TenCoSo like '%" + keyword + "%'); "; DataTable dt; dt = MayTinh_DAO.LayDuLieu(query); return dt; } public static string idPhong(string idmaytinh) { string q; DataTable dt; q = "SELECT * FROM maytinh WHERE idmay='" + idmaytinh + "';"; dt = MayTinh_DAO.LayDuLieu(q); q = dt.Rows[0]["idPhong"].ToString(); return q; } public static string idMay(string idphancung) { string q; DataTable dt; q = "SELECT * FROM Phancungmaytinh WHERE id='" + idphancung + "';"; dt = MayTinh_DAO.LayDuLieu(q); q = dt.Rows[0]["idMayTinh"].ToString(); return q; } } } 1.3 Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace DataAccessLayer { static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } 1.4 ThaoTacNguoiDung_DAO.cs using System; using System.Collections.Generic; 71 using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; using System.Data; namespace DataAccessLayer { public class ThaoTacNguoiDung_DAO { static MySqlConnection con; public static DataTable TruyVanDataTable(string querry) { con = DataProvider.MoKetNoi(); DataTable dt = new DataTable(); dt = DataProvider.TruyVanDuLieu(querry, con); return dt; } } } 1.5 ThongTinMayTinh_DAO.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; using System.Data; using DataTransferObject; namespace DataAccessLayer { public class ThongTinMayTinh_DAO { // static MySqlConnection con; public static List LayThongTinMayTinh() { string sTruyVan = "SELECT * FROM Quanlymaytinh.thongtinmaytinh;"; con = DataProvider.MoKetNoi(); DataTable dt = DataProvider.TruyVanDuLieu(sTruyVan, con); if (dt.Rows.Count == 0) { return null; } List lstThongTin = new List(); for (int i = 0; i < dt.Rows.Count; i++) { ThongTinMayTinh_DTO ThongTin = new ThongTinMayTinh_DTO(); ThongTin.SIdMay = dt.Rows[i]["idmay"].ToString(); ThongTin.SCPU = dt.Rows[i]["CPU"].ToString(); ThongTin.STenMayTinh = dt.Rows[i]["tenmaytinh"].ToString(); ThongTin.SHeDieuHanh = dt.Rows[i]["hedieuhanh"].ToString(); ThongTin.SPhienBanHeDieuHanh = dt.Rows[i]["phienbanhedieuhanh"].ToString(); ThongTin.SUser = dt.Rows[i]["User"].ToString(); lstThongTin.Add(ThongTin); } return lstThongTin; } public static bool dangnhap(string tendangnhap, string matkhau) { 72 con = DataProvider.MoKetNoi(); return DataProvider.KiemTraDangNhap(tendangnhap, matkhau, con); } public static DataTable LayDuLieu(string queryString) { con=DataProvider.MoKetNoi(); DataTable dt = new DataTable(); dt = DataProvider.TruyVanDuLieu(queryString, con); return dt; } public static bool ChayLenhSQL(string queryString) { con = DataProvider.MoKetNoi(); return DataProvider.TruyVanKhongLayDuLieu(queryString, con); } } } 2. Lớp DataTransferObject 2.1 Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace DataTransferObject { static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } 2.2 ThongTinMayTinh_DTO.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DataTransferObject { public class ThongTinMayTinh_DTO { private string sIdMay; public string SIdMay { get { return sIdMay; } set { sIdMay = value; } } private string sTenMayTinh; public string STenMayTinh 73 { get { return sTenMayTinh; } set { sTenMayTinh = value; } } private string sCPU; public string SCPU { get { return sCPU; } set { sCPU = value; } } private string sHeDieuHanh; public string SHeDieuHanh { get { return sHeDieuHanh; } set { sHeDieuHanh = value; } } private string sPhienBanHeDieuHanh; public string SPhienBanHeDieuHanh { get { return sPhienBanHeDieuHanh; } set { sPhienBanHeDieuHanh = value; } } private string sUser; public string SUser { get { return sUser; } set { sUser = value; } } } } 3. Lớp BusinessLogicLayer 3.1 LichSuMayTinh.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using DataAccessLayer; using DataTransferObject; using System.Data; namespace BusinessLogicLayer { public class LichSuMayTinh_BUS { public static DataTable LayLichSuPhanCungMayTinh(string idmay) { //bool a; DataTable dt; string query = "SELECT * FROM LichSuPhanCung WHERE idMayTinh='" + idmay + "';"; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt; } public static DataTable LoadLichSuMayTinh() { DataTable dt; string query; query = "SELECT * FROM LichSuMayTinh ORDER BY ThoiGian DESC;"; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt; 74 } public static DataTable LoadLichSuMayTinh(string idmay) { DataTable dt; string query; query = "SELECT * FROM LichSuMayTinh WHERE idMayTinh='"+idmay+ "' ORDER BY ThoiGian DESC;;"; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt; } public static bool ThemMoiLichSu(string idmaytinh, string NoiDung, string NguoiThaoTac) { string query; query = "INSERT INTO `Quanlymaytinh`.`LichSuMayTinh` (`idMayTinh`, `NoiDung`, `ThoiGian`, `NguoiThaoTac`) VALUES ('"+idmaytinh+"', '"+NoiDung+"', '"+ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "', '"+NguoiThaoTac+"');"; bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL(query); return a; } public static string TestThemMoiLichSu(string idmaytinh, string NoiDung, string NguoiThaoTac) { string query; query = "INSERT INTO `Quanlymaytinh`.`LichSuMayTinh` (`idMayTinh`, `NoiDung`, `ThoiGian`, `NguoiThaoTac`) VALUES ('" + idmaytinh + "', '" + NoiDung + "', '" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "', '" + NguoiThaoTac + "');"; return query; } public static DataTable TimKiemLichSuMayTinh(string NoiDung, string NguoiThaoTac, DateTime ThoiGianDau, DateTime ThoiGianCuoi) { string query; query = ""; DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt; } public static DataTable TimKiemLichSuMayTinh(string NoiDung, string NguoiThaoTac) { string query; query = "SELECT * FROM LichSuMayTinh WHERE LichSuMayTinh.NoiDung LIKE '%"+NoiDung+"%' and LichSuMayTinh.NguoiThaoTac='"+NguoiThaoTac+"' ORDER BY ThoiGian DESC;"; DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt; } public static DataTable TimKiemLichSuMayTinh(string NoiDung) { string query; query = "SELECT * FROM LichSuMayTinh WHERE LichSuMayTinh.NoiDung LIKE '%" + NoiDung + "%' or LichSuMayTinh.NoiDung LIKE '"+NoiDung+"%' or LichSuMayTinh.NoiDung LIKE '%"+NoiDung+"' or LichSuMayTinh.NguoiThaoTac LIKE '%" + NoiDung + "%' ORDER BY ThoiGian DESC;"; DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt; } 75 public static DataTable TimKiemLichSuMayTinh(string NoiDung, string Ngaybatdau, string Ngayketthuc) { string query; query = "SELECT * FROM LichSuMayTinh WHERE (LichSuMayTinh.NoiDung LIKE '%" + NoiDung + "%' or LichSuMayTinh.NguoiThaoTac LIKE '%" + NoiDung + "%') and LichSuMayTinh.ThoiGian BETWEEN '"+Ngaybatdau+"' AND '"+Ngayketthuc+"' ORDER BY ThoiGian DESC;"; DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt; } } } 3.2 Maytinh_BUS.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using DataAccessLayer; using DataTransferObject; using System.Data; namespace BusinessLogicLayer { public class MayTinh_BUS { public static List LayThongTin() { return ThongTinMayTinh_DAO.LayThongTinMayTinh(); } public static bool KiemTraDangNhap(string tendangnhap, string matkhau) { return ThongTinMayTinh_DAO.dangnhap(tendangnhap, matkhau); } public static DataTable LayThongTinDataTable(string querryString) { DataTable dt = new DataTable(); dt = ThongTinMayTinh_DAO.LayDuLieu(querryString); return dt; 76 } //public static bool ThemMoiPhancung(string TenPhanCung, string idNhaSanXuat, string giathanh, string idLoaiPhanCung) //{ // string queryString; // queryString = "INSERT INTO `Quanlymaytinh`.`phancung` (`tenphancung`, `nhasanxuat`, `giathanh`, `loaiphancung`) VALUES ('"+TenPhanCung+"', '"+idNhaSanXuat+"', '"+giathanh+"', '"+idLoaiPhanCung+"');"; // bool a; // a = ThongTinMayTinh_DAO.ChayLenhSQL(queryString); // return a; //} public static bool XoaMayTinh(string idmay) //Tạm thời vô hiệu hóa máy tính trong hệ thống, status=1 { string query; //query = "UPDATE `Quanlymaytinh`.`Phancungmaytinh` SET `TrangThai` = '1' WHERE (`id` = '9');"; query = "UPDATE `Quanlymaytinh`.`maytinh` SET `status` = '1' WHERE (`idmay` = '"+idmay+"');"; bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL(query); return a; } public static bool XoaMayTinh(string idmay, bool check) //Xóa hẳn máy tính, kể cả check true/false, dùng overload { string queryString; queryString = "DELETE FROM `Quanlymaytinh`.`maytinh` WHERE (`idmay` = '" + idmay + "');"; bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL(queryString); queryString = "DELETE FROM `Quanlymaytinh`.`Phancungmaytinh` WHERE (`idmaytinh` = '" + idmay+"');"; bool b; b = ThongTinMayTinh_DAO.ChayLenhSQL(queryString); return a && b; } 77 public static bool Xoamaytinh() //Xóa sạch các máy đang bị treo (status=1), cẩn thận khi dùng { string query; query = "DELETE FROM `Quanlymaytinh`.`maytinh` WHERE (status='1');"; bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL(query); return a; } public static bool CapNhatMayTinh(string idMay, string TenMay, string idPhong) { string query = "UPDATE `Quanlymaytinh`.`maytinh` SET `tenmay` = '"+TenMay+"', `idPhong` = '"+idPhong+"' WHERE (`idmay` = '"+idMay+"');"; bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL(query); return a; } public static bool CapNhatMayTinh(string idMay, string TenMay, string idPhong,string TenNguoiThayDoi) { string query = "UPDATE `Quanlymaytinh`.`maytinh` SET `tenmay` = '" + TenMay + "', `idPhong` = '" + idPhong + "' WHERE (`idmay` = '" + idMay + "');"; bool a; LichSuMayTinh_BUS.ThemMoiLichSu(idMay, "Cập nhật thông tin cho máy mang id " + idMay + " - Tên máy: " + TenMay + ", phòng máy: " + QuanLiCoSoVatChat_BUS.TenPhongMay(idPhong), TenNguoiThayDoi); a = ThongTinMayTinh_DAO.ChayLenhSQL(query); return a; } public static bool ThemMoiPhanCung (string idmaytinh, string idphancung, string TenNguoiThem) { bool a; a=MayTinh_DAO.ThemMoiPhanCung(idmaytinh, idphancung, TenNguoiThem); return a; } public static bool ThemMoiMayTinh(string TenMayTinh,string Owner) 78 { bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL("INSERT INTO maytinh(tenmay, owner) VALUES ('" + TenMayTinh + "', '" + Owner + "')"); return a; } public static bool ThemMoiMayTinh(string TenMayTinh, string owner, string idphong) { bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL("INSERT INTO `Quanlymaytinh`.`maytinh` (`tenmay`, `owner`, `idPhong`) VALUES ('" + TenMayTinh + "', '" + owner + "', '" + idphong + "');"); return a; } public static bool ThemMoiMayTinh(string TenMayTinh, string owner, string idphong, string NguoiThemMoi) { string query; query = "INSERT INTO `Quanlymaytinh`.`maytinh` (`tenmay`, `status`, `owner`, `idPhong`, `ThoiGianThemMoi`, `NguoiThemMoi`) VALUES ('" + TenMayTinh + "', 'NULL', '" + owner + "', '" + idphong + "', '" + DateTime.Now.ToString("yyyy- MM-dd HH:mm:ss") + "', '" + NguoiThemMoi + "');"; bool a; LichSuMayTinh_BUS.ThemMoiLichSu("", "Thêm mới máy tính " + TenMayTinh + " tại phòng máy " + QuanLiCoSoVatChat_BUS.TenPhongMay(idphong), NguoiThemMoi); a = ThongTinMayTinh_DAO.ChayLenhSQL(query); return a; } public static string idMayMoiNhat() { string query = "SELECT DISTINCT idmay FROM maytinh ORDER BY idmay desc LIMIT 1;"; DataTable dt = new DataTable(); dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt.Rows[0][0].ToString(); } public static bool xoaphancung(string idphancung, string TenNguoiXoa) { 79 bool a; a = MayTinh_DAO.XoaPhanCung(idphancung, TenNguoiXoa); return a; } public static bool suamaytinh(string idmay, string tenmaytinh, string Owner, string idMainboard, string idCPU, string idRAM, string idGPU, string os, string osbuild) { bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL("UPDATE thongtinmaytinh SET tenmaytinh='" + tenmaytinh + "', CPU='" + idCPU + "', hedieuhanh='" + os + "', phienbanhedieuhanh='" + osbuild + "', GPU='" + idGPU + "', RAM='" + idRAM + "', Mainboard='" + idMainboard + "' WHERE idmay='"+idmay+"';"); bool b; b = ThongTinMayTinh_DAO.ChayLenhSQL("UPDATE maytinh SET tenmay='" + tenmaytinh + "' WHERE idmay='"+idmay+"';"); return a && b; } public static DataTable LayDanhSachPhancung() { DataTable a; a = ThongTinMayTinh_DAO.LayDuLieu("SELECT * FROM phancung;"); ; return a; } public static DataTable LayDanhSachPhanCung(string idmay) //overload nhẹ tí { DataTable a; a = ThongTinMayTinh_DAO.LayDuLieu("SELECT * FROM phancung, Phancungmaytinh WHERE Phancungmaytinh.idphancung=phancung.idphancung and Phancungmaytinh.idmaytinh='"+idmay+"';"); return a; } public static DataTable LayDanhSachMayTinh() { DataTable a; a = ThongTinMayTinh_DAO.LayDuLieu("SELECT * FROM maytinh"); 80 return a; } public static DataTable TimKiemMayTinh(string keyword) { DataTable dt; dt = MayTinh_DAO.TimKiemMayTinh(keyword); return dt; } public static DataTable TimKiemMayTinh(string keyword, string idPhongMay) { DataTable dt; string query; query = "SELECT * FROM Quanlymaytinh.maytinh, Quanlymaytinh.PhongMay, Quanlymaytinh.CoSo where Quanlymaytinh.maytinh.idPhong = Quanlymaytinh.PhongMay.idPhongMay and Quanlymaytinh.PhongMay.idCoSo=Quanlymaytinh.CoSo.idCoSo and Quanlymaytinh.PhongMay.idPhongMay='"+idPhongMay+"' and (tenmay like '%" + keyword + "%' or TenPhongMay like '%" + keyword + "%' or TenCoSo like '%" + keyword + "%'); "; dt = MayTinh_DAO.LayDuLieu(query); return dt; } public static DataTable TimKiemMayTinhTheoCoSo(string idcoso) { DataTable dt; string query; query = "SELECT * FROM Quanlymaytinh.maytinh, Quanlymaytinh.PhongMay, Quanlymaytinh.CoSo where Quanlymaytinh.maytinh.idPhong = Quanlymaytinh.PhongMay.idPhongMay and Quanlymaytinh.PhongMay.idCoSo=Quanlymaytinh.CoSo.idCoSo and Quanlymaytinh.PhongMay.idCoSo='"+idcoso+"';"; dt = MayTinh_DAO.LayDuLieu(query); return dt; } public static bool CapNhatPhanCung(string idBangPhanCung, string idPhanCungMoi,string TenNguoiCapNhat) { bool a; a = MayTinh_DAO.CapNhatPhanCung(idBangPhanCung, idPhanCungMoi, TenNguoiCapNhat); 81 return a; } public static string TenMayTinh(string idmay) { DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu("SELECT * FROM maytinh WHERE idmay='" + idmay + "';"); string s; if (dt.Rows.Count>0) { s = dt.Rows[0][1].ToString(); } else s = "Trống"; return s; } public static string LayidMayTinhMoiNhatTheoCoSo(string idcoso) { DataTable dt; string query; query = "SELECT * FROM Quanlymaytinh.maytinh, Quanlymaytinh.PhongMay, Quanlymaytinh.CoSo where Quanlymaytinh.maytinh.idPhong = Quanlymaytinh.PhongMay.idPhongMay and Quanlymaytinh.PhongMay.idCoSo=Quanlymaytinh.CoSo.idCoSo and Quanlymaytinh.PhongMay.idCoSo='" + idcoso + "' order by idmay desc LIMIT 1 ;"; dt = ThongTinMayTinh_DAO.LayDuLieu(query); string idmay; idmay = dt.Rows[0][0].ToString(); return idmay; } public static string DemSoMayCuaCoSo(string idcoso) { DataTable dt; string query; query = "SELECT count(*) from Quanlymaytinh.PhongMay WHERE idCoSo='" + idcoso + "' order by idCoSo;"; dt = ThongTinMayTinh_DAO.LayDuLieu(query); 82 query = dt.Rows[0][0].ToString(); return query; } } } 3.3 Quanlybaocao.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using DataAccessLayer; using DataTransferObject; using System.Data; namespace BusinessLogicLayer { public class QuanLiBaoCao_BUS { static DataTable dt; public static bool ThemBaoCao(string TieuDeBaoCao, string NguoiBaoCao, string NoiDungBaoCao) { string query; query = "INSERT INTO `Quanlymaytinh`.`BaoCaoUser` (`TieuDeBaoCao`, `idTrangThai`, `NguoiBaoCao`, `NgayBaoCao`) VALUES ('" + TieuDeBaoCao + "', '1', '" + NguoiBaoCao + "', '" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL(query); DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu("SELECT * from BaoCaoUser order by idBaoCao desc limit 1;"); string idbaocao = dt.Rows[0]["idBaoCao"].ToString(); query = "INSERT INTO `Quanlymaytinh`.`LogBaoCao` (`idBaoCao`, `NoiDungTraoDoi`, `UserTraoDoi`, `ThoiGianBaoCao`) VALUES ('" + idbaocao + "', '" + NoiDungBaoCao + "', '" + NguoiBaoCao + "', '" + DateTime.Now.ToString("yyyy-MM- dd HH:mm:ss") + "');"; a = a && ThongTinMayTinh_DAO.ChayLenhSQL(query); return a; } public static void TraLoiBaoCao(string idBaoCao, string NoiDungTraoDoi, string NguoiTraoDoi) { string query; query = "INSERT INTO `Quanlymaytinh`.`LogBaoCao` (`idBaoCao`, `NoiDungTraoDoi`, `UserTraoDoi`, `ThoiGianBaoCao`) VALUES ('" + idBaoCao + "', '" + NoiDungTraoDoi + "', '" + NguoiTraoDoi + "', '"+ DateTime.Now.ToString("yyyy-MM- dd HH:mm:ss") + "');"; bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL(query); } public static bool HieuLucBaoCao(string idBaoCao) { string query; query = "SELECT * FROM BaoCaoUser WHERE idBaoCao='" + idBaoCao + "';"; DataTable dt; 83 dt = ThongTinMayTinh_DAO.LayDuLieu(query); query = dt.Rows[0]["idTrangThai"].ToString(); if (query != "4") return true; else return false; } public static void ThayDoiTrangThaiBaoCao(string idBaoCao, string idTrangThai) { string query; query = "UPDATE `Quanlymaytinh`.`BaoCaoUser` SET `idTrangThai` = '" + idTrangThai + "' WHERE (`idBaoCao` = '" + idBaoCao + "');"; bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL(query); } public static void DongBaoCao(string idBaoCao) { string query; query = "UPDATE `Quanlymaytinh`.`BaoCaoUser` SET `idTrangThai` = '4' WHERE (`idBaoCao` = '" + idBaoCao + "');"; bool a; a = ThongTinMayTinh_DAO.ChayLenhSQL(query); } public static DataTable LoadBaoCao() { string query; query = "SELECT * FROM Quanlymaytinh.BaoCaoUser, Quanlymaytinh.TrangThaiBaoCao where Quanlymaytinh.BaoCaoUser.idTrangThai = Quanlymaytinh.TrangThaiBaoCao.idTrangThaiBaoCao order by BaoCaoUser.idBaoCao desc; "; DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt; } public static DataTable LoadBaoCao(string idbaocao) { string query; query = "SELECT * FROM LogBaoCao WHERE idBaoCao='" + idbaocao + "';"; DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt; } public static DataTable LoadBaoCao(string tenuser, bool a) { string query; query = "SELECT * FROM Quanlymaytinh.BaoCaoUser, Quanlymaytinh.TrangThaiBaoCao where Quanlymaytinh.BaoCaoUser.idTrangThai = Quanlymaytinh.TrangThaiBaoCao.idTrangThaiBaoCao and Quanlymaytinh.BaoCaoUser.NguoiGiaiQuyet='"+tenuser+"' order by BaoCaoUser.idBaoCao desc; "; DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt; } public static DataTable LoadTrangThai() { string query; query = "SELECT * FROM TrangThaiBaoCao;"; DataTable dt; dt = ThongTinMayTinh_DAO.LayDuLieu(query); return dt; 84 } public static DataTable LoadTrangThai(bool a) { string query; query = "SELECT...d void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e) { if (e.CommandName=="Xoa") { bool a; a = QuanLiPhanCung_BUS.XoaPhanCung(e.CommandArgument.ToString(), tenuser,true); if (a) { Response.Write("alert('Cập nhật thành công')"); } else { Response.Write("alert('Cập nhật thất bại')"); } 170 dsphancung = ThongTinMayTinh_BUS.LayDanhSachPhancung(); so_trang = 1; so_trang_max = dsphancung.Rows.Count / 10 + 1; if ((dsphancung.Rows.Count % 10) == 0) so_trang_max--; SoTrangLabel.Text = "Trang " + so_trang + "/" + so_trang_max; NapLaiDanhSachTheoTrang(); } else { Response.Redirect("ChinhSuaPhanCung.aspx?id=" + e.CommandArgument.ToString()); } } } } 4.15 Quanlyphongmay.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/SiteMaster.Master" AutoEventWireup="true" CodeBehind="QuanLyPhongMay.aspx.cs" Inherits="WebApp_Quanlymaytinh.QuanLyPhongMay" %> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> Danh sách phần cứng Quản lý loại phần cứng - hãng sản xuất Quản lý phòng máy Thêm mới phòng máy Tên phòng máy <asp:TextBox ID="TextBoxTenPhongMay" CssClass="form-control" runat="server"> Cơ sở <asp:DropDownList ID="DropDownListCoSo" CssClass="form- control" runat="server"> <asp:Button ID="Button2" runat="server" CssClass="btn btn-primary" Text="Thêm mới" OnClick="Button2_Click" /> 171 Danh sách phòng máy được đăng ký Tên phòng máy Cơ sở Ngày thêm mới Người thêm mới Hành động <asp:ListView ID="ListView1" runat="server" OnItemCommand="ListView1_ItemCommand"> <asp:Label ID="Label1" runat="server" Text='<%# Eval("TenPhongMay") %>'> <asp:Label ID="Label2" runat="server" Text='<%# Eval("TenCoSo") %>'> <asp:Label ID="Label3" runat="server" Text='<%# Eval("NgayThemMoi") %>'> <asp:Label ID="Label4" runat="server" Text='<%# Eval("NguoiThemMoi") %>'> <asp:Button ID="Button1" runat="server" CssClass="btn btn-danger" Text="Xóa" CommandName="Xoa" CommandArgument='<%# Eval("idPhongMay") %>' /> <a class="page-link" runat="server" onserverclick="Unnamed_ServerClick" href="#">Trang trước <asp:Label ID="SoTrangLabel" runat="server" Text="Label"> <a class="page-link" runat="server" onserverclick="Unnamed_ServerClick1" href="#">Trang kế tiếp 4.15.1 Quanlyphongmay.aspx.cs using System; using System.Collections.Generic; using System.Linq; 172 using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using BusinessLogicLayer; namespace WebApp_Quanlymaytinh { public partial class QuanLyPhongMay : System.Web.UI.Page { public static DataTable dtPhongMay; public static DataTable dtHienThi; public static int so_trang; public static int so_trang_max; public static string user; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { user = Request.Cookies["username"].Value.ToString(); dtPhongMay = QuanLiCoSoVatChat_BUS.LoadPhongMay(); so_trang = 1; so_trang_max = dtPhongMay.Rows.Count / 10 + 1; if ((dtPhongMay.Rows.Count % 10) == 0) so_trang_max--; SoTrangLabel.Text = "Trang 1/" + so_trang_max; NapLaiTrang(); DataTable dtCoSo; dtCoSo = QuanLiCoSoVatChat_BUS.LayDanhSachCoSo(); DropDownListCoSo.DataSource = dtCoSo; DropDownListCoSo.DataValueField = "idCoSo"; DropDownListCoSo.DataTextField = "TenCoSo"; DropDownListCoSo.DataBind(); } } public static void LoadThongBaoVaoDtHienThi() { if (dtPhongMay.Rows.Count > 0) { if ((so_trang - 1) * 10 + 10 < dtPhongMay.Rows.Count) { dtHienThi = dtPhongMay.Select().Skip((so_trang - 1) * 10).Take(10).CopyToDataTable(); } else { dtHienThi = dtPhongMay.Select().Skip((so_trang - 1) * 10).Take(dtPhongMay.Rows.Count - (so_trang - 1) * 10).CopyToDataTable(); } } else { dtHienThi = null; } } public void NapLaiTrang() { LoadThongBaoVaoDtHienThi(); so_trang_max = dtPhongMay.Rows.Count / 10 + 1; if ((dtPhongMay.Rows.Count % 10) == 0) so_trang_max--; ListView1.DataSource = dtHienThi; ListView1.DataBind(); } 173 protected void Unnamed_ServerClick(object sender, EventArgs e) { if (so_trang > 1) { so_trang--; NapLaiTrang(); SoTrangLabel.Text = "Trang hiện tại: " + so_trang.ToString(); } } protected void Unnamed_ServerClick1(object sender, EventArgs e) { if (so_trang < so_trang_max) { so_trang++; NapLaiTrang(); SoTrangLabel.Text = "Trang hiện tại: " + so_trang.ToString(); } } protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e) { if (e.CommandName=="Xoa") { QuanLiCoSoVatChat_BUS.XoaPhongMay(e.CommandArgument.ToString(), user); so_trang = 1; dtPhongMay = QuanLiCoSoVatChat_BUS.LoadPhongMay(); NapLaiTrang(); } } protected void Button2_Click(object sender, EventArgs e) { QuanLiCoSoVatChat_BUS.ThemPhongMay(TextBoxTenPhongMay.Text, DropDownListCoSo.SelectedValue, user); dtPhongMay = QuanLiCoSoVatChat_BUS.LoadPhongMay(); so_trang = 1; NapLaiTrang(); } } } 4.16 Taikhoancanhan.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/SiteMaster.Master" AutoEventWireup="true" CodeBehind="TaiKhoanCaNhan.aspx.cs" Inherits="WebApp_Quanlymaytinh.TaiKhoanCaNhan" %> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> Tài khoản cá nhân Tên đăng nhập 174 <asp:Label ID="TenDangNhapLabel" runat="server" Text="Label"> Ngày đăng ký <asp:Label ID="NgayDangKyLabel" runat="server" Text="Label"> Quyền hạn <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal"> Đổi mật khẩu Đổi mật khẩu Mật khẩu cũ <asp:TextBox ID="MatKhauCuTextBox" runat="server" TextMode="Password"> Mật khẩu mới <asp:TextBox ID="MatKhauMoiTextBox" runat="server" TextMode="Password"> Nhập lại mật khẩu mới 175 <asp:TextBox ID="NhapLaiMatKhauTextBox" runat="server" TextMode="Password"> <asp:Button ID="Button1" runat="server" Text="Xác nhận" CssClass="btn btn-primary" OnClick="Button1_Click" /> <button type="button" class="btn btn-danger" data- dismiss="modal">Hủy 4.16.1 Taikhoancanhan.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using BusinessLogicLayer; namespace WebApp_Quanlymaytinh { public partial class TaiKhoanCaNhan : System.Web.UI.Page { public static string tenuser; public static DataTable thongtin; protected void Page_Load(object sender, EventArgs e) { tenuser = Request.Cookies["username"].Value.ToString(); thongtin = User_BUS.ThongTinNguoiDung(tenuser); TenDangNhapLabel.Text = thongtin.Rows[0]["tendangnhap"].ToString(); NgayDangKyLabel.Text = thongtin.Rows[0]["NgayThemMoi"].ToString(); RoleLabel.Text = thongtin.Rows[0]["role"].ToString(); } protected void Button1_Click(object sender, EventArgs e) { bool a; a = User_BUS.DoiMatKhau(tenuser, MatKhauCuTextBox.Text, MatKhauMoiTextBox.Text, NhapLaiMatKhauTextBox.Text); if (a) { Response.Write("alert('Cập nhật thành công')"); } 176 else { Response.Write("alert('Cập nhật thất bại')"); } } } } 4.17 Taikhoanuser.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/User.Master" AutoEventWireup="true" CodeBehind="TaiKhoanUser.aspx.cs" Inherits="WebApp_Quanlymaytinh.TaiKhoanUser" %> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> Tài khoản cá nhân Tên đăng nhập <asp:Label ID="TenDangNhapLabel" runat="server" Text="Label"> Ngày đăng ký <asp:Label ID="NgayDangKyLabel" runat="server" Text="Label"> Quyền hạn <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal"> Đổi mật khẩu Đổi mật khẩu 177 Mật khẩu cũ <asp:TextBox ID="MatKhauCuTextBox" runat="server" TextMode="Password"> Mật khẩu mới <asp:TextBox ID="MatKhauMoiTextBox" runat="server" TextMode="Password"> Nhập lại mật khẩu mới <asp:TextBox ID="NhapLaiMatKhauTextBox" runat="server" TextMode="Password"> <asp:Button ID="Button1" runat="server" Text="Xác nhận" CssClass="btn btn-primary" OnClick="Button1_Click" /> <button type="button" class="btn btn-danger" data- dismiss="modal">Hủy 4.17.1 Taikhoanuser.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using BusinessLogicLayer; using System.Data; namespace WebApp_Quanlymaytinh { 178 public partial class TaiKhoanUser : System.Web.UI.Page { public static string tenuser; public static DataTable thongtin; protected void Page_Load(object sender, EventArgs e) { tenuser = Request.Cookies["username"].Value.ToString(); thongtin = User_BUS.ThongTinNguoiDung(tenuser); TenDangNhapLabel.Text = thongtin.Rows[0]["tendangnhap"].ToString(); NgayDangKyLabel.Text = thongtin.Rows[0]["NgayThemMoi"].ToString(); RoleLabel.Text = thongtin.Rows[0]["role"].ToString(); } protected void Button1_Click(object sender, EventArgs e) { bool a; a = User_BUS.DoiMatKhau(tenuser, MatKhauCuTextBox.Text, MatKhauMoiTextBox.Text, NhapLaiMatKhauTextBox.Text); if (a) { Response.Write("alert('Cập nhật thành công')"); } else { Response.Write("alert('Cập nhật thất bại')"); } } } } 4.18 ThemMoiBaoCao.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/User.Master" AutoEventWireup="true" CodeBehind="ThemMoiBaoCao.aspx.cs" Inherits="WebApp_Quanlymaytinh.ThemMoiBaoCao" %> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> Thêm mới báo cáo Tiêu đề <asp:TextBox ID="TextBox1" CssClass="form-control" runat="server"> Nội dung báo cáo <asp:TextBox ID="TextBox2" CssClass="form-control" runat="server" TextMode="MultiLine"> <asp:Button ID="Button1" runat="server" CssClass="btn btn- primary" OnClick="Button1_Click" Text="Thêm mới báo cáo" /> 179 4.18.1 ThemMoiBaoCao.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using BusinessLogicLayer; namespace WebApp_Quanlymaytinh { public partial class ThemMoiBaoCao : System.Web.UI.Page { public static string username; protected void Page_Load(object sender, EventArgs e) { username = Request.Cookies["username"].Value.ToString(); } protected void Button1_Click(object sender, EventArgs e) { bool a; a=QuanLiBaoCao_BUS.ThemBaoCao(TextBox1.Text, username, TextBox2.Text); if (a) Response.Redirect("UserTrangChu.aspx"); else { Response.Write("alert('Thêm mới thất bại')"); } } } } 4.19 ThemMoiMayTinh.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/SiteMaster.Master" AutoEventWireup="true" CodeBehind="ThemMoiMayTinh.aspx.cs" Inherits="WebApp_Quanlymaytinh.ThemMoiMayTinh" %> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> Quản lý máy tính Thêm mới máy tính Lịch sử cập nhật phần cứng Thêm mới máy tính Tên máy tính 180 <asp:TextBox ID="TextBox1" CssClass="form-control" runat="server"> Cơ sở <asp:DropDownList ID="DropDownList1" CssClass="form-control" AutoPostBack="true" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> Phòng <asp:DropDownList ID="DropDownList2" CssClass="form-control" runat="server"> <asp:Button ID="Button1" runat="server" CssClass="btn btn-primary" Text="Thêm mới máy tính" OnClick="Button1_Click" /> 4.19.1 ThemMoiMayTinh.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using BusinessLogicLayer; namespace WebApp_Quanlymaytinh { public partial class ThemMoiMayTinh : System.Web.UI.Page { public DataTable dt; public static string s; public static string username; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { username = Request.Cookies["username"].Value.ToString(); DataTable dtphongmay; dtphongmay = QuanLiCoSoVatChat_BUS.LayDanhSachPhongMay("1"); DropDownList2.DataSource = dtphongmay; dt = QuanLiCoSoVatChat_BUS.LayDanhSachCoSo(); DropDownList1.DataSource = dt; 181 DropDownList1.DataValueField = "idCoSo"; DropDownList1.DataTextField = "TenCoSo"; DropDownList1.DataBind(); DropDownList2.DataValueField = "idPhongMay"; DropDownList2.DataTextField = "TenPhongMay"; DropDownList2.DataBind(); s =Request.Cookies["username"].Value.ToString(); } } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { DataTable dtPhongMay; dtPhongMay = QuanLiCoSoVatChat_BUS.LayDanhSachPhongMay(DropDownList1.SelectedValue.ToString()); DropDownList2.DataSource = dtPhongMay; DropDownList2.DataBind(); } protected void Button1_Click(object sender, EventArgs e) { bool a; a = MayTinh_BUS.ThemMoiMayTinh(TextBox1.Text, "", DropDownList2.SelectedValue,s); Response.Redirect("ChinhSuaMayTinh.aspx?id=" + MayTinh_BUS.idMayMoiNhat()); } } } 4.20 ThongBao.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/SiteMaster.Master" AutoEventWireup="true" CodeBehind="ThongBao.aspx.cs" Inherits="WebApp_Quanlymaytinh.ThongBao" %> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> Thông báo người dùng (*) là thông báo chưa đọc Tiêu đề báo cáo Người báo cáo Thời gian Trạng thái Hành động 182 <asp:ListView ID="ListView1" runat="server" OnItemCommand="ListView1_ItemCommand"> Chưa nạp dữ liệu Không có thông báo <asp:Label ID="Label1" runat="server" Text='<%# Eval("TieuDeBaoCao") %>'> <asp:Label ID="Label2" runat="server" Text='<%# Eval("NguoiBaoCao") %>'> <asp:Label ID="Label3" runat="server" Text='<%# Eval("NgayBaoCao") %>'> <asp:Label ID="Label4" runat="server" Text='<%# Eval("TenTrangThai") %>'> <asp:Button ID="Button1" runat="server" CssClass="btn btn- primary" Text="Xem chi tiết" CommandArgument='' CommandName="Xem" /> <a class="page-link" runat="server" onserverclick="Unnamed_ServerClick">Trang trước <asp:Label ID="SoTrangLabel" runat="server" Text="Label"> <a class="page-link" runat="server" onserverclick="Unnamed_ServerClick1">Trang kế tiếp 4.20.1 ThongBao.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using BusinessLogicLayer; using System.Data; namespace WebApp_Quanlymaytinh { public partial class ThongBao : System.Web.UI.Page { public static DataTable DtThongBao; public static DataTable DtHienThi; public static int so_trang; public static int so_trang_max; public static string tenuser; public static string role; protected void Page_Load(object sender, EventArgs e) 183 { if (!Page.IsPostBack) { tenuser = Request.Cookies["username"].Value.ToString(); role = Request.Cookies["role"].Value.ToString(); if (role=="admin") DtThongBao = QuanLiBaoCao_BUS.LoadBaoCao(); else { DtThongBao = QuanLiBaoCao_BUS.LoadBaoCao(tenuser, true); } so_trang = 1; so_trang_max = DtThongBao.Rows.Count / 10 + 1; if ((DtThongBao.Rows.Count % 10) == 0) so_trang_max--; SoTrangLabel.Text = "Trang 1/" + so_trang_max; if (role == "admin") TrangThaiDaXem(""); if (role == "IT") TrangThaiDaXem("_IT"); if (role == "user") TrangThaiDaXem("_user"); NapLaiTrang(); } } public static void TrangThaiDaXem(string role) { foreach (DataRow dr in DtThongBao.Rows) { if (dr["Noti"+role].ToString() == "1") dr["TieuDeBaoCao"] = dr["TieuDeBaoCao"].ToString() + "(*)"; } } public static void LoadThongBaoVaoDtHienThi() { if (DtThongBao.Rows.Count > 0) { if ((so_trang - 1) * 10 + 10 < DtThongBao.Rows.Count) { DtHienThi = DtThongBao.Select().Skip((so_trang - 1) * 10).Take(10).CopyToDataTable(); } else { DtHienThi = DtThongBao.Select().Skip((so_trang - 1) * 10).Take(DtThongBao.Rows.Count - (so_trang - 1) * 10).CopyToDataTable(); } } else { DtHienThi = null; } } public void NapLaiTrang() { LoadThongBaoVaoDtHienThi(); ListView1.DataSource = DtHienThi; ListView1.DataBind(); } protected void Unnamed_ServerClick(object sender, EventArgs e) { if (so_trang > 1) { so_trang--; NapLaiTrang(); SoTrangLabel.Text = "Trang hiện tại: " + so_trang.ToString(); 184 } } protected void Unnamed_ServerClick1(object sender, EventArgs e) { if (so_trang<so_trang_max) { so_trang++; NapLaiTrang(); SoTrangLabel.Text= "Trang hiện tại: " + so_trang.ToString(); } } protected void Button1_Click(object sender, EventArgs e) { } protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e) { if (e.CommandName=="Xem") { string s; s = e.CommandArgument.ToString(); if (role == "admin") QuanLiBaoCao_BUS.DocThongBao(s, ""); if (role == "IT") QuanLiBaoCao_BUS.DocThongBao(s, "_IT"); if (role == "user") QuanLiBaoCao_BUS.DocThongBao(s, "_user"); Response.Redirect("ChiTietBaoCao.aspx?id=" + s); } } } } 4.21 UserChiTietBaoCao.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/User.Master" AutoEventWireup="true" CodeBehind="UserChiTietBaoCao.aspx.cs" Inherits="WebApp_Quanlymaytinh.UserChiTietBaoCao" %> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> Chi tiết báo cáo <asp:Button ID="Button2" runat="server" CssClass="btn btn-info" Text="Đánh dấu là chưa đọc" OnClick="Button2_Click"/> Tiêu đề báo cáo <asp:Label ID="Label1" runat="server" Text="Label"> Ngày bắt đầu 185 <asp:Label ID="Label2" runat="server" Text="Label"> Trạng thái <asp:DropDownList ID="DropDownList1" CssClass="form-control" runat="server" Enabled="False"> Nội dung trao đổi <asp:Label runat="server" Text='<%# Eval("NoiDungTraoDoi") %>'> Được <asp:Label ID="Label4" runat="server" Text='<%# Eval("UserTraoDoi") %>'> Viết vào ngày <asp:Label ID="Label3" runat="server" Text='<%# Eval("ThoiGianBaoCao") %>'>, <a class="page-link" runat="server" onserverclick="Unnamed_ServerClick">Trang trước <asp:Label ID="SoTrangLabel" runat="server" Text="Label"> <a class="page-link" runat="server" onserverclick="Unnamed_ServerClick1">Trang kế tiếp Viết nội dung trao đổi vào đây <asp:TextBox ID="TextBox1" CssClass="form-control" runat="server" TextMode="MultiLine"> <asp:Button ID="Button1" CssClass="btn btn-primary" runat="server" Text="Gửi phản hồi" OnClick="Button1_Click" /> 4.21.1 UserChiTietBaoCao.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; 186 using System.Web.UI.WebControls; using BusinessLogicLayer; using System.Data; namespace WebApp_Quanlymaytinh { public partial class UserChiTietBaoCao : System.Web.UI.Page { public static DataTable dtDuLieu; public static DataTable dtHienThi; public static int so_trang; public static int so_trang_max; public static string user; public static string idBaoCao; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { user = Request.Cookies["username"].Value.ToString(); idBaoCao = Request.QueryString["id"].ToString(); dtDuLieu = QuanLiBaoCao_BUS.LoadBaoCao(idBaoCao); so_trang_max = dtDuLieu.Rows.Count / 10 + 1; if ((dtDuLieu.Rows.Count % 10) == 0) so_trang_max--; so_trang = 1; SoTrangLabel.Text = "Trang hiện tại: " + so_trang.ToString() + "/" + so_trang_max; LoadTrang(); DataTable dt; DataTable dtThongtin; dtThongtin = QuanLiBaoCao_BUS.ThongTinBaoCao(idBaoCao); dt = QuanLiBaoCao_BUS.LoadTrangThai(); DropDownList1.DataSource = dt; DropDownList1.DataValueField = "idTrangThaiBaoCao"; DropDownList1.DataTextField = "TenTrangThai"; DropDownList1.DataBind(); DropDownList1.ClearSelection(); DropDownList1.Items.FindByValue(dtThongtin.Rows[0]["idTrangThai"].ToString()).Sele cted = true; Label1.Text = dtThongtin.Rows[0]["TieuDeBaoCao"].ToString(); Label2.Text = dtThongtin.Rows[0]["NgayBaoCao"].ToString(); if (QuanLiBaoCao_BUS.HieuLucBaoCao(idBaoCao)) { Button1.Enabled = true; } else { Button1.Enabled = false; } } } public void NapDuLieuTrang() { if (dtDuLieu.Rows.Count > 0) { if ((so_trang - 1) * 10 + 10 < dtDuLieu.Rows.Count) { dtHienThi = dtDuLieu.Select().Skip((so_trang - 1) * 10).Take(10).CopyToDataTable(); } else { 187 dtHienThi = dtDuLieu.Select().Skip((so_trang - 1) * 10).Take(dtDuLieu.Rows.Count - (so_trang - 1) * 10).CopyToDataTable(); } } else { dtHienThi = null; } } public void LoadTrang() { NapDuLieuTrang(); ListView1.DataSource = dtHienThi; ListView1.DataBind(); } protected void Unnamed_ServerClick(object sender, EventArgs e) { so_trang++; NapDuLieuTrang(); SoTrangLabel.Text = "Trang hiện tại: " + so_trang.ToString() + "/" + so_trang_max; } protected void Unnamed_ServerClick1(object sender, EventArgs e) { so_trang--; NapDuLieuTrang(); SoTrangLabel.Text = "Trang hiện tại: " + so_trang.ToString() + "/" + so_trang_max; } protected void Button1_Click(object sender, EventArgs e) { QuanLiBaoCao_BUS.TraLoiBaoCao(idBaoCao, TextBox1.Text, user); bool a; a = false; a = QuanLiBaoCao_BUS.DanhDauLaChuaDoc(idBaoCao, ""); a = QuanLiBaoCao_BUS.DanhDauLaChuaDoc(idBaoCao, "_IT"); so_trang = 1; dtDuLieu = QuanLiBaoCao_BUS.LoadBaoCao(idBaoCao); so_trang_max = dtDuLieu.Rows.Count / 10 + 1; if ((dtDuLieu.Rows.Count % 10) == 0) so_trang_max--; so_trang = 1; LoadTrang(); } protected void Button2_Click(object sender, EventArgs e) { bool a; a = false; a = QuanLiBaoCao_BUS.DanhDauLaChuaDoc(idBaoCao, "_user"); if (a) { Response.Write("alert('Cập nhật thành công')"); } else { Response.Write("alert('Cập nhật thất bại')"); } } } } 188 4.22 UserThongBao.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/User.Master" AutoEventWireup="true" CodeBehind="UserThongBao.aspx.cs" Inherits="WebApp_Quanlymaytinh.UserQuanLyMayTinh" %> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> Danh sách báo cáo <asp:Button ID="Button2" CssClass="btn btn-primary" runat="server" Text="Báo cáo vấn đề mới" OnClick="Button2_Click" /> Tiêu đề báo cáo Người báo cáo Thời gian Trạng thái Hành động <asp:ListView ID="ListView1" runat="server" OnItemCommand="ListView1_ItemCommand"> Chưa nạp dữ liệu Không có thông báo <asp:Label ID="Label1" runat="server" Text='<%# Eval("TieuDeBaoCao") %>'> <asp:Label ID="Label2" runat="server" Text='<%# Eval("NguoiBaoCao") %>'> <asp:Label ID="Label3" runat="server" Text='<%# Eval("NgayBaoCao") %>'> <asp:Label ID="Label4" runat="server" Text='<%# Eval("TenTrangThai") %>'> <asp:Button ID="Button1" runat="server" CssClass="btn btn-primary" Text="Xem chi tiết" CommandArgument='' CommandName="Xem" /> 189 Dấu (*) thể hiện báo cáo có phản hồi chưa đọc <a class="page-link" runat="server" onserverclick="Unnamed_ServerClick">Trang trước <asp:Label ID="SoTrangLabel" runat="server" Text="Label"> <a class="page-link" runat="server" onserverclick="Unnamed_ServerClick1">Trang kế tiếp 4.22.1 UserThongBao.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using BusinessLogicLayer; namespace WebApp_Quanlymaytinh { public partial class UserQuanLyMayTinh : System.Web.UI.Page { public static DataTable dtDuLieu; public static DataTable dtHienThi; public static int so_trang; public static int so_trang_max; public static string username; public static string role; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { username = Request.Cookies["username"].Value.ToString(); role = Request.Cookies["role"].Value.ToString(); dtDuLieu = QuanLiBaoCao_BUS.TimBaoCao(username); so_trang = 1; so_trang_max= dtDuLieu.Rows.Count / 10 + 1; if ((dtDuLieu.Rows.Count % 10) == 0) so_trang_max--; SoTrangLabel.Text = "Trang hiện tại: " + so_trang.ToString() + "/" + so_trang_max; TrangThaiDaXem("_user"); LoadTrang(); } } public static void TrangThaiDaXem(string role) { foreach (DataRow dr in dtDuLieu.Rows) { if (dr["Noti" + role].ToString() == "1") dr["TieuDeBaoCao"] = dr["TieuDeBaoCao"].ToString() + "(*)"; } } protected void TimKiemButton_Click(object sender, EventArgs e) { 190 } protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) { if (e.CommandName=="XemChiTiet") { Response.Redirect("ChinhSuaMayTinh.aspx?id=" + e.CommandArgument.ToString()); } } public void NapDuLieuTrang() { if (dtDuLieu.Rows.Count > 0) { if ((so_trang - 1) * 10 + 10 < dtDuLieu.Rows.Count) { dtHienThi = dtDuLieu.Select().Skip((so_trang - 1) * 10).Take(10).CopyToDataTable(); } else { dtHienThi = dtDuLieu.Select().Skip((so_trang - 1) * 10).Take(dtDuLieu.Rows.Count - (so_trang - 1) * 10).CopyToDataTable(); } } else { dtHienThi = null; } } public void LoadTrang() { NapDuLieuTrang(); ListView1.DataSource = dtHienThi; ListView1.DataBind(); } protected void Unnamed_ServerClick(object sender, EventArgs e) { so_trang++; NapDuLieuTrang(); SoTrangLabel.Text = "Trang hiện tại: " + so_trang.ToString() + "/" + so_trang_max; } protected void Unnamed_ServerClick1(object sender, EventArgs e) { so_trang--; NapDuLieuTrang(); SoTrangLabel.Text = "Trang hiện tại: " + so_trang.ToString() + "/" + so_trang_max; } protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e) { QuanLiBaoCao_BUS.DocThongBao(e.CommandArgument.ToString(), "_user"); Response.Redirect("UserChiTietBaoCao.aspx?id=" + e.CommandArgument.ToString()); } protected void Button2_Click(object sender, EventArgs e) 191 { Response.Redirect("ThemMoiBaoCao.aspx"); } } } 4.23 UserTrangChu.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/User.Master" AutoEventWireup="true" CodeBehind="UserTrangChu.aspx.cs" Inherits="WebApp_Quanlymaytinh.TrangChuUser" %> .auto-style2 { height: 29px; } <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> Tên người dùng <asp:Label ID="LabelTenNguoiDung" runat="server" CssClass="form-control" Text="Label"> Ngày đăng ký <asp:Label ID="LabelNgayDangKy" CssClass="form-control" runat="server" Text="Label"> Báo cáo đã gửi <asp:Label ID="LabelBaoCaoDaGui" runat="server" CssClass="form-control" Text="Label"> Báo cáo đã giải quyết <asp:Label ID="LabelBaoCaoDaGiaiQuyet" runat="server" CssClass="form-control" Text="Label"> Báo cáo đã đóng <asp:Label ID="LabelBaoCaoDaDong" runat="server" CssClass="form-control" Text="Label"> 192 4.23.1 UserTrangChu.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using BusinessLogicLayer; using System.Data; namespace WebApp_Quanlymaytinh { public partial class TrangChuUser : System.Web.UI.Page { public static DataTable dtDuLieu; public static DataTable dtNguoiDung; public static string TenNguoiDung; protected void Page_Load(object sender, EventArgs e) { TenNguoiDung = Request.Cookies["username"].Value.ToString(); dtDuLieu = QuanLiBaoCao_BUS.TimBaoCao(TenNguoiDung); dtNguoiDung = QuanLiUser_BUS.LayDanhSachUser(TenNguoiDung); int SoBaoCaoDaGui; SoBaoCaoDaGui = 0; int SoBaoCaoDaHoanThanh; SoBaoCaoDaHoanThanh = 0; int SoBaoCaoDaDong; SoBaoCaoDaDong = 0; foreach (DataRow dr in dtDuLieu.Rows) { SoBaoCaoDaGui++; if (dr["idTrangThai"].ToString() == "3") SoBaoCaoDaHoanThanh++; if (dr["idTrangThai"].ToString() == "4") SoBaoCaoDaDong++; } LabelTenNguoiDung.Text = TenNguoiDung; LabelNgayDangKy.Text = dtNguoiDung.Rows[0]["NgayThemMoi"].ToString(); LabelBaoCaoDaGui.Text = SoBaoCaoDaGui.ToString(); LabelBaoCaoDaGiaiQuyet.Text = SoBaoCaoDaHoanThanh.ToString(); LabelBaoCaoDaDong.Text = SoBaoCaoDaDong.ToString(); } } } 193

Các file đính kèm theo tài liệu này:

  • pdfde_tai_he_thong_quan_ly_phan_cung_may_tinh_ap_dung_cho_cac_c.pdf
Tài liệu liên quan