| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4410 人关注过本帖
标题:求大神帮忙写个与栈相关的商品货架管理程序
只看楼主 加入收藏
a597505541
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-6-3
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:11 
求大神帮忙写个与栈相关的商品货架管理程序
题目描述:在商店中,每种商品用一个货架专门摆放。生产日期越近的越靠近货架底部,出货时从货架顶层取货。一天营业结束后,如果货架不满,则需要上货。如果直接将商品摆放到货架上,会使生产日期越近的商品越靠近货架顶层,这样就需要倒货架,使生产日期越近的越靠近货架底部。
功能要求及说明:
设计一个算法实现商品货架的摆放管理,要求实现以下操作:
(1)初始化商品货架。商品种类不少于10种,每种商品的货架容量为100。
(2)每种商品至少包含商品名称,数量和生产日期3种属性,生产日期以年月日的形式存放。营业时间客户可以从货架取走商品,但取走商品的数量不能超过已有库存量;
(3)当天营业结束后,对货架不满的商品进行上货操作时,保证每一次上货后生产日期越近的商品越靠近货架底部;
(4)上货结束后,对每个商品按照从货架顶部到货架底部的顺序,打印出所有商品的数量和生产日期。
(5)采用模块化设计,分别以函数形式描述上述各功能,程序界面清晰简洁。

 测试数据:
例如:当天营业结束时,商品“牛奶”的货架上有生产日期分别为“2017-01-14”和“2017-04-22”的各20份,进行上货操作。新上牛奶的生产日期为“2017-05-13”。上货结束后打印该货架上的商品信息应为:
牛奶:生产日期为“2017-01-14”的数量20;
生产日期为“2017-04-22”的数量20,
生产日期为“2015-05-13”的数量60。

 提示:
以栈结构实现商店货架。生产日期越近的越靠近栈底,出货时从栈顶取货。如果直接将商品摆放到货架上,会使生产日期越近的商品越靠近栈顶,这样就需要倒货架,使生产日期越近的越靠近栈底。
搜索更多相关主题的帖子: 管理程序 商品货架 年月日 种类 
2017-06-03 22:06
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:14 
作业贴吗?为啥不先写,遇到问题再问呢?

剑栈风樯各苦辛,别时冰雪到时春
2017-06-03 22:16
a597505541
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-6-3
收藏
得分:0 
主要是不太清楚该怎么写啦,大神帮帮忙啦
2017-06-03 22:24
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 3楼 a597505541
你是什么不会写,是语言还是算法

剑栈风樯各苦辛,别时冰雪到时春
2017-06-03 22:55
a597505541
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-6-3
收藏
得分:0 
主要是算法的代码
2017-06-04 22:42
a597505541
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-6-3
收藏
得分:0 
回复 4楼 林月儿
主要是算法的代码
2017-06-04 22:43
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
程序代码:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java. java.util.TreeSet;

public class Test2 {
    static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    static TreeSet<StorageRack> someA = new TreeSet<StorageRack>(new Comparator<StorageRack>() {
        @Override
        public int compare(StorageRack o1, StorageRack o2) {
            try {
                return sdf.parse(o1.getDate()).compareTo(sdf.parse(o2.getDate()));
            } catch (ParseException e) {
                return -1;
            }
        }
    });
    public static void add(StorageRack one){
        someA.add(one);
    }
    public static void add(String name, int num, String date){
        if (num <= 100) {
            someA.add(new StorageRack(name, num, date));
        } else {
            System.out.println("can not over than 100");
        }
    }
    public static void del(String name, int num){
        StorageRack tmp = new StorageRack(name, 0, null);
        for(StorageRack one:someA){
            if(one.equals(tmp)){
                if(num <= one.getNum()){
                    one.setNum(one.getNum()-num);
                }else{
                    System.out.println("can not over than "+one.getNum());
                }
                break;
            }
        }
    }
    public static void display(){
        int num=0;
        for(StorageRack some:someA){
            if(num<1){
                System.out.println(some.getName()+":");                
            }
            System.out.println(some);            
            num++;
        }
    }
    public static void main(String[] args) {
        StorageRack s1 = new StorageRack("牛奶", 20, "2017-01-14");
        StorageRack s2 = new StorageRack("牛奶", 20, "2017-04-22");
        add(s1);
        add(s2);
        add("牛奶",60, "2017-05-13");
        display();
    }
}
class StorageRack {
    private String name;
    private int num;
    private String date;
    
    public String getDate() {
        return date;
    }
    public String getName() {
        return name;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public StorageRack(String name, int num, String date) {
        super();
        this.name = name;
        this.num = num < 100 ? num : 100;
        this.date = date;
    }
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof StorageRack){
            return name.equals(((StorageRack)obj).getName());
        }
        return false;
    }
    @Override
    public String toString() {
        return "生产日期为“@1”的数量@2".replace("@1", date).replace("@2", num+"");
    }
}

剑栈风樯各苦辛,别时冰雪到时春
2017-06-08 21:39
a597505541
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-6-3
收藏
得分:0 
回复 7楼 林月儿
谢谢大神,大神,我还想问下,因为直接将商品摆放到货架上,会使生产日期越近的商品越靠近栈顶,怎样才能使生产日期越近的越靠近栈底,出货时从栈顶取货(即就是后输入的会显示在下面,最开始输入的显示在上面)。
2017-06-09 21:05
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 8楼 a597505541
你说的是栈结构吗?听起来像队列呢
可以定义一个工具类,再在里面创建这样的数据结构,我用的是集合,你可以用数组加当前存放数据的长度。不好的地方就是数组定长。
说正题,你提到的按日期近存栈底,取时从顶部开始。那么,如果是数组,可以用插入排序的思路降序对每个插入元素调整位置。如果是集合,那就不用那么麻烦啦,自定义比较器调自带添加方法还是很方便的!

剑栈风樯各苦辛,别时冰雪到时春
2017-06-09 21:25
a597505541
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-6-3
收藏
得分:0 
回复 9楼 林月儿
因为要实现这样的结果:
当天营业结束时,商品“牛奶”的货架上有生产日期分别为“2017-01-14”和“2017-04-22”的各20份,进行上货操作。新上牛奶的生产日期为“2017-05-13”。上货结束后打印该货架上的商品信息应为:
牛奶:生产日期为“2017-01-14”的数量20;
生产日期为“2017-04-22”的数量20,
生产日期为“2017-05-13”的数量60。

所以是在入栈时对入栈元素进行排序吗?
2017-06-09 21:33
快速回复:求大神帮忙写个与栈相关的商品货架管理程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033655 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved