求大神用Java编写出这个程序,要有具体代码,万分感激,定采纳

求大神用Java编写出这个程序,要有具体代码,万分感激,定采纳,第1张

按照你的要求编写的JavaGUI程序如下:

import javaawtGridLayout;

import javaawteventActionEvent;

import javaawteventActionListener;

import javaxswingJButton;

import javaxswingJFrame;

import javaxswingJPanel;

import javaxswingJTextField;

public class HH extends JFrame implements ActionListener{

 JPanel jp1=new JPanel();

 JPanel jp2=new JPanel();

 JPanel jp3=new JPanel();

 JTextField jtf=new JTextField(20);

 JButton jb1=new JButton("显示");

 JButton jb2=new JButton("清除");

 HH(){

  jb1addActionListener(this);

  jb2addActionListener(this);

  jp1setLayout(new GridLayout(2,1));

  jp3add(jtf);

  jp2add(jb1);jp2add(jb2);

  jp1add(jp3);jp1add(jp2);

  getContentPane()add(jp1);

  setSize(300, 120);

  setLocationRelativeTo(null);

  setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

  setVisible(true);

 }

 @Override

 public void actionPerformed(ActionEvent e) {

  if(egetSource()==jb1){

   jtfsetText("java程序设计");

  }

  if(egetSource()==jb2){

   jtfsetText("");

  }

 }

 public static void main(String[] args) {

  new HH();

 }

}

//c++下的计算器源代码

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <iostream> //输入输出流

#define N 11 //表达式长度,以字符数组实现,有效位19个

//由于不会把数字与 *** 作符同时存入一个数组,所以有如下定义:

// -11 代表 (

// -12 代表 )

// -13 代表 +

// -14 代表 -

// -15 代表

// -16 代表 /

float a[N]={3,-13,-11,5,-15,4,-13,3,-14,6,-12};//表达式

int n=10; //表达式的实际长度,以全局变量形式

int p=0; //指向前括号,或表达式头部

int at=10; //指向后括号,或表达式尾部

int m=10; //扫描标志位

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//类定义

class calculate

{public:

void mov(int sign); //////运算后,或去括号后,表达式左移

void gover( ); //扫描函数扫扫描“()”,如果扫描到“()”就计算其中的值,

//没有扫到就直接进行计算表达式值

void jisuan(int &a,int &b); //主要的计算函数

};//类定义结束

//表达式为:3+(54+3-6)

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//move 函数

void calculate::mov(int sign)

{

//出现了(1+5)这样的情况,要变成(6),注:是原先)的后继元素

for (int j=0;sign+j<=n-2;j++)

a[sign+j]= a[sign+j+2]; //元素依次前移

n-=2; //表长减2

at-=2; //指向后括的标志随着)前移

}//move结束

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//jisuan函数

void calculate::jisuan(int &at,int &p)

{

for (int i=at;p!=i ;i--) //乘法,除法运算

{

if (a[i]==-15000000)//出现乘法

{

a[i-1]=a[i-1]a[i+1];

mov(i);

} //if over

if (a[i]==-16000000) //出现除法

{a[i-1]=a[i-1]/a[i+1];

mov(i);

}// if over

} //for over //乘法,除法运算结束

for (int j=at;p!=j ;j--) //加减运算

{

if (a[j]==-13000000) //出现加法

{

a[j-1]=a[j-1]+a[j+1];

mov(j);

}// if over

if (a[j]==-14000000) //出现除法

{

a[j-1]=a[j-1]-a[j+1];

mov(j);

}//if over

}//for over加减运算结束

if (p!=0)

{if (p+2==at) //出现(5)的情况,就去括号

{

a[p]=a[p+1];

for (int j=0;p+j<=n-3;j++) //前移两个单位

a[p+j+1]= a[p+j+3]; //向前付值

n-=2; //表长减2

p=0; //去掉括号后指明针回到头尾

at=n; //去掉括号后,尾指

} // if (p+2==at) 结束

} //if (p!=0) 结束

m=n+1; //给M补1

}//jisuan完

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//扫描函数

void calculate::gover( )

{ //m用来指示下标变化,每次发生移位后,都要把新的n值付给m,即第次//移位后,要从尾开重新扫描

for ( ; m>=0; m-- )

{

if (a[m]==-12000000 ) //出现“)”

{

at=m; //用at标记住“)”的下标

}

if (a[m]==-11000000) //出现“(”

{p=m; //用p标记住“(”的下标,连续出现了(),计算()内的表达式值

jisuan(at,p) ;

}//if 完

}//扫描()结束

//如果没有()则直接调用jisuan( )

//把两个指针放回到表达式的首尾,

jisuan(at,p);

}//gover结束

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int main() //主调函数

{calculate example; //创建一个对象

examplegover( ); //对象调用gover

printf("%f",a[0]);//计算完毕,输出结果

return 0;

}

//改进目标:第一,实现用户输入运算表达式

// 第二,实现对表达式的正确性进行扫描

//第三,用Mfc把用户界面设计出来

//

//存在的问题:

//第一,参数传递中有很多不理解的东西

//第二,由于第一个原因p,at迫于无奈做成了全局的变量,因为全局变量过多

//第三,结构化程序不够高,没有把面向对象的思想最大的发挥出来

//针对以上三点,下一步努力改进

======================

还有一个:

# include <windowsh>

long WINAPI CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hinst,HINSTANCE phinst,

PSTR cmdline,int cmdshow)

{

//the application's name

static CHAR Appname[] = TEXT("HexCalc");

//---------------------------------------

HWND hwnd;

MSG msg;

// window class create

WNDCLASS wndclass;

wndclassstyle = CS_HREDRAW | CS_VREDRAW;

wndclasslpfnWndProc = WndProc;

wndclasscbClsExtra = 0;

wndclasscbWndExtra = DLGWINDOWEXTRA;

wndclasshInstance = hinst;

wndclasshIcon = LoadIcon(NULL,IDI_APPLICATION);

wndclasshCursor = LoadCursor(NULL,IDC_ARROW);

wndclasshbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);

wndclasslpszMenuName = NULL;

wndclasslpszClassName = Appname;

//---------------------------------------

//create and show window

if(!RegisterClass(&wndclass))

{

MessageBox(NULL,TEXT("This program requires Windows NT!"),

Appname,MB_ICONHAND);

return 0;

}

hwnd = CreateDialog(hinst,Appname,0,NULL);

ShowWindow(hwnd,cmdshow);

UpdateWindow(hwnd);

//------------------------------------------------

//send message

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

//------------------------------------------------

return msgwParam;

}

void ShowNumber(HWND hwnd,UINT iNumber)

{

char szBuffer[20];

wsprintf(szBuffer,TEXT("%X"),iNumber);

SetDlgItemText(hwnd,VK_ESCAPE,szBuffer);

}

DWORD Calclt(UINT iFirstNum,int iOperation,UINT iNum)

{

switch(iOperation)

{

case '=':

return iNum;

case '+':

return iFirstNum + iNum;

case '-':

return iFirstNum - iNum;

case '':

return iFirstNum iNum;

case '&':

return iFirstNum & iNum;

case '|':

return iFirstNum | iNum;

case '^':

return iFirstNum ^ iNum;

case '<':

return iFirstNum << iNum;

case '>':

return iFirstNum >> iNum;

case '/':

return iNum iFirstNum / iNum : MAXDWORD;

case '%':

return iNum iFirstNum % iNum : MAXDWORD;

default:

return 0;

}

}

long WINAPI CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)

{

static BOOL bNewNumber = TRUE;

static int iOperation = '=';

static UINT iNumber,iFirstNum;

HWND hButton;

//message list or procces

switch(message)

{

case WM_KEYDOWN:

if(wParam != VK_LEFT)

break;

wParam = VK_BACK;

case WM_CHAR:

if((wParam = (WPARAM)CharUpper((char)wParam)) == VK_RETURN)

wParam = '=';

if(hButton = GetDlgItem(hwnd,wParam))

{

SendMessage(hButton,BM_SETSTATE,1,0);

Sleep(100);

SendMessage(hButton,BM_SETSTATE,0,0);

}

else

{

MessageBeep(0);

break;

}

case WM_COMMAND:

SetFocus(hwnd);

if(LOWORD(wParam) == VK_BACK)

ShowNumber(hwnd,iNumber /= 16);

else if(LOWORD(wParam) == VK_ESCAPE)

ShowNumber(hwnd,iNumber = 0);

else if(isxdigit(LOWORD(wParam)))

{

if(bNewNumber)

{

iFirstNum = iNumber;

iNumber = 0;

}

bNewNumber = FALSE;

if(iNumber <= MAXDWORD >> 4)

ShowNumber(hwnd,iNumber = 16 iNumber + wParam -

(isdigit(wParam) '0' : 'A' - 10));

else

MessageBeep(0);

}

else

{

if(!bNewNumber)

ShowNumber(hwnd,iNumber = Calclt(iFirstNum,iOperation,iNumber));

bNewNumber = TRUE;

iOperation = LOWORD(wParam);

}

return 0;

case WM_DESTROY:

PostQuitMessage(0);

return 0;

}

//-----------------------------------------

return DefWindowProc(hwnd,message,wParam,lParam);

}

这是一个windows的GUI程序,关键的问题是运行环境不知道是不是对的。

如果是visual C++里面的GUI程序,入口函数并不是main(),这个是windows框架帮你做掉了。

windows的GUI入口函数是WinMain()

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)

{

//创建模态对话框

/ 需要把整型转换成字符串类型 /

/ 没有父窗口 值为 NULL /

DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DLG), NULL, MainDlgProc);

return 0;

}

然后调试的方法也不要用printf。

switch (uMsg)

{

// 对话框初始化消息

case WM_INITDIALOG:

// 此时对话框还没有显示 但是对话框已经创建好了

MessageBox(hWnd, L"初始化", L"提示", MB_OK);

// 设置对话框标题 [如果对话框没有设置好 不能给对话框设置标题]

SetWindowText(hWnd,L"这是一个对话框程序");

break;

}

可以直接用MessageBox可以d出消息框。

纯C的很少,windows32

sdk和linux的gtk是为数不多的2个库。

现代基本没有用C开发gui的,C++是更好的选择,像qt

mfc比win32好用得多。

开发效率更高的是python,tkinter

wxwidget

pyqt都很方便

以上就是关于求大神用Java编写出这个程序,要有具体代码,万分感激,定采纳全部的内容,包括:求大神用Java编写出这个程序,要有具体代码,万分感激,定采纳、急求一个计算器的源程序,要求:完整输入数学表达式(数字加减乘除括号)按=显示结果.JAVA或C++的都可以、C语言这里哪出错了,对话框出不来,加printf调试也输出不了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9726715.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存