- 学习知识点
- 掌握OOP思想
- 熟悉操作数组,循环,判断等基础语法
- 从实战中累计经验
需求分析:
(1)现今已经进入网络时代,人们的日常生活已经离不开网络,如网上购物、看新闻、交友等。 (2)“只要点点手指,就能送餐上门”,网上订餐越来越受到都市年轻人的青睐。 (3)现要求开发一个网上订餐系统,需要实现我要订餐、查看餐袋、签收订单、删除订单、我要点赞和退出系统6个功能。 难点分析: 1、 使用数组对象保存订单信息 (1)根据本项目的需求分析可知,每条订单的信息都包括订餐人姓名、选择菜品及份数、送餐时间、送餐地址、订单状态、总金额,并且会有多条订单信息,可以使用数组来保存多条相同的信息。 (2)定义6个数组分别保存订单的订餐人姓名、选择的菜品及份数、送餐时间、送餐地址、订单状态、总金额。 (3)各数组中下标相同的元素组成一条订单信息。
思路:需要一个订餐系统,用键盘输入来判断功能,这里肯定需要switch循环,订餐就是添加菜单,最后返回的肯定是一条订单,我们可以创建一个订单类,还需要一个菜单来提供给我们点菜,最后点完的菜需要放进数组中存储,后面的功能来 操作数组即可;
代码如下
首先创建两个对象
1.订单类
package xiangmu_2;
import jdk.dynalink.beans.StaticClass;
/**
* po为订单类,一次可生成一条订单
* 该类中只提供了构造方法和get,set方法
* @lihuilong
*/
public class Po {
private String Name;//订单姓名
private String Address;//订单地址
private String DishMegs;//订单中选择的餐袋,从菜单中选择的菜品放进餐袋中
private int time;//订单时间
private int State=0;//订单状态
private double Sumprice;//订单总金额
private int df;//订单份数
public Po() {
}
public int getDf() {
return df;
}
public void setDf(int df) {
this.df = df;
}
public int getState() {
return State;
}
public void setState(int state) {
State = state;
}
public Po(String name, String address, String dishMegs, int time, double sumprice, int df, int State) {
Name = name;
Address = address;
DishMegs = dishMegs;
this.time = time;
Sumprice = sumprice;
this.df=df;
this.State=State;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getAddress() {
return Address;
}
public void setAddress(String address) {
Address = address;
}
public String getDishMegs() {
return DishMegs;
}
public void setDishMegs(String dishMegs) {
DishMegs = dishMegs;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public double getSumprice() {
return Sumprice;
}
public void setSumprice(double sumprice) {
Sumprice = sumprice;
}
}
2.菜单类
package xiangmu_2;
/**
* 该订单为系统给出的两个菜单
* 该类提供了构造方法和get,set方法,和一个输出菜单的方法
* @lihuilong
*/
public class Dish {
private int Dno;//菜的序号
private String name;//菜名
private double price;//菜的单价
private int praiseNums;//菜品的点赞量
public Dish() {
}
public int getDno() {
return Dno;
}
public void setDno(int dno) {
Dno = dno;
}
public Dish(int Dno, String name, double price, int praiseNums) {
this.Dno=Dno;
this.name = name;
this.price = price;
this.praiseNums = praiseNums;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getPraiseNums() {
return praiseNums;
}
public void setPraiseNums(int praiseNums) {
this.praiseNums = praiseNums;
}
public void info(){
System.out.println(Dno+"\t\t\t\t"+name+"\t\t\t\t"+price+"\t\t\t\t"+praiseNums);
}
}
程序运行代码如下
package xiangmu_2;
/**该类为主要程序入口
* 实现最基础的增删改查
* @lihuilong
*/
import java.util.Scanner;
public class OrderingMgr {
public static void main(String[] args) {
Methood.outinfo();//调用了输出界面的方法
Methood methood = new Methood();//实例化方法
Scanner sc = new Scanner(System.in);
while(true){//循环
int SC = sc.nextInt();//键盘输入数字进入switch选择
switch (SC) {
case 0:
Methood.outinfo();//当输入0的时候返回程序主页
continue;
case 1:
methood.dishinfo();//调用了查看菜单的方法
methood.createPo();//生成一条订单
continue;
case 2:
methood.AllInfo();//调用查看所有菜袋的方法
continue;
case 3:
methood.signPo();//调用签收菜袋的方法
continue;
case 4:
methood.del();///调用删除菜袋的方法
continue;
case 5:
methood.like();//实现点赞功能
continue;
default:
System.out.println("输入的操作有误\t\t\t\t欢迎下次光临");//退出程序
break;//退出switch
}
break;//退出循环
}
}
}
3.方法类(所有的主要的步骤都在这一类,也是难点的地方)
(1)先初始化两个菜单供客人选择
public class Methood {
/**默认给出两个菜单,将菜单存放到数组中
* @lihuilong
*/
//默认给出两个菜单
Dish dish1 = new Dish(1, "鱼香肉丝", 25, 15);
Dish dish2 = new Dish(2, "酸菜鱼", 30, 25);
Dish[] dishes = new Dish[]{dish1, dish2};
//定义一个数组,将两条菜单放进去
dishMegs[] dis = new dishMegs[4];
(2)创建订单的实例将 他们放进数组中,默认订单总共为6条
//分配4个Po数组对象的空间
Po[] PO = new Po[]{new Po(),new Po(),new Po(),new Po()};
(3)在后面的代码中我们需要重复使用到循环订单,取出订单为空的那条,在这里,我们将他作为方法拿出来
//取出数组中午的空索引位置
public int suoyin(){
int index= PO.length;
for (int i = 0; i < 4; i++) {
if (PO[i].getName()==null){
index=i;
break;
}
}
return index;
}
(4)输出菜单代码
//输出菜单信息
public void dishinfo() {
System.out.println("欢迎点餐,本店有以下几种菜品");
System.out.println("序号\t\t\t\t菜名\t\t\t\t\t单价\t\t\t\t点赞量");
System.out.println();
dish1.info();
dish2.info();
}
(5)输出主程序的方法
//输出语句
public static void outinfo() {
System.out.println("-------------- 请输入您要执行的操作 --------------");
System.out.println();
System.out.println("0.返回菜单\t\t\t1.我要订餐\t\t\t2.查看餐袋\t\t\t3.签收订单\t\t\t4.删除订单\t\t\t5.我要点赞\t\t\t");
}
(6)订餐模块具体代码
//我要订餐
/**
* 订单时间要求大于10小于20
* 增加一个配送费fee,如果订单超过50,配送费为0,否则增加6元配送费
* @lihuilong
*/
public Po[] createPo() {
int index = suoyin();
Scanner sc = new Scanner(System.in);
int fee=0;
for (int i = index; i < 4; i++) {
if (index!=5){
System.out.println("请输入您需要的菜品序号");
int dn = sc.nextInt();
PO[index].setDishMegs(dishes[dn-1].getName());
System.out.println("请输入您需要的份数");
PO[index].setDf(sc.nextInt());
System.out.println("请输入您的姓名");
String Sname = sc.next();
PO[index].setName(Sname);
System.out.println("请输入您的收货地址");
String Saddress = sc.next();
PO[index].setAddress(Saddress);
System.out.println("请输入收货时间10-20");
int Stime = sc.nextInt();
while(true) {
if (Stime < 10 || Stime > 20) {
System.out.println("时间输入错误,请重新输入");
Stime = sc.nextInt();
}PO[index].setTime(Stime);
break;
}
fee=(dishes[dn-1].getPrice()*PO[index].getDf()>50)?0:6;
PO[index].setSumprice(PO[index].getDf()*dishes[dn-1].getPrice()+fee);
}else {
System.out.println("订单已满");
return null;
}
break;
}
/**
* 将创建的订单打印出来
* @lihuilong
*/
System.out.println("您的订单为:");
System.out.println("姓名:\t\t"+PO[index].getName());
System.out.println("地址:\t\t"+PO[index].getAddress());
System.out.println("送餐时间:\t\t"+PO[index].getTime());
System.out.println("菜品:\t\t"+PO[index].getDishMegs()+PO[index].getDf()+"份");
System.out.println("配送费:\t"+fee+"\t总金额:"+PO[index].getSumprice());
return PO ;
}
(7)查看餐袋
//查看菜单
public void AllInfo (){
int index = suoyin();
System.out.println("订单号\t\t\t订单姓名\t\t\t订单地址\t\t\t订单时间\t\t\t订单菜品\t\t\t订单总金额\t\t\t状态");
for (int i = 0; i <index; i++) {
System.out.print(i+1+"\t\t\t\t"+PO[i].getName()+"\t\t\t\t"+PO[i].getAddress()+"\t\t\t\t"
+PO[i].getTime()+"\t\t\t\t"
+PO[i].getDishMegs()+PO[i].getDf()+"份"+"\t\t\t\t"+PO[i].getSumprice());
if (PO[i].getState()==0){
System.out.print("\t\t\t已预定");
}else {
System.out.print("\t\t\t已完成");
}
System.out.println();
}
}
(8)签收模块
/**1.签收菜单模块
* 2.判断菜袋的状态如果为0,则可以签收,否则失败
* @lihuilong
*/
public void signPo(){
System.out.println("请输入你想签收的订单序号");
Scanner sc = new Scanner(System.in);
int i1 = sc.nextInt();
for (int i = 0; i < 4; i++) {
if (i1==i+1){
if (PO[i].getState()==0){
PO[i].setState(1);
System.out.println("签收完毕");
break;
}
else{
System.out.println("订单已签收");
}
}
if (i1>PO.length){
System.out.println("没有找到该订单");
}
}
}
(9)删除菜袋
/**难点1.找到订单并判断,如果订单未签收不能删除
* 2.将删除后的订单从后依次往前移一位
* @lihuilong
*/
public void del(){
System.out.println("请输入你想删除的订单序号");
int suoyin = suoyin();
Scanner sc = new Scanner(System.in);
int i1 = sc.nextInt();
for (int i = 0; i < suoyin-1; i++) {
if (i1==i+1){
if (PO[i].getState()==0){
System.out.println("订单未签收,请签收");
}else{
PO[i].setName(null);
System.out.println("删除成功");
}
}
}
//将删除后的订单依次往前移动一位
for (int i = 0; i < suoyin; i++) {
PO[i].setName(PO[i+1].getName());
PO[i].setAddress(PO[i+1].getAddress());
PO[i].setTime(PO[i+1].getTime());
PO[i].setDishMegs(PO[i+1].getDishMegs());
PO[i].setDf(PO[i+1].getDf());
PO[i].setSumprice(PO[i+1].getSumprice());
PO[i].setState(PO[i+1].getState());
}
PO[PO.length-1].setName(null);
}
(10)点赞模块
//我要点赞
public void like(){
dishinfo();
System.out.println("请输入你要点赞的菜品序号");
Scanner sc = new Scanner(System.in);
int i1 = sc.nextInt();
for (int i = 0; i < dishes.length; i++) {
if (i1==1+i){
int praiseNums = dishes[i].getPraiseNums();
dishes[i].setPraiseNums(praiseNums+1);
}
}
}
注:随便写写的,大佬们轻喷,有觉得写的不对的地方,感谢指明
仅供参考