【笔记】学习java第十三天,水果超市
本帖最后由 qlcyl110 于 2017-2-14 08:01 编辑其实很多不理解的地方,但是跟着视频,自己写的。感觉自己很努力。跟大家分享一下!
主要解决两个大方面问题;
1、顾客购买与结账;
2、管理员的查看流水、查询总价、打折实现、添加、修改、删除等操作;
原创笔记楼:http://www.52pojie.cn/thread-578655-1-1.html
先来一个自定义商品属性的类
//定义商品项
public class Fruits {
String name; //商品名称
int id; //商品编号
String unit; //商品单位
double price; //商品单价
int number; //商品数量
double money; //商品金额
}
再主程main类
/
* 1、完成水果项的Fruits类的定义;
* 2、写出含有的工具方法;
* 1、录入整数的方法;
* 2、录入小数的方法;
* 3、录入字符串的方法;
* 3、成员位置定义集合,存储所有水果项(用来模拟数据库)
* 4、在main方法中使用循环嵌套switch选择不同操作;
* 5、业务逻辑方法实现;
* 初始化数据库; init 方法 void 返回值
* 购买水果 ; buy 方法 void 返回值
* 打印库存 kc 方法 void 返回值 查看库存一样
* 结账/打印小票 jz 方法 void 返回值
* 打折 dz 方法 double 返回值
* 数据重置 cz 方法 void 返回值
* 打印超市流水 ls 方法 void 返回值
* 总账查询 zz 方法 void 返回值
* 删除水果 sc 方法 void 返回值
* 添加水果 tj 方法 void 返回值
* 修改水果项 xg 方法 void 返回值
*/
import java.util.ArrayList;
import java.util.Scanner;
public class FruitsStore {
//水果项集合
static ArrayList<Fruits> list = new ArrayList<Fruits>();
//创建流水集合,用于存放流水数据
static ArrayList<Double> flowData = new ArrayList<Double>();
//main方法;
public static void main(String[] args) {
init();
//使用while(true)反复完成用户的操作,用户操作有多种,多种操作使用switch选择;
while(true){
//打印提示语;
System.out.println();
System.out.println(" 欢迎光临");
System.out.println("请输入的操作;");
System.out.println("1、购买水果;2、打印小票;");
System.out.println("3、流水查询;4、总账查询;");
System.out.println("5、添加新水果;6、删除水果;7、修改水果;8、查询库存;");
System.out.println("9、退出操作;");
System.out.println("");
//用户录入
int choose = enterInt();
switch(choose){
case 1://购买水果;
buy();
break;
case 2://结账及重置数据;
jz();
cz();
break;
case 3://查看流水;
ls();
break;
case 4://总账查询;
zz();
break;
case 5:
tj();
break;
case 6:
sc();
break;
case 7:
xg();
break;
case 8:
kc();
break;
case 9:
System.out.println("欢迎下次光临!");
cz();
break;
default:
System.out.println("您输入的数字有误,请重新输入!");
break;
}
}
}
//录入整数的方法
public static int enterInt(){
Scanner sc = new Scanner(System.in);
return sc.nextInt();
}
//录入小数的方法;
public static double enterDouble(){
Scanner sc = new Scanner(System.in);
return sc.nextDouble();
}
//录入字符串的方法;
public static String enterString(){
Scanner sc = new Scanner(System.in);
return sc.next();
}
//初始化数据库
public static void init(){
Fruits a = new Fruits();
a.name = "猕猴桃";
a.id = 00321;
a.price = 33.5;
a.unit = "斤";
Fruits b = new Fruits();
b.name = "苹果";
b.id = 00432;
b.price = 20;
b.unit = "斤";
Fruits c = new Fruits();
c.name = "火龙果";
c.id = 10231;
c.price = 28;
c.unit = "斤";
list.add(a);
list.add(b);
list.add(c);
}
//购买水果的方法
public static void buy(){
//打印库存
kc();
//提示打印信息
System.out.println();
System.out.println("---------------------------------------");
System.out.println();
System.out.println(" 好消息年底大促销");
System.out.println("---------------------------------------");
System.out.println(" 满300打9.5折");
System.out.println(" 满600打9折");
System.out.println(" 满1000打8折");
System.out.println(" 满1000且榴莲购买超过10个立减50元!!!!");
System.out.println(" ...");
System.out.println("---------------------------------------");
//循环输入购买的编号及数量
while(true){
//用户选择购买的水果编号
System.out.println("请输入您要购买的水果编号;如果输入0位退出!");
int aId = enterInt();
//判断是否有水果编号;如果输入0退出
//判断是否购买结束
if( aId == 0){
return;
}
//判断是否有水果编号
//循环外定义一个变量,记录是否有数据;
boolean flag = false;
//遍历集合一次对比
for (int i = 0; i < list.size(); i++) {
//获取当前水果项
Fruits a = list.get(i);
//对比水果id
if (aId == a.id){
//提示输入数量
System.out.println("请输入您要购买的数量;");
int number = enterInt();
//将用户输入的数量赋值给这个ID的水果项
a.number = number;
a.money = a.number*a.price;
flag = true;
}
}
if (!flag){
System.out.println("您的输入有误;");
}
}
}
//打印库存
public static void kc(){
System.out.println(" 水果报价单");
System.out.println("---------------------------------------");
System.out.println("编号 名称 单价 单位");
//遍历集合并打印
for (int i = 0; i < list.size(); i++) {
//打印编号、名称、单价、单位
//获取当前水果项
Fruits a = list.get(i);
//打印当前水果数据
System.out.println(a.id+" "+a.name+" "+a.price+" "+a.unit);
}
}
//结账/打印小票
public static void jz(){
//票头
System.out.println("这是您的购物小票;");
System.out.println("======================================================================");
System.out.println(" 欢迎光临");
System.out.println();
System.out.println("品名 售价 数量 金额");
System.out.println("----------------------------------------------------------------------");
//票体
//定义变量记录该用户购买的项数
int totalNumber = 0;
double totalMoney = 0 ;
for (int i = 0; i < list.size(); i++) {
Fruits a = list.get(i);
//数量不为0的打印;
if (a.number!=0){
System.out.println(a.name+"("+a.id+") "+a.price+" * "+a.number+" "+a.money);
//叠加每个购买金额
totalMoney += a.money;
//购买项数
totalNumber++;
}
}
//票脚
System.out.println("----------------------------------------------------------------------");
System.out.println(totalNumber+"项水果");
//打折
System.out.println("总计;"+totalMoney+"元");
double b = dz(totalMoney);
System.out.println("打折后为您节省;"+(totalMoney-b)+"元");
System.out.println("折后总价为;"+b);
flowData.add(b);
}
//打折处理
public static double dz(double totalMoney){
if(totalMoney<300){
//System.out.println("<300");
return totalMoney;
}else if(totalMoney>=300&&totalMoney<600){
//System.out.println("totalMoney>=300&&totalMoney<600");
return totalMoney*0.95;
}else if(totalMoney>=600&&totalMoney<1000){
//System.out.println("totalMoney>=600&&totalMoney<1000");
return totalMoney*0.9;
}else if(totalMoney>=1000){
//System.out.println("totalMoney>=1000");
if(list.get(0).number>10){
System.out.println("list.get(0).number>10");
return totalMoney*0.8-50;
}else {
return totalMoney*0.8;
}
}
return totalMoney;
}
//数据重置
public static void cz(){
//遍历集合
for (int i = 0; i < list.size(); i++) {
Fruits a = list.get(i);
a.number = 0;
a.money = 0;
}
}
//流水方法
public static void ls(){
if (flowData.size()==0) {
System.out.println("今天没开张!");
}else {
//遍历集合 ,产看流水
for (int i = 0; i < flowData.size(); i++) {
//获取当前水果流水
double a = flowData.get(i);
System.out.println("第"+(i+1)+"笔交易金额为;"+a);
}
}
}
//总账方法
public static void zz(){
//遍历流水
double a =0;
for (int j = 0; j < flowData.size(); j++) {
//将流水相加
double money =flowData.get(j);
//a = money +1
a+= money;
}
System.out.println("今天总收入为;"+a);
}
//删除方法
public static void sc(){
//删除水果;1、查看水果的编号;2、设置变量与水果编号一样;3、判断是否一样;4、删除该编号水果
kc();
System.out.println("请输入您删除水果的编号;");
int a = enterInt();
//遍历水果编号
for (int i = 0; i < list.size(); i++) {
Fruits id = list.get(i);
if(a == id.id){
list.remove(i);
System.out.println("您选择的水果已删除!");
}
}
System.out.println("对不起,没有找到编号!");
}
//添加方法
public static void tj(){
//查看水果;
kc();
//添加输入信息
System.out.println("请输入您要添加的水果编号");
int aid = enterInt();
//判断输入编号是否重复
for (int i = 0; i < list.size(); i++) {
Fruits id = list.get(i);
//编号不重复直接向下运行;
if (aid==id.id){
System.out.println("您输入的id有误,请重新输入;");
return;//直接退出循环
}
}
System.out.println("请输入您要添加的水果名称");
String aname = enterString();
System.out.println("请输入您要添加的水果单价");
double aprice = enterDouble();
System.out.println("请输入您要添加的水果单位");
String aunit = enterString();
//将录入的内容放进集合里
//需要一个变量接收数据
Fruits b = new Fruits();
b.id = aid;
b.name = aname;
b.price = aprice;
b.unit = aunit;
list.add(b);
//提示用户输入成功
System.out.println("添加水果成功!");
}
//修改方法
public static void xg(){
//产看水果项
kc();
//提示输入修改编号
System.out.println("请输入您要改的水果编号;");
//输入修改的编号
int aid = enterInt();
//判断修改的编号是否正确
for (int i = 0; i < list.size(); i++) {
Fruits b = list.get(i);
if (aid == b.id){
System.out.println("请输入您要改的水果名称;");
String aname = enterString();
System.out.println("请输入您要改的水果单价;");
double aprice = enterDouble();
System.out.println("请输入您要改的水果单位;");
String aunit = enterString();
//存进集合内;
b.price = aprice;
b.name = aname;
b.unit = aunit;
return;
}
}
System.out.println("你修改的编号错误!");
return;
}
}
tmpsforjxp 发表于 2017-2-14 08:42
讲真,楼主这努力程度确实值得学习。当年我学C/C++的时候,第十三天还没到这水平。
再加吧劲儿。戒骄戒躁 ...
我没学过C/C++,非编程专业奔三人。入手Java就是没人告诉我学编程先学啥,就自己开始了!不后悔的选择。因为喜爱。准备用2年时间深入学习java在转别的学!
感谢您的支持!希望得到您的指点!再次说声谢谢! qlcyl110 发表于 2017-3-3 22:57
哦!是不是用个boolean类型的变量?随时可以退出购物?
比如说
boolean b=true;
while(b){
switch语句块
3:
b=false;退出购物
} {:301_993:}挺不错的 {:301_998:}高手闪人。请问你们都是自学吗? 我也想学 怎么和c语言差不多 感觉和C#代码一样的啊 nddb 发表于 2017-2-14 08:34
感觉和C#代码一样的啊
同属C语系 讲真,楼主这努力程度确实值得学习。当年我学C/C++的时候,第十三天还没到这水平。
再加吧劲儿。戒骄戒躁,认真学习。以后你再学新语言时,你会发现,这是你第1小时内就能搞定的事情。 大概看了一下,写的不错。有以下2点建议:1.水果类不要把里面的成员直接暴露,应该私有化,然后用getter和setter来对成员进行操作。2. 方法名不要用没有意义的拼音或者缩写,要用英文。不然别人看着很费劲的! 加油加油!