Tải bản đầy đủ (.docx) (35 trang)

báo cáo thực tập nhận thức tại công ty fsoft

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (766.9 KB, 35 trang )

THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
MỤC LỤC
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 1
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
LỜI NÓI ĐẦU
Thực tập nhận thức là giai đoạn quan trọng cho sinh viên hiểu biết thêm về thực
tế, quá trình làm việc, gắn kết lý thuyết với chuyên ngành, là tiền đề cho thực tập
chuyên ngành sau này cũng như quá trình làm đồ án tốt nghiệp. Thực tập trong công ty
FSOFT giúp sinh viên chúng em ngày càng hoàn thiện mình về kiến thức chuyên môn
cũng như có những kiến thức ban đầu về quá trình làm việc thực tế sau này. Qua đó,
giúp em cảm thấy tự tin hơn, có động lực học tập hơn.
Nhờ có các thầy, ở đây là thầy hướng dẫn em Nguyễn Văn Nguyên cùng các anh
chị ở công ty FSOFT đã tận tình chỉ bảo, hướng dẫn em cùng các bạn sinh viên khác
trong quá trình thực tập tại công ty. Công ty đã truyền những kinh nghiệm cũng như
kiến thức hết sức quý báu, giúp em có thể định hình được phần nào cho nghề nghiệp
tương lai của mình.
Em hi vọng với hành trang kiến thức sau những buổi thực tập như thế này, cũng
như là thời gian học tập ở trường, em có thể tự tin để hoạt động trong lĩnh vực Công
nghệ thông tin.
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 2
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
PHẦN A : CẢM NHẬN VỀ QUÁ TRÌNH THAM QUAN VÀ TIẾP CẬN
MÔI TRƯỜNG LÀM VIỆC CỦA CÔNG TY FSOFT
I. Giới thiệu tổng quan :
FPT Software - Công ty Phần mềm lớn nhất Việt Nam
Tổng quan về FPT Software
·Tên chính thức: Công ty TNHH Phần mềm FPT
. Nhân sự: 5700 nhân viên (T3/2014)
·Hiện diện trên 7 quốc gia: Việt Nam, Nhật Bản, Mỹ, Pháp, Đức, Singapore,


Malaysia
·Dịch vụ: phát triển phần mềm và bảo trì, triển khai ERP, QA, chuyển đổi ứng
dụng, hệ thống nhúng, Mobility, Cloud Computing, Big Data…
.Chứng chỉ chất lượng hàng đầu: CMMI L5 V1.2 và ISO 27001:2005
.Giải thưởng:
“Top 100 nhà cung cấp dịch vụ phần mềm toàn cầu” - (International Association of
Outsourcing Professional - IAOP)
Top 2 nơi làm việc tốt nhất Việt Nam – hạng mục các công ty IT - Phần mềm (theo
kết quả khảo sát của Anphabe và Neilsen Việt Nam)
·R&D: Các xu hướng công nghệ mới của thế giới như Mobility, Cloud computing,
Big Data & Security.
·Khách hàng và Đối tác: Hàng trăm khách hàng và đối tác là những tập đoàn
hàng đầu thế giới: IBM, Oracle, Cisco, Microsoft, SAP, NTT, Hitachi, Canon,
Panasonic, Toshiba, Sony, Neopost, Freescale…
·Lĩnh vực: Tài chính ngân hàng, Viễn thông, Y tế, Chế tạo, Công nghiệp xe hơi,
Dịch vụ công…
FPT Software được thành lập vào tháng 1/1999 với 13 nhân viên. Thời điểm khởi
nghiệp, FPT Software được xây dựng từ con số không. Không khách hàng, không
quan hệ, thiếu những kiến thức cơ bản nhất về kinh doanh trong môi trường quốc tế.
“FPT Software bắt đầu bằng một giấc mơ. Giấc mơ sẽ xây dựng được một công ty
thành công ở tầm quốc tế trong điều kiện đất nước còn lạc hậu và nhiều khó khăn.
Giấc mơ sẽ có hàng nghìn thanh niên Việt Nam có điều kiện làm việc trong các môi
trường quốc tế cạnh tranh, sánh vai với các tài năng khác trên toàn cầu”, TGĐ FPT
Software Nguyễn Thành Lâm hồi tưởng về thời kỳ đầu. Anh cho rằng hiện tại công ty
đã tiến đến gần giấc mơ đó…
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 3
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
Hiện, FPT Software được đánh giá là doanh nghiệp xuất khẩu dịch vụ phần mềm
đầu tiên của Việt Nam cán mốc doanh thu 100 triệu USD, hơn 5.000 nhân viên, hiện

diện tại 8 quốc gia và vũng lãnh thổ trên thế giới. Mức tăng trưởng bình quân của
công ty trong giai đoạn 2004-2013 là 49%/năm về doanh thu và 43%/năm về lợi
nhuận.
Đây cũng là doanh nghiệp tiên phong trong việc xây dựng trụ sở làm việc theo
mô hình campus tại cả ba miền Bắc, Trung, Nam, để đáp ứng nhu cầu phát triển
không ngừng về quy mô trong dài hạn.
Năm 2013, tạp chí Forbes Việt Nam đã công bố danh sách 50 công ty hàng đầu
Việt Nam. Theo anh Lâm, nếu so sánh về tốc độ tăng trưởng trung bình (CAGR) thì
FPT Software đứng trong Top 3, đồng thời cũng là một trong 3 công ty duy nhất luôn
duy trì được lợi nhuận cao trên 20%/năm và ổn định.
"Nhìn trên phương diện tính toàn cầu của đội ngũ nhân viên thì tôi tin FPT
Software sẽ có vị trí dẫn đầu với nhân viên đến từ 10 quốc gia trên thế giới gồm: Nhật
Bản, Singapore, Malaysia, Ấn Độ, Mỹ, Nigeria, Pháp, Đức, Philippines, Myanmar”,
TGĐ FPT Software khẳng định.
Năm 2014, công ty dự kiến tuyển dụng 2.500 nhân viên mới và tăng trưởng
doanh thu dự kiến là 30% so với năm 2013. FPT Software cũng đặt mục tiêu đạt
doanh thu 200 triệu USD và 10.000 nhân viên vào năm 2016.
Những thành tích trên là cơ sở để FPT Software tiếp tục theo đuổi giấc mơ trong
chặng đường phát triển tiếp theo: Đạt doanh thu 1 tỷ USD và hàng chục nghìn nhân
viên.
II. Cảm nhận của bản thân :
Trong đợt thực tập vừa rồi, em được phân công thực tập tại công ty FSOFT tại Đà
Nẵng dưới sự hướng dẫn của thầy Nguyễn Văn Nguyên. Trong quá trình thực tập, em
và các bạn đã nhận được sự giúp đỡ rất nhiệt tình của các anh chị trong công ty.
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 4
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
Trước khi thực tập, em cũng đã được biết về công ty cũng như một phần nào công
việc ở đây. Nhưng khi được tận mắt tham quan công ty, cảm giác bở ngỡ là điều
không thể tránh khỏi. Công ty rất rộng và thoáng, nhìn từ bên ngoài rất đồ sộ, đậm

chất của ngành IT.
Được tham quan các phòng ban, môi trường làm việc ở đây, đó là một niềm vinh
hạnh lớn đối với sinh viên chúng em. Em đã được tận mắt thấy quá trình làm việc của
các anh chị đi trước, giúp em hình dung được công việc mình sẽ làm sau này, cũng
như định hình một phần nào đó cho tương lai.
Tiếp đó, chúng em còn được vào hội trường, nơi diễn ra những buổi hội thảo
doanh nghiệp, bàn chiến lược … của công ty. Tại đây, chúng em đã được giao lưu với
những anh chị có kinh nghiệm lâu năm trong nghề. Các anh chị đã thuyết trình về
những điều chúng em chưa được nghe, được thấy, được học ở ghế nhà trường. Chính
điều đó đã làm cho buổi thực tập thêm thú vị, tiếp đó là phần giải đáp thắc mắc.
Chúng em đã được hỏi những điều mà chúng em băn khoăn về kế hoạch học tập, thực
tập, công việc, định hướng tương lai, ngoại ngữ… một cách trực tiếp tại doanh
nghiệp-nơi mà có thể sau này sẽ là điểm đến của chúng em. Nhờ những giải đáp đó
mà chúng em có thêm tự tin, cũng như nổ lực để đạt được 1 vị trí quan trọng trong
công ty sau này.
Một lần nữa em xin cảm ơn nhà trường, các thầy ở trường Đại học Bách Khoa Đà
Nẵng nói chung, khoa Công nghệ thông tin nói riêng, các anh chị ở công ty FSOFT,
và đặc biệt là thầy hướng dẫn Nguyễn Văn Nguyên đã giúp em có được 1 buổi thực
tập đầy ý nghĩa và bổ ích.
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 5
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
PHẦN B : NGHIÊN CỨU GÓI CÔNG NGHỆ SWING TRONG JAVA,
XÂY DỰNG ỨNG DỤNG MINH HỌA VỚI TRÒ CHƠI PUZZLE TẤT CẢ
CÁC ĐỐI TƯỢNG TRONG SWING
I. Tổng quan về Swing
a.Khái niệm về Swing
Swing được mô tả như là một tập các thành phần đồ họa được tạo ra để những cảm
quan (Look&Feel) được thể hiện vào thời điểm runtime.
Thật sự, thì Swing còn nhiều hơn như thế. Swing là bộ công cụ GUI thế hệ kế tiếp mà

Sun Microsystems tạo ra cho phép môi trường phát triển enterprise trong Java.Bằng
môi trường phát triển enterprise, chúng ta hiểu rằng, các lập trình viên có thể sử dụng
Swing để tạo ra các ứng dụng Java có khả năng mở rộng với một dãy nhiều thành phần
mạnh mẽ. Thêm vào đó, bạn có thể kế thừa hoặc chỉnh sửa những thành phần này để
điều khiển việc hiển thị và các hành xử của chúng.
b . Đặc điểm của Swing
2.1 Cảm quan Pluggable
Một trong những tính thể hiện thú vị nhất ở các lớp Swing là khả năng viết những cảm
quan (Look&Feels) cho mỗi thành phần, thậm chí thay đổi cảm quan vào thời điểm
runtime.
2.2 Các thành phần LightWeight
Hầu hết các thành phần Swing đều không nặng nề. Theo nghĩa đen, nghĩa là những
thành phần này độc lập trên những L&F hiển thị chúng. Thay vào đó, chúng sử dụng
môi trường đồ họa gốc đơn giản để vẽ chúng trên màn hình
2.3 Các đặc điểm mở rộng
Những đặc điểm riêng khác phân biệt Swing với những thành phần AWT cũ. Swing có
rất nhiều những thành phần mới như table, tree, slider, spinner, progress bar, internal
frame và text. Những thành phần Swing hỗ trợ việc thay thế các inset của chúng bằng
một số lượng tùy ý các border lồng bên trong. Ngoài ra còn có hỗ trợ debug cho việc
hiển thị những thành phần Swing
2.4 Các gói và lớp Swing
1.javax.accessibility
-Chứa các lớp và các giao tiếp mà có thể được sử dụng cho phép công nghệ trợ giúp để
tương tác với các thành phần của Swing.
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 6
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
2.javax.swing
Chứa các thành phần cốt lõi của Swing, bao gồm hầu hết các mô hình giao tiếp và các
lớp hỗ trợ.

3.javax.swing.border
-Chứa các lớp đường viền trừu tượng cũng như 8 đường viền được định nghĩa.
4.javax.swing.colorchooser
-Hỗ trợ cho thành phần JColorchooser.
5.javax.swing.event
-Định nghĩa những listener mới và những event mà những thành phần swing sử dụng
để giao tiếp thông tin với các class.
6.javax.swing.filechooser
-Hỗ trợ thành phần JFileChooser.
7.javax.swing.plaf
-Định nghĩa những yếu tố dụng nhất tạo nên cảm quan cho mỗi thành phần của
Swing.Các gói con là javax.swing.plaf.basic, javax.swing.plaf.metal và
javax.swing.plaf.multi.
8.javax.swing.table
-Cung cấp các mô hình và quan sát cho thành phàn table,cho phép bạn sắp xếp thông
tin riêng biệt trong định dạng lưới với sự xuất hiện tương tự bảng tích( Ecxel).
9.javax.swing.text
-Cung cấp cac điểm của các lớp và giao tiếp dựa trên văn bản hỗ trợ thiết kế thông
dụng được biết đến như document/view.
10.javax.swing.text.html
-Sử dụng kĩ thuật đọc và định dạng văn bản HTML.
11.javax.swing.text.html.parser
-Hỗ trợ việc phân tích HTML
12.javax.swing.text.rtf
-Sử dụng kĩ thuật đọc và định dạng Rich Text Formay.
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 7
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
13.javax.swing.tree
-Định nghĩa các mô hình và quan sát thành phần phân cấp,có thể thay thế một cấu trúc

file hoặc một dã các thuộc tính.
14.javax.swing.undo
-Chứa những chức năng cần thiết cho việc bổ sung chức năng undo.
II . Các khái niệm & chức năng của Swing
a) Thành phần Swing & sự phân cấp giới hạn
SwingApplication thành phần Swing thường dùng như sau:
-Giao diện người dùng với Java (Java GUI).
- Các Container : JFrame, JPanel, Jdialog .
- Các component: Jlabel, Jtextfield, Jbutton, JComboBox, JcheckBox, JradioButton
- Layout manager: FlowLayout, GridLayout, BorderLayout, …
- Tạo menu.
frame là đối tượng chứa ở mức đỉnh. is a top-level container. Sự hiện diện của frame
nhằm cung cấp một vùng để các thành phần khác thiết lập sự có mặt của mình trên
vùng đó. Ngoài ra còn có các thành phần khác thường được sử dụng để làm đối tượng
chứa mức đỉnh là dialogs (JDialog) và applets (JApplet).
panel là đối tượng chứa mức trung gian (intermediate container). panel nhằm mục
đích xác định vị trí của button và label. Những đối tượng chứa mức trung gian khác
còn có scroll panes (JScrollPane) và tabbed panes (JTabbedPane), chúng có ảnh hưởng
lẫn nhau, tương tác với nhau rtong giao diện của một chương trình.
button và label là những thành phần cơ bản (atomic components), những thành phần
mà không thể chứa các thành phần Swing khác AWT thông thường, các thành phần cơ
bản này sẽ là nơi để nhận thông tin đầu vào từ phía người dùng. Swing API cung cấp
nhiều thành phần cơ bản, bao gồm combo boxes (JComboBox), text fields
(JTextField), và tables (JTable).
b) Layout Management
Các đối tượng chứa sử dụng layout managers để xác lập kích thước và vị trí của các
thành phần chứa trong nó. Borders sẽ ảnh hưởng đến layout của Swing GUIs bằng
cách làm cho các thành phần lớn lên.
Layout management là quá trình xác định kích thước và vị trí của các thành phần. Mặc
định, mỗi đối tượng chứa sẽ có một layout manager.

SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 8
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
Java platform hỗ trợ sử dụng 5 layout managers thông thường nhất: BorderLayout,
BoxLayout, FlowLayout, GridBagLayout, và GridLayout. Những layout managers
được thiết kế để hiển thị đa thành phần trong cùng một thời điểm. Và lớp thứ 6,
CardLayout, là một trường hợp đặc biệt, để kết hợp các layout managers với nhau
c) Event Handling
Event handling thể hiện việc chương trình phản hồi các yêu cầu từ phía bên ngoài, ví
dụ như việc người dùng nhấn phím chuột. Chương trình Swing sẽ thực hiện tất cả các
thao tác và nắm bắt các sự kiện (event handling) bằng cách thực hiện tiến trình của sự
kiện.
d) Painting
Painting nghĩa là vẽ các thành phần trên màn hình. Mặc dầu việc tùy chọn các thành
phần được thực hiện một cách dễ dàng, nhưng hầu hết các chương trình đều bị làm
phức tạp lên bằng cách tùy chọn đường viền cho các thành phần.
Cũng giống như event-handling, painting cũng được thực hiện trong một tiến trình đơn.
Trong khi một sự kiện đang xảy ra thì quá trình vẽ lại không được thực hiện.
e) Actions
Với đối tượng Action, Swing API cung cấp những hỗ trợ đặc biệt cho việc chia xẽ dữ
liệu và trạng thái giữa hai hoặc nhiều thành phần phát ra các sự kiện hành động. Ví dụ,
khi ta có một button và một menu item cùng một chức năng, lúc đos cần cân nhắc việc
sử dụng đối tượng Action để xác định văn bản, icon và trạng thái của hai thành phần.
f) Icons
Nhiều thành phần Swing có thể hiển thị icons(JLabel và JButton). Thường thì icons là
trường hợp cá biệt của ImageIcon class.
Một vài thành phần Swing như JLabel và JButton, có thể được trang trí bởi một icon.
Icon là một đối tượng gắn kết chặt chẽ với giao diện Icon. Swing cung cấp cho giao
diện Icon cách thực hiện rất đặt biệt và hiệu quả đ• vẽ một Icon tưg một tập tin ảnh có
dạng thức GIF hoặc JPEG.

g) Timers
Với lớp Timer, bạn có thể cho thực hiện một tiến trình của việc thực thi một hành động
sau một khoảng thời gian xác định và lặp lại hành vi ấy.
Có hai cách để thực hiện Timer:
Thực hiện một tác vụ, với thời gian lặp lại được xác định. Ví dụ, tool tip manager sử
dụng timers để quyết định khi nào thì hiển thị và khi nào thì tắt nó đi.
Thực hiện việc lặp đi lặp lại một tác vụ.
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 9
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 10
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
III . Bài toán ứng dụng : Ứng dụng gói giao diện Swing trong java để làm game
Puzzle
a) Tổng quan giao diện trò chơi:
b) Các đối tượng lớp Swing trong trò chơi Puzzle:
-JFrame : Chứa tất cả các đối tượng khác, Layout của JFrame này được thiết lập là
null.
-JPanel : Ở đây có tất cả 7 JPanel, mỗi Panel chứa những đối tượng khác nhau và được
sắp xếp đặt ở tọa độ và kích thước khác nhau trong JFrame .
-JLabel: JLabel được sử dụng để hiện hình ảnh “Đích” của trò chơi,có thể bật tắt hình
ảnh này thông qua 2 JRadioButton “Có hình” và “Không Hình”.
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 11
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
-JButton: Được sử dụng để tạo các phím mũi tên thay thế cho các phím up/ down/ left/
right và được sử dụng thêm để thể hiện mảng các hình ảnh trong trò chơi.Trò chơi 3x3
sẽ có 9 JButton, 4x4 sẽ có 16 JButton.


-JMenuBar, JMenu, JMenuItem : Để tạo thanh menu cho trò chơi.
-Jlist : Để hiện các cách chơi mà người chơi có thể chọn, mỗi khi chọn một cách chơi
nào đó, bắt buộc người chơi phải hoàn thành được hình đích thì mới có thể chọn JList
khác.
-JRadioButton : Để thay đổi cách chơi là có cho phép nhìn gợi ý từ hình “Đích” hay
không, có thể bật tắt liên tục trong quá trình chơi.
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 12
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
-JCombobox: Cũng như Choice trong AWT, JCombobox để thả chọn những thông tin
chứa trong đó.
-JTextArea : Qua các thao tác di chuyển, JTextArea sẽ hiển thị mảng và giá trị để
người chơi có thể xem quá trình thay đổi cũng như trạng thái mảng trong quá trình chơi
của mình.

-JScrollPane : Dùng để cuộn từ JTextArea nếu số dòng của JTextArea vượt quá, và
bảng của JTable.

- JOptionPane :Hiển thị các dialog của JMenuItem “Luật Chơi” và “About” hoặc hiện
thông báo sau khi hoàn thành trò chơi.
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 13
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
-JFileChooser:Hiển thị giao diện để chọn file điểm cũng như save lại kết quả sau khi
chơi.
-
-Border : Trong trò chơi sử dụng 2 trên 8 loại border là các đường viền là
aisedBevelBorder, EtchedBorder.
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 14

THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 15
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
-JcolorChooser : Sử dụng để thay đổi màu nền chữ trong 2 JTextAreal.
-JTable: Tạo một bảng dạng lưới để in kết quả vị trí, tên, điểm của người chơi.
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 16
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
c) Code chương trình:
*Lớp Puzzle:
package PuzzlePackage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
/**
*
* @author kwanggary
public class Puzzle extends JButton{
private int ID;
private int GT;
public void Puzzle(){
}
public int GetGT(){
return this.GT;
}
public void SetGT(int GT){
this.GT=GT;
}
}
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3

MSSV: 102110263 17
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
*Lớp Main :
package PuzzlePackage;
import java.awt.BorderLayout;
import java.awt.Checkbox;
import java.awt.Choice;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import javax.swing.table.DefaultTableModel;
import javax.swing.BorderFactory;
/**
*
* @author kwanggary
*/
public class Main extends JFrame implements ActionListener, KeyListener,
ItemListener, ListSelectionListener {
///////khai bao table
JTable table;
JScrollPane sc;
String dulieu[][];
////
private String diachi;
private JFileChooser fc = new JFileChooser();
private String ten[] = new String[100];
private int diem[] = new int[100];
private int vitri[]=new int[100];
private int demds = 0;
// ///////////////
private String tennguoichoi;
private int score = 0;
private int demmang;
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 18
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
// ////
private JTextArea taLog;
private int buocdi = 0;
private JRadioButton r1;

private JRadioButton r2;
private String chuoi = "";
private int Mang[];
private int dem;
private int soo;// Tong so o hinh anh
private Puzzle taomoi;
private Puzzle trunggian;
private Puzzle kiemtra;
private Random ran;
private Random ran2;
private JPanel panh; // panel nay chua Button anh
private JPanel ppanh;// panel chua panel chua anh
private JPanel pphim;// panel nay chua Phim len xuong,trai,phai
private JPanel ptuychon; // chua cac Option lua chon
private JPanel panhchinh;// chua anh chinh
private JPanel ptext;// chua textfiel va text area
private JPanel pradio;
private JPanel bangxephang;
private ArrayList<ImageIcon> lanh;
private ArrayList<Puzzle> TTID;
private int m; // m=n*n
private int n; // n la so canh;
private Puzzle p1; // puzzle dau
private Puzzle p2; // puzzle sau can hoan doi
private JButton len;
private JButton xuong;
private JButton trai;
private JButton phai;
private JButton auto;
private JMenuBar mnb;

private JMenu m1, m2;
private JMenuItem mi1, mi2, mi3, mi4, mih, savef;
private JLabel anhchinh;
private Checkbox c2;
private Checkbox c3;
private JComboBox<String> cbb;
private String[] arr = { "Thực Tập Nhận Thức", "Trần Đại Dương",
"Lớp : 11T3" };
private ImageIcon anh10;
private ImageIcon anhh17;
private JTextArea texta;
private JTextField textf;
private Border raisedBevel;
private JScrollPane js;
private String[] mang = { "3x3", "4x4", "5x5" };
private JList<String> Jlist;
private JButton butcolor;
public Main() {
super("PUZZLE");
addKeyListener(this);
setSize(1340, 760); // kich thuoc Jframe chinh
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 19
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
setResizable(false); // khong cho thay doi kich thuoc
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // kich nut close ben
// phai man hinh
// /////////////////////////////////////
lanh = new ArrayList(); // list chua hinh anh

// add anh button control
ImageIcon bu = new ImageIcon(getClass().getResource("bu.png"));
ImageIcon bd = new ImageIcon(getClass().getResource("bd.png"));
ImageIcon bl = new ImageIcon(getClass().getResource("bl.png"));
ImageIcon br = new ImageIcon(getClass().getResource("br.png"));
ImageIcon lb = new ImageIcon(getClass().getResource("lbut.png"));
// khai bao 2 Jraido button
r1 = new JRadioButton("Có hình ", true);
r2 = new JRadioButton("Không hình", false);
r1.addActionListener(this);
r2.addActionListener(this);
ButtonGroup group = new ButtonGroup();
group.add(r1);
group.add(r2);
// combobox
cbb = new JComboBox<String>(arr);
// list
Jlist = new JList<String>(mang);
Jlist.addListSelectionListener(this);
// cac border
Border raisedBevel = BorderFactory.createRaisedBevelBorder();
Border loweredEtched = BorderFactory.createEtchedBorder();
// add menubar vao
mnb = new JMenuBar();
m1 = new JMenu("Tùy Chọn");
m2 = new JMenu("Giúp Đỡ");
mi1 = new JMenuItem("Mở Bảng Điểm");
m1.add(mi1);
savef = new JMenuItem("Lưu Điểm Mới");
savef.addActionListener(this);

m1.add(savef);
mi1.addActionListener(this);
mi2 = new JMenuItem("Thoát");
mi2.addActionListener(this);
m1.add(mi2);
mi3 = new JMenuItem("Luật Chơi");
mi3.addActionListener(this);
m2.add(mi3);
mi4 = new JMenuItem("About ");
mi4.addActionListener(this);
m2.add(mi4);
mnb.add(m1);
mnb.add(m2);
setJMenuBar(mnb);
// ///anh chinh//////////////
anhchinh = new JLabel();
anhchinh.setBounds(0, 50, 300, 300);
// khai bao 2 cai text
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 20
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
textf = new JTextField("Bảng");
textf.setEnabled(false);
texta = new JTextArea(40, 20);
texta.setEditable(false);
js = new JScrollPane(texta);
anhchinh.addKeyListener(this);
// khai bao////////////////////////////////
pradio = new JPanel();// chua 2 nut radio button
ppanh = new JPanel(); // panel chua panel chua anh

pphim = new JPanel(); // panel chua button dieu khien
panh = new JPanel(); // panel chua button anh
ptuychon = new JPanel();
bangxephang = new JPanel();
; // chua cac Option lua chon
panhchinh = new JPanel();// chua anh chinh
ptext = new JPanel(); // chua textfiel
// thiet lap vi tri kich
// thuoc,layout///////////////////////////////////////////
pphim.setLayout(new GridLayout(3, 3));
bangxephang.setBounds(1100, 0, 240, 690);
bangxephang.setLayout(new GridLayout(2,1));
pphim.setBounds(500, 400, 300, 300);
ptuychon.setLayout(new GridLayout(2, 3));
// ptuychon.setBackground(Color.WHITE);
ptuychon.setBounds(0, 0, 500, 200);
panhchinh.setBounds(500, 0, 300, 400);
panhchinh.setLayout(null);
panhchinh.setBackground(Color.black);
ptext.setBounds(800, 0, 300, 700);
ptext.setLayout(new GridLayout(1, 1));
// ptext.setBackground(Color.GRAY);
ppanh.setBounds(0, 200, 500, 500);
// ppanh.setBackground(Color.blue);
ppanh.setLayout(null);
pradio.setLayout(new GridLayout(2, 1));
// them cac doi tuong vao
// panel///////////////////////
addKeyListener(this);
panhchinh.add(anhchinh);

ptuychon.add(new JLabel());
ImageIcon anhmau = new ImageIcon(getClass().getResource("chonmau.png"));
butcolor=new JButton("Thay đổi màu chữ");
butcolor.setIcon(anhmau);
//butcolor.set
ptuychon.add(butcolor);
ptuychon.add(new JLabel());
///tao luon 1 button thay doi backgruond
butcolor.addActionListener(this);
//ptuychon.add(new JLabel());
ptuychon.add(Jlist);
pradio.add(r1);
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 21
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
pradio.add(r2);
ptuychon.add(pradio);
ptuychon.add(cbb);
ppanh.add(panh);
// ptext.add(texta);
ptext.add(js);
ptext.setBorder(loweredEtched);
pradio.setBorder(loweredEtched);
ppanh.setBorder(loweredEtched);
// set cac border cho panel////////////////
add(pphim); // them panel phim vao Frame
add(ptuychon);
add(ptext);
add(panhchinh);
add(ppanh); // them Panel anh vao Frame

add(bangxephang);
len = new JButton();
len.setIcon(bu);
xuong = new JButton();
xuong.setIcon(bd);
trai = new JButton();
trai.setIcon(bl);
phai = new JButton();
phai.setIcon(br);
auto = new JButton();
auto.addActionListener(this);
len.addActionListener(this);
xuong.addActionListener(this);
trai.addActionListener(this);
phai.addActionListener(this);
// them cac phim su kien vao panel chua phim
pphim.add(new JLabel());
pphim.add(len);
pphim.add(new JLabel());
pphim.add(trai);
pphim.add(auto);
pphim.add(phai);
pphim.add(new JLabel());
pphim.add(xuong);
pphim.add(new JLabel()); // tao border cho panel phim
pphim.setBorder(raisedBevel);
// /////////
anh10 = new ImageIcon(getClass().getResource("30.jpg"));
anhh17 = new ImageIcon(getClass().getResource("40.jpg"));
Jlist.addKeyListener(this);

// /////////
//khai bao sc
table=new JTable();
sc=new JScrollPane(table);
dulieu=new String[21][3];
/////////
JLabel hinhgame=new JLabel();
ImageIcon hinhgame2 = new ImageIcon(getClass().getResource("hinhnen3.png"));
hinhgame.setIcon(hinhgame2);
bangxephang.add(sc);
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 22
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
bangxephang.add(hinhgame);
}
boolean kiemtramang() {
demmang = 0;
for (int i = 0; i <= m - 2; i++) {
if (Mang[i] != 8) {
for (int j = i + 1; j <= m - 1; j++) {
if (Mang[i] > Mang[j]) {
if (Mang[j] != 8)
demmang++;
}
}
}
}
if (demmang % 2 == 0)
return true;
else

return false;
}
void Game(int x) {
Jlist.setEnabled(false); //khong cho chon list XxX khac nua
int j;
n = x;
m = n * n;
LoadAnh(x); //load anh full
Random ran = new Random();
Mang = new int[m];
do {
for (int i = 0; i <= m - 1; i++) {
try {
Mang[i] = ran.nextInt(m);
for (j = 0; j < i; j++) {
if (Mang[i] == Mang[j])
i ;
}
} catch (ArrayIndexOutOfBoundsException e) {
}
;
}
} while (!kiemtramang()); //kiem tra xem mang nay
//co the xep ra dk hinh goc ko
System.out.println("demmang =" + demmang);
chuoi += "\n Bước " + buocdi + "\n";
for (int i = 0; i < m; i++) {
chuoi += "mang [" + i + "] =" + Mang[i] + "\n";
texta.setText(chuoi);
}

texta.setText(chuoi);
// Ta da co 1 mang 1-n^2 voi gia tri khac nhau
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 23
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
// tao ra n*n Button tren 1 panel
if (n == 3) {
panh.setBounds(100, 100, n * 100, n * 100);
anhchinh.setIcon(anh10);
score = 10000;
} else if (n == 4) {
panh.setBounds(50, 50, n * 100, n * 100);
anhchinh.setIcon(anhh17);
score = 30000;
} else if (n == 5) {
panh.setBounds(0, 0, n * 100, n * 100);
}
panh.setLayout(new GridLayout(n, n)); // set layout cho panel chua cac
// Button hinh anh
TTID = new ArrayList(); // luu thu tu cac Button tao ra vao 1 mang
for (int i = 0; i <= m - 1; i++) {
try {
taomoi = new Puzzle();
taomoi.SetGT(Mang[i]);
taomoi.setIcon((ImageIcon) lanh.get(Mang[i]));
panh.add(taomoi);
TTID.add(taomoi);
} catch (NullPointerException e) {
}
;

}
panh.updateUI();
}
void ThaoTac(int x1) {
int ID = 0;
// m;
trunggian = new Puzzle();
p1 = new Puzzle();
p2 = new Puzzle();
for (int i = 0; i <= m - 1; i++) {
trunggian = (Puzzle) TTID.get(i);
if (trunggian.GetGT() == (m - 1))
ID = i;
}
try {
switch (x1) {
case 1: {
if ((ID + n) <= (m - 1)) {
p1 = (Puzzle) TTID.get(ID);
p2 = (Puzzle) TTID.get(ID + n);
p1.SetGT(Mang[ID + n]);
p2.SetGT(Mang[ID]);
p1.setIcon((ImageIcon) lanh.get(Mang[ID + n]));
p2.setIcon((ImageIcon) lanh.get(Mang[ID]));
int tam3 = Mang[ID + n];
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 24
THỰC TẬP NHẬN THỨC GVHD: NGUYỄN VĂN NGUYÊN
Mang[ID + n] = Mang[ID];
Mang[ID] = tam3;

buocdi++;
chuoi += "\n";
chuoi += "\n Bước " + buocdi;
chuoi += "\n";
for (int i = 0; i < m; i++) {
chuoi += "mang [" + i + "] =" + Mang[i] + "\n";
texta.setText(chuoi);
}
texta.setText(chuoi);
KiemTra();
}
break;
}
case 2: {
if ((ID - n) >= 0) {
p1 = (Puzzle) TTID.get(ID);
p2 = (Puzzle) TTID.get(ID - n);
p1.SetGT(Mang[ID - n]);
p2.SetGT(Mang[ID]);
p1.setIcon((ImageIcon) lanh.get(Mang[ID - n]));
p2.setIcon((ImageIcon) lanh.get(Mang[ID]));
int tam3 = Mang[ID - n];
Mang[ID - n] = Mang[ID];
Mang[ID] = tam3;
buocdi++;
chuoi += "\n";
chuoi += "\n Bước " + buocdi;
chuoi += "\n";
for (int i = 0; i < m; i++) {
chuoi += "mang [" + i + "] =" + Mang[i] + "\n";

texta.setText(chuoi);
}
// buocdi++;
// chuoi += "\n Bước "+buocdi;
texta.setText(chuoi);
KiemTra();
}
break;
}
case 3: {
int tam = ID % n;
if (0 != tam) {
p1 = (Puzzle) TTID.get(ID);
p2 = (Puzzle) TTID.get(ID - 1);
p1.SetGT(Mang[ID - 1]);
p2.SetGT(Mang[ID]);
p1.setIcon((ImageIcon) lanh.get(Mang[ID - 1]));
p2.setIcon((ImageIcon) lanh.get(Mang[ID]));
int tam3 = Mang[ID - 1];
Mang[ID - 1] = Mang[ID];
Mang[ID] = tam3;
buocdi++;
SVTH : TRẦN ĐẠI DƯƠNG LỚP : 11T3
MSSV: 102110263 25

×