超市1.0
思路
- 对于写一个超市系统,我们需要知道超市都有什么功能,而很明显的功能是能购买东西。
- 当我们知道能购买东西,就存在商品名称和商品价格还有商品序号。所以我们就需要定义一个方法,用来存放商品有关的属性。
- 当已知商品之后,我们就发现要有人买商品,而人又需要带钱买商品,以及可以定义一个人名。这时我们定义一个类用来存放人这个方法。
- 定义完这两个方法之后,我们需要再有个平台进行购物,这时我们就可以定义个方法,用来执行所需的操作。
- 目前需要的已经都列出来了,然后写代码并完善思路。
操作
- 首先建立一个启动类。建立完启动类之后我又新建了三个类,一个用来表示用户,一个用来表示超市,一个用来表示账单,其中账单中定义了种类,价格,库存量
String name;
int price;//存放各个种类的价格
int serNumber;//存放产品序号
int kNumber;//存放每个数量
- 而用户中定义了两个属性,一个是姓名,一个是有多少钱。
String name;
int money;
- 然后我们剩下一个shop类,我们将在这里写所需要的代码。对于1.0版本,我们只进行一些简单的应用,后面会进行拓展。
- 在shop类中,我们需要知道自己需要干什么,首先我们需要商品,既然有商品了还需要给商品赋值,比如商品名和商品价格还有商品序号。
- 一般商品不会只有一个,可能会有好多个,所以我们需要一个数组用来存商品,这时我们定义一个数组,而数组就要有数组类型。我们就需要知道需要什么数据类型的数组。
- 很明显需要的是跟商品各个属性都能匹配上的引用数据类型,故我们 new 一个Product类型的数组。
Product[] productkind = new Product[5];
- 这一次的超市1.0我们就不进行输数据然后定义各个商品了,这一次我们用最原始的方法,直接new对象,然后给对象赋值,再给数组传进去。商品名可以随意写,但是要跟你定义的数据类型相同,比如我们的商品名称用的是String类型,输入的就要是String类型。
- new的五个对象
Product product1 = new Product();
Product product2 = new Product();
Product product3 = new Product();
Product product4 = new Product();
Product product5 = new Product();
- 定义的值
product1.name="苹果";
product2.name="香蕉";
product3.name="梨";
product4.name="橘子";
product5.name="西瓜";
//给各个产品起名字
product1.price=10;
product2.price=10;
product3.price=10;
product4.price=10;
product5.price=10;
//给各个产品定数量
product1.serNumber =0;
product2.serNumber =1;
product3.serNumber =2;
product4.serNumber =3;
product5.serNumber =4;
//给各个产品拍序号
product1.kNumber =10;
product2.kNumber =20;
product3.kNumber =15;
product4.kNumber =14;
product5.kNumber =15;
//给各个产品数量
- 然后再将对象赋给数组各个量
productkind[0] = product1;
productkind[1] = product2;
productkind[2] = product3;
productkind[3] = product4;
productkind[4] = product5;
- 准备工作做完,我们就可以开始正式编写了。
对于Java程序编写思路,我们可以一边写想要的功能一边建立新的方法,或者可以用身临其境的方式来写代码。 - 进入网上超市,会让我们看到有什么商品,显示商品序号,商品名称,商品价格,以及库存数量。
- 然后我们就可以用for循环来将数组中的每个值进行打印。
System.out.println("\t\t***欢迎来到超市,请选购商品***");
System.out.println("商品名\t\t商品价格\t\t商品序号\t\t商品数量");
for (int i = 0; i < 5; i++) {
System.out.println(productkind[i].name + "\t\t\t" + productkind[i].price + "\t\t\t" +
productkind[i].serNumber + "\t\t\t" + productkind[i].kNumber);
//将所有产品信息罗列出来
}
- 用户能查询到商品之后,就可以根据序号然后选择想要购买哪种商品,这时,我们就需要让用户输入一个随机数,从而代表商品序列号,当用户输入的序列号找不到时,就退出操作。
- 而根据序列号输出想要购买的商品,我们可以用switch语句进行判断。当switch中值为哪一个时,就可以进行哪一个操作,当然后面有简单的方法,这里先用这种方法便于接受。
- 对于输入一个随机数,我们用的是scanner方法
Scanner scanner = new Scanner(System.in);
当需要输入哪种数据类型,只需要在方法调用的时候输入.next(你想用的数据类型)
- 代码
System.out.println("\t\t\t请输入想要购买的商品序号");
System.out.println("你可以输入0—4数字进行产品选择,或者输入其他数字进行结束购物");
int a = scanner.nextInt();//用户输入一个数,并用这个数在下面进行switch
switch (a) {
case 0: {
//商品
}
case 1:{
}
case 2:{
}
case 3:{
}
case 4:{
}
default:{
}
}
- 定义完switch后,用户选择哪个数,就可以直接进入到case里边执行。而我们想要执行的就可以在case里边编写。比如怕用户是点错了,可以再让用户输出个布尔类型变量以保证准确性。当用户输入true,就可以执行。然后选择购买数量。
boolean ok = scanner.nextBoolean();//为了确保用户不是错点,让用户输入布尔值以证明
if (ok) {
System.out.println("请输入购买商品数量:");
int b = scanner.nextInt();//选择购买数量
}
- 写到这个的时候我们需要判断库存数量是否大于购买数量,以及用户所带的钱是否大于所需要的钱。这时就需要我们知道用户的钱的值,以及判断库存量和购买量,对于用户的值我们可以在启动类里边写,然后把参数传给这个方法。所以这个方法就可以修改为public void shop( User user),而是否有返回值,后面看需求在进行更改。
System.out.println("\t\t\t请问你是要购买苹果吗");
System.out.println("请输入true或者false以保证你没有选错商品");
System.out.println("输入true代表购买,输入false代表重新选择");
boolean ok = scanner.nextBoolean();//为了确保用户不是错点,让用户输入布尔值以证明
if (ok) {
System.out.println("请输入购买商品数量:");
int b = scanner.nextInt();//选择购买数量
if (user.money > b * productkind[a].price) {//当所带的钱比需要的钱多时,进入
if (b <= productkind[a].kNumber) {//当需求数量小于等于库存数量时,进入
}else{
System.out.println("库存不够,请重新减少数量购买或者退出购买");
}
}else{
System.out.println("就这么一点钱还想来买" + productkind[a].name + "?赶紧回家洗洗睡吧!");
}
- 写到这我们就基本上可以正常运行了。但是发现如果我们买完一次之后程序就会直接结束了,这时为了判断是否想要继续购买,我们可以再switch外面加一个while,让用户执行完一次之后再输入一次布尔值,true时继续循环,false跳出循环。
- 当买完之后,我们需要更新数据,这时就可以更新每个量。而为了存每个量以及为了购物结束的时候能输出一个账单,我们可以再新建一个类,用来建立账单,而账单里存放消费金额以及用户信息。
- 即ordet里
User user;
int totalMoney;
ordet.totalMoney = ordet.totalMoney + b * productkind[a].price;
//消费金额等于之前消费金额+现在所需金额
productkind[a].kNumber = productkind[a].kNumber - b;
//库存数量等于之前数量-现在需求数量
user.money = user.money - b * productkind[a].price;
//用户剩余金额等于用户之前金额-现在所需要的钱
ordet.user = user;
//后续返回Ordet类型,将ordet的user指向user
apple = apple + b;
//已买数量
System.out.println("你目前还剩" + user.money + "人民币");
System.out.println("你已消费" + ordet.totalMoney + "人民币");
System.out.println("目前库存还剩" + productkind[a].kNumber + "个" + productkind[a].name);
//输出
- 当我们购买完商品之后,可以输出一个账单,而账单输出可以直接用ordet和product输出
System.out.println("购买了 + product1.name + ", 共花费了" + ordet.totalMoney);
- 至此,程序结束。shop1代码如下
package com.shop1;
import java.util.Scanner;
public class Shopping {
Scanner scanner =new Scanner(System.in);//new输出数方法
/**
*
* @param user 用user作传参类型
* @return 返回Ordet类型,
*/
public Ordet shop( User user){
//
// int [] knumber={10,20,20,10,23};
// String [] name = {"苹果","香蕉","梨","橘子","西瓜"};
// int [] serNumber = {0,1,2,3,4};
// int [] price = {10,10,10,10,10};
Adm adm = new Adm();
//
Ordet ordet = new Ordet();
Product product1 = new Product();
Product product2 = new Product();
Product product3 = new Product();
Product product4 = new Product();
Product product5 = new Product();
//new五个对象用来存放各个属性
//
// // User user = new User();
product1.name="苹果";
product2.name="香蕉";
product3.name="梨";
product4.name="橘子";
product5.name="西瓜";
// //给各个产品起名字
//
product1.price=10;
product2.price=10;
product3.price=10;
product4.price=10;
product5.price=10;
//给各个产品定数量
product1.serNumber =0;
product2.serNumber =1;
product3.serNumber =2;
product4.serNumber =3;
product5.serNumber =4;
//给各个产品拍序号
product1.kNumber =10;
product2.kNumber =20;
product3.kNumber =15;
product4.kNumber =14;
product5.kNumber =15;
//给各个产品数量
//
Product[] productkind = new Product[5];
productkind[0] = product1;
productkind[1] = product2;
productkind[2] = product3;
productkind[3] = product4;
productkind[4] = product5;
//
//new一个Product类型的数组,用来存放刚刚定义的各个属性值
// for (int i = 0; i < 5; i++) {
// productkind[i].kNumber=knumber[i];
// productkind[i].name=name[i];
// productkind[i].serNumber=serNumber[i];
// productkind[i].price = price[i];
// }
System.out.println("\t\t***欢迎来到超市,请选购商品***");
System.out.println("商品名\t\t商品价格\t\t商品序号\t\t商品数量");
for (int i = 0; i < 5; i++) {
System.out.println(productkind[i].name + "\t\t\t" + productkind[i].price + "\t\t\t" +
productkind[i].serNumber + "\t\t\t" + productkind[i].kNumber);
//将所有产品信息罗列出来
}
System.out.println("输入商品序号代表选择商品,输出商品序号之外的数字代表退出购买");
boolean flag = true; //定义一个布尔类型的变量用来进行后续判断
int apple = 0;
int banana = 0;
int pear = 0;
int orange = 0;
int watermelon = 0;
//定义一个变量用来给后续购买数量赋值
while (flag) {//只要用户不自己选择退出,一直循环
System.out.println("\t\t\t请输入想要购买的商品序号");
System.out.println("你可以输入0—4数字进行产品选择,或者输入其他数字进行结束购物");
int a = scanner.nextInt();//用户输入一个数,并用这个数在下面进行switch
switch (a) {
case 0: {
System.out.println("\t\t\t请问你是要购买苹果吗");
System.out.println("请输入true或者false以保证你没有选错商品");
System.out.println("输入true代表购买,输入false代表重新选择");
boolean ok = scanner.nextBoolean();//为了确保用户不是错点,让用户输入布尔值以证明
if (ok) {
System.out.println("请输入购买商品数量:");
int b = scanner.nextInt();//选择购买数量
if (user.money > b * productkind[a].price) {//当所带的钱比需要的钱多时,进入
if (b <= productkind[a].kNumber) {//当需求数量小于等于库存数量时,进入
ordet.totalMoney = ordet.totalMoney + b * productkind[a].price;
//消费金额等于之前消费金额+现在所需金额
productkind[a].kNumber = productkind[a].kNumber - b;
//库存数量等于之前数量-现在需求数量
user.money = user.money - b * productkind[a].price;
//用户剩余金额等于用户之前金额-现在所需要的钱
ordet.user = user;
//后续返回Ordet类型,将ordet的user指向user
apple = apple + b;
//已买数量
System.out.println("你目前还剩" + user.money + "人民币");
System.out.println("你已消费" + ordet.totalMoney + "人民币");
System.out.println("目前库存还剩" + productkind[a].kNumber + "个" + productkind[a].name);
//输出
} else {
System.out.println("库存不够,请重新减少数量购买或者退出购买");
}
} else {
System.out.println("就这么一点钱还想来买" + productkind[a].name + "?赶紧回家洗洗睡吧!");
}
break;
} else {
System.out.println("取消购买,请重新选择商品号");
break;
}
}
case 1: {
System.out.println("请输入购买商品数量1:");
break;
}
case 2: {
System.out.println("请输入购买商品数量:");
break;
}
case 3: {
System.out.println("请输入购买商品数量:");
break;
}
case 4: {
System.out.println("请输入购买商品数量:");
break;
}
default: {
flag = false;
System.out.println("结束购买");
if (ordet.totalMoney > 0) {
System.out.println("谢谢" + user.name + "的光临,这是你的账单,请核对后再走");
}
if (apple > 0) {
System.out.println("购买了" + apple + "个" + product1.name + ", 共花费了" + ordet.totalMoney);
// System.out.println("购买了"+apple+"个"+productkind[a].name+", 共花费了"+ordet.totalMoney);
}
break;
}
}
}
return ordet;
}
}
- 启动类代码如下
package com.shop1;
import java.util.Scanner;
public class MainText {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Shopping shopping = new Shopping();
// Ordet ordet = new Ordet();
User user =new User();
Adm adm = new Adm();
System.out.println("请问你是用户还是管理员");
System.out.println("用户输入1,管理员输入2,输入其它数代表取消访问");
int n=scanner.nextInt();
if(n==1){
System.out.println("请问你是要访问超市吗?");
System.out.println("请输入true或者false");
boolean o = scanner.nextBoolean();
if(o){
System.out.println("为了防范疫情,我们需要实名登记,请输入你的姓名");
user.name=scanner.next();
System.out.println("我们这是贵族超市,不带钱不给进,请输入你有多少钱");
user.money=scanner.nextInt();
if(user.money>0){
shopping.shop(user);
}else{
System.out.println("没钱还想来超市?一边去");
}
}else{
System.out.println("不来超市的话请不要在我们门口,耽误我们做生意");
}
}else if(n==2){
adm.prf();
}else{
System.out.println("赶紧滚");
}
}
}