项目名
水果摊售货系统
项目描述
该系统类似于超市收银系统,由收银员操作,包括添加商品进购物车,结账以及找零
控制台界面
具体功能
-
查看水果列表
-
购买水果
可以是输入水果名,也可以是输入水果编号 -
查看购物车
-
结账
-
退出
要求
使用数组或集合完成数据存储
使用IO流实现数据的读入和写出
我打算分为两个包1.fruitsMenu 2.IOmreq(数据录入又多建了一个包)
唯一需要注意的是包名
一.fruitsMenu
1.主函数包
代码如下:
package fruits_menu;
public class Fruits_main {
public static void main(String[] args) {
System.out.println("This is fruits shop!");
System.out.println("Welcome to our shop!");
System.out.println("Please enter what you need"
+" to query");
System.out.println("fruits menu:");
while(true) {
Fruits_menu.menu();//调用主菜单
Menu_input.input();/*调用选择输入,调用谁的方法,创建哪个类的对象,不能调用无对象的方法.静态方法直接类名.方法*/
}
}
}
2.主菜单
package fruits_menu;
import java.text.SimpleDateFormat;
import java.util.Date;//使用 Date 类及 SimpleDateFormat 类的 format(date) 方法来输出当前时间
public class Fruits_menu {
public static void menu() {
// TODO Auto-generated constructor stub
System.out.println(" ________ ________ ___ ___ ___ _________ ________ \n" +
"|\\ _____\\\\ __ \\|\\ \\|\\ \\|\\ \\|\\___ ___\\\\ ____\\ \n" +
"\\ \\ \\__/\\ \\ \\|\\ \\ \\ \\\\\\ \\ \\ \\|___ \\ \\_\\ \\ \\___|_ \n" +
" \\ \\ __\\\\ \\ _ _\\ \\ \\\\\\ \\ \\ \\ \\ \\ \\ \\ \\_____ \\ \n" +
" \\ \\ \\_| \\ \\ \\\\ \\\\ \\ \\\\\\ \\ \\ \\ \\ \\ \\ \\|____|\\ \\ \n" +
" \\ \\__\\ \\ \\__\\\\ _\\\\ \\_______\\ \\__\\ \\ \\__\\ ____\\_\\ \\ \n" +
" \\|__| \\|__|\\|__|\\|_______|\\|__| \\|__| |\\_________\\\n" +
" \\|_________|\n");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println(df.format(new Date()));// new Date()为获取当前系统时间
System.out.println("1.View the fruit list.");
System.out.println("2.To buy fruits.");
System.out.println("3.View shopping cart.");
System.out.println("4.Delete Fruits");
System.out.println("5.Exit.");
}
}
3.输入功能
package fruits_menu;
import I0mreq.IOread;
import java.io.IOException;
import java.util.Scanner;
public class Menu_input {
public static void input(){
Scanner scanner =new Scanner(System.in);
int user = scanner.nextInt();
switch(user) {
case 1: Fruits_List.List();break;
case 2: Fruits_buy.buy();break;
case 3: Fruits_cart.cart();break;
case 4:
try {
Fruits_clearing.clearing();
} catch (IOException e) {
e.printStackTrace();
}
break;
case 5: System.out.println("Thanks for your patronage!");
IOread.read();
System.exit(0);/*status是状态码,0表示正常退出程序,其他值表示异常退出,return 只能退出方法*/
default: Fruits_menu.menu();//调用主菜单
Menu_input.input();/*调用选择输入,调用谁的方法,创建哪个类的对象,不能调用无对象的方法.静态方法直接类名.方法*/
}
}
}
4.第一个功能水果列表展示
package fruits_menu;
import java.util.Scanner;
public class Fruits_List {
static double apple=5.0,pear=6.0,banana=7.0,grape=10.0;
public static void view(){
System.out.println("Fruits\t\tUnit");
System.out.println("1.apple\t\t"+apple+"yuan/0.5kg");
System.out.println("2.pear\t\t"+pear+"yuan/0.5kg");
System.out.println("3.banana\t"+banana+"yuan/0.5kg");
System.out.println("4.grape\t\t"+grape+"yuan/0.5kg");
System.out.println("----------------------------");
}
public static void List() {
view();//水果单价数据表
System.out.println("if you enter 1,you will return to the main menu");
System.out.println("if you enter 2,you will into your select buy");
Scanner user = new Scanner(System.in);
int Use =user.nextInt();
if(Use==1) {//调用主菜单
Fruits_menu.menu();
while(true) {
Menu_input.input();/*调用选择输入,调用谁的方法,创建哪个类的对象,不能调用无对象的方法.静态方法直接类名.方法*/
}
}
else if(Use==2) {//进入购买界面
Fruits_buy.buy();
}
}
}
5.水果数据录入
package com.vector.pojo;
public class FruitsData {
//定义ID
private String id;
//定义名称
private String name;
//定义数量
private double unit;
private double weight;
private double price;
public FruitsData(String id, String name, Double weight,double unit) {//无参构造器是必要的,所以定义有参构造器,还要再写一遍
super();
this.id = id;
this.name = name;
this.weight = weight;
}
public FruitsData() {//无参构造器是必要的,所以定义有参构造器,还要再写一遍
super();
// TODO Auto-generated constructor stub
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setWeight(double weight) {
this.weight = weight;
}
public double getWeight() {
return weight;
}
//获取价格
public void setUnit(double unit){ this.unit =unit;}
public double getUnit(){ return unit;}
public void setPrice(double price){this.price = price;}
public double getPrice(){
return price;
}
}
6.购买功能
package fruits_menu;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import I0mreq.CreateFile;
import I0mreq.IOwrite;
import com.vector.pojo.FruitsData;
public class Fruits_buy {
static ArrayList<FruitsData> list = new ArrayList<>();//容器存放某种水果及其属性
static void buy() {//添加水果系统
CreateFile.file();//创建文件
Fruits_List.view();//调用水果单价数据表
System.out.println("Please select the item you "
+ "want to buy,and please input fruits number or name");
System.out.println("Please input enterKey to confirm.");
addFruits(list);
IOwrite.write(list);
System.out.println("If you enter 1,you will return to the main menu");
System.out.println("If you enter 2,you will into your cart");
Scanner user = new Scanner(System.in);
int User = user.nextInt();
if (User == 1) {//调用主菜单
Fruits_menu.menu();
while (true) {
Menu_input.input();/*调用选择输入,调用谁的方法,创建哪个类的对象,不能调用无对象的方法.静态方法直接类名.方法*/
}
} else if (User == 2) {//进行购物车筛选界面
Fruits_cart.cart();
} else Fruits_buy.buy();
}
public static void addFruits(ArrayList<FruitsData> arrayList) {
Map<String, Double> fruitsBuy = new HashMap<>();//map实现键值对应
fruitsBuy.put("1", Fruits_List.apple);
fruitsBuy.put("2", Fruits_List.pear);
fruitsBuy.put("3", Fruits_List.banana);
fruitsBuy.put("4", Fruits_List.grape);
Scanner sc = new Scanner(System.in);
Map<String, String> Name = new HashMap<>();//map实现键值对应
Name.put("1", "apple");
Name.put("2", "pear");
Name.put("3", "banana");
Name.put("4", "grape");
System.out.println("Please input fruits id.");
String id = sc.nextLine();
System.out.println("Please input fruits weight.");
double weight = sc.nextDouble();
FruitsData s = new FruitsData();
s.setId(id);
s.setName(Name.get(id));
s.setWeight(weight);
s.setUnit(fruitsBuy.get(id));
s.setPrice(weight * fruitsBuy.get(id));
arrayList.add(s);//引用类型 集合追加
System.out.println("Added fruit successfully!");
System.out.println("if you want to exit,please input enter");
System.out.println("input other keyboard is continue.");
sc.nextLine();
if (!sc.nextLine().equals("")) {//输入回车退出
addFruits(arrayList);
}
}
}
7.购物车功能
package fruits_menu;
import java.util.Scanner;
import I0mreq.IOread;
import com.vector.pojo.FruitsData;
public class Fruits_cart {
public static void cart(){
IOread.read();//读取文件
System.out.println("If you press 1,you could enter the down layer.");
System.out.println("If you press 2,you could enter main menu!");
System.out.println("If you press 3,you could enter delete function!");
System.out.println("If you want delete or modify data,you could enter other.");
Scanner scanner = new Scanner(System.in);
int user = scanner.nextInt();
switch (user) {
case 1:
System.out.print("Please pay:");
double sumMoney = 0;
for(int i=0;i<Fruits_buy.list.size();i++){
FruitsData f = Fruits_buy.list.get(i);
sumMoney= sumMoney + f.getPrice();
}//统计金额
System.out.println(sumMoney);
Scanner sc = new Scanner(System.in);
double s =sc.nextDouble();
if(s==sumMoney)
{
IOread.read();
System.out.println("Pay"+sumMoney);
System.out.println("Order has been confirmed!");
}
else
{
System.out.println("Payment failure.");
Fruits_main.main();
}
break;
case 2:Fruits_menu.menu();
Menu_input.input();/*调用选择输入,调用谁的方法,创建哪个类的对象,不能调用无对象的方法.静态方法直接类名.方法*/
break;
case 3:
Fruits_clearing.clearing(Fruits_buy.list);
break;
default:System.out.println("Sorry,you input number is error!");
}
if(user!=1){
System.out.println("Order has been confirmed!");
IOread.read();
}
}
}
8.删除功能
package fruits_menu;
import I0mreq.IOread;
import I0mreq.IOwrite;
import com.vector.pojo.FruitsData;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class Fruits_clearing {
public static void clearing() throws IOException {
Scanner sc = new Scanner(System.in);
IOread.read();
System.out.println("请输入要删除的水果ID: ");
String id = sc.nextLine();
for (int i = 0; i < Fruits_buy.list.size(); i++) {
FruitsData f = Fruits_buy.list.get(i);
if(f.getId().equals(id)){
Fruits_buy.list.remove(i);
IOwrite.write(Fruits_buy.list);
System.out.println("删除成功");
return;
}
}
System.out.println("找不到要删除的水果ID!");
}
private static void write(ArrayList<FruitsData> list) {
// TODO Auto-generated method stub
}
private static void print(ArrayList<FruitsData> list) {
// TODO Auto-generated method stub
}
public static void clearing(ArrayList<FruitsData> list) {
// TODO Auto-generated method stub
}
}
二.第二部分IOmreq
1.创建目录
package I0mreq;
import java.io.File;
public class IOmkdirs {
public static void mkdirs() {
//创建目录文件夹
File FruitDatabase = new File("C:/MyPro01_fruits/FruitDatabase");//设置目录路径
FruitDatabase.mkdirs();//创建目录
}
}
2.创建文件
package I0mreq;
import java.io.File;
public class CreateFile {
public static void file() {
IOmkdirs.mkdirs();//创建path目录
try {
File file = new File("C:/MyPro01_fruits/FruitDatabase/Data.txt");//设置文件路径
file.createNewFile(); //创建文件
} catch (Exception e) {//捕捉异常
// TODO: handle exception
e.printStackTrace();//深度分析异常产生的原因并打印出来
}
}
}
3.写入文件
package I0mreq;
import java.util.ArrayList;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import com.vector.pojo.FruitsData;
public class IOwrite {
public static void write(ArrayList<FruitsData> list){
BufferedWriter fos = null;
try {
// true表示内容会追加到文件末尾;false表示重写整个文件内容。
fos = new BufferedWriter(new FileWriter("C:/MyPro01_fruits/FruitDatabase/Data.txt"));//字符缓冲流
for (int i = 0; i < list.size(); i++) {
FruitsData f = list.get(i);
fos.write(f.getId()+" " + f.getName() + " " + f.getUnit() + " " + f.getPrice());
fos.newLine();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
4.读取文件
package I0mreq;
import java.io.FileInputStream;
public class IOread {
public static void read(){
FileInputStream fis = null;//全局变量,fileInputStream字节流.可能会编码异常.FileReader字符流
try {
fis = new FileInputStream("C:/MyPro01_fruits/FruitDatabase/Data.txt");//创建对象
StringBuilder sBuilder = new StringBuilder();//字符输出
int temp = 0;
while((temp = fis.read()) != -1) {//read是一个字符字符的读,读完为-1
sBuilder.append((char)temp);//append读取追加,sB动态数组
}
System.out.println(sBuilder);
}catch (Exception e) {//捕获异常结果
e.printStackTrace();
}finally {//绝对执行
try {
if(fis != null) {
fis.close();//关闭流对象
}
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
}
}