以前学习java又做个实例,挺值得学习的。
1首先我先列出我们所需要的java类结构。
1)Databasejava --------- 模拟存储商品的数据库。
2)McBeanjava ------------ 商品实体类,一个普通的javabean,里面有商品的基本属性。
3)OrderItemBeanjava --- 订单表。
4)ShoppingCarjava ------ 这个就是最主要的购物车,当然比较简单。
5)TestShoppingCarjava --- 这个是测试类。
2下面贴出具体代码并带关键注释。
---Databasejava
public class Database {
/采用Map存储商品数据,为什么呢?我觉得这个问题你自己需要想下。
Integer 为Map的key值,McBean为Map的value值。
/
private static Map<Integer, McBean> data = new HashMap<Integer, McBean>();
public Database() {
McBean bean = new McBean();
beansetId(1);
beansetName("地瓜");
beansetPrice(20);
beansetInstuction("新鲜的地瓜");
dataput(1, bean);//把商品放入Map
bean = new McBean();
beansetId(2);
beansetName("土豆");
beansetPrice(12);
beansetInstuction("又好又大的土豆");
dataput(2, bean);//把商品放入Map
bean = new McBean();
beansetId(3);
beansetName("丝瓜");
beansetPrice(15);
beansetInstuction("本地丝瓜");
dataput(3, bean);//把商品放入Map
}
public void setMcBean(McBean mcBean){
dataput(mcBeangetId(),mcBean);
}
public McBean getMcBean(int nid) {
return dataget(nid);
}
}
---McBeanjava
public class McBean {
private int id;//商品编号
private String name;//商品名
private double price;//商品价格
private String instuction;//商品说明
public int getId() {
return id;
}
public void setId(int id) {
thisid = id;
}
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
thisprice = price;
}
public String getInstuction() {
return instuction;
}
public void setInstuction(String instuction) {
thisinstuction = instuction;
}
}
---ShoppingCarjava
public class ShoppingCar {
private double totalPrice; // 购物车所有商品总价格
private int totalCount; // 购物车所有商品数量
private Map<Integer, OrderItemBean> itemMap; // 商品编号与订单项的键值对
public ShoppingCar() {
itemMap = new HashMap<Integer, OrderItemBean>();
}
public void buy(int nid) {
OrderItemBean order = itemMapget(nid);
McBean mb;
if (order == null) {
mb = new Database()getMcBean(nid);
order = new OrderItemBean(mb, 1);
itemMapput(nid, order);
update(nid, 1);
} else {
ordersetCount(ordergetCount() + 1);
update(nid, 1);
}
}
public void delete(int nid) {
OrderItemBean delorder = itemMapremove(nid);
totalCount = totalCount - delordergetCount();
totalPrice = totalPrice - delordergetThing()getPrice() delordergetCount();
}
public void update(int nid, int count) {
OrderItemBean updorder = itemMapget(nid);
totalCount = totalCount + count;
totalPrice = totalPrice + updordergetThing()getPrice() count;
}
public void clear() {
itemMapclear();
totalCount = 0;
totalPrice = 00;
}
public void show() {
DecimalFormat df = new DecimalFormat("¤###");
Systemoutprintln("商品编号\t商品名称\t单价\t购买数量\t总价");
Set set = itemMapkeySet();
Iterator it = setiterator();
while (ithasNext()) {
OrderItemBean order = itemMapget(itnext());
Systemoutprintln(ordergetThing()getId() + "\t"
+ ordergetThing()getName() + "\t"
+ dfformat(ordergetThing()getPrice()) + "\t" + ordergetCount()
+ "\t" + dfformat(ordergetCount() ordergetThing()getPrice()));
}
Systemoutprintln("合计: 总数量: " + dfformat(totalCount) + " 总价格: " + dfformat(totalPrice));
Systemoutprintln("");
}
}
---OrderItemBeanjava
public class OrderItemBean {
private McBean thing;//商品的实体
private int count;//商品的数量
public OrderItemBean(McBean thing, int count) {
super();
thisthing = thing;
thiscount = count;
}
public McBean getThing() {
return thing;
}
public void setThing(McBean thing) {
thisthing = thing;
}
public int getCount() {
return count;
}
public void setCount(int count) {
thiscount = count;
}
}
---TestShoppingCarjava
package comshop;
public class TestShoppingCar {
public static void main(String[] args) {
ShoppingCar s = new ShoppingCar();
sbuy(1);//购买商品编号1的商品
sbuy(1);
sbuy(2);
sbuy(3);
sbuy(1);
sshow();//显示购物车的信息
sdelete(1);//删除商品编号为1的商品
sshow();
sclear();
sshow();
}
}
3打印输出结果
商品编号 商品名称 单价 购买数量 总价
1 地瓜 ¥2 3 ¥6
2 土豆 ¥12 1 ¥12
3 丝瓜 ¥15 1 ¥15
合计: 总数量: ¥5 总价格: ¥87
商品编号 商品名称 单价 购买数量 总价
2 土豆 ¥12 1 ¥12
3 丝瓜 ¥15 1 ¥15
合计: 总数量: ¥2 总价格: ¥27
商品编号 商品名称 单价 购买数量 总价
合计: 总数量: ¥0 总价格: ¥0
4打字太累了,比较匆忙,但是主要靠你自己领会。哪里不清楚再提出来。
首先这个需求很奇怪。
购物者买的东西 应该在超市里选的才对。
那么意思就是 万一选的东西 没库存了怎么办?
2种解决方法:
1:每次购买前或者选择的时候,都去后台查询库存,然后提示,这种效率低。但也行就是了
2:在进入这个商品详情页时候查询本商品库存,为0 那就提示没库存了。
import javautilScanner;
//看这样的行吗?
public class StoreCharge {
public static void main(String[] args) {
Scanner sc = new Scanner(Systemin);
Systemoutprintln("输入应付金额:");
double x = scnextDouble();
Price p1 = ampayable(x);
Systemoutprintln(p1toString());
Systemoutprintln("输入实付金额:");
double y = scnextDouble();
Price p2 = ampaid(y);
Systemoutprintln(p2toString());
Systemoutprintln("找零:"+charge(p1,p2)toString());
charge(p1,p2);
}
public static Price charge(Price p1,Price p2){//p1总货价 p2收款
int c,b;
if(p2conner<p1conner){
b = p2conner+10-p1conner;
p2element = p2element-1;
}else
b = p2conner-p1conner;
c = p2element - p1element;
return new Price(c,b);
}
public static Price ampayable(double x){//应付金额
Price a = new Price();
aelement = (int)x;
aconner = (int)(x10 -((int)x)10);
return a;
}
public static Price ampaid(double x){//实付金额
Price a = new Price();
aelement = (int)x;
aconner = (int)(x10 -((int)x)10);
return a;
}
}
class Price{
int element;//元
int conner;//角
public Price(){}
public Price(int e,int c){
element = e;
conner = c;
}
public String toString(){
return element+"元"+conner+"角";
}
}
我写过两次订单结算,不过都是aspnet下的,但是应该差不多吧订单结算是最后的步骤,提交订单之后需要做结算,实际上就是收钱嘛
传统来讲此时需要一个支付接口,比如说支付宝财付通快钱 网银在线之类的,他们提供接口,我们按照他们说明文档来实现就好重要的是交易记录哦!!提交订单后需要交易日志(不能从字面意义上来理解"交易",实际上跟别人讨价还价也是交易的一种不是嘛)转到接口前需要日志,接口返回信息需要日志(表结构差不多啦)这些日志,方便以后退款或者查看状态使用;
不传统来讲除支付接口外,要考虑购物网站个人钱包支付或者线下汇款之类的 建议使用策略模式
额 不知道说啥了缕一缕在纸上构思下就差不多 但一定要考虑好安全性
以上就是关于Java初学者,哪位友友能帮我设计一个简单的类似超市购物车的程序,参考一下~谢谢!全部的内容,包括:Java初学者,哪位友友能帮我设计一个简单的类似超市购物车的程序,参考一下~谢谢!、用JAVA实现超市购物功能,购物时如果购物者所需商品在超市中有则提示购物者买、如何用Java语言编写购物结算系统等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)