2.2.Các chức năng cần thực hiện- Các chức năng của chương trình: Thoát chương trình Thêm một điện thoại mới vào đầu danh sách Thêm một điện thoại vào cuối danh sách Thêm một điện
Trang 1VIỆN ĐẠI HỌC MỞ HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN
-BÁO CÁO BÀI TẬP LỚN
MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
ĐỀ TÀI XÂY DỰNG BÀI TOÁN QUẢN LÝ KINH DOANH ĐIỆN THOẠI SỬ DỤNG DANH SÁCH LIÊN KẾT ĐƠN
Giáo viên hướng dẫn: Ths Trịnh Thị Xuân Sinh viên thực hiện : Nguyễn Đức Đại
Hà Nội, năm 2015
Trang 2MỤC LỤC
1 Giới thiệu đề tài 3
2 Phân tích đề tài 3
2.1 Dữ liệu cần lưu trữ trong đề tài 3
2.2 Các chức năng cần thực hiện 4
2.3 Thiết kế menu 5
3 Phân tích chương trình 6
3.1 Thao tác khai báo thư viện: 6
3.2 Thao tác khai báo cấu trúc dữ liệu: 6
3.3 Thao tác khởi tạo Node: 7
3.4 Thao tác nhập dữ liệu: 7
3.5 Thao tác hiện toàn bộ danh sách đã nhập: 10
3.6 Thao tác chèn thêm vào đầu danh sách một điện thoại mới: 12
3.7 Thao tác chèn thêm điện thoại vào cuối danh sách: 14
3.8 Thao tác chèn thêm điện thoại vào sau một điện thoại theo mã: 16
3.9 Thao tác xóa điện thoại theo mã: 18
3.10 Thao tác xóa điện thoại mới được thêm: 21
3.11 Thao tác xóa điện thoại theo tên điện thoại: 23
3.12 Thao tác đếm số lượng điện thoại trong danh sách: 26
3.13 Thao tác đếm số lượng điện thoại có đơn giá < = 1000.000: 27
3.14 Thao tác đếm số lượng điện thoại có đơn giá <= 2000.000: 28
3.15 Thao tác đếm số lượng điện thoại có đơn giá trên 2000.000: 30
3.16 Thao tác sắp xếp danh sách tăng dần theo đơn giá: 31
3.17 Thao tác sắp xếp danh sách điện thoại giảm dần theo đơn giá: 32
3.18 Thao tác hiển thị toàn bộ danh sách điện thoại với tính trạng “Db”: 34
3.19 Thao tác tìm kiếm theo mã: 35
3.20 Thao tác tìm kiếm điện thoại theo tên: 36
3.21 Thao tác tìm kiếm điện thoại có đơn giá trong một khoảng: 38
3.22 Thao tác tìm kiếm điện thoại theo loại: 40
3.23 Thao tác tìm kiếm điện thoại theo hãng sản xuất: 41
3.24 Thao tác ghi danh sách điện thoại đã nhập vào file LIST_DT 43
3.25 Thao tác lấy thông tin danh sách điện thoại từ file đã ghi: 45
3.26 Thao tác hiển thị thông tin của điện thoại có đơn giá thấp nhất: 47
3.27 Thao tác hiển thị thông tin của điện thoại có đơn giá cao nhất: 48
3.28 Thao tác tính tổng thành tiền của đơn giá tất cả điện thoại trong danh sách: 50
3.29 Chức năng tính trung bình cộng của đơn giá tất cả điện thoại trong danh sách: 51
3.30 Thao tác thoát khỏi chương trình: 52
3.31 Code của chương trình chính: 53
Trang 31 Giới thiệu đề tài
- Đề tài: Bài toán quản lý kinh doanh điện thoại
- Cùng với sự phát triển mạnh mẽ của Khoa học – Kỹ thuật – Công nghệ, thịtrường điện thoại di động hiện nay cũng phát triển mạnh mẽ không kém với nhiềuloại mẫu mã sản phẩm khác nhau từ các loại điển thoại phổ biến dòng đen trắng nhưnokia 1280, nokia 110i, cho đến các dòng điện thoại cao cấp như vertu, iphone,samsung galaxy , … Và để thuận tiện cho việc quản lý kinh doanh điện thoại thìcần một phần mềm tối ưu hoa nhất
2 Phân tích đề tài
2.1.Dữ liệu cần lưu trữ trong đề tài
- Các dữ liệu cần quản lý:
Mã điện thoại – kiểu: int
Tên điện thoại – kiểu: char
Phân loại – kiểu: char
Hãng sản xuất – kiểu: char
Tình trạng – kiểu: char
Đơn giá – kiểu: long
- Bộ dữ liệu đã nhập: (dữ liệu từ file)
Mã ĐT Tên ĐT Phân loại Hãng SX Tình trạng Đơn giá
1 Samsung Galaxy s6 Android Samsung Db 16500000
3 Lumia 535 Windowsphone Nokia Db 3500000
4 BlackBerry Q5 BlackBerry 10 BlackBerry Db 1100000
5 Sony Xperia Z3 Android Sony Cb 15000000
3
Trang 42.2.Các chức năng cần thực hiện
- Các chức năng của chương trình:
Thoát chương trình
Thêm một điện thoại mới vào đầu danh sách
Thêm một điện thoại vào cuối danh sách
Thêm một điện thoại vào sau một điện thoại có mã “x”
Thêm một danh sách điện thoại
Import danh sách từ file
Xóa một điện thoại theo mã
Xóa một điện thoại theo tên
Xóa điện thoại vừa mới được thêm vào
Đếm số lượng điện thoại trong danh sách
Đếm số lượng điện thoại có đơn giá <=1000.000
Đếm số lượng điện thoại có đơn giá <=2000.000
Đếm số lượng điện thoại có đơn giá >2000.000
Sắp xếp tăng dần theo đơn giá
Sắp xếp giảm dần theo đơn giá
Hiện toàn bộ danh sách điện thoại
Hiện toàn bộ danh sách điện thoại đã bán
Tìm kiếm theo mã điện thoại
Tìm kiếm theo tên điện thoại
Tìm kiếm theo đơn giá trong khoảng từ a đến b
Tìm kiếm theo loại điện thoại
Tìm kiếm theo hãng sản xuất
Ghi vào file danh sách đã nhập
Hiện điện thoại có đơn giá thấp nhất
Hiện điện thoại có đơn giá cao nhất
Tổng thành tiền của tất cả điện thoại
Trung bình đơn giá của một điện thoại
Trang 52.3.Thiết kế menu
CAC CHUC NANG CUA CHUONG TRINH _
0 Thoat Chuong Trinh
1 Them Mot Dien Thoai Moi Vao Dau Danh Sach
2 Them Mot Dien Thoai Vao Cuoi Danh Sach
3 Them Mot Dien Thoai Vao Sau Mot Dien Thoai Co Ma 'x'
4 Them Mot Danh Sach Dien Thoai
5 Import Danh Sach Dien Thoai Tu File
6 Xoa Mot Dien Thoai Theo Ma
7 Xoa Dien Thoai Vua Moi Duoc Them Vao
8 Xoa Dien Thoai Theo Ten Dien Thoai
9 Dem So Luong Dien Thoai Trong Danh Sach
10 Dem So Luong Dien Thoai Co Don Gia <= 1000.000
11 Dem So Luong Dien Thoai Co Don Gia <= 2000.000
12 Dem So Luong Dien Thoai Co Don Gia > 2000.000
13 Sap Xep Tang Dan Theo Don Gia Dien Thoai
14 Sap Xep Giam Dan Theo Don Gia Dien Thoai
15 Hien Toan Bo Danh Sach Dien Thoai
16 Hien Toan Bo Danh Sach Co Tinh Trang 'da ban'
17 Tim Kiem Theo Ma Dien Thoai
18 Tim Kiem Theo Ten Dien Thoai
19 Tim Kiem Theo Don Gia Trong Khoang [a->b]
20 Tim Kiem Theo Loai Dien Thoai
21 Tim Kiem Theo Hang San Xuat
22 Ghi Vao FILE Danh Sach Dien Thoai
23 Dua Ra Thong Tin Dien Thoai Co Don Gia Thap Nhat
24 Dua Ra Thong Tin Dien Thoai Co Don Gia Cao Nhat
25 Tong Thanh Tien Cua Tat Ca Dien Thoai
26 Trung Binh Cong Don Gia Dien Thoai
Moi Chon Mot Chuc Nang:_
5
Trang 63 Phân tích chương trình
3.1.Thao tác khai báo thư viện:
Để thực hiện được toàn bộ chức năng cũng như các thao tác đối với yêu cầu bài toán thì cần phải có đầy đủ bộ thư viện cần thiết Bộ thư viện cần khai báo gồm:
3.2.Thao tác khai báo cấu trúc dữ liệu:
Cấu trúc cần khai báo trong bài toán gồm:
Trang 8- Ta có hàm nhập vào danh sách điện thoại:
int nhapDT( dienthoai &x, LIST_DT DSDT )
Trang 10- Kết quả khi chạy:
3.5.Thao tác hiện toàn bộ danh sách đã nhập:
Sau khi nhập một hoặc một danh sách điện thoại thì danh sách đó cần được
<x.hangsx<<setw(17)<<x.tinhtrang<<setw(17)<<x.dongia;
}void hienDSDT( LIST_DT DSDT ){
Node_DT *p;
p=DSDT.Head;
tieude();
while(p!=NULL) {
hienDT( p-> info );
p=p->Next;
}}
Trang 11 Gọi hàm nhập trong main:
Trang 123.6.Thao tác chèn thêm vào đầu danh sách một điện thoại mới:
- Code:
void chendau( LIST_DT &DSDT, Node_DT *p){
if(DSDT.Head==NULL) {
DSDT.Head=p;
DSDT.Tail=p;
} else { p->Next=DSDT.Head;
DSDT.Head=p; }}
Gọi hàm nhập trong main:
case 1:
{ system("cls");
cout<<"\n Nhap dien thoai moi vao dau danh sach \n";
if(nhapDT(x,DSDT)) {
cout<<"\nKhong thanh cong!\n\n";
system("pause");
system("cls");
break;
} else { p=get_Node(x);
Trang 13- Kết quả khi chạy:
Danh sách điện thoại sau khi thêm vào một điện thoại mới
13
Trang 143.7.Thao tác chèn thêm điện thoại vào cuối danh sách:
- Code:
void chencuoi( LIST_DT &DSDT, Node_DT *p){
if(DSDT.Head==NULL) {
DSDT.Head=p;
DSDT.Tail=p;
} else { DSDT.Tail->Next=p;
DSDT.Tail=p;
}}
Gọi hàm nhập trong main:
case 2:
{ system("cls");
cout<<"\n Nhap dien thoai moi vao cuoi danh sach \n";
if(nhapDT(x,DSDT)) {
cout<<"\nKhong thanh cong!\n\n";
system("pause");
system("cls");
break;
} else { p=get_Node(x);
Trang 15- Kết quả khi chạy:
Danh sách điện thoại sau khi thêm vào một điện thoại mới
15
Trang 163.8.Thao tác chèn thêm điện thoại vào sau một điện thoại theo mã:
Khi muốn thêm một điện thoại với mã nào đó vào sau một vị trí có sẵn
if(p->info.madt==b) break;
p=p->Next;
}if(p!=NULL)return p;
else return NULL;
}void chensauma( LIST_DT &DSDT, Node_DT *p, Node_DT *q){
if(q!=NULL) {
p->Next=q->Next;
q->Next=p;
if(q==DSDT.Tail) {
DSDT.Tail=p;
} if(DSDT.Head==NULL) {
DSDT.Tail=NULL;
cout<<"\n========> Khong co du lieu!\n";
} }}
Gọi hàm nhập trong main:
case 3:
{ int b;
Trang 17- Kết quả khi chạy:
Danh sách điện thoại sau khi thêm điện thoại mới
17
Trang 183.9.Thao tác xóa điện thoại theo mã:
Nếu không muốn một phần tử nào đó tồn tại trong danh sách ta thực hiện chức năng xóa
if(p->info.madt==(timma)) {
kt++;
break;
} p=p->Next;
} if(kt==0) {
return 0;
} else { if((p==DSDT.Head)&&(p==DSDT.Tail)) {
DSDT.Head=DSDT.Head->Next;
free(p);
if(DSDT.Head==NULL) {
DSDT.Tail=NULL;
cout<<"\n========> Khong co du lieu!\n";
Trang 21Danh sách điện thoại sau khi xóa
3.10 Thao tác xóa điện thoại mới được thêm:
{ DSDT.Head=NULL;
DSDT.Tail=NULL;
free(p);
return 1;
} } else if(DSDT.Head!=NULL) {
p=DSDT.Head;
DSDT.Head=DSDT.Head->Next;
free(p);
if(DSDT.Head==NULL) {
DSDT.Tail=NULL;
} }}
21
Trang 22 Gọi hàm nhập trong main
Trang 233.11 Thao tác xóa điện thoại theo tên điện thoại:
Có thể xóa phẩn tử bằng thông tin về tên phần tử đó
if(strcmp(p->info.tendt,timten)==0) {
kt++;
break;
} p=p->Next;
} if(kt==0) {
cout<<" Khong ton tai ten: "<<timten;
cout<<"\n";
} else { if((p==DSDT.Head)&&(p==DSDT.Tail)) {
DSDT.Head=DSDT.Head->Next;
free(p);
if(DSDT.Head==NULL) {
DSDT.Tail=NULL;
23
Trang 24cout<<"\n========> Khong co du lieu!\n";
Trang 25cout<<"\n========> Du lieu trong! \n";
- Kết quả khi chạy:
Danh sách điện thoại sau khi xóa
25
Trang 263.12 Thao tác đếm số lượng điện thoại trong danh sách:
chức năng này cho ra kết quả là số lượng của toàn bộ điện thoại trong danh sách
dem++;
p=p->Next;
} return dem;
}
Gọi hàm nhập trong maincase 9:
{ system("cls");
if(DSDT.Head==NULL) {
cout<<"\n========> Du lieu trong! \n";
cout<<"\nSo luong dien thoai: "<<soluongdienthoai(DSDT); cout<<"\n\n";
system("pause");
system("cls");
break;
} }
- Kết quả khi chạy:
Trang 273.13 Thao tác đếm số lượng điện thoại có đơn giá < = 1000.000:
Chức năng này sẽ thống kê số lượng điện thoại có giá dưới 1000.000
if((p->info.dongia <= 1000000 )) {
dem++;
} p=p->Next;
} return dem;
}
Gọi hàm nhập trong maincase 10:
{ system("cls");
if(DSDT.Head==NULL) {
cout<<"\n========> Du lieu trong! \n";
cout<<"\n\n";
system("pause");
system("cls");
27
Trang 28break;
} else { system("cls");
cout<<"\nSo luong dien thoai co don gia < = 1000.000:
- Kết quả khi chạy:
3.14 Thao tác đếm số lượng điện thoại có đơn giá <= 2000.000:
Chức năng này sẽ thống kê số lượng điện thoại có đơn giá dưới 2000.000
if(p->info.dongia <= 2000000 ) {
dem++;
Trang 303.15 Thao tác đếm số lượng điện thoại có đơn giá trên 2000.000:
Chức năng này thống kê toàn bộ số lượng điện thoại có đơn giá trên
if(p->info.dongia > 2000000 ) {
dem++;
} p=p->Next;
} return dem;
}
Gọi hàm nhập trong maincase 12:
{ system("cls");
if(DSDT.Head==NULL) {
cout<<"\n========> Du lieu trong! \n";
cout<<"\nSo luong dien thoai co don gia > 2000.000:
- Kết quả khi chạy:
Trang 313.16 Thao tác sắp xếp danh sách tăng dần theo đơn giá:
Dựa theo đơn giá của các điện thoại trong danh sách để sắp xếp tăng dần
if(p->info.dongia > q->info.dongia) {
tg=p->info;
p->info=q->info;
q->info=tg;
} }}
Gọi hàm nhập trong maincase 13:
{ system("cls");
if(DSDT.Head==NULL) {
cout<<"\n========> Du lieu trong! \n";
cout<<"\n\n";
31
Trang 32system("pause");
system("cls");
break;
} else { system("cls");
- Kết quả khi chạy:
3.17 Thao tác sắp xếp danh sách điện thoại giảm dần theo đơn giá:
Trang 343.18 Thao tác hiển thị toàn bộ danh sách điện thoại với tính trạng “Db”:
Chức năng này sẽ đưa ra toàn bộ điện thoại đã được bán đi
if(strcmp(p->info.tinhtrang,"Db")==0) {
hienDT(p->info);
} p=p->Next;
}}
Gọi hàm nhập trong maincase 16:
{ system("cls");
if(DSDT.Head==NULL) {
cout<<"\n========> Du lieu trong! \n";
cout<<"\n========> Danh sach dien thoai da ban\n";
- Kết quả khi chạy:
Trang 353.19 Thao tác tìm kiếm theo mã:
Cho ra thông tin điện thoại khi biết mã điện thoại đó
if(timma==p->info.madt) {
hienDT(p->info);
kt++;
} p=p->Next;
} if(kt==0) {
cout<<"\n========> Khong ton tai dien thoai voi ma: "<<timma; }
}
Gọi hàm nhập trong maincase 17:
35
Trang 36{ system("cls");
if(DSDT.Head==NULL) {
cout<<"\n========> Du lieu trong! \n";
- Kết quả khi chạy:
3.20 Thao tác tìm kiếm điện thoại theo tên:
Cho ra thông tin một điện thoại nào đó khi biết tên
- Code:
void timten(LIST_DT DSDT){
char timten[40];
short int kt=0;
Trang 38- Kết quả khi chạy:
3.21 Thao tác tìm kiếm điện thoại có đơn giá trong một khoảng:
Cho ra danh sách các điện thoại có đơ giá nằm trong một khoảng nhất định:
- Code:
void timgia(LIST_DT DSDT){
if((p->info.dongia >= tu)&&(p->info.dongia <= den)) {
hienDT(p->info);
kt++;
} p=p->Next;
}
Trang 403.22 Thao tác tìm kiếm điện thoại theo loại:
Cho ra danh sách các điện thoại nằm trong một loại nào đó (Android,
Windows phone, IOS)
- Code:
void timtheoloai(LIST_DT DSDT){
if(strcmp(timtheoloai,p->info.phanloai)==0) {
hienDT(p->info);
kt++;
} p=p->Next;
} if(kt==0) {
cout<<"\n========> Khong ton tai loai "<<timtheoloai;
}}
Gọi hàm nhập trong maincase 20:
{ system("cls");
if(DSDT.Head==NULL) {
cout<<"\n========> Du lieu trong! \n";