注册 登录
重磅消息:开通VIP会员,获取平台所有项目,永久使用,详细请咨询QQ:3376762016
远程服务部署安装,售后服务,请加QQ1:3376762016,QQ2:3597230140(即将满员),QQ3:1399491757(已满)
查看: 1982|回复: 1
打印 上一主题 下一主题

【Java实验】商店货物管理模拟 商品租赁系统

[复制链接]

该用户从未签到

3518

主题

3532

帖子

66万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
666236
QQ
跳转到指定楼层
楼主
发表于 2020-5-14 16:58:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、实验目的
掌握面向对象的程序设计与开发。掌握,封装,多态,继承,异常处理,上转型技术。

二、实验性质
综合性

三、实验内容
要求完成一个商品租赁系统,该系统允许用户租赁商店里的的各种商品。 您将被要求创建一个Store 类,Store 类中保存了一个项目列表的引用。该列
表(称为 itemList)的类型是链表,它包含了商店里面所有项目。这些项目包括: 书籍,杂志,DVD(电影),Blurays(电影),MusicCD。这些项目中的每一个物品都需要存储在列表(itemList)中。
要求你使用继承技术创建一个管理此系统的库类。允许除了添加或删除物品,查找一个物品。还要实现借用一件物品并能将其归还。如果借用的商品已经借出应该抛出 ItemnotFound 的异常。每个物品的信息应该可以写入磁盘中。编写测试程序以确保商品租赁系统的能够正常运行。
要求写注释,生成 JavaDoc

四、实验环境
1.计算机一台;
2.中文 Windows 操作系统;安装 JDK1.6 以上版本,安装 EclipseIDE 软件。

五、实验主要步骤
1.问题分解
实验类图如图 5.1-1 所示,其中,Item 是物品类,ItemList 实现 LinkedList 接口后,将 Item 作为自己的类成员封装起来,Store 继承自 ItemList,对外提供可直接通过 String 操作其中物品的方法。


2.给出程序源码
public class Item
{
        /**
         * 物品名称,String类型,可通过名称实现对物品的各种操作
         */
        private String name;
        /**
         * 租用状态,boolean类型,其为true表明被租用,否则为没被租用
         */
        private boolean rent;

        /**
         * 无参的构造函数,生成一个名字为null 的空物品
         */
        protected Item()
        {
                this("", false);
        }

        /**
         * @param name
         *            要生成的物品名称 生成一个有名字的物品,设定其租用状态为false
         */
        protected Item(String name)
        {
                this(name, false);
        }

        /**
         * @param name
         *            要生成的物品名称
         * @param rent
         *            所生成的物品的租用状态 生成任意名称和租用状态的物品
         */
        protected Item(String name, boolean rent)
        {
                super();
                this.name = name;
                this.rent = rent;
        }

        /**
         * @return name String类,需返回的物品名称 获取物品名称
         */
        protected String getName()
        {
                return name;
        }

        /**
         * @param name
         *            要修改的物品名称 设置物品名称
         */
        protected void setName(String name)
        {
                this.name = name;
        }

        /**
         * @return rent 需返回的物品状态 获取物品是否被租用,真表示被租用,假表示没被租用
         */
        protected boolean isRent()
        {
                return rent;
        }

        /**
         * @param rent
         *            要修改的物品状态 设置物品是否被租用
         */
        protected void setRent(boolean rent)
        {
                this.rent = rent;
        }
}
import java.io.BufferedWriter; import java.io.File;
import java.io.FileWriter; import java.io.IOException; import java.util.LinkedList;


/**
*一个货物的列表类,可对货物进行增删改查并将其状态写入文件,
*其类型是 LinkedList,所存储的物品是 Item 类
*/
@SuppressWarnings({ "serial" })
public class ItemList extends LinkedList<Item>
{
        /**
         * @param target
         *            要增加的物品 在列表中添加物品,调用父类函数add
         */
        public void addItem(Item target)
        {
                super.add(target);
        }

        /**
         * @param target
         *            要寻找的物品
         * @return true|false 是否找到该物品
         * @throws ItemNotFound
         *             没有找到的一场 在列表中查找物品 ,调用contains函数,若没有找到则抛出异常
         */
        public boolean searchItem(Item target)
        {
                if (this.contains(target))
                {
                        return true;
                }
                else
                {
                        try
                        {
                                throw new ItemNotFound("没有找到物品");
                        }
                        catch (ItemNotFound e) {        }
                }
                return false;
        }

        /**
         * @param target
         *            要删除的物品 在列表中删除物品,首先判断列表中是否有此物品,调用searchItem函数, 若有则调用父类remove函数
         */
        public void deleteItem(Item target)
        {
                if (this.searchItem(target))
                {
                        super.remove(position(target));
                }
        }

        /**
         * @param target
         *            要租用的物品
         * @return true|false 是否成功租用 在列表中租用物品,首先在列表中找到该物品的位置,若找不到物品则返回假,
         *         若能找到,在列表中将物品状态设为已租用,返回真。
         */
        public boolean rentItem(Item target)
        {
                if (this.searchItem(target))
                {
                        if (super.get(position(target)).isRent())
                        {
                                return false;
                        }
                        else
                        {
                                target.setRent(true);
                                super.set((position(target)), target);
                        }
                }
                return target.isRent();
        }

        /**
         * @param target
         *            要归还的物品
         * @return true|false 是否成功归还 在列表中归还物品,首先在列表中找到该物品的位置,若找不到物品则返回假,
         *         若能找到,在列表中将物品状态设为未租用,返回真。
         */
        public boolean returnItem(Item target)
        {
                if (this.searchItem(target))
                {
                        if (super.get(position(target)).isRent())
                        {
                                target.setRent(false);
                                super.set((position(target)), target);
                                return true;
                        }
                        else
                        {
                                return false;
                        }
                }
                return target.isRent();
        }

        /**
         * @param target
         *            要查找的物品
         * @return true|false 是否包含该物品 遍历父类链表,若找到该物品,返回真,找不到则返回假
         */
        private boolean contains(Item target)
        {
                for (int i = 0; i < super.size(); i++)
                {
                        Item current = super.get(i);
                        if (current.getName().equals(target.getName()))
                        {
                                return true;
                        }
                }
                return false;
        }

        /**
         * @param target
         *            要查找位置的物品
         * @return position 该物品的位置 遍历父类链表,标记某物品所在的位置
         */
        private int position(Item target)
        {
                for (int position = 0; position < super.size(); position++)
                {
                        Item current = super.get(position);
                        if (current.getName().equals(target.getName()))
                        {
                                return position;
                        }
                }
                return -1;
        }

        /**
         * 将物品信息写入 文件
         */
        public void writeWords()
        {
                try
                {
                        File file = new File("Item.txt");
                        FileWriter newFile = new FileWriter(file, true);
                        BufferedWriter writer = new BufferedWriter(newFile);
                        for (int i = 0; i < super.size(); i++)
                        {
                                Item temp = super.get(i);
                                writer.write(temp.getName());
                                writer.newLine();
                                writer.flush();
                                if (temp.isRent())
                                {
                                        writer.write("rent");
                                }
                                else
                                {
                                        writer.write("unrent");
                                }
                                writer.newLine();
                                writer.flush();
                        }
                        writer.close();
                }
                catch (IOException e)
                {
                        System.out.println(e);
                }
        }
}


/**
*没有找到物品的异常类,对异常进行处理
*/ @SuppressWarnings("serial")
public class ItemNotFound extends Exception
{
/**
* @param message 没有找到物品异常
* 处理没有找到物品的异常,给出提示
*/
@SuppressWarnings("serial")
public class ItemNotFound extends Exception
{
        public ItemNotFound(String message)
        {
                super(message);
                System.out.println("异常!未找到物品");
                // throw new IllegalArgumentException("异常!没有找到物品!");
        }
}
/**
*对列表进行操作的库类,可通过名称直接对列表中的物品进行操作
*/ @SuppressWarnings("serial")
public class Store extends ItemList
{
        /**
         * 构造函数,对整个库中的物品赋初值,设定名字并添加
         */
        Store()
        {
                String[] names = { "BOOKS", "MAGAZINES", "DVD", "BLURAYS", "MUSICCDS" };
                for (int i = 0; i < names.length; i++)
                {
                        Item item = new Item();
                        item.setName(names);
                        super.add(item);
                }
        }

        /**
         * @param name
         *            要增加的物品的名称 在父类中增加指定名称的物品,将该名称封装在物品中后,调用父类addItem函数
         */
        public void addItem(String name)
        {
                Item target = new Item(name);
                super.addItem(target);
        }

        /**
         * @param name
         *            要查找的物品的名称
         * @return true|false 是否成功找到 在父类中查找指定名称的物品,将该名称封装在物品中后,调用父类 searchItem函数
         */
        public boolean searchItem(String name)
        {
                Item target = new Item(name);
                return super.searchItem(target);
        }

        /**
         * @param name
         *            要删除的物品的名称 在父类中删除指定名称的物品,将该名称封装在物品中后,调用父类deleteItem函数
         */
        public void deleteItem(String name)
        {
                Item target = new Item(name);
                super.deleteItem(target);
        }

        /**
         * @param name
         *            要租用的物品的名称
         * @return true|false 是否成功租用 租用指定名称的物品,将该名称封装在物品中后,调用父类 rentItem函数
         */
        public boolean rentItem(String name)
        {
                Item target = new Item(name);
                return super.rentItem(target);
        }

        /**
         * @param name
         *            要查找的物品的名称
         * @return true|false 是否成功找到 归还定名称的物品,将该名称封装在物品中后,调用父类 returnItem函数
         */
        public boolean returnItem(String name)
        {
                Item target = new Item(name);
                return super.returnItem(target);
        }

        /**
         * 调用父类writeWords函数,将所有商品信息写入文件
         */
        public void write()
        {
                super.writeWords();
        }
}
/**
*物品管理测试类,对列表中的每个函数,测试正茬昂和异常情况并输出结果
*/
public class StoreTest
{
        public static void main(String[] args)
        {
                Store myStore = new Store();
                myStore.write();
                String[] names = { "BOOKS", "MAGAZINES", "DVD", "BLURAYS", "MUSICCDS" };

                for (int i = 0; i < names.length; i++)
                {
                        if (myStore.searchItem(names))
                        {
                                if (myStore.rentItem(names))
                                {
                                        System.out.println("租借成功");
                                }
                                else
                                {
                                        System.out.println("已被借用");
                                }
                        }
                }
                for (int i = 0; i < names.length; i++)
                {
                        if (myStore.searchItem(names))
                        {
                                if (myStore.rentItem(names))
                                {
                                        System.out.println("租借成功");
                                }
                                else
                                {
                                        System.out.println("已被借用");
                                }
                        }
                }
                for (int i = 0; i < names.length; i++)
                {
                        if (myStore.searchItem(names))
                        {
                                if (myStore.returnItem(names))
                                {
                                        System.out.println("归还成功");
                                }
                                else
                                {
                                        System.out.println("未成功归还");
                                }
                        }
                }
                for (int i = 0; i < names.length; i++)
                {
                        if (myStore.searchItem(names))
                        {
                                System.out.println("找到!");
                                myStore.deleteItem(names);
                        }
                }
                for (int i = 0; i < names.length; i++)
                {
                        if (myStore.searchItem(names))
                        {
                                System.out.println("找到!");
                                myStore.deleteItem(names);
                        }
                        else
                        {
                                myStore.addItem(names);
                        }
                }
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
java无忧网(http://www.javawyw.com),专业提供Java大作业,小作业,课程设计,毕业设计源码,答辩辅导,作业排错,bug修复,专业解答,远程部署运行项目等服务
本网站所有源码,保证能运行!
QQ:1399491757
回复

使用道具 举报

该用户从未签到

3518

主题

3532

帖子

66万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
666236
QQ
沙发
 楼主| 发表于 2022-9-6 11:08:40 | 只看该作者
<input/>
java无忧网(http://www.javawyw.com),专业提供Java大作业,小作业,课程设计,毕业设计源码,答辩辅导,作业排错,bug修复,专业解答,远程部署运行项目等服务
本网站所有源码,保证能运行!
QQ:1399491757
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 返回顶部