Phần I: LỜI MỞ ĐẦU
Chúng ta đang sống trong kỷ nguyên khoa học kỹ thuật hiện đại. Sự bùng nổ của
ngành công nghệ thông tin nói riêng đã mang lại những bước đột phá mà ngay cả những
người phát minh ra chúng cũng không thể hình dung ra được. Bởi sự phát triển của nó
không chỉ mang lại giá trị mà nó vốn có mà nó kéo theo hàng loạt sự bùng nổ của các
ngành khoa học khác. Điều đó đã được chứng tỏ trên thực tế trong thế kỷ qua.
Và bên trong sự phát triển của công nghệ thông tin không thể không nhắc đến sự
phát triển và ra đời của hàng loạt các công cụ lập trình mới hết sức hữu hiệu trong đó có
Java.Ngôn ngữ lập trình Java là một trong những chủ đề được đề cập đến nhiều nhất trong
thế giới hiện nay, và logo của Java - một tách cà phê bốc khói, cùng các applet Java, tràn
ngập khắp nơi trên World Wide Web. Tuy nhiên Java cũng không phải là ngẫu nhiên được
xem là một sản phẩm của WWW từ nguyên thuỷ. Điều đầu tiên mà mọi người trải qua đối
với Java là một hộp màu trắng nằm ngay giữa trang Web khi tải xuống một applet Java.
Bạn sẽ thấy applet Java trong vô số các băng quảng cáo trên WWW, nó giúp các hình ảnh,
âm thanh, và video trở nên hấp dẫn hơn, không độc quyền, và có thể làm theo yêu cầu.
Applet Java được dùng làm cơ sở cho những giải pháp thương mại điện tử, cũng như để
thực tô điểm cho những hiện trình ứng dụng hiện thực ảo bằng hình động và tương tác với
người dùng. Để thấy được khả năng của Applet trong các ứng dụng thực tế chúng ta hãy
cùng xem xét một chương trình ứng dụng sử dụng Applet để mô phỏng hoạt động của
máy tính tay.
1
Phần II: NỘI DUNG
I. Cơ sở lý thuyết và công nghệ sử dụng.
Bài toán : Sử dụng Applet để mô tả hoạt động của máy tính tay.
1. Cơ sở lý thuyết.
a. Các thuật toán sử dụng:
Máy tính tay mà chúng ta vẫn hay sử dụng hỗ trợ khá nhiều cho việc tính toán các phép tính
số học và đồng thời nó còn giúp chúng ta có thể giải được các phương trình bậc 1 , bậc 2 và cả
hệ phương trình tuyến tính . Để thực hiện mô phỏng các chức năng trên của máy tính tay thông
thường ở đây chúng tôi sử dụng các thuật toán : Thuật toán Gausse để giải hệ phương trình ,
thuật toán đổi hệ cơ số, ….để cài đặt cho các chức năng của máy tính mà chúng tôi mô phỏng.
b.
Ngôn ngữ sử dụng:
Như đã đề cập đến ở phần đầu, thì ngôn ngữ sử dụng của chúng tôi là ngôn ngữ Java mà
cụ thể là sử dụng Applet của Java để cài đặt ứng dụng này.Trước khi đi vào trình bày các thành
phần của Java và Applet mà chúng tôi sử dụng để thực hiện chương trình này chúng ta hãy
cùng nhau tìm hiểu lý do tại sao chúng tôi sử dụng Java Applet mà không phải là Java
Application để giải quyết bài toán này.
Thứ nhất, chúng ta cần phân biệt sự khác nhau giữa Java Application và Java
Applet: Java Application là một chương trình độc lập mà bạn có thể chạy trên máy của
mình. Còn Java Applet chỉ là một chương trình nhỏ hơn nhiều. Java Applet là những ứng
dụng mini được phân phối trên Internet và chạy trong một trình duyệt Web hiểu Java. Các
applet Java tăng cường cho trang Web khả năng tương tác phong phú hơn và tính đa
phương tiện tốt hơn so với khi dùng HTML bình thường. Ở đây chúng tôi muốn hỗ trợ
cho những ai lên Web mà có nhu cầu để tính toán chính vì vậy mà chúng tôi chọn Java
Applet để thực hiện bài toán này và nhúng chúng vào trang Web.
2
Ở đây phần tạo các tao giao diện chúng tôi xây dựng các Button, các TextField ,các Label,
các Menu bằng việc sử dụng thư viện JFC để có thể thu được một giao diện đẹp và dễ sử dụng
đối với người dùng.
Việc thực hiện các phép toán sẽ được thực hiện qua các nút bấm , và kết quả sẽ được hiển
thị trên các TextField tương ứng. Việc thực hiện các phép toán sẽ được cài đặt thông qua các
lớp tương ứng.
2. Công nghệ sử dụng.
Công nghệ sử dụng ở trong đồ án này là công nghệ Java để tạo ra các Applet và sử
dụng các IDE của Eclipse
Java, đó là một ngôn ngữ lập trình mới xuất hiện, một cuộc cách mạng trong công
nghệ phần mềm. Trong mấy tháng nay, khi bạn lướt trên các trang web, vào các máy tìm
kiếm, xem các nhóm thảo luận, đọc các báo, đâu đâu cũng thấy nhắc tới Java. Java không
chỉ là một ngôn ngữ lập trình mà còn hơn thế nữa. Đó là cách suy nghĩ mới hoàn toàn về
điện toán, ở nó có khả năng giúp cho nền công nghiệp máy tính phá vỡ sự thống trị của
Wintel. ở nó có khả năng ghép nối mọi loại thiết bị vào mạng, nên chúng ta có thể tương
tác với nhau theo những phương pháp mà trước đây chưa từng có.
Java được bắt đầu như một ý tưởng, một hy vọng là đến ngày nào đó, mọi thiết bị sẽ có
thể nói được với nhau thông qua một hệ thống mạng. Hiện nay, với Java, chưa có nới nào
tiếp cận được mục tiêu đó, nhưng nó đã làm cho các nhà biên soạn phần mềm suy nghĩ về
những gì có thể đạt được.
Java mang cuộc sống đến cho WWW khi mà Web đã cho tiền thân của nó là Oak một
viễn cảnh cuộc sống tốt đẹp hơn. Java đã được thấm sâu vào trong sự hiểu biết của nền
công nghiệp này, còn nhanh hơn cả DOS hoặc Windows trong thời hoàng kim của chúng
trước đây.
Nếu đã có thời gian làm việc trên Web với một Browser hiểu Java, chắc bạn sẽ
muốn đưa thêm công nghệ tăng cường này vào các trang Web của mình. Nhưng tiêu khiển
với các trang có sẵn có tăng cường Java mới chỉ được một nửa sự thú vị. Làm ra các
applet rồi đưa vào trang Web của chính mình mới thực sự đúng điệu.
Bước đầu tiên là phải quyết định định các trang được tăng cường Java như thế
nào, rồi sau đó mới đụng đến applet, công cụ sẽ làm cho các trang đó thành hiện thực.
Điều chủ yếu, nếu không có các applet, “cơn khát” Java sẽ không thể nào thoả mãn được.
Thực ra applet không phải là phương tiện duy nhất để tạo sinh động cho các trang Web
của bạn bằng Java. Java Script, sẽ được trình bày chi tiết hơn trong phần III, cũng là một
phương tiện bổ xung sống động Java . Tuy nhiên, Java Scrip chỉ như phần khuất chìm
3
dưới nước của con thuyền applet, cũng là cà phê nhưng không phải là loại hảo hạng như
applet.
4
II. Phân tích và thiết kế
1. Phân tích:
5
6
2. Thiết kế:
Quan hệ giữa các gói:
Các biểu đồ thành phần:
+ Gói view:
7
+ Gói equation:
+ Gói mathExpression:
8
+ Gói linearSystem:
+ Gói otherFunction:
9
Các biểu đồ lớp:
+ Gói view:
+ Gói mathExpression:
10
+ Gói linearSystem:
11
12
+ Gói equation:
+ Gói otherFunction:
3. Lập trình:
Sinh mã (xem source code).
13
PHẦN III. GIAO DIỆN VÀ CÁCH SỬ DỤNG
1. Giao diện trong chương trình:
+ Menu:
* Các khung nhìn:
+ Giao diện máy tính tay:
+ Tính giá trị biểu thức toán học:
14
+ Giải phương trình bậc 1 và 2:
+ Giải hệ tuyến tính:
15
+ Đổi hệ cơ số:
2. Hướng dẫn sử dụng:
Xem file HTML đính kèm.
16
Phần IV. KẾT LUẬN
Trên đây chỉ là một ứng dụng rất nhỏ mà Java Applet có thể thực hiện được. Trên
thực tế chúng ta hoàn toàn có thể sử dụng Java Applet để thực hiện những bài toán lớn
hơn.Chúng tôi hy vọng rằng với bài toán nhỏ này có thể giúp người sử dụng nó cảm thấy
hài lòng và phần nào hiểu được những ích lợi mà Java Applet đem lại cũng như hiểu được
thế mạnh của nó trong việc hỗ trợ cho các trang Web trở lên sinh động hơn.Vì thời gian
và kiến thức chưa cho phép nên chúng tôi chưa thực hiện hết những chức năng mà chúng
tôi mong muốn có thể hỗ trợ cho người dùng như: giải các phương trình bậc cao hơn hai,
và các hệ phương trình tuyến tính n ẩn.(n>5)…. Chính vì vậy, trong tương lai, chúng tôi
hi vọng có thể có điều kiện phát triển chương trình này để có thể hỗ trợ cho người dùng
nhiều hơn nữa.
Cuối cùng, chúng tôi xin chân thành cảm ơn thầy giáo Phạm Văn Hùng và thầy
giáo Võ Sỹ Nam đã giúp đỡ chúng tôi hoàn thành đồ án này .!
Nhóm thực hiện: Vũ Mạnh Cường(Trưởng nhóm)
Nguyễn Thị Hồng Chi
17
PHỤ LỤC
Một số mã nguồn chính:
-- File ExprDef.java -/* Định nghĩa dạng và kiểm tra tính hợp lệ của biểu thực toán */
package mathExpression;
import mathExpression.ExprException;
public class ExprDef{
//-------------- Constructor ---------------------------------------------public ExprDef(){
}
public ExprDef(String definition){
setDefinition(definition);
}
//-------------- Pubic interface -----------------------------------------public void setDefinition(String definition){
this.definition = definition;
}
public String getDefinition(){
return definition;
}
public boolean parse() throws ExprException {
pos = beginPos = 0;
endPos = definition.length();
parseDefinition();
return true;
}
public boolean parse(int beginPos, int endPos) throws ExprException {
pos = this.beginPos = beginPos;
this.endPos = endPos;
this.parseDefinition();
return true;
}
//-------------- Data ----------------------------------------------------protected String definition; // The original definition of the expression,
// as passed to the constructor.
protected static final byte // values for code array; values >= 0 are indices into constants array
PLUS = -1, MINUS = -2, TIMES = -3, DIVIDE = -4, POWER = -5,
SIN = -6, COS = -7,
TAN = -8,
COT = -9,
SEC = -10,
CSC = -11, ARCSIN = -12, ARCCOS = -13, ARCTAN = -14, EXP = -15,
LN = -16, LOG10 = -17, LOG2 = -18, ABS = -19, SQRT = -20,
ASIN = -21, ACOS = -22, ATAN = -23, ACOT = -24,
SINH = -25, COSH = -26, TANH = -27, COTH = -28,
CEIL = -29,
FLOOR = -30, ROUND = -31, SQR = -32,
UNARYMINUS = -33, VARIABLE = -34 ;
protected static String[] functionNames = // names of standard functions, used during parsing
{ "sin", "cos", "tan", "cot", "sec",
"csc", "arcsin", "arccos", "arctan", "exp",
"ln", "log10", "log2", "abs", "sqrt",
"asin", "acos", "atan", "acot",
"sinh", "cosh", "tanh", "coth",
"ceil", "floor", "round", "sqr" };
protected static String[] constantNames =
{ "e", "pi" };
// names of constants: E, PI
18
protected static double[] constantValues = // values of constants
{ Math.E, Math.PI };
protected int pos = 0; // data for use during parsing
protected int beginPos = 0; // position starting to parse
protected int endPos = 0; // position ending of parse
//-------------- Implementation ------------------------------------------private void parseDefinition() throws ExprException { // Parse the definition and produce all
// the data that represents the expression
// internally; can throw IllegalArgumentException
if (definition == null || definition.trim().equals(""))
throw new ExprException(0,0,"Illegal math expression!");
parseExpression();
skip();
if (next() != 0)
throw new ExprException(pos,pos,"Extra data found after the end of the expression.");
}
protected char next() { // return next char in data or 0 if data is all used up
if (pos >= endPos)
return 0;
else
return definition.charAt(pos);
}
protected void skip() { // skip over white space in data
while(Character.isSpace(next()))
++pos;
}
// remaining routines do a standard recursive parse of the expression
private void parseExpression() throws ExprException {
boolean neg = false;
skip();
if (next() == '+' || next() == '-') {
neg = (next() == '-');
++pos;
skip();
}
parseTerm();
}
skip();
while (next() == '+' || next() == '-') {
char op = next();
++pos;
parseTerm();
skip();
}
private void parseTerm() throws ExprException {
parseFactor();
skip();
while (next() == '*' || next() == '/') {
char op = next();
++pos;
parseFactor();
skip();
}
}
private void parseFactor() throws ExprException {
parsePrimary();
skip();
19
}
while (next() == '^') {
++pos;
parsePrimary();
skip();
}
private void parsePrimary() throws ExprException {
skip();
char ch = next();
if (ch == 'x' || ch == 'X') {
++pos;
}
else if (Character.isLetter(ch))
parseWord();
else if (Character.isDigit(ch) || ch == '.')
parseNumber();
else if (ch == '(') {
++pos;
parseExpression();
skip();
if (next() != ')')
throw new ExprException(pos,pos,"Expected a right parenthesis.");
++pos;
}
else if (ch == ')')
throw new ExprException(pos,pos,"Unmatched right parenthesis.");
else if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '^')
throw new ExprException(pos,pos,"Operator '" + ch + "' found in an unexpected position.");
else if (ch == 0)
throw new ExprException(pos,pos,"Unexpected end of data in the middle of an expression.");
else
throw new ExprException(pos,pos,"Illegal character '" + ch + "' found in data.");
}
private void parseWord() throws ExprException {
String w = "";
int curpos = pos;
while (Character.isLetterOrDigit(next())) {
w += next();
++pos;
}
w = w.toLowerCase();
for (int i = 0; i < functionNames.length; i++) {
if (w.equals(functionNames[i])) {
skip();
if (next() != '(')
throw new ExprException(pos,(pos+w.length()-1),"Function name '" + w + "' must be
followed by its parameter in parentheses.");
++pos;
parseExpression();
skip();
if (next() != ')')
throw new ExprException(pos,pos,"Missing right parenthesis after parameter of function '" + w
+ "'.");
++pos;
return;
}
}
pos = curpos;
parseConstant();
}
private void parseConstant() throws ExprException {
String w = "";
char ch = next();
while (isNotOperator(ch) && Character.isLetterOrDigit(ch)) {
w += ch;
++pos;
ch = next();
}
20
- Xem thêm -