用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

云代码会员    -  云代码空间

——

java程序解释

2015-01-12|3189阅||

摘要:  例4-2 UsePhoneCard.java package ch4; public class UsePhoneCard {     public static void main(String args[]) {    

 

4-2 UsePhoneCard.java

package ch4;

public class UsePhoneCard {

    public static void main(String args[]) {

        PhoneCard myCard=new PhoneCard(0000,0526,50.0,"200");

        System.out.println(myCard.toString());

    }

}

class PhoneCard{

    long cardNumber;//定义域

    private int pwd;

    double balance;

    String connectNumber;

    boolean connected;

   

    PhoneCard(long cn,int p,double b,String ctn){//构造函数,完成初始化工作

        cardNumber=cn;

        pwd=p;

        if(balance>0)

            balance=b;

        else

            System.exit(0);

        connectNumber=ctn;

        connected=false;         

    }

   

    boolean performConnection(long cn,int p){//实现接入电话的操作

        if(cn==cardNumber && p==pwd){//若用户所拨的卡号和密码与电话卡内保存的卡号和密码一致,则电话接通

            connected=true;

            return true;

        }

        else{

            connected=false;

            return false;

        }

    }

   

    double getBalance(){ //获得余额

        if(connected)

            return balance;

        else

            return -1;

    }

   

    void performDial(){

        if(connected)//先检查电话是否接通,接通责扣除一次电话的费用0.5

            balance-=0.5;

    }

   

    public String toString(){//以字符串的形式显示出来

        String s="电话卡接入号码:"+cardNumber+"电话卡卡号:"+cardNumber

                +"电话卡密码:"+pwd+"剩余金额"+balance;

        if(connected)

            return(s+"\n电话已接通!");

        else

            return(s+"\n电话未接通!");

    }

   

}

注:main函数通过先创建PhoneCard的一个对象myCard为之并赋值,然后调用myCardtoString方法,把myCard中的各个域数据组合成一段信息在屏幕上输出,从而实现测试功能。

4-3 TestField.java

package ch4;

public class TestField {//测试类

    public static void main(String[] args) {

        MyDate md=new MyDate(2010,6,12);//创建日期对象,给雇用年月赋值

        Employee emp=new Employee("欧阳",21,6000,md);//创建雇员对象并为之赋值

        emp.print();//emp对象引用print方法

    }

}

class Employee{ //Employee类的域定义

    String name;

    int age;

    float salary;

    MyDate hiredate;//用户自定义的域作为域的类型

   

    Employee(String n,int a,float s,MyDate h){//构造函数

        name=n;

        if(a>=18 && a<60)//构造函数中的合法性检查,年龄限制

            age=a;

        else

        {

            System.out.println("年龄超过规定");

            System.exit(0);//结束当前程序的运行

        }

        salary=s;

        hiredate=h;

    }

   

    void print(){

        String s_hiredate;//定义变量s_hiredate,用于保存数据

        s_hiredate=hiredate.year+""+hiredate.month+""+hiredate.day+"";

        System.out.println("姓名:"+name+"年龄:"+"工资:"+salary+"雇用年月:");

    }

}

class MyDate{

    int year,month,day;

    MyDate(int y,int m,int d){

        year=y;

        month=m;

        day=d;

    }

}

4-5 TestStatic.java

package ch4;

public class TestStatic {

    public static void main(String[] args) {

        PhoneCard200 my200_1=new PhoneCard200();//创建对象

        PhoneCard200 my200_2=new PhoneCard200(); 

    }

}

class PhoneCard200{  //静态域

    static long nextCardNumber;

    static String connectNumber="200";

    static double additoryFee;

    long cardNumber;

    int password;

    boolean connected;

    double balance;

   

    static{//静态初始化器

    nextCardNumber=2012022801;

    }

    PhoneCard200(){//构造函数,使卡号从2012022801开始自动增1

        cardNumber=nextCardNumber++;

       

    }

}

4-7 TestAbstract.java

package ch4;

public class TestAbstract {

    public static void main(String[] args) {

    }

}

abstract class PhoneCard{//抽象类

    double balance;

    abstract void performDial();//定义抽象方法performDial,为其子类规定了该方法的标准样式

   

    double TimeLeft(){//定义电话卡中的余额还可以拨打多少次电话的方法TimeLeft

        double current=balance;//保留当前的余款

        int times=0;

        do{//反复拨打电话直至余额小于0

            performDial();

            times++;

        }while(balance>=0);

        balance=current;//恢复余款

        return times-1;//返回可以拨打电话的次数

    }

}

class PhoneCard200 extends PhoneCard{//继承自PhoneCard

    static long nextCardNumber;

    static final String connectNumber="200";

    static double additoryFee;

    long cardNumber;

    int password;

    boolean connected;

   

    static{

        nextCardNumber=2012022801;

        additoryFee=0.1;//在静态初始化器中将附加费设置为0.1

    }

    PhoneCard200(double ib){//构造函数

        cardNumber=nextCardNumber++;

        balance=ib;//指定新电话卡余额

    }

    void performDial(){//重新定义父类中的抽象方法performDial()

        balance-=0.5+additoryFee;//根据200卡的特点扣除0.5元的通话费用和附加费

    }

}

class IC_Card extends PhoneCard{//PhoneCard的子类IC_Card

    IC_Card(double ib){//构造函数指定新IC卡的金额

        balance=ib;

    }

    void performDial(){//重新定义父类中的抽象方法

        balance-=0.9;//每次通话从balance中扣除0.9元的费用

    }

}

注:抽象方法可以隐藏具体的细节信息,使调用该方法的程序不必过分关注类及其子类内部的具体情况。由于所有的子类使用的都是相同的方法头,而方法头实际上包含了调用该方法的全部信息。

5-2 TestHiddenField.java

package ch5;

public class TestHiddenField {

    public static void main(String[] args) {

        D200_Card my200=new D200_Card();//创建D200_Card类的对象my200,这个对象有两个balance变量,一个继承自父类,一个由D200_Card重新定义

        my200.balance=50.0;//my200对象的balance变量赋值

        System.out.println("父类被隐藏的金额为:"+my200.getBalance());//输出my200对象的getBalance方法的返回值,返回父类的余额

        if(my200.performDial())//这里的performDial方法是子类的方法

            System.out.println("子类的剩余金额为:"+my200.balance);//输出的是拨打电话之后my200对象的balance变量的数值

    }

}

abstract class PhoneCard{//抽象类

    double balance;

    abstract boolean performDial();//定义抽象方法

    double getBalance(){//父类定义getBalance方法,返回余额

        return balance;

    }

}

abstract class Number_PhoneCard extends PhoneCard{//子类也是抽象类

    long cardNumber;

    int password;

    String connectNumber;

    boolean connected;

   

    boolean performConnection(long cn,int pw){//构造函数

        if(cn==cardNumber && pw==password){//若用户所拨的卡号和密码与电话卡内保存的卡号和密码一致,则电话接通

            connected=true;

            return true;

        }

        else

            return false;

    }

}

class D200_Card extends Number_PhoneCard{

    double additoryFee;

    double balance;//隐藏了父类了balance,子类重新定义了balance

   

    boolean performDial(){

        if(balance>(0.5+additoryFee)){//检查余额是否大于0.5加上附加费,若是则余额减少

            balance-=(0.5+additoryFee);

            return true;

        }

        else

            return false;

        }

}

注:隐藏是指子类拥有了两个相同名字的变量,一个继承自父类,另一个由自己定义;当子类执行继承自父类的操作时,处理的是继承自父类的变量,而当子类执行它自己定义的方法时,所操作的就是它自己定义的变量,而把继承自父类的变量隐藏起来。

5-3 TestOverLoad.java

package ch5;

public class TestOverLoad {

    public static void main(String args[]) {

        D200_Card my200=new D200_Card();//创建D200_Card类的对象my200,这个对象有两个balance变量,一个继承自父类,一个由D200_Card重新定义

        my200.balance=50.0;//my200对象的balance变量赋值

        System.out.println("父类自己的金额为:"+my200.getBalance());//输出my200对象的getBalance方法的返回值,返回子类自己的余额

        if(my200.performDial())//这里的performDial方法是子类的方法

            System.out.println("子类的剩余金额为:"+my200.balance);//输出的是拨打电话之后my200对象的balance变量的数值

    }

}

abstract class PhoneCard{//抽象类

    double balance;

    abstract boolean performDial();//定义抽象方法

    double getBalance(){//父类定义getBalance方法,返回余额

        return balance;

    }

}

abstract class Number_PhoneCard extends PhoneCard{//子类也是抽象类

    long cardNumber;

    int password;

    String connectNumber;

    boolean connected;

   

    boolean performConnection(long cn,int pw){//构造函数

        if(cn==cardNumber && pw==password){//若用户所拨的卡号和密码与电话卡内保存的卡号和密码一致,则电话接通

            connected=true;

            return true;

        }

        else

            return false;

    }

}

class D200_Card extends Number_PhoneCard{

    double additoryFee;

    double balance;//隐藏了父类的balance,子类重新定义了balance

   

    boolean performDial(){

        if(balance>(0.5+additoryFee)){//检查余额是否大于0.5加上附加费,若是则余额减少

            balance-=(0.5+additoryFee);

            return true;

        }

        else

            return false;

        }

   

    double getBalance(){//覆盖了父类的balance

        return balance;

    }

}

注:子类方法对父类同名方法的覆盖将清除父类方法占用的内存,从而使父类方法在子类对象中不复存在。

5-7 TestPolymorphism1.java

package ch5;

public class TestPolymorphism1 {

    public static void main(String[] args) {

        Employee emp1=new Employee("笑笑",22,3000);//创建职工对象,并且通过调用对象方法emp1.getInfo()显示了该职工的信息

        System.out.println(emp1.getInfo());

        Employee emp2=new Manager("欧阳",28,8000,2000);//创建一个管理者对象,并将对象的引用赋值给Employee类变量emp2

        System.out.println(emp2.getInfo());    //通过emp2.getInfo()方法的调用,返回职工的信息  

    }

}

class Employee{

    String name;

    int age;

    float salary;

    Employee(){ }//无参数的构造函数

    Employee(String name,int age,float salary){//带参数的构造函数,可以建立一个具体的职工对象

        this.name=name;

        this.age=age;

        this.salary=salary;

    }

   

    String getInfo(){//获取职工信息的方法

        return "职工姓名:"+name+"  年龄:"+age+"  工资:"+salary;

    }  

}

class Manager extends Employee{

    float allowance;//津贴

    Manager(String name,int age,float salary,float allowance){//构造函数

        this.name=name;

        this.age=age;

        this.salary=salary;

        this.allowance=allowance;      

    }

}

5-8 TestPolymorphism2.java

package ch5;

public class TestPolymorphism2 {

    public static void main(String[] args) {

        Employee emp1=new Employee("笑笑",22,3000);//创建职工对象,并且通过调用对象方法emp1.getInfo()显示了该职工的信息

        System.out.println(emp1.getInfo());

        Employee emp2=new Manager("欧阳",28,8000,2000);//创建一个管理者对象,并将对象的引用赋值给Employee类变量emp2

        System.out.println(emp2.getInfo());    //通过emp2.getInfo()方法的调用,返回职工的信息  

    }

}

class Employee{

    String name;

    int age;

    float salary;

    Employee(){ }//无参数的构造函数

    Employee(String name,int age,float salary){//带参数的构造函数,可以建立一个具体的职工对象

        this.name=name;

        this.age=age;

        this.salary=salary;

    }

   

    String getInfo(){//获取职工信息的方法

        return "职工姓名:"+name+"  年龄:"+age+"  工资:"+salary;

    }  

}

class Manager extends Employee{

    float allowance;//津贴

    Manager(String name,int age,float salary,float allowance){//构造函数

        this.name=name;

        this.age=age;

        this.salary=salary;

        this.allowance=allowance;      

    }

   

    String getInfo(){//子类重新定义自已的getInfo()方法,并覆盖了父类的同名方法

        return "职工姓名:"+name+"  年龄:"+age+"  工资:"+salary+  "津贴"+allowance;

    }  

}

5-9 TestPolymorphism3.java

package ch5;

public class TestPolymorphism3 {

    public static void main(String[] args) {

        Employee emp1=new Employee("笑笑",22,3000);//创建职工对象,并且通过调用对象方法emp1.getInfo()显示了该职工的信息

        System.out.println(emp1.name);

        Employee emp2=new Manager("欧阳",28,8000,2000);//创建一个管理者对象,并将对象的引用赋值给Employee类变量emp2

        if(emp2 instanceof Manager){//判断emp2是否是Manager类型

            Manager mgr=(Manager)emp2;//强制类型转化,把emp2转化为Manager类型并赋值给mgr

            System.out.println(mgr.name);  

            System.out.println(mgr.allowance);

            System.out.println(mgr.getTotal());//调用mgr对象的getTotal()方法,得到经理的总薪水  

        }

    }

}

class Employee{

    String name;

    int age;

    float salary;

    Employee(){ }//无参数的构造函数

    Employee(String name,int age,float salary){//带参数的构造函数,可以建立一个具体的职工对象

        this.name=name;

        this.age=age;

        this.salary=salary;

    }

   

    String getInfo(){//获取职工信息的方法

        return "职工姓名:"+name+"  年龄:"+age+"  工资:"+salary;

    }  

}

class Manager extends Employee{

    float allowance;//津贴

    Manager(String name,int age,float salary,float allowance){//构造函数

        this.name=name;

        this.age=age;

        this.salary=salary;

        this.allowance=allowance;      

    }

   

    String getInfo(){//子类重新定义自已的getInfo()方法,并覆盖了父类的同名方法

        return "职工姓名:"+name+"  年龄:"+age+"  工资:"+salary+  "津贴"+allowance;

    }

   

    float getTotal(){//获得总薪水

        return salary+allowance;

    }

}

 

                                                                    

7-6 BtnLabelAction.java

package ch6;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

public  class BtnLabelAction extends Applet implements ActionListener{//定义Applet类的子类的同时也声明该类实现ActionListener接口,是ActionEvent事件的监听者

    Label prompt;//定义标签

    Button btn;//定义按钮

   

    public void init(){

        prompt=new Label("你好");//创建标签对象

        btn=new Button("操作");//创建按钮对象

        add(prompt);//加入到Applet程序的图像界面中去

        add(btn);

        btn.addActionListener(this);//将按钮对象btn注册给这个监听者,这样它将监听并处理在btn上引发的动作事件     

    }

   

    public void actionPerformed(ActionEvent e){//actionPerformed方法来处理动作事件

        if(e.getSource()==btn)//判断动作事件是否由按钮btn引发的,是则修改prompt对象的文本标签,

            if(prompt.getText()=="你好")//把你好变为再见

                prompt.setText("再见");

            else

                prompt.setText("你好");//把再见变为你好

    }

}

7-7  TextComponentEvent.java

package ch6;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

public class TextComponentEvent extends Applet implements TextListener,ActionListener{//实现两个接口

    TextField tf;//定义单行文本框

    TextArea ta;//定义多行文本框

   

    public void init(){

        tf=new TextField(45);//创建TextField对象tf

        ta=new TextArea(5,45);//创建TextArea对象ta

        add(tf);//tf加入到图形界面的窗框中

        add(ta);

        tf.addActionListener(this);

        tf.addTextListener(this);

    }

   

    public void textValueChanged(TextEvent e) {//textValueChanged()方法用来处理文本事件

        if(e.getSource()==tf)//当用户在tf中输入或修改文本时,在ta文本区域中可以得到一个同步的拷贝

            ta.setText(((TextField)e.getSource()).getText());    //强制类型转换 

    }

   

    public void actionPerformed(ActionEvent e) {//textValueChanged()用来处理动作事件

        if(e.getSource()==tf)//当用户在tf中输入回车时将ta中的文本清空

            ta.setText("");

       

    }  

}

7-16 TestCanvas.java

package ch7;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

public class TestCanvas extends Applet{

    CanvasDraw cd;

    public void init(){

        cd=new CanvasDraw(new Dimension(200,180),this);//创建一个CanvasDraw对象

        cd.setBackground(Color.pink);//将画布对象的背景色设置为粉红色

        add(cd);//把画布对象放在applet窗口中

        cd.requestFocus();//使画布获得焦点

    }

}

class CanvasDraw extends Canvas{//CanvasDraw类用于测试画布类及对鼠标和键盘的事件响应,canvas对象及其子类对象是基本组件而不是容器

    Applet m_Parent;

    boolean md_Flag=false;//md_Flag表示用户是否在用鼠标画直线的标志

    int startX=0,startY=0,currentX=0,currentY=0;//startX,startY表示所画直线的起点坐标,currentX,currentY表示是当前的鼠标坐标

    StringBuffer sb=new StringBuffer();//StringBuffer对象sb用来保存用户击键所输入的字符

    public CanvasDraw(Dimension d, TestCanvas p) {//构造函数

        m_Parent=p;

        setSize(d);

        setBackground(Color.gray);//设置背景色为灰色

        addKeyListener(new KeyEventProcess());

        addMouseListener(new MouseAdpt());

        addMouseMotionListener(new MouseMotionAdpt());

        }

    void setStart(int x,int y){

        currentX=x;

        currentY=y;

    }

    void setCurrent(int x,int y){

        currentX=x;

        currentY=y;

    }

    void setMouseDragged(boolean b){

        md_Flag=b;

    }

    void showMeg(String s){

        m_Parent.showStatus(s);

    }

    void clearAll(){

        startX=0;

        startY=0;

        currentX=0;

        currentY=0;

        repaint();

    }

    public void paint(Graphics g){

        g.drawString("("+currentX+","+currentY+")",+10,20);

        if(md_Flag)

            g.drawLine(startX, startY, currentX, currentY);

    }

    class KeyEventProcess implements KeyListener{//内部类,用于对键盘事件做出响应,实现接口

        public void keyTyped(KeyEvent e){

            char ch=e.getKeyChar();

            if(ch=='c'){//当敲c键时起到清空作用

                sb.setLength(0);//清空sb

                clearAll();//清空画布

                }

            else

                sb.append(ch);

            showMeg("击键"+sb.toString());

            }

        public void keyPressed(KeyEvent e) {}//重载方法,方法体为空

        public void keyReleased(KeyEvent e) {}

    }

   

    class MouseAdpt extends MouseAdapter{//内部类继承裁剪类 MouseAdapter

        public void mousePressed(MouseEvent e){//按下鼠标键

            setStart(e.getX(),e.getY());//XY为坐标开始画线

            showMeg("你开始画线");

        }

        public void mouseReleased(MouseEvent e){//鼠标键抬起

            if((startX!=currentX)|(startY!=currentY))//如果起点坐标和当前坐标不同,则说明拖动了鼠标,画出了直线

                showMeg("你画出了一条直线");

        }

        public void mouseEntered(MouseEvent e){//移动鼠标进入画布

            showMeg("鼠标进入画布");

        }

        public void mouseExited(MouseEvent e){//鼠标移出画布

            showMeg("鼠标移出画布");

        }

    }

   

    class MouseMotionAdpt extends MouseMotionAdapter{//内部类

        public void mouseMoved(MouseEvent e){//移动鼠标

            setCurrent(e.getX(),e.getY());

            setMouseDragged(false);

            repaint(10,0,60,30);//鼠标移动时只刷新画布左上角区域

        }

        public void mouseDragged(MouseEvent e){//拖动鼠标

            setCurrent(e.getX(),e.getY());

            setMouseDragged(true);

            repaint();

        }

    }

}

7-21 TestFrame.java

package ch7;

import java.awt.*;

import java.awt.event.*;

public class TestFrame {

    public static void main(String[] args) {

        new MyFrame();//创建frame窗口,主程序界面

    }

}

class MyFrame extends Frame{

    Button btn;

    MyFrame(){

        btn=new Button("关闭");

        setLayout(new FlowLayout());//设定标签、文本框等对象在窗框中位置安排的布局策略

        add(btn);//把按钮对象加入到Applet图形界面中

        btn.addActionListener(new HandleAct(this));

        addWindowListener(new HandleWin());

        setSize(300,200);//设置Frame大小

        setTitle("我的窗口");//设置Frame标题

        setVisible(true);//设置Frame可见

        }

    class HandleAct implements ActionListener{//用窗口中的按钮关闭窗口

        Frame my_frame;

        HandleAct(Frame f){//构造函数

            my_frame=f;

        }

        public void actionPerformed(ActionEvent e){

            my_frame.dispose();

            System.exit(0);

        }

    }

    class HandleWin extends WindowAdapter{//用标题栏上的关闭按钮关闭窗口

        public void windowClosing(WindowEvent e){//关闭窗口事件处理

            (e.getWindow()).dispose();

            System.exit(0);

        }

    }

}

8-2 TestQueueException.java

package ch8;

public class TestQueueException {

    public static void main(String[] args) {

        Queue queue=new Queue();//新建一个queue对象

        System.out.println("-----下面是入队操作-----");

        for(int i=1;i<=3;i++){//往队列加入三个数据,用于测试出队操作

            queue.enQueue(i);//调用queueenQueue方法,循环执行三次

            System.out.println(queue.visitAllNode());

        }

        System.out.println("-----下面是出队操作-----");

        try{

            while(true){//死循环

                System.out.println(queue.deQueue()+"出队");//当无限制出队时才会触发异常

                System.out.println("队列中还有:"+queue.visitAllNode());

            }

        }

        catch(EmptyQueueException e){//catch后 要指定能处理的异常类

            System.out.println("-----异常处理-----");

            System.out.println(e.getMessage());//取异常对象信息

            System.out.println(e.toString());//调取自定义异常的方法,输出异常详细信息         

        }

        System.out.println("-----异常处理之后的后续代码被执行-----");

    }

}

class EmptyQueueException extends Exception{//用户自定义的异常类

    Queue qq;

    public EmptyQueueException(Queue q){

        super("队列已空!");//调用父类构造函数,为异常对象设置信息

        qq=q;

    }

   

    public String toString(){//重载父类的方法,给出详细的错误信息

        return("队列对象"+qq.toString()+"执行出队操作时引发自定义异常");

    }

}

class Queue extends LinkList{//队列类是链表类的子类

    boolean isEmpty(){//判断队列是否为空

        if(m_FirstNode==null)

            return true;

        else

            return false;    

    }

    void enQueue(int newdata){//进队操作,在队列尾部加入一个数据

        Node next=m_FirstNode;

        if(next==null)

            m_FirstNode=new Node(newdata);//新建一个结点

        else{

            while(next.getNext()!=null)

                next=next.getNext();

            next.setNext(new Node(newdata));

        }

    }

   

    int deQueue() throws EmptyQueueException{//减队操作,若队列不空,则从队列头部取出一个数据

        int data;

        if(isEmpty())//出队操作时遇到队列已空

            throw(new EmptyQueueException(this));//如果队列为空,抛出异常

        else{

            data=m_FirstNode.getData();//正常出队操作

            m_FirstNode=m_FirstNode.getNext();

            return data;

        }

    }  

}

   

class Node{

    private int m_Data;//结点中保存的数据

    private Node m_Next;//结点中的指针属性,指向下一个Node对象

    Node(int data){//构造函数

        m_Data=data;

        m_Next=null;

    }

   

    int getData(){//获得结点中数据的方法

        return m_Data;

    }

   

    void setNext(Node next){//修改结点中的指针

        m_Next=next;

    }

    Node getNext(){//获得结点中的指针指向的对象引用

        return m_Next;

    }  

}

class LinkList{//定义链表类

    Node m_FirstNode;//链表中的第一个结点

    LinkList(){//构造函数1;建立空链表

        m_FirstNode=null;

    }

    String visitAllNode(){//遍历链表的每个结点,将 所有数据串成一个字符串

        Node next=m_FirstNode;//从第一个结点开始

        String s="";

        while(next!=null){//直到最后一个结点

            s=s+next.getData()+";";

            next=next.getNext();//使next指向下一个结点

        }

        return s; 

    }

}

8-8  MyFileIo.java

package ch8;

import java.io.*;

public class MyFileIo {//将用户键盘输入的字符保存到磁盘文件,并回显在屏幕上

    public static void main(String[] args) {

        char ch;

        int chi;

        File myPath=new File("subdir");//创建File对象代表当前目录下的subdir文件

        if(!myPath.exists())//如果此目录不存在,则创建之

            myPath.mkdir();

        File myFile=new File(myPath,"crt.txt");//创建指定目录下指定名文件

        try{

            FileOutputStream fout=new FileOutputStream(myFile);//创建FileOutputStream文件输出字节流对象

            System.out.println("请输入一个字符串并以#结尾");

            while((ch=(char)System.in.read())!='#')//当从键盘缓冲区读入的数据不是#时就写入

                fout.write(ch);//

            fout.close();//关闭文件

            System.out.println("下面是从刚写入的文件中读出的数据");

            FileInputStream fin=new FileInputStream(myFile);//利用文件名字符串创建从该文件读入数据的输入流

            while((chi=fin.read())!=-1)

                System.out.println((char)chi);

            fin.close();

        }

        catch(FileNotFoundException e){//抛出异常FileNotFoundException

            System.err.println(e);

        }

        catch(IOException e){//凡输入输出操作,都可能引发异常,必须使用trycatch

            System.err.println(e);

        }

    }

}

9-3

package ch9;

import java.awt.*;

import java.awt.event.*;

import java.sql.*;

public class AccEmp3 {

    public static void main(String[] args) {

        new Emp();

    }

}

class Emp extends Frame{

    Panel p1,p2,p3;

    Label e1,e2,e3,e4,e5,e6,msg;

    TextField text1,text2,text3,text4,text5,text6;

    CheckboxGroup sex;

    Checkbox m,w;//分别代表""""

    Button b1;

    Connection cn;

    PreparedStatement ps;

    String ssql,ssex;

    Emp(){

        try{

            DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());

            cn=DriverManager.getConnection("jdbc:odbc:employee");

            ssql="INSERT INTO emp VALUES(?,?,?,?,?,?)";

            ps=cn.prepareStatement(ssql);

        }catch(SQLException el){

            msg.setText("数据库连接有误!");

        };

        e1=new Label("职工号");

        e2=new Label("姓名");

        e3=new Label("性别");

        e4=new Label("出生年月");

        e5=new Label("工资");

        e6=new Label("部门号");

        msg=new Label("             ");

        text1=new TextField(10);

        text2=new TextField(10);

        text3=new TextField(10);

        text4=new TextField(10);

        text5=new TextField(10);

        text6=new TextField(10);

        sex=new CheckboxGroup();

        m=new Checkbox("",true,sex);

        w=new Checkbox("",false,sex);

        b1=new Button("插入职工记录");

        p1=new Panel();

        p2=new Panel();

        p3=new Panel();

        p1.add(e1);p1.add(e2);p1.add(e3);p1.add(text1);p1.add(text2);p1.add(m);p1.add(w);

        p2.add(e4);p2.add(e5);p2.add(e6);p2.add(text4);p2.add(text5);p2.add(text6);

        p3.add(msg);p3.add(b1);

        setLayout(new FlowLayout());

        add(p1);add(p2);add(p3);

        b1.addActionListener(new B1());

        addWindowListener(new WinClose());

        setSize(500,200);

        setTitle("职工信息维护");

        setVisible(true);    

    }

   

    class B1 implements ActionListener{//插入职工记录按钮

        public void actionPerformed(ActionEvent e) {

            try{

                ps.setString(1,text1.getText());//SQL语句中参数赋值

                ps.setString(2,text2.getText());

                if(m.getState())

                    ssex="";

                else

                    ssex="";

                ps.setString(3, ssex);

                ps.setString(4, text4.getText());

                ps.setInt(5, Integer.parseInt(text5.getText()));

                ps.setString(6, text6.getText());

                ps.executeUpdate();//执行INSERT语句

                msg.setText("记录插入成功");

                text2.setText("");//清空各输入框

                text4.setText("");

                text5.setText("");

                text6.setText("");

                text1.setText("");

                text1.requestFocus();    //焦点移到第一个输入框         

            }catch(Exception e2){

                msg.setText("输入数据有误!");

                text1.requestFocus();

            }          

        }      

    }

   

    class WinClose extends WindowAdapter{//关闭窗口

        public void windowClosing(WindowEvent e){//关闭窗口事件处理

            try{

                cn.commit();

                cn.close();

            }catch(SQLException e3){};

            (e.getWindow()).dispose();

            System.exit(0);

        }

    }

   

}

顶 0踩 0收藏
文章评论
    发表评论

    个人资料

    • 昵称: 云代码会员
    • 等级: 初级程序员
    • 积分: 18
    • 代码: 5 个
    • 文章: 5 篇
    • 随想: 1 条
    • 访问: 10 次
    • 关注

    人气代码

    标签

    最新提问

    站长推荐