java實(shí)現(xiàn)簡(jiǎn)單的小超市程序
本文實(shí)例為大家分享了java實(shí)現(xiàn)小超市程序的具體代碼,供大家參考,具體內(nèi)容如下
一.人物包
1.顧客類(lèi)
package person;
public class Customer {
public String name;
public double money;
public boolean isDrivingCar;
}
二.超市包
1.小超市類(lèi)
package supermarket;
public class LittleSuperMarket {
public String superMarketName;
public String address;
public int parkingCount;
public double incomingSum;
public Merchandise[] merchandises;
public int[] merchandisesold;
}
2.商品類(lèi)
package supermarket;
public class Merchandise {
public String name;
public String id;
public int count;
public double soldPrice;
public double purchasePrice;
}
三.主程序
import person.Customer;
import supermarket.LittleSuperMarket;
import supermarket.Merchandise;
import java.util.Scanner;
public class Run {
public static void main(String[] args) {
//通過(guò)小超市類(lèi)創(chuàng)建超市實(shí)體
LittleSuperMarket littleSuperMarket = new LittleSuperMarket();
//為超市屬性賦值
littleSuperMarket.address = "世紀(jì)大道999號(hào)";
littleSuperMarket.superMarketName = "我家超市";
littleSuperMarket.parkingCount = 200;
//為超市商品屬性new一個(gè)大小為200的數(shù)組,類(lèi)型為Merchandise
littleSuperMarket.merchandises = new Merchandise[200];
//創(chuàng)造下標(biāo)相同的數(shù)組記錄相同下標(biāo)商品的賣(mài)出個(gè)數(shù)
littleSuperMarket.merchandisesold = new int[littleSuperMarket.merchandises.length];
//賦值
for (int i = 0; i < littleSuperMarket.merchandises.length; i++) {
//創(chuàng)建類(lèi)型為merchandise的局部變量m,并為其賦值
Merchandise m = new Merchandise();
m.count = 200;
m.id = "ID" + i;
m.name = "商品" + i;
m.purchasePrice = 200 * Math.random();
m.soldPrice = (1 + Math.random()) * m.purchasePrice;
//將每次局部變量的值賦給對(duì)應(yīng)下標(biāo)的merchandise實(shí)體,此時(shí)實(shí)體merchandise有了值
littleSuperMarket.merchandises[i] = m;
}
System.out.println("超市開(kāi)張了!! !");
boolean open = true;
Scanner scanner = new Scanner(System.in);
while (open) {
System.out.println("本店叫做:" + littleSuperMarket.superMarketName);
System.out.println("本店地址:" + littleSuperMarket.address);
System.out.println("共擁有停車(chē)位:" + littleSuperMarket.parkingCount);
System.out.println("今天的營(yíng)業(yè)額為:" + littleSuperMarket.incomingSum);
System.out.println("共有商品:" + littleSuperMarket.merchandises.length + "種");
//為顧客的屬性賦值
Customer customer = new Customer();
customer.name = "編號(hào):" + ((int) (Math.random() * 500));
customer.isDrivingCar = Math.random() > 0.4;
customer.money = (1 + Math.random()) * 10000;
//先判斷顧客是否開(kāi)車(chē)
if (customer.isDrivingCar) {
System.out.println("歡迎顧客" + customer.name + "號(hào)的顧客駕車(chē)而來(lái)!");
//顧客開(kāi)車(chē)的條件下車(chē)位數(shù)>0,車(chē)位減一,否則重新進(jìn)入循環(huán)(車(chē)位小于零,顧客無(wú)法停車(chē))
if (littleSuperMarket.parkingCount > 0) {
littleSuperMarket.parkingCount--;
System.out.println("歡迎顧客" + customer.name + "號(hào)的顧客光臨" + littleSuperMarket.superMarketName + ",車(chē)位剩余" + littleSuperMarket.parkingCount + ",錢(qián)包剩余" + customer.money);
} else {
System.out.println("對(duì)不起,停車(chē)位已滿,歡迎下次光臨");
continue;
}
//沒(méi)開(kāi)車(chē),直接進(jìn)入
} else {
System.out.println("歡迎顧客" + customer.name + "號(hào)的顧客光臨" + littleSuperMarket.superMarketName + "錢(qián)包剩余" + customer.money);
}
//在購(gòu)買(mǎi)流程外部創(chuàng)建變量統(tǒng)計(jì)總共花費(fèi)和購(gòu)買(mǎi)數(shù)量
double totalCast = 0;
int numToBuy;
//購(gòu)買(mǎi)循環(huán)
while (true) {
System.out.println("本店提供" + littleSuperMarket.merchandises.length + "種商品,歡迎選購(gòu)。請(qǐng)輸入商品編號(hào):");
int InDex = scanner.nextInt();
//對(duì)商品索引的合法性進(jìn)行檢測(cè)
if (InDex <= 0) {
break;
}
if (InDex > littleSuperMarket.merchandises.length - 1) {
System.out.println("對(duì)不起,本店沒(méi)有那么多商品。請(qǐng)輸入0到" + (littleSuperMarket.merchandises.length - 1) + "之間的數(shù)字");
continue;
}
System.out.println("您選購(gòu)的商品的名字是:" + littleSuperMarket.merchandises[InDex].name + "\t售價(jià)為:" + littleSuperMarket.merchandises[InDex].soldPrice);
System.out.println("請(qǐng)問(wèn)你要買(mǎi)幾個(gè)?");
numToBuy = scanner.nextInt();
//對(duì)購(gòu)買(mǎi)數(shù)量的合法性進(jìn)行檢測(cè)
if (numToBuy <= 0) {
System.out.println("不買(mǎi)看看也好,歡迎繼續(xù)選購(gòu)");
continue;
}
if (numToBuy > littleSuperMarket.merchandises[InDex].count) {
System.out.println("本店沒(méi)有那么多商品,歡迎繼續(xù)挑選");
continue;
}
/*其實(shí)這里的邏輯不太好,但是懶得改了,等再學(xué)習(xí)一段時(shí)間再好好完善這個(gè)小程序。這里把花費(fèi)放在購(gòu)買(mǎi)循環(huán)外面才是比較好的邏輯,然后在這里用if循環(huán)判斷購(gòu)買(mǎi)的一系列合法性即可。
或者把售賣(mài)個(gè)數(shù)的屬性也在這里改變賦值會(huì)容易懂,我這里放到后面了,懶得改了。等下次優(yōu)化功能時(shí)再整體優(yōu)化邏輯
*/
//輸入合法,求總共花費(fèi),并對(duì)商品庫(kù)存進(jìn)行相應(yīng)的扣除
totalCast += littleSuperMarket.merchandises[InDex].soldPrice * numToBuy;
littleSuperMarket.merchandises[InDex].count -= numToBuy;
//仍然屬于合法性檢測(cè),檢測(cè)顧客的錢(qián)是否夠支付他所購(gòu)買(mǎi)商品的總價(jià)
if (customer.money < totalCast) {
System.out.println("對(duì)不起,您身上的錢(qián)不足以支付您的商品,歡迎下次選購(gòu)");
//錢(qián)不足以支付,對(duì)應(yīng)商品的數(shù)量再把剛才購(gòu)買(mǎi)但未成功支付的商品數(shù)量歸還
//就像你在超市里買(mǎi)東西,放進(jìn)購(gòu)物車(chē)了,貨架上超市庫(kù)存少了,其他顧客拿不到了,等你支付時(shí)錢(qián)不夠,商品被放回,其他顧客可以拿到的數(shù)量增加,即商品庫(kù)存增加
littleSuperMarket.merchandises[InDex].count += numToBuy;
//這一段當(dāng)時(shí)寫(xiě)的時(shí)候我也比較亂
//因?yàn)榭們r(jià)計(jì)算在外面了,此時(shí)總價(jià)已將超出了你的錢(qián)數(shù)循環(huán)從這里出去如果總價(jià)不置零,你的錢(qián)數(shù)一直小于總價(jià),該顧客一直無(wú)法購(gòu)買(mǎi)商品
totalCast = 0;
} else {
//正確購(gòu)買(mǎi),售出數(shù)量對(duì)應(yīng)增加,顧客口袋里的錢(qián)對(duì)應(yīng)減少
littleSuperMarket.merchandisesold[InDex] += numToBuy;
customer.money -= totalCast;
//開(kāi)車(chē)來(lái)的話,顧客離開(kāi),車(chē)位釋放
if (customer.isDrivingCar) {
littleSuperMarket.parkingCount++;
}
}
}
littleSuperMarket.incomingSum += totalCast;
//每次循環(huán)結(jié)束,該人總錢(qián)數(shù)得出將該人的totalCast累加到littleSuperMarket.incomingSum中,得出總共收入
//littleSuperMarket.incomingSum和totalIncoming數(shù)值相等,基本為同一意思
//littleSuperMarket.incomingSum += totalCast;
System.out.println("顧客" + customer.name + "號(hào)的顧客共消費(fèi)" + totalCast + ",還剩余" + customer.money);
System.out.println("今天還要繼續(xù)營(yíng)業(yè)嗎?");
open = scanner.nextBoolean();
}
System.out.println("超市關(guān)門(mén)了!");
System.out.println("今天總的營(yíng)業(yè)額為" + littleSuperMarket.incomingSum + "營(yíng)業(yè)情況如下:");
//定義總收入和總凈利潤(rùn)
double totalNetIncoming = 0;
double totalIncoming = 0;
for (int i = 0; i < littleSuperMarket.merchandisesold.length; i++) {
//只統(tǒng)計(jì)售出數(shù)量大于0的商品
if (littleSuperMarket.merchandisesold[i] > 0) {
//計(jì)算總利潤(rùn)和總凈利潤(rùn),通過(guò)累加求得
double incoming = littleSuperMarket.merchandises[i].soldPrice * littleSuperMarket.merchandisesold[i];
double netIncoming = (littleSuperMarket.merchandises[i].soldPrice - littleSuperMarket.merchandises[i].purchasePrice) * littleSuperMarket.merchandisesold[i];
totalIncoming += incoming;
totalNetIncoming += netIncoming;
System.out.println(littleSuperMarket.merchandises[i].name + "售出了" + littleSuperMarket.merchandisesold[i] + "個(gè)。銷(xiāo)售額為" + incoming + ",凈利潤(rùn)為" + netIncoming);
}
}
System.out.println("今日總銷(xiāo)售額為:" + totalIncoming + ";今日總凈利潤(rùn)為:" + totalNetIncoming);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaWeb實(shí)現(xiàn)注冊(cè)用戶名檢測(cè)
這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)注冊(cè)用戶名檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
Spring Boot集成MyBatis-Plus 自定義攔截器實(shí)現(xiàn)動(dòng)態(tài)表名切換功能
本文介紹了如何在SpringBoot項(xiàng)目中集成MyBatis-Plus,并通過(guò)自定義攔截器實(shí)現(xiàn)動(dòng)態(tài)表名切換,此外,還探討了MyBatis攔截器在其他場(chǎng)景中的應(yīng)用,如SQL日志記錄、多租戶數(shù)據(jù)隔離、數(shù)據(jù)權(quán)限控制等,感興趣的朋友跟隨小編一起看看吧2024-11-11
java簡(jiǎn)單讀取properties配置文件的方法示例
這篇文章主要介紹了java簡(jiǎn)單讀取properties配置文件的方法,涉及java針對(duì)properties配置的載入及文件屬性讀取相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
java如何對(duì)map進(jìn)行排序詳解(map集合的使用)
這篇文章主要介紹了java如何對(duì)map進(jìn)行排序,java map集合的使用詳解,大家可以參考使用2013-12-12
Java 程序里transient關(guān)鍵字使用方法示例
這篇文章主要為大家介紹了Java 程序里transient關(guān)鍵字使用方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Spring Boot Actuator未授權(quán)訪問(wèn)漏洞的問(wèn)題解決
Spring Boot Actuator 端點(diǎn)的未授權(quán)訪問(wèn)漏洞是一個(gè)安全性問(wèn)題,可能會(huì)導(dǎo)致未經(jīng)授權(quán)的用戶訪問(wèn)敏感的應(yīng)用程序信息,本文就來(lái)介紹一下解決方法,感興趣的可以了解一下2023-09-09
Jar包如何導(dǎo)入本地maven倉(cāng)庫(kù)
將本地jar包導(dǎo)入本地maven倉(cāng)庫(kù),可以通過(guò)maven命令-Dfile、-DgroupId、-DartifactId、-Dversion、-Dpackaging指定jar包的詳細(xì)信息,然后執(zhí)行命令即可2024-11-11

