1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án " Bài toán Quản lý sinh viên bằng danh sách liên kết đơn " pdf

46 8,7K 76

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài toán Quản lý sinh viên bằng danh sách liên kết đơn
Tác giả Nguyễn Ngọc Quang
Người hướng dẫn PTS. Nguyễn Văn A
Trường học Trường Đại học Công nghệ Thông tin - Đại học Quốc gia Hà Nội
Chuyên ngành Công nghệ Thông tin
Thể loại đồ án
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 46
Dung lượng 297,13 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đ nh nghĩa ịnh nghĩa Danh sách liên kết là danh sách mà các phần tử Node liên kết với nhau nhờvào vùng liên kết của chúng.. 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ó

Trang 1

c

Trang 2

Phần Mở đầu

1 Lý do ch n đ tài: ọn đề tài: ề tài:

Công nghệ thông tin là một trong những ngành phát triển vượt bậc

trong những năm gần đây Ngày nay với sự phát triển nhanh chóng của xãhội thì công nghệ thông tin được ứng dụng rộng rãi ở hầu hết tất cả các lĩnhvực và ngày càng đóng vai trò quan trọng, trở thành một phần thiết yếu trong đờisống hằng ngày Công nghệ thông tin là một ngành đòi hỏi ở người học một nềntảng kiến thức vững chắc, sự tư duy logic cao, hiểu biết sâu rộng trên nhiềulĩnh vực Với chúng em hiện đang là những sinh viên công nghệ thông tincần phải có sự đầu tư, không ngừng học hỏi để nâng cao kiến thức Do đó

để củng cố lại kiến thức đã học, đề tài mà em chọn để thực hiện đồ án là: Bài toán Quản lý sinh viên bằng danh sách liên kết đơn

2 M c tiêu c a đ tài ục tiêu của đề tài ủa đề tài ề tài:

- Củng cố lại kiến thức đã học về danh sách liên kết nói chung và danhsách liên kết đơn nói riêng

- Rèn luyện kỹ năng lập trình trên ngôn ngữ C++

- Ứng dụng lý thuyết đã học giải quyết bài toán ứng dụng cụ thể

3 Ph m vi nghiên c u ạm vi nghiên cứu ứu.

- Lý thuyết về danh sách liên kết đơn

- Bài toán quản lý sinh viên

4 Ph ương pháp nghiên cứu ng pháp nghiên c u ứu.

- Nghiên cứu 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 mạng Internet

Trang 3

CH ƯƠNG 1: CƠ SỞ LÝTHUYẾT NG 1: C S LÝTHUY T ƠNG 1: CƠ SỞ LÝTHUYẾT Ở LÝTHUYẾT ẾT

1 T ng quan v danh sách liên k t ổng quan về danh sách liên kết ề tài: ết

1.1 Đ nh nghĩa ịnh nghĩa

Danh sách liên kết là danh sách mà các 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 dùng để chứa dữliệu cần xử lý và phần liên kết dùng để liên kết tới các node khác

1.2 Phân lo i ạm vi nghiên cứu.

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ácnhau:

- Danh sách liên kết đơn: mỗi phần tử liên kết với 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 các 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

Trong đó:

- Data: trườ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

Trang 4

Có thể hình dung danh sách liên kết đơn qua hình vẽ sau:

Hình 1.1: Danh sách liên kết đơn

1.3.2.Thao tác trên 1 node.

- Khai báo biến con trỏ p là biến con trỏ kiểu Node: Node *p.

- Cấp phát bộ nhớ cho Node mới – được trỏ bởi p: p=new Node.

- Truy cập vào trường info: p->info.

- Truy cập vào trường next : p->next.

- Hủy Node được trỏ bởi p: delete (p).

1.3.3 Các thao tác trên danh sách liên k t đ n ết đơn ơn

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 Nodevào danh sách liên kết thì ta xin cấp phát bộ nhớ cho Node và nối Node đó vào danhsá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áchcũng khác so với trên 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ự Khilàm việc trên danh sách liên kết đơn cũng tương 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ỏ L

- Danh sách luôn có giá trị báo kết thúc danh sách: NULL

Trang 5

- 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 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 rỗng: L = NULL

1.3.3.1 Duy t danh sách liên k t đ n ệt danh sách liên kết đơn ết ơng pháp nghiên cứu.

Duyệt lần lượt qua từng Node của danh sách

[xử lý p->info];//xuất thông tin ra màn hình, thực hiện các phép toán…

p= p->Next; //cho con trỏ p trỏ tới Node kế tiếp.

}

1.3.3.2 Chèn m t ph n t vào danh sách ột phần tử vào danh sách ần tử vào danh sách ử vào danh sách

Để chèn một phần tử X vào danh sách ta cấp phát bộ nhớ cho 1 Node

mới được trỏ bởi q và gán giá trị X cho trường info

Node *q;

q=new Node;

q->info=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 được trỏ bởi q vào đầu sách

Bước 1: cho vùng liên kết của q chứa địa chỉ Node đầu danh sách.

q->next=L;(1)

Bước 2: cho L trỏ tới q : cập nhập lại con trỏ đầu danh sách.

L = q; (2)

Trang 6

p->next=q; (2)

Hình 1.3: …

- 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:

Trang 7

Bước 2: Ngược lại cho con trỏ t chứa địa chỉ Node trước Node được trỏ bởi

p trong danh sách: Node *t;

t->next=p;

Chèn Node được trỏ bởi q vào sau Node được trỏ bởi t (trường hợp 2).

1.3.3.3 Xóa m t ph n t ra kh i danh sách: ột phần tử vào danh sách ần tử vào danh sách ử vào danh sách ỏi danh sách: có 2 trường hợp xảy rang h p x y raợp xảy ra ả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 đầudanh sách (L)

Bước 1: Cho con trỏ đầu danh sách L trỏ vào Node sau nó

L=L->next; (1)Bước 2: Giải phóng Node p ra khỏi danh sách

Delete(p);

Trang 9

1.3.4.4 Tìm ki m ph n t trong danh sách ết ần tử vào danh sách ử vào danh sách

Bước 1: Cho p trỏ vào đầu danh sách L và khởi tạo biến found=0

Node *p=L; int found=0;

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 info của Node được trỏ bởi p =X thì cho found=1 để dừng vòng lặp Ngược lại nếup!=X thì cho p trỏ tới vị trí Node ngay sau Node được trỏ bởi p.

1.3.3.5 Đ o các ph n t trong danh sách ảo các phần tử trong danh sách ần tử vào danh sách ử vào danh sách

Bước 1: Khởi tạo 3 biến con trỏ p, t, q Trong đó p trỏ vào đầu danh sách L, t= NULL (không trỏ vào địa chỉ nào cả), q trỏ vào địa chỉ Node được trỏ bởi p.

Trang 11

CH ƯƠNG 1: CƠ SỞ LÝTHUYẾT NG 2 : N G D NG D A N H SÁ CH L I Ê N K T ỨNG DỤNG DANH SÁCH LIÊN KẾT ỤNG DANH SÁCH LIÊN KẾT ẾT

Đ N V À O Q U N ƠNG 1: CƠ SỞ LÝTHUYẾT ẢN LÝ SINH VIÊN.

2.1 Đ c t bài toán ặc tả bài toán ảo các phần tử trong danh sách

Quản lý sinh viên là công việc hằng ngày của phòng quản lý học sinh- sinh viên.Công việc quản lý sinh viên đòi hỏi tính tỉ mỉ, cẩn thận trong từng khâu ghi chép cácthông tin cá nhân của sinh viên: mã số sinh viên, tên sinh viên, ngày tháng năm sinh,khóa, lớp….cũng như công việc thống kê kết quả học tập cần rõ ràng và chính xác.Trước đây công nghệ thông tin chưa phát triển mạnh mẽ, các công việc được xử lý thủcông,chủ yếu là ghi chép bằng bút, sổ sách chính vì vậy rất tốn công sức và khá nhiềuthời gian Ngày nay khi mà khoa học kỹ thuật phát triển, đặc biệt là sự bùng nổ côngnghệ thông tin thì việc quản lý sinh viên sẽ dễ dàng hơn nhiều Xuất phát từ nhu cầu đó

mà bài toán Quản lý sinh viên ra đời Yêu cầu của bài toán là tạo ra chương trình có

thể thực hiện các thao tác quản lý sinh viên một cách dễ dàng, tiện lợi dựa trên sự trợgiúp của máy tính Mọi công việc phải được thao tác trên một vùng dữ liệu chung đểđảm bảo việc đồng bộ với nhau trong khâu quản lý

2.2 Yêu c u h th ng ần tử vào danh sách ệt danh sách liên kết đơn ống.

Quản lý điểm sinh viên là chương trình quản lý hồ sơ, điểm học tập của sinh viêntrong quá trình theo học tại trường Chương trình có thể thực hiện các công việc thêmmới sinh viên, tìm kiếm sinh viên theo một điều kiện nào đó, xóa sinh viên, liệt kêdanh sách sinh viên…

Chương trình được viết bằng ngôn ngữ C++ và dựa trên cấu trúc lưu trữ của danh sách liên kết đơn

2.3 Phân tích thi t k ch ết ết ương pháp nghiên cứu ng trình.

2.3.1 C u trúc d li u ch ấu trúc dữ liệu chương trình ữ liệu chương trình ệt danh sách liên kết đơn ương pháp nghiên cứu ng trình.

Để giúp cho việc quản lý được chặt chẽ, dễ dàng, chương trình quản lý điểm sinh viên sẽ có các trường hợp sau:

Trang 12

- Masv (mã sinh viên) có kiểu dữ liệu char, với độ dài 20 ký tự, mỗi sinh viên có một mã số riêng, không trùng lặp.

- Hoten (họ tên) có kiểu dữ liệu nvarchar, với độ dài 40 ký tự, họ tên sinh viên

Trang 13

2.3.2 Các ch c năng c a ch ứu ủa đề tài ương pháp nghiên cứu ng trình.

2.3.2.1 Nh p danh sách sinh viên ập danh sách sinh viên.

- Nhập vào mã số sinh viên

- Nhập thông tin chi tiết cho từng sinh viên

2.3.2.2 Hi n th danh sách sinh viên ển thị danh sách sinh viên ị danh sách sinh viên.

- Duyệt qua danh sách sinh viên

- In thông tin sinh viên ra màn hình

2.3.2.3 Tìm ki m sinh viên theo mã sinh viên ết đơn

- Duyệt qua danh sách

- Tìm kiếm theo mã sinh viên mà người dùng yêu cầu

- Hiển thị sinh viên vừa tìm ra màn hình

2.3.2.4.Xóa sinh viên theo mã s sinh viên ố sinh viên.

- Duyệt qua danh sách.

- Tìm kiếm sinh viên theo mã sinh viên mà người dùng yêu cầu

- Xóa sinh viên vừa tìm được.

2.3.2.5 B sung sinh viên m i vào danh sách ổ sung sinh viên mới vào danh sách ới vào danh sách.

- Nhập sinh viên cần bổ sung vào danh sách

- Cập nhập sinh viên vào trong danh sách

Trang 14

- Tăng số lượng sinh viên trong danh sách lên.

2.3.2.6 Hi n th sinh viên có đi m trung bình cao nh t ển thị danh sách sinh viên ị danh sách sinh viên ển thị danh sách sinh viên ất.

- Nhập điểm từng môn của từng sinh viên vào danh sách.

- Tính điểm trung bình của từng sinh viên.

- Tìm kiếm sinh viên có điểm trung bình cao nhất.

- Hiển thị sinh viên có điểm trung bình cao nhất ra màn hình.

2.3.2.7 S p x p danh sách sinh viên tăng d n theo tr ắp xếp danh sách sinh viên tăng dần theo trường điểm trung bình ết đơn ần theo trường điểm trung bình ường điểm trung bình ng đi m trung bình ển thị danh sách sinh viên.

- Duyệt qua danh sách điểm trung bình của từng sinh viên.

- Sắp xếp sinh viên tăng dần theo điểm trung bình của từng sinh viên.

- Hiển thị danh sách sinh viên vừa sắp xếp ra màn hình.

2.4 Cài đ t ch ặc tả bài toán ương pháp nghiên cứu ng trình

2.4.1 Đ nh nghĩa c u trúc cho ch ịnh nghĩa ấu trúc dữ liệu chương trình ương pháp nghiên cứu ng trình qu n lý sinh viên ảo các phần tử trong danh sách

- Void insert(string ma,string ten,string l,float

toan,float ly,float hoa,float dtb,node&first)

- Void nhap(node&first)

- Void xuat(node first)

- Void tim_ma(node first)

- Void xoa(node&first)

- Void themsv(node&first)

- Void dtb_max(node first)

- Void hoanvi(float&a,float&b)

- void Write(char *s,int x,int y, int color)

- void Ve_menu(int x0,int y0,int chon,int n,char *s[])

Trang 15

- void menuchinh(char ch,char* st[],int x0,int y0,int

chon,int luuchon,int sodongc,int ok)

- Void sapxep(node first)

- Int main()

2.4.2 Kh i t o danh sách sinh viên ởi tạo danh sách sinh viên ạm vi nghiên cứu.

void nhap(node&first) // Ham nhap cua ds don

Trang 16

cout<<"Moi nhap diem hoa : ";

2.4.3 Hi n th danh sách sinh viên ển thị danh sách sinh viên ịnh nghĩa

void xuat(node first)

cout<<"\nDiem Toan : "<<p->toan; cout<<"\nDiem Ly : "<<p->ly;

Trang 17

cout<<"\nDiem Hoa : "<<p->hoa;

cout<<"\nDiem trung binh : "<<p->toan; p=p->next;

}

}

2.4.4 Tìm ki m sinh viên theo mã sinh viên ết

void tim_ma(node first) // tim kiem sinh vien theo ma{

cout<<"\nMa sinh vien : "<<p->masv;

cout<<"\nHo va ten : "<<p->hoten; cout<<"\nLop : "<<p->lop;

cout<<"\nDiem Toan : "<<p->toan;

cout<<"\nDiem Ly : "<<p->ly;

cout<<"\nDiem Hoa : "<<p->hoa;

cout<<"\nDiem trung binh : "<<p->toan;

Trang 18

break;

}

p=p->next;

} }

2.4.5 Xóa sinh viên theo mã sinh viên.

void xoa(node&first) // xoa sinh vien theo ma

Trang 20

2.4.7 In sinh viên có đi m trung bình l n nh t ển thị danh sách sinh viên ới vào danh sách ấu trúc dữ liệu chương trình.

void dtb_max(node first)

Trang 21

}

l=l->next;

}

}

2.4.8 S p x p tăng d n theo đi m trung bình ắp xếp tăng dần theo điểm trung bình ết ần tử vào danh sách ển thị danh sách sinh viên

void sapxep(node first)

Trang 23

using namespace std;

-

// -struct nut

{

string masv;

string hoten;

Trang 26

cout<<"\nDiem Toan : "<<p->toan; cout<<"\nDiem Ly : "<<p->ly;

cout<<"\nDiem Hoa : "<<p->hoa;

cout<<"\nDiem trung binh : "<<p->toan<<"\n";

Trang 27

cout<<"\nDiem Toan : "<<p->toan; cout<<"\nDiem Ly : "<<p->ly; cout<<"\nDiem Hoa : "<<p->hoa; cout<<"\nDiem trung binh : "<<p->toan; break;

Trang 31

}

q=q->next;

}

p=p->next;

}

xuat(first); getch(); }

//

-void Write(char *s,int x,int y, int color)

{

textcolor(color);

gotoxy(x,y); cout<<s;

textcolor(15);

}

void Khung(int x1,int y1,int x2,int y2)

{ int x,y;

gotoxy(x1,y1); cout<<"É";

gotoxy(x2,y1); cout<<"»";

gotoxy(x1,y2); cout<<"È";

gotoxy(x2,y2); cout<<"¼";

for(x=x1+1;x<x2;x++)

{

gotoxy(x,y1); cout<<"Í";

gotoxy(x,y2); cout<<"Í";

}

for(y=y1+1;y<y2;y++)

{

gotoxy(x1,y); cout<<"º";

gotoxy(x2,y); cout<<"º";

Trang 32

case 80://phim xuong

luuchon=chon;

Trang 33

if(chon==sodongc) chon=0;

Write(st[luuchon],x0,y0+luuchon,YELLOW);Write(st[chon],x0,y0+chon,CYAN);

Trang 34

st[0]="Nhap danh sach sinh vien !";

st[1]="Xuat danh sach sinh vien !";

st[2]="Them sinh vien moi vao Danh Sach !";

st[3]="Xoa sinh vien !";

st[4]="Sinh vien co diem trung binh cao nhat !";

st[5]="Sap xep danh sach sinh vien !";

st[6]="Tim kiem sinh vien !";

st[7]="<ESC> Ket thuc chuong trinh !";

int x0=25,y0=10,chon=0,luuchon,sodongc=8,ok=FALSE;

menuchinh(ch,st,x0,y0,chon,luuchon,sodongc,ok);

Trang 35

getch();

}

-

// -int main()

{

menu_chinh();

}

2.6 Màn hình k t qu ết ảo các phần tử trong danh sách

2.6.1 Menu chính c a ch ủa đề tài ương pháp nghiên cứu ng trình.

Trang 36

2.6.2 T o danh sách sinh viên ạm vi nghiên cứu.

2.6.3 Hi n th danh sách sinh viên ển thị danh sách sinh viên ịnh nghĩa

Trang 37

2.6.4 Tìm ki m sinh viên theo mã sinh viên ết

Trang 38

2.6.5 Thêm sinh viên m i vào danh sách ới vào danh sách.

2.6.6 Hi n th sinh viên có đi m trung bình cao nh t ển thị danh sách sinh viên ịnh nghĩa ển thị danh sách sinh viên ấu trúc dữ liệu chương trình.

Trang 39

2.6.7 Xóa sinh viên theo mã sinh viên.

Trang 40

2.6.8 S p x p danh sách sinh viên tăng d n theo đi m trung bình ắp xếp tăng dần theo điểm trung bình ết ần tử vào danh sách ển thị danh sách sinh viên

Trang 41

K T LU N ẾT ẬN

1 Các kết quả đạt được.

- Trình bày khái quát lý thuyết về danh sách liên kết đơn

- Xây dựng được chương trình Quản lý sinh viên

2 Ưu và nhược điểm của đề tài

- Ưu điểm

 Chương trình dễ sử dụng, giao diện thân thiện

 Chương trình quản lý sinh viên ứng dụng danh sách liên kết đơn do vậy có

ưu điểm là ….

- Nhược điểm:

 Vẫn chưa chú trọng về đồ họa, mới chỉ đi về phần lập trình

 Code chường trình còn dài, chưa tối ưu

3 Hướng phát triển

Xây dựng thêm các tính năng như giao diện, thêm các thuộc tính như năm sinh,địa chỉ, số điện thoại…

Ngày đăng: 06/03/2014, 00:22

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w