JAVA買票小程序的實現(xiàn)

目的:對線程知識進行一定的熟練
技術(shù):(1)線程的初步了解
(2)簡單的回調(diào)
(3)靜態(tài)的初步運用
(4)Scanner方法的簡單使用
具體代碼:
這個是對于顧客的基本屬性創(chuàng)建的一個類,主要起到簡潔性和可移植性,這里的封裝性不行,可以用privite對這個類進行封裝,用getter和putter方法實現(xiàn)讀寫。

package soid;

public class custemer {
    public String name;
    public int number;
    public custemer(String name, int number) {
        this.name = name;
        this.number = number;
    }
    @Override//打印方法,讓這個類能夠打印出來
    public String toString() {
        return "custemer{" +
                "name='" + name + '\'' +
                ", number=" + number +
                '}';
    }
}
package soid;

public class Myclass{
    public static void main(String[] args){
       soldcenter lead=new soldcenter();//一個對象
    }
}

這里小編設(shè)置的運行中心,對程序的進程進行設(shè)置。

package soid;

import java.util.ArrayList;

public class soldcenter implements soldsystem.callback {
    public static ArrayList<custemer> custemers=new ArrayList<>();
    //一個靜態(tài)數(shù)組,這里多余了,一個普通的變量也行的
    public soldcenter(){//構(gòu)造方法,創(chuàng)建對象時,運行
        soldsystem.fuzhi();
        soldsystem start1=new soldsystem();
        start1.setName("南站口售票點");//子線程名稱設(shè)置
        start1.temp = this ;//回調(diào)的實現(xiàn)
        start1.start();
        soldsystem start2 = new soldsystem();
        start2.setName("北站口售票點");
        start2.temp = this;
        start2.start();
    }
    @Override
    public void method(String variable1, int variable2) {//實現(xiàn)這個構(gòu)造方法
        custemer custemp=new custemer(variable1,variable2);
        System.out.println(custemp);
        custemers.add(custemp);
    }
}
package soid;

import java.util.Scanner;

public class soldsystem extends Thread{
    public static String object="wan";//同一把鎖
    public static int sun=4;//一個靜態(tài)變量
    public static int[] a=new int[4];//定義一個靜態(tài)數(shù)組
    callback temp;
    Scanner read = new Scanner(System.in);
    public static void fuzhi(){//一個靜態(tài)方法,給我們的數(shù)組賦值
        for(int i=0;i<4;i++){//用1來表示沒有售出
            a[i]=1;
        }
    }
    @Override
    public void run() {
        while (sun > 0) {//一個死循環(huán)讓子線程不是運行多次
            synchronized (object) {//每個對象都有鎖,嗯,這個在Object里面實現(xiàn)了的,確保為同一把鎖
                for (int i = 0; i < 10; i++) {//我們的內(nèi)容
                    System.out.println("尊敬的顧客,歡迎光臨" + Thread.currentThread().getName() +
                            "!" + "\n" + "" +
                            "1、購買位置號數(shù)" + "\n" + "2、退出");
                    int temp2 = read.nextInt();//得到選擇
                    System.out.println(temp2);//檢查用的,可以不要
                    if (temp2 == 1) {//依照選項多少分成幾類,因為這里小編的選擇較少沒有用Switch
                        System.out.println("請輸入你想購買的位置號數(shù):");
                        int temp3;//這兩個變量也可以放上面,變量放一起比較
                        // 好。但這里為了閱讀,就放這了
                        int temp4;
                        while (true) {//一個死循環(huán),因為不知道要輸入多少次
                            temp4 = read.nextInt();
                            if (a[temp4] == 1) {//判斷是否存在,依據(jù)就是我們之前設(shè)置的那個靜態(tài)數(shù)組
                                System.out.println("當前票有剩余,請選擇:" + "\n" +
                                        "1、購買" + "\n" + "2、返回上一頁面");
                                temp3 = read.nextInt();
                                System.out.println(temp3);//一樣是檢查
                                read.nextLine();//吸收多余的空格,習(xí)慣了,很有用,因為我們之后要連
                                // 著用一個字符串的輸入
                                break;
                            } else {
                                System.out.println("當前票無剩余,請重新輸入:");
                            }
                        }
                        if (temp3 == 1) {//一個分支,在我們的1選擇下的分支
                            System.out.println("請輸入你的姓名:");
                            String temp1 = read.nextLine();
                            System.out.println(temp1);
                            System.out.println(temp1 + "顧客" + "購買成功,感謝你的光臨");
                            a[temp4] = 0;//不為1就行了
                            temp.method(temp1, temp2);//這個就是調(diào)用方法了
                            sun--;//每次賣出一張票,票的總數(shù)都要減去一
                            System.out.println(sun);//檢查
                            object.notify();//一個一個子線程輪著運行
                            try {
                                object.wait();
                            } catch (InterruptedException e) {
                            }
                            break;

                        } else {
                            i--;
                            continue;
                        }

                    } else {
                        System.out.println(sun);
                        object.notify();
                        try {
                            object.wait();
                        } catch (InterruptedException e) {

                        }
                        break;
                    }
                }
            }
        }
        synchronized (object) {//運行完打印結(jié)果
            System.out.println(Thread.currentThread().getName() + ",票已經(jīng)售完!");
            object.notify();
            try {
                object.wait();
            } catch (InterruptedException e) {
            }
        }
    }

    interface callback {//接口
            void method(String variable1, int variable2);
        }

}

結(jié)果,結(jié)果有點長,不過功能是都實現(xiàn)了的,那個靜態(tài)數(shù)組顯得有點多余了。

尊敬的顧客,歡迎光臨南站口售票點!
1、購買位置號數(shù)
2、退出
1
1
請輸入你想購買的位置號數(shù):
0
當前票有剩余,請選擇:
1、購買
2、返回上一頁面
1
1
請輸入你的姓名:
xw
xw
xw顧客購買成功,感謝你的光臨
custemer{name='xw', number=1}
3
尊敬的顧客,歡迎光臨北站口售票點!
1、購買位置號數(shù)
2、退出
2
2
3
尊敬的顧客,歡迎光臨南站口售票點!
1、購買位置號數(shù)
2、退出
2
2
3
尊敬的顧客,歡迎光臨北站口售票點!
1、購買位置號數(shù)
2、退出
2
2
3
尊敬的顧客,歡迎光臨南站口售票點!
1、購買位置號數(shù)
2、退出
1
1
請輸入你想購買的位置號數(shù):
1
當前票有剩余,請選擇:
1、購買
2、返回上一頁面
1
1
請輸入你的姓名:
ly
ly
ly顧客購買成功,感謝你的光臨
custemer{name='ly', number=1}
2
尊敬的顧客,歡迎光臨北站口售票點!
1、購買位置號數(shù)
2、退出
1
1
請輸入你想購買的位置號數(shù):
0
當前票無剩余,請重新輸入:
2
當前票有剩余,請選擇:
1、購買
2、返回上一頁面
1
1
請輸入你的姓名:
zs
zs
zs顧客購買成功,感謝你的光臨
custemer{name='zs', number=1}
1
尊敬的顧客,歡迎光臨南站口售票點!
1、購買位置號數(shù)
2、退出
1
1
請輸入你想購買的位置號數(shù):
1
當前票無剩余,請重新輸入:
3
當前票有剩余,請選擇:
1、購買
2、返回上一頁面
1
1
請輸入你的姓名:
ls
ls
ls顧客購買成功,感謝你的光臨
custemer{name='ls', number=1}
0
北站口售票點,票已經(jīng)售完!
南站口售票點,票已經(jīng)售完!

感悟:慢慢來吧,感覺自己好像學(xué)到了一點東西的時候,或許就在明天吧。嗯,還是湊一湊字數(shù)吧。風(fēng)掃落花形婀娜,雨擊清流聲空幽。勸君末為前路愁,途盡自有青云樓。困難過后才是彩虹,所以,要堅持呀!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容