这里写自定义目录标题
1.已实现功能:
1.查询余额,转账,取款,存款,修改密码,贷款,结束进程。
2.管理员增加与删除账户。
3.多客户端同时登陆。
4.将数据存入文件。
5.服务器端显示所有账户信息。
6.以抛出异常的方式实现程序运行。
2.拓展功能:
1.贷款功能。
2.用户界面背景。
3.难点:
1.jtable在增加和删除账户后对管理员界面进行更新。
2.客户端进行页面跳转时需要对页面进行刷新。
3.在用户修改密码之后重新登录服务器。
4.客户端增加背景
Ps:
1.由于在服务器端实现多客户登录之时使用了static类型的内部类,导致程序服务器端的界面无法做到实时更新。
2.图片和文件都应该放在D盘里面。
首先启动服务器,服务器会读出d盘中Bank.txt(如果没有该文件,service_hw中的57行注释符号取消,则可以自动生成该文件,但是之后要再次将该行注释掉,以免重复生成文件)文件中的数据,然后存入数组中,转入jtable中。
点击增加按钮,输入要增加的账户,点击确认增加按钮。
可以看到管理员界面已经完成了该账户的增加。
点击删除按钮,进入删除界面,输入要删除的账户密码和余额,就可以直接删除账户。
多客户端实现。
启动客户端进入客户界面(客户界面需要的图片的路径是D:\kkk.jpg),点击登录若密码正确则开始登录,若想退出则直接点击关闭。
登陆之后选择您要进行的活动。
查询账户余额。点击返回则返回第二个界面
取款之后显示。
存款之后的显示
转账之后的界面
修改密码之后需要重新登陆
贷款超过50000会被拒绝。
贷款界面。
最后点击结束按钮。会将所有的数据写入文件之中。
public class client_gui {
//与服务器交互参数
private PrintWriter out;
private BufferedReader in;
//账户参数
client_card client;
//主界面参数0
private JFrame mainframe=new JFrame("北冥银行");
private JButton denglu=new JButton("登录");
private JButton guanbi=new JButton("关闭");
//第二界面参数
private JFrame secondframe=new JFrame("欢迎来到北冥银行");
private JTextField id=new JTextField(35);
private JPasswordField password=new JPasswordField(35);
private JButton yue=new JButton("余额");
private JButton qukuan=new JButton("取款");
private JButton cunkuan=new JButton("存款");
private JButton zhuanzhang=new JButton("转账");
private JButton xgmm=new JButton("修改密码");
private JButton frozen=new JButton("贷款");
private JButton end=new JButton("结束");
//余额界面参数1
private JFrame frame1=new JFrame("余额");
private JTextField frame1_id=new JTextField(35);
private JTextField frame1_password=new JTextField(35);
private JTextField frame1_balance=new JTextField(35);
private JButton back1=new JButton("返回");
//取款界面参数2
private JFrame frame2=new JFrame("取款");
private JTextField frame2_id=new JTextField(35);
private JTextField frame2_password=new JTextField(35);
private JTextField frame2_balance=new JTextField(35);
private JTextField frame2_withdraw=new JTextField(35);
private JButton frame2_withdrawb=new JButton("确定取款");
//存款界面3
private JFrame frame3=new JFrame("存款");
private JTextField frame3_id=new JTextField(35);
private JPasswordField frame3_password=new JPasswordField(35);
private JTextField frame3_balance=new JTextField(35);
private JTextField frame3_deposit=new JTextField(35);
private JButton frame3_depositb=new JButton("确定存款");
//转账界面参数4
private JFrame frame4=new JFrame("转账");
private JTextField frame4_id=new JTextField(35);
private JTextField frame4_idtransfer=new JTextField(35);
private JTextField frame4_idtransferm=new JTextField(35);
private JTextField frame4_password=new JTextField(35);
private JButton frame4_transferb=new JButton("确认转账");
//修改密码界面参数5
private JFrame frame5=new JFrame("修改密码");
private JTextField frame5_password1=new JTextField(35);
private JTextField frame5_password2=new JTextField(35);
private JTextField frame5_password3=new JTextField(35);
private JButton frame5_changeb=new JButton("确认修改密码");
//贷款界面参数7
private JFrame frame7=new JFrame("贷款");
private JTextField frame7_id1=new JTextField(35);
private JTextField frame7_balance=new JTextField(35);
private JTextField frame7_password3=new JTextField(35);
private JTextField frame7_loan=new JTextField(35);
private JButton frame7_loanb=new JButton("确认贷款");
@SuppressWarnings("resource")
public static void main(String[] args) {
try{
Socket socket=new Socket("127.0.0.1",8000);
System.out.println("客户端已经启动");
client_gui c=new client_gui();
c.thirdframe();
c.choice_frame();
c.mainframe();
c.in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
c.out = new PrintWriter(
new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
}
catch(IOException ex)
{
System.err.println(ex);
}
}
//登录界面
public void mainframe(){
mainframe.setLayout(new FlowLayout());
mainframe.setBounds(30,39,500,500);
denglu.addActionListener(new denglu());
guanbi.addActionListener(new guanbi());
//添加图像
ImageIcon icon_top=new ImageIcon("D:\\kkk.jpg");
JLabel ImagLabel=new JLabel(icon_top);
Dimension ImagLabelSize=new Dimension(500,200);
ImagLabel.setPreferredSize(ImagLabelSize);
mainframe.add(ImagLabel);
//设置登录界面输入框
JLabel idd=new JLabel("username");
JLabel password2=new JLabel("password");
//将所有的部件加入到mainframe上面
mainframe.add(idd);
mainframe.add(id);
mainframe.add(password2);
mainframe.add(password);
mainframe.add(denglu);
mainframe.add(guanbi);
mainframe.setVisible(true);
mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//当关闭按钮按下时程序终止
private class guanbi implements ActionListener{
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
}
//当登录按钮按下时将发送数据到服务端
private class denglu implements ActionListener{
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try {
String std1=id.getText();
String std2=password.getText();
out.println(0+"_"+std1+"_"+std2);
out.flush();
String filestd=null;
while((filestd=in.readLine()) != null){
System.out.println(filestd);
StringTokenizer st = new StringTokenizer(filestd, "_");
client=new client_card(st.nextToken()
,st.nextToken(),Double.parseDouble(st.nextToken()));
//if(std1==client.getCard_id()&&std2==client.getCard_password())
System.out.println(filestd);
mainframe.setVisible(false);
secondframe.setVisible(true);
secondframe.update(null);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
//选择界面
private void choice_frame(){
//JFrame secondframe=new JFrame("欢迎来到北冥银行");
secondframe.setLayout(new FlowLayout(300,200,30));
secondframe.setBounds(30,39,500,500);
//添加背景图片
ImageIcon background = new ImageIcon("D:\\kkk.jpg");
JLabel label = new JLabel(background);
label.setBounds(0, 0, background.getIconWidth(),
background.getIconHeight());
JPanel imagePanel = (JPanel) secondframe.getContentPane();
imagePanel.setOpaque(false);
secondframe.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
secondframe.setResizable(false);
//增加按钮
secondframe.add(yue);
yue.addActionListener(new yue());
secondframe.add(qukuan);
qukuan.addActionListener(new qukuan());
secondframe.add(cunkuan);
cunkuan.addActionListener(new cunkuan());
secondframe.add(zhuanzhang);
zhuanzhang.addActionListener(new zhuanzhang());
secondframe.add(xgmm);
xgmm.addActionListener(new xgmm());
secondframe.add(frozen);
frozen.addActionListener(new frozen());
secondframe.add(end);
end.addActionListener(new end());
secondframe.setVisible(false);
secondframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void thirdframe(){
//余额界面添加背景图片
ImageIcon background = new ImageIcon("D:\\kkk.jpg");
JLabel label = new JLabel(background);
label.setBounds(0, 0, background.getIconWidth(),
background.getIconHeight());
JPanel imagePanel = (JPanel) frame1.getContentPane();
imagePanel.setOpaque(false);
frame1.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
frame1.setResizable(false);
//余额界面参数1
frame1.setLayout(new FlowLayout(30,20,30));
frame1.setBounds(30,39,500,500);
frame1.add(frame1_id);
frame1.add(frame1_password);
frame1.add(frame1_balance);
frame1.add(back1);
back1.addActionListener(new back1());
frame1.setVisible(false);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//取款界面添加背景图片
ImageIcon background2 = new ImageIcon("D:\\kkk.jpg");
JLabel label2 = new JLabel(background);
label2.setBounds(0, 0, background.getIconWidth(),
background2.getIconHeight());
JPanel imagePane2 = (JPanel) frame2.getContentPane();
imagePane2.setOpaque(false);
frame2.getLayeredPane().add(label2, new Integer(Integer.MIN_VALUE));
frame2.setResizable(false);
//取款界面参数2
frame2.setLayout(new FlowLayout(30,20,30));
frame2.setBounds(30,39,500,500);
frame2.add(frame2_id);
frame2.add(frame2_password);
frame2.add(frame2_balance);
frame2.add(frame2_withdraw);
frame2.add(frame2_withdrawb);
frame2_withdrawb.addActionListener(new withdrawb());
frame2.setVisible(false);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//存款界面添加背景图片
ImageIcon background3 = new ImageIcon("D:\\kkk.jpg");
JLabel label3 = new JLabel(background);
label3.setBounds(0, 0, background.getIconWidth(),
background3.getIconHeight());
JPanel imagePane3 = (JPanel) frame3.getContentPane();
imagePane3.setOpaque(false);
frame3.getLayeredPane().add(label3, new Integer(Integer.MIN_VALUE));
frame3.setResizable(false);
//存款界面3
frame3.setLayout(new FlowLayout(30,20,30));
frame3.setBounds(30,39,500,500);
frame3.add(frame3_id);
frame3.add(frame3_password);
frame3.add(frame3_balance);
frame3.add(frame3_deposit);
frame3.add(frame3_depositb);
frame3_depositb.addActionListener(new frame3_depositb());
frame3.setVisible(false);
frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//转账界面添加背景图片
ImageIcon background4 = new ImageIcon("D:\\kkk.jpg");
JLabel label4 = new JLabel(background);
label4.setBounds(0, 0, background.getIconWidth(),
background4.getIconHeight());
JPanel imagePane4 = (JPanel) frame4.getContentPane();
imagePane4.setOpaque(false);
frame4.getLayeredPane().add(label4, new Integer(Integer.MIN_VALUE));
frame4.setResizable(false);
//转账界面参数4
frame4.setLayout(new FlowLayout(30,20,30));
frame4.setBounds(30,39,500,500);
frame4.add(frame4_id);
frame4.add(frame4_idtransfer);
frame4.add(frame4_password);
frame4.add(frame4_idtransferm);
frame4.add(frame4_transferb);
frame4_transferb.addActionListener(new frame4_transferb());
frame4.setVisible(false);
frame4.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//取款界面添加背景图片
ImageIcon background5 = new ImageIcon("D:\\kkk.jpg");
JLabel label5 = new JLabel(background);
label2.setBounds(0, 0, background.getIconWidth(),
background5.getIconHeight());
JPanel imagePane5 = (JPanel) frame5.getContentPane();
imagePane5.setOpaque(false);
frame5.getLayeredPane().add(label5, new Integer(Integer.MIN_VALUE));
frame5.setResizable(false);
//修改密码界面参数5
frame5.setLayout(new FlowLayout(30,20,30));
frame5.setBounds(30,39,500,500);
frame5.add(frame5_password1);
frame5.add(frame5_password2);
frame5.add(frame5_password3);
frame5.add(frame5_changeb);
frame5_changeb.addActionListener(new frame5_changeb());
frame5.setVisible(false);
frame5.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//贷款界面添加背景图片
ImageIcon background7 = new ImageIcon("D:\\kkk.jpg");
JLabel label7 = new JLabel(background);
label7.setBounds(0, 0, background.getIconWidth(),
background7.getIconHeight());
JPanel imagePane7 = (JPanel) frame7.getContentPane();
imagePane7.setOpaque(false);
frame5.getLayeredPane().add(label7, new Integer(Integer.MIN_VALUE));
frame5.setResizable(false);
//贷款界面参数7
frame7.setLayout(new FlowLayout(30,20,30));
frame7.setBounds(30,39,500,500);
frame7.add(frame7_id1);
frame7.add(frame7_balance);
frame7.add(frame7_password3);
frame7.add(frame7_loan);
frame7.add(frame7_loanb);
frame7_loanb.addActionListener(new frame7_loanb());
frame7.setVisible(false);
frame7.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//余额界面监听器
private class yue implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
frame1_id.setText("账户:"+client.getCard_id());
frame1_password.setText("密码:"+client.getCard_password());
frame1_balance.setText("余额:"+client.getCard_balance());
frame1.update(null);
secondframe.setVisible(false);
frame1.setVisible(true);
}
}
//看完余额返回secondframe界面
private class back1 implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
secondframe.setVisible(true);
frame1.setVisible(false);
}
}
//取款界面监听器
private class qukuan implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
frame2_id.setText("账户:"+client.getCard_id());
frame2_password.setText("密码:"+client.getCard_password());
frame2_balance.setText("余额:"+client.getCard_balance());
frame2_withdraw.setText("请输入您要取的款(不一定能取出来哦。。。。。)");
secondframe.setVisible(false);
frame2.update(null);
frame2.setVisible(true);
}
}
private class withdrawb implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
double balance=0;
balance=Double.valueOf(client.getCard_balance())-Double.valueOf(frame2_withdraw.getText());
client=new client_card(client.getCard_id(),client.getCard_password(),balance);
if(balance>0){
out.println(2+"_"+balance);
out.flush();
frame2.setVisible(false);
secondframe.setVisible(true);
}
else{
frame2_withdraw.setText("请重新输入");
}
}
}
//存款界面监听器
private class cunkuan implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
frame3_id.setText("账户:"+client.getCard_id());
frame3_password.setText("密码"+client.getCard_password());
frame3_balance.setText("余额:"+client.getCard_balance());
frame3_deposit.setText("请输入您要存的款");
secondframe.setVisible(false);
frame3.setVisible(true);
}
}
private class frame3_depositb implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
double balance=client.getCard_balance()+Double.valueOf(frame3_deposit.getText());
out.println(3+"_"+balance);
out.flush();
client=new client_card(client.getCard_id(),client.getCard_password(),balance);
frame3.setVisible(false);
frame3.update(null);
secondframe.setVisible(true);
}
}
//转账界面监听器4
private class zhuanzhang implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
frame4_id.setText("账户:"+client.getCard_id());
frame4_idtransfer.setText("请输入要转入的账户");
frame4_password.setText("请输入您的密码");
frame4_idtransferm.setText("请输入转账金额");
secondframe.setVisible(false);
frame4.update(null);
frame4.setVisible(true);
}
}
private class frame4_transferb implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println(client.getCard_password());
if(client.getCard_password().equalsIgnoreCase(frame4_password.getText())){
out.println(4+"_"+client.getCard_id()+"_"
+frame4_idtransfer.getText()+"_"+frame4_idtransferm.getText());
out.flush();
}
else{
frame4_idtransfer.setText("请重新输入");
}
boolean transfer=false;
try {
if(in.readLine().equalsIgnoreCase("44444"))
transfer=true;
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(transfer){
frame4.setVisible(false);
secondframe.setVisible(true);
}
else{
frame4_idtransfer.setText("请重新输入");
}
}
}
//修改密码5监听器
private class xgmm implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
frame5_password1.setText("请输入本账户当前密码");
frame5_password2.setText("请输入本账户修改密码");
frame5_password3.setText("请再次输入密码");
secondframe.setVisible(false);
frame5.update(null);
frame5.setVisible(true);
}
}
private class frame5_changeb implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(client.getCard_password().equalsIgnoreCase(frame5_password1.getText())
&&frame5_password2.getText().equalsIgnoreCase(frame5_password3.getText())){
out.println(5+"_"+client.getCard_id()+"_"+"_"+frame5_password2.getText());
out.flush();
}
else{
frame5_password3.setText("两次输入不一致");
}
try {
if(in.readLine().equalsIgnoreCase("55555")){
frame5.setVisible(false);
mainframe.setVisible(true);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
private class end implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
out.println(6+"_");
out.flush();
System.exit(0);
}
}
//贷款界面监听器7
private class frozen implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
secondframe.setVisible(false);
frame7_id1.setText("请输入您的账户");
frame7_balance.setText("请输入您的余额");
frame7_password3.setText("请输入您的密码");
frame7_loan.setText("请输入您的贷款金额");
frame7.update(null);
frame7.setVisible(true);
}
}
private class frame7_loanb implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if((Double.valueOf(frame7_loan.getText()))<50000){
frame7.setVisible(false);
secondframe.setVisible(true);
out.println(7+"_"+client.getCard_id()+"_"+frame7_loan.getText());
out.flush();
}
else{
frame7_loan.setText("对不起您的信用等级不足以贷款"+frame7_loan.getText());
}
}
}
}