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.. Tổng quan về
Trang 1MỤC LỤC
Trang 2LỜ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.
Trang 3PHẦ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
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
·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ơ đó…
Trang 4Hiệ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.
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.
Trang 5Trướ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.
Trang 6PHẦ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.
Trang 7-Đị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à
Trang 8-Đị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.
Trang 9Java 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ụ.
Trang 11III 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”.
Trang 12-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.
Trang 13-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.
Trang 14-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
Trang 16-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.
Trang 17public class Puzzle extends JButton{
private int ID;
Trang 18JTable table;
JScrollPane sc;
String dulieu[][];
////
private String diachi;
private JFileChooser fc = new JFileChooser();
private String ten[] = new String[100];
private intdiem[] = new int[100];
private intvitri[]=new int[100];
private intdemds = 0;
// ///////////////
private String tennguoichoi;
private intscore = 0;
private intdemmang;
Trang 19// ////
private JTextArea taLog;
private intbuocdi = 0;
private JRadioButton r1;
private JRadioButton r2;
private String chuoi = "";
private intMang[];
private intdem;
private intsoo;// 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 intm; // m=n*n
private intn // 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 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;