以吃货联盟初级改版为例,(面向对象初级程序设计模拟网上点餐控制台程序(第一版未使用工具辅助类)。

  1. 面向对象最初级程序设计思维:设计过程与抽象过程,(类是对象的模板与抽象,是具有相同属性和方法的一组对象的集 合,对象是类的实体,由属性与行为共同组成一个具体的实体。)
  2. 类与对象的关系:类是对象抽象,对象是类的实例化实体。
  3. 使用类图理解类的关系
  4. 面向对象三大特性应用:1、封装 ;2、继承;3、多态;是程序设计更符合人思考的方式。
  5. 封装:{维护数据安全性将属性私有化(以包机制,与private修饰成员)};
  6. 继承:{再有包含关系的使用时,有助于提升代码的重用性,减少代码的冗余}。注:单根继承,多实现;特点方法重写。
  7. 多态:{再有继承关系与实现关系下一种定义多种形态,包括:向上转型,父类对象指向子类实例;向下转型子类类型指向父类对象;方法重写实现引用的动态绑定机制。多态的应用使得程序的可维护性与可扩张性更强更灵活 }。
  8. java异常的捕获!维护程序Exception类的运行Bug.......
  9. javaDoc:API帮助文档。
  10. 基础面向对象设计核心以上6点

    步骤1、发现类:分析需求将需要操作的对象与操作流程列举出来!抽象出包含关系的类,并将类分成bean类与util类与assist类。

     步骤2、发现类的属性:

     步骤3、发现类的方法:

     步骤4、优化设计:(辅助类)。


   

     下面依次为 测试类,工具类,实体类,界面辅助类

//测试类

package com.test;

import java.util.InputMismatchException;

import javax.sound.midi.SysexMessage;
import javax.swing.plaf.synth.SynthSeparatorUI;

import eat.util.EatManager;

/**
 * 测试吃货联盟系统的使用功能
 * @author ASUS
 *
 */
	 public class TestEat {
            //吃的唯一大亏就是没有辅助工具,每次遍历数组与if判断太沉重了
	    public static void main(String[] args) {
		//创建管理工具业务操作对象
		EatManager em=new EatManager();
	    do{
		try{
		  //来个欢迎语
		  em.hello();
		  //点餐前登陆系统   
		  em.men.show();
		  //根据界面选择要执行的功能编号
		  int number=em.getNumber();							
		  //执行该功能编号
		   em.execure(number);
	        }catch(InputMismatchException e){
		   System.err.println("您录入的格式或范围不对!!"
	        }catch(NullPointerException e){
	           System.err.println("获取当前对象失败!!");
	        }catch(Exception e){
	           System.out.println(e.getMessage());
               }
           }while(true);
	
}
	//	 take care:longinfo variable:is  of User1 class,when at  use Object attribute it only belong User class.
	}


//工具类manager


	package eat.util;
	
	import java.util.InputMismatchException;
	import java.util.Scanner;
	
	import com.assist.LongInfo;
	import com.assist.MainMenu;
	import com.assist.Menu;
	import com.assist.OrderMenu;
	import com.assist.Service;
	import com.assist.UserInfo;
	import com.user.bean.Order1;
	import com.user.bean.User1;
	
	
	/**
	 * 吃货联盟业务需求工具类,用于业务对象的点餐管理
	 * 用于界面获取,数据获取,协助使用流程控制
	 * 
	 * @author ASUS
	 *
	 */
	public class EatManager {
		//需要操作的时用户点餐,所以用户数据的交互是一定存在的。
		public	User1 longinfo=null;
		//界面管理,开始默认时登陆界面
		public Menu men=new LongInfo();			//用对象管理类,对象和实体类建立好了以后,根据流程直接写;
		//数据调用交互对象							//由于跨包使用需要public修饰			
		public EatDataCenter1   edc=new EatDataCenter1();
		
		/*
		 * 获取String输入的方法
		 */
		public String getString(String need){
			Scanner input=new Scanner(System.in);
			System.out.print(need);
			String number=input.next();
			return number;
			
		}
		
		/*
		 * 创建获取int输入方法
		 */
		
		private  int getInt(String need){
			Scanner input=new Scanner(System.in);
			System.out.print(need);
			int number=input.nextInt();
			return number;
		}
		
		/*
		 * 获取功能编号
		 */
		public int getNumber()throws InputMismatchException,NullPointerException,Exception{
			int number=getInt("请输入您要操作的功能编号:");
			return number;
		}
		/*
		 * 执行功能编号
		 */
		public void execure(int number)throws InputMismatchException,NullPointerException,Exception{
			//判断对象mu1属于哪个界面的对象执行对应的功能序号。
			if(men instanceof LongInfo){
				switch(number){
					case 1:
						System.out.println("\n>>>用户登陆<<<\n");
						//登陆后需要标记longinfo,并且切换至主菜单对象更换
						longin();
						break;
					case 2:
						System.out.println("\n>>>用户注册<<<\n");
						//注册完成需要重新登陆
						register();
						break;
					case 3:
						System.out.println("感谢您对本系统的使用再见~~");
						System.exit(1);
						break;
					default :
						judge(number);
				}
				//主菜单功能
			}else if(men instanceof MainMenu){
					switch(number){
					case 1:
						System.out.println("\n>>>我要订餐<<<\n");
						//点餐就是生成根据用户编号对应的点餐订单,,即写代码按照生成点餐订单的流程
						order();
						break;
					case 2:
						System.out.println("\n>>>个人信管理<<<\n");
						//需要切换菜单对象
						men=new UserInfo();
						break;
					case 3:
						System.out.println("\n>>>个人订单管理中心<<<\n");
						//需要切换对应菜单对象
						men=new OrderMenu();
						break;
					case 4:
						System.out.println("\n>>>菜品信息评价<<<\n");
						//注意付给数据的正负
						 appraiseDish();
						break;
					case 5:
						System.out.println("\n>>>客服中心<<<\n");
						//切换客户界面所属对象
						men=new Service();
						break;
					case 6:
						men=new LongInfo();
						//返回后需要longinfo 置空。
						longinfo=null;
						break;
					default :
						if(number<1||number>6){
							System.out.println("您录入的编号范围有误请重新输入1~6整数\n");
						}else{
							throw new Exception("您录入格式不正确,请重新录入\n");
						}
					}
				//个人用户管理中心
			}else if(men instanceof UserInfo){
					switch(number){
					case 1:
						System.out.println("\n>>>用户信息如下<<<\n");
						//个人用户信息属于私密信息需要密码验证才能查看
						showLongInfo();
						break;
					case 2:
						System.out.println("\n>>>修改密码<<<\n");
						//先验证原密码;;;修改成功需要重新登陆并且把当前longinfo置空
						modifierPasswd();
						break;
					case 3:
						System.out.println("\n>>>修改送餐地址<<<\n");
						//需先验证密码
						modifierAddress();
						break;
					case 4:
						System.out.println("\n>>>更换联系方式<<<\n");
						//需要先验证密码
						changePhone();
						break;
					case 5:
						System.out.println("\n>>>更改昵称<<<\n");		
						//需要先验证密码
						changeNick();
						break;
					case 6:
						//返回主功能界面需要切换界面
						men =new MainMenu();
						break;
					default :
						if(number<1||number>6){
							System.out.println("您录入的编号范围有误请重新输入1~6整数\n");
						}else{
							throw new Exception("您录入格式不正确,请重新录入\n");
						}
					}
				//订单信息管理中心
			}else if(men instanceof OrderMenu){
					switch(number){
					case 1:
						System.out.println("\n>>>个人订单如下<<<\n");
						//打印个人用户当前所有订单   只要是longinfo=edc.user[i]对象的,那么订单信息就打印出来
						lookForOrder();
						break;
					case 2:
						System.out.println("\n>>>支付订单<<<\n");
						//订单状态为 以预定”1“与待付款的才能付款”2“,
						payBill();
						break;
					case 3:
						System.out.println("\n>>>您的待签收订单号如下<<<\n");
						//前提条件是属于当前用户的订单并且录入订单号是已付款未签收的。
						signOrder();
						break;
					case 4:
						System.out.println("\n>>>您的可删除订单如下<<<\n");
						//前提条件是属于当前用户的订单并且录入订单号是已签收的。
						deleteOrder();
						break;
					case 5:
						//返回主功能界面需要切换界面
						men =new MainMenu();
						break;
					default :
						if(number<1||number>5){
							System.out.println("您录入的编号范围有误请重新输入1~3整数\n");
						}else{
							throw new Exception("您录入格式不正确,请重新录入\n");
						}
					}
					//客服服务中心
			}else if(men instanceof Service){
					switch(number){
					case 1:
						System.out.println("\n>>>找回密码\n");
						//找回密码实在忘记原密码的情况做的一个操作。设定一个私有密码属性只提供GET接口,
						//并且密保为存储常量,只能通过对应的构造方法与对应用户的ID才能存入。
						retrievePassword();
						break;
					case 2:
						System.out.println("\n>>>建议留言\n");
						//设定一个数据中心的留言板,前提用登陆信息不为空
						suggest();
						break;
					case 3:
						System.out.println("\n>>>人工服务\n");
						//人工服务用于解决
						madeService();
						break;
					case 4:
						//返回上一级菜单需要做菜单切换
						men=new MainMenu();
						break;
					default :
						if(number<1||number>4){
							System.out.println("您录入的编号范围有误请重新输入1~4整数\n");
						}else{
							throw new Exception("您录入格式不正确,请重新录入\n");
						}
				}
			}
		}
		/**
		 * 录入判断
		 * @throws Exception 
		 */
		private void judge(int number) throws InputMismatchException, Exception {
			if(number<1||number>3){
				System.out.println("您录入的编号范围有误请重新输入1~3整数\n");
			}else{
				throw new Exception("您录入格式不正确,请重新录入\n");
			}
		}

		/**UnsatisfiedLinkError
		 * 菜品评价
		 * @throws Exception 
		 */
		private void appraiseDish() throws InputMismatchException,NullPointerException, Exception {
			boolean flag=false;
			DishNameMenu();
			int number =getInt("\n请输入您需要评价的菜品编号:");
			for (int i = 0; i < edc.dish.length; i++) {
				if(edc.dish[i]==null)  break;
				if(edc.dish[i].getDishID()==number){
					flag=true;
					int appraise=getInt("请对"+number+"号菜品做出您的评价,赞为正数,踩为负数:");
					int sumAppraise=appraise+edc.dish[i].getAppraise();
					edc.dish[i].setAppraise(sumAppraise);
					System.out.println("\n第"+number+"号菜品评价成功,您对该菜品的评价结果为:"+appraise+"赞");
					break;
				}
			}
			if(!flag){
				throw new Exception("您输入的格式或者范围不对~~");
			}
			
		}
	
		/**
		 * 人工服务
		 */
		private void madeService() {
			if(longinfo!=null){
				System.out.println("请拨打客服电话400600~~");
			}else{
				System.out.println("操作异常请从新登陆");
				longinfo=null;
				men=new LongInfo();
			}
		}
	
		/**
		 * 
		 */
		private void suggest() {
			if(longinfo!=null){
				String suggest=getString("感谢"+longinfo.getUserNock()+longinfo.getSex()+"您对本系统的使用,请您在下方给我们留下宝贵的建议~~");
			//遍历留言板
				for (int i = 0; i <edc.str.length; i++) {
					if(edc.str[i]==null){
						edc.str[i]=suggest;
						System.out.println("留言成功!感谢"+longinfo.getUserNock()+longinfo.getSex()+"给我们的宝贵意见~~");
						break;
					}
				}
			}else{
				System.out.println("操作异常请从新登陆");
				longinfo=null;
				men=new LongInfo();
			}
		}
	
		/**
		 * 找回密码
		 */
		private void retrievePassword(){
			//属于提供用户的密保
			String pwd=getString("请输入您的密保:");
			for (int i = 0; i < edc.pwd.length; i++) {
				if(edc.pwd[i]==null)  break;
					//遍历找寻该用户的密保   只要该密保数组的对象地址是longinfo的
				if(edc.pwd[i].getPwd2().equals(pwd)){
				String newPwd=getString("请输入您的新密码:");
				String  towNewPwd=getString("请再次输入您的新密码:");
				if(newPwd.equals(towNewPwd)){
					System.out.println("密码找回成功!请从新登陆~\n");
					//找回密码后 保存新密码
					longinfo.setPasswd(towNewPwd);
					longinfo=null;
					men=new LongInfo();
				}else{
					System.out.println("您两次录入的密码不一致,找回失败!");
					break;
				}
				}else{
					System.out.println("抱歉您输入的密保有误,请联系客服处理~~");
					break;
				}
			}
		}
		/**
		 * 删除订单
		 * @throws Exception 
		 */
		 private void deleteOrder() throws InputMismatchException,NullPointerException, Exception{
			//假设每次只签收一条订单,第二次操作需重新选择签收功能
		 		lookForOrder();
		 		int id=getInt("\n请输入您要删除的订单编号:");
		 		//遍历数组,遍历属于该用户的订单
		 		System.out.println("您待删除的订单状态如下");	
		 		for (int i = 0; i < edc.order.length; i++) {
					if(edc.order[i]==null)  break;
					
					if(edc.order[i].getState().equals("已签收")){
						//对象的销毁不能==null
//								edc.order[i]==null;
						edc.order[i].equals(null);
						System.out.println("订单号"+id+"删除成功!");
						break;
					}
					if(id!=edc.order[i].getOrderId()||edc.order[i].getStatus()>2||longinfo.getUserID()!=edc.order[i].getUserId()){
				    	throw new Exception("您录入的订单编号有误或者已支付!!");
					}
		 		}
		    }
		/**
		 * 签收订单
		 * @throws InputMismatchException,NullPointerException,Exception 
		 */
		 	private void signOrder() throws InputMismatchException,NullPointerException,Exception{
		 		//假设每次只签收一条订单,第二次操作需重新选择签收功能
		 		lookForOrder();
		 		int id=getInt("\n请输入您要签收的订单编号:");
		 		//遍历数组,遍历属于该用户的订单
		 		System.out.println("您待签收的订单状态如下");	
			 		for (int i = 0; i < edc.order.length; i++) {
						if(edc.order[i]==null)  break;
						if(edc.order[i].getState().equals("已付款")&&longinfo.getUserID()!=edc.order[i].getUserId()){
							edc.order[i].setStatus(4);
							System.out.println("订单号"+id+"签收成功!");
							break;
						}  	
						if(id!=edc.order[i].getOrderId()||edc.order[i].getStatus()>2||longinfo.getUserID()!=edc.order[i].getUserId()){
					    	throw new Exception("您录入的订单编号有误或者待支付或已签收!!");
				    		
				    	}
					}
		 	}
		
		/**
		 * 支付订单
		 * @throws Exception 
		 */
		private void payBill() throws InputMismatchException ,Exception {
			int index=-1;
			if(longinfo.equals(edc.order[0])){
				 index=1;
			}
			
			//假设每次只支付一条订单让后回到订单管理界面
			lookForOrder();
			//计算机的思维何人不一样,思考需要判定,运算根据判定依据做出逻辑运算,否则就会出现运行Bug.
				int id=getInt("\n请输入您要支付的订单编号:");
				
				//遍历数组:1、属于longinfo.getUserID的订单,并且,2、订单状态必须为1与2所对应状态。付款后属性为3.
				System.out.println("您待付款订单状态如下");				
				for (int i = 0; i <edc.order.length; i++) {
					if(edc.order[i]==null)  break;
					if(id==edc.order[i].getOrderId()){
						index=i;
					}
					
					//保证是自己的订单,并且订单号对上号,并且是属于未支付状态的订单。  
						if(edc.order[index].getUserId()!=longinfo.getUserID()&&edc.order[i].getState().equals("已预定")
									||edc.order[i].getState().equals("待付款")){
						 double pay=getInt(id+"号订单需要支付的金额为:"+edc.order[i].getSumPrice()+"元:");
						 if((pay-edc.order[i].getSumPrice())>=0){
							 System.out.println("找零:"+(pay-edc.order[i].getSumPrice())+"元,支付成功谢谢!!");
							 //修改订单状态
							 edc.order[i].setStatus(3);	
							 break;
						 }else if((pay-edc.order[i].getSumPrice())<0){
							 System.out.println("\n抱歉,支付金额不足支付失败~~~~");
							 break;
					 }			 
				 }
				  //支付结果就两种结果支付与不支付,,  
				  //影响支付的就两种情况,订单号不对或者该订单已经支付(但前者的影响值包含后者的结果所以可以放到一个if判定中)
					 if(id==edc.order[i].getOrderId()||edc.order[i].getStatus()>2||
							 longinfo.getUserID()!=edc.order[i].getUserId()){
			    	throw new Exception("您录入的订单编号有误或者已支付!!");
			    		
			    	}
				}
		}
	
		/**
		 * 查看用户的个人订单信息
		 */
		private void lookForOrder() {
		
		   System.out.println("订单编号\t订单人\t菜品名称\t菜品份数\t菜品单价\t订单总价\t\t订单状态");
		 //遍历当前用户的userID order fornation
			for (int i = 0; i < edc.order.length; i++) {
			//防止空指针
			if(edc.order[i]==null)  break;
			//只要是longinfo对象的,那么订单信息就是他的,用户ID是唯一的   iD是int基本数据只能==判定
			 if(edc.order[i].getUserId()==(longinfo.getUserID())){
					System.out.println(edc.order[i].getOrderId()+"\t"+longinfo.getUserNock()+"\t"+
					edc.dish[edc.dish[i].getDishID()-1].getDishName()+"\t"+edc.order[i].getCount()+"\t"+
					edc.dish[edc.dish[i].getDishID()-1].getPrice()+"\t"+edc.order[i].getSumPrice()+
					"\t\t"+edc.order[i].getState());
				}
			}
		}
	
		/**
		 * 修改用户昵称
		 */
		private void changeNick() {
			//密码核对
			boolean flag=	cheakPasswd();
			if(flag){
				String nick=getString("\n请输入您的昵称:");
				longinfo.setUserNock(nick);
				System.out.println("修改成功!您的新昵称为:"+nick+"\n");
			}else{
				System.out.println("抱歉!密码错误您还没有此权限!!");
			}
			
		}
	
		/**
		 * 更改联系方式
		 */
		private void changePhone() {
			//核对密码
			boolean flag=	cheakPasswd();
			if(flag){
				String phone=getString("\n请输入您的新手机号:");
				longinfo.setPhone(phone);
				System.out.println("修改成功!您的新联系方式为:"+phone+"\n");
			}else{
				System.out.println("抱歉!密码错误您还没有此权限!!");
			}
		}
	
		/**
		 * 个人信息显示
		 */
		private void showLongInfo() {
			boolean flag=	cheakPasswd();
			if(flag){
			System.out.println("用户编号\t+用户名\t用户密码\t用户昵称\t用户性别\t用户年龄\t用户联系方式\t\t用户用餐地址");
			for (int i = 0; i < edc.user.length; i++) {
				if(edc.user[i]==null)  break;
				if(longinfo.getUserID()==edc.user[i].getUserID()){
				System.out.println(longinfo.getUserID()+"\t"+longinfo.getUserName()+"\t"+longinfo.getPasswd()+"\t"
									+longinfo.getUserNock()+"\t"+longinfo.getSex()+"\t"+longinfo.getAge()+"\t"
									+longinfo.getPhone()+"\t\t"+longinfo.getAddress());
				}
			}
			}else{
				System.out.println("抱歉!密码错误您还没有此权限!!");
			}
		}
	
		/*
		 * 登陆功能
		 */
		private void longin()  {
			/* 1. 获取登录需要的数据 */
			//用户名
			String userName = getString("请输入您的用户名:");
			//密码
			String password = getString("请输入您的密码:");
			
			//验证登陆::数据操作一般方法数据中心
			User1 user = edc.login(userName, password);
			
			/* 3. 根据登录结果处理后续操作 */
			if(user == null){
				System.out.println("\n登陆失败用户名或密码错误!\n");		
				return;
			}
			//切换菜单:    为什么要切换菜单;;目的时多态的应用解决了函数嵌套
			men = new MainMenu();
			//保存登录用的信息
			//为什么要用一个用户保存登陆信息,目的方便后续操作,和退出注销,   ,,这个是重点
			longinfo = user;	
	}
		
	/**
	 * 欢迎语
	 */
		public void hello()throws NullPointerException,Exception{
			if(men instanceof MainMenu){
				System.out.println("\n"+longinfo.getUserNock()+longinfo.getSex()+"您好!\n");
			}
		}
		
		/*
		 * 用户注册
		 */
		private void register(){
			//细节来一个获取下表为空的index;
			int index=-1;
			//输入数据
			int age=getInt("请输入您的年龄:");
			if(age>15&&age<60){
			  String name=getString("请录入您的用户名:");
			  String pwd=getString("请录入您的用密码:");
			  //遍历数组//看用户名是否存在,回到登陆界面,在注册徐重新选择编号2
			  for (int i = 0; i <edc.user.length; i++) {			
				if(edc.user[i]==null){
					String pwd2=getString("请再次输入您的注册密码:");
				   if(pwd2.equals(pwd)){
					String phone=getString("请录入您的电话号码:");
					int sex=getInt("请录入您的性别:");
					String nick=getString("请录入您的昵称:");
					int id=edc.maxID(edc.maxUserID)+1;
					String address=getString("请输入您的送餐地址:");
					//设定二级密保用于找回密码
					for (int j = 0; j <edc.pwd.length; j++) {
						if(edc.pwd[j]==null){
							String pwd3=getString("请输入您的二级密保:");
							edc.pwd[j]=new User1(pwd3,id);
							System.out.println("密保保存成功请牢记~~");
							break;
						}	
					}
					edc.user[i]=new User1(id,name,pwd,nick,sex,age,phone,address);
					System.out.println("\n恭喜"+nick+edc.user[i].getSex()+"您已注册成功!请重新登陆。\n");
					break;
				}else{
					System.out.println("注册失败,您两次录入的密码不一致");
					break;
				}
				}else if(edc.user[i].getUserName().equals(name)){
					System.out.println("注册失败您输入的用户名已经存在~~");
					break;
				}
			  }
			}else{
				System.out.println("对不起您目前不符合网上订餐需求!合法年龄为15到60周岁~~\n");
			}
		}
		/**
		 * 点餐
		 */
		private void order(){
			//标记
			int index=-1;
			//显示菜品信息供用户选择
			DishNameMenu();
			//需要填写的时=是,选择菜品,份数,送餐时间,是否付款
			int number=getInt("\n请选择您喜欢的菜品编号:");
			while(number<1||number>7){
				number=getInt("您选择的菜品编号有误!请从新选择1~7");
			}
			int count=getInt("请选择您喜欢的菜品份数:");
			int time=getInt("请输入您的预定时间 :");
			//订单默认生成加1
			int ordID=edc.maxID()+1;
			double sum=edc.dish[number-1].getPrice()*count;
			for (int i = 0; i < edc.order.length; i++) {
				if(edc.order[i]==null){
					edc.order[i].setStatus(1);
					index=i;
				}
				
			}
			System.out.println("\n"+longinfo.getUserNock()+longinfo.getSex()+"您已点餐成功!您的当前点餐信息如下:\n");
			System.out.println("订单编号\t菜品名称\t菜品份数\t菜品单价\t订单总价\t\t订单状态");
			//打印选材信息,输出的订单,菜品编号应该是菜品名,,总价按照菜品编号做下标-1调菜品单价,并且不用显示订单状态
			System.out.println(ordID+"\t"+edc.dish[number-1].getDishName()+"\t"+
							count+"份\t"+edc.dish[number-1].getPrice()+"\t元"+sum+"元\t\t"+edc.order[index].getState());
			String select=getString("\n确认是否开始派单或放弃下单,y|n? :");
			if(select.equals("y")){
				System.out.print("请支付:"+sum+"元:");
				double pay=new Scanner(System.in).nextDouble();
				
				if((pay-sum)>0){
					System.out.println("\n找零:"+(pay-sum)+"元,您的订单已经开始派送!");
					//订单保存,并把订单状态改成阴茎付款
					for (int i = 0; i <edc.order.length; i++) {
						if(edc.order[i]==null){
							edc.order[i]=new Order1(ordID,longinfo.getUserID(),edc.dish[number-1].getDishID(),count,sum,time,3);
						}
					}
				}else {
					System.out.println("\n余额不足~~");
				}
			}else if(select.equals("n")){
				System.out.println("\n订单失败!请从新选择你需要的操作~~");
			//订单编号属于自动生成,用户编号、价格秩序丢用对应的数据,   状态时默认待付款
		}
		}
		/**
		 * 遍历菜品信息的
		 * 
		 */
		private void DishNameMenu(){
			System.out.println("\n***菜品信息如下***\n");
			System.out.println("菜品编号\t菜品名称\t菜品单价\t\t菜品评价");
			//遍历数组输出
			for (int i = 0; i <edc.dish.length; i++) {
				//因为一开始设定了10个长度的菜品存储长度,而手动添加了七道,所以后面的要break掉。
				if(edc.dish[i]==null) break;
				System.out.println(edc.dish[i].getDishID()+"\t"+edc.dish[i].getDishName()+"\t"+edc.dish[i].getPrice()+"元\t\t"+edc.dish[i].getAppraises());
			}
		}
		
		/**
		 * 修改密码属于数据操作理应放到数据管理中心
		 */
		
		private void modifierPasswd(){
			boolean flag=	cheakPasswd();
			if(flag){
				String newPwd=getString("\n请输入您的新密码:");
				String newPwdAgain=getString("请再次输入您的新密码:");
				if(newPwd.equals(newPwdAgain)){
					System.out.println(longinfo.getUserNock()+"您的密码已经修改成功,5S后将重新登陆\n");
					longinfo.setPasswd(newPwd);
					men=new LongInfo();
					longinfo=null;
				}
			}else{
				System.out.println("\n原密码错误!,密码修改失败\n");
			}
		}	
		/**
		 * 修改送餐地址
		 */
		 private void modifierAddress(){
			boolean flag=	cheakPasswd();
			if(flag){
					String address=getString("\n请输入您的新地址内容:");
					longinfo.setAddress(address);
					System.out.println("地址修改成功您的新的送餐地址为:"+address+"\n");
			}else{
				System.out.println("抱歉!密码错误您还没有此权限!!");
				}
			 }
	   /**
	* 用于密码验证修改个人信息部分
	* @return
	*/
		 private boolean  cheakPasswd(){
				String pwd=getString("请输入您的原密码:");
				//应为每次登陆进来都会保存用户登陆信息在longinfo中,所以验证对等问题只需要longinfo调用自己的属性值比对。
				if(longinfo.getPasswd().equals(pwd)){
					return true;
				}
				return false;
		 }
		 
	}
	
	
	
	
	
	//工具类2.操作数据中心
	
package eat.util;


import com.assist.LongInfo;
import com.user.bean.Dish1;
import com.user.bean.Order1;
import com.user.bean.User1;

import jdk.nashorn.internal.runtime.regexp.joni.ScanEnvironment;


/*
 * 面向对象,实际数据的核心就是对象,对象的数据,数据必定是值属性索要操作的值,,行为只是流程。
 * 
 * 所以对象的属性和属性值,由实体类,数据中心承载;; 对象的行为,成为了业务的亏成构成,流程工具类与类,
 * 
 * 只不过一个业务的发展由多个对象构成而已。
 *
 * 此类主要用于操作数据;数据的来源与对象对属性值的操作
 */
		public class EatDataCenter1 {
			//用于管控密保存放
			
			 public static final User1[]pwd=new User1[10];
			 //用户      订单       菜品
			public static User1[]user=new User1[10];
			public static Order1[]order=new Order1[10];
			public static Dish1[]dish=new Dish1[10];
			//菜品编号默认最大值
			public int maxDishID=7;
			//订单编号默认最大值
			public int maxOrderID=102;
			//用户编号默认最大值
			public int maxUserID=1002;
			//用户留言板:留言的是字符串内容
			public static String[]str=new String[10];
			
			//业务需求数据初始化;;数据操作数据中心,静态手动添加,    目标一定是对象
			static{
				//密保信息
				pwd[0]=new User1("jk",1001);
				pwd[2]=new User1("pt",1002);
				//用户信息
				user[0]=new User1(1001,"juck","6666","杰克",1,30,"158888888","意大利德玛镇");			 //根据构造方法添加
				user[1]=new User1(1002,"pet","8888","彼德",2,32,"158999999","北美德克萨斯州");			 //根据构造方法添加
				//订单信息
				order[0]=new Order1(101,1001,1,2,60.0,12,2);													//杰克先生的订单
				order[1]=new Order1(102,1002,3,1,40.0,18,2);													//彼德女士的订单
				order[2]=new Order1(103,1001,5,1,100.0,16,1);												    //杰克先生的订单
				//菜品信息:关于菜的全部初始化
				dish[0]=new Dish1(1,"鸡蛋羹",30.0,33);
				dish[1]=new Dish1(2,"鸡扒",50.0,22);
				dish[2]=new Dish1(3,"红烧萝卜",40.0,-4);
				dish[3]=new Dish1(4,"猪手",100.0,20);
				dish[4]=new Dish1(5,"石锅鱼",60.0,10);
				dish[5]=new Dish1(6,"西红柿面",20.0,13);
				dish[6]=new Dish1(7,"生吃蔬菜",30.0,-19);
				
			}
			//数据中心存放数据数据操作提供给工具类,   跨类交付的一般都是对象用需求实体类做形参与返回值类型。
			/**
			 * 验证用户登陆
			 * @param userName:用户名
			 * @param password:密码
			 * @return
			 */
			public  User1	login(String userName,String password){
				//遍历存储数组比对信息,,,登陆功能用方法实现只需要做一个比对方法把遍历时用户名密码相同的对象给回用户接受数据,
				//接受后不为空则登陆OK,并切换菜单,与保存登陆信息。
				for (int i = 0; i < user.length; i++) {
					if(user[i]==null)  break;					
					if(user[i].getUserName().equals(userName)&&user[i].getPasswd().equals(password)){
						return user[i];						
					}
				}
				return null;
			}
			/*
			 * 获取用户的最大编号
			 */
			public int maxID(int userID){		
				 userID=user[0].getUserID();
				for (int i = 1; i <= user.length; i++) {	
					if(user[i]==null){
						break;
					}							
				if(userID<user[i].getUserID()){
					userID=user[i].getUserID();						
					}
				}
				return userID;
			}
			/**
			 * 获取订单编号的最大值,重载最大值获取方法
			 */
			public int maxID(){		
				 this.maxOrderID=user[0].getUserID();
				for (int i = 1; i <= user.length; i++) {	
					if(user[i]==null){
						break;
					}							
				if(this.maxOrderID<user[i].getUserID()){
					this.maxOrderID=user[i].getUserID();						
					}
				}
				return this.maxOrderID;
			}
		
		}

	


//实体类如下Order 订单实体类

	
	package com.user.bean;
/**
 * 订单实体类;承载订单相关的属性攻数据中心数据交付
 * @author ASUS
 *
 */
			public class Order1 {
				/**订单编号*/
				private  int orderId;
				/**订单菜品编号*/
				private int dishId;
				/**订单用户编号*/
				private int userId;
				/**菜品总价*/
				private double sumPrice;
				/**订单状态*/
				private  int status;  		//其中订单状态时多形态,在取显示状态有不同形式所以在get接口设置取值需求
				/**订单菜品份数*/
				private int count;
				/**送餐时间*/
				private int sendTime;
				
				
				
				@Override
				public String toString() {
					return "Order1 [orderId=" + orderId + ", dishId=" + dishId + ", userId=" + userId + ", sumPrice="
							+ sumPrice + ", status=" + status + ", count=" + count + ", sendTime=" + sendTime + "]";
				
				}
				public Order1() {
				}
			
				public Order1(int orderId, int userId, int dishId,int count ,double sumPrice,int sendTime,
						int status) {
					this.orderId = orderId;
					this.dishId = dishId;
					this.userId = userId;
					this.sumPrice = sumPrice;
					this.status = status;
					this.count = count;
					this.sendTime = sendTime;
				}

			
				public int getOrderId() {
					return orderId;
				}
				public void setOrderId(int orderId) {
					this.orderId = orderId;
				}
				public int getUserId() {
					return userId;
				}
				public void setUserId(int userId) {
					this.userId = userId;
				}
				public  int getStatus() {
					return status;
				}
				public  void setStatus(int status) {
					this.status = status;
				}
				public int getDishId() {
					return dishId;
				}
				public void setDishId(int dishId) {
					this.dishId = dishId;
				}
				public double getSumPrice() {
					return sumPrice;
				}
				public void setSumPrice(double sumPrice) {
					this.sumPrice = sumPrice;
				}
				//不同的状态在控制台不能出现共同的操作
				public  String getState() {
					if(status==1) 	return "已预定";
					if(status==2)  return "待付款";
					if(status==3)	return "已付款" ;
					if(status==4)	return "已签收" ;
					return "?";
				}
				
				public int getCount() {
					return count;
				}
				public void setCount(int count) {
					this.count = count;
				}
				public int getSendTime() {
					return sendTime;
				}
				public void setSendTime(int sendTime) {
					this.sendTime = sendTime;
				}									
			
			}
	
	

//实体类:Dish  菜单实体类

package com.user.bean;
/*
 * 菜品实体类,构成菜的相关属性供数据操作中心做数据交互。菜的对象承载菜的所有属性,以及属性的相关处理
 */
		public class Dish1 {
			/**菜品名*/
		private String dishName;
		/**菜品价格*/
		private double price;
		/**菜品编号*/
		private int dishID;
		/**菜品评价*/
		private int appraise;
		
		//对菜品评价做除好差之分
		public String getAppraises() {
			if(appraise>0) return (+appraise)+"赞";
			if(appraise<0)	return (-appraise)+"踩";
			return null;
		}
		
		
		public Dish1(int dishId, String dishName, double price,int appraise) {
			this.dishName = dishName;
			this.price = price;
			this.dishID = dishId;
			this.appraise = appraise;
		}
		public Dish1() {
		}
		
		public int getAppraise() {
			return appraise;
		}


		public String getDishName() {
			return dishName;
		}
		public void setDishName(String dishName) {
			this.dishName = dishName;
		}
		public double getPrice() {
			return price;
		}
		public void setPrice(double price) {
			this.price = price;
		}
		public int getDishID() {
			return dishID;
		}
		public void setDishID(int dishId) {
			this.dishID = dishId;
		}
		
		public void setAppraise(int appraise) {
			this.appraise = appraise;
		}
			
			
			
		}





//实体类  :User1 用户实体类

package com.user.bean;

/*
 * 吃货联盟用户实体类。
 */
		public class User1 {
			//密保,用于找回密码用   不提供对外set接口,只留get取值接口
		private String pwd2;
			//用户这个实体相关的属性数据载体,
		
			private String userNock;
			private int userID;
			private String userName ;
			private String passwd;
			private int gender;
			private int age;
			private String phone;
			private String address;
			
			/*
			 * 设置性别的方法,贵属性所有
			 */
			public String getSex(){
				if(gender==1) return "先生";
				if(gender==2) return "女士";
				return "?";
			}
			
			
			public User1() {
			}
			//用于交付的登陆对象数据
			public User1(String userName, String passwd) {
				this.userName = userName;
				this.passwd = passwd;
			}
			public String getUserNock() {
				return userNock;
			}
			

			//用于设定密保
			public User1(String pwd2, int userID) {
				this.pwd2 = pwd2;
				this.userID = userID;
			}


			public User1( int userID, String userName, String passwd,String userNock, int gender, int age, String phone,
					String address) {
				this.userNock = userNock;
				this.userID = userID;
				this.userName = userName;
				this.passwd = passwd;
				this.gender = gender;
				this.age = age;
				this.phone = phone;
				this.address = address;
			}
			
			
			public String getPwd2() {
				return pwd2;
			}



			public String getAddress() {
				return address;
			}


			public void setAddress(String address) {
				this.address = address;
			}


			public void setUserNock(String userNock) {
				this.userNock = userNock;
			}


			public int getUserID() {
				return userID;
			}
			public void setUserID(int userId) {
				this.userID = userId;
			}
			public String getUserName() {
				return userName;
			}
			public void setUserName(String userName) {
				this.userName = userName;
			}
			public String getPasswd() {
				return passwd;
			}
			public void setPasswd(String passwd) {
				this.passwd = passwd;
			}
			public int getGender() {
				return gender;
			}
			public void setGender(int gender) {
				this.gender = gender;
			}
			public int getAge() {
				return age;
			}
			public void setAge(int age) {
				this.age = age;
			}
			public String getPhone() {
				return phone;
			}
			public void setPhone(String phone) {
				this.phone = phone;
			}
		
			
			
		}



    
// Menu  界面父类接口
      
            package com.assist;
            /**
             * 控制台界面功能:父类
             * @author ASUS
             *
             */	
	            public interface Menu {
	             //各个界面显示信息
	                void show()throws  NullPointerException,Exception;
				
				
	            }





//LongInfo  登陆界面实现界面接口



            package com.assist;
            /**
             * 登陆界面
             * @author ASUS
             *
             */
                public class LongInfo implements Menu {

		    @Override
		    public void show() {
			System.out.println("\t>>>欢迎来到”吃货联盟订餐系统“\n");
			System.out.println("******************************");
			System.out.println("\t编号1.用户登陆\n");
			System.out.println("\t编号2.用户注册\n");
			System.out.println("\t编号3.退出系统\n");
			System.out.println("******************************");
		}

}




//ManMenu  主菜单界面

        package com.assist;

            public class MainMenu implements Menu {

		@Override
		public void show() {
			System.out.println("\t欢迎来到”吃货联盟订餐系统“");
			System.out.println("********************************");
			System.out.println("        No1. 我要订餐");
			System.out.println("        No2. 个人信息管理");
			System.out.println("        No3. 个人订单管理");
			System.out.println("        No4. 菜品信息评价");
			System.out.println("        No5. 客服中心");
			System.out.println("        No6. 退出登陆");
			System.out.println("********************************");
		}

        }



 
    //订单管理界面  

        package com.assist;
             /**
             * 订单管理界面
             * @author ASUS
             *
             */
                    public class OrderMenu implements Menu {
    
		        @Override
		        public void show() {
			        System.out.println("\n*****>>>订单信息管理中心<<<****\n");
			        System.out.println("\tNo1.个人订单查看\n");
			        System.out.println("\tNo2.支付订单\n");
			        System.out.println("\tNo3.签收订单\n");
			        System.out.println("\tNo4.删除订单\n");
			        System.out.println("\tNo5.返回主功能菜单界面请输入5\n");
			        System.out.println("************************");
		    }

        }

       


         //用户个人信息界面
        

        

          package com.assist;
         /**
         * 用户的个人信息管理
         * @author ASUS
         *
         */
            public class UserInfo implements Menu {


	    @Override
		public void show() {
		System.out.println("\n*****>>>用户信息管理中心<<<*****\n");
		System.out.println("\t编号1.用户个人信息\n");
		System.out.println("\t编号2.修改密码\n");
		System.out.println("\t编号3.修改送餐地址\n");
		System.out.println("\t编号4.修改联系方式\n");
		System.out.println("\t编号5.更改昵称\n");
		System.out.println("\t编号6.返回主功能菜单界面请选择6\n");
		System.out.println("************************");

	    }
    }




    //客户界面


            package com.assist;

                public class Service implements Menu {

	                @Override
		        public void show() {
			
		        System.out.println("\n*****>>>客服服务中心<<<****\n");
		        System.out.println("\tNo1.找回密码\n");
		        System.out.println("\tNo2.建议留言\n");
		        System.out.println("\tNo3.人工服务\n");
		        System.out.println("\tNo4.返回主功能菜单界面返回主菜单请输入4\n");
		        System.out.println("************************");
		}

}



            









    




            




猜你喜欢

转载自blog.csdn.net/weixin_44107254/article/details/88053467
今日推荐