Yéu cau: Hãy định nghĩa một DSLK đơn để quản lý thông tin máy tính đề bàn của 1 cửa hàng vi tính.. Mỗi máy tính có các thông tin: MS, Tenmaytinh, CPU, Main, Ram, Nhacungcap, Nhasanxuat,
Trang 1TRUONG DAI HOC PHAN THIET Khoa Công nghệ thông tin
ĐỎ ÁN MÔN HỌC CẤU TRÚC DỮ LIỆU VÀ GIẢI
Phan Thiết, ngày 25 tháng 4 năm 2023
Trang 2MUC LUC
Yêu CẦU: 2 22c 2122211221211 1212121112212 121212112121 tre 3 Chương trình hoàn thiện có menu để lựa chọn 11 chức năng 2- 5s se¿ 3 Chương I : Các bước của chương trình : - c1 1121212121221 11111811211 k kg 4
1.2 Chúng ta cần tạo một lớp để đại diện cho danh liên kết đơn 4 1.3 Tiếp theo , chúng ta cần tạo một lớp để đại diện cho danh sách liên kết đơn: 4 1.4 Cuối cùng chúng ta sẽ tạo menu: 5 S1 E111 1121112 1E HH ray 19 Chương 2 : Code chương trình : 2 22122211211 11251 15 1151111551151 15111111521 x ket 21 QD Code hice 21 2.2 : Kết qua Domotec cecccccccssesccscesessesecsvssvsscsvesvesessvsvsssevsresssnsevsssvsusevevsusetevivareevens 41
Trang 3Yéu cau:
Hãy định nghĩa một DSLK đơn để quản lý thông tin máy tính đề bàn của 1 cửa
hàng vi tính Mỗi máy tính có các thông tin: MS, Tenmaytinh, CPU, Main, Ram, Nhacungcap, Nhasanxuat, DiemDanhgia, SoLuong, Gia Cai dat cac hàm sau: I- _ Nhập thông tin danh sách của nhiều Máy Tính
2 - Cho biết thông tin của máy tính có mã số là x 3 - Cho biết các thông tin về MT có giá tiền trong khoảng 12tr đến 20 tr 4- Sắp xếp MT theo chiều tăng dần của MS/ của tên
5 - Thêm một MT sao cho vẫn giữ nguyên thứ tự tăng (có kiểm tra trùngkhóa) 6- — Xóa MTIcó MS =x
7- Xóa tất ca các MT có tên là x 8 - _ Tạo danh sách mới từ danh sách đã cho sao cho danh sách mới giảm dần theo điểm trung bình
9 In danh sách các MT trong khoảng 2 tr đến 3 tr 10 - _ Cho biết MT có điểm trung bình cao nhất /thấp nhất 11 - _ Cho biết MT được mua nhiều nhất trong số các các laptop được mua Chương trình hoàn thiện có menu để lựa chọn 11 chức năng
Trong đó thông tin máy tính:
I- _ MS: Mã số máy tính (Kiêu char, tôi đa 10 kí tự)
2 - Ten: Tên máy tính (Kiểu char, t6i đa 50 kí tự) 3 - CPU: Thông tin CPU của máy (Kiểu char, tôi đa 50 kí tự) 4- Main: Thông tin Main của máy (Kiểu char, tôi đa 50 kí tự) 5- RAM: Thông tin RAM của máy (Kiêu char, tối đa 20 kí tự) 6 - NhaCungCap: Thông tin Nhà cung cấp máy (Kiểu char, tối đa 50 kí tự) 7- _ NhaSanXuat: Thông tin Nhà sản xuất máy (Kiểu char, toi đa 50 ki tự)
8 - DiemDanhGia: Điểm dánh giá chỉ tiết máy (Kiểu int, tir 0 dén 9)
Trang 49- SoLanMua: $6 luong may da ban ra(Kiéu int , 2 bytes)
10- Gia: Giá thành sản phẩm (Kiêu long int)
Chương | : Các bước của chương trình :
1.1 Để bắt đầu chúng ta cần tạo một lớp để tạo lớp đại diện cho thông tin của máy tính:
class MayTinh
{
public string MS { get; set; } public string TenMayTinh { get; set; } public string MainBoard { get; set; } public string CPU { get; set; } public int Ram { get; set; } public string NhaCungCap { get; set; }
public int DanhGia { get; set; }
public int SoLuong { get; set; } public int Gia { get; set; } }
1.2 Chúng ta cần tạo một lớp để đại diện cho danh
liên kết đơn
class Node public MayTinh data; public Node next; public Node()
{ }
public Node(MayTinh mt)
{
Node newNode = new Node(); newNode.data = mt; newNode.next = null;
}
1.3 Tiép theo , chung ta cần tạo một lớp để đại diện
cho danh sách liên kết đơn: class DanhSachMay Tinh
Trang 5private Node head; public DanhSachMayTinh() {
head = null; }
public void ThemMay Tinh(May Tinh mt) {
Node newNode = new Node(); newNode.data = mt; newNode.next = head; head = newNode; }
public void XoaMay Tinh(string ms) {
Node temp = head; Node prev = null; while (temp !=null && temp.data.MS != ms) {
prev = temp; temp = temp.next;
Trang 6} if (temp == null) {
Console.WriteLine("Không tìm thấy máy tính có mã số " + ms);
return;
} if (prev = null) {
head = temp.next;
else
prev.next = temp.next;
}
Console WriteLine('=======—Xóa thành công máy tinh co ma" + ms +
public void HienThiDanhSachMay Tinh()
Node temp = head; Console WriteLine("Danh sach may tinh: "); while (temp != null)
Trang 7} Console WriteLine("Ma so: " + temp.data.MS); Console WriteLine("Tén may tinh: " + temp.data.TenMay Tinh); Console WriteLine("Mainboard: " + temp.data.MainBoard); Console WriteLine("CPU: " + temp.data.CPU);
Console WriteLine("Ram: " + temp.data.Ram); Console WriteLine("Nha cung cap: " + temp.data.NhaCungCap); Console WriteLine("Danh gia: " + temp.data DanhGia); Console WriteLine("S6 luong: " + temp.data.SoLuong); Console WriteLine("Gia: " + temp.data.Gia);
May Tinh mt = new May TinhQ);
Trang 8Console WriteLine("Nhap thong tin cho may tinh thi" + (i+ 1) +":");
Console Write("Ma s6: "):
mt.MS = Console.ReadLine();
Console Write("Tén may tinh: "); mt TenMay Tinh = Console.ReadLine(); Console Write("Mainboard: "); mt.MainBoard = Console.ReadLine(); Console Write("CPU: ");
mt.CPU = Console.ReadLine(); Console Write("Ram: "); mt.Ram = int.Parse(Console.ReadLine()); Console Write("Nha cung cap: "); mt NhaCungCap = Console.ReadLine();
Console Write("Danh gia: ");
mt.DanhGia = int.Parse(Console.ReadLine()); Console.Write("Số lượng: ");
mt.SoLuong = int.Parse(Console.ReadLine()); Console Write("Gia: ");
mt.Gia = int.Parse(Console.ReadLine()); ThemMay Tinh(mt);
Trang 9} public void HienThiMay TinhTheoMS (string ms) {
May Tinh mt = null; Node temp = head; while (temp != null) {
if (ms == temp.data.MS) {
mt = temp.data; break; }
temp = temp.next;
} if (mt = null) {
Console.WriteLine("Không tìm thấy máy tính có mã số " + ms);
else
Console WriteLine("Th6ng tin may tinh có mã số " + ms + ":");
Trang 10} Console WriteLine("Tén may tinh: " + mt.TenMayTinh); Console WriteLine("Mainboard: " + mt.MainBoard); Console WriteLine("CPU: " + mt.CPU);
Console WriteLine("Ram: " + mt.Ram); Console WriteLine("Nha cung cap: " + mt.NhaCungCap): Console WriteLine("Danh gia: " + mt.DanhGia); Console WriteLine("S6 luong: " + mt.SoLuong); Console WriteLine("Gia: " + mt.Gia);
public void XoaMay TinhTheoTen(string name) {
int numDeleted = 0; Node current = head; Node previous = null; while (current != null)
if (current.data.TenMay Tinh == name) {
if (previous == null) {
10
Trang 11head = current.next;
else
previous.next = current.next;
} numDeleted++;
else
previous = current;
current = current.next;
} if (numDeleted > 0) {
Console WriteLine("Da xoa " + numDeleted + " máy tính có tên ” + name);
else
Console WriteLine("Khéng tim thay may tính nào có tên " + name);
lãi
Trang 12} public void SortPCsByMS() {
Node 1, ]; May Tinh temp;
for G = head; 1 != null; 1 =1.next) {
for (J =1.nexf; j |= null; j =j.next) {
if (String Compare(i.data.MS, j.data.MS) > 0) {
temp = 1.data; i.data = j.data; j.data = temp; }
} } Console WriteLine("===== Danh sach may tinh sau khi sắp xếp tăng dần theo mã ——="),
HienThiDanhSachMay Tinh();
12
Trang 13public void ThemMay TinhMS() {
May Tinh mt = new MayTinh();
Console.Write("Mã số: ");
mt.MS = Console.ReadLine();
Console Write("Tén may tinh: "); mt TenMay Tinh = Console.ReadLine(); Console Write("Mainboard: "); mt.MainBoard = Console.ReadLine(); Console Write("CPU: ");
mt.CPU = Console.ReadLine(); Console Write("Ram: "); mt.Ram = int.Parse(Console.ReadLine()); Console Write("Nha cung cap: "); mt NhaCungCap = Console.ReadLine();
Console Write("Danh gia: "):
mt.DanhGia = int.Parse(Console.ReadLine()); Console Write("S6 long: ");
mt.SoLuong = int.Parse(Console.ReadLine()); Console Write("Gia: ");
mt.Gia = int.Parse(Console.ReadLine());
13
Trang 14Node p = head; while (p != null) {
if (p.data.MS == mt.MS) {
Console WriteLine($"Error: A PC with MS {mt.MS} already exists in the list.");
return;
}
p= p.next;
} Node newNode = new Node(); newNode.data = mt; newNode.next = head; if (head == null || String Compare(head.data.MS, mt.MS) > 0) {
newNode.next = head; head = newNode;
else
Node p2 = head;
14
Trang 15while (p2.next != null && String Compare(p2.next.data.MS, mt.MS) > 0) {
p2 = p2.next; }
newNode.next = p2 next; p2.next = newNode;
} public DanhSachMay Tinh TaoLinkedListMoiTheoDanhGiaGiamDan() {
DanhSachMay Tinh dsmtMoi = new DanhSachMay TinhQ); Node temp = head;
while (temp.next != null) {
dsmtMoi ThemMay Tinh(temp.data);
temp = temp.next;
} Node 1, ]; May Tinh mt;
for (1 = dsmtMo1.head; 1 != null; 1 =i.next) {
15
Trang 16for (J =1.next; J != nulÏ; J = J.next) {
if (i.data.DanhGia > j.data DanhGia) {
mt = i.data; i.data = j.data; j.data = mt;
} return dsmtMoi; }
public void HienThongTinMayTinhCaoNhat() {
if (head == null) {
Console WriteLine("Danh sach may tinh réng.");
return;
} Node curr = head; May Tinh may TinhCaoNhat = curr data;
16
Trang 17while (curr |= null) {
May Tinh mt = curr.data; if (mt DanhGia > may TinhCaoNhat.DanhGia) {
may TinhCaoNhat = mt; }
curr = curr.next;
} Console.WriteLine("===== Thong tin máy tỉnh có điểm đánh giá cao nhất
Console WriteLine("MS: " + mayTinhCaoNhat.MS); Console WriteLine("Tén May Tinh: " + mayTinhCaoNhat.TenMay Tinh); Console WriteLine("MainBoard: " + mayTinhCaoNhat.MainBoard); Console WriteLine("CPU: " + mayTinhCaoNhat.CPU);
Console WriteLine("RAM: " + mayTinhCaoNhat.Ram); Console WriteLine("Nha Cung Cap: " + mayTinhCaoNhat.NhaCungCap); Console WriteLine("Danh Gia: " + mayTinhCaoNhat.DanhGia); Console WriteLine("S6 Luong: " + mayTinhCaoNhat.SoLuong); Console WriteLine("Gia: " + mayTinhCaoNhat.Gia);
} public void HienThongTinMayTinhTheoGia(int giaMin, int giaMax)
17
Trang 18if (head == null) {
Console WriteLine("Danh sach may tinh réng.");
return;
} Node curr = head; bool found = false; while (curr != null)
Console WriteLine("===== Danh sách máy tính có giá trong khoảng 12tr đến
May Tĩnh mt = curr.data; if (mt.Gia >= giaMin && mt.Gia <= giaMax) {
Console WriteLine("MS: " + mt.MS); Console WriteLine("Tén May Tinh: " + mt.TenMay Tinh); Console WriteLine("MainBoard: " + mt.MainBoard); Console WriteLine("CPU: " + mt.CPU);
Console WriteLine("RAM: " + mt.Ram); Console WriteLine("Nha Cung Cap: " + mt.NhaCungCap); Console WriteLine("Danh Gia: " + mt.DanhGia);
18
Trang 19Console WriteLine("S6 Luong: " + mt.SoLuong); Console WriteLine("Gia: " + mt.Gia);
Console WriteLine(" - ");
found = true; curr = curr.next; if (!found) { Console.WriteLine("Không tìm thấy máy tính nào trong khoảng giá đã cho."); } 1.4 Cuối cùng chúng ta sẽ tạo menu: class Program static void Main(string[] args) Console.OutputEncoding = Encoding.UTF8; DanhSachMayTinh dsmt = new DanhSachMayTinh(); while (true) Console.WriteLine(" - Menu "); Console WriteLine(" -
Thoát ");
Console.Write("Hãy cho yêu cầu của bạn: ");
19
Trang 20Console.WriteLine(); switch (chon)
case 0:
return;
case 1: dsmt.NhapDanhSachMayTinh(); dsmt.HienThiDanhSachMayTinh(); break;
case 2: Console.WriteLine("Nhap ma may tinh can tim kiém: "); string ms = Console.ReadLine();
dsmt.HienThiMayTinhTheoMS(ms); break;
case 3: Console.WriteLine("Nhập mã máy tính cần xoá: "); ms = Console.ReadLine();
dsmt.XoaMayTinh(ms); dsmt.HienThiDanhSachMayTinh(); break;
case 4: Console.WriteLine("Nhập tên máy tính cần xoá: "); ms = Console.ReadLine();
dsmt.XoaMayTinhTheoTen(ms); dsmt.HienThiDanhSachMayTinh(); break;
case 5: dsmt.SortPCsByMS(); dsmt.HienThiDanhSachMayTinh(); break;
case 6: dsmt.ThemMayTinhMS(); dsmt.HienThiDanhSachMayTinh(); break;
case 7:
DanhSachMayTinh newDS = dsmt.TaoLinkedListMoiTheoDanhGiaGiamDan();
newDS.HienThiDanhSachMayTinh(); dsmt.HienThongTinMayTinhCaoNhat(); break;
case 8: Console.WriteLine("===== Danh sách máy tính có giá trong khoảng 12tr đến 20tr dsmt.HienThongTinMayTinhTheoGia(12000000, 20000000);
Console.WriteLine("===== Danh sách máy tính có giá trong khoảng 2tr đến 3tr dsmt.HienThongTinMayTinhTheoGia(2000000, 3000000);
break; string str = Console.ReadLine(); Console.WriteLine(str); Console.ReadKey();
20
Trang 21Chương 2 : Code chương trình :
2.1 Code : using System; using System Text;
namespace QLTTMT {
class May Tinh {
public string MS { get; set; }
public string TenMayTinh { get; set; }
public string MainBoard { get; set; } public string CPU { get; set; }
public int Ram { get; set; }
public string NhaCungCap { get; set; } public int DanhGia { get; set; }
public int SoLuong { get; set; }
public int Gia { get; set; }
} class Node
21
Trang 22public MayTinh data; public Node next; public Node() {
} public Node(May Tinh mt) {
Node newNode = new Node(); newNode.data = mt; newNode.next = null;
} class DanhSachMay Tinh {
private Node head; public DanhSachMayTinh() {
head = null;
22
Trang 23public void ThemMay Tinh(May Tinh mt) {
Node newNode = new Node(); newNode.data = mt; newNode.next = head; head = newNode; }
public void XoaMay Tinh(string ms) {
Node temp = head; Node prev = null; while (temp !=null && temp.data.MS != ms) {
prev = temp; temp = temp.next;
} if (temp == null) {
Console WriteLine("Kh6ng tim thay may tinh co m4 sé " + ms);
return;
23
Trang 24if (prev = null) {
head = temp.next;
else
prev.next = temp.next;
}
Console WriteLine('=======—Xóa thành công máy tinh co ma" + ms +
public void HienThiDanhSachMay Tinh() {
Node temp = head; Console WriteLine("Danh sach may tinh: "); while (temp != null)
{ Console.WriteLine("Mã số: " + temp.data.MS); Console WriteLine("Tén may tính: ” ~ temp.data IlenMay Tĩnh); Console WriteLine("Mainboard: " + temp.data.MainBoard); Console WriteLine("CPU: " + temp.data.CPU);
Console WriteLine("Ram: " + temp.data.Ram);
24
Trang 25} Console WriteLine("Nha cung cap: " + temp.data.NhaCungCap); Console WriteLine("Danh gia: " + temp.data DanhGia); Console WriteLine("S6 luong: " + temp.data.SoLuong); Console WriteLine("Gia: " + temp.data.Gia);
{
MayTinh mt = new MayTinh();
Console WriteLine("Nhap thong tin cho may tinh thi" + (i+ 1) +":");
Console Write("Ma s6: "):
mt.MS = Console.ReadLine();
Console Write("Tén may tinh: "); mt TenMay Tinh = Console.ReadLine(); Console Write("Mainboard: ");
25