Vì thế thông qua đề tài này, chúng em đã xây dựng được chương trình cho việc chuyển đổi số sang chữ trở nên thuận tiện hơn thông qua một máy Server ở trong một mạng riêng ảo.. string nam
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO
ĐỒ ÁN HỆ ĐIỀU HÀNH VÀ MẠNG MÁY TÍNH
ĐỀ TÀI:
Xây dựng chương trình Client – Server để trao đổi một
số thành chữ
GIẢNG VIÊN HƯỚNG DẪN: Nguyễn Văn Nguyên
SINH VIÊN THỰC HIỆN
1 Nguyễn Hoàng Kim, 102190072, 19N10B
2 Hà Tiến Chung, 102190055, 19N10B
Đà Nẵng, 11/2021
Trang 2Tụi em xin chân thành cảm ơn Thầy Nguyễn Văn Nguyên đã hướng dẫn,
hỗ trợ trong xuyên suốt quá trình tụi em làm đề tài PBL4: Hệ điều hành và Mạng máy tính này.
< Họ và tên sinh viên> Nguyễn Hoàng Kim
Hà Tiến Chung
Trang 3LỜI CAM ĐOAN
Tụi em xin cam đoan:
1 Nội dung trong đồ án này là do tụi em thực hiện dưới sự hướng dẫn trực tiếp của thầy Nguyễn Văn Nguyên.
2 Các tham khảo dùng trong đồ án đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố.
3 Nếu có những sao chép không hợp lệ, vi phạm, tôi xin chịu hoàn toàn trách nhiệm.
Sinh viên thực hiện
Nguyễn Hoàng Kim
Hà Tiến Chung
Trang 4NHẬN XÉT CỦA NGƯỜI HƯỚNG DẪN
Trang 5
MỤC LỤC
LỜI NÓI ĐẦU 6
CHƯƠNG 1 : QUÁ TRÌNH TRIỂN KHAI 7
CHƯƠNG 2 : PHÂN TÍCH PHÂN CÔNG NHIỆM VỤ 8
2.1 Bảng phân công nhiệm vụ 8
2.2 Quản lý dự án 8
CHƯƠNG 3: GIỚI THIỆU 9
3.1 Mục đích 9
3.2 Phạm vi 9
CHƯƠNG 4: TỔNG QUAN 10
CHƯƠNG 5: TỔ CHỨC CHƯƠNG TRÌNH VÀ THUẬT TOÁN 11
5.1 Thuật toán 11
5.2 Chương trình 15
CHƯƠNG 6: MÔ TẢ CHỨC NĂNG HỆ THỐNG VÀ KẾT QUẢ CHƯƠNG TRÌNH 19
CHƯƠNG 7: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 24
TÀI LIỆU THAM KHẢO 25
Trang 6LỜI NÓI ĐẦU
Ngày nay, với sức mạnh công nghệ hiện đại nhanh chóng giúp con người thoát khỏi những khó khăn trong công việc, cuộc sống tấp nập và hối hả ta cần phải nhanh chóng gia nhập vào thế giới, chủ động hội nhập.
Với sự phát triển nhanh chóng đó rất có nhiều công cụ hữu ích giúp chúng ta tiết kiệm rất nhiều thời gian và chi phí Nhiều phần mềm trong lĩnh vực công nghệ thông tin nhanh chóng ra đời đã góp phần đáng kể.
“Công Nghệ Thông Tin” một lĩnh vực đầy tiềm năng đã đem lại cho con người những ứng dụng thật tiện lợi và hữu ích Một trong những ứng dụng thiết thực mà nó đem lại là việc ứng dụng tin học vào nhiều lĩnh vực của đời sống như trong các trường học, công ty, cơ quan, xí nghiệp, bệnh viện… phần lớn đều ứng dụng tin học để giúp cho việc quản lý được dễ dàng và thuận tiện hơn.
Vì thế thông qua đề tài này, chúng em đã xây dựng được chương trình cho việc chuyển đổi số sang chữ trở nên thuận tiện hơn thông qua một máy Server ở trong một mạng riêng ảo.
Đặc biệt chúng em xin chân thành cảm ơn thầy giáo ThS Nguyễn Văn
Nguyên đã tận tình giúp đỡ chúng em trong quá trình làm đề tài này.
Trang 7CHƯƠNG 1 : QUÁ TRÌNH TRIỂN KHAI
18/09/2021 Tạo Trello phân công nhiệm vụ và tạo Project Client – Server, thử trao
đổi thông tin với nhau qua màn hình Console 25/09/2021 Xây dựng thuật toán đổi số thành chữ trong 3 thứ tiếng Việt, Anh, Pháp 02/10/2021 Thiết kế khái quát giao diện chương trình, kiểm thử chương trình đọc số
trên giao diện và đọc dữ liệu số từ File 09/10/2021 Thiết kế lại giao diện và kiểm tra dữ liệu đọc từ File 16/10/2021 Tạo repository, thêm thành viên trên Github và sửa lại thuật toán đổi số
thành chữ 23/10/2021 Tìm cách trao đổi giữa 2 máy trong mạng LAN ảo, tiếp tục sửa lại thuật
toán đổi số thành chữ 06/11/2021 Kết nối nhiều Client, xử lý lại luồng thao tác giữa Client – Server và sửa
lại giao diện của Server 13/11/2021 Kiểm thử chương trình, tối ưu hóa Code và viết báo cáo
Bảng 1 Quá trình triển khai
Trang 8CHƯƠNG 2 : PHÂN TÍCH PHÂN CÔNG NHIỆM VỤ
2.1 Bảng phân công nhiệm vụ
Server
Bảng 2 Phân công nhiệm vụ
2.2 Quản lý dự án
Mô tả quá trình triển khai và sử dụng công cụ để quản lý dự án như thế nào?
Tạo lộ trình, phân công công việc cho dự án bằng Trello.
Thiết kế giao diện ứng dụng bằng Winform.
Sử dụng Microsoft Visual Studio tạo Project bằng ngôn ngữ lập trình C#.
Các thành viên trao đổi, giao tiếp thông qua các ứng dụng như Messenger, Discord, Google Meet Nhận hướng dẫn từ giảng viên hướng dẫn qua Microsoft Team.
Sử dụng công cụ Github để thực hiện thay đổi Source Code giữa các thành viên
và quản lý dự án.
Trang 9CHƯƠNG 3: GIỚI THIỆU
3.1 Mục đích
Mục đích tài liệu được sử dụng để:
Nắm rõ được quá trình hình thành và phát triển của đồ án.
Nắm được tiền đề và mục đích mà đồ án được nhắm tới.
Nắm được việc triển khai đồ án giữa các thành viên có trong nhóm.
Nắm được từng tác vụ và vai trò của các tác vụ trong đồ án
Nắm được tính thực tế mà đồ án có thể đạt được cũng như khó khăn trong quá trình thực hiện đồ án.
Dự án có thể được sử dụng và thực thi trên Server HOST bởi máy tính,
áp dụng việc sử dụng dưới hình thức đa luồng, đa tuyến với nhiều Client
sử dụng cùng một lúc.
Đồ án được tạo ra để người dùng có thể dễ dàng tiếp cận chương trình với giao diện trực quan và giúp người dùng thực hiện công việc chuyển đổi số thành chữ.
Đồ án được tạo ra có thể nâng cấp thêm nhiều tính năng để thuận tiện cho việc phát triển đồ án tiếp tục và có thể tái sử dụng để có thể hình thành cho các Project khác tốt hơn.
Trang 10CHƯƠNG 4: TỔNG QUAN
- Xây dựng chương trình Client – Server để trao đổi một số thành chữ
* Yêu cầu:
hiện tính toán và trả lời cho Client.
* Input:
* Output:
Trang 11CHƯƠNG 5: TỔ CHỨC CHƯƠNG TRÌNH VÀ THUẬT TOÁN
5.1 Thuật toán a) Thuật toán đổi số thành chữ Tiếng Việt
- Sử dụng duy nhất hàm public string NumberToVietnamese( double inputNumber)
xử lý số nhận được từ Client.
- Phân tích:
Tiếng Việt và mảng placeValues để lưu trữ đơn vị “rỗng, nghìn, triệu, tỷ”.
Chuyển số double từ tham số truyền vào sang kiểu string sNumber để xử lý.
dài của số.
placeValues để phân tích đơn vị của số Với các trường hợp:
- placeValue = 0 <=> rỗng.
- placeValue = 1 <=> nghìn.
- placeValue = 2 <=> triệu.
- placeValue = 3 <=> tỷ.
Bắt đầu phân tích 3 số cuối của số từ đầu vào nếu positionDigit > 0
Tách lần lượt các số từ vị trí cuối = positionDigit cho đến vị trí đầu tiên của
3 số đấy = positionDigit – 3 Ta sẽ có được các số lần lượt ở hàng đơn vị, chục, nghìn gán cho ones, tens, hundredss Sau mỗi lần phân tích trong từng hàng thì trừ positionDigit đi 1.
Sau khi hoàn tất phân tích các số ones, tens, hundredss, tăng placeValue thêm 1 Sau đó xét điều kiện placeValue > 3 thì gán lại = 1 vì không có giá trị bằng chữ tại vị trí phần tử 4 trong mảng placeValues (không có cách gọi đơn vị lớn hơn “tỷ” trong Tiếng Việt).
Với các giá trị đã có từ ones, tens, hundredss, và placeValue bắt đầu xử lý tạo chuỗi cách gọi số đó trong Tiếng Việt.
Nếu positionDigit > 0 thì tiếp tục phân tích, ngược lại dừng phân tích trả về kết quả thu được.
b) Thuật toán đổi số thành chữ Tiếng Anh
Trang 12 Hàm public string NumberToEnglish( string Number) xử lý số nhận được từ
Client và gọi các hàm trên để xử lý (3)
- Phân tích:
Với hàm (1):
- Tạo một biến name để lưu giá trị được chuyển đổi
string name = "" ;
- Tạo một biến _Number để lưu giá trị của số theo kiểu Int
- Dùng switch case để xét các giá trị của số _Number và biến đổi thành chữ Lưu giá trị chuyển đổi vào biến name.
- Hàm này xử lý số có một chữ số (từ 1 tới 9).
Với hàm (2):
- Tạo một biến name để lưu giá trị được chuyển đổi
string name = "" ;
- Tạo một biến _Number để lưu giá trị của số theo kiểu Int
- Dùng switch case để xét giá trị của input có trùng với các số đặc biệt đã được liệt kê ra hay không(10,11, 90), nếu không thì chuyển tới default.
- Ở default, dùng đệ quy để tách phần chục và phần đơn vị, chuyển sang
+ ones(Number.Substring(1));
Với hàm (3):
- Tạo biến isDone để kiểm tra xem chuỗi nhập vào đã được chuyển đổi hoàn tất chưa
-Tạo biến dblAmt là chuỗi được biến đổi sang kiểu double
double dblAmt = (Convert.ToDouble(Number));
-Tạo biến numDigits là chiều dài của số được truyền vào
- Nếu case là 1 thì gọi tới hàm (1), case là 2 thì gọi tới hàm (2)
Trang 13phần “Trăm”, 4 chữ số là đến phần “Nghìn”, 7 chữ số là đến phần “Triệu”,… Biến isDone vẫn giữ nguyên là false.
- Nếu quá 75 chữ số thì chuyển tới default, gán isDone = true để dừng
- Ta tiếp tục kiểm tra điều kiện truyền sau:
&& Convert.ToInt32(Number.Substring(0, pos)) != 0)
- Ở trên ta sẽ kiểm tra chuỗi số đầu và chuỗi số sau của Number được tách bởi hàm Subtring với tham số pos được xác định ở trên có khác 0 hay không?
- Nếu đúng thì dùng đệ quy thêm đơn vị số vào và phân tích tiếp, câu lệnh:
word = NumberToFrench(Number.Substring(0, pos)) + place + NumberToEnglish(Number.Substring(pos));
- Ngược lại nếu sai thì bỏ qua đơn vị mà dùng đệ quy phân tích tiếp, câu lệnh: word = NumberToFrench (Number.Substring(0, pos)) +
NumberToEnglish(Number.Substring(pos));
- Cứ thế cho đến khi còn 2 chữ số là quay lại trường hợp (*) và trả về kết
quả là chuỗi word.
c) Thuật toán đổi số thành chữ Tiếng Pháp
Client và gọi các hàm trên để xử lý (3)
- Phân tích:
Với hàm (1):
- Tạo một biến name để lưu giá trị được chuyển đổi
string name = "" ;
- Tạo một biến _Number để lưu giá trị của số theo kiểu Int
- Dùng switch case để xét các giá trị của số _Number và biến đổi thành
Trang 14- Hàm này xử lý số có một chữ số (từ 1 tới 9).
Với hàm (2):
- Tạo một biến name để lưu giá trị được chuyển đổi
string name = "" ;
- Tạo một biến _Number để lưu giá trị của số theo kiểu Int
- Dùng switch case để xét giá trị của input có trùng với các số đặc biệt đã được liệt kê ra hay không(10,11, 90), nếu không thì chuyển tới default.
- Ở default, dùng đệ quy để tách phần chục và phần đơn vị, chuyển sang
+ " " + unites(Number.Substring(1));
Với hàm (3):
- Tạo biến isDone để kiểm tra xem chuỗi nhập vào đã được chuyển đổi hoàn tất chưa
-Tạo biến dblAmt là chuỗi được biến đổi sang kiểu double
double dblAmt = (Convert.ToDouble(Number));
-Tạo biến numDigits là chiều dài của số được truyền vào
- Nếu case là 1 thì gọi tới hàm (1), case là 2 thì gọi tới hàm (2)
- Ở 2 trường hợp trên, ta cho isDone = true dừng để quy vì đối với 2
trường hợp này chỉ phân tích 1 hoặc 2 chữ số là đã xong (*)
- Còn trường hợp 3 chữ số trở lên thì phân tích như sau: 3 chữ số là đến phần “Trăm”, 4 chữ số là đến phần “Nghìn”, 7 chữ số là đến phần “Triệu”,… Biến isDone vẫn giữ nguyên là false.
- Nếu quá 75 chữ số thì chuyển tới default, gán isDone = true để dừng
Trang 15&& Convert.ToInt32(Number.Substring(0, pos)) != 0)
- Ở trên ta sẽ kiểm tra chuỗi số đầu và chuỗi số sau của Number được tách bởi hàm Subtring với tham số pos được xác định ở trên có khác 0 hay không?
- Nếu đúng thì dùng đệ quy thêm đơn vị số vào và phân tích tiếp, câu lệnh:
word = NumberToFrench(Number.Substring(0, pos)) + place + NumberToFrench (Number.Substring(pos));
- Ngược lại nếu sai thì bỏ qua đơn vị mà dùng đệ quy phân tích tiếp, câu lệnh: word = NumberToFrench (Number.Substring(0, pos)) + NumberToFrench (Number.Substring(pos));
- Cứ thế cho đến khi còn 2 chữ số là quay lại trường hợp (*) và trả về kết
quả là chuỗi word.
5.2 Chương trình a) Các thành phần trong giao diện Server
Hình 5.1 Giao diện của Server
1 1 ô TextBox đặt Name là txtCount, để hiển thị số Client đang kết nối tới.
2 1 ô RichTextBox đặt Name là richtxtClient ở bên trái, để hiển thị tên các
Client.
3 1 ô RichTextBox đặt Name là richtxtChat ở bên phải, để hiển thị ngày, giờ
kết nối, ngắt kết nối với dữ liệu nhận từ Client.
b) Các thành phần trong trong giao diện Client
Trang 16Hình 5.2 Giao diện thứ nhất của Client
1 3 ô TextBox được Name lần lượt là txtIP, txtPort, txtName ở bên trái, để hiển
thị địa chỉ IP kết nối, cổng kết nối tới và tên của Client.
2 2 Button được Name lần lượt là btnConnect, btnShutdown ở góc trái dưới cùng,
có chức năng kết nối và ngắt kết nối.
3 1 Combobox được Name là btnOptions, để lựa chọn chức năng muốn sử dụng.
4 1 ô TextBox được Name là txtInput, để hiển thị số đã nhập.
5 1 Button được Name là btnSend, để gửi dữ liệu cho Server.
6 1 RichTextBox được Name là richtxtChat ở giữa, để hiển thị các dòng tin nhắn
của Client.
7 3 ô RichTextBox được Name lần lượt là txtVietnamese, txtEnglish, txtFrench ở
dưới cùng, để hiển thị dữ liệu chữ nhận được từ Server.
Trang 17Hình 5.3 Giao diện thứ hai của Client
8 1 Button được Name là btnChon, để mở File Dialog và chọn File
9 1 ô TextBox được Name là txtFile ở phía trên, để hiện thị đường dẫn của File
- Tạo đối tượng IPEndPoint gồm địa chỉ IP và Port.
- Sau đó lấy Socket server Bind với địa chỉ IPEndPoint và bắt đầu
Listen và BeginAccept các kết nối từ các máy khác
B AcceptCallBack():
- Tạo Socket để tiếp nhận Client kết nối đến, thêm vào list clientSockets.
- Bắt đầu BeginReceive() nhận các dữ liệu truyền từ Client.
- Tiếp tục BeginAccept() chấp nhận các kết nối từ các máy khác.
C ReceiveCallback():
- Nhận được Socket của Client hiện tại, kiểm tra tên của Client và RemoteEndPoint có đúng hay không rồi thêm tên Client vào ô Chat và list nameClients.
- Nhận được dữ liệu số của Client hiện tại thì Server bắt đầu xử lý và gửi trả kết quả cho Client.
- Tiếp tục BeginReceive() nhận các dữ liệu từ Client hiện tại cho đến
Trang 18 Phía Client:
A.Connect():
1.Tạo kết nối với Server:
- Tạo một đối tượng IPEndPoint gồm IP và Port của Server.
- Tiếp theo tạo đối tượng TcpClient rồi truyền IPEndPoint vào để kết nối đến Server bằng phương thức TcpClient.Connect()
2.Giao tiếp với Server:
- Sau khi kết nối thành công thì lấy luồng Stream giao tiếp bằng phương thức TcpClient.GetStream().
- Dùng stream.Write() để gửi name của Client cho Server.
B.Send():
- Thực hiện giao tiếp với server:
+ Kiểm tra xem đã kết nối với Server hay chưa
+ Nếu chưa thì nhắc user kết nối với Server còn rồi thì gửi dữ liệu cần tính toán đi bằng stream.Write().
Trang 19CHƯƠNG 6: MÔ TẢ CHỨC NĂNG HỆ THỐNG VÀ KẾT QUẢ CHƯƠNG
TRÌNH
6.1.Chức năng nhập số bằng tay
Hình 6.1 Lựa chọn Nhập tay trong cbbOptions
Hình 6.2 Nhập số trên ô txtInput
Trang 20Hình 6.3 Nhấn btnSend và nhận được dữ liệu từ Server hiển thị trong 3 ô
TextBox ở dưới
Trang 21Hình 6.5 Lựa chọn Chọn File trong cbbOptions
Trang 22Hình 6.7 Nội dung trong File test1.txt
Hình 6.8 Hiển thị đường dẫn của File test1.tx trên ô TextBox
Trang 23Hình 6.9 Nhấn btnSend và nhận được dữ liệu từ Server hiển thị trong 3 ô
TextBox ở dưới
Hình 6.10 Server nhận được dữ liệu từ Client và gửi trả kết quả
Trang 24CHƯƠNG 7: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
7.1.Kết luận:
- Qua quá trình thực hiện PBL4:Đồ án Hệ điều hành và Mạng máy tính, nhóm em đã được học thêm nhiều kiến thức mới, cách thức mô hình Client - Server hoạt động, Client kết nối đến Server thông qua mạng LAN, xử lí đa luồng nhiều Client kết nối đến một Server, …
- Với đề tài “ Xây dựng chương trình Client-Server để trao đổi một số thành chữ ”, nhóm biết thêm về các thuật toán chuyển đổi số thành chữ, xử lí các chuỗi số lớn lên đến 75 chữ số, biết thêm về số đếm lớn của Tiếng Anh và Tiếng Pháp,…
7.2.Hướng phát triển:
- Thêm các chức năng chưa có như là đọc số âm, số thập phân ,…
- Public IP để có thể kết nối qua Internet chứ không cần dùng đến mạng LAN ảo.
- Xử lý thuật toán chuyển đổi số thành chữ cho các số lớn hơn nữa.