Luận văn
Quản lý sinh viên thực tập
1
Lời mở đầu
Microsoft Visual C Sharp (C#) .NET là một ngôn ngữ mạnh nhưng
đơn giản, chủ yếu dùng cho các nhà phát triển để tạo các ứng dụng chạy trên
bề mặt Microsoft.NET. Nó thừa hưởng nhiều đặc tính của ngôn ngữ C++,
đồng thời có nhiều đặc tính giúp tăng nhanh tốc độ phát triển ứng dụng, đặc
biệt khi kết hợp với Micrsoft Visual Studio.NET. Nó được dùng khá phổ
biến, hỗ trợ rất hiệu quả cho các phần mềm quản lý (như quản lý sinh viên,
quản lý nhân sự, quản lý khách sạn…)
Vì vậy trong đợt thực tập tốt nghiệp lần này, em đã chọn làm đề tài
“quản lý sinh viên thực tập” bằng ngôn ngữ C# xây dựng trong môi trường
Microsoft Visual Studio.Net. Quản lý sinh viên thực tập là một công việc
không thể thiếu được trong các trường đại học, cao đẳng, trung cấp…Hệ
thống mà em xây dựng ở đây chỉ còn khá đơn giản, chỉ sử dụng để quản lý
2
sinh viên thực tập trong cao đẳng khoa công nghệ thông tin.
Chương 1
GIỚI THIỆU VỀ MÔI TRƯỜNG LÀM VIỆC MICROSOFT
VISUAL STUDIO 2005
.1.
1. Tổng quan về C#
Như chúng ta đều biết C# là một ngôn ngữ không bao giờ tách biệt mà nó
luôn đồng hành với “bộ khung.Net”. C# là một trình biên dịch hướng .Net,
nghĩa là tất cả các mã của C# luôn luôn chạy trên môi trường .Net
Framework. Điều đó dẫn đến 2 hệ quả sau:
Cấu trúc và các lập luận C# được phản ánh các phương pháp luận của
.Net ngầm bên dưới.
Trong nhiều trường hợp, các đặc trưng của C# thậm chí được quyết
định dựa vào đặc trưng của .Net, hoặc thư viện lớp cơ sở của .Net
Chính bởi tầm quan trọng của .Net, nên chúng ta cần phải biết sơ qua về .Net
trước khi đi vào ngôn ngữ C#.
C# là một ngôn ngữ lập trình mới, và được biết đến với 2 lời chào:
Nó được thiết kế riwwng để dùng cho Microsoft’s.Net Framework
(Một nền khá mạnh cho ho sự phát triển, triển khai, hiện thực và phân phối
các ứng dụng)
Nó là một ngôn ngữ hoàn toàn hướng đối tượng được thiết kế dựa trên
kinh nghiệm của ác ngôn ngữ hướng đối tượng khác.
Một điều quan trọng cần nhớ C# là một ngôn ngữ độc lập. Nó được thiết kế
để có thể sinh ra mã đích trong môi trường .Net, nó không phải là một phần
của .Net bởi vậy có một vài đặc trưng được hỗ trợ bởi .Net mà C# không hỗ
trợ được .Nhưng cũng có một vài đặc trưng C# hỗ trợ mà .Net không hỗ trợ
3
(chẳng hạn như quá tải toán tử)
2. Tạo các ứng dụng .Net bằng C#
C# có thể dùng để tạo các ứng dụng console: các ứng dụng thuần văn bản
chạy trên DOS window nhưng hầu như các ứng dụng console khi cần kiểm tra
các thư viện lớp , hoặc cho các tiến trình daemon Unix/Linux. Tất nhiên
chúng ta cũng có thể dùng C# để tạo ứng dụng dùng cho công nghệ tương
thích .Net. Dưới đây là các kiểu ứng dụng khác nhau có thể tạo ra bằng C#:
1) Tạo các ứng dụng ASP.NET
Các đặc tính của ASP.NET
- ASP là một công nghệ của Microsoft dùng để tạo các trang web có nội
dung động.
- ASP.NET là một phiên bản mới của ASP đã cải tiến rất nhiều các thiếu
sót của nó. Nó không chỉ thay thế ẤP, hơn nữa các trang ASP>NET có thể
sống chung với các ứng dụng ASP trên cùng một máy chủ. Tất nhiên bạn có
thể lập trình ASP>NET với C#
Web Forms
- Các trang ASP.NET là thực chất là các trang có cấu trúc.
- Một điểm mạnh khác là các trang ASP.Net có thể được tạ trong môi
trường VS.NET
- Đặc tính ASP.NET’s code-behind giúp bạn có thể dễ dàng cấu trúc một
tang web. ASP.NET cho phép bạn tách biệt với các chức năng server-side của
trang thành một lớp , biên dịch lớp đó thành một DLL đó vào một thư mục
bên dưới phần HTML
- ASP.NET có khả năng tăng cường thực thi.
Web controls
- Để dễ dàng cho việc tạo các trang có cấu trúc, VS.NET cung cấp web
forms. Chúng cho phép bạn tạo các trang ASP.NET sinh động như cách mà
4
VB6 hay C++ Builder Windows đã làm.
- Bạn có thể dùng C# hay VB.NET để mở rộng hộp công cụ web form.
Việc tạo một server-side control mới đơn giản là thực thi lớp .NET System
Web. UI Webcontrols. WebControl
Web Services
Web Services trong .NET là môt trang ASP>NET theo định dạng XML thay
vì theo định dạng HTML để yêu cầu các client. Các trang này có một code-
behind DLL chứa các lớp xuất phát từ WebService. VS.NET cung cấp 1 cơ
chế dể tiện cho việc phát triển Web Service.
2) Tạo các Windows Form
Windows Control
Mặc dù Web Forms và Windows Forms được phát triển theo cùng một cách,
bạn dùng các loại khác nhau của controls để định vị chúng. Web Forms dùng
Web Controls, và Windows Forms dùng Windows Controls.
Một Windows Control là một ActiveX control. Đằng sau sự thực thi của một
Window control, là sự biên dich sang một DLL để có thể cài đặt trên máy
khách. Thật vậy, .NET SDK cung cấp một tiện ích dùng để tạo một vỏ bọc
cho các ActiveX control, vì thể chúng có thể được đặt trong Windows Forms.
Giống trường hợp này các Web Control, Windows Control được tạo thành từ
một lớp khác System.Windows.Forms.Control.
Windows Services
Một Windows Service là một chương trình được thiết kế để chạy trên nền
Windows NT/2000/XP (không hỗ trợ trên Windows 9x). Các dịch vụ này rất
hữu ích khi bạn muốn một chương trình có thể chạy liên tục và sẵn sàng đáp
ứng các sự kiện mà không cần người dùng phải khởi động. Ví dụ như một
World Wide Web Service ở trên các web server luôn lắng nghe các yêu cầu từ
5
trình khách.
Thật dễ dàng để viết các dịch vụ trong C#. Với thư viện lớp cơ sở .NET
Framework sẵn có trong không gian tên System.ServiceProcess namespace
chuyên dùng để tổ chức các tác vụ boilerplate kết hợp với các dịch vụ, ngoài
ra, Visual Studio .NET cho phép bạn tạo một đề án C# Windows Service, với
các mã nguồn cơ bản ban đầu. Chúng ta sẽ khám cách viết một C# Windows
Services trong chương 22.
3. Cơ bản về C#
Những kiến thức cơ bản nhất của ngôn ngữ lập trình C#. Những chủ đề chính
chúng ta sẽ được học sau đây :
Khai báo biến
Khởi tạo và phạm vi hoạt động của biến
C#'s predefined data types
Cách sử dụng các vòng lặp và câu lệnh.
Gọi và hiển thị lớp và phương thức
Cách sử dụng mảng
Toán tử
An toàn kiểu và cách để chuyển các kiểu dữ liệu
Enumerations
Namespaces
Phương thức của hàm Main( )
Cơ bản trình biên dịch dòng lệnh trong C#
Using System.Console để thực hiện I/O
Sử dụng chú thích trong C# và Visual Studio . NET
6
Các định danh và từ khoá trong C#
CHƯƠNG 2
TỔNG QUAN VỀ HỆ THỐNG
.2.
I. Tổng quan về đề tài
1. Tóm tắt về bài toán
Tóm tắt hoạt động của hệ thống mà dự án ứng dụng
- Yêu cầu xây dựng một hệ thống quản lý công tác thực tập của sinh
viên Cao Đẳng Tin trường ĐHBK Hà Nội.
- Mô tả về tổ chức như sau: Một khoa Công nghệ thông tin (CNTT)
trong trường ĐHBK Hà Nội sẽ quản lý công tác thực tập của sinh viên theo
các khóa học K1, K2, K3,…và theo các bộ môn trong khoa (bao gồm 4 bộ
môn chính: Hệ thống thông tin, Công nghệ phần mềm, Khoa học máy tính,
Kỹ thuật máy tính). Trong mỗi khóa lại chia thành nhiều lớp Tin1, Tin2, Tin3,
Tin4,…và mỗi lớp gồm có ít nhất là 20 sinh viên và nhiều nhất là 30 sinh
viên. Như vậy sẽ chia lớp thành các nhóm thực tập (mỗi nhóm từ 2 đến 7 sinh
viên…) do 1 giảng viên hướng dẫn thực tập.
- Khoa quản lý các thông tin về công tác thực tập của sinh viên theo
khóa, theo bộ môn, theo giảng viên hướng dẫn thực tập, theo lớp, theo
nhóm,theo đề tài, theo mã số sinh viên. Mà mã số sinh viên là thông tin duy
nhất để phân biệt thông tin giữa các sinh viên với nhau. Ngoài ra hệ thống
quản lý thực tập còn thêm các thông tin khác về sinh viên, về lớp, bộ môn,
khóa, giảng viên hướng dẫn, nhóm…
- Việc quản lý thông tin thực tập của sinh viên CĐ Tin như sau: Hệ
thống sẽ lấy bộ môn làm khóa chính để quản lý các thông tin liên quan đến
công tác thựuc tập của sinh viên.
Yêu cầu xây dựng hệ thống với hai chức năng chính:
o Chức năng người dùng:
- Người dùng là sinh viên, giảng viên hướng dẫn thực tập…Những
7
người có nhu cầu xem các thông tin về công tác thục tập.
- Sinh viên chỉ có quyền xem và tìm kiếm các thông tin về lịch thực
tập, giáo viên hướng dẫn thực tập, danh sách nhóm thực tập, báo cáo thực tập,
điểm sau khi kết thúc đợt thực tập…và các hồ sơ sinh viên mà không có
quyền sửa đổi thông tin trong hệ thống.
- Giảng viên hướng dẫn cũng sẽ có quyền xem các thông tin tương tự
như sinh viên.
o Chức năng quản trị:
- Có 2 nhóm vai trò: Cán bộ quản sinh và giảng viên hướng dẫn. Họ
phải đăng nhập vào hệ thống để sử dụng chức năng quản trị.
- Cán bộ quản sinh cũng có tất cả các chức năng như người dùng bình
thường.
- Ngoài quyền xem và tìm kiếm thông tin như sinh viên ra thì cán bộ
quản sinh còn có quyền chỉnh sửa và xóa các thông tin liên quan đến công tác
thực tập sau khi đăng nhập hệ thống. Còn giảng viên hướng dẫn thực tập sẽ có
quyền chỉnh sửa các thông tin liên quan đến điểm, báo cáo và lịch thực tập
cho từng tuần…
Phạm vi hệ thống sử dụng
- Do hệ thống còn đơn giản, các chức năng chưa được linh hoạt nên hệ thống
chỉ sử dụng để quản lý công tác thực tập của Cao Đẳng Tin trường Đại Học
Bách Khoa Hà Nội. Đây cũng là hạn chế về quy mô của hệ thống.
Đối tượng sử dụng và mô tả các tiến trình có liên quan
Hệ thống được xây dựng dựa trên nhu cầu của ba đối tượng chính. Đó là:
- Sinh viên thực tập
- Giáo viên hưởng dẫn thực tập cho sinh viên
- Cán Bộ quản sinh, là người chịu trách nhiệm duy trì hệ thống QLSVTT.
Các thông tin sử dụng trong hệ thống
- Các thông tin chi tiết về sinh viên thực tập, giảng viên thực tập, lớp, bộ
8
môn và nhóm thực tập.
- Bảng điểm thực tập được chuyển cho các lớp cao đẳng tin
- Các báo cáo về công tác thực tập của sinh viên.
Các yêu cầu đặt ra với hệ thống trong tương lai
- Hệ thống phải thực hiện được các chức năng: thêm, sửa, xóa, tìm kiếm
và lưu các thông tin
- Ưu tiên: phía người quản lý và giảng viên
- Hạn chế: chỉ sử dụng để quản lý sinh viên thực tập của cao đẳng tin
2. Hệ thống dự định
Mục đích của hệ thống
- Đây là một ứng dụng của Microsoft Visual Studio 2005, tiện ích cho công
việc hỗ trợ và tự động hóa cho công tác quản lý sinh viên thực tập trong một
trường đại học hoặc cao đẳng, trung cấp
Tên hệ thống
- Quản lý sinh viên thực tập
Môi trường triển khai
- Hệ thống triển khai trong môi trường:Visual Studio 2005.
- Công cụ phát triển hệ thống: Microsoft Access 2003
- Ngôn ngữ lập trình C#
Dự trù cho dự án
- Rủi do của dự án:Trong quá trình xây dựng hệ thống sẽ không tránh
khỏi các thiếu sót. Vì vậy khi đưa hệ thống vào sử dụng nguy cơ hệ thống còn
đơn giản, qui mô ứng dụng nhỏ, sẽ không thực hiện hết các chức năng như đã
phân tích.
- Kế hoạch triển khai: từ ngày 18/03 đến ngày 18/04/2008
II. Mô tả các yêu cầu của hệ thống
1. Tổng quan về hệ thống
- Thực tập là một học phần trong chương trình đào tạo sinh viên. Hàng năm
khoa sẽ có kế hoạch cho sinh viên các khóa tiến hành thực tập. Riêng với hệ
9
cao đẳng CNTT, khoa sẽ tổ chức 3 đợt thực tập chính (thực tập cơ sở, thực tập
chuyên ngành, thực tập tốt nghiêp) với thời gian hợp lý. Công tác thực tập
hàng năm sẽ dokhoa chịu trách nhiệm lập kế hoạch và thực hiện. Kế hoạch
này cũng có thể thay đổi hàng năm tùy theo ình hình thực tế, chẳng hạn như :
thời gian, thời điểm cho sinh viên thực tập năm này sẽ khác với năm trước,
khóa này khác với khóa trước, giảng viên hướng dẫn thực tập đợt này sẽ khác
với đợt trước…
- Mỗi sinh viên khi vào trường nhập học sẽ được gán cho một mã số gọi là
Mã sinh viên. Mã sinh viên này sẽ không thay đổi trong quá trình 3 năm học
tập tại cao đẳng. Người ta cũng cần quản lý thêm họ tên, giới tính, ngày sinh,
quê quán, địa chỉ nơi ở hiện tại, số điện thoại…của sinh viên.
- Trước khi triển khai cho sinh viên thực tâp, khoa cũng cần phải liên hệ trước
với các bộ môn và các giảng viên trong từng bộ môn đó để tiến hành một
cuộc họp. Từ đó đưa bảng thông tin phân chia các lớp vào từng bộ môn, phân
chia nhóm thực tập trong từng nhóm, phân công giảng viên hướng dẫn thực
tập cho từng nhóm và thời gian thực tập… thông báo cho sinh viên khoa
mình.
- Sau khi nhận thông báo từ khoa do các lớp trưởng đem về, đúng ngày hẹn,
sinh viên các lớp sẽ đến bộ môn trong khoa để họp nhóm, gặp giảng viên
hướng dấn thực tập để nhận đề tài, lịch thực tập hàng tuần…Có thể là một
nhóm một đề tài hoặc cũng có thể nhiều đề tài 1 nhóm tùy theo giảng viên
hướng dẫn yêu cầu.
- Sinh viên sẽ triển khai quá trình thực tập hàng tuần: nộp báo cáo hàng tuần
cho giảng viên hướng dẫn thực tập (gửi qua thư điện tử hoặc là nộp trực tiếp
cho giảng viên hướng dẫn mình), tiếp thu đóng góp ý kiến của GVHD để về
làm tiếp. Hết thời gian quy định thực tập do khoa quy định, sinh viên sẽ bảo
vệ đề tài của mình với giảng viên hướng dẫn thực tập mình. Nộp báo cáo kèm
10
theo đĩa mềm lưu trữ project của mình cho giảng viên hướng dẫn thực tập.
- Giảng viên sẽ chấm điểm và nộp lên khoa để cán bộ sinh đưa thông tin vào
hệ thống. Sau khi hoàn tất mỗi đợt thực tập, khoa sẽ thông báo cho sinh viên
về điểm thực tập theo danh sách từng lớp.
- Mặt khác, những sinh viên dưới 5 điểm sẽ phải thực tập lại. Lớp trưởng sẽ
lên danh sách và gửi cho khoa danh sách thực tập tín chỉ của lớp mình. Từ đó
khoa sẽ tổ chức thực tập lần 2, lần 3,… cho sinh viên khoa mình.
2. Các đối tác
- Sinh viên thực tập: là người được phép sử dụng hệ thống để xem và tìm
kiếm tất cả các thông tin mà hệ thống cập nhật lên: thông tin về giảng viên
hướng dẫn thực tập, về bộ môn, lớp, nhóm thực tập, thậm chí là các thông tin
về các sinh viên học cùng khóa với mình.
- Giảng viên hướng dẫn thực tập: là người có tất cả các quyền giống như
sinh viên thực tập. Ngoài ra giảng viên còn có quyền của một người quản trị
nhưng ở một mức độ nhất định: Giảng viên chỉ có thể thao tác chỉnh sửa, xóa
các thông tin về nhóm thực tập và điểm thực tập.
- Cán bộ quản sinh: là người có tất cả các đặc quyền mà sinh viên và giảng
viên có và không có. Cán bộ quản sinh có quyền được thay đổi, chỉnh sửa và
xóa bỏ các thông tin liên quan đến các dữ liệu trong hệ thống “Quản lý sinh
viên thực tập”. Và cán bộ quản lý chính là người duy trì hoạt động của hệ
thống.
3. Nhận định về cơ cấu quản lý của hệ thống
Với hệ thống quản lý sinh viên thực tập, ta sẽ đặc tả từng giai đoạn của cơ cấu
quản lý này. Cơ cấu quản lý của hệ thống sẽ bao gồm:
- Chức năng quản lý chính: Quản lý sinh viên thực tập (Thêm, sửa, xóa tìm
kiếm thông tin về sinh viên thực tập) và quản lý giảng viên hướng dẫn thực
tập (Thêm, sửa, xóa và tìm kiếm thông tin về giảng viên hướng dẫn thực)
- Quản lý danh mục: quản lý hồ sơ sinh viên, quản lý hồ sơ giảng viên, bộ
11
môn, lớp (sửa, lưu và tìm kiếm thông tin về lớp).
- Cập nhật: thêm, sửa, xóa, lưu thông tin về bảng điểm thực tập, nhóm thực
tập.
4. Đặc tả cơ cấu quản lý của hệ thống
- Hệ thống quản lý sinh viên thực tập này đã được phân quyền cho người sử
dụng hệ thống này. Hơn nữa sự phân quyền này còn dựa trên các chức năng
cho phép ngưởi dùng sử dụng hệ thống một cách hiệu quả nhất. Bên cạnh đó,
hệ thống là tích hợp các chức năng liên quan đến quản lý sinh viên thực tập,
có khả năng thao tác với các chức năng: thêm, sửa, xóa, sao lưu các dữ liệu
khi thay đổi thông tin, bảo toàn trọn vẹn các thông tin một cách tối ưu nhất
- Để hiểu hơn về hoạt động của hệ thống, ta đi tìm hiểu cụ thể hơn về cơ cấu
quản lý của hệ thống:
4.1 Chức năng quản lý chính:
Hệ thống quản lý sinh viên thực tập được sử dụng với mục đích để theo dõi
quá trình thực tập của sinh viên, công tác hướng dẫn của giảng viên trong bộ
môn của khoa công nghệ thông tin, giúp cho khoa có thể quản lý tự động hóa
mà không mất nhiều thời gian. Quản lý sinh viên thực và giảng viên và giảng
viên hướng dẫn thực tập là 2 khâu quan trọng của hệ thống.
4.1.1 Quản lý sinh viên thực tập
- Mục đích: Giúp sinh viên, giảng viên hướng dẫn có thể xem được các thông
tin của sinh viên một cách dễ dàng hơn
- Tóm lược: Cán bộ quản sinh đăng nhập hệ thống QLSVTT và nhập mật
khẩu của mình. Hệ thống kiểm tra thấy mật khẩu đó là đúng đắn và nhắc cán
bộ quản sinh chọn ra một khóa bất kỳ, sau đó có thể thêm, bỏ, xem, tìm kiếm,
in kết quả thực tập cho khóa đó theo từng lớp.
- Đối tác: Cán bộ quản sinh (chính)
- Đầu vào: Mã sinh viên
Tên sinh viên
Ngày sinh
12
Nơi sinh
Địa chỉ
Điện thoại
Giới tính
Địa chỉ Email
Mã lớp
Mã nhóm
- Đầu ra: Danh sách lớp
Thông tin chi tiết về sinh viên
- Module xử lý: In ra danh sách lớp, danh sách sinh viên để gửi cho sinh viên
các lớp trong khoa CNTT
- Sự cố xảy ra với hệ thống:
+ Mật khẩu do cán bộ quản sinh đưa vào là không đúng đắn. Người dùng
phải đưa lại mật khẩu hoặc kết thúc sử dụng.
+ Mã số sinh viên, mã lớp đưa vào là không đúng.
4.1.2 Quản lý giảng viên hướng dẫn thực tập
- Mục đích: giúp cho sinh viên có thể có thể nắm bắt các thông tin về giảng
viên hướng dẫn thực tập mình.
- Tóm lược: cán bộ quản sinh và giảng viên hướng dẫn thực tập có thể đăng
nhập vào hệ thống và nhập mật khẩu của mình. Hệ thống kiểm tra thấy mật
khẩu đó là đúng đắn thì cả 2 đối tượng đó có thể sử dụng hệ thống để xem,
thêm, bỏ, tìm kiếm thông tin về các giảng viên. Nói chung trong ca này. Chức
năng và quyền của cả cán bộ quản sinh và giảng viên là như nhau, có thể:
thêm, sửa, xóa, tìm kiếm các thông tin về giảng viên. Sinh viên chỉ có quyền
xem
- Đối tác: Cán bộ quản sinh, giảng viên hướng dẫn sử dụng
- Đầu vào:
Mã giảng viên hướng dẫn thực tập
Tên giảng viên
13
Giới tính
Ngày sinh
Số điện thoại của giảng viên
Địa chỉ email của giảng viên
Tên bộ môn
- Đầu ra: Thông tin về giảng viên hướng dẫn thực tập
- Module xử lý: In danh sách các giảng viên
- Sự cố xảy ra:
+ Mật khẩu do cán bộ quản sinh và giảng viên không đúng đắn. Người
dùng nhập lại hoặc kết thúc sử dụng hệ thống.
+ Mã giảng viên sai. Người dùng nhập lại mã giảng viên hoặc kết thúc
sử dụng.
4.2 Quản lý danh mục
Phân hệ danh mục được chia ra làm nhiều chức năng con: hồ sơ sinh viên, hồ
sơ giảng viên, bộ môn, lớp…tổng hợp của toàn bộ các hạng mục thiết yếu
trong hệ thống quản lý sinh viên thực tập của cao đẳng tin k50. Hệ thống này
cho phép cập nhật toàn bộ các thông tin liên quan đến các đối tượng có liên
quan và tham gia vào quá trình thực tập của sinh viên.
4.2.1 Hồ sơ sinh viên
- Công việc quản lý hồ sơ sinh viên ở đây khá đơn giản. Đó chỉ là một hình
thức đưa ra danh danh sách sinh viên với đầy đủ các thông cần thiết có liên
quan đến sinh viên đó
- Đầu ra: in danh sách chung về sinh viên
4.2.2 Hồ sơ giảng viên
- Đây là mục giúp cho người sử dụng hệ thống có cái nhìn tống thể về
thông tin liên quan đến giảng viên. Từ đó năm na\bắt một cách tống quát về
các thông tin giúp cho việc quản lý quá trình thực tập tốt hơn.
14
- Đầu ra: in danh sách Giảng viên hướng dẫn thực tập
4.2.3 Quản lý bộ môn
- Bộ môn thì không thể thay đổi hay sửa xóa được vì đó là do nhà trường và
khoa công nghê đã quy định và phân chia. Vì vậy ở đây hệ thống sẽ cho phép
người sử dụng xem thông tin về bộ môn một cách tổng thể nhất và chung
nhất.
- Đầu ra: in danh sách các bộ môn
4.2.4 Quản lý lớp
- Mục đích: Quản lý lớp cũng khá là quan trọng. do trong một khoa công
nghệ thông tin có rất nhiều khóa học có nhiều sinh viên. Vì vậy công việc
quản lý sẽ trở lên khó khăn nếu như ta không quản lý theo lớp.
- Tóm lược: Một lớp có nhiều sinh viên, từ đo phân chia thành nhiều
nhóm thực tập. Nhưng đối với lớp chỉ có thể chỉnh sửa thông tin , lưu và tìm
kiếm. Chúng ta không thể thêm hay xóa lớp đó ra khỏi danh sách các lớp của
khóa đó hay khoa đó được. Hệ thống sẽ cho phép sửa, lưu và tìm kiếm các
thông tin liên quan đến lớp
- Đầu vào:
Mã lớp
Tên lớp
Sĩ số
Mã khoa
- Đầu ra: Danh sách các lớp
- Module xử lý: in danh sách lớp
4.3 Cập nhật
4.3.1 Cập nhật thông tin về bảng điểm
- Mục đích: Hệ thống được xây dựng với mục đích quản lý sinh viên
thực tập. Vậy nên việc quản lý bảng điểm thực tập là khá quan trọng trong hệ
15
thống
- Tóm lược: Sau khi đăng nhập thành công hệ thống sẽ cho phép thao tác
với các chức năng thêm, sửa, xóa và tìm kiếm trên form bảng điểm .
- Đầu vào:
Mã sinh viên
Điểm
Loại hình thực tập
Lần thực tập
Thời gian
Ghi chú
- Đầu ra : thông tin điểm của sinh viên
- Module xử lý: in bảng điểm của sinh viên
4.3.2 Cập nhật thông tin về nhóm thực tập
- Mục đích: Việc quản lý nhóm thực tập sẽ giúp cho quá trình thao dõi quá
trình thực tập của sinh viên hiệu quả hơn.
- Tóm lược: Sau khi đăng nhập thành công, hệ thống sẽ cho phép người sử
dụng hệ thống được thao tác các chức năng: sửa, xóa, lưu và tìm kiếm thông
tin về nhóm thực tập.
- Đầu vào:
Mã nhóm
Đề tài thực tập
Lịch thực tập
Mã giảng viên
- Đầu ra : thông tin về nhóm thực tập
16
- Module xử lý: In danh sách nhóm thực tập
CHƯƠNG 3
PHÂN TÍCH HỆ THỐNG
.3.
I. Phân tích hệ thống về mặt xử lý
1. Biểu đồ phân cấp chức năng
Trong chương 2 đã phân tích rất rõ ràng và cụ thể về cơ cấu quản lý của hệ
thống quản lý sinh viên thực tập. Từ đó có thể thấy, hệ thống quản lý này
chỉ bao gồm 5 chức năng chính, đó là: thêm, sửa. xóa, tìm kiếm và in báo
cáo.. Vì vậy trong biểu đồ phân cấp chức năng dưới đây sẽ mô tả một
cách khái quát và chi tiết về chức năng quản lý mà hệ thống xây dựng
dưới dạng cấu trức cây. Biểu đồ sẽ tiến hành phân mức từ trên xuống (mức
đỉnh và dưới đỉnh):
- Chức năng 1: thêm thông tin về giảng viên, sinh viên và điểm thực tập
- Chức năng 2: sửa thông tin về sinh viên, giảng viên, điểm thực tập, lớp
và nhóm thực tập.
- Chức năng 3: xóa thông tin về sinh viên, giảng viên, điểm thực tập và
nhóm thực tập
- Chức năng 4: tìm kiếm sinh viên, giảng viên, điểm thực tập, lớp và nhóm
thực tập
- Chức năng 5: in danh sách, báo cáo: in danh sách sinh viên, giảng viên,
17
bộ môn, bảng điểm thực tập.
Xóa thông tin
Tìm kiếm
Thêm thông tin
Sửa thông tin
In danh sách, báo cáo
Sửa thông tin sinh viên
Tìm kiếm sinh viên
Xóa thông tin sinh viên
In danh sách sinh viên
Thêm thông tin sinh viên
Sửa thông tin giảng viên
Tìm kiếm giảng viên
In danh sách giảng viên
Xóa thông tin giảng viên
Thêm thông tin giảng viên
Sửa thông tin bảng điểm TT
Tìm kiếm bảng điểm
In danh dách bộ môn
Xóa thông tin bảng điểm TT
Sửa thông tin về lớp
Thêm thông tin bảng điểm TT
Tìm kiếm lớp
In bảng điểm TT
Sửa thông tin về nhóm TT
Xóa thông tin về nhóm TT
Tìm kiếm nhóm TT
Quản lý sinh viên thực tập
Hình 3.1: Biểu đồ phân cấp chức năng hệ thống quản lý sinh viên thực tập
- Chúng ta sẽ đi vào tìm hiểu chi tiết về việc phân cấp quản lý ở biểu đồ
phân cấp chức năng ở trên ở biểu đồ mức khung cảnh và biểu đồ mức
18
đỉnh và dưới đỉnh ở phẩn tiếp theo.
2. Biểu đồ mức bối cảnh
- Biểu đồ phân cấp chức năng trên chỉ là mô tả khải quát về các chức
năng chính của hệ thống giúp cho người sử dụng có thể hình dung một
cách tổng quát, dễ dàng về hệ thống. Vì vậy để biểu diễn quá trình hoạt
động của hệ thống quản lý sinh viên, ta phải biểu diễn từng mức của
biểu đồ đó. Trước hết là mức 0: chức năng tổng quát của hệ thống quản
lý sinh viên thực tập. Các đối tác phải xuất hiện trong toàn bộ BLD bối
cảnh và không được phát sinh mới ở các mức dưới. tuy nhiên có thể vẽ
lại một đối tác ở mức dưới nếu thấy cần thiết.
- Như đã phân tích ở trên hệ thống gồm có 3 đối tác chính đó là: sinh
viên thực tập, giảng viên hướng dẫn thực tập và cán bộ quản sinh..
Giữa các đối tác này sẽ có sự trao đổi các luồng dữ liệu với nhau:
+ Sinh viên thực tập: cung cấp tất cả các thông tin về mình để nhập vào hệ
thống quản lý này. Nhưng đồng thời sinh viên có quyền yêu cầu hệ thống
cho xem các thông tin về bộ môn, về giảng viên hướng dẫn thực tập, về
lớp và bảng điểm tsau quá tình thực tập.
+ Giảng viên hướng dẫn thực tập: cung cấp tất cả các thông tin để nhập và
lưu lại trong hệ thống. Còn hệ thống yêu cầu giảng viên cung cấp thông tin
về nhóm thực tập và đăng nhập trước khi sử dụng hệ thống.
+ Cán bộ quản sinh: yêu cầu hệ thống lập báo cáo và in bảng điểm thực
tập. Còn hệ thống sẽ yêu cầu cán bộ quản sinh báo cáo thông tin thực tập
19
và săng nhập trước khi sử dụng hệ thống.
Thông tin về GVHDTT
Yêu cầu đăng nhập
Giảng viên hướng dẫn TT
Thông tin về nhóm Thực tập
Yêu cầu lập báo cáo
Thông tin về bộ môn
Báo cáo thông tin thực tập
Thông tin sinh viên
Bảng điểm
Sinh viên
Yêu cầu in bảng điểm thực tập
Cán bộ quản sinh
kết quả thực tập
Thông tin về lớp học
Thông tin về GVHDTT
Yêu cầu đăng nhập trước khi sử dụng HT
Quản lý Sinh viên Thực tập
Hình 3.2: Biểu đồ mức bối cảnh quản lý sinh viên thực tập
20
II. Phân tích thiết kế hệ thống về mặt dữ liệu
1. Các thực thể có trong hệ thống
- Sinh viên thực tập (SinhVien)
- Giảng viên hướng dẫn thực tập (GiangVienHDTT)
- Bảng điểm thực tập (BangDiemTT)
- Nhóm thực tập (NhomTT)
- Lớp (Lop)
- Khóa học (Khoa)
- Bộ môn (BoMon)
- Đăng nhập hệ thống (DangNhap)
2. Thuộc tính cụ thể của các thực thể và chuẩn hóa chúng
- Sinh viên (Mã sinh viên, tên sinh viên, ngày sinh, nơi sinh, địa chỉ, điện
thoại, giới tính, email, mã lớp, mã nhóm)
- Giảng viên hướng dẫn thực tập (mã giảng viên, tên giảng viên, giới tính
giảng viên, ngày sinh giảng viên, số điện thoại, email, địa chỉ, mã bộ môn)
- Bảng điểm thực tập (Mã sinh viên, điểm thực tập, thực tập, lần thực
tập, thời gian thực tập, ghi chú)
- Nhóm thực tập (Mã nhóm, đề tài thực tập, lịch thực tập, mã giảng viên)
- Lớp (Mã lớp, tên lớp, sĩ số, mã khoa)
- Khóa học (Mã khóa học, tên khóa học)
- Bộ môn (Mã bộ môn, tên bộ môn)
- Đăng nhập hệ thống (UserName, Password)
(Các thuộc tính được chọn làm khóa chính là các thuộc tính được gạch chân
21
ở từng thực thể trên)
3. Thiết kế mô hình thực thể liên kết
Hình 3.3: Mô hình thực thể liên kết
4. Thiết kế chi tiết cơ sở dữ liệu
Sinh viên
22
Hình 3.4: Bảng chuẩn hóa thực thể sinh viên
Giảng viên hướng dẫn thực tập
Hình 3.5: Bảng chuẩn hóa thực thể giảng viên HDTT
Bảng điểm thực tập
Hình 3.6: Bảng chuẩn hóa thực thể bảng điểm thực tập
Nhóm thực tập
Hình 3.7: Bảng chuẩn hóa thực thể nhóm thực tập
Lớp
23
Hình 3.8: Bảng chuẩn hóa thực thể lớp
Khóa học
Hình 3.9: Bảng chuẩn hóa thực thể khóa học
Bôn môn
Hình 3.10: Bảng chuẩn hóa thực thể bôn môn
Đăng nhập
24
Hình 3.11: Bảng chuẩn hóa thực thể đăng nhập
CHƯƠNG 4
THIẾT KẾ CHƯƠNG TRÌNH CHÍNH
.4.
I. Form giao diện chính của hệ thống- frmMain
1. Quá trình thiết kế và thiết lập các thuộc tính của frmMain:
Hình 4.1: Form giao diện chính của chương trình
- Vào Add New Item -> Windows Form để tạo ra một form mới.Dùng
chuột để điều chỉnh kích thước của form tùy theo người thiết kế hệ
25
thống.
- Dùng menustrip để hiển thị các menu chính của hệ thống: Quản lý hệ
thống (đổi mật khẩu, thoát), quản lý danh mục (hồ sơ sinh viên, hồ sơ
giảng viên, bộ môn, lớp), quản lý sinh viên thực tập, quản lý giảng viên
HDTT, cập nhật (thông tin điểm thực tập, nhóm thực tập), trợ giúp
(thông tin về tác giả, hướng dẫn sử dụng hệ thống)
- Trong hộp toolbox, chọn button, groupbox sử dụng để thiết kế cho các
chức năng trên, tùy theo người thiết kế hệ thống.
- Trong cửa sổ Properties, chọn thuộc tính Name, sau đó nhập vào
frmMain trong đó để thay đổi tên của Form (Nếu cửa sổ Properties
chưa hiển thị, bấm chọn cửa sổ từ trình đơn View hoặc nhấn F4). Sau
đó chọn thuộc tính Text, sau đó nhập “Quản lý sinh viên thực tập” để
thay đổi thanh tiêu đề của form.
- Cũng tương tự như vậy, trong cửa sổ Properties ta chọn các thuộc tính
thích hợp cho groupbox và button. Vào Name để đặt tên và váo text để
nhập tên cho các các button và groupbox nếu cần thiết.
2. Xử lý các sự kiện trong Form giao diện chính:
- Trong form này chưa phải xử lý các sự kiện cho các chức năng: thêm, sửa,
xóa và tìm kiếm như ở các form típ theo.
- Người dùng sau khi đăng nhập vào hệ thống, sẽ lựa chọn mục mà mình
muốn xem thông tin bằng cách bấm vào các button hiển thị trên form hoặc là
các menu ở trên cùng của form. Một form khác sẽ được hiển thị với các thông
tin bạn cần, và các chức năng cần thao tác trên form đó. Cụ thể là:
+ Nếu bạn click vào button “đổi mật khẩu” thì frmDoiMatKhau sẽ hiện ra.
Để làm được điều đó, bận cần thêm đoạn đoạn mã sau vào phương thức sự
frmDoiMatKhau mk = new frmDoiMatKhau(); mk.Show();
kiện btnDoiMK:
+ Nếu bạn click vào button “QL Sinh viên thực tập” thì frmSinhVien sẽ hiện
frmSinhVien sv = new frmSinhVien();
26
ra. Thêm đoạn mã vào phương thức btnQLSVTT:
sv.Show();
+ Nếu bạn click vào button “QL Giảng viên thực tập” thì frmGiangVien sẽ
frmGiangVien gv = new frmGiangVien(); gv.Show();
hiện ra. Thêm đoạn mã sau vào phương thức btnQLGV:
+ Nếu bạn click vào button “Hồ sơ sinh viên” thì frmHSSV sẽ hiện ra. Thêm
frmHSSV hssv = new frmHSSV(); hssv.Show();
đoạn mã sau vào phương thức btnHSSV:
+ Nếu bạn click vào button “Hồ sơ giảng viên” thì frmHSGV sẽ hiện ra.
frmHSGV hsgv = new frmHSGV(); hsgv.Show();
Thêm đoạnmã sau vào phương thức btnHSGV:
+ Nếu bạn click vào button “Bộ môn” thì frmBoMon sẽ hiện ra. Thêm đoạn
frmBoMon bm = new frmBoMon(); bm.Show();
mã sau vào phương thức btnBoMon:
+ Nếu bạn click vào button “Lớp” thì frmLop sẽ hiện ra. Thêm đoạn mã sau
frmLop fl = new frmLop(); fl.Show();
vào phương thức btnLop:
+ Nếu bạn click vào button “Thông tin điểm thực tập” thì frmBangDiem se
frmBangDiem bd = new frmBangDiem(); bd.Show();
hiện ra.Thêm đoạn mã sau vào phương thức btnBangDiem:
+ Nếu click vào button “Nhóm thực tập” thì frmNhomTT sẽ hiện ra.Thêm
frmNhomTT nhomtt = new frmNhomTT(); nhomtt.Show();
đoạn mã sau vào phương thức btnNhomTT:
+ Bấm vào menu Trợ giúp->Thông tin tác giả một hộp thoại thông báo sẽ
hiện ra để cho bạn biết thông tin về tác giả. Để tạo ra hộp thoại đó bạn cần
MessageBox.Show("Đề tài thực tập: Quản lý sinh viên thực
tập\nGiảng viên HDTT: Trịnh Văn Loan\nSinh viên thực tập: Bùi Thị
Dung\nLớp: CĐ Tin 4 - K50\nTrường: ĐH Bách Khoa Hà Nội");
27
thêm đoạn mã sau vào mnTroGiup_TTTG:
+ Còn khì bấm vào menu Trợ giúp->Hướng dẫn sử dụng hệ thống, một hộp
thoại thông báo cũng hiện ra để cho bạn biết về cách sử dụng hệ thống.Như
MessageBox.Show("Bạn có thể thao tác các chức năng: thêm, sửa, xóa
và tìm kiếm trên tất cả các ứng dụng của hệ thống. Khi thêm, bạn
chỉ cần nhấn nút thêm, các ô textbox và combobox sẽ tự động nhập
trắng lại, nhập các thông tin vào đó rùi nhận nút lưu.Còn khi sửa
thì bạn phải chọn một record ở datagridview để dữ liệu muốn sửa sẽ
hiện lên các ô textbox và combobox, sửa các thông tin bạn muốn sửa
trên đó rùi nhấn nút cập nhật. Thông tin sẽ được lưu lại và hiển
thị ngay trên datagriview. Khi xóa thì chỉ cần chọn 1 record ở
datagridview rùi nhấn nút xóa. Còn tìm kiếm tùy theo yêu cầu của
bạn. ");
vậy bạn cần thêm đoạn mã sau vào phương thức mnTroGiup_HDHT:
II. Form đăng nhập của hệ thống - frmLogin
1. Quá trình thiết kế và thiết lập thuộc tính của frmLogin
Hình 4.2: Form đăng nhập của hệ thống
- Khi bạn bắt đầu tạo ra Project “QLSVTT_ProjectThucTapTotNghiep”
thì một form mới sẽ xuất hiện trong cửa sổ Designer View. Trong
Properties chọn Name để đổi tên cho form này là frmLogin.
- Từ toolbox, rê thành phần điều khiển PictureBox vào form, điều chỉnh
kích thước của PictureBox bằng chuột. Trong Properties chọn thuộc
tính Image để chọn hình ảnh cho form đồng thời chọn thuộc tính
28
Locked của picturebox là true.
- Từ toolbox rê thành phần điều khiển label1vào bên trái form.Đổi tên
text của nó là Tên đăng nhập.
- Từ toolbox tiếp tục rê thành phần điều khiển label2 vào form, đổi tên
text là Mật khẩu.
- Thêm một combobox vào frmLogin và đặt nó kế bên lable1, đổi tên là
cboUser.
- Thêm một textbox vào frmLogin và đặt nó kế bên label2, đổi tên là
txtMatKhau.
- Từ toolbox, rê 2 thanh điều khiển button vào form và lần lượt đổi thuộc
tính Name là btnDangNhap và btnHuy, đồng thời đổi tên text tương
ứng là Đăng nhập và Hủy bỏ.
2. Xử lý các sự kiện trong frmLogin
- Khi sinh viên thực tập, giảng viên hướng dẫn thực tập hay cán bộ quản
sinh sử dụng hệ thống thì cần phải đăng nhập vào hệ thống. Mội một
đối tượng sử dụng hệ thống sẽ có một password và username riêng để
đăng nhập vào hệ thống. Nếu nhập sai tên pass hay user thì hệ thống sẽ
hiện lên một hộp thoại thông báo “Bạn nhập sai password”. Người sử
dụng sẽ nhập lại hoặc kết thúc sử dụng hệ thống.
- Để formLogin làm việc được như mô tả ở trên bạn cần phải thêm đoạn
mã sau cho phương thức btnDangNhap sau khi đã kết nối cơ sở dữ liệu
OleDbConnection dbConn = new OleDbConnection("Provider =
Microsoft.JET.OLEDB.4.0;
Data
Source
=
"
+
Application.StartupPath + "\\QLSVTT.mdb");
dbAdpt
new
=
bằng câu lệnh:
29
Đoạn mã cuae btnDangNhap dbConn.Open(); DataSet dbSet = new DataSet(); string strString = "Select mUserName, mPassword From DangNhap Where mUserName = '" + cboUser.Text + "'"; OleDbDataAdapter OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet ); dbConn.Close();
==
=
if (txtMatkhau.Text dbSet.Tables[0].Rows[0]["mPassword"].ToString()) { QLSVTT_ProjectThucTapTotNghiep.clsProcess.mTen dbSet.Tables[0].Rows[0]["mUserName"].ToString(); frmMain frm = new frmMain(); frm.Show(); this.Hide(); } else { MessageBox.Show("Bạn nhập sai Password","Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Exclamation ); txtMatkhau.Focus(); txtMatkhau.SelectAll(); } }
- Đồng thời để lấy được dữ liệu vào trong cboUser tiện lợi cho
quá trình đăng nhập thì bạn cũng cần thêm đoạn mã sau:
private void frmLogin_Load(object sender, EventArgs e) { //lấy thông tin đưa vào cboUser dbConn.Open(); DataSet dbset = new DataSet(); string str = "Select * From DangNhap"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn ); dbAdpt.Fill(dbset ); dbConn.Close(); cboUser.DataSource = dbset.Tables[0];
cboUser.DisplayMember = "mUserName";
- Nếu bạn không muốn đăng nhập để xem thông tin về công tác quản lý
sinh viên thực tập trong hệ thống nữa, bạn có thể click button Hủy bỏ.
this.Close();
30
Đoạn mã cho phương thức btnHuy chỉ với 1 câu lênh rất đơn giản:
III. Form đổi mật khẩu – frmDoiMatKhau
1. Quá trình thiết kế và thiết lập thuộc tính của frmDoiMatKhau
Hình 4.3: Form đổi mật khẩu
- Vào Add New Item -> Windows Form để tạo ra một form mới với tên
là frmDoiMatKhau. Dùng chuột để điều chỉnh kích thước của form tùy
theo người thiết kế hệ thống. Trong properties thay đổi thuộc tính text
của frmDoiMatKhau là Đổi mật khẩu.
- Từ toolbox, rê thành phần điều khiển groupbox vào form và điều chỉnh
kích thước của groupbox cho đầy form.
- Từ toolbox, rê thành phần điều khiển labe1 vào groupbox rùi đổi thuộc
tính Name là lbUser và text là UserName.
- Thêm label2 vào groupbox, đổi thuộc tính Name là lbPasscu và text là
Pasword cũ.
- Từ hộp công cụ rê thanh điều khiển label3 vào groupbox đỏi thuộc tính
name là lbPassmoi và text là Password mới
- Thêm label4 vào groupbox, đổi thuộc tính Name là lbNhapLaiPass và
text là Xác nhận lại.
- Từ hộp công cụ rê thanh điều khiển textbox vào groupbox, đặt kế bên
31
label1. Đổi thuộc tính Name là txtUserName và chọn thuộc tính
readonly là true cho textbox này để cho phép người dùng thay đổi mật
khẩu chứ không hco phép người dùng thay đổi tên sử dụng.
- Thêm textbox vào trong groupbox vào bên cạnh label2 và đổi thuộc
tính Name là txtPassCu.
- Từ hộp công cụ rê thanh điều khiển textbox vào groupbox trong form
vào bên cạnh label3, đổi thuộc tính name là txtPassMoi.
- Thêm textbox vào groupbox đặt bên cạnh label4, đổi thuộc tính name là
txtXacNhan.
- Từ toolbox, rê thanh điều khiển button vào groupbox, thay đổi thuộc
tính name là btnLuuthaydoi và text là Lưu thay đổi.
- Thêm button vào groupbox, thay đổ thuộc tính name là btnThoat và
text là Thoát.
2. Xử lý các sự kiện trong frmDoiMatKhau
Xử lý sự kiện cho btnLuuthaydoi:
- Khi mật khẩu mà hệ thống cung cấp cho các đổi tượng không được bảo
mật, hay các dối tượng đó muốn thay đổi mật khẩu thì sẽ nhập đúng
password cũ vào txtPassCu, nếu nhập sai hệ thống sẽ hiển thị một hộp
thoại thông báo “Nhập mật khẩu cũ sai.Hãy nhập lại!”. Nếu nhập đúng
passwprd cũ thì tiếp tục nhập password mới mà bạn muốn thay đổi rùi
sau đó xác nhận lại 1 lần nữa.Nếu bạn không xác nhận lại thì hệ thống
sẽ có 1 hộp thoại thông báo “Xác nhận mật khẩu sai. Hãy nhập lại!”.
Nếu đã nhập tất cả các thông tin theo yêu cầu của hệ thống thì mật khẩu
sẽ được thay đổi thành công. Hệ thống hiển thị thông báo “Đã thay đổi
thành công”.
- Để thực hiện được các mô tả như trên thì bạn cần thêm 1 đoạn mã vào
phương thức của btnLuuthay doi sau khi đã kết nối cơ sở dữ liệu bằng
32
câu lệnh:
OleDbConnection dbConn = new OleDbConnection("Provider =
Microsoft.JET.OLEDB.4.0;
Data
Source
=
"
+
Application.StartupPath + "\\QLSVTT.mdb");
=
new
dbAdpt
==
(txtPassCu.Text
mdbCmd
new
=
thay
đổi
lại",
báo",
dbConn.Open(); DataSet dbSet = new DataSet(); string strString = "Select * From DangNhap Where mUserName = '" + txtUserName.Text + "'"; OleDbDataAdapter OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if dbSet.Tables[0].Rows[0]["mPassword"].ToString()) { if (txtPassMoi.Text == txtXacNhan.Text ) { dbConn.Open(); string mstrString = "Update DangNhap Set mPassword = '" + txtPassMoi.Text + "' Where mUserName = '" + txtUserName.Text + "'"; OleDbCommand OleDbCommand(mstrString, dbConn); mdbCmd.ExecuteNonQuery(); dbConn.Close(); MessageBox.Show("Đã thành công","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Information ); this.Close(); } else { MessageBox.Show("Xác nhận mật khẩu sai. Hãy nhập MessageBoxButtons.OK, "Thông MessageBoxIcon.Exclamation); txtXacNhan.Focus(); txtXacNhan.SelectAll(); } } else { MessageBox.Show("Nhập mật khẩu cũ sai. Hãy nhập lại","Thông báo",MessageBoxButtons.OK, MessageBoxIcon.Exclamation ); txtPassCu.Focus(); txtPassCu.SelectAll(); } }
33
Đoạn mã của btnLuuthaydoi:
Xử lý sự kiện cho btnThoat
- Tương tự như các form khác. Để đóng form này lại t chỉ cần thêm 1 câu
this.Close();
lệnh:
IV. Form sinh viên – frmSinhVien
1. Quá trình thiết kế và thiết lập thuộc tính của frmSinhVien:
Hình 4.4: Form sinh viên
- Vào Add New Item -> Windows Form để tạo ra một form mới với tên
34
là frmSinhVien.
- Trong hộp công cụ, rê thanhd diều khiển groupbox vào form, đổi thuộc
tính name là grTTSV, grTK, grThongtinsvvà text là Thông tin sinh
viên, Tìm kiếm, Thông tin về sinh viên.
- Từ toolbox, rê 10 thanh điều khiển label vào grTTSV rồi lần lượt đổi
thuộc tính Name cho nó là lbMaLop, lbMaSV, lbTenSV, lbMaNhom,
lbNgaySinh, lbNoiSinh, lbSDT, lbGioiTinh, lbEmai, lbDiaChi và đổi
text tương ứng là: Mã lớp, Mã sinh viên, Tên sinh viên, Mã nhóm,
Ngày sinh, Nơi sinh, Số điện thoại, Giới tính, Email, Địa chỉ.
- Thêm các combobox vào grTTSV, đổi thuộc tính name cho nó lần lượt
là cbMaLop, cbMaNhom.
- Thêm các textbox vào grTTSV, đổi thuộc tính Name lần lượt là
txtMaSV, txtTenSV, txtNoiSinh, txtSDT, txtEmail, txtDiaChi.
- Từ toolbox rê thanh điều khiển datatimepicker vào grTTSV đỏi tên
thuộc tính name là dtPickerNgaySinh.
- Thêm thanh điều khiển radio vào trong grTTSV, đổi thuộc tính name là
rdNam, rdNu tương ứng với text Nam, Nữ.
- Thêm label vào grTK, đổi thuộc tính name là lbLop, lbMaSinhVien,
lbTenSinhVien và text tương ứng: Lớp, mã sinh viên, tên sinh viên.
- Thêm combobox vào grTK, thuộc tính name là cboL.
- Thêm textbox vào grTK, đổi thuộc tính name là txtTimMaSV,
txtTimTenSV.
- Thêm linklabel vào grTK, đổi thuộc tính name là llbMaSV, llbTenSV
và text tương ứng: Tìm MaSV, Tìm TenSV
- Thêm các button vào form, đổi thuộc tính name là btnThemSV,
btnXoaSV, btnLuuSV, btnSuaSV, btnDongLai.
- Từ hộp công cụ rê thanh điều khiển datagridview vào
35
grThongtinsinhvien, đởi thuộc tính name là dgvListSinhVien.
- Thêm linklabel vào form, thuộc tính name là llbXemTatCa và text là
Xem tất cả.
2. Xử lý các sự kiện trong frmSinhVien:
- Sau khi đã kết nối thành công cơ sở dữ liệu bằng câu lệnh dưới đây thì
//câu lệnh kết nối csdl
OleDbConnection dbConn = new OleDbConnection("Provider
=
Microsoft.JET.OLEDB.4.0;
Data
Source
=
"
+
Application.StartupPath + "\\QLSVTT.mdb");
ta sẽ tiến hành xử lý các sự kiện trong frmSinhVien:
Xử lý sự kiện cho nút btnThemSV:
- Thêm sinh viên chỉ là hình thức làm trắng các ô textbox và combobox
để cho các đối tượng sử dụng hệ thống có thể nhập đấy đủ các thông tin
cần thêm của một sinh viên vào đó. Sau lhi đã nhập đỉ các thông tin cần
thiết về sinh viên thì bạn click vào button Lưu
- Để làm trắng lại các ô textbox và combobox thì bạn phải thêm đoạn mã
//Nhập trắng lại các ô textbox và combobox private void btnThemSV_Click(object sender, EventArgs e) { txtMaSV.Text = ""; txtTenSV.Text = ""; txtNoiSinh.Text = ""; txtSDT.Text = ""; txtEmail.Text = ""; txtDiaChi.Text = ""; btnLuuSV.Text = "Lưu";
}
sau vào btnThemSV:
Xử lý sự kiện cho nút btnSuaSV:
- Nếu cán bộ quản lý sinh viên thực tập muốn chỉnh sửa lại các thông tin
về sinh viên trong khoa công nghệ thông tin thì sẽ vào form nsinh viên,
chon 1 một sinh viên cần sửa từ datagridview rồi nhấn nút sửa, nút lưu
sẽ chuyển thành nứt cập nhật. Các thông tin về sinh viên đó sẽ được
hiển thị lên các textbox hay combobox ở trên. Cán bộ quản sinh sẽ sửa
lại thông tin tại các ô textbox và combobox rùi nhấn nút cập nhật.
36
Thông tin đã sửa về sinh viên sẽ được hiển thị ngay trên lưới có thể
thấy được ngay. Lưu ý: khi chọn sửa bất kỳ 1 row nào trong
datagridview thì bạn phải click vào xem tất cả rùi mới sửa nếu không
thực hiện các bước như vậy hệ thống sẽ báo lỗi.
- Để thực hiện được các mô tả như ở trên thì bạn phải thêm đoạn mã sau
=
strString SinhVien.MaSV,
=
new
dbAdpt
=
=
=
=
=
=
=
=
//sửa thông tin về sinh viên private void btnSuaSV_Click(object sender, EventArgs e) { if (dgvListSinhVien.SelectedRows.Count > 0) { dbConn.Open(); DataSet dbset = new DataSet(); "SELECT string SinhVien.TenSV, Lop.TenLop,SinhVien.MaLop, SinhVien.NgaySinh, SinhVien.DienThoai, SinhVien.NoiSinh, SinhVien.GioiTinh, SinhVien.Email, SinhVien.DiaChi FROM Lop INNER JOIN SinhVien ON Lop.MaLop = SinhVien.MaLop Where MaSV = '" + dgvListSinhVien.SelectedRows[0].Cells[0].Value + "'"; OleDbDataAdapter OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbset); dbConn.Close(); cboMaLop.Text dbset.Tables[0].Rows[0]["MaLop"].ToString(); txtMaSV.Text dbset.Tables[0].Rows[0]["MaSV"].ToString(); txtTenSV.Text dbset.Tables[0].Rows[0]["TenSV"].ToString(); dtPickerNgaySinh.Text dbset.Tables[0].Rows[0]["NgaySinh"].ToString(); txtNoiSinh.Text dbset.Tables[0].Rows[0]["NoiSinh"].ToString(); txtSDT.Text dbset.Tables[0].Rows[0]["DienThoai"].ToString(); if (dbset.Tables[0].Rows[0]["GioiTinh"].ToString().Equals("True")) { rbtNam.Checked = true; } else { rbtNu.Checked = true; } txtEmail.Text dbset.Tables[0].Rows[0]["EMail"].ToString(); txtDiaChi.Text dbset.Tables[0].Rows[0]["DiaChi"].ToString(); } btnLuuSV.Text = "Cập Nhật"; cboMaLop.Visible = true;
37
cho phương thức btnSuaSV:
}
Xử lý sự kiện cho nút btnLuuSV:
- Khi người quanr lý hệ thống đăng nhập thành công và muốn vào sửa
hay thêm các thông tin về sinh viên thì các thông tin đó cần phải lưu lại
trong cơ sở dữ liệu sau khi thêm hoặc sửa. Nếu bạn thêm thông tin sinh
viên thì nút lưu vẫn là lưu, còn nếu bạn sửa thông tin sinh viên thì nút
lưu sẽ chuyển thành cập nhật.
- Như vậy button btnLuuSV là rất quan trọng trong việc cập nhật những
thay đổi thông tin về sinh viên thực tập.
dbAdpt
new
(txtMaSV.Text
!=
//cập nhật thông tin sinh viên private void btnLuuSV_Click(object sender, EventArgs e) { dbConn.Open(); if (btnLuuSV.Text == "Cập Nhật") { string strString = "Update SinhVien Set MaSV = '" + txtMaSV.Text + "', TenSV = '" + txtTenSV.Text + "', NgaySinh = '" + dtPickerNgaySinh.Text + "', NoiSinh = '" + txtNoiSinh.Text + "', DiaChi = '" + txtDiaChi.Text + "', DienThoai = '" + txtSDT.Text + "', GioiTinh = " + rbtNam.Checked + ", Email = '" + txtEmail.Text + "', MaNhom = '" + cboMaNhom.Text + "', MaLop = '" + cboMaLop.Text + "' Where MaSV = '" + txtMaSV.Text + "'"; OleDbCommand dbCmd = new OleDbCommand(strString, dbConn); dbCmd.ExecuteNonQuery(); newRefresh(); } else { DataSet dbSet = new DataSet(); string mstr = "Select * From SinhVien"; OleDbDataAdapter = OleDbDataAdapter(mstr, dbConn); dbAdpt.Fill(dbSet); if dbSet.Tables[0].Rows[0]["MaSV"].ToString()) {
38
- Sau đây là đoạn mã cần phải thêm vào phương thức btnLuuSV:
dbInsert
new
=
"Thông
viên.
lại",
sinh
kiểm
tra
Hãy
"Thông
lại",
báo",
nhập
if ((txtMaSV.Text != "") && (txtTenSV.Text != "")) { //dbConn.Open(); string strInsert = "Insert into Sinhvien values('"; strInsert += txtMaSV.Text + "','"; strInsert += txtTenSV.Text + "','"; strInsert += dtPickerNgaySinh.Value + "','"; strInsert += txtNoiSinh.Text + "','"; strInsert += txtDiaChi.Text + "','"; strInsert += txtSDT.Text + "',"; strInsert += rbtNam.Checked + ",'"; strInsert += txtEmail.Text + "','"; strInsert += cboMaLop.Text + "','"; strInsert += cboMaNhom.Text + "')"; OleDbCommand OleDbCommand(strInsert, dbConn); dbInsert.ExecuteNonQuery(); dbConn.Close(); newRefresh(); } else { MessageBox.Show("Chưa nhập mã sinh viên và tên báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else { MessageBox.Show("Đã Trùng mã sinh viên. Mời MessageBoxButtons.OK, bạn MessageBoxIcon.Exclamation); txtMaSV.Focus(); txtMaSV.SelectAll(); } }
}
Xử lý sự kiện cho nút btnXoaSV:
- Khi muốn xóa thông tin về một sinh viên nào đó thì bạn chỉ cần chọn 1
row ở datagridview rùi click vào button xóa. Một hộp thoại thông báo
hỏi “Bạn có muốn xóa hay không?” hiện ra. Nếu đồng ý xóa thì chọn
Yes thông tin về sinh viên đó sẽ được loại bỏ khỏi danh sách sinh viên
đã hiển thị trên datafridview, nếu không thì chọn No thông tin vẫn còn
39
đảm bảo toàn vẹn.
- Để làm được điều đó, bạn chỉ cần thêm đoạn mã sau vào nút btnXoaSV
//xóa thông tin sinh viên private void btnXoaSV_Click(object sender, EventArgs e) { if (MessageBox.Show("Bạn có muốn xóa hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { dbConn.Open(); string str = "Delete from SinhVien Where MaSV = '" + dgvListSinhVien.SelectedRows[0].Cells[0].Value + "'"; OleDbCommand dbDelete = new OleDbCommand(str, dbConn); dbDelete.ExecuteNonQuery(); dbConn.Close(); newRefresh(); }
}
là hệ thống sẽ làm việc được như trên:
Xử lý sự kiện cho nút btnDongLai:
- Tương tự như các câu lệnh xử lý đống form lại ở trên, bạn cũng chỉ cần
private void btnDongLai_Click(object sender, EventArgs e) { this.Close();
}
dùng 1 câu lệnh:
- Cũng có thể bạn dùng 1 câu lệnh khác để đống form ứng dụng đang
Application.Exit();
chạy lại:
Lấy dữ liệu vào các combobox::
- Vì để thay đổi các thông tin về sinh viên trong bảng sinh viên thì bạn
cần phải để ý đến ràng buộc N – 1 giữa chúng với bảng lớp và nhóm
thực tập. Đặc biệt khi thêm mới sinh viên, thì điều đó là khá quan
trọng, nếu không câu lệnh truy vấn của bạn sẽ bị lỗi trong khi insert các
trường đó vào datagridview.
- Chính vì lý do đó mà bạn cần tiến hành viết mã ở một phương thức
//thực hiện hiển thị dữ liệu vào lưới và dưa thông tin tên lớp và mã lớp và cboL và cboMaLop
40
frmSinhVien_Load như sau:
=
dbAdptm
new
private void frmSinhVien_Load(object sender, EventArgs e) { newRefresh();//Câu lệnh gọi phương thức newRefresh dbConn.Open(); string strString = "Select MaLop, TenLop From Lop"; DataSet dbSet = new DataSet(); OleDbDataAdapter OleDbDataAdapter(strString, dbConn); dbAdptm.Fill(dbSet); cboL.DataSource = dbSet.Tables[0]; cboL.DisplayMember = "TenLop"; cboMaLop.DataSource = dbSet.Tables[0]; cboMaLop.DisplayMember = "MaLop"; // Đưa thông tin vào cboMaNhom DataSet dbSetm = new DataSet(); string str = "Select MaNhom From NhomTT"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSetm); dbConn.Close(); cboMaNhom.DataSource = dbSetm.Tables[0]; cboMaNhom.DisplayMember = "MaNhom";
}
- Dữ liệu sẽ được lấy vào trong cac cboL và cboMaLop, cboMaNhom. Khi
chạy chương trình, các dữ liệu này sẽ cố định và sổ xuống để người dùng tự
chọn tùy theo yêu cầu mỗi người.
Lấy dữ liệu cho dgvListSinhVien:
- Để xem thông tin chung về sinh viên và để hiển thị những thay đổi thông tin
vê sinh viên thì bạn cần khai báo một phương thức mới là Private void
newRefresh(). Đồng thời dùng lưới để bớt đi 1 khâu tim kiếm trước khi thao
tác câc chức năng sửa và cập nhật thông tin. Ở đây, sửa thông tin sinh viên
/private hiển thị csdl vào datagridview private void newRefresh() { //dbConn.Open(); OleDbDataAdapter dbAdpt = new OleDbDataAdapter("SELECT * FROM SinhVien", dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dgvListSinhVien.DataSource = dbSet.Tables[0]; }
41
không cần thông qua việc tìm kiếm.
Xử lý sự kiện cho llbXemTatCa:
- Sau khi thay đối thông tin sinh viên hay tìm kiếm sinh viên nào đó thì bạn
có thể click vào xem tất cả để xem tất cả các dữ liệu có trong cơ sở dữ liệu
private void linklbXemTatCa_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { newRefresh();
}
gốc hoặc trong lưới. Chỉ với 1 câu lệnh gọi ra phương thức newRefresh
Xử lý sự kiện cho llbTimMaSV:
- Bạn có thể tìm kiếm sinh viên theo khó chính của bảng sinh viên là mã
sinh viên. Trước hi tìm kiếm bạn hãy chọn lớp của sinh viên đó rùi nhập
thông tin mã sinh viên chính xác , hệ thống sẽ tìm cho bạn thông tin về sinh
viên có mã sinh viên như vậy. Thông tin sẽ được hiển thj trên lưới. Nếu
bạn chọn sai lớp hay nhập sai mã sinh viên thì hệ thống sẽ hiển thị hộp
thoại thông báo “Không tìm thấy thông tin sinh viên nào”. Bạn có thể nhập
void
sender,
llbMaSV_LinkClicked(object
SinhVien.NgaySinh, SinhVien.DienThoai,
dbAdpt
new
=
Kiếm",
nào",
"Tìm
//tìm kiếm thông tin sinh viên theo mã sinh viên private LinkLabelLinkClickedEventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string strString = "SELECT Lop.TenLop, SinhVien.MaSV, SinhVien.NoiSinh, SinhVien.TenSV, SinhVien.DiaChi, SinhVien.GioiTinh, SinhVien.Email FROM Lop INNER JOIN SinhVien ON Lop.MaLop = SinhVien.MaLop WHERE (((Lop.TenLop)='" + cboL.Text + "') AND ((SinhVien.MaSV)='" + txtTimMaSV.Text + "'))"; OleDbDataAdapter OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { dgvListSinhVien.DataSource = dbSet.Tables[0]; } else { MessageBox.Show("Không tìm thấy thông tin sinh viên MessageBoxButtons.OK, MessageBoxIcon.Exclamation); }
42
lại mã sinh viên hoặc kết thức sử sụng hệ thống
}
Xử lý sự kiện cho cboL:
SinhVien.NgaySinh, SinhVien.DienThoai,
private void cboL_SelectedIndexChanged(object sender, EventArgs e) { //dbConn.Open(); string str = "SELECT Lop.TenLop, SinhVien.MaSV, SinhVien.NoiSinh, SinhVien.TenSV, SinhVien.DiaChi, SinhVien.GioiTinh, SinhVien.Email, SinhVien.MaLop, SinhVien.MaNhom FROM Lop INNER JOIN SinhVien ON Lop.MaLop = SinhVien.MaLop WHERE Lop.TenLop ='" + cboL.Text + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dgvListSinhVien.DataSource = dbSet.Tables[0]; }
- Để giới hạn phạm vi tìm kiếm thì bạn nên khi bạn nên khai báo một phương thức mới private void cboL_SelectedIndexChanged(object sender, EventArgs e). Việc tìm kiếm sẽ đơn giản hơn khi được giới hạn về pham vi tìm kiếm:
Xử lý sự kiện cho llbimTenSV:
- Trên là mã cho llbTimMaSV, còn bạn cũng có thể tìm kiếm thông tin của
bất cứ sinh viên nào theo tên của sinh viên đó nếu bạn không còn nhớ mã sinh
viên. Nhập tên sinh viên cần tìm vào textbox và click vào linklabel Tìm
void
sender,
//tìm kiếm thông tin sinh viên theo tên sinh viên llbTenSV_LinkClicked(object
SinhVien.NgaySinh, SinhVien.DienThoai,
dbAdpt
new
=
private LinkLabelLinkClickedEventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string strString = "SELECT Lop.TenLop, SinhVien.MaSV, SinhVien.NoiSinh, SinhVien.TenSV, SinhVien.DiaChi, SinhVien.GioiTinh, SinhVien.Email FROM Lop INNER JOIN SinhVien ON Lop.MaLop = SinhVien.MaLop WHERE (((Lop.TenLop)='" + cboL.Text + "') AND ((SinhVien.TenSV)='" + txtTimTenSV.Text + "'))"; OleDbDataAdapter OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { dgvListSinhVien.DataSource = dbSet.Tables[0];
43
MaSV, thông tin sinh viên sẽ tự động hiển thị trên lưới để bạn dễ dàng xem.
Kiếm",
nào",
"Tìm
} else { MessageBox.Show("KHông tìm thấy thông tin sinh viên MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
V. Form Giảng viên – frmGiangVien
1. Quá trình thiết kế và thiết lập thuộc tính của frmGiangVien
Hình 4.5: Form giảng viên
- Vào Add New Item -> Windows Form để tạo ra một form mới có tên là
femGiangVien. Trong properties nhập tên tiêu đề cho form là: Thông
44
tin giảng viên
- Từ hộp công cụ toolbox, rê các groupbox vào form và thay đổi thuộc
tính Name cho chũng là: groupbox1, groupbox2, groupbox3 và text là
hồ sơ giảng viên, thông tin về giảng viên, tìm kiếm.
- Thêm các label vào groupbox1, thay đổi thuộc tính Name cho chúng
lần lượt là: lbMaBM, lbMaGV, lbTenGV, lbNS, lbGT, lbSDT,
lbEmail, lbDiaChi và text tương ứng là: Mã bộ môn, mã giảng viên,
tên giảng viên, ngày sinh, giói tính, số điện thoại, email.
- Thêm các textbox vào groupbox1, đổi thuộc tính Name lần lượt là :
txtMaBM, txtMaGV, txtTenGV, txtSDT, txtEmail, txtDiaChi đặt
bên cạnh các label tương tứng ở trên.
- Thêm datatimepicker vào groupbox1 đặt bên cạnh label ngày sinh, đổi
thuộc tính Name là dtPickerNgaySinh.
- Thêm radio vào bên cạnh label giới tính, đổi thuộc tính Name cho nó là
rdNam, rdNu và text là Nam và Nữ.
- Từ toolbox, thêm label Mã GV và TenGV vào groupbox3. Đồng thời
thêm txtTimMaGV, txtTimTenGV vào bên cạnh các label đó.
- Thêm linklabel Tìm MaGV và Tìm TenGV vào bên cạnh các textbox
- Thêm label vào form, đổi thuộc tính Name là lbBM và text là Tên bộ
môn. Đồng thời thêm txtTenBM
- Từ toolbox rê thanh điều khiển datagridview vào groupbox2, đổi thuộc
tính name là dgvTTGV.
- Thêm linklbTimTatCa vào form.
- Thêm các button vào form: btnThemGV, btnSuaGV, btnXoaGV,
btnLuuGV, btnThoat.
2. Xử lý các sự kiện trong frmGiangVien:
- Sau khi kết nối csdl bằng câu lệnh thì ta sẽ lần lượt xử lý các sự kiện
//kết nối csdl
45
cho từng button và combobox, datagridview:
OleDbConnection dbConn = new OleDbConnection("Provider
=
Microsoft.JET.OLEDB.4.0;
Data
Source
=
"
+
Application.StartupPath + "\\QLSVTT.mdb");
Xử lý sự kiện cho nút btnThemGV:
- Khi muốn thêm giảng viên mới và các thông tin liên quan đến giảng
viên đó thì bạn chỉ cần nhấn nút thêm, các ô textbox và combobox,
datatimepicker ..sẽ tự động nhập trắng lại. Bạn nhập thông tin về giảng
viên đó vào đó rùi nhấn lưu. Thông tin về giảng viên vừa thêm sẽ có
mặt trong datagridview.
- Để làm được điều đó, bạn phải thêm đoạn mã sau vào phương thức
//Nhập trắng lại các ô textbox và combobox để thêm dữ liệu vào csdl private void btnThemGV_Click(object sender, EventArgs e) { txtMaGV.Text = ""; txtTenGV.Text = ""; dtPickerNgaySinh.Text = ""; txtSDT.Text = ""; txtEmail.Text = ""; txtDiaChi.Text = ""; txtMaBM.Text = ""; btnLuuGV.Text = "Lưu";
}
btnThemGV:
Xử lý sự kiện cho nút btnLuuGV:
- Đây là button hỗ trợ cho việc thêm và sửa thông tin giảng viên. Sau khi
thay đổi thông tin thì thông tin về giảng viên đó phải được lưu lại trong
datagridview. Khi nhấn nút thêm thì btnLuuGV vẫn là Lưu, còn khi
nhấn nút sửa thì btnLuuGV sẽ chuyển đổi lại thành Cập nhật
//cập nhật thông tin về giảng viên private void btnLuuGV_Click(object sender, EventArgs e) { dbConn.Open(); if (btnLuuGV.Text == "Cập Nhật") { //dbConn.Open(); string strUpdate = "Update GiangVienHDTT Set MaGV = '" + txtMaGV.Text + "', TenGV = '" + txtTenGV.Text + "',
46
-
=
new
dbAdpt
!=
(txtMaGV.Text
strInsert
"Insert
Into
txtEmail.Text
"','"
+
+
mdbComd
new
=
GioiTinhGV= " + rdNam.Checked + ", NgaySinhGV = '" + dtPickerNgaySinh.Text + "',SDT = '" + txtSDT.Text + "',EMailGV = '" + txtEmail.Text + "',DiaChiGV = '" + txtDiaChi.Text + "' Where MaGV = '" + txtMaGV.Text + "'"; OleDbCommand dbCmd = new OleDbCommand(strUpdate, dbConn); dbCmd.ExecuteNonQuery(); btnLuuGV.Text = "Lưu"; HienThi(); txtMaGV.ReadOnly = false; } else { DataSet dbSet = new DataSet(); string mstr = "Select * From GiangVienHDTT"; OleDbDataAdapter OleDbDataAdapter(mstr, dbConn); dbAdpt.Fill(dbSet); if dbSet.Tables[0].Rows[0]["MaGV"].ToString()) { if ((txtMaGV.Text != "") && (txtTenGV.Text != "")) { //dbConn.Open(); = string GiangVienHDTT Values('" + txtMaGV.Text + "','" + txtTenGV.Text + "'," + rdNam.Checked + ",'" + dtPickerNgaySinh.Text + "'," + txtSDT.Text + ",'" + txtDiaChi.Text + "','" + txtMaBM.Text + "')"; OleDbCommand OleDbCommand(strInsert, dbConn); mdbComd.ExecuteNonQuery(); dbConn.Close(); HienThi(); txtMaGV.ReadOnly = false; txtTenGV.ReadOnly = false; txtMaBM.ReadOnly = false; } else { MessageBox.Show("Chưa nhập mã giảng viên và tên giảng viên. Hãy kiểm tra lại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else {
47
bạn
lại",
"Thông
báo",
MessageBox.Show("Đã trùng mã giảng viên. MessageBoxButtons.OK, nhập Mời MessageBoxIcon.Exclamation); txtMaGV.Focus(); txtMaGV.SelectAll(); } } }
Xử lý sự kiện cho nút btnSuaGV:
- Khi các thông tin về giảng viên đã được thay đổi, thông tin trong hệ
thống đã không còn phù hớp với thực tế. Hệ thống phải cập nhật lại
thông tin cho chính xác và người quản lý hệ thống sẽ làm công việc
này.
- Để sửa thông tin về bất kỳ giảng viên nào đó, bạn chọn 1 row trong
datagridview có chứa đầy đủ các thông tin về giảng viên cần sửa rồi
nhấn nút sửa, nút lưu chuyển thành cập nhật. Thông tin đó sẽ được hiển
thị lên các ô textbox, combobox, datatimepicker, radio…tương ứng.
Bán sẽ chỉnh sửa thông tin trong đó rồi nhấn nút cập nhật. Thông tín sẽ
được chỉnh sửa lại và lưu lại trong lưới.
=
str
"SELECT
GiangVienHDTT
INNER
JOIN
BoMon.MaBM '"
ON =
Where
MaGV
dbAdpt
new
=
=
=
//Sửa thông tin về giảng viên private void btnSuaGV_Click(object sender, EventArgs e) { if (dgvTTGV.SelectedRows.Count > 0) { dbConn.Open(); DataSet dbSet = new DataSet(); string BoMon.TenBM, GiangVienHDTT.MaGV, GiangVienHDTT.TenGV, GiangVienHDTT.GioiTinhGV, GiangVienHDTT.NgaySinhGV, GiangVienHDTT.SDT, GiangVienHDTT.EmailGV, GiangVienHDTT.DiaChiGV, GiangVienHDTT.MaBM = BoMon FROM GiangVienHDTT.MaBM + dgvTTGV.SelectedRows[0].Cells[0].Value + "'"; OleDbDataAdapter OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); txtMaBM.Text dbSet.Tables[0].Rows[0]["MaBM"].ToString(); txtMaGV.Text dbSet.Tables[0].Rows[0]["MaGV"].ToString();
48
- Dưới đây là đoạn mã của phương thức btnSuaGV:
=
=
=
=
=
txtTenGV.Text dbSet.Tables[0].Rows[0]["TenGV"].ToString(); dtPickerNgaySinh.Text dbSet.Tables[0].Rows[0]["NgaySinhGV"].ToString(); if (dbSet.Tables[0].Rows[0]["GioitinhGV"].ToString().Equals("True")) { rdNam.Checked = true; } else { rdNu.Checked = true; } txtSDT.Text dbSet.Tables[0].Rows[0]["SDT"].ToString(); txtDiaChi.Text dbSet.Tables[0].Rows[0]["DiaChiGV"].ToString(); txtEmail.Text dbSet.Tables[0].Rows[0]["EmailGV"].ToString(); } btnLuuGV.Text = "Cập Nhật"; txtMaBM.Visible = true; }
Xử lý sự kiện cho nút btnXoaGV:
- Tương tự như sinh viên, để xóa thông tin của một giảng viên nào đó,
bạn chỉ cần chọn 1 row trong dtgridview có chứa thông tin của giảng
viên đó và nhấn nút xóa. Một hộp thoại thông báo sẽ hiện ra hỏi “Bạn
có muốn xóa hay không?”. Nếu đồng ý xóa thì chọn Yes, row đó sẽ
biến mất khỏi dtgridview. Còn không muốn tiếp tục xóa thì chọn No,
dữ liệu vẫn được toàn vẹn như cũ.
//xóa thông tin về giảng viên private void btnXoaGV_Click(object sender, EventArgs e) { if (MessageBox.Show("Bạn có muốn xóa hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { dbConn.Open(); string str = "Delete from GiangVienHDTT Where MaGV = '" + dgvTTGV.SelectedRows[0].Cells[0].Value + "'"; OleDbCommand dbDelete = new OleDbCommand(str, dbConn); dbDelete.ExecuteNonQuery();
49
- Đoạn mã của btnXoaGV:
dbConn.Close(); HienThi(); }
}
Xử lý sự kiện cho nút btnThoat:
//đóng form lại private void btnThoat_Click(object sender, EventArgs e) { this.Close();
}
- Xử lý nút thoát khỏi form chỉ với 1 câu lệnh:
Xem thông tin giảng viên theo từng bộ môn:
- Để xem thông tin giảng viên theo từng bộ môn bạn chỉ cần chọn bộ
môn trong cbTenBoMon mà nó sổ xuống.
=
"SELECT
//hiển thị thông tin giảng viên từ cbTenBM private void cbTenBM_SelectedIndexChanged(object sender, EventArgs e) { dbConn.Open(); GiangVienHDTT.MaGV, string str GiangVienHDTT.GioiTinhGV, GiangVienHDTT.TenGV, GiangVienHDTT.GioiTinhGV, GiangVienHDTT.NgaySinhGV, GiangVienHDTT.SDT, GiangVienHDTT.EmailGV, GiangVienHDTT.DiaChiGV, BoMon.MaBM FROM BoMon INNER JOIN GiangVienHDTT ON BoMon.MaBM = GiangVienHDTT.MaBM WHERE BoMon.TenBM ='" + cbTenBM.Text + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dgvTTGV.DataSource = dbSet.Tables[0];
}
private Thêm phương thức mới void sender, - cbTenBM_SelectedIndexChanged(object EventArgs e):
Đưa dữ liệu cho dgvTTGV và cboTenBM:
- Đưa dữ liệu vào dgvTTGV để hiển thị tất cả các thông tin về giảng
viên. Đồng thời giúp cho việc sửa lại thông tin bằng cách chọn row ở
lưới rồi đưa lên textbox, combobox và datatimepicker..
50
- Đoạn mã :
//private hiển thị thông tin lên lưới private void HienThi() { //dbConn.Open(); string str = "Select * From GiangVienHDTT"; OleDbDataAdapter dbAdapt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdapt.Fill(dbSet); dbConn.Close(); dgvTTGV.DataSource = dbSet.Tables[0]; } //câu lệnh hiển thị thông tin về giảng viên và lấy dữ liệu vào cbTenBM private void frmGiangVien_Load(object sender, EventArgs e) { HienThi(); dbConn.Open(); DataSet dbSet = new DataSet(); string str = "Select MaBM, TenBM From BoMon"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); cbTenBM.DataSource = dbSet.Tables[0]; cbTenBM.DisplayMember = "TenBM";
}
51
VI. Form bảng điểm – frmBangDiem
1. Quá trình thiết kế và thiết lập các thuộc tính của frmBangDiem
Hình 4.6: Form bảng điểm thực tập
- Vào Add New Item -> Windows Form để tạo ra form mới có tên là
frmBangDiem . Trong properties nhập tiêu đề cho form là: Thông tin
điểm thực tập
- Cũng giống như các form trên, ta dùng các groupbox, label và các
textbox, combobox, các button để thiết kế giao diện của form. Vào
properties để thay đổi thuộc tính của chũng cho thích hợp.
2. Xử lý các sự kiện trong frmBangDiem
// Câu lệnh kết nối cơ sở dữ liệu OLEDB
52
- Câu lệnh kết nối csdl:
OleDbConnection dbConn = new OleDbConnection("Provider
=
Microsoft.JET.OLEDB.4.0;
Data
Source
=
"
+
Application.StartupPath + "\\QLSVTT.mdb");
//Nhập trắng lại các ô textbox và combobox có trong form private void btnThem_Click(object sender, EventArgs e) { cbLHTT.Text = ""; txtLanTT.Text = ""; txtMaSV.Text = ""; txtDiemTT.Text = ""; txtTGTT.Text = ""; txtGhiChu.Text = ""; btnLuuDiem.Text = "Lưu";
}
Xử lý sự kiện cho nút btnThem
dbAdpt
new
=
=
=
=
=
=
//Chỉnh sửa thông tin về điểm thực tập của sinh viên private void btnSuaDiem_Click(object sender, EventArgs e) { //Sửa khi dữ liệu trong các row của datagrigview không có position là 0 if (dgvBangDiem.SelectedRows.Count > 0) { dbConn.Open(); DataSet dbSet = new DataSet(); string str = "Select * From BangDiemTT where MaSV = '" + dgvBangDiem.SelectedRows[0].Cells[0].Value + "'"; OleDbDataAdapter = OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); cbLHTT.Text dbSet.Tables[0].Rows[0]["TenLHTT"].ToString(); txtLanTT.Text dbSet.Tables[0].Rows[0]["LanThucTap"].ToString(); txtMaSV.Text dbSet.Tables[0].Rows[0]["MaSV"].ToString(); txtDiemTT.Text dbSet.Tables[0].Rows[0]["Diem"].ToString(); txtTGTT.Text dbSet.Tables[0].Rows[0]["ThoiGianTT"].ToString(); txtGhiChu.Text dbSet.Tables[0].Rows[0]["GhiChu"].ToString(); btnLuuDiem.Text = "Cập Nhật"; } }
53
Xử lý sự kiện cho nút btnSuaDiem
//Xóa các thông tin về điểm của sinh viên thực tập private void btnXoaDiem_Click(object sender, EventArgs e) { //Đưa ra thông báo "hỏi bạn có muốn xóa hay không?" trước khi thao tác xóa. Nếu chọn yes thì dữ liệu bạn xóa sẽ mất trong datagridviw if (MessageBox.Show("Bạn có muốn xóa hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { dbConn.Open(); string str = "Delete from BangDiemTT Where MaSV = '" + dgvBangDiem.SelectedRows[0].Cells[0].Value + "'"; OleDbCommand dbDelete = new OleDbCommand(str, dbConn); dbDelete.ExecuteNonQuery(); dbConn.Close(); HienThi(); } }
Xử lý sự kiện cho nút btnXoaDiem
txtLanTT.Text
Diem
"',
+
=
"
+
OleDbCommand(str,
dbCmd
new
=
private void btnLuuDiem_Click(object sender, EventArgs e) { //Thực hiện câu lệnh điều kiện để khi nhấn button sửa thì button lưu sẽ chuyển thành cập nhật if (btnLuuDiem.Text == "Cập Nhật") { dbConn.Open(); //Cập nhật cơ sở dữ liệu khi thay đổi csdl trong datagridview string str = "Update BangDiemTT set TenLHTT = '" + cbLHTT.Text + "',MaSV = '" + txtMaSV.Text + "', LanThucTap = '" + txtDiemTT.Text + ", ThoiGianTT = '" + txtTGTT.Text + "', GhiChu = '" + txtGhiChu.Text + "' Where MaSV = '" + txtMaSV.Text + "'"; OleDbCommand dbConn); dbCmd.ExecuteNonQuery(); dbConn.Close(); HienThi(); txtMaSV.ReadOnly = false; } else
54
Xử lý sự kiện cho nut btnLuuDiem
=
new
dbAdpt
!=
(txtMaSV.Text
dbInsert
new
=
"Thông
viên.
lại",
sinh
kiểm
Hãy
tra
"Thông
lại",
báo",
bạn
{ DataSet dbSet = new DataSet(); string mstr = "Select * From BangDiemTT"; OleDbDataAdapter OleDbDataAdapter(mstr, dbConn); dbAdpt.Fill(dbSet); if dbSet.Tables[0].Rows[0]["MaSV"].ToString()) { if (txtMaSV.Text != "") { dbConn.Open(); //Câu lệnh truy vấn đẻ insert các thông tin string strInsert = "Insert Into BangDiemTT Values('" + txtMaSV.Text + "','" + txtDiemTT.Text + "','" + cbLHTT.Text + "','" + txtLanTT.Text + "','" + txtTGTT.Text + "','" + txtGhiChu.Text + "')"; OleDbCommand OleDbCommand(strInsert, dbConn); dbInsert.ExecuteNonQuery(); dbConn.Close(); HienThi(); //txtMaSV.ReadOnly = false; } else { MessageBox.Show("Chưa nhập mã sinh viên và báo", tên MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else { MessageBox.Show("Đã Trùng mã sinh viên. MessageBoxButtons.OK, nhập Mời MessageBoxIcon.Exclamation); txtMaSV.Focus(); txtMaSV.SelectAll(); } } }
private void cbLHTT_SelectedIndexChanged(object sender, EventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet();
55
Xem thông tin bảng điểm thwo loại hình thực tập:
string str = "SELECT SinhVien.MaSV, BangDiemTT.Diem, BangDiemTT.TenLHTT, BangDiemTT.LanThucTap, BangDiemTT.ThoiGianTT, BangDiemTT.GhiChu FROM SinhVien INNER JOIN BangDiemTT ON SinhVien.MaSV = BangDiemTT.MaSV WHERE BangDiemTT.TenLHTT ='"+ cbLHTT.Text +"'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); dgvBangDiem.DataSource = dbSet.Tables[0]; }
void
sender,
llbTimMaSV_LinkClicked(object
=
"SELECT
strString
BangDiemTT.TenLHTT,
ON
SinhVien.MaSV
BangDiemTT.MaSV
=
new
=
"Thông
báo",
này",
viên
//Tìm kiếm thông tin về điểm thực tập của sinh viên theo mã sinh viên private LinkLabelLinkClickedEventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); SinhVien.MaSV, string BangDiemTT.Diem, BangDiemTT.LanThucTap, BangDiemTT.ThoiGianTT, BangDiemTT.GhiChu FROM SinhVien INNER JOIN Where BangDiemTT BangDiemTT.MaSV ='" + txtTimMaSV.Text + "'"; OleDbDataAdapter dbAdpt OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { dgvBangDiem.DataSource = dbSet.Tables[0]; } else { MessageBox.Show("Không tìm thấy thông tin điểm của MessageBoxButtons.OK, sinh MessageBoxIcon.Exclamation); }
}
Xử lý cho sự kiện lbbTimMaSV:
void
llbTimTenSV_LinkClicked(object
sender,
strString
"SELECT
=
BangDiemTT.Diem,
//Tmf kiếm thông tin về điểm thực tập của sinh viên theo tên sinh viên private LinkLabelLinkClickedEventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); SinhVien.TenSV, string BangDiemTT.MaSV, BangDiemTT.TenLHTT, BangDiemTT.LanThucTap, BangDiemTT.ThoiGianTT, BangDiemTT.GhiChu
56
Xử lý cho sự kiện btnTimTenSV:
=
new
dbAdpt
"Thông
báo",
này",
viên
FROM SinhVien INNER JOIN BangDiemTT ON SinhVien.MaSV = BangDiemTT.MaSV Where SinhVien.TenSv='" + txtTimTenSV.Text + "'"; OleDbDataAdapter OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { dgvBangDiem.DataSource = dbSet.Tables[0]; } else { MessageBox.Show("Không tìm thấy thông tin điểm của sinh MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
//Thoát khỏi form bảng điểm thực tập của sinh viên private void btnThoat_Click(object sender, EventArgs e) { this.Close();
}
Xử lý cho sự kiện btnThoat:
//Tạo một private hiển thị các thông tin về bảng điểm của sinh viên lên datagridview private void HienThi() { dbConn.Open(); string str = "SELECT BangDiemTT.MaSV, BangDiemTT.Diem, BangDiemTT.TenLHTT, BangDiemTT.LanThucTap, BangDiemTT.ThoiGianTT, BangDiemTT.GhiChu, IIF(Diem > 5,'Dat','Khong Dat') As KetQua FROM BangDiemTT"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dgvBangDiem.DataSource = dbSet.Tables[0]; } private void frmBangDiem_Load(object sender, EventArgs e) { //hiển thị thông tin về điểm thực tập của sinh viên lên datagridview HienThi(); //Thực hiện câu truy vấn và các câu lệnh để lấy thông tin về tên loại hình thực tập từ bảng điểm thực tập đưa vào cbLHTT dbConn.Open(); DataSet dbSet = new DataSet(); string str = "Select TenLHTT From BangDiemTT";
57
Lấy dữ liệu cho dgvBangDiem và cbLHTT:
OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); cbLHTT.DataSource = dbSet.Tables[0]; cbLHTT.DisplayMember = "TenLHTT";
}
VII. Forn nhóm thực tập – frmNhomTT
1. Quá trình thiết kế và thiết lập các thuộc tính của frmNhomTT
Hình 4.7: Form nhóm thực tập
- Vào Add New Item-> Windows Form để tạo ra một form mới có tên là
frmNhomTT. Trong properties nhạp vào text tên tiêu đề form là: Thông
58
tin về nhóm thực tập.
- Chọn các textbox và các button, linklabel, label để thiết kế giao diện
cho form nhóm thực tập
2. Xử lý các sự kiện trong frmNhomTT
dbAdpt
new
=
=
//Thực hiện sửa thông tin private void btnSuaNhom_Click(object sender, EventArgs e) { if (dgvNhomTT.SelectedRows.Count > 0) { dbConn.Open(); DataSet dbSet = new DataSet(); DataGridViewRow dr = dgvNhomTT.SelectedRows[0]; string str = "Select * From NhomTT Where MaNhom = '" + dr.Cells[0].Value + "'"; OleDbDataAdapter OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); DataTable dt = new DataTable(); dt = dbSet.Tables[0]; txtMaNhom.Text = dt.Rows[0]["MaNhom"].ToString(); txtDeTaiTT.Text dt.Rows[0]["DeTaiTT"].ToString(); txtLichTT.Text = dt.Rows[0]["LichTT"].ToString(); txtMaGV.Text = dt.Rows[0]["MaGV"].ToString(); btnLuuNhom.Text = "Cập Nhật"; txtMaGV.ReadOnly = true; txtMaNhom.ReadOnly = true; } else { MessageBox.Show("Chua Chon nhom sua", "Thong bao", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
Xử lý sự kiện cho nút btnSuaNhom:
//Thực hiện cập nhật thông tin về nhóm thực tập private void btnLuuNhom_Click(object sender, EventArgs e) { if ( btnLuuNhom.Text != "Cập Nhật" ) { dbConn.Open(); DataSet dbSet = new DataSet(); { if ((txtMaNhom.Text != "") && (txtLichTT.Text != "") && (txtMaGV.Text != "") && (txtDeTaiTT.Text != "")) {
59
Xử lý sự kiện cho nút btnLuuNhom:
=
new
dbAdpt
=
dbCmd
new
String strString = "Select * From NhomTT Where MaNhom = '" + txtMaNhom.Text + "'"; OleDbDataAdapter OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { MessageBox.Show("Đã TRùng dữ liệu", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); txtMaNhom.Focus(); txtMaNhom.SelectAll(); } else { string str = "Insert Into NhomTT Values('" + txtMaNhom.Text + "','" + txtDeTaiTT.Text + "','" + txtLichTT.Text + "','" + txtMaGV.Text + "')"; OleDbCommand OleDbCommand(str, dbConn); dbCmd.ExecuteNonQuery(); dbConn.Close(); HienThi(); } } else { MessageBox.Show("Kiểm tra xem có trường nào rỗng hay không!"); } } } else { txtMaNhom.ReadOnly = false; dbConn.Open(); string strStr = "Update NhomTT Set DeTaiTT = '" + txtDeTaiTT.Text + "', LichTT = '" + txtLichTT.Text + "', MaGV = '" + txtMaGV.Text + "' Where MaNhom = '" + txtMaNhom.Text + "'"; OleDbCommand dbCmd = new OleDbCommand(strStr, dbConn); dbCmd.ExecuteNonQuery(); dbConn.Close(); HienThi(); } }
//Xóa thông tin về nhóm private void btnXoaNhom_Click(object sender, EventArgs e) { int m; m = dgvNhomTT.SelectedRows[0].Index;
60
Xử lý sự kiện cho nút btnXoaNhom:
dbConn
=
dbCmd
new
=
if (dgvNhomTT.SelectedRows.Count > 0) { if (MessageBox.Show("Bạn Có muốn xóa không", "Thông Báo",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes) { OleDbConnection new OleDbConnection("Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + Application.StartupPath + "\\QLSVTT.mdb"); dbConn.Open(); String strString = "Delete From NhomTT Where MaNhom = '" + dgvNhomTT.SelectedRows[0].Cells[0].Value + "'"; OleDbCommand OleDbCommand(strString, dbConn); dbCmd.ExecuteNonQuery(); dbConn.Close(); HienThi(); }
}
//Đóng form nhóm thực tập lại private void btnThoatNhom_Click(object sender, EventArgs e) { this.Close(); }
Xử lý sự kiện cho nút btnThoatNhom:
void
sender,
lbbTimMaNhom_LinkClicked(object
strString
"SELECT
dbAdpt
new
=
//tìm thông tin về nhóm thực tập theo mã nhóm private LinkLabelLinkClickedEventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string GiangVienHDTT.MaGV, = NhomTT.MaNhom, NhomTT.DeTaiTT, NhomTT.LichTT FROM GiangVienHDTT INNER JOIN NhomTT ON GiangVienHDTT.MaGV = NhomTT.MaGV WHERE MaNhom = '" + txtTimMaNhom.Text + "'"; OleDbDataAdapter OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { dgvNhomTT.DataSource = dbSet.Tables[0]; } else {
61
Xử lý sự kiện cho llbTimMaNhom:
"Thông
MessageBox.Show("KHông tìm thấy thông tin nhóm MessageBoxButtons.OK, báo", này", MessageBoxIcon.Exclamation); } }
VIII. Form lớp – frmLop
1. Quá trình thiết kế và thiết lập các thuộc tính trong frmLop
Hình 4.8: Form lớp
- Vào Add New Item -> Windows Form để tạo ra một form mới có tên là
frmLop. Trong Properties nhập vào text tiêu đề của form là:thông tin về
lớp
- Thêm groupbox vào form, đổi thuộc tính name là grLop, grTuyChon,
và text là Thông tin về lớp, Tùy chọn
- Từ hộp công cụ rê các thnh điều khiển label vào trong grLop, đổi thuộc
tính name của chúng lân lượt là: lbMaKhoa, lbMaLop, lbSiSo,
62
lbTenLop và text tương ứng là: Mã khóa, Mã lớp, sĩ số, tên lớp.
- Thêm các button vào grTuyChon, đổi thuộc tính name của chũng là
btnSuaLop, btnCapNhat, btnThaotLop và text tương ứng là: Sửa, Cập
nhật, Thoát.
- Thêm label vào form, thuộc tính name là lbTenKhoa và text là Chọn
khóa học. Đồng thời thêm combobox vào ben cạnh label đó, đởi tên
thuộc tính name là cbTenKhoa.
- Thêm linklabel vào form, đổi thuộc tính name là LinkLbXemTatCar,
và text là Xem tất cả.
- Từ hộp công cụ đưa datagridview vào form, đổi thuộc tính name thành
dtgridTTLop.
2. Xử lý các sự kiện trong frmLop
//Câu lệnh kết nối csdl
OleDbConnection dbConn = new OleDbConnection("Provider
=
Microsoft.JET.OLEDB.4.0;
Data
Source
=
"
+
Application.StartupPath + "\\QLSVTT.mdb");
- Câu lệnh kết nối csdl:
Xử lý sự kiện cho btnSuaLop
- Cũng giống như các form trên, nút sửa ở form lớp cũng hoạt động
tương tự như vậy.
Lop.MaKhoa
Lop.MaLop
Where
'"
=
=
dbAdpt
new
=
//Sửa thông tin về lớp private void btnSuaLop_Click(object sender, EventArgs e) { if (dtgridTTLop.SelectedRows.Count > 0) { dbConn.Open(); DataSet dbSet = new DataSet(); string str = "SELECT KhoaHoc.TenKhoa, Lop.MaKhoa, Lop.MaLop, Lop.TenLop, Lop.SiSo FROM KhoaHoc INNER JOIN Lop ON + KhoaHoc.MaKhoa dtgridTTLop.SelectedRows[0].Cells[0].Value + "'"; OleDbDataAdapter OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close();
63
- Đoạn mã của btnSuaLop:
=
=
=
=
txtMaLop.Text dbSet.Tables[0].Rows[0]["MaLop"].ToString(); txtTenLop.Text dbSet.Tables[0].Rows[0]["TenLop"].ToString(); txtSiSo.Text dbSet.Tables[0].Rows[0]["SiSo"].ToString(); txtMaKhoa.Text dbSet.Tables[0].Rows[0]["MaKhoa"].ToString(); } //không cho phép sửa mã lớp, ten lớp, mã khoa txtMaLop.ReadOnly = true; txtTenLop.ReadOnly = true; txtMaKhoa.ReadOnly = true; } //Đưa dữ liệu vaò cbTenKhoa và đồng thời hiển thị dữ liệu vào lưới khi chọn khóa học private void cbTenKhoa_SelectedIndexChanged(object sender, EventArgs e) { dbConn.Open(); string str = "SELECT Lop.MaLop, Lop.TenLop, Lop.SiSo, KhoaHoc.TenKhoa FROM KhoaHoc INNER JOIN Lop ON KhoaHoc.MaKhoa = Lop.MaKhoa WHERE KhoaHoc.TenKhoa ='"+ cbTenKhoa.Text +"'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridTTLop.DataSource = dbSet.Tables[0]; } //Cập nhật dữa liệu private void btnCapNhat_Click(object sender, EventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string str = "Update Lop set MaKhoa = '" + txtMaKhoa.Text + "', SiSo = '" + txtSiSo.Text + "', TenLop = '" + txtTenLop.Text + "' Where MaLop = '" + txtMaLop.Text + "'"; OleDbCommand dbComd = new OleDbCommand(str, dbConn); dbComd.ExecuteNonQuery(); dbConn.Close(); HienThi(); txtMaLop.ReadOnly = false;
//Xem tất cả các thông tin của lớp private void linkLbXemTatCa_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { HienThi();
}
64
Xử lý sự kiện cho linklbXemTatCa:
//Đưa dữ liệu vaò cbTenKhoa và đồng thời hiển thị dữ liệu vào lưới khi chọn khóa học private void cbTenKhoa_SelectedIndexChanged(object sender, EventArgs e) { dbConn.Open(); string str = "SELECT Lop.MaLop, Lop.TenLop, Lop.SiSo, KhoaHoc.TenKhoa FROM KhoaHoc INNER JOIN Lop ON KhoaHoc.MaKhoa = Lop.MaKhoa WHERE KhoaHoc.TenKhoa ='"+ cbTenKhoa.Text +"'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridTTLop.DataSource = dbSet.Tables[0];
}
Xử lý cbTenKhoa
private void btnCapNhat_Click(object sender, EventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string str = "Update Lop set MaKhoa = '" + txtMaKhoa.Text + "', SiSo = '" + txtSiSo.Text + "', TenLop = '" + txtTenLop.Text + "' Where MaLop = '" + txtMaLop.Text + "'"; OleDbCommand dbComd = new OleDbCommand(str, dbConn); dbComd.ExecuteNonQuery(); dbConn.Close(); HienThi(); txtMaLop.ReadOnly = false;
}
Xử lý sự kiện cho btnCapNhat
//Đóng form lại private void btnThoatLop_Click(object sender, EventArgs e) { this.Close();
}
Xử lý sự kiện cho btnThoat
//Đưa dữ liệu vaò cbTenKhoa và đồng thời hiển thị dữ liệu vào lưới khi chọn khóa học private void cbTenKhoa_SelectedIndexChanged(object sender, EventArgs e) { dbConn.Open(); string str = "SELECT Lop.MaLop, Lop.TenLop, Lop.SiSo, KhoaHoc.TenKhoa FROM KhoaHoc INNER JOIN Lop ON KhoaHoc.MaKhoa = Lop.MaKhoa WHERE KhoaHoc.TenKhoa ='"+ cbTenKhoa.Text +"'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn);
65
Đưa lữ liệu vào cbTenKhoa
DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridTTLop.DataSource = dbSet.Tables[0];
}
//private để hiển thị thông tin vào datagridview private void HienThi() { dbConn.Open(); string str = "SELECT Lop.MaLop, Lop.TenLop, Lop.SiSo, KhoaHoc.TenKhoa FROM KhoaHoc INNER JOIN Lop ON KhoaHoc.MaKhoa = Lop.MaKhoa"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridTTLop.DataSource = dbSet.Tables[0]; } //Hiển thị dữ liệu và đưa thông tin tên khóa vào cbTenKhoa private void frmLop_Load(object sender, EventArgs e) { HienThi(); dbConn.Open(); string str = "SELECT TenKhoa FROM KhoaHoc"; DataSet dbSet = new DataSet(); OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); cbTenKhoa.DataSource = dbSet.Tables[0]; cbTenKhoa.DisplayMember = "TenKhoa";
}
66
Đưa dữ liệu vào combobox vào dtgrid
IX. Form bộ môn – frmBoMon
Hình 4.9: Form bộ môn
- Vào Add New Item -> Windows Form để tạo ra form mới có tên là
frmHSSV. Trong properties nhập vào text tiêu đề form: Thông tin bộ
môn
- Từ hộp công cụ, rê thanh điều khiển datagridview vào form, đổi thuộc
tính name cho nó là dtgridTTBM
- Form BoMon đơn giản chỉ là form hiển thị ra các thông tin về bộ môn
để các đối tượng sử dụng có thể nắm bắt một cách khái quát về bộ môn,
chứ không cho phép thực hiện các chức năng gì vào datagridview.
- Nhưng để đưa dữ liệu vào datagridview thì banjc ũng cần phải thêm
Microsoft.JET.OLEDB.4.0;
Source
Data
"
=
//Private hiển thị thông tin bộ môn vào datagridview private void frmBoMon_Load(object sender, EventArgs e) { //Câu lệnh kết nối cơ sở dữ liệu OleDbConnection dbConn = new OleDbConnection("Provider + = Application.StartupPath + "\\QLSVTT.mdb"); dbConn.Open(); //Câu lệnh truy vấn
67
đoạn mã cho nó:
OleDbDataAdapter dbAdpt = new OleDbDataAdapter("SELECT * FROM bomon", dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridTTBM.DataSource = dbSet.Tables[0]; } X. Form hồ sơ sinh viên – frmHSSV
Hình 4.10: From hồ sơ sinh viên
- Tương tự như frmBoMon thì frmHSSV cũng được như vậy. Vào Add
New Item -> Windows Form để tạo ra một form mới có tên là
frmHSSV. Trong properties nhập vào text tiêu để form là: hồ sơ sinh
viên
68
- Thêm datagridview vào form, đổi thuộc tính name là dtgridHSSV
- Đây là form chỉ đưa ra cho đối tượng sử dụng hệ thống thông tin chung
và cơ bản về sinh viên thực tập. Form này không cho thực hiện bất kỳ
một chức năng của hệ thống : thêm, sửa. xóa , lưu và tìm kiếm.
- Để lấy dữ liệu vào dtgridview ta bạn pahir thêm đoạn mã sau vào
=
"
Data
Source
Microsoft.JET.OLEDB.4.0;
strString
"SELECT
=
SinhVien.NgaySinh, SinhVien.DienThoai,
IIF(GioiTinh
dbAdpt
new
=
//Câu lện hiển thị thông tin về sinh viên vào datagridview private void frmHSSV_Load(object sender, EventArgs e) { //Câu lệnh kêt nối cơ sở dữ liệu OleDbConnection dbConn = new OleDbConnection("Provider = + Application.StartupPath + "\\QLSVTT.mdb"); dbConn.Open(); //Câu lệnh truy vấn để lấy thông tin sinh viên vào datagridview SinhVien.MaSV, string SinhVien.NoiSinh, SinhVien.TenSV, SinhVien.DiaChi, = True,'Nam','Nữ') AS Sex, SinhVien.Email, Lop.TenLop FROM Lop INNER JOIN SinhVien ON Lop.MaLop = SinhVien.MaLop"; OleDbDataAdapter OleDbDataAdapter(strString, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridHSSV.DataSource = dbSet.Tables[0];
}
69
phương thức frmHSSV_Load:
XI. Form hồ sơ giảng viên – frmHSGV
Hình 4.11: Form hồ sơ giảng viên
- Vào Add New Item -> Windows form tạo ra một form mới có tên là
frmHSGV. Trong properties nhập vapf text tiêu đề của form : Hồ sơ
giảng viên.
- Từ toolbox, rê thanh điều khiển datagridview vào form, đổi thuộc tính
Name là dgvHSGV.
- Form hồ sơ giảng viên cũng chỉ đưa ra các thông tin chung và khái quát
nhất về giảng viên hướng dẫn thực tập, để đới tượng sử dụng hệ thống
có thể nắm bắt một cách nhanh nhất. Form này cũng ko cho phép thay
đổi thông tin trên lưới.
private void frmHSGV_Load(object sender, EventArgs e) { //Câu lệnh kết nố cơ sở dữ liệu
70
- Đoạn mà thêm của phương thức frmHSGV_Load:
=
"
Data
Source
Microsoft.JET.OLEDB.4.0;
=
str "SELECT IIF(GioiTinhGV=True,'Nam','Nữ')
BoMon.MaBM
INNER
JOIN
ON
OleDbConnection dbConn = new OleDbConnection("Provider + = Application.StartupPath + "\\QLSVTT.mdb"); dbConn.Open(); //Câu lệnh truy vấn để lấy thông tin về giảng viên hướng dẫn thực tập GiangVienHDTT.MaGV, string Sex, AS GiangVienHDTT.TenGV, GiangVienHDTT.NgaySinhGV, GiangVienHDTT.SDT, GiangVienHDTT.EmailGV, GiangVienHDTT.DiaChiGV, BoMon.TenBM FROM BoMon = GiangVienHDTT GiangVienHDTT.MaBM"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dgvHSGV.DataSource = dbSet.Tables[0];
}
71
CHƯƠNG 5
TỔNG KẾT HỆ THỐNG
.5.
I. Tài liệu tham khảo
- Sách : Từng bước học lập trình Visual C#.Net của nhà xuất bản Lao
động – xã hội
- Lập trình với C# - Biên dịch từ cuốn Professional C#, 2nd Edition,
Xuất bản bởi Wrox Press Ltd
- Các trang web ..
II. Kết luận
Quá trình thực hiện chương trình:
- Thời gian thực tập: từ ngày 18/03 đến ngày 18/04/2008
- Tuần 1:
+ Tìm hiểu về đề tài
+ Phân tích sơ bộ về cơ sở dữ liệu của đề tài thực tập
+ Làm báo cáo tuần 1
- Tuần 2:
+ Triển khai thiết kế cơ sở dữ liệu
+ Thiết kế phân tích hệ thống về mặt dữ liệu
+ Làm báo cáo tuần 3
- Tuần 3:
+ Tìm hiểu về ngôn ngữ C#
+ Tìm tài liệu về C#
+ Tham khảo các code project quản lý khác
+ Thiết kế các form của hệ thống đã dự định
- Tuần 4:
+ Tiến hành viết code cho chương trình
72
+ Sửa lỗi gặp phải khi chạy hệ thống
+ Viết báo cáo thực tập tốt nghiệp về đề tài quản lý sinh viên thực tập.
Những ưu điểm của chương trình
- Chương trình có thể thực hiện được các chức năng: thêm, xóa, sửa, lưu
và tìm kiếm ở tất cả các form.
- Người dùng có thể sử dụng hệ thống để thao tác bất kỳ chức năng nào
trong hệ thống.
Nhược điểm:
- Hệ thống chỉ sử dụng để quản lý sinh viên thực tập trong phạm vi khoa
CNTT
- Hệ thống vẫn chưa thực hiện được chức năng in danh sách và báo cáo,
làm các report trong môi trường VS2005.
Do thời gian thực tập và khả năng còn hạn hẹp, hệ thống quản lý sinh viên
thực tập ở trên còn đơn giản và thiếu sót. Em rất mong nhận được sự đóng
góp ý kiến của thầy cô và các bạn để chương trình của em được hoàn thiện
73
hơn.
MỤC LỤC
Lời mở đầu ..................................................................................................... 1
Chương 1: GIỚI THIỆU VỀ MÔI TRƯỜNG LÀM VIỆC MICROSOFT
VISUAL STUDIO 2005 ................................................................................. 3
1. Tổng quan về C# ..................................................................................... 3
2. Tạo các ứng dụng .Net bằng C# .............................................................. 4
3. Cơ bản về C# .......................................................................................... 6
Chương 2: TỔNG QUAN VỀ HỆ THỐNG ................................................... 7
I. Tổng quan về đề tài ................................................................................. 7
1. Tóm tắt về bài toán .............................................................................. 7
2. Hệ thống dự định ................................................................................. 8
II. Mô tả các yêu cầu của hệ thống .............................................................. 9
1. Tổng quan về hệ thống......................................................................... 9
2. Các đối tác ......................................................................................... 11
3. Nhận định về cơ cấu quản lý của hệ thống ......................................... 11
4. Đặc tả cơ cấu quản lý của hệ thống .................................................... 12
Chương 3: PHÂN TÍCH HỆ THỐNG .......................................................... 17
I. Phân tích hệ thống về mặt xử lý ............................................................. 17
1. Biểu đồ phân cấp chức năng .............................................................. 17
2. Biểu đồ mức bối cảnh ........................................................................ 19
II. Phân tích thiết kế hệ thống về mặt dữ liệu ............................................ 21
1. Các thực thể có trong hệ thống .......................................................... 21
2. Thuộc tính cụ thể của các thực thể và chuẩn hóa chúng ..................... 21
3. Thiết kế mô hình thực thể liên kết ...................................................... 22
4. Thiết kế chi tiết cơ sở dữ liệu ............................................................. 22
Chương 4: THIẾT KẾ CHƯƠNG TRÌNH CHÍNH ...................................... 25
I. Form giao diện chính của hệ thống- frmMain ........................................ 25
1. Quá trình thiết kế và thiết lập các thuộc tính của frmMain: ................ 25
74
2. Xử lý các sự kiện trong Form giao diện chính: .................................. 26
II. Form đăng nhập của hệ thống - frmLogin ............................................. 28
1. Quá trình thiết kế và thiết lập thuộc tính của frmLogin ...................... 28
2. Xử lý các sự kiện trong frmLogin ...................................................... 29
III. Form đổi mật khẩu – frmDoiMatKhau ................................................ 31
1. Quá trình thiết kế và thiết lập thuộc tính của frmDoiMatKhau ........... 31
2. Xử lý các sự kiện trong frmDoiMatKhau ........................................... 32
IV. Form sinh viên – frmSinhVien ............................................................ 34
1. Quá trình thiết kế và thiết lập thuộc tính của frmSinhVien: ............... 34
2. Xử lý các sự kiện trong frmSinhVien:................................................ 36
V. Form Giảng viên – frmGiangVien ........................................................ 44
1. Quá trình thiết kế và thiết lập thuộc tính của frmGiangVien .............. 44
2. Xử lý các sự kiện trong frmGiangVien: ............................................. 45
VI. Form bảng điểm – frmBangDiem........................................................ 52
1. Quá trình thiết kế và thiết lập các thuộc tính của frmBangDiem ........ 52
2. Xử lý các sự kiện trong frmBangDiem .............................................. 52
VII. Forn nhóm thực tập – frmNhomTT.................................................... 58
1. Quá trình thiết kế và thiết lập các thuộc tính của frmNhomTT ........... 58
2. Xử lý các sự kiện trong frmNhomTT ................................................. 59
VIII. Form lớp – frmLop ........................................................................... 62
1. Quá trình thiết kế và thiết lập các thuộc tính trong frmLop ................ 62
2. Xử lý các sự kiện trong frmLop ......................................................... 63
IX. Form bộ môn – frmBoMon ................................................................. 67
X. Form hồ sơ sinh viên – frmHSSV ........................................................ 68
XI. Form hồ sơ giảng viên – frmHSGV .................................................... 70
Chương 5: TỔNG KẾT HỆ THỐNG ........................................................... 72
I. Tài liệu tham khảo ................................................................................. 72
75
II. Kết luận ................................................................................................ 72