正文之前
今天本来是准备学一天Java,为此我早上准备了一个7点半的《Fade》的超大闹钟,而且我没法停下(树莓派连接音响的定时任务)。醒倒是醒过来了,但是看着手机满满的电以及窗外的雪❄️,我总感觉太早起床不太好。所以,一直玩手机到10点半,总算把前面欠下的一些番给补完了。(没错,我说的就是以前推荐过的《一人之下》,我觉得还挺好看的。)中午去我妈打麻将的麻将馆里面蹭了一顿饭,下午回来把《蜘蛛侠.英雄归来.Spider-Man.Homecoming.2017.中英字幕.BDrip.AAC.720p.x264-人人影视》看完(前面就是磁力链接),小蜘蛛表现还是不错的。至于一些人老是批评用钢铁侠这个大ip来带小ip,我觉得好像不是这样吧,钢铁侠虽然也露了很多面,但是实际上来说,主线依旧是小蜘蛛。如果说从这就可以看衰漫威的话,那我还是很不赞同的。好了,回到正题,今天把《手把手教你学java》这本书看完了基础部分,后面有一点点的上机任务,虽然没有代码,但是大概思路给我理了一下,然后结合我自己的想法,才有了今天这个微型项目。
正文
我做的这个商城,页面类似于淘宝。首先是,有一个选项--是否登陆?
如果不登陆的话,还有一个选项是退出系统。
可以看下图,1、登录系统,2、退出系统。
那么常规选项肯定就直接是进入系统了。我也没有弄密码和账户这些东西,因为还没有链接数据库吗。所以就只要选择1 就可以直接进入主目录。
进去主目录之后呢,有四个选项,第一个选项是查看以及设置用户信息,第二个选项是购物,第三个选项是查看购物车,第四个选项是退出系统。
在第一个选项里面有四个子项目,分别是设置用户名,设置用户id,查看购物车,以及返回上一级目录。
如果用户不选择第四个选项的话,就会一直在这一个子页面里面打转。
那么当我们回到主目录的时候,可以查看第二个选项,里面是购物,我一共只设置了七种商品,以及退出购物界面选项
当然,这里的退出界面其实就等于是没有买什么东西,而买了任何一件商品之后,都会直接回到主页面。
至于主界面第三个选项,就十分好理解了,其实这只是用户信息界面的一个子项,但是我模仿一下淘宝,在个人信息里面可以查看购物车,在主界面也可以查看购物车。
第四个选项就毫无意外的先退出主界面,然后退出系统。
PS:也许你看到前面是欢迎颜雨薇同学进店观看,后面又是goodbye张照博。前后不一是吧,但是这只是因为我没有设置用户名变量在欢迎语中,如果你设置一下的话其实就可以了。因为我写这个是写给我妹子的。至于输入用户名的时候,一不小心手贱了一下。见谅!~~
代码如下所示,整体布局见下图。因为这个项目实在很简单,所以没有细讲具体的逻辑结构,只讲了一下商城的布局。如果有耐心想要看一下的朋友,想必可以几下就看完,如果没耐心的话,我也不浪费那么多时间来细细的讲解我自己的想法了。当然,同时还有很多在注释中已经说明了的。各位看官见谅啦!容我为你送上一顶原谅帽(just a joke)。
(对我的工作环境,有兴趣的朋友可以看我前面这一篇文章之前两章,里面有写哦)
***************** LoginMenu.java *****************
/*
* 显示系统初始界面菜单
*/
//package com.yywzzb.oop;
//import java.rmi.server.ExportException;
//输入输出
import java.util.Scanner;
import com.yywzzb.oop.MainMenu;
import com.yywzzb.oop.Price;
import com.yywzzb.oop.Customer;
//其实也可以直接用import com.yywzzb.oop.*代替吧
public class LoginMenu {
public static void main (String[] args){
//显示初始登录界面
System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System"+"\n\n");
System.out.println("\t\t\t\t 1. Login to The XNC Shopping System!\n\n");
System.out.println("\t\t\t\t 2. Exit The System!\n\n");
Scanner Login = new Scanner(System.in);
System.out.println("\t\t Please Input: ");
int in = Login.nextInt();
//不管登陆没登陆,先定一个用户实例,用户实例的具体内容请见另外一个文件,也就是一开始导入的ustomor类
Customer man=new Customer();
if(in==1)
{
Price pr=new Price();
Scanner Op = new Scanner(System.in);
//当确定用户登录之后,进入主界面
/*
* 因为嫌麻烦,所以我直接定义一个主界面的类。
* 而不是定义一个方法。
* 好吧,我承认那会儿是我还才开始写,理不太新思路瞎写的。
* 后来发现用着蛮方便就没改了。
*/
MainMenu Menu=new MainMenu();
//定义一个主界面的实例。然后当需要回到主界面的时候,直接调用实例的方法就可以了
Menu.MainMenu();
int op=0;
//对输入的数据进行识别,然后去相对应的界面
while (op!=4) {
// System.out.println("\t\t Please Input: ");
op=Op.nextInt();
switch (op) {
case 1:
//当对用户的管理界面结束的时候回到主界面
/*
* 进入用户设置界面的话。通过调用用户类实例的Mange方法,可以对用户信息进行管理
* 注意当进入这一个子页面的时候,就已经进入了用户实例的管理界面。
* 当然还是在主函数中,只不过是调用了Mange函数而已。
*/
man.Mange();
Menu.MainMenu();
break;
case 2:
//另外我还专门定义了一个类Price
//来存放一些关于购物清单的信息以及如何从输入得到物品的价格。
//说自己是物品会不会不太好??
pr.showList();
int price = 0;
int x=Op.nextInt();
if(x!=8) {
//请注意虽然这里是在购物,但是最终的数据去向是用户信息实例里面去了
//具体的可以看下面的 man.AddGoods(price);这一操作
price = pr.SwitchToPrice(x);
man.AddGoods(price);
}
//回到主界面
Menu.MainMenu();
break;
case 3:
System.out.println("\t\t************* Show The Goods *************\n");
//其实我个人感觉好像用户信息类才是主体
/*
* 你看所有的选项都要用到它,当然这确实是废话
* 因为个性化的原因,所以必须对个人信息进行高度的集成化处理
* 所以才有了我们的用户类
*/
man.ShowGoods();
//当用户的购物车信息展示四秒钟后。
// 再默认回到主界面。
// 后期可以改为手动回到主界面。
try {
Thread.sleep(4000);
}
catch (Exception e){
System.out.println(e);
}
Menu.MainMenu();
break;
case 4:
/*
* 因为我在while循环里面设置:
* 如果操作数!=4,就会一直无限循环
* 那么当操作数为4的时候,就会打破整个循环,从而运行到main的后面直至结束。
*/
System.out.println("\t\tGoodBye!"+man.getName()+" Thanks for your Shopping!");
break;
}
if(op!=4){
System.out.println("Please Input the Next Action: ");
}
}
}
// else if (in==2)
// {
System.out.println("\n\n\t\t 感谢光临我们的Shop System,期待与您下次相遇\n\n");
// }
}
}
***************** Customer.java *****************
package com.yywzzb.oop;
import java.util.Scanner;
public class Customer{
//用户默认设置五个属性:
// 分别是名字,编号,商品清单,商品总数目以及商品花费总额,
private String name="Somebody";
private int ID=0;
/*
* 当然,我们的商品清单有点小瑕疵
* 那就是只有编号以及价格,而没有具体的名字。
* 我想如果在真正的数据库操作中那是肯定可以有的,
* 在这里我就懒得用map一个一个键值对上了
*/
private int[] Goods=new int[8];
private int Sum=0;
private int money=0;
//下面是一些常见的封装以及获取内部信息的方法
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setID(int id){
this.ID=id;
}
public void ShowGoods(){
System.out.println("\t\t\t\tNow you have "+this.Sum+" Goods\n\n");
for(int i=1;i<=this.Sum;++i)
{
System.out.println("\t\t\t\tThe "+i+" good's price is "+this.Goods[i]+"\n");
}
System.out.println("\t\t\tYou have bought "+this.money+" Yuan 张照博\n");
// Scanner exe = new Scanner(System.in);
// System.out.println("Enter any Key to Continue");
// String s=exe.next();
}
//增加商品也就是主目录中第2个选项下的操作的主要方法。
public void AddGoods(int price){
this.Sum++;
this.money = this.money + price;
this.Goods[this.Sum]=price;
}
public void Mange(){
//这里就是全篇最重要的 **用户信息设置界面**
System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System"+"\n\n");
System.out.println("\t\t\t\t 1. 设置姓名\n\n");
System.out.println("\t\t\t\t 2. 设置编号\n\n");
System.out.println("\t\t\t\t 3. 查看购物车\n\n");
System.out.println("\t\t\t\t 4. 返回上一级\n\n");
Scanner exe = new Scanner(System.in);
Scanner e = new Scanner(System.in);
int In=0;
//这里也是采用操作数的老套路,前面已经说过了。
while(In!=4) {
System.out.println("Please Input the User's Action: ");
In = exe.nextInt();
switch (In) {
case 1:
System.out.println("\t\t Please Input Name: ");
String name = e.nextLine();
setName(name);
break;
case 2:
System.out.println("\t\t Please Input ID: ");
int ID = e.nextInt();
setID(ID);
break;
case 3:
System.out.println("\t\t Show The Goods\n");
ShowGoods();
break;
case 4:
break;
}
}
}
}
***************** Price.java *****************
package com.yywzzb.oop;
public class Price {
public void showList(){
//这里真的只是一个商品的清单打印界面
System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System"+"\n\n");
System.out.println("\t\t\t\t 1. 张照博10斤 --- 1000元\n");
System.out.println("\t\t\t\t 2. 张照博20斤 --- 1800元\n");
System.out.println("\t\t\t\t 3. 张照博40斤 --- 3500元\n");
System.out.println("\t\t\t\t 4. 张照博50斤 --- 4000元\n");
System.out.println("\t\t\t\t 5. 张照博100斤 --- 7000元\n");
System.out.println("\t\t\t\t 6. 张照博150斤 --- 10000元\n");
System.out.println("\t\t\t\t 7. 张照博整只 --- 88888元\n");
System.out.println("\t\t\t\t 8. 退出购买页\n");
}
public int SwitchToPrice(int x){
//这个是从商品的序号直接变成价格
// 方便统计购买物品的重量以及总价
int price=0;
int weight=0;
switch (x){
case 1:
price = 1000;
weight=10;
break;
case 2:
price = 1800;
weight=20;
break;
case 3:
price = 3500;
weight=40;
break;
case 4:
price = 4000;
weight=50;
break;
case 5:
price = 7000;
weight=100;
break;
case 6:
price =10000;
weight=150;
break;
case 7:
price = 88888;
weight=170;
break;
case 8:
break;
}
System.out.println("\t\t******恭喜你购得新鲜张照博"+weight+"斤,价格为"+price+"******\n\n\n\n");
return price;
}
}
***************** MainMenu .java *****************
package com.yywzzb.oop;
//import java.util.Scanner;
public class MainMenu {
public void MainMenu() {
//本次微型项目的最大败笔!!!!!!!!!
System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System" + "\n\n\n");
System.out.println("\t\t\t\t 1. 客户管理\n\n");
System.out.println("\t\t\t\t 2. 倾情购物\n\n");
System.out.println("\t\t\t\t 3. 购物清单\n\n");
System.out.println("\t\t\t\t 4. 退出系统\n\n");
}
}
正文之后
容我测试下,不用IDLE是如何操作?我预感是删除package那一句,然后把四个文件全部放在一个文件夹下,分别编译一次(顺序按照引用先后),记得在main类中import后删除 com.yywzzb.oop. 我去树莓派上试试!!
其他类似经过测试:如果没有IDLE的话,只要删除掉package有关语句,以及import那几个com.yywzzb.oop的语句即可。效果如下:最终改动如下:
网友评论