Tải bản đầy đủ (.docx) (53 trang)

Quản lý môn học và đăng ký môn dạy học cho giáo viên

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (482.15 KB, 53 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ SÀI GÒN
KHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN MÔN CÔNG NGHỆ PHẦN MỀN
TÊN ĐỀ TÀI:

QUẢN LÝ MÔN HỌC VÀ ĐĂNG KÝ MÔN DẠY HỌC
CHO GIÁO VIÊN

Sinh viên thực hiện:
Nguyễn Thị Thu Sương
MSSV:DH51201926


Tp.Hồ Chí Minh, tháng 1/2015

SVTH: Nguyễn Thị Thu Sương

Trang 2


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

LỜI
CẢM

Em xin gửi lời cảm ơn đến quý thầy cô trong khoa Công Nghệ Thông tin của
trường Đại Học Công Nghệ Sài Gòn (STU) đã giúp đỡ cũng như đã tận tình truyền


ƠN

dạy những kiến thức để em có thể thực hiện bai tậ lớn môn công nghệ phần mền này.
Và em xin gửi lời cảm ơn đến cô Lê Thị Kim Dung và Thầy Nguyễn Trung
Trực đã tận tình giúp đỡ để em có thể hoàn thành bài tập lớn này. Cũng như có cơ hội
áp dụng được những gì mình đã học vào thực tế.

SVTH: Nguyễn Thị Thu Sương

Trang 3


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

PHẦN MỞ ĐẦU
1. Lý do đề tài:

Là sinh viên đang học nghành công nghệ thông tin. Việc ứng dụng những kiên
thức đã học để tạo ra một chương trình chạy được trong thực tế là vô cùng quan
trọng. Để cũng cố kiến thức và nhằm áp dụng những kiến thức đã học vào thực
tế nên em đã chọn đề tài quản lý môn học và đăng ký môn học cho giáo viên
làm bài tập lớp.
2. Mục tiêu đề tài:
- Cũng cố kiến thức đã học về danh sách liên kết nói chung và danh sách liên
kết đơn nói riêng từ đó suy ra danh sách liên kết đơn lồng.
- Rèn luyện kỹ năng lập trình C++.
- Ứng dụng lý thuyết đã học giải quyết bài toán cụ thể.
3. Phạm vi nghiên cứu.

- Lý thuyết về danh sách liên kết đơn.
- Bài toán quản lý đăng ký môn học.
4. Phương pháp nghiên cứu:
- Nghiên cứu từ tài liệu cấu trúc dữ liệu và giải thuật trên sách.
- Tìm kiếm và nghiên cứu trên Internet.

SVTH: Nguyễn Thị Thu Sương

Trang 4


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

CHƯƠNG 1:CƠ SỞ LÝ THUYẾT
1. Tổng quan về danh sách liên kết.
1.1. Định nghĩa :

Danh sách liên kết là danh sách mà phần tử (Node) liên kết với nhau nhờ vào
vùng liên kết của chúng. Mỗi Node bao gồm 2 phần: Phần Data dung để chứa
dữ liệu cần xử lý và phần liên kết dùng để liên kết với node khác.
1.2. Phân loại:

Tùy cách liên kết giữa các phần tử, danh sách liên kết gồm có nhiều loại khác
nhau:
- Danh sách liên kết đơn: mỗi phần tử liên kết với 1 phần tử đứng sau nó
-

trong danh sách.

Danh sách liên kết đôi/kép: mỗi phần tử liên kết với 1 phần tử đứng trước và

-

sau nó trong danh sách.
Danh sách liên kết vòng: phần tử cuối danh sách liên kết với phần tử đầu

danh sách.
2. Danh sách liên kết đơn:
1.2.1.Khái niệm:
Danh sách liên kết đơn là một cấu trúc lưu trữ trong đó các phần tử của
danh sách không cố định, các phần tử trong danh sách không thể truy cập
trực tiếp. Muốn truy cập bất kỳ phần tử nào phải xuất phát từ phần tử đầu
tiên. Mỗi Node trong phần tử có thể được biểu diễn như sau:
Data

Next

Trong đó:



Data :thường chứa nội dung thông tin của phần tử.
Next: chứa địa chỉ của node tiếp theo hay còn gọi là vùng liên
kết.

Cú pháp:
Struct Node{
Kiểu_dữ_liệu Data;
Node * Next;

}

SVTH: Nguyễn Thị Thu Sương

Trang 5


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

Hình 1.1 Danh sách liên kết.
1.2.2.Thao tác trên Node:
- Khai báo biến con trỏ p là biến con trỏ kiểu Node:Node * p.
- Cấp phát vùng nhớ mới cho Node- được trỏ bởi p: p= new Node .
- Truy cập vào trường Data: p-> data.
- Truy cập vào trường trỏ bởi Next: p-> next.
- Hủy Node bởi con trỏ p: delete (p).
1.2.3.Các thao tác trên danh sách liên kết:

Thao tác trên danh sách liên kết khác với thao tác trên mảng, khi cần thêm
node vào danh sách liên kết ta cần xin cấp phát vùng nhớ cho Node và nối
node đó vào danh sách và khi không sử dụng thì ta giải phóng nó khỏi
danh sách. Truy cập trên danh sách cũng khác so với mảng. Nếu ở mảng ta
truy cập trực tiếp thông qua chỉ số mảng (thông qua địa chỉ ô nhớ) thì ở
danh sách liên kết ta phải truy cập một cách tuần tự. Khi làm việc trên
danh sách liên kết đơn cũng tuần tự như vậy nên ta cần chú ý những điểm
sau:
- Danh sách luôn có con trỏ đầu danh sách: con trỏ plist.
- Danh sách luôn có giá trị báo kết thúc danh sách: NULL.

- Trường next của mỗi node chỉ chứa địa chỉ của node sau nó, trừ node
cuối.
- Trường next của node cuối cùng phải chứa giá trị NULL.
- Không tách danh sách thành 2 danh sách con nếu danh sách phần sau
chưa có con trỏ tới.
- khởi tạo danh sách bằng rỗng: plist = NULL.
1.3.3.1. Duyệt danh sách liên kết đơn:
Duyệt lần lượt từng Node trong danh sách:
Mục_đích (Node & plist )
{
Node p = plist ; // cho con trỏ p vào đầu danh sách
While (điều kiện dừng)
{
[xử lý p-> dat];// xuất ra màng hình, thực hiện các phép
toán.
p=p-> next;// cho con trỏ chỉ tới phần tử kế tiếp.
SVTH: Nguyễn Thị Thu Sương

Trang 6


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

}
1.3.3.2. Chèn một phần tử vào danh sách:
Để chèn một phần tử vào X danh sách ta cấp phát vùng nhớ cho
1 Node mới được trỏ bởi q và gán giá trị X cho trường Data;
Node q;

q= new Node;
q-> data= X;
chèn một node mới vào danh sách có 4 trường hợp:
Trường hợp 1:chèn Node q vào đầu danh sách:
Bước 1: cho vùng liên kết của q chứa địa Node đầu danh sách.
q-> next = plist;(1)
Bước 2: cho plist trỏ tới q: cập nhật lại con trỏ danh sách đâu.
plist = p;(2)

Hình 1.2: Chèn đâu danh sách.

Trường hợp 2: Chèn Node được trỏ bởi q vào sau Node trỏ p trong
danh sách.
Bước 1: cho vùng liên kết của Node được trỏ q chứa địa chỉ Node ngay
sau Node được trỏ bởi p.
q-> next = p -> next; (1)
SVTH: Nguyễn Thị Thu Sương

Trang 7


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

Bước 2: cho vùng liên kết của Node được trỏ bỏi q chứa địa chỉ của Node
được trỏ bởi p.
p-> next = q; (2)

Hình 1.3: Chèn node vào sau 1 node bất kỳ.

Trường hợp 3: chèn Node được trỏ bởi q vào cuối danh sách.
Bước 1: nếu danh sách rỗng thì danh sách hiện tại có 1 phần tủ chính là q vừa
mới chèn vào, return.
Bước 2: ngược lại nếu danh sách không rỗng:
Cho con trỏ p chứa địa chỉ Node đầu danh sách.
Node p = list;
• Duyệt danh sách từ đầu tới cuối.
While ( p-> next !- NULL) p= p-> next;
• Cho phần tử liên kết của Node được trỏ p chứa địa chỉ của q
p-> next = q;
• Cập nhật lại Node cuối cùng bây giờ chính nó q vừa mới tạo ra.
q-> next = NULL;


1.3.3.3. Xóa một phần tử ra khỏi danh sách: có 2 trường hợp xảy ra:
Trường hợp 1: thực hiện xóa đầu danh sách nếu p chứa địa chỉ node
đầu danh sách (plist).
Bước 1: cho con trỏ đầu danh sách plist trỏ vào node sau nó.
p = p-> next.
Bước 2: giải phóng node p ra khỏi danh sách.
Delete (p);

SVTH: Nguyễn Thị Thu Sương

Trang 8


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực


Hình 1.4: xóa đầu danh sách.
Trường hợp 2: con trỏ p chứa địa chỉ Node bất kỳ nhưng không phải
Node đầu.
Bước 1: cho con trỏ q trỏ đầu danh sách plist,dùng vòng lập cho nó trỏ tới
địa chỉ node trước node được trỏ bởi p trong dan sách.
Node q = plist ; while (q-> next != p) q = q-> next; (1)
Bước 2: gán địa chỉ của Node ngay sau Node được trỏ bởi p vào ô nhớ
next của node được trỏ bởi q.
q-> next = p-> next; (2)
Bước 3: giải phóng Node được trỏ bởi p.
Delete (p);

Hình 1.5: xóa 1 node bất kỳ trong danh sách.
1.3.3.4. Tìm kiếm phần tử trong danh sách.
Bước 1:cho p trỏ vào đầu danh sách plist

SVTH: Nguyễn Thị Thu Sương

Trang 9


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

Node p = plist;
Bước 2: thực hiện vòng lập để duyệt p chạy từ đầu danh sách tới cuối danh
sách, tại mỗi node nếu trường data của node được trỏ bởi p = X thì trả về Node p và
dừng vong lập. Ngược lại nếu p != X thì cho p trỏ tới Node kế tiếp.

while ((p!=NULL) && strcmp(p->info._maGV,x._maGV)!=0)
p=p->next;

Hình 1.6: tim kiếm một node trong danh sách.

CHƯƠNG 2: CÁC NGHIỆP VỤ CỦA VIỆC QUẢN LÝ MÔN HỌC VÀ ĐĂNG
KÝ MÔN DẠY CỦA GIÁO VIÊN
2.1. Đặc tả bài toán:
Quản lý môn hoc và việc đăng ký môn dạy của các giáo viên trong một trường học
gồm:
Thông tin giáo viên: mã giáo viên, tên giáo viên, môn học đăng ký.
Thông tin môn học có trong trường: tên môn hoc, mã môn học….
Những thông tin trên cần chính xác và rõ ràng và nhanh chóng, mà công việc làm thủ
công thì phức tạp và tốn nhiều công sức và thời gian. Chính vì lý do trên nên bài toán

SVTH: Nguyễn Thị Thu Sương

Trang 10


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

quản quản lý môn học và đăng ký môn dạy của giáo viên đã ra đời để thực hiện
những công việc trên 1 cách nhanh chóng và thuận tiện.
2.2. Yêu cầu hệ thống:
Thông tin của một giáo viên dạy ở trung tâm gồm: Mã giáo viên, tên giáo viên, địa
chỉ. Một giáo viên có 1 danh sách các môn đăng ký dạy. Biết rằng thông tin của một
môn học như sau:

Hãy sử dụng danh sách liên kết đơn có cấu trúc lồng nhau để tổ chức dữ liệu cho bài
toán trên và thực hiện các yêu
cầu sau:
- Nhập 1 danh sách giáo viên và danh sách các môn học mà giáo viên đăng ký dạy.
- Cho phép thêm, xóa, sửa giáo viên.
- Cho phép tìm giáo viên khi biết mã số môn học hay tên môn học.
- Khi biết mã giáo viên ta có thể thêm 1 môn học mới mà giáo viên đó đăng ký

CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG QUẢN LÝ MÔN
HỌC VÀ ĐĂNG KÝ MÔN HỌC CỦAGIÁO VIÊN.
1. Lược đồ quan hệ thực thể trong chương trình:

Môn học

Đăng ký

2. Thiết kế cơ sở dữ liệu:
2.1. Các thuộc tính của đối tượng:

Môn học:
Mã môn học: m_maMH.
SVTH: Nguyễn Thị Thu Sương

Trang 11

Giáo Viên


BÀI TẬP LỚN MÔN CNPM


GVHD: Thầy Nguyễn Trung Trực

Tên môn học: m_tenMH.
Giáo Viên:
Mã giáo viên: _maGV.
Tên giáo viên: _tenGV.
địa chỉ: _diachi.
Danh sách môn học mà giáo viên đăng ký:
#Mã môn hoc. m_maMH.

2.2. Từ diễn tả dữ liệu cho các thực thể:
- Môn học: các thông tin chứa môn học của trường học bao gồm: Mã môn
-

học, tên môn học.
Giáo viên: các thông tin giáo viên gồm: Mã giáo viên, tên giáo viên, địa chỉ,
danh sách môn học mà giáo viên đăng ký dạy. Giáo viên chỉ đăng ký những

môn học mà nhà trường có.
2.3. Lược đồ quan hệ:
Quy ước gạch dưới là khóa chính, thêm # phía trước là khóa ngoại.
Ví dụ:
m_maMH : là khóa chính
#_maGV: là khóa ngoại.
Ta có lược đồ quan hệ như sau:
Môn học (m_maMH, m_tenMH).
Giáo viên: ( _mGV ,_tenGV, _diachi, m_maMH).
3. Cơ sở dữ liệu:
3.1. Danh sách các bảng:
Môn học:

STT Thuộc tính
1
m_maMH
2
m_tenMH

Kiểu
Char [10]
Chả [10]

Mặc định

Kiểu

Mặc định

Ràng buộc
Khóa chính

Chương trình
Mã môn học.
Tên môn học.

Ràng
buộc

Chương trình

N


Giáo Viên
STT Thuộc tính

SVTH: Nguyễn Thị Thu Sương

Trang 12


BÀI TẬP LỚN MÔN CNPM
1

_maGV

Char [10]

2
3
4

_tenGV
_diachi
m_maMH

Char [50]
Char [50]

GVHD: Thầy Nguyễn Trung Trực
Khóa
chính
Khóa

ngoại

Mã giáo viên
Tên giáo viên
địa chỉ giáo viên
Mã môn học

Các ràng buộc nghiệp vụ:
Giáo viên chỉ đăng ký môn học khi có môn học trong bảng môn học.

SVTH: Nguyễn Thị Thu Sương

Trang 13


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

CHƯƠNG 4: THỰC HIỆN VÀ ƯU KHUYẾT ĐIỂM
1. Chương trình và chức năng cụ thể:
1.1.
Cấu trúc chương trình:
2.1.1 Danh sách môn học:

struct MonHoc
{
char m_maMH[10];
char m_tenMH[50];
};

typedef struct Node_MH *NODEPTR_MH;
struct Node_MH
{
MonHoc data;
NODEPTR_MH next;
};
1.1.2. danh sách giáo viên:
struct GiaoVien
{
char _maGV [10];
char _tenGV [50];
char _diachi [50];
NODEPTR_MH Danhsach_MH;
};
typedef struct Node_GV *NODEPTR_GV;
struct Node_GV
{
GiaoVien info;
NODEPTR_GV next;
};
1.2.

Các chức năng của chương trình:

SVTH: Nguyễn Thị Thu Sương

Trang 14


BÀI TẬP LỚN MÔN CNPM


GVHD: Thầy Nguyễn Trung Trực

Môn học:
- Nhập danh sách môn học (thêm 1 môn học vào danh sách môn học của

-

-

-

nhà trường):
+ Nhập thông tin môn học gồm mã môn học và tên môn học.
Hiển thị thông tin môn học:
+ Duyệt danh sách môn học
+ In ra tất cả môn học mà nhà trường có dạy.
Xóa môn học mà của nhà trường:
+ Nhập mã môn học cần xóa.
+ Duyệt hết danh sách môn học.
+Nếu có môn học thì xóa môn học. ngược lại xuất không có môn học này.
Tìm môn học trong danh sách môn học của nhà trường:
+ Nhập mã môn học cần tìm.
+ Duyệt hết danh sách mmoon học.
+ Nếu có thì xuất ra tìm thấy môn học. ngược lại xuất ra không có môn học
này

Giáo viên:
-


-

Nhập thông tin giáo viên (thêm 1 giáo viên vào danh sách):
+ Nhập thông tin của giáo viên gồm: mã giáo viên, tên giáo viên, địa chỉ.
Xuất danh sách giáo viên và tất cả môn học mà giáo viên đó đăng ký:
+ Duyệt danh sách giáo viên
+ In ra danh sách giáo viên.
+ Duyệt danh sách môn học mà giá viên đó đăng ký.
+ In ra danh sách mà giáo viên đó đăng ký ( nếu có).
Thêm một môn học mà giáo viên đó đăng ký:
+ Nhập mã môn học mà giá viên muốn đăng ký.
+ Duyệt danh sách môn học của nhà trường.
+ nếu có mã môn học trong danh sách môn học nhà trường thì thêm vào
danh sách môn học mà giáo viên đăng ký. Ngược lại xuất ra không có môn

-

-

-

này trong trường.
+ Nếu bạn muốn đăng ký thêm thì nhấn 1. Ngược lại ấn 0.
Tìm giáo viên:
+ Nhập mã giáo viên cần tìm.
+ Duyệt danh sách giáo viên.
+ Trả về node giáo viên nếu tìm thấy.
Xóa 1 giáo viên:
+ Nhập mã giáo viên.
+ Tìm giáo viên.

+ Nếu tìm thấy thì xóa giáo viên đó ra khỏi danh sách. Ngược lại xuất ra
không có giáo viên này.
Tìm tất cả giáo viên khi nhập mã môn học.:
+ Nhập mã môn học.

SVTH: Nguyễn Thị Thu Sương

Trang 15


BÀI TẬP LỚN MÔN CNPM

-

-

-

GVHD: Thầy Nguyễn Trung Trực

+ Duyệt danh sách giáo viên.
+ Duyệt danh sách môn học mà giáo viên đó đăng ký.
+ Nếu tìm thấy thì xuất thông tin giáo viên đó.
Tìm môn học khi biết mã giá viên:
+ Nhập mã giáo viên.
+ Duyệt danh sách giáo viên.
+ Duyệt danh sách môn học mà giáo viên đó đăng ký.
+ Nếu tìm thấy thì xuất thông tin môn học đó.
Sữa thông tin giáo viên:
+ Nhập mã giáo viên.

+ Tìm giáo viên.
+ Nếu tìm thấy nhập lại thông tin giáo viên. Ngược lại xuất ra không có giáo
viên này.
Xóa một môn học mà giáo viên đó đăng ký:
+ Nhập mã môn học.
+ Tìm mã môn học trong danh sách môn học mà giáo viên đăng ký.
+ Nếu có thì xóa môn học đó khỏi danh sách môn học mà giáo viên đó đăng

ký.Ngược lại xuất ra không có môn học trong danh sách.
2. Cài đặt chương trình:
2.1. Định nghĩa cấu trúc chương trình quản lý môn học và đăng ký môn học
cho giáo viên:
void Khoi_tao_MH (NODEPTR_MH &pHead);
int KiemTra_rong_MH (NODEPTR_MH &plist);
NODEPTR_MH taonut_MH (MonHoc x);
void them_cuoi_MH (NODEPTR_MH &plist, MonHoc x);
void xoadau_MH (NODEPTR_MH & plist);
bool xoaMH_X(NODEPTR_MH & plist,MonHoc x);
NODEPTR_MH tim_MH ( NODEPTR_MH & plist, MonHoc x);
void them_monhoc (NODEPTR_MH &plist);
void xuat_MH (NODEPTR_MH plist);
void Khoi_tao_GV (NODEPTR_GV &pHead);
int kiemtra_rong_GV (NODEPTR_GV &plist);
NODEPTR_GV creatednode_GV (GiaoVien x);
void insert_last_GV (NODEPTR_GV &plist, GiaoVien x);
void xoadau_GV (NODEPTR_GV & plist);
bool xoaGV_X(NODEPTR_GV & plist,GiaoVien x);
void them_thongtin_GV (NODEPTR_GV &plist, NODEPTR_MH DSMHHT);
void xuat_danhsach_GV (NODEPTR_GV plist);
NODEPTR_GV tim_GV ( NODEPTR_GV & plist, GiaoVien x);

void xuat_giao_vien_khi_biet_maMH(char maMH [10],NODEPTR_GV plist);
int xoa_MH_ma_GV_DangKy (NODEPTR_GV & plist, char maMH [10]);
int them_monhoc_cho_giaovien ( NODEPTR_GV plist,NODEPTR_MH
DSMHHT,char magv[10]);
void menu ();
SVTH: Nguyễn Thị Thu Sương

Trang 16


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

void main();

2.2. Khởi tạo danh sách môn học của nhà trường:

void Khoi_tao_MH (NODEPTR_MH &pHead)
{
pHead = NULL;
}
 Hàm khởi tạo: khởi tạo danh sách môn học của nhà trường rỗng chưa có phần

tử nào.
2.3. Kiểm tra danh sách môn học có rỗng không:
int KiemTra_rong_MH (NODEPTR_MH &plist)
{
return (plist ==NULL ?1:0);
}

 Hàm kiểm tra rỗng: Sử dụng cấu trúc rẽ nhánh. Nếu danh sách rỗng trả về 1

ngược lại trả về 0.
2.4. Tạo một Node môn học mới trong danh sách môn học của trường:
NODEPTR_MH taonut_MH (MonHoc x)
{
NODEPTR_MH p;
p = new Node_MH;
if (p!=NULL)
p->data = x;
p->next= NULL;
return p;
}
 Hàm tạo 1 node môn học của nhà trường: theo cấu trúc tuần tự. Tạo con trỏ

môn học P có phần thông tin là 1 moohc học.
2.5. Chèn cuối một môn học vào cuối danh sách môn học của trường.

SVTH: Nguyễn Thị Thu Sương

Trang 17


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

void them_cuoi_MH (NODEPTR_MH &plist, MonHoc x)
{
NODEPTR_MH p;

p= taonut_MH (x);
if (KiemTra_rong_MH(plist)==1)
{
plist= p;
}
else
{
NODEPTR_MH q=plist;
while (q->next!=NULL)
q=q->next;
q->next=p;
}
}
 Hàm thêm một môn học vào cuối danh sách dùng cấu trúc rẽ nhánh.Tạo một

nút P chứa thông tin nhập vào. Nếu danh sách rỗng thì thêm P vào danh sách.
ngược lại thêm P vào cuối danh sách môn học.
2.6. Xóa một môn học ở đầu danh sách môn học của trường.
void xoadau_MH (NODEPTR_MH & plist)
{
NODEPTR_MH p;
if (!KiemTra_rong_MH(plist))
{
p=plist;
plist = p->next;
delete p;
}
}

SVTH: Nguyễn Thị Thu Sương


Trang 18


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

 Hàm xóa một môn học ở đầu danh sách sử dụng cấu trúc điều kiện rỗng hay

không. tạo một Node P kiểm tra rỗng gắn P là phần tử đầu tiên cho phần tử đầu
tiên trỏ tới phần tử kế tiếp và xóa P.
2.7. Xóa một môn học bất ký trong danh sách môn học của trường.
bool xoaMH_X(NODEPTR_MH & plist,MonHoc x)
{
NODEPTR_MH p,q;
if (strcmp(plist->data.m_maMH,x.m_maMH)==0)
{
xoadau_MH (plist);
return true;
}
else
{
p=plist;
q=plist;
while ((p!=NULL) && (strcmp(p->data.m_maMH,x.m_maMH)!=0))
{
q=p;
p=p->next;
}

if (p!=NULL)
{
q->next=p->next;
delete p;
return true;
}
}
return false;
}
SVTH: Nguyễn Thị Thu Sương

Trang 19


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

 Hàm xóa một Node bất kỳ trong danh sách sử dụng cấu trúc tuần tự và rẽ nhánh

và cấu trúc lập.Cho con trỏ P chứa phần tử muốn xóa. Nếu P là phần tử đầu tiên
thì gọi hàm xóa đầu. Ngược lại dung cấu trúc lậpWHILE để duyệt tất cả các
phần tử trong danh sách. nếu thỏa điều kiện trong lập while thì chuyển qua phần
tử kế tiếp. Ngược lại thì xóa phần tử P.
2.8. Tìm một môn học mà trường học có dạy.
NODEPTR_MH tim_MH ( NODEPTR_MH & plist, MonHoc x)
{
NODEPTR_MH p;
p=plist;
while ((p!=NULL) && strcmp(p->data.m_maMH,x.m_maMH)!=0)

p=p->next;
return p;
}
 Hàm tìm một môn học mà trường học có dạy sử dụng cấu trúc tuấn tự và cấu

trúc lập. cho con trỏ P trỏ vào phần tử đầu tiên của danh sách. Duyệt tất cả phần
tử trong danh sách môn học của trường học. So sánh mã môn học trong danh
sách với mã môn học nhập vào nếu không trùng thì chuyển sang phần tử kế
tiếp, Ngược lại trả về Node P.
2.9. Thêm một môn học( nhập danh sách môn học) vào danh sách môn học của
trường.
void them_monhoc (NODEPTR_MH &plist)
{
MonHoc x;
cout<<"nhap ma so mon hoc:";
fflush(stdin);
cin.getline(x.m_maMH,10);
if(tim_MH(plist, x) != NULL)
{
cout<<"Mon Hoc Da Ton Tai Trong He Thong";
return;
SVTH: Nguyễn Thị Thu Sương

Trang 20


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực


}
cout<<"nhap ten mon hoc:";
cin.getline(x.m_tenMH,50);
them_cuoi_MH(plist,x);
}
 Hàm nhập (thêm) một môn học vào danh sách môn hoc. Sử dụng cấu trúc tuần

tự và cấu trúc điều kiện.Nhập thông tin môn học gồm mã môn học và tên môn
học.Nếu môn học đã có trong danh sách thì không thể thêm vào nữa.
2.10. Xuất danh sách môn học của nhà trường.
void xuat_MH (NODEPTR_MH plist)
{
NODEPTR_MH p=plist;
{
while (p !=NULL)
{
cout<<"ma mon hoc:"<< p->data.m_maMH<cout<<"ten mon hoc:"<< p->data.m_tenMH <p = p->next ;
}
}
}
 Hàm xuất danh sách môn học của nhà trường: sử dụng cấu trúc lập. Xuất ra tất
cả các phần tử có trong danh sách môn học.
2.11.
Khởi tạo danh sách giáo viên:
void Khoi_tao_GV (NODEPTR_GV &pHead)
{
pHead = NULL;
}

 Hàm khởi tạo: khởi tạo danh sách giáo của nhà trường rỗng chưa có phần tử

nào.
SVTH: Nguyễn Thị Thu Sương

Trang 21


BÀI TẬP LỚN MÔN CNPM
2.12.

GVHD: Thầy Nguyễn Trung Trực

Kiểm tra danh sách giáo viên có rỗng không:

int kiemtra_rong_GV (NODEPTR_GV &plist)
{
return (plist ==NULL ?1:0);
 } Hàm kiểm tra rỗng: Sử dụng cấu trúc rẽ nhánh. Nếu danh sách rỗng trả về 1

ngược lại trả về 0.
2.13.
Tạo một Node giáo viên:
NODEPTR_GV creatednode_GV (GiaoVien x)
{
NODEPTR_GV p;
p = new Node_GV;
if (p!=NULL)
p->info = x;
p->next= NULL;

return p;
}
 Hàm tạo 1 node giáo viên của nhà trường: theo cấu trúc tuần tự. Tạo con trỏ

môn học P có phần thông tin là 1 giáo viên
2.14.
Chèn một Node giáo viên vào cuối danh sách giáo viên:
void insert_last_GV (NODEPTR_GV &plist, GiaoVien x)
{
NODEPTR_GV p;
p= creatednode_GV (x);
if (kiemtra_rong_GV (plist))
{
plist= p;
}
else
{
NODEPTR_GV q=plist;
SVTH: Nguyễn Thị Thu Sương

Trang 22


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

while (q->next!=NULL)
q=q->next;
q->next=p;

}
}
 Hàm thêm một giáo viên vào cuối danh sách dùng cấu trúc rẽ nhánh.Tạo một

nút P chứa thông tin nhập vào. Nếu danh sách rỗng thì thêm P vào danh sách.
ngược lại thêm P vào cuối danh sách giáo viên.
2.15.
Xóa một Node giáo viên ở đầu danh sách giáo viên:
void xoadau_GV (NODEPTR_GV & plist)
{
NODEPTR_GV p;
if (!kiemtra_rong_GV(plist))
{
p=plist;
plist = p->next;
delete p;
}
}
 Hàm xóa một giáo viên ở đầu danh sách sử dụng cấu trúc điều kiện rỗng hay

không. tạo một Node P kiểm tra rỗng gắn P là phần tử đầu tiên cho phần tử đầu
tiên trỏ tới phần tử kế tiếp và xóa P.
2.16.

Xóa một Node giáo viên bất kỳ trong danh sách giáo viên:

bool xoaGV_X(NODEPTR_GV & plist,GiaoVien x)
{
NODEPTR_GV p,q;
if (strcmp(plist->info._maGV,x._maGV)==0)

{
xoadau_GV (plist);
return true;
SVTH: Nguyễn Thị Thu Sương

Trang 23


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

}
else
{
p=plist;
q=plist;
while ((p!=NULL) && (strcmp(p->info._maGV,x._maGV)!=0))
{
q=p;
p=p->next;
}
if (p!=NULL)
{
q->next=p->next;
delete p;
return true;
}
}
return false;

}
 Hàm xóa một Node bất kỳ trong danh sách sử dụng cấu trúc tuần tự và rẽ nhánh

và cấu trúc lập.Cho con trỏ P chứa phần tử muốn xóa. Nếu P là phần tử đầu tiên
thì gọi hàm xóa đầu. Ngược lại dung cấu trúc lậpWHILE để duyệt tất cả các
phần tử trong danh sách. nếu thỏa điều kiện trong lập while thì chuyển qua phần
tử kế tiếp. Ngược lại thì xóa phần tử P.
2.17.

Nhập (thêm) thông tin giáo viên vào trong danh sách giáo viên:

void them_thongtin_GV (NODEPTR_GV &plist, NODEPTR_MH DSMHHT)
{
GiaoVien x;
cout<<"nhap ma so Giao Vien:";
cin.ignore();
SVTH: Nguyễn Thị Thu Sương

Trang 24


BÀI TẬP LỚN MÔN CNPM

GVHD: Thầy Nguyễn Trung Trực

cin.getline(x._maGV,10);
cout<<"nhap ten Giao Vien:";
cin.getline(x._tenGV,50);
cout<<"nhap Dia Chi:";
cin.getline(x._diachi,50);

x.Danhsach_MH=NULL;
insert_last_GV (plist,x);
}
 Hàm nhập (thêm) một giáo viên vào danh sách giáo viên. Sử dụng cấu trúc tuần

tự và cấu trúc điều kiện.Nhập thông tin môn học gồm giáo viên gồm mã giáo
viên, tên giáo viên, địa chỉ.
2.18.
Xuất danh sách giáo viên và danh sách môn học mà giáo viên đăng
ký:
void xuat_danhsach_GV (NODEPTR_GV plist)
{
NODEPTR_GV p=plist;
{
while (p !=NULL)
{
cout<<"\n------------------------------------------------------------------";
cout<<"\nma Giao Vien:"<info._maGV<cout<<"ten Giao Vien:"<info._tenGV<cout<<"dia chi:"<info._diachi<cout<<"danh sach mon hoc"<xuat_MH (p->info.Danhsach_MH);
p = p->next ;
}
}
}

SVTH: Nguyễn Thị Thu Sương

Trang 25



×