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