import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class MyCalc extends Applet implements ActionListener
{
Button btn0,btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9;
Button btnAdd,btnSub,btnMul,btnDiv,btnEqu,btnZpt,btnZnak;
Button btnM1C,btnM1R,btnM1S,btnM2C,btnM2R,btnM2S,btnCLR;
String txtOut="0.0",txtM1Out="0.0",txtM2Out="0.0";
boolean FlagNewNum = true,FlagComma=false,f1=true;
String PendingOp="";
double Accum=0;
//------------------------------------------
public double parseDouble(String s)
{
double g=0.0;
long f=0;
int i=0;
int j=0;
String s1="";
String s2="";
j=s.indexOf('.');
if (j>=0)
{
System.out.println(j);
s1=s.substring(j+1);
System.out.println(s1);
f=Long.parseLong(s1,10);
System.out.println(f);
s2=s.substring(0,j);
System.out.println(s2);
i=s1.length();
System.out.println(i);
g=Math.pow(10,i);
System.out.println(g);
g=f/g;
System.out.println(g);
f=Long.parseLong(s2,10);
System.out.println(f);
return (double)(g+f);
}
return g=(double)(Long.parseLong(s));
}
//-----------------------------------------------------------------------------------
public void init()
{
setBackground(Color.blue);
btn0= new Button("0"); add(btn0); btn0.addActionListener(this);
btn1= new Button("1"); add(btn1); btn1.addActionListener(this);
btn2= new Button("2"); add(btn2); btn2.addActionListener(this);
btn3= new Button("3"); add(btn3); btn3.addActionListener(this);
btn4= new Button("4"); add(btn4); btn4.addActionListener(this);
btn5= new Button("5"); add(btn5); btn5.addActionListener(this);
btn6= new Button("6"); add(btn6); btn6.addActionListener(this);
btn7= new Button("7"); add(btn7); btn7.addActionListener(this);
btn8= new Button("8"); add(btn8); btn8.addActionListener(this);
btn9= new Button("9"); add(btn9); btn9.addActionListener(this);
btnAdd= new Button("+"); add(btnAdd); btnAdd.addActionListener(this);
btnSub= new Button("-"); add(btnSub); btnSub.addActionListener(this);
btnMul= new Button("*"); add(btnMul); btnMul.addActionListener(this);
btnDiv= new Button("/"); add(btnDiv); btnDiv.addActionListener(this);
btnEqu= new Button("="); add(btnEqu); btnEqu.addActionListener(this);
btnZpt= new Button("."); add(btnZpt); btnZpt.addActionListener(this);
btnZnak= new Button("+/-"); add(btnZnak); btnZnak.addActionListener(this);
btnM1C= new Button("M1C"); add(btnM1C); btnM1C.addActionListener(this);
btnM1R= new Button("M1R"); add(btnM1R); btnM1R.addActionListener(this);
btnM1S= new Button("M1S"); add(btnM1S); btnM1S.addActionListener(this);
btnM2C= new Button("M2C"); add(btnM2C); btnM2C.addActionListener(this);
btnM2R= new Button("M2R"); add(btnM2R); btnM2R.addActionListener(this);
btnM2S= new Button("M2S"); add(btnM2S); btnM2S.addActionListener(this);
btnCLR= new Button("C"); add(btnCLR); btnCLR.addActionListener(this);
}
//------------------------------------------
public void start()
{
setLayout(null);
btn1.setBounds(10,200,30,30);
btn2.setBounds(50,200,30,30);
btn3.setBounds(90,200,30,30);
btn4.setBounds(10,245,30,30);
btn5.setBounds(50,245,30,30);
btn6.setBounds(90,245,30,30);
btn7.setBounds(10,290,30,30);
btn8.setBounds(50,290,30,30);
btn9.setBounds(90,290,30,30);
btn0.setBounds(10,335,30,30);
btnAdd.setBounds(140,245,30,30);
btnSub.setBounds(180,245,30,30);
btnMul.setBounds(140,290,30,30);
btnDiv.setBounds(180,290,30,30);
btnEqu.setBounds(140,335,70,30);
btnZpt.setBounds(50,335,30,30);
btnZnak.setBounds(90,335,30,30);
btnM1C.setBounds(10,155,50,30);
btnM1R.setBounds(80,155,50,30);
btnM1S.setBounds(150,155,50,30);
btnM2C.setBounds(10,120,50,30);
btnM2R.setBounds(80,120,50,30);
btnM2S.setBounds(150,120,50,30);
btnCLR.setBounds(140,200,70,30);
}
//------------------------------------------
public void actionPerformed(ActionEvent ev)
{
String str = ev.getActionCommand();
if(str.equals("1")) NumPressed(1);
else if(str.equals("2")) NumPressed(2);
else if(str.equals("3")) NumPressed(3);
else if(str.equals("4")) NumPressed(4);
else if(str.equals("5")) NumPressed(5);
else if(str.equals("6")) NumPressed(6);
else if(str.equals("7")) NumPressed(7);
else if(str.equals("8")) NumPressed(8);
else if(str.equals("9")) NumPressed(9);
else if(str.equals("0")) NumPressed(0);
else if(str.equals("C")) Clear();
else if(str.equals(".")) Decimal();
else if(str.equals("+")) Operation("+");
else if(str.equals("-")) Operation("-");
else if(str.equals("*")) Operation("*");
else if(str.equals("/")) Operation("/");
else if(str.equals("=")) Operation("=");
else if(str.equals("M1C")) M1Clear();
else if(str.equals("M1S")) M1Set();
else if(str.equals("M1R")) M1Read();
else if(str.equals("M2C")) M2Clear();
else if(str.equals("M2S")) M2Set();
else if(str.equals("M2R")) M2Read();
else if(str.equals("+/-")) Neg();
repaint(100,10,5,250,110);
}
//------------------------------------------
void NumPressed (int Num)
{
if(txtOut.length()<10)
{
if (FlagNewNum)
{
txtOut="";
if(FlagComma)
{
txtOut = txtOut.substring(0,(txtOut.length()-1));
txtOut +=Num;
f1 = false;
}
else
txtOut += Num + ".0";
FlagNewNum = false;
}
else
{
if (txtOut == "0.0")
{
if(FlagComma)
{
txtOut = txtOut.substring(0,(txtOut.length()-1));
txtOut +=Num;
f1 = false;
}
else
{
txtOut="";
txtOut += Num + ".0";
}
}
else
{
if(FlagComma)
{
if(f1)
txtOut = txtOut.substring(0,(txtOut.length()-1));
txtOut += Num;
f1 = false;
}
else
{
txtOut = txtOut.substring(0,(txtOut.length()-2));
txtOut += Num + ".0";
}
}
}
}
}
//------------------------------------------
void Clear ()
{
FlagComma=false;
Accum = 0;
PendingOp = "";
txtOut = "0.0";
FlagNewNum = true;
f1=true;
}
//------------------------------------------
void Decimal ()
{
if (FlagNewNum) {
FlagComma=true;
FlagNewNum = false;
txtOut = "0.0";
}
else
{
if (!FlagComma)
FlagComma=true;
}
}
//------------------------------------------
void Operation (String Op)
{
if (FlagNewNum && PendingOp != "=")
;
else
{
FlagComma=false;
f1=true;
FlagNewNum = true;
if ( "+" == PendingOp )
Accum += parseDouble(txtOut);
else if ( "-" == PendingOp )
Accum -= parseDouble(txtOut);
else if ( "/" == PendingOp )
Accum /= parseDouble(txtOut);
else if ( "*" == PendingOp )
Accum *= parseDouble(txtOut);
else
Accum = parseDouble(txtOut);
txtOut = "";
txtOut += Accum;
PendingOp = Op;
}
}
//------------------------------------------
void M1Set()
{
txtM1Out = txtOut;
}
//------------------------------------------
void M1Clear()
{
txtM1Out = "0.0";
}
//------------------------------------------
void M1Read()
{
txtOut = txtM1Out;
FlagNewNum = false;
}
//------------------------------------------
void M2Set()
{
txtM2Out = txtOut;
}
//------------------------------------------
void M2Clear()
{
txtM2Out = "0.0";
}
//------------------------------------------
void M2Read()
{
txtOut = txtM2Out;
FlagNewNum = false;
}
//------------------------------------------
void Neg ()
{
double d;
d=(parseDouble(txtOut) * -1);
txtOut="";
txtOut += d;
}
//------------------------------------------
public void paint(Graphics g)
{
g.drawString("Лабораторная работа N5",240,120);
g.drawString("Выполнил ст. гр. ВТ-97б Николаенко Д.В.",240,135);
g.drawString("Вариант N17. Kалькулятор для 4 основных",240,150);
g.drawString("арифметических действий (+ - * /), с двумя ",240,165);
g.drawString("регистрами памяти (М1 и М2) и окнами",240,180);
g.drawString("для отображения содержимого",240,195);
g.drawString("регистров.",240,210);
g.drawString("Nikolaenko@ukrtop.com",225,390);
g.drawString(" ",10,130);
g.drawString(txtOut,10,30);
g.drawString(" ",10,170);
g.drawString(txtM1Out,10,70);
g.drawString(" ",10,205);
g.drawString(txtM2Out,10,105);
}
}