序言
在学习java中api编程接口时,学了ArrayList和String后决定练习一下,开发一个简单的外卖系统,有利于自己熟悉新学的知识。
外卖功能
由于业务能力有限,学习的知识仅限于中级java知识,因此外卖系统功能只有:一个管理员界面,负责上架食物和展示食物的信息,包括食物名称,食物价格,食物描述。还有展示食物信息的功能,之后设立一个退出程序的功能即可。
程序思路
首先我们设立一个类专门封装食物的信息:名称,价格,描述,并且私有化,只能通过set,get去取值,接着设立食物操作的类,这样好让我们去完成上架,展示食物的功能,还有要设立ArrayList集合去包装食物的类,这样才可以存储多个食物的信息,也方便我们后续去进行查找和修改。
开发过程
开发工程文件
首先创建好我们开发工程的文件:
food类设计
将成员变量包装,设计constructor,set and get方法,这些都可以右键去点击快捷键创建出来
public class food {
//食物信息封装
//成员变量
private String name;//名称
private double price;//价格
private String des;//描述
//无参构造器
public food() {
}
//有参构造器
public food(String name, double price, String des) {
this.name = name;
this.price = price;
this.des = des;
}
//get,set方法
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public String getDes() {
return des;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(double price) {
this.price = price;
}
public void setDes(String des) {
this.des = des;
}
}
foodsev类设计
public class foodsev {
food f = new food();
ArrayList<food> foodlist = new ArrayList<>();
//上架食物
public void addfood(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入上架食物名称:");
String name = sc.next();//用name存储用户输入名称
f.setName(name);//存入食物对象封装类中的成员变量中
System.out.println("请输入上架食物价格:");
double price = sc.nextDouble();//用price存储用户输入名称
f.setPrice(price);//存入食物对象封装类中的成员变量中
System.out.println("请输入上架食物描述:");
String des = sc.next();//用des存储用户输入名称
f.setDes(des);//存入食物对象封装类中的成员变量中
//用arraylist集合存储食物信息
foodlist.add(f);
//上架完成反馈
System.out.println("上架完成!");
}
//展示食物信息
public void foodshow(){
//遍历展示食物信息
//如果没有上架则返回
if(foodlist.size()==0){
System.out.println("你还未上架食物,食物菜单为空!");
return;
}
for(int i = 0;i<foodlist.size();i++){
System.out.println(foodlist.get(i));
}
}
//外卖菜单
public void start() {
while (true) {
System.out.println("请你选择要执行的功能:");
System.out.println("1、上架食物");
System.out.println("2、展示菜单");
System.out.println("3、退出");
Scanner sc = new Scanner(System.in);
String str = sc.next();//用字符串的目的是防止用户输入字符串使程序崩溃
switch (str) {
case "1":
addfood();
break;
case "2":
foodshow();
break;
case "3":
System.out.println("欢迎你下次再来");
return;//退出方法
default:
System.out.println("你输入的值不符合要求!请重新输入!");
}
}
}
}
test类实现
public class test {
public static void main(String[] args) {
foodsev foodsev = new foodsev();//先创建对象,方便我们调用类里的方法
foodsev.start();
}
}
测试运行代码
我们运行代码试一下
开发完成,我们运行代码,上架功能和退出功能实现的都很好,但是在展示菜单当中却出现了bug,输出了一串地址出来,这是为什么呢?
bug排除
我们定位到展示食物菜单的方法这里来,这里foodlist.get实际上是像数组一样的东西,我们直接打印出来就会出现上面的地址,因此我们需要用food类型去存储集合的信息,再通过封装的getName....去取出信息来。
修改后如下:
public void foodshow(){
//遍历展示食物信息
//如果没有上架则返回
if(foodlist.size()==0){
System.out.println("你还未上架食物,食物菜单为空!");
return;
}
for(int i = 0;i<foodlist.size();i++){
food f = foodlist.get(i);//存储集合信息
System.out.println(f.getName());
System.out.println(f.getPrice());
System.out.println(f.getDes());
}
}
最后我们运行
可见bug成功消除。
总结
这次开发难度适中,主要是完成用户的需求条件,相对还不算很复杂,学习java之后觉得java的开发确实有种难以表达的舒适感,我觉得大部分IDE快捷功能都可以很好的帮助我开发,这点是c没办法提供的,这时我才发现学习多种语言的魅力,学了c知道更多底层语言,方便更好理解学习java,c也可以完成开发,但是方法什么的都相对复杂,没有面对对象这么简单。总之这次开发使我对面向对象编程更加印象深刻,方便后续学习新的知识。当然这个开发还相对雏形,之后也许可以用数据库里的数据去完善功能,还有功能可以设计的再多样化一些,包括用户订餐,外卖员信息管理等等。。。但那些都已经是后话了,继续加油吧!