基于控制台显示的电子商城项目

本文介绍了一个基于控制台显示的简易电子商城项目的详细设计与实现过程,涵盖了用户注册、登录、商品浏览及购买等功能,并提供了管理员操作商品的增删改查等后台管理功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、项目名称

  基于控制台显示的电子商城项目

二、功能要求

该项目能实现的功能有注册、登录、浏览商城、查看购买的商品、管理员登录,其中注册用户名有格式要求且不可重复,注册时有密码确认功能。浏览商城与查看购买的商品时会检测是否登录,并给与提示。管理员登录可对商品进行增,删,查,改功能。

三、需求分析

普通用户需要注册登录后进行书籍的浏览和购买,购买后可以查看自己的书籍列表管理员用户可以对商城的书籍进行维护(增加,删除,修改)。

四、设计思路

1.        使用JAVA语言

2.       在控制台下运行

3.       使用集合进行数据的存储和管理

4.       使用文件进行数据的存储和管理



Admin.class


package com.qrsx.shop;

import java.math.BigDecimal;


/** * @author  作者 E-mail: 
* @date 创建时间:2016年12月22日 下午7:11:46 
* @version版本标识 1.0 
* @parameter 参数及其意义 
* @since  最早使用该方法/类/接口的JDK版本
* @return 返回值 
*/
public class Admin extends User
{
	public void adminlogin()
	{
		System.out.println("欢迎管理员登录!");
		System.out.println("请输入管理员用户名!");
		String login_username =Shop. sc.next();
		boolean loginResult = false;
		while (true)
		{
			System.out.println("请输入管理员密码:");
			String login_password = Shop.sc.next();

			if (login_username.equals("admin") && login_password.equals("admin"))
			{
				System.out.println("****管理员登陆成功!****");
				loginResult = true;
				while (true)
				{
					
					if (showAdminMenu() == 6)
						break;
					this.showAdminMenu();
				}
				break;
			}

			if (loginResult == true)
				break;
			else
				System.out.println("登陆失败!请重新登录!");
		}
	}

	public int showAdminMenu()
	{
		System.out.println("*****管理员菜单*****");
		System.out.println("\t1.添加商品");
		System.out.println("\t2.修改商品");
		System.out.println("\t3.删除商品");
		System.out.println("\t4.查看商品列表");
		System.out.println("\t5.查询商品");
		System.out.println("\t6.退出管理员菜单");
		System.out.println("*************************");
		System.out.print("请选择菜单:");
		int choice = Shop.sc.nextInt();
		this.chooseAdminMenu(choice);
		return choice;
	}
	private String isGo_on(){
		
		System.out.println("您是否继续?Y/N");
		String go_on = Shop.sc.next();
		return go_on.toUpperCase();
	}
	private boolean chooseAdminMenu(int choice)
	{
		boolean result = true;
		String go_on ="Y";
		switch (choice)
		{
		case 1:
			System.out.println("您选择的菜单是:添加商品");
			while (go_on.equals("Y"))
			{
				this.addGood();
				go_on = this.isGo_on();
			}

			break;
		case 2:
			System.out.println("您选择的菜单是:修改商品");
			while (go_on.equals("Y"))
			{
				this.updateGood();
				go_on = this.isGo_on();
			}
			
			break;
		case 3:
			System.out.println("您选择的菜单是:删除商品");
			while (go_on.equals("Y"))
			{
				this.deleteGood();
				go_on = this.isGo_on();
			}
			
			break;
		case 4:
			System.out.println("您选择的菜单是:查看商品列表");
				super.showGood();
			break;
		case 5:
			
			System.out.println("您选择的菜单是:查询商品");
			while (go_on.equals("Y"))
			{
				this.queryGood();
				go_on = this.isGo_on();
			}
			
			break;

		}
		return result;
	}


	private void queryGood(){
		System.out.println("*****查询商品******");
		System.out.print("请输入需要查询的商品编号:");
		int id = Shop.sc.nextInt();
		Good good = this.findGoodById(id);
		if (good == null)
		{
			System.out.println("未找到该商品");
		} else
		{
			System.out.println("该商品信息如下:");
			System.out.println("商品id\t商品名称\t商品价格\t商品数量");
			System.out.println(good.getId() + "\t" + good.getName() + "\t" + good.getPrice() + "\t" + good.getNum());
		}
	}
	private void deleteGood()
	{
		System.out.print("*****开始删除商品******");
		super.showGood();
		System.out.print("请输入需要删除的商品编号");
		int id =Shop. sc.nextInt();
		Good good = this.findGoodById(id);
		Shop.goodList.remove(good);
		System.out.print("*****商品删除成功*****");
	}

	private void addGood()
	{
		System.out.println("*****开始添加商品******");
		System.out.print("请输入商品编号:");
		int id = Shop.sc.nextInt();
		System.out.print("请输入商品名称:");
		String name =Shop. sc.next();
		System.out.print("请输入商品价格:");
		String price =Shop. sc.next();
		System.out.print("请输入商品数量:");
		int num =Shop. sc.nextInt();

		Good good = new Good();
		good.setId(id);
		good.setName(name);
		good.setPrice(new BigDecimal(price));
		good.setNum(num);
		Shop.goodList.add(good);

	}

	private void updateGood()
	{
		System.out.println("*****开始修改商品******");
		super.showGood();
		System.out.print("请输入需要修改的商品编号:");
		int id = Shop.sc.nextInt();
		Good good = this.findGoodById(id);
		if (good == null)
		{
			System.out.println("未找到该商品");
		} else
		{
			System.out.println("该商品信息如下:");
			System.out.println("商品id\t商品名称\t商品价格\t商品数量");
			System.out.println(good.getId() + "\t" + good.getName() + "\t" + good.getPrice() + "\t" + good.getNum());
		}
		System.out.println("请输入修改后的商品名称:");
		String name = Shop.sc.next();
		good.setName(name);
		System.out.println("请输入修改后的商品价格:");
		Double price =Shop. sc.nextDouble();
		good.setPrice(new BigDecimal(price));

		System.out.println("请输入修改后的商品数量:");
		int num =Shop. sc.nextInt();
		good.setNum(num);
	}


}

Good.class


package com.qrsx.shop;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * * @author 作者 E-mail:
 * 
 * @date 创建时间:2016年12月22日 下午6:39:47
 * @version版本标识 1.0
 * @parameter 参数及其意义
 * @since 最早使用该方法/类/接口的JDK版本
 * @return 返回值
 */
public class Good implements Comparable, Cloneable, Serializable
{
	private int id;
	private String name;
	private BigDecimal price;
	private int num;

	public Good()
	{
				
	}

	public Good(int id, String name, BigDecimal price, int num)
	{
		this.id = id;
		this.name = name;
		this.price = price;
		this.num = num;
	}

	@Override
	public Good clone()
	{
		Good g1=new Good();
		try
		{
			Object o=new Object();
			g1=(Good)super.clone();
			
		}catch(CloneNotSupportedException e)
		{
			e.printStackTrace();
		}
		return g1;
	}

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public BigDecimal getPrice()
	{
		return price;
	}

	public void setPrice(BigDecimal price)
	{
		this.price = price;
	}

	public int getNum()
	{
		return num;
	}

	public void setNum(int num)
	{
		this.num = num;
	}

	public String toString()
	{
		return "id=" + id + ",name=" + name + ",price=" + price + ",num=" + num;
	}
	/*按价格排*/
	@Override
	public int compareTo(Object o)
	{
		Good good = (Good) o;
		return this.price.compareTo(good.price);
	}
	
	/*按数量排*/
/*	 @Override
	public int compareTo(Object o)
	{
		Good good = (Good) o;
		if(this.num<good.num)
		return -1;
		else if(this.num==good.num)
		return 0;
		else return 1;
	}*/
	 

}

Shop.class


package com.qrsx.shop;

import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * * @author 作者 E-mail:
 * 
 * @date 创建时间:2016年12月22日 下午6:39:19
 * @version版本标识 1.0
 * @parameter 参数及其意义
 * @since 最早使用该方法/类/接口的JDK版本
 * @return 返回值
 */
public class Shop
{
	//private static final String UserFile = null;
	static List<Good> goodList = new ArrayList();
	static List<User> userList = new ArrayList();
	static List<Good> myGoodList = new ArrayList();
	static File userFile = new File("D:\\软件\\eclipse\\Shop\\src\\com\\qrsx\\shop\\UserFile");
	User user = new User();
	static Scanner sc = new Scanner(System.in);

	public static void saveUserListToFile()
	{
		try
		{
			FileOutputStream fos = new FileOutputStream(userFile);
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			oos.writeObject(userList);
			oos.close();
			fos.close();
		} catch (FileNotFoundException e)
		{

			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@SuppressWarnings("unchecked")
	public void readListFromFile()
	{

		try
		{
			FileInputStream fis = new FileInputStream(userFile);
			ObjectInputStream ois = new ObjectInputStream(fis);
			Object object = ois.readObject();
			userList = (List) object;
			ois.close();
			fis.close();
		} catch (FileNotFoundException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	

	public static void main(String[] args)
	{
		Shop shop = new Shop();
		shop.run();
	}

	Admin admin = new Admin();

	private void run()
	{
		this.initGoodList();
		if (userFile != null && userFile.length() > 0)
		{
			this.readListFromFile();
			System.out.println("UserFile已导入。");
		} else
		{
			System.out.println("UserFile为空。");
		}
		boolean go_on = true;
		while (go_on)
		{
			int choice = this.showMainMenu();

			go_on=this.chooseMenu(choice);
		}
	}

	private void initGoodList()
	{
		Good good1 = new Good(1, "海尔冰箱", new BigDecimal("1999"), 100);
		Good good2 = new Good(2, "海信电视", new BigDecimal("1499"), 100);
		Good good3 = new Good(3, "小米手机", new BigDecimal("999"), 100);
		goodList.add(good1);
		goodList.add(good2);
		goodList.add(good3);
	}

	private int showMainMenu()
	{
		System.out.println("*****欢迎进入电子商城*****");
		System.out.println("\t1.注册");
		System.out.println("\t2.登录");
		System.out.println("\t3.查看商城");
		System.out.println("\t4.查看我购买的商品");
		System.out.println("\t5.管理员登录");
		System.out.println("\t6.退出系统");
		System.out.println("*************************");
		System.out.print("请选择菜单:");
		int choice = sc.nextInt();
		return choice;
	}

	private boolean chooseMenu(int choice)
	{

		boolean result = true;
		System.out.println("您输入的是:" + choice);

		switch (choice)
		{
		case 1:
			System.out.println("您选择的功能是:注册");
			user.reg();
			break;
		case 2:
			System.out.println("您选择的功能是:登录");
			user.login();
			break;
		case 3:
			System.out.println("您选择的功能是:查看商城");
			user.showGood();
			if (user.isLogin() == true)
			{
				user.buy();

			} else
			{
				System.out.println("您还未登陆成功,请先登录!");
			}

			break;
		case 4:
			System.out.println("您选择的功能是:查看我购买的商品");
			if (user.isLogin() == true)
			{
				user.showMyGoodList();
			} else
			{
				System.out.println("您还未登陆成功,请先登录!");
			}
			break;
		case 5:
			System.out.println("您选择的功能是:管理员登录");
			admin.adminlogin();
			break;
		case 6:
			System.out.println("您选择的功能是:退出程序");
			result = false;
			break;
		default:
			System.out.println("[您的输入有误!]");
			break;
		}
		return result;
		
	}

}

User.class


package com.qrsx.shop;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.Scanner;

/**
 * * @author 作者 E-mail:
 * 
 * @date 创建时间:2016年12月22日 下午6:38:59
 * @version版本标识 1.0
 * @parameter 参数及其意义
 * @since 最早使用该方法/类/接口的JDK版本
 * @return 返回值
 */
public class User implements Serializable
{
	private String username;
	private String password;
	private boolean isLogin;

	public boolean isLogin()
	{
		return isLogin;
	}

	public void setLogin(boolean isLogin)
	{
		this.isLogin = isLogin;
	}

	public void reg()
	{
		char ch;
		String username;
		System.out.println("欢迎注册!");
		while (true)
		{
			boolean[] legal_name = new boolean[3];
			boolean alrReg=false;
			System.out.println("请输入用户名(长度不小于6且为字母与数字的混合):");
			username = Shop.sc.next();
			if (username.length() >= 6)
				legal_name[0] = true;
			for (int i = 0; i < username.length(); i++)
			{
				ch = username.charAt(i);
				if (Character.isDigit(ch))
					legal_name[1] = true;
				if (Character.isLetter(ch))
					legal_name[2] = true;
			}
			if (legal_name[0] && legal_name[1] && legal_name[2])
			{
				System.out.println("用户名合法有效!");
				
				for (User user : Shop.userList)
				{
					if (username.equals(user.getUsername()))
					{
						System.out.println("该用户名已注册!");
						alrReg=true;
						break;
					}
					else alrReg=false;
				}
				if(!alrReg)
					break;
			} else
				System.out.println("用户名非法无效!");
		}
		while (true)
		{
			System.out.println("请输入密码:");
			String password = Shop.sc.next();
			System.out.println("请再次确认密码:");
			String repassword = Shop.sc.next();
			if (password.equals(repassword))
			{
				// System.out.println("注册成功!");
				User user = new User();
				user.setUsername(username);
				user.setPassword(password);
				Shop.userList.add(user);
				System.out.println("注册成功!");
				 
				Shop.saveUserListToFile();
				
				break;
			} else
				System.out.println("两次密码输入不一致!");
		}

	}

	public void login()
	{
		System.out.println("欢迎登录!");
		System.out.println("请输入用户名!");
		String login_username = Shop.sc.next();
		boolean loginResult = false;
		while (true)
		{
			System.out.println("请输入密码:");
			String login_password = Shop.sc.next();
			for (User user : Shop.userList)
			{
				if (login_username.equals(user.getUsername()) && login_password.equals(user.getPassword()))
				{
					System.out.println("登陆成功!");
					this.setLogin(true);
					loginResult = true;
					break;
				}
			}
			if (loginResult == true)
				break;
			else
				System.out.println("登陆失败!请重新登录!");
		}

	}

	public void showGood()
	{
		System.out.println("*****商品按价格排序列表如下*****");
		Collections.sort(Shop.goodList);
		for (Good good : Shop.goodList)
		{
			System.out.println(good);
		}

	}

	public void buy()
	{
		while (true)
		{
			System.out.println("请选择你要购买的商品编号:");
			int id = Shop.sc.nextInt();
			System.out.println("您将要购买的商品信息如下:");
			Good shopGood = this.findGoodById(id);
			System.out.println(shopGood);
			System.out.println("请输入要购买的数量:");
			int num = Shop.sc.nextInt();
			Good myGood=new Good();
			
			/*myGood.setId(shopGood.getId());myGood.setName(shopGood.getName());myGood.setPrice(shopGood.getPrice());*/
			myGood=shopGood.clone();
			myGood.setNum(num);
			Shop.myGoodList.add(myGood);
			System.out.println("是否继续Y/N");
			String choice = Shop.sc.next();
			choice=choice.toUpperCase();
			if (choice.equals("N"))
			{
				break;
			}

		}
		
		this.showMyGoodList();
	}

	void showMyGoodList()
	{
		System.out.println("***您购买的商品列表如下:***");
		BigDecimal total= new BigDecimal("0");
		for(Good good:Shop.myGoodList){
			System.out.println(good);
			BigDecimal price=good.getPrice();
			int num=good.getNum();
			total=total.add(price.multiply(new BigDecimal(num)));
		}
		System.out.println("总价格为:"+total);
	}

	public Good findGoodById(int id)
	{
		Good returnGood = null;
		for (Good good : Shop.goodList)
		{
			if (good.getId() == id)
			{
				returnGood = good;
				break;
			}
		}
		return returnGood;
	}

	public String getUsername()
	{
		return username;
	}

	public void setUsername(String username)
	{
		this.username = username;
	}

	public String getPassword()
	{
		return password;
	}

	public void setPassword(String password)
	{
		this.password = password;
	}

}


                                                  


                                 


                       





摘要信息: 电子商城系统主要功能包括:用户注册、用户登录、用户查看商城商品、用户购买商品、用户查看购物车并且清空购物车、用户找回账户以及密码、管理员登录、管理员注册、管理员查看用户信息、管理员删除用户信息、管理员删除商品信息、管理员添加商品信息、管理员修改商品信息、退出登录等。 图形可视化界面运行下能够显示系统启动进度条,删除、添加、注册等相关操作时能够弹出窗口加以提示,退出登录或系统时能够做到单击确认退出按钮才退出登录或系统,能够对用户加以提示。 注册用户或是管理员、添加商品信息、购买商品、删除商品或是用户信息、修改商品信息等相关操作时能够判断有无该用户或是商品。 用户在购买商品的时候同时更新商品的库存数量,管理员删除管理员时可以做到同时删除用户的购买信息。 主要内容: 一、项目名称   基于JAVASE的电子商城系统 二、功能要求 1、用户注册 2、用户登录 3、用户查看商品列表 4、用户购买商品 5、用户查看购买商品列表 6、用户清空购物车 7、用户找回账户和密码 8、管理员登录 9、管理员注册 10、查看用户信息 11、查看商品信息 12、删除用户信息 13、删除商品信息 14、添加商品信息 15、修改商品信息 16、退出用户登录 17、退出管理员登录 18、退出商城 三、需求分析 该系统的用户是商城消费者和商城管理者,根据客户的要求,可以注册、登录、购物、查看购物车信息、找回账户和密码,管理员可以对商品信息进行增加、修改、删除操作,可以对用户进行查看和删除。 四、设计思想 1、在控制台与图形可视化界面下运行 2、使用Mysql数据库存取用户登录信息和商品信息 3、使用List存取商品购买信息 4、把程序分为多个类,多个类之间的互相调用。 5、用户或是管理员进行注册、登录时能够提供校验码。 6、用户或是管理员获取数据库信息时能够与数据库进行交互。 7、用户购物要做到简洁明了。 8、用户只需要身份证号码和邮箱地址就能找回账户和密码。 9、注册、删除、修改等操作要有信息提示。 10、用户、管理员进行操作时能够做到操作提示与用户名提示。 11、退出登录或是退出系统时能够做到让用户有所考虑。 五、具体实现   1、技术思路: 界面:基于控制台与图形可视化界面(Swing)实现用户的输入和输出。 程序流程:在函数中利用循环与递归 ,读取用户输入,调用模块实现各个子功能。 2、功能子模块划分: ① 注册模块 ② 登录模块 ③ 查看商品模块(查看商品列表,购买商品) ④ 查看购买商品信息 ⑤ 管理员登录(添加管理员信息,对商品信息进行查看、增加、 修改、删除,对用户信息进行查看、删除,删除用户信息 时能够做到同时删除消费记录) ⑥ 退出系统 六、运行截图 1、商城系统启动进度条(进度条能够做到动态加载): 2、商城主界面: 3、用户注册界面(填写注册信息不符合要求时能够弹窗提示、并 且判断用户名是否重复等): 4、用户登录界面(账户、密码不一致时能弹窗提示): 5、用户服务选择界面(能够提示用户名): 6、购买商品界面(能够判断输入的商品序号是否正确): 7、查看购物车界面(能够一键清空购物车): 8、查看商城商品信息界面: 9、管理员登录界面: 10、找回账户与密码界面: 11、管理员服务选择界面: 12、添加管理员界面: 13、查看用户信息界面: 14、删除用户信息界面: 15、删除商品信息界面: 16、添加商品信息界面: 17、修改商品信息界面: 18、退出账号、管理员登录、商城系统时要有提示:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值