查看: 1391|回复: 0

[Mysql数据库] 【寒假学Java】微型项目--控制台商城逻辑实现

发表于 2018-2-15 08:00:00
正文之前

今天本来是准备学一天Java,为此我早上准备了一个7点半的《Fade》的超大闹钟,而且我没法停下(树莓派连接音响的定时任务)。醒倒是醒过来了,但是看着手机满满的电以及窗外的雪,我总感觉太早起床不太好。所以,一直玩手机到10点半,总算把前面欠下的一些番给补完了。(没错,我说的就是以前推荐过的《一人之下》,我觉得还挺好看的。)中午去我妈打麻将的麻将馆里面蹭了一顿饭,下午回来把《蜘蛛侠.英雄归来.Spider-Man.Homecoming.2017.中英字幕.BDrip.AAC.720p.x264-人人影视》看完(前面就是磁力链接),小蜘蛛表现还是不错的。至于一些人老是批评用钢铁侠这个大ip来带小ip,我觉得好像不是这样吧,钢铁侠虽然也露了很多面,但是实际上来说,主线依旧是小蜘蛛。如果说从这就可以看衰漫威的话,那我还是很不赞同的。好了,回到正题,今天把《手把手教你学java》这本书看完了基础部分,后面有一点点的上机任务,虽然没有代码,但是大概思路给我理了一下,然后结合我自己的想法,才有了今天这个微型项目。

正文

我做的这个商城,页面类似于淘宝。首先是,有一个选项--是否登陆?

如果不登陆的话,还有一个选项是退出系统。

可以看下图,1、登录系统,2、退出系统。

那么常规选项肯定就直接是进入系统了。我也没有弄密码和账户这些东西,因为还没有链接数据库吗。所以就只要选择1 就可以直接进入主目录。

进去主目录之后呢,有四个选项,第一个选项是查看以及设置用户信息,第二个选项是购物,第三个选项是查看购物车,第四个选项是退出系统。

在第一个选项里面有四个子项目,分别是设置用户名,设置用户id,查看购物车,以及返回上一级目录。

如果用户不选择第四个选项的话,就会一直在这一个子页面里面打转。

那么当我们回到主目录的时候,可以查看第二个选项,里面是购物,我一共只设置了七种商品,以及退出购物界面选项

当然,这里的退出界面其实就等于是没有买什么东西,而买了任何一件商品之后,都会直接回到主页面。

至于主界面第三个选项,就十分好理解了,其实这只是用户信息界面的一个子项,但是我模仿一下淘宝,在个人信息里面可以查看购物车,在主界面也可以查看购物车。

第四个选项就毫无意外的先退出主界面,然后退出系统。

PS:也许你看到前面是欢迎颜雨薇同学进店观看,后面又是goodbye张照博。前后不一是吧,但是这只是因为我没有设置用户名变量在欢迎语中,如果你设置一下的话其实就可以了。因为我写这个是写给我妹子的。至于输入用户名的时候,一不小心手贱了一下。见谅!~~

我是淫荡的分割线!~

代码如下所示,整体布局见下图。因为这个项目实在很简单,所以没有细讲具体的逻辑结构,只讲了一下商城的布局。如果有耐心想要看一下的朋友,想必可以几下就看完,如果没耐心的话,我也不浪费那么多时间来细细的讲解我自己的想法了。当然,同时还有很多在注释中已经说明了的。各位看官见谅啦!容我为你送上一顶原谅帽(just a joke)。

(对我的工作环境,有兴趣的朋友可以看我前面这一篇文章之前两章,里面有写哦)

  1. ***************** LoginMenu.java *****************
  2. /*
  3. * 显示系统初始界面菜单
  4. */
  5. //package com.yywzzb.oop;
  6. //import java.rmi.server.ExportException;
  7. //输入输出
  8. import java.util.Scanner;
  9. import com.yywzzb.oop.MainMenu;
  10. import com.yywzzb.oop.Price;
  11. import com.yywzzb.oop.Customer;
  12. //其实也可以直接用import com.yywzzb.oop.*代替吧
  13. public class LoginMenu {
  14. public static void main (String[] args){
  15. //显示初始登录界面
  16. System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System"+"\n\n");
  17. System.out.println("\t\t\t\t 1. Login to The XNC Shopping System!\n\n");
  18. System.out.println("\t\t\t\t 2. Exit The System!\n\n");
  19. Scanner Login = new Scanner(System.in);
  20. System.out.println("\t\t Please Input: ");
  21. int in = Login.nextInt();
  22. //不管登陆没登陆,先定一个用户实例,用户实例的具体内容请见另外一个文件,也就是一开始导入的ustomor类
  23. Customer man=new Customer();
  24. if(in==1)
  25. {
  26. Price pr=new Price();
  27. Scanner Op = new Scanner(System.in);
  28. //当确定用户登录之后,进入主界面
  29. /*
  30. * 因为嫌麻烦,所以我直接定义一个主界面的类。
  31. * 而不是定义一个方法。
  32. * 好吧,我承认那会儿是我还才开始写,理不太新思路瞎写的。
  33. * 后来发现用着蛮方便就没改了。
  34. */
  35. MainMenu Menu=new MainMenu();
  36. //定义一个主界面的实例。然后当需要回到主界面的时候,直接调用实例的方法就可以了
  37. Menu.MainMenu();
  38. int op=0;
  39. //对输入的数据进行识别,然后去相对应的界面
  40. while (op!=4) {
  41. // System.out.println("\t\t Please Input: ");
  42. op=Op.nextInt();
  43. switch (op) {
  44. case 1:
  45. //当对用户的管理界面结束的时候回到主界面
  46. /*
  47. * 进入用户设置界面的话。通过调用用户类实例的Mange方法,可以对用户信息进行管理
  48. * 注意当进入这一个子页面的时候,就已经进入了用户实例的管理界面。
  49. * 当然还是在主函数中,只不过是调用了Mange函数而已。
  50. */
  51. man.Mange();
  52. Menu.MainMenu();
  53. break;
  54. case 2:
  55. //另外我还专门定义了一个类Price
  56. //来存放一些关于购物清单的信息以及如何从输入得到物品的价格。
  57. //说自己是物品会不会不太好??
  58. pr.showList();
  59. int price = 0;
  60. int x=Op.nextInt();
  61. if(x!=8) {
  62. //请注意虽然这里是在购物,但是最终的数据去向是用户信息实例里面去了
  63. //具体的可以看下面的 man.AddGoods(price);这一操作
  64. price = pr.SwitchToPrice(x);
  65. man.AddGoods(price);
  66. }
  67. //回到主界面
  68. Menu.MainMenu();
  69. break;
  70. case 3:
  71. System.out.println("\t\t************* Show The Goods *************\n");
  72. //其实我个人感觉好像用户信息类才是主体
  73. /*
  74. * 你看所有的选项都要用到它,当然这确实是废话
  75. * 因为个性化的原因,所以必须对个人信息进行高度的集成化处理
  76. * 所以才有了我们的用户类
  77. */
  78. man.ShowGoods();
  79. //当用户的购物车信息展示四秒钟后。
  80. // 再默认回到主界面。
  81. // 后期可以改为手动回到主界面。
  82. try {
  83. Thread.sleep(4000);
  84. }
  85. catch (Exception e){
  86. System.out.println(e);
  87. }
  88. Menu.MainMenu();
  89. break;
  90. case 4:
  91. /*
  92. * 因为我在while循环里面设置:
  93. * 如果操作数!=4,就会一直无限循环
  94. * 那么当操作数为4的时候,就会打破整个循环,从而运行到main的后面直至结束。
  95. */
  96. System.out.println("\t\tGoodBye!"+man.getName()+" Thanks for your Shopping!");
  97. break;
  98. }
  99. if(op!=4){
  100. System.out.println("Please Input the Next Action: ");
  101. }
  102. }
  103. }
  104. // else if (in==2)
  105. // {
  106. System.out.println("\n\n\t\t 感谢光临我们的Shop System,期待与您下次相遇\n\n");
  107. // }
  108. }
  109. }
复制代码

  1. ***************** Customer.java *****************
  2. package com.yywzzb.oop;
  3. import java.util.Scanner;
  4. public class Customer{
  5. //用户默认设置五个属性:
  6. // 分别是名字,编号,商品清单,商品总数目以及商品花费总额,
  7. private String name="Somebody";
  8. private int ID=0;
  9. /*
  10. * 当然,我们的商品清单有点小瑕疵
  11. * 那就是只有编号以及价格,而没有具体的名字。
  12. * 我想如果在真正的数据库操作中那是肯定可以有的,
  13. * 在这里我就懒得用map一个一个键值对上了
  14. */
  15. private int[] Goods=new int[8];
  16. private int Sum=0;
  17. private int money=0;
  18. //下面是一些常见的封装以及获取内部信息的方法
  19. public void setName(String name){
  20. this.name=name;
  21. }
  22. public String getName(){
  23. return this.name;
  24. }
  25. public void setID(int id){
  26. this.ID=id;
  27. }
  28. public void ShowGoods(){
  29. System.out.println("\t\t\t\tNow you have "+this.Sum+" Goods\n\n");
  30. for(int i=1;i<=this.Sum;++i)
  31. {
  32. System.out.println("\t\t\t\tThe "+i+" good's price is "+this.Goods[i]+"\n");
  33. }
  34. System.out.println("\t\t\tYou have bought "+this.money+" Yuan 张照博\n");
  35. // Scanner exe = new Scanner(System.in);
  36. // System.out.println("Enter any Key to Continue");
  37. // String s=exe.next();
  38. }
  39. //增加商品也就是主目录中第2个选项下的操作的主要方法。
  40. public void AddGoods(int price){
  41. this.Sum++;
  42. this.money = this.money + price;
  43. this.Goods[this.Sum]=price;
  44. }
  45. public void Mange(){
  46. //这里就是全篇最重要的 **用户信息设置界面**
  47. System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System"+"\n\n");
  48. System.out.println("\t\t\t\t 1. 设置姓名\n\n");
  49. System.out.println("\t\t\t\t 2. 设置编号\n\n");
  50. System.out.println("\t\t\t\t 3. 查看购物车\n\n");
  51. System.out.println("\t\t\t\t 4. 返回上一级\n\n");
  52. Scanner exe = new Scanner(System.in);
  53. Scanner e = new Scanner(System.in);
  54. int In=0;
  55. //这里也是采用操作数的老套路,前面已经说过了。
  56. while(In!=4) {
  57. System.out.println("Please Input the User's Action: ");
  58. In = exe.nextInt();
  59. switch (In) {
  60. case 1:
  61. System.out.println("\t\t Please Input Name: ");
  62. String name = e.nextLine();
  63. setName(name);
  64. break;
  65. case 2:
  66. System.out.println("\t\t Please Input ID: ");
  67. int ID = e.nextInt();
  68. setID(ID);
  69. break;
  70. case 3:
  71. System.out.println("\t\t Show The Goods\n");
  72. ShowGoods();
  73. break;
  74. case 4:
  75. break;
  76. }
  77. }
  78. }
  79. }
复制代码

  1. ***************** Price.java *****************
  2. package com.yywzzb.oop;
  3. public class Price {
  4. public void showList(){
  5. //这里真的只是一个商品的清单打印界面
  6. System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System"+"\n\n");
  7. System.out.println("\t\t\t\t 1. 张照博10斤 --- 1000元\n");
  8. System.out.println("\t\t\t\t 2. 张照博20斤 --- 1800元\n");
  9. System.out.println("\t\t\t\t 3. 张照博40斤 --- 3500元\n");
  10. System.out.println("\t\t\t\t 4. 张照博50斤 --- 4000元\n");
  11. System.out.println("\t\t\t\t 5. 张照博100斤 --- 7000元\n");
  12. System.out.println("\t\t\t\t 6. 张照博150斤 --- 10000元\n");
  13. System.out.println("\t\t\t\t 7. 张照博整只 --- 88888元\n");
  14. System.out.println("\t\t\t\t 8. 退出购买页\n");
  15. }
  16. public int SwitchToPrice(int x){
  17. //这个是从商品的序号直接变成价格
  18. // 方便统计购买物品的重量以及总价
  19. int price=0;
  20. int weight=0;
  21. switch (x){
  22. case 1:
  23. price = 1000;
  24. weight=10;
  25. break;
  26. case 2:
  27. price = 1800;
  28. weight=20;
  29. break;
  30. case 3:
  31. price = 3500;
  32. weight=40;
  33. break;
  34. case 4:
  35. price = 4000;
  36. weight=50;
  37. break;
  38. case 5:
  39. price = 7000;
  40. weight=100;
  41. break;
  42. case 6:
  43. price =10000;
  44. weight=150;
  45. break;
  46. case 7:
  47. price = 88888;
  48. weight=170;
  49. break;
  50. case 8:
  51. break;
  52. }
  53. System.out.println("\t\t******恭喜你购得新鲜张照博"+weight+"斤,价格为"+price+"******\n\n\n\n");
  54. return price;
  55. }
  56. }
复制代码

  1. ***************** MainMenu .java *****************
  2. package com.yywzzb.oop;
  3. //import java.util.Scanner;
  4. public class MainMenu {
  5. public void MainMenu() {
  6. //本次微型项目的最大败笔!!!!!!!!!
  7. System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System" + "\n\n\n");
  8. System.out.println("\t\t\t\t 1. 客户管理\n\n");
  9. System.out.println("\t\t\t\t 2. 倾情购物\n\n");
  10. System.out.println("\t\t\t\t 3. 购物清单\n\n");
  11. System.out.println("\t\t\t\t 4. 退出系统\n\n");
  12. }
  13. }
复制代码
正文之后

容我测试下,不用IDLE是如何操作?我预感是删除package那一句,然后把四个文件全部放在一个文件夹下,分别编译一次(顺序按照引用先后),记得在main类中import后删除 com.yywzzb.oop. 我去树莓派上试试!!

经过测试:如果没有IDLE的话,只要删除掉package有关语句,以及import那几个com.yywzzb.oop的语句即可。效果如下:最终改动如下:

其他类似



回复

使用道具 举报