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

Nội dung quản lý danh sách sinh viên bằng danh sách kề

19 1 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Quản Lý Danh Sách Sinh Viên Bằng Danh Sách Kề
Tác giả Trần Nhật Duy, Võ Thái Duy
Người hướng dẫn Võ Quang Hoàng Khang
Trường học Trường Đại Học Công Nghiệp Thành Phố Hồ Chí Minh
Chuyên ngành Cấu Trúc Dữ Liệu Và Giải Thuật
Thể loại tiểu luận
Năm xuất bản 2023
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 19
Dung lượng 3,52 MB

Nội dung

BỘ CÔNG THƯƠNGTRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HÒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN MÔN HỌC: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NỘI DUNG: QUẢN LÝ DANH SÁCH SINH VIÊN BẰNG DANH SÁCH KỀ Gi

Trang 1

BỘ CÔNG THƯƠNG

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HÒ CHÍ MINH

KHOA CÔNG NGHỆ THÔNG TIN

MÔN HỌC: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NỘI DUNG: QUẢN LÝ DANH SÁCH SINH VIÊN BẰNG DANH SÁCH KỀ Giảng viên bộ môn: VÕ QUANG HOÀNG KHANG Lớp học phần : DHKTPM18ATT – 422000161103

Tp Hồ Chí Minh, ngày 4 tháng 9 năm 2023

Trần Nhật Duy 22699741 0397538105

Trang 2

1 BẢNG PHÂN CÔNG NHIỆM VỤ STT Họ và tên MSSV Nội dung phân

công

Thời gian thực hiện

Kết quả thực hiện

Điểm của nhóm

Điểm của giáo viên

1 Trần Nhật Duy 22699741 *Viết các chức

năng:

+ Hàm ghi/đọc thông tin từ file

.txt

+ Hàm nhập thông tin sinh viên từ bàn phím

+ Hàm tìm kiếm sinh viên theo mã

số sinh viên(thuật toán tìm kiếm tuyến tính) + Hàm xuất danh sách sinh viên theo định dạng bảng + Tiểu luận

27/8-4/9/2023

2 Võ Thái Duy 22701371 + Hàm xóa thông

tin sinh viên theo

mã số sinh viên + Hàm sắp xếp điểm của sinh viên theo thứ tự tăng/giảm dần theo thuật toán(Quick sort)

+Hàm thay đổi thông tin sinh viên dựa trên mã số sinh viên

+Hàm thống kê số lượng sinh viên

27/8-4/9/2023

Trang 3

dựa trên xếp loại +PowerPoint

2 MÔ TẢ BÀI TOÁN

*THÔNG TIN LƯU TRỮ:

- Lưu trữ thông tin cơ bản của sinh viên:

+ Mã số sinh viên

+ Tên Sinh viên

+ Tuổi Sinh viên

+ Điểm của sinh viên

*CÁC CHỨC NĂNG CHÍNH CỦA CHƯƠNG TRÌNH:

1 In danh sách sinh viên

2 Thêm 1 sinh viên

3 Xóa 1 sinh viên

4 Thay đổi thông tin của 1 sinh viên

5 Tìm kiếm thông tin của 1 sinh viên

6 Sắp xếp điểm

7 Thông kê điểm của sinh viên

8 Sao lưu vào file txt

9 Thoát chương trinh

3 KHAI BÁO DỮ LIỆU void readFile(FILE *f,STUDENT a[],int &count);

/**

* FILE *f: Sử dụng con trỏ kiểu FILE để khai báo sử dụng file f

*STUDENT a[]: thao tác với mảng a kiểu STUDENT

*count: kiểu số nguyên dùng để quản lý số lượng sinh viên

*Dùng để đọc file.txt truyền dữ liệu vào chương trình

*/

Trang 4

void listStudent(STUDENT a[],int count);

/**

*STUDENT a[]: thao tác với mảng a kiểu STUDENT

*count: kiểu số nguyên dùng để quản lý số lượng sinh viên

*Dùng in ra danh sác sinh viên theo định dạng bảng

*/

void addStudent(STUDENT &a,int count,STUDENT list[]); /**

* STUDENT list[]: thao tác trên mảng list kiểu STUDENT

*STUDENT &a: thao tác với a kiểu STUDENT

*count: kiểu số nguyên dùng để quản lý số lượng sinh viên

*Dùng để thêm 1 sinh viên từ bàn phím

*/

void removeStudent(STUDENT a[],int &count);

/**

*STUDENT a[]: thao tác với mảng a kiểu STUDENT

*count: kiểu số nguyên dùng để quản lý số lượng sinh viên

*Dùng để xóa 1 sinh viên trong danh sách

*/

void remove(STUDENT a[],int vitri,int count);

/**

*STUDENT a[]: thao tác với mảng a kiểu STUDENT

*int vitri: vị trí cần xóa trong danh sách sinh vien

*count: kiểu số nguyên dùng để quản lý số lượng sinh viên

*Dùng để xóa 1 sinh viên

*/

Trang 5

void changeInfomationStudent(STUDENT a[],int count); /**

*STUDENT a[]: thao tác với mảng a kiểu STUDENT

*count: kiểu số nguyên dùng để quản lý số lượng sinh viên

*Dùng để thay đổi thông tin của 1 sinh viên

*/

void find(STUDENT a[],int count);

/**

*STUDENT a[]: thao tác với mảng a kiểu STUDENT

*count: kiểu số nguyên dùng để quản lý số lượng sinh viên

*Dùng để tìm kiếm 1 sinh viên

*/

int findSubString(STUDENT a,char b[]);

/**

*STUDENT a[]: thao tác với mảng a kiểu STUDENT

*char b[]: chuỗi b dùng để tìm kiếm mã sinh viên dạng chuỗi có chuỗi con

*Dùng để tìm kiếm chuỗi con của mã 1 sinh viên

*/

void sortAscending(STUDENT a[],int l, int r);

/**

*STUDENT a[]: thao tác với mảng a kiểu STUDENT

*int l: tạo biến kiểm tra từ bên trái sang

*int r: tạo bến kiểm tra từ bên phải sang

*Dùng để sắp xếp điểm sinh viên theo thứ tự tăng dần

*/

void sortDescending(STUDENT a[],int l, int r);

Trang 6

/**

*STUDENT a[]: thao tác với mảng a kiểu STUDENT

*int l: tạo biến kiểm tra từ bên trái sang

*int r: tạo bến kiểm tra từ bên phải sang

*Dùng để sắp xếp điểm sinh viên theo thứ tự giảm dần

*/

void markStatistical(STUDENT a[],int count);

/**

* STUDENT a[]: thao tác với mảng a kiểu STUDENT

* count: kiểu số nguyên dùng để quản lý số lượng sinh viên

*Dùng để thống kê xếp loại của sinh viên

*/

void saveFile(STUDENT a[],FILE *f,int count);

/**

* FILE *f: Sử dụng con trỏ f kiểu FILE để khai báo sử dụng file

*STUDENT a[]: thao tác với mảng a kiểu STUDENT

*count: kiểu số nguyên dùng để quản lý số lượng sinh viên

*Dùng để lưu dữ liệu vào file.txt

*/

float markMax(STUDENT a[],int count);

/**

* STUDENT a[]: thao tác với mảng a kiểu STUDENT

* count: kiểu số nguyên dùng để quản lý số lượng sinh viên

*Dùng để tim đểm lớn nhất của sinh viên trong danh sách sinh viên

*/

4 CÁC HÀM CÀI ĐẶT *Hàm tìm kiếm:

// ngày viết 31/8/2023

Trang 7

//người viết: Trần Nhật Duy

+Gồm 2 hàm nhỏ:

int findSubString(STUDENT a,char b[]){

char *str; str=strstr(a.student_id,b);

if(str) return 1; else return -1;

}

-Giải thuật:

+Hàm dùng để tìm kiếm 1 chuỗi con của mã sinh viên

VD 22699741: có chuỗi con là 226

+Mô tả giải thuật:

- Khai báo 1 con chỏ kiểu char để lưu vị trí của chuỗi con trong chuỗi cha

- Sử dụng hàm strstr(a.student_id,b): Trả về 1 con trỏ chỉ đến phần tử đầu tiên của chuỗi a.student_id có chứa chuỗi b hoặc trả về NULL nếu không có chuỗi b trong chuỗi a.student_id;

- Nếu khác NULL return về 1

- Ngược lại return về -1

void find(STUDENT a[],int count){ char

b[max]; printf("\n\t(!)Enter Student ID to

searching: "); fflush(stdin); gets(b);

STUDENT temp[max];

int sizeTemp=0; for(int

i=0;i<count;i++)

{

if(findSubString(a[i],b)==1)

{ temp[sizeTemp]=a[i];

sizeTemp++;

}

}

drawBoard(temp,sizeTemp);

}

Trang 8

-Giải thuật:

+Hàm dùng tìm kiếm 1 Sinh viên có mã Sinh viên chưa chuỗi con thỏa mãn ở thuật toán, tích hợp thêm nếu thỏa mãn thì in bảng thông tin của sinh viên int

findSubString(STUDENT a,char b[]) hay không

+Mô tả giải thuật: duyệt mảng từ đầu đến cuối mảng

-Nếu ở giá trị thứ i thỏa mãn hàm int findSubString(STUDENT a,char b[]) thì in ra thông

tin sinh viên trên mảng

-Ngược lại nếu mã sinh viên không tìm thấy thì in bảng trống

*Hàm sắp xếp:

// ngày viết 31/8/2023

//người viết: Võ Thái Duy void

sortAscending(STUDENT a[],int l, int r){

float p = a[(l+r)/2].mark; int i = l, j = r;

while (i < j){ while (a[i].mark < p){

i++;

}

while (a[j].mark > p){

j ;

}

if (i <= j){ float

temp = a[i].mark;

a[i].mark = a[j].mark;

a[j].mark = temp;

i++;

j ;

}

}

if (i < r){

sortAscending(a, i, r);

Trang 9

}

if (l < j){

sortAscending(a, l, j);

}

}

+Giải thuật:

-Hàm dùng để sắp xếp điểm sinh viên theo thứ tự tăng/ giảm dần -Mô

tả giải thật:

+Chọn phần tử chốt ở giữa mảng

+Khai báo 2 biến con trỏ để duyệt từ 2 bên mảng

+ Duyệt mảng từ đầu đến cuối

+Nếu biến bên trái nhỏ hơn phần tử chốt thì di chuyển sang phải

+Nếu biến bên phải nhỏ hơn phần tử chốt thì di chuyển sang trái

+Nếu các trường hợp trên không xảy ra thì tráo đổi giá trị 2 phần tử 2 biến trái và phải +Nếu trái lớn hơn phải thì đây là giá trị chốt mới VD:

Mảng a[5]={1, 3, 5, 4, 2} Thực

thi code:

l = 0, r = n – 1 = 4; i = l, j = r;

phần tử chốt : p = (4+0)/2 = 2;

a[p] = 5; biến i dừng khi i = 2

-> a[2] = 5; biển j dừng khi j = 4

-> a[4] = 2; i<=j; đổi chỗ a[2]

và a[4]

mảng sau khi thay

đổi: a[5]={1, 3, 2, 4,

5} i++ = 3< r = 4 j =

3

i<r thực hiện hàm sortAscending(a, i, r) i = i

= 3, j = r = 4; p =(3+4)/2 = 3; a[3] = 4; biến i

dừng khi i = 5; biến j dừng khi j = 4; i >=

Trang 10

nên không hoán đổi l<j thực hiện hàm

sortAscending(a, l, j); i = l = 0, j = 4; p =

(4+0)/2 = 2; a[p] =2; biến i dừng khi i =1;

biến j dừng khi j = 2; i = 1 < j= 2 đổi chỗ

a[1] và a[2] mảng sau khi thay đổi: a[5]

={1,2,3,4,5}; i++ = 2, j = 1 i<r thực hiện

hàm sortAscending(a, i, r) i = i = 2, j = r =

1; i>j nên thực hiện hàm sortAscending(a, l,

j); i = l = 0; j = j = 1; p=(1+0)/2 = 0 a[0] = 1;

i dừng khi i = 0; j dừng khi j = 0;

kết thúc hàm sortAscending(STUDENT a[],int l, int r) ta sắp xếp thành công

5 KẾT QUẢ CHẠY TRƯỜNG TRÌNH

Hiện menu:

Chức năng 1: In ra màn hình danh sách sinh viên theo dạng bảng:

Trang 12

Chức năng 2: Nhập sinh viên(chỉ nhập được nếu nhập mã sinh viên hợp lệ (khác kí tự đặc biệt và đủ 8 số))

Trang 13

Chức năng 3:Xóa 1 sinh viên thành công khi nhập đúng mã sinh viên của sinh viên đó:

Trang 14

Chức năng 4: Chỉnh sửa thông tin của sinh viên khi nhập chính xác mã sinh viên:

+Chỉnh sửa tên được khi nhập tên hợp lệ(Không có kí tự đặc biệt, khoảng trắng) +Chỉnh sửa tuổi được khi nhập tuổi hợp lệ(>=0)

Trang 15

+Chỉnh sửa điểm được khi nhập điểm hợp lệ(>=0 ,<0=10)

Sau khi thực hiện các thao tác chỉnh sửa:

Chức năng 5: Hỗ trợ tìm kiếm sinh viên nếu nhớ bất cứ số nào trong mã sinh viên -Kết quả tìm kiếm:

Trang 16

Chức năng 6: Sắp xếp tăng:

Trang 17

Sắp xếp giảm:

Chức năng 7: Thống kê tỉ lệ hs giỏi, khá, trung bình, yếu, và điểm cao nhất

Trang 18

Chức năng 8: Sao lưu file

Trang 19

6 ĐÁNH GIÁ CHƯƠNG TRÌNH, NHỮNG MỞ RỘNG

Đánh giá:

-Chương trình chưa tối ưu hoàn chỉnh ở dữ liệu đầu vào, nhưng vẫn đảm bảo các chức năng cơ bản của 1 chương trình quản lý sinh viên với những kiến thức được trang bị

và tìm hiểu từ trước đây Mở rộng:

- Nâng cấp chương trình có giao diện đồ họa, database,

Ngày đăng: 27/12/2024, 12:26

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN