一、前言
- 诶,不知不觉就两天过去了,昨天没有发布是因为一直在做这个系统,说实话,自己的基础水平还是不够稳定,既然花了两天时间才能写出来,期间也遇到了不少难题,但是都是通过百度的方法解决了!
- 聊一下这个系统吧,为了满足广大用户的不出户做的外卖订单系统,说白了就是书上的那个案例,要做的其实挺多的,而且书上的bug也是一大堆,我也懒得去缝缝补补了,比如非法输入的等等问题!
二、实现思路
- 首先创建了一个数组类,用来存放数组的!
- 然后创建了一个输出类,用于客户在前台输出的!
- 再然后是创建了一个功能类,用于实现多个功能
- 关于数组类,我用到了继承关系,并没有用到对象,extends关键词,因为我在第一天的时候,那时候的思路是每个功能存放在不同的类中,后来用了半天的时间,去想怎么通过类对象之间,去控制数组类中的元素,但是我发现,一旦切换了方法,对象那边就会重新刷新里面的元素,说白了就是清零,回归默认,所以最终放弃了这个念头,也可能是我的水平不够,无法完成类之间的数组调配。
- 输出类,完全就是实例化了功能类的主页面的方法,直接调用的是功能类中的首页类!
- 功能类,里面也是最复杂的,原本不想复杂的,但是不得不复杂了,里边包含有了几个方法
- 初始化方法ces();
- 首页方法Menu();
- 订餐的功能one();
- 查看订单的功能Bag2();
- 签收订单的功能 Sigo3();
- 删除订单的功能Del4();
- 给菜品点赞的功能Fab5();
- 下面,我就来上代码演示一下,欢迎大神多多指导!小白很多不懂的地方!
三、实现代码
1、数组类ArrayData
public class ArrayData {
int[] Xuhaos = {1,2,3,4};
String[] names =new String[4];
String[] dishMegs = new String[4];
int[] times = new int[4];
String[] addresses = new String[4];
int[] states= new int[4];
double[] sumPrices = new double[4];
String[] dishNames = {"红烧鱼肉","宫保鸡丁","梅菜扣肉","糖醋排骨","空心菜","红烧猪蹄"};
double[] prices = {30,20,25,40,20,50};
int[] praiseName = new int[6];
}
2、输出类Output
public class Output {
public static void main(String[] args) {
Homepage homepage = new Homepage();
homepage.Menu();
}
}
3、功能类Homepage
package com.actual.foodie;
import java.util.Scanner;
public class Homepage extends ArrayData {
Scanner scanner = new Scanner(System.in);
public void ces() {
names[0] = "李小帅";
dishMegs[0] = "红烧猪蹄 2份";
times[0] = 10;
addresses[0] = "广西南宁西乡塘区101号";
states[0] = 0;
sumPrices[0] = 100;
names[1] = "李二帅";
dishMegs[1] = "红烧猪蹄 2份";
times[1] = 10;
addresses[1] = "广西南宁西乡塘区101号";
states[1] = 1;
sumPrices[1] = 10;
}
public void Menu() {
ces();
int sum = -1;
boolean IsExit = false;
do {
System.out.println("\t\t\t\t欢迎使用“吃货联盟订餐系统”");
System.out.println("***********************************************");
System.out.println("1、我要订餐");
System.out.println("2、查看福袋");
System.out.println("3、签收订单");
System.out.println("4、删除订单");
System.out.println("5、我要点赞");
System.out.println("6、退出系统");
System.out.println("***********************************************");
System.out.println("请选择内容:");
int input = scanner.nextInt();
switch (input) {
case 1:
System.out.println("----------------------1、我要订餐----------------------");
one();
break;
case 2:
System.out.println("----------------------2、查看福袋----------------------");
Bag2();
break;
case 3:
System.out.println("----------------------3、签收订单----------------------");
Sigo3();
break;
case 4:
System.out.println("----------------------4、删除订单----------------------");
Del4();
break;
case 5:
System.out.println("----------------------5、我要点赞----------------------");
Fab5();
break;
case 6:
IsExit = true;
break;
default:
IsExit = true;
break;
}
if (!IsExit) {
System.out.println("输入0返回!");
sum = scanner.nextInt();
} else {
break;
}
} while (sum == 0);
}
boolean isAdd = false;
public void one() {
Scanner Sone = new Scanner(System.in);
for (int i = 0; i < names.length; i++) {
if (names[i] == null) {
boolean isAdd = true;
System.out.println("请输入订餐人姓名:");
String Sname = Sone.nextLine();
System.out.println("序号\t\t" + "菜名\t\t\t" + "单价\t\t\t" + "点赞数\t");
for (int j = 0; j < dishNames.length; j++) {
String prices2 = prices[j] + "元";
String Dian = (praiseName[j]) > 0 ? praiseName[j] + "赞" : "0";
System.out.println((j + 1) + "\t\t" + dishNames[j] + "\t\t" + prices2 + "\t\t" +
Dian);
}
System.out.println("请输入您要点的菜品编号:");
int number = Sone.nextInt();
System.out.println("请输入您要点的份数:");
int quantity = Sone.nextInt();
String NumQuan = dishNames[number - 1] + quantity + "份";
double money = prices[number - 1] * quantity;
double Frei = money >= 50 ? 0 : 5;
double sum = money + Frei;
System.out.println("商家采取整点配餐方法,请输入您的整点配送时间(10~20内):");
int time = Sone.nextInt();
while (time < 10 || time > 20) {
System.out.println("您输入的时间有误!请输入10~20之间的整数!");
time = Sone.nextInt();
}
System.out.println("请输入您的配送地址:");
String add2 = Sone.next();
while (add2 == null) {
System.out.println("您输入的字符有误,请重新输入!");
add2 = Sone.nextLine();
}
System.out.println("-----------------------等待支付------------------------");
System.out.println("订餐成功!");
System.out.println("您订购的是:" + NumQuan);
System.out.println("您的派送地址是:" + add2);
System.out.println("您的配送时间是:" + time + "点整");
System.out.println("您的餐费是:" + money + "\t您的派送费是:" + Frei + "元" + "\t总共:" + sum + "元");
Xuhaos[i] = i + 1;
names[i] = Sname;
dishMegs[i] = NumQuan;
times[i] = time;
addresses[i] = add2;
sumPrices[i] = sum;
break;
}
if (i == names.length - 1) {
System.out.println("目前订单已爆满哦,您已无法继续下单哦!");
}
}
}
public void Bag2() {
System.out.println("序号" + "\t\t" + "订餐人" + "\t\t" + "商品信息" + "\t\t" + "送餐时间" +
"\t\t" + "送餐地址" + "\t\t\t" + "总金额" + "\t\t" + "订单状态");
for (int i = 0; i < names.length; i++) {
if (names[i] != null) {
String state = (states[i] != 0) ? "已完成" : "已预订";
String time = times[i] + "点";
String monay = sumPrices[i] + "元";
System.out.println((Xuhaos[i]) + "\t\t" + names[i] + "\t\t" + dishMegs[i]
+ "\t" + time + "\t" + addresses[i] + "\t" + monay + "\t\t" + state);
}
}
}
public void Sigo3() {
boolean a = false;
Bag2();
System.out.println("请输入您需要签收的订单序号:");
int Xuhao = scanner.nextInt();
for (int i = 0; i < names.length; i++) {
if (Xuhao <= names.length && Xuhao > 0) {
if (states[Xuhao - 1] != 1) {
System.out.println("您确认需要签收吗?y/n");
String yes = scanner.next();
if (yes.equals("y")) {
states[Xuhao - 1] = 1;
System.out.println("您已签收完毕!");
break;
} else {
if (yes.equals("n")) {
System.out.println("已取消签收");
break;
}
}
} else {
System.out.println("您的订单已签收完成,无需再次签收!");
break;
}
}
}
}
public void Del4() {
Bag2();
System.out.println("请输入您需要删除的订单序号:");
int delete = scanner.nextInt();
for (int i = delete - 1; i < states.length; i++) {
if (states[i] == 0) {
System.out.println("-----------------------------------签收明细------------------------------------");
System.out.println("当前状态为已预订,无法删除,请先签收订单再删除!");
Sigo3();
break;
}
for (int j = delete - 1; j < Xuhaos.length - 1; j++) {
Xuhaos[j] = Xuhaos[j + 1];
names[j] = names[j + 1];
dishMegs[j] = dishMegs[j + 1];
times[j] = times[j + 1];
addresses[j] = addresses[j + 1];
states[j] = states[j + 1];
sumPrices[j] = sumPrices[j + 1];
}
int[] X = {1, 2, 3, 4};
Xuhaos = X;
int Qing = Xuhaos.length - 1;
Xuhaos[Qing] = 0;
names[Qing] = null;
dishMegs[Qing] = null;
times[Qing] = 0;
addresses[Qing] = null;
states[Qing] = 0;
sumPrices[Qing] = 0;
System.out.println("删除完毕!");
return;
}
}
public void Fab5() {
System.out.println("序号\t\t" + "菜名\t\t\t" + "单价\t\t\t" + "点赞数\t");
for (int j = 0; j < dishNames.length; j++) {
String prices2 = prices[j] + "元";
String Dian = (praiseName[j]) > 0 ? praiseName[j] + "赞" : "0";
System.out.println((j + 1) + "\t\t" + dishNames[j] + "\t\t" + prices2 + "\t\t" +
Dian);
}
for (int i = 0; i < dishNames.length+1; i++) {
System.out.println("请输入您要点赞的菜品序号:");
int Zan = scanner.nextInt();
if (Zan==0||Zan>6){
System.out.println("输入有误!请重新输入!");
Fab5();
break;
}
for (int x = 0; x < dishNames.length+1; x++) {
if (Zan == x){
System.out.println("您要点赞的序号是:"+x+"号菜品,菜品是:"+dishNames[x-1]);
System.out.println("请输入您要点赞的数量:");
int noe = scanner.nextInt();
praiseName[x-1] = noe+praiseName[x-1];
System.out.println("点赞成功!感谢您的使用!继续点赞请按1,返回主页请按2");
int Jx = scanner.nextInt();
switch (Jx){
case 1 :
Fab5();
break;
case 2:
Menu();
break;
}
}
}
}
}
}
四、总结
- 1、其实说白了,这个代码的bug很多,不过比书上的好一点,我自己都懒得缝缝补补,自己加几个if判断就可以了,因为来看到目前这段话的,也肯定是不会抛出异常的,只能说避免bug,要彻底解决,还需要点时间!
- 2、 通过这次实战,也让我明白了自己的基础知识有多不稳定,连数组的删除那一段都是挺勉强的,让我最无解的还是不同类调用对象的数组时如何做到同时改动,这个还是等后面学习才能慢慢理解了!
- 3、代码使用了继承,因为我怕使用对象出现的问题可能会多点,而且代码量也会增多,当然这里也还没使用封装,安全性还是低了点(其实是我运用不熟练)!
- 4、 有一个地方需要注意,就是继承父类的时候,子类跟父类的属性一定要一致,比如子类使用了static修饰符,那就无法继承父类的属性了,父类的也同理!包括同类中的方法也是,如果使用了static静态修饰符,那么就无法方法非静态的方法了!
- 5、再需要注意的便是注意数组的内存溢出问题!然后就没有其他的了,好好加油吧!!! 相信自己,能自己手打,就自己手打!