Hàm này sẽ nhận danh sách sinh viên từ người dùng thông qua đối số `dssv` và cậpnhật `n` với số lượng sinh viên.... Hàm “TimSV”: Hàm này dùng để tìm một sinh viên trong danh sách dựa trê
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TIỂU LUẬN 1 Cấu Trúc Dữ Liệu Và Giải Thuật
Giảng viên hướng dẫn : Võ Quang Hoàng Khang Sinh viên thực hiện : Lê Hữu Phúc
: Lê Văn Trọng Tín
: Tô Quang Dũng
MSSV : 22713601
: 22690071 : 22713601
TP.HCM, ngày 15 tháng 09 năm 2023
Bài tập tiểu luận - Phần 1
Tên tiêu đề trong báo cáo: Danh sách kể (mảng 1D)
Trang 2Nội dung: Viết chương trình quản lý danh sách sinh viên bằng danh sách kế hoạch, bao gồm các nội dung sau:
1 Bảng phân công nội dung thực hiện cho phần này của từng thành viên (tối đa 3v/nhóm)
ST
T
1 Lê Văn Trọng Tín Viết các hàm nhập, thêm, sửa, xóa Thực hiện
câu 1, 2 trong tiểu luận
2 Lê Hữu Phúc Viết các hàm xuất, tìm kiếm, sắp xếp, thống
kê.Thực hiện câu 3, 4 trong tiểu luận
3 Tô Quang Dũng Viết hàm main.Thực hiện câu 5, 6 trong tiểu
luận
2 Mô tả bài toán: Gồm có những thông tin lưu trữ và các chức năng của chương trình (thêm, sửa, xoá, tìm kiếm, sắp xếp,thống kê,…)
Chương trình quản lý thông tin sinh viên gồm các thông tin cơ bản như MSSV, họ tên, giới tính, địa chỉ, điểm trung bình Chương trình cho phép người dùng thực hiện các tác vụ như nhập danh sách sinh viên, in ra danh sách sinh viên, xóa sinh viên theo mã số, sắp xếp danh sách theo điểm trung bình hoặc theo họ và tên
Thông tin lưu trữ của các hàm:
1 void Nhap1SV(SINHVIEN &sv)
Hàm này sẽ nhận thông tin của một sinh viên từ người dùng thông qua đối số `sv`
2 void NhapDSSV(SINHVIEN dssv[], int &n)
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 2
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 3Hàm này sẽ nhận danh sách sinh viên từ người dùng thông qua đối số `dssv` và cập nhật `n` với số lượng sinh viên
3 void Xuat1SV(SINHVIEN sv)
Hàm này sẽ xuất thông tin của một sinh viên được truyền vào qua đối số `sv`
4 void XuatDSSV(SINHVIEN dssv[], int n)
Hàm này sẽ xuất thông tin của toàn bộ danh sách sinh viên
5.int TimSV(SINHVIEN dssv[], int n, char maso[]
Hàm này tìm kiếm một sinh viên trong danh sách dựa trên mã số
6 void XoaSV(SINHVIEN dssv[], int n, char maso[])
Hàm này xóa một sinh viên từ danh sách dựa trên mã số
7 void SapTheoDTB(SINHVIEN dssv[], int n)
Hàm này sắp xếp danh sách sinh viên theo điểm trung bình
8 void SapTheoHoTen(SINHVIEN dssv[], int n)
Hàm này sắp xếp danh sách sinh viên theo họ tên
9 void Hoanvi(SINHVIEN &a, SINHVIEN &b)
Hàm này hoán đổi thông tin của hai sinh viên được truyền vào qua các biến tham chiếu `a` và `b`
3 Khai báo dữ liệu: Mô tả dữ liệu và code khai báo
#include <iostream>
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 3
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 4 #include <stdio.h>
#include <string.h>
struct ttsinhvien {
char MSSV[10], hoten[30];
int gioitinh; //1: nữ, 0: nam
char diachi[50];
float dtb;
};typedef struct ttsinhvien SINHVIEN;
Phần mã code đã cung cấp định nghĩa một cấu trúc `ttsinhvien` (thông tin sinh viên) và định danh nó lại bằng tên `SINHVIEN` Cấu trúc này chứa các thông tin cơ bản của một sinh viên như MSSV (Mã số sinh viên), họ tên, giới tính (1 cho nữ, 0 cho nam), địa chỉ và điểm trung bình
Chương trình trên là một ứng dụng quản lý thông tin sinh viên Dữ liệu trong chương trình được mô tả bằng các thành phần sau:
1 Struct “ttsinhvien” (SINHVIEN): Định nghĩa một cấu trúc dữ liệu
“ttsinhvien” (SINHVIEN) để lưu trữ thông tin của một sinh viên Cấu trúc này bao gồm các thành phần sau:
- char MSSV[10]: Mã số sinh viên, là một chuỗi ký tự có tối đa 10 ký tự
- char hoten[30]: Họ tên của sinh viên, là một chuỗi ký tự có tối đa 30 ký tự
- int gioitinh: Giới tính của sinh viên (1: nữ, 0: nam)
- char diachi[50]: Địa chỉ của sinh viên, là một chuỗi ký tự có tối đa 50 ký tự
- float dtb: Điểm trung bình của sinh viên (kiểu số thực)
struct ttsinhvien{
char MSSV[10], hoten[30];
int gioitinh; //1: nữ, 0: nam
char diachi[50];
float dtb;
};typedef struct ttsinhvien SINHVIEN;
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 4
Too long to read on your phone? Save to
read later on your computer
Save to a Studylist
Trang 52 Hàm “Nhap1SV”: Hàm này dùng để nhập thông tin của một sinh viên (biến
“SINHVIEN sv”) từ bàn phím
void Nhap1SV(SINHVIEN &sv){
fflush(stdin);
printf("Nhap MSSV:");scanf("%s",&sv.MSSV);
printf("Nhap ho ten:");scanf("%s",&sv.hoten);
printf("Nhap gioi tinh:");scanf("%d",&sv.gioitinh);
printf("Nhap dia chi:");scanf("%s",&sv.diachi);
fflush(stdin);
printf("Nhap diem trung binh:");scanf("%f",&sv.dtb);
}
3 Hàm “NhapDSSV”: Hàm này dùng để nhập danh sách sinh viên (mảng
“SINHVIEN dssv[]”) từ bàn phím Thông tin sinh viên được nhập vào từng phần tử của mảng
void NhapDSSV(SINHVIEN dssv[], int &n){
int i=0;
for(i;i<n;i++){
printf("\nSinh vien %d:",i+1);
Nhap1SV(dssv[i]);
}
}
4 Hàm “Xuat1SV”: Hàm này dùng để xuất thông tin của một sinh viên ra
màn hình
void Xuat1SV(SINHVIEN sv){
printf("MSSV: %s", sv.MSSV);
printf(" Ho ten: %s", sv.hoten);
printf(" Gioi tinh: %s", sv.gioitinh == 1 ? "Nu": "Nam");
printf(" Dia chi: %s", sv.diachi);
printf(" Diem trung binh: %f", sv.dtb);
}
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 5
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 65 Hàm “XuatDSSV”: Hàm này dùng để xuất toàn bộ danh sách sinh viên ra
màn hình
void XuatDSSV(SINHVIEN dssv[], int n){
int i=0;
for(i;i<n;i++){
printf("\nSinh vien %d:",i+1);
Xuat1SV(dssv[i]);
}
}
6 Hàm “TimSV”: Hàm này dùng để tìm một sinh viên trong danh sách dựa
trên mã số sinh viên (MSSV) Nếu tìm thấy, hàm trả về vị trí của sinh viên trong danh sách, ngược lại trả về -1
int TimSV(SINHVIEN dssv[], int n, char maso[]){
int i=0;
for(i;i<n;i++){
if(strcmp(dssv[i].MSSV,maso)==0)return i;
}
return -1;
}
7 Hàm “XoaSV”: Hàm này dùng để xóa một sinh viên khỏi danh sách dựa
trên mã số sinh viên (MSSV) Nếu sinh viên có MSSV tồn tại, thì hàm sẽ xóa sinh viên đó khỏi danh sách
void XoaSV(SINHVIEN dssv[], int &n, char maso[]){
int vitri= TimSV(dssv,n,maso);
if(vitri!=-1){
for(vitri;vitri<n;vitri++){
dssv[vitri]=dssv[vitri+1];
}
n ;
printf("Xoa thanh cong");
}
else printf("Khong ton tai sinh vien voi ma so %s!", maso);
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 6
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 78 Hàm “Hoanvi”: Hàm này dùng để hoán đổi thông tin giữa hai sinh viên.
void Hoanvi(SINHVIEN &a, SINHVIEN &b){
SINHVIEN temp;
temp=a;
a=b;
b=temp;
}
9 Hàm “SapTheoDTB”: Hàm này dùng để sắp xếp danh sách sinh viên theo
thứ tự tăng dần của điểm trung bình (dtb)
void SapTheoDTB(SINHVIEN dssv[], int n){
for(int i = 0;i<n-1;i++){
for(int j = i+1;j<n;j++){
if(dssv[i].dtb>dssv[j].dtb){
Hoanvi(dssv[i],dssv[j]);
} }
}
}
10 Hàm “SapTheoHoTen”: Hàm này dùng để sắp xếp danh sách sinh viên
theo thứ tự tăng dần của họ và tên
void SapTheoHoTen(SINHVIEN dssv[], int n){
for(int i = 0;i<n-1;i++){
for(int j = i+1;j<n;j++){
if(strcmp(dssv[i].hoten,dssv[j].hoten)>0){
Hoanvi(dssv[i],dssv[j]);
} }
}
}
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 7
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 811 Hàm “main”: Hàm chính của chương trình Trong hàm này, người dùng có
thể lựa chọn các chức năng như nhập danh sách sinh viên, xuất danh sách, xóa sinh viên, sắp xếp danh sách, và thoát chương trình
int main(int argc, char *argv[]){
SINHVIEN sv;
SINHVIEN dssv[50];
int n,chon;
char maso[10];
do{
printf("\n1 Nhap danh sach sinh vien");
printf("\n2 In ra danh sach sinh vien.");
printf("\n3 Xoa 1 sinh vien voi ma so x cho truoc khoi danh sach");
printf("\n4 Sap xep danh sach sinh vien theo thu tu tang dan cua diem trung binh");
printf("\n5 Sap xep danh sach sinh vien theo thu tu tang dan cua
ho va ten ");
printf("\nNhap lua chon: ");scanf("%d",&chon);
switch(chon){
case 1: { printf("Nhap so luong sinh vien: ");scanf("%d",&n); NhapDSSV(dssv,n);break;
} case 2:{
XuatDSSV(dssv,n);break;
} case 3:{
printf("Nhap mssv can xoa: ");scanf("%s",&maso); XoaSV(dssv,n,maso);
break;
} case 4:{
SapTheoDTB(dssv,n);
break;
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 8
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 9} case 5:{
SapTheoHoTen(dssv,n);
break;
} }
}while(chon>0&&chon<6);
return 0;
}
Dữ liệu chương trình bao gồm danh sách sinh viên được lưu trữ trong mảng
“SINHVIEN dssv[50]”, số lượng sinh viên “n”, và các biến cục bộ khác dùng
để tương tác với người dùng như “maso” (để nhập MSSV cần xóa) và
“chon”(để chọn chức năng)
Mã chương trình có thể mở rộng bằng cách thêm các chức năng và tính năng quản lý thông tin sinh viên như lưu dữ liệu vào file, tìm kiếm theo điều kiện, hoặc cải thiện giao diện người dùng để dễ sử dụng hơn
4 Các hàm cài đặt: Mô tả chức năng từng hàm gồm giải thuật và trình bày code tương ứng (Ghi chú có thông tin ngày viết: và người viết cho từng hàm, sinh viên chỉ cần chọn và mô tả 2 giải thuật xử lí bất kỳ trong toàn bộ chương trình)
Hàm SapTheoDTB(SINHVIEN dssv[], int n) //Người viết: Lê Văn Trọng
Tín (13/09/2023)
void SapTheoDTB(SINHVIEN dssv[], int n){
for(int i = 0; i < n; i++){
for(int j = i+1; j < n; j++){
if(dssv[i].dtb > dssv[j].dtb){
Hoanvi(dssv[i], dssv[j]);
}
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 9
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 10}
}
}
Mô tả:
-Input: Một mảng `dssv` gồm `n` sinh viên (kiểu `SINHVIEN`) và số nguyên `n` cho biết số lượng sinh viên trong mảng
- Output: Mảng `dssv` được sắp xếp tăng dần theo điểm trung bình (`dtb`) của các sinh viên
Giải thuật:
1 Vòng lặp bên ngoài (`i`) duyệt qua từng sinh viên trong mảng
2 Vòng lặp bên trong (`j`) duyệt qua các sinh viên từ vị trí `i+1` đến cuối mảng
3 So sánh điểm trung bình (`dtb`) của hai sinh viên `dssv[i]` và `dssv[j]`
4 Nếu `dtb` của `dssv[i]` lớn hơn `dtb` của `dssv[j]`, thì hoán đổi vị trí của hai sinh viên này bằng cách gọi hàm `Hoanvi`
Độ phức tạp:
- Độ phức tạp của hàm này là có hai vòng lặp lồng nhau
Hàm XuatDSSV(SINHVIEN dssv[], int n)//Người viết: Lê Hữu Phúc
(13/09/2023)
void XuatDSSV(SINHVIEN dssv[], int n){
int i=0;
for(i;i<n;i++){
printf("\nSinh vien %d:",i+1);
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 10
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 11}
}
Mô tả:
- Input: Một mảng `dssv` gồm `n` sinh viên (kiểu `SINHVIEN`) và số nguyên `n` cho biết số lượng sinh viên trong mảng
- Output: Thông tin của các sinh viên trong mảng được in ra màn hình
Giải thuật:
1 Vòng lặp `i` duyệt qua từng sinh viên trong mảng
2 Dùng `printf` để in thông tin của sinh viên thứ `i` ra màn hình
3 Gọi hàm `Xuat1SV` để in thông tin của một sinh viên
Độ phức tạp:
- Độ phức tạp của hàm này chỉ chứa một vòng lặp duyệt qua từng sinh viên trong mảng
5 Kết quả chạy chương trình Chụp màn hình và mô tả các kết quả chạy chương trình theo từng chức năng
- Sau khi chạy chương trình, người dùng sẽ được yêu cầu nhập các thông tin của sinh viên hoặc thực hiện các chức năng như in ra danh sách, xóa sinh viên, sắp xếp theo điểm trung bình, hoặc sắp xếp theo họ tên
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 11
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 121.Nhập danh sách sinh viên: cho phép người dùng nhập vào danh sách từng sinh viên gồm các thông tin như: MSSV, họ tên, giới tính, địa chỉ, điểm trung bình
2 In ra danh sách sinh viên: thực hiện in ra danh sách các sinh viên gồm có các thông tin như: MSSV, họ tên, giới tính, địa chỉ, điểm trung bình
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 12
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 133 Xóa 1 sinh viên với mã số x cho trước khỏi danh sách: cho phép người dùng xóa một sinh viên ra khỏi danh sách với mã sinh viên được nhập từ màn hình.Nếu xóa được sẽ hiện”Xoa thanh cong” ,nếu không có mã sinh viên xóa không được sẽ hiện
“ Không tồn tại sinh viên với mã số”
4 Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm trung bình từ bé đến lớn
5 Sắp xếp danh sách sinh viên theo thứ tự tăng dần của họ và tên:
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 13
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 14Danh sách sinh viên sẽ được sắp xếp dựa trên họ và tên của mỗi sinh viên theo thứ
tự bảng chữ cái
6 Kết luận Đánh giá chương trình, những mở rộng.
Kết luận:
Chương trình quản lý thông tin sinh viên được thiết kế để thực hiện các thao tác cơ bản như thêm, xóa, sửa, tìm kiếm và sắp xếp dữ liệu đã cơ bản hoàn thiện và thực hiện tốt các chức năng các yêu cầu của đề bài
Đánh giá chương trình:
1 Hoàn thiện cơ bản: Chương trình hoàn thiện một số chức năng cơ bản như nhập, xuất, xóa, và sắp xếp danh sách sinh viên Điều này tạo ra một ứng dụng quản lý sinh viên cơ bản
2 Sử dụng cấu trúc dữ liệu: sử dụng cấu trúc `SINHVIEN` để tổ chức thông tin của sinh viên
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 14
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc
Trang 153 Menu tương tác: thêm một menu cho người dùng để lựa chọn chức năng cần thực hiện Điều này làm cho chương trình dễ sử dụng hơn
Những mở rộng:
1 Kiểm tra nhập dữ liệu: Trong hàm `Nhap1SV`, xem xét kiểm tra đầu vào người dùng để đảm bảo tính hợp lệ của dữ liệu được nhập Ví dụ, có thể kiểm tra xem MSSV có đúng định dạng hay không
2 Thống kê: có thể mở rộng chương trình để tính toán và hiển thị các thống kê về danh sách sinh viên như điểm trung bình cao nhất, thấp nhất, trung bình, số lượng nam và nữ
3 Lưu trữ dữ liệu: dữ liệu sinh viên được lưu trong bộ nhớ khi chương trình đang chạy Có thể thêm tính năng lưu và nạp dữ liệu từ một tệp tin để dữ liệu không bị mất sau khi chương trình kết thúc
4 Xử lý ngoại lệ: xử lý ngoại lệ cho các tình huống đặc biệt như trường hợp không tìm thấy sinh viên cần xóa
5 Thêm chức năng tìm kiếm nâng cao: có thể mở rộng chức năng tìm kiếm để cho phép tìm kiếm dựa trên nhiều tiêu chí khác nhau, chẳng hạn như điểm trung bình hoặc địa chỉ
6 Đa nền tảng: nếu muốn chương trình có thể chạy trên nhiều hệ điều hành khác nhau, có thể xem xét sử dụng các thư viện đa nền tảng cho giao diện dòng lệnh
Mã số SV: 22712671 Họ tên: Tô Quang Dũng Trang: 15
Mã số SV: 22690071 Họ tên:Lê Văn Trọng Tín Lớp HP: DHKTPM18BTT
Mã số SV: 22713601 Họ tên: Lê Hữu Phúc