Narnat 的水果店 (中转站) JAVA

文章描述了一个正在开发中的Java水果店管理系统,面临的主要问题是管理员模式下的密码验证和状态保存。开发者已经实现了输入密码进入管理员模式的功能,但目前的问题是,一旦密码验证通过,再次进入无需重新验证。此外,由于每次调用都是新类,添加和删除水果的操作无法保存。作者提出了修改密码功能和通过改变类内部状态来传递信息的解决方案,同时记录开发进度以备后续参考。

目前我的水果店系统仍在开发中,目前正在开发管理员模式
进入此模式需要输入密码,输入密码的功能已经完善,且输入密码成功后,再次进入不需要输入密码。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为解决密码输入正确,再次进入管理员模式无需验证这个问题:不得不面对的问题就是在一个类里调用其他类,这个被调用的类都是一个新变量,即其内部的变量都是默认值,根本存不了数据,为了寻求解决方法,我试着从改变所有类的底层逻辑来解决,但工作量太大。不得不寻求新方法。

另一个极为巧妙的想法恰好就在我否定上一个想法的时候诞生了
即在调用类的时候随便改变这个类内部我们需要改变的值,这样让值传递过去,这样我的目的就实现了!

以下是两种想法的优缺点(英语课写的):
在这里插入图片描述

目前正在进行的是设计一个修改密码程序,即可以对默认密码进行修改,并保存,只有重启程序才能将修改的密码,恢复默认(当然也在英语课上规划明了了)

在这里插入图片描述

当然新然新问题也出现了,即管理员模式中的增添和删除水果的功能,由于每次调用类都是新类,这些操作根本没办法保存,当然也可以继续使用通过附加条件来传递修改信息,但问题只能传递一组信息,再次调用增添删除模式又该如何保存上次传递来的信息呢?目前正在考虑通过修改底层逻辑来实现,难免会出很多bug,也可能会失败,创作本博客的目的就是将现在的情况作为中转站。以便这个想法失败了,可以用过这个存档,做其他的尝试。

以下是目前水果店完成的进度:
在这里插入图片描述
目前完成的代码如下:

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.Scanner;

public class Mark {

	public static void main(String[] args) throws AWTException {
		// TODO Auto-generated method stub
		System.out.println("\033[36m" + "☃☃☃☃☃☃☃☃☃☃☃☃☃☃☃☃☃☃☃");
        System.out.println("\033[33m" + "   ❀❀❀欢迎来到Narnat的水果店❀❀❀");
        System.out.println("\033[36m" + "☃☃☃☃☃☃☃☃☃☃☃☃☃☃☃☃☃☃☃");
        System.out.println();
        System.out.println("\033[0m" + "这里的水果价格几乎都是批发价哦,绝对实惠!");
        System.out.println("\033[0m" + "请在控制台内单击 enter 以进入:");
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        Function f = new Function();
        f.clear();//跳转函数
        Admin a = new Admin();
        Management m = new Management();
        Expand e = new Expand();
//        e.print();
       f.choosefind(f.memuprint());
	}

}
class Function{//功能
	 public static boolean ciper_exe = false; 
	 public void clear() throws AWTException{//清除函数
	  Robot ro = new Robot();
	  ro.delay(100);//延时
	  ro.mousePress(InputEvent.BUTTON3_MASK);//单机鼠标右键
	  ro.mouseRelease(InputEvent.BUTTON3_MASK);//松开右键
	  ro.keyPress(KeyEvent.VK_CONTROL);//按ctrl键
	  ro.keyPress(KeyEvent.VK_R);//按R
	  ro.keyRelease(KeyEvent.VK_R);//松开R
	  ro.keyRelease(KeyEvent.VK_CONTROL);//松开ctrl
	  ro.delay(250);
	 }
	 public int memuprint() throws AWTException {
		 while(true) {
		 System.out.println("\033[36m" + "              narnat的水果店   " + "\033[0m");
		 System.out.println("\033[30m" + "                 模式选择   " + "\033[0m");
		 System.out.println("*************" + "\033[35m"+"  1.顾客模式      "+"\033[0m"+"*************");
		 System.out.println("*************" + "\033[36m"+"  2.管理员模式   "+"\033[0m"+"*************");
		 System.out.println("*************" + "\033[37m"+"  0.退出系统      "+"\033[0m"+"*************");
		 System.out.println("请选择您想要的服务模式 (0 ~ 2): ");
		 Scanner sc = new Scanner(System.in);
		 String n = sc.nextLine();
		 if(n.length() != 1 || !(n.charAt(0) >= '0' && n.charAt(0) <= '2')) {
		   System.out.println("\033[31m" + "please enter between 0 ~ 2" + "\033[0m");
		   System.out.println("\033[0m" + "请在控制台下按enter以继续:");
		   String s = sc.nextLine();
		   clear();
		 }
		 else
		 return Integer.parseInt(n);
		 }
	 }
	 public void  choosefind(int n) throws AWTException {
		String s = "";
		Management m = new Management();
		if(n == 0)
			leave();
		else if(n == 2) {
			//System.out.println(m.ciper);//大bug,利用ciper_exe传递解决
			m.ciper = ciper_exe;
	      if(m.ciper == true) {
	    	  m.ciper = true;
	    	  clear();
	    	  m.managemuprint();
	      }
	      else
		  while(true) {//来自超市系统的温馨提示
			clear();
			System.out.println("温馨提示:");
			System.out.println("1.管理员模式,只有超市管理员才能进入,进入需要输入密码。");
			System.out.println("2.若之前编辑过新密码,且忘记密码,可以重启程序,恢复默认密码。");
			System.out.println("3.若选择 'n' 可以直接退回到服务模式选择界面。");
			System.out.println("\033[36m" + "请确认您是否要打开管理员模式(y/n):" + "\033[0m");
			Scanner sc = new Scanner(System.in);
		    s = sc.nextLine();
			if(s.length() != 1 || !(s.charAt(0) == 'y' || s.charAt(0) == 'n')) {
				System.out.println("\033[31m" + "please enter 'y' or 'n'" + "\033[0m");
				System.out.println("请在控制台下输入enter以继续:");
				String s1 = sc.nextLine();
		    }
			else
				break;
		 }	
			//yes or no 
	     if(m.ciper == false)
		    if(s.charAt(0) == 'n') {
		    	clear();
		    	choosefind(memuprint());//套娃
		    }
		    else {
		    	  clear();
		    	  Admin a = new Admin();
				  a.cipher();//管理模式
		    }
		}
	 }
	 public void leave() throws AWTException {
		 clear();
		 System.out.println("\033[34m" + "❀❀❀❀感谢您的光临,期待您的再次光临❀❀❀❀" + "\033[0m");
	 }
	 
	}
class Admin{//管理员模式
	public static String cip = "123456"; 
	public void cipher() throws AWTException {//
		Function f = new Function();
		Robot r = new Robot();
		Scanner sc = new Scanner(System.in);
		int i = 3;
		while(i > 0) {
		System.out.println("请输入" + cip.length() + "位密码以进入管理员模式");
		System.out.println("\033[32m" + "请在下方控制台内顶格输入:" + "\033[0m");
		String s1 = "";
			s1 = sc.nextLine();
			if(s1.equals(cip))
				break;
			else {
				System.out.println("\033[31m" + "password error" + "\033[0m");
				System.out.println("请在控制台下输入enter以继续:");
				String s2 = sc.nextLine();
				f.clear();
			}
			i --;
		}
		if(i <= 0) {
			System.out.println("很抱歉验证次数已经用完");
			System.out.println("您需要等待一段时间(15s)后才能再次输入");
			System.out.println("若您忘记密码,您可以重启程序以恢复默认密码");
			 r.delay(10000); //10s
			f.clear();
			cipher();
		}
		else {
			System.out.println("\033[31m" + "密码正确即将进入管理员模式!" + "\033[0m");
			r.delay(1000);// 1s;
			f.clear();
			Management m = new Management();
			m.ciper = true;//标记密码正确
			m.managemuprint();
		}
	}
}
class Management{//管理员目录
	public boolean ciper = false;//密码通过则可以进入
	public static int switchnumber = -1;
	public void managemuprint() throws AWTException {
		Function f = new Function();
		Robot r = new Robot();
		String s = "";
		String s1 = "";
	  while(true) {
		System.out.println("\033[36m" + "              管理员模式" + "\033[0m");
		System.out.println("\033[32m" + "☆☆☆☆☆☆☆☆☆☆☆☆" + "\033[0m" + "0.退至模式选择" + "\033[32m" + "☆☆☆☆☆☆☆☆☆☆☆☆" + "\033[0m");
		System.out.println("请输入您想要进行的操作选项编号(待更新):");
		Scanner sc = new Scanner(System.in);
	    s = sc.nextLine();
		if(s.length() != 1 || !(s.charAt(0) >= '0' && s.charAt(0) <= '9')) {
			System.out.println("\033[31m" + "please enter between 0 ~ 2" + "\033[0m");
			   System.out.println("\033[0m" + "请在控制台下按enter以继续:");
			   s1 = sc.nextLine();
			   f.clear();
		}
		else {
			switchnumber = Integer.valueOf(s);
			break;
		}
	 }
	  System.out.print("\033[0m" + "输入成功正在跳转......");
	  r.delay(400);
	  f.clear();
	  //switchnumber, ciper 已经被标记。
	  manageswitch();//进入相应界面1
	}
	public void manageswitch() throws AWTException {
		
		if(ciper == true) {
			switch(switchnumber) {
			    case 0: manag_mdel(); break;//退出至管理员界面
			}
		}
	}
	public void manag_mdel() throws AWTException {
		 Function f = new Function();
		 f.ciper_exe = true;
		 f.choosefind(f.memuprint());
	}
}
class Expand{//库存
	 public static int icapacity = 10;//初始容量(当前容量)
	 public static int size = 3;//水果总类
	 fruit fru[] = new fruit[icapacity];//初始容量
	 
	 Expand(){//构造函数     
	     initial(this.fru, icapacity);
	     //默认水果
	     fru[0].name = "富士苹果";
	     fru[0].data = "2023/3/4";
	     fru[0].enterprice = 23.45;
	     fru[0].leaveprice = 24.99;
	     fru[0].place = "许昌静9/215";
	     fru[0].time = 11;
	     fru[0].fruitamount = 100.45;
	     
	     fru[1].name = "朴素香蕉";
	     fru[1].data = "2023/3/4";
	     fru[1].enterprice = 1.55;
	     fru[1].leaveprice = 1.99;
	     fru[1].place = "许昌静9/215";
	     fru[1].time = 11;
	     fru[1].fruitamount = 110.45;
	     
	     fru[2].name = "沙糖桔";
	     fru[2].data = "2023/3/4";
	     fru[2].enterprice = 1.45;
	     fru[2].leaveprice = 1.99;
	     fru[2].place = "许昌静9/215";
	     fru[2].time = 11;
	     fru[2].fruitamount = 200.45;
	     
	 }
	 
	 public void initial(fruit fru[], int number) {//初始化
		 for(int i = 0; i < number; i ++) fru[i] = new fruit(); 
	 }
	 
	 public void updatecapacity(int newcapacity) {//更新容量
		 fruit newdata[] = new fruit[newcapacity];
		 initial(newdata, newcapacity);
		 for(int i = 0; i < size; i ++) newdata[i] = fru[i];//挪过来
		 fru = newdata;//指向
		 this.icapacity = newcapacity;
	 }
	 public void print() {
		 for(int i = 0; i < this.size; i ++) {
			 System.out.println("\033[35m" + "꧁༺๑๑༻꧂" + "\033[0m");
			 System.out.println("水果名称: " + "\033[36m" +  fru[i].name);
			 System.out.println("\033[0m" + "进货日期: " + "\033[36m" +  fru[i].data);
			 System.out.println("\033[0m" + "水果保质期(天): " + "\033[36m" +  fru[i].time);
			 System.out.println("\033[0m" + "产地:" + "\033[36m" +  fru[i].place);
			 System.out.println("\033[0m" + "\033[0m" + "进价(kg/元): " + "\033[36m" +  fru[i].enterprice);
			 System.out.println("\033[0m" + "出口价(kg/元): " + "\033[36m" +  fru[i].leaveprice);
			 System.out.println("\033[0m" + "库存   (kg): " + "\033[36m" +  fru[i].fruitamount);
			 System.out.print("\033[0m");
		 }
	 }
}
class fruit{//每种水果的信息
	String name;//水果名字
	 String data;//进货日期
	 double time;//保质期(天)
	 String place;//产地
	 double enterprice;//进价
	 double leaveprice;//出口价
	 double fruitamount;//库存   (kg)
}

实现这个水果店仅仅是兴趣使然,如果顺利的话大概会有1000多行吧,我知道方法总比困难多,慢慢稳稳地,一步一步地去实现吧。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值