【Java】Conception du programme d'enregistrement des transactions d'achat dans les centres commerciaux

[Présentation de la tâche]

1.Description de la tâche

Il existe de nombreux types de marchandises dans l'entrepôt du centre commercial et chaque fois que les marchandises sont achetées, un enregistrement d'achat doit être généré et enregistré dans le fichier. Ce
cas nécessite l'écriture d'un programme pour enregistrer les transactions d'achat dans un centre commercial et l'utilisation de flux d'octets pour enregistrer les informations d'achat dans un centre commercial dans un
fichier CSV local. Les exigences spécifiques du programme sont les suivantes.

Une fois le programme démarré, il imprime d'abord toutes les informations sur les produits existant dans l'inventaire.

Lors de l'achat de marchandises, l'utilisateur saisit le numéro de produit, le programme interroge les informations sur le produit correspondantes en fonction du numéro et imprime les
informations sur le produit. Une fois que l'utilisateur a saisi la quantité achetée, les informations d'entreposage actuelles sont enregistrées dans un fichier CSV local et la
quantité en stock du produit dans le programme est mise à jour (nouvelle quantité = ancienne quantité + quantité achetée).

Dans le fichier CSV enregistré dans ce projet, la première ligne est la ligne de titre. Chaque enregistrement contient le numéro de produit, le nom du produit, la
quantité achetée, le prix unitaire, le prix total et les champs de contact. Les champs sont directement séparés par des virgules anglaises "," .

Les enregistrements de plusieurs achats quotidiens sont enregistrés dans le même fichier. Le format de dénomination du nom de fichier est « Tableau des enregistrements d'achat ».

  • Date du jour + ".csv", tel que "Tableau des enregistrements d'achat 20200430.csv". Lors de l'enregistrement d'un fichier, vous devez déterminer le nom local

Si le fichier du jour existe déjà, s'il existe, ajoutez les données ; s'il n'existe pas, créez d'abord un nouveau fichier.

【cible de la mission】

 Apprenez à analyser les idées de mise en œuvre du programme « Mall Purchase Transaction Record ».

 Compléter de manière indépendante l'écriture du code source, la compilation et l'exploitation des « enregistrements de transactions d'achat dans les centres commerciaux » sur la base d'idées.

 Maîtriser la classe File et les méthodes de flux d'octets pour exploiter les fichiers locaux.

 Maîtriser l'utilisation d'ArrayList, Date et StringBuffer, ainsi que la gestion des exceptions.

 Comprendre le format de fichier CSV.

[Idées de mise en œuvre]

1. Afin de faciliter le stockage des informations relatives au produit, les informations sur le produit peuvent être encapsulées dans une classe d'entité Good.

 Les attributs de la catégorie de produit sont :

 identifiant int ; // numéro

 Nom de la chaîne ; // nom

 prix double ; // prix unitaire

 montant int ; // quantité

 double prix total ; // prix total

 Personnes de cordes ; //Personne de contact

 Le programme doit imprimer des informations relatives au produit, il doit donc réécrire la méthode toString() afin qu'il puisse renvoyer
une chaîne au format spécifié. Pour observer les résultats de l'impression, analysez vous-même le format de la chaîne.

2. Afin de démontrer l’achat de marchandises dans le centre commercial, nous devons encapsuler le centre commercial dans une classe Mall.

 L'entrepôt du centre commercial contient une variété de produits. Définissez une collection ArrayList (membre statique) dans la classe Mall pour simuler
l'entrepôt du centre commercial. Ajoutez des objets produit avec des informations spécifiques à la collection afin que l'entrepôt contienne des produits.

 Les méthodes de la classe Mall sont :

 Méthode principale principale

 Méthode d'initialisation du produit d'inventaire : void initStock()

 Méthode pour afficher les informations sur les produits en stock : void showStock()

 Méthode d'opération de stockage du produit : void intoStock()

 Méthode pour trouver des informations sur le produit en fonction du numéro de produit : Good getGoodById (int goodId)

Parmi ces méthodes, la méthode de stockage des produits intoStock() est la partie essentielle et la plus complexe. Le processus est le suivant : obtenir
le numéro de produit et la quantité d'achat saisie par l'utilisateur. Si le numéro de produit est correct et la quantité d'achat est normale, le produit est
acheté de ce produit sont enregistrées dans un fichier CSV, et la quantité en stock est également requise .
Le numéro de produit peut être obtenu via la méthode nextInt() de la classe Scanner, et les informations de ce produit peuvent être interrogées dans l'inventaire en fonction de ce numéro
. Si les informations sur le produit sont trouvées, obtenez la quantité des biens achetés et créez un objet
représentant les biens achetés. Notez que la quantité de cet objet est la quantité achetée et que le prix total est le prix d'achat total.
Enfin, enregistrez les informations sur l'objet d'achat dans le fichier. Les opérations sur les fichiers sont plus complexes et indépendantes. Vous pouvez concevoir une classe d'outils d'exploitation de fichiers FileUtil séparément et définir une méthode void saveGood(Good good)
dans cette classe pour enregistrer les données d'achat .

3. La classe d'outils d'exploitation de fichiers FileUtil n'a qu'une seule méthode statique void saveGood (Good good), qui
écrit les informations de l'objet de produit de vente good dans le fichier csv.

Tout d'abord, vous devez reconstituer le nom du fichier CSV (tel que "Table d'enregistrement d'achat 20211111.csv"), puis déterminer si
ce fichier existe déjà localement. Cela peut être déterminé via la méthode membre isExist() de l'objet de classe File. . Si ce fichier existe déjà , alors les informations sur les ventes seront ajoutées à la fin du fichier via le flux de sortie. S'il n'existe pas, cela signifie que les informations sur les ventes du jour
n'ont pas été générées auparavant et ce fichier doit Être créé.

Le processus de sauvegarde des données est le suivant : Bonnes propriétés d'objet → StringBuffer → Chaîne → octet [] → Flux de sortie → Fichier

[Code d'implémentation]

(1) Encapsuler les informations sur le produit dans une classe d'entité Good.

(2) Définissez la classe Mall pour encapsuler le centre commercial afin de mettre en œuvre l'entreposage et l'affichage des informations sur les produits.

(3) Définissez la classe d'outils FileUtil pour enregistrer les informations d'achat

package cn.edu.gpnu.bank.cn.edu.gpnu.exp11;

public class Good {
    
    
    int id;
    String name;
    double price;
    int amount;
    double totalPrice;
    String people;

    public Good(int id, String name, String people,double price, int amount) {
    
    
        this.id = id;
        this.name = name;
        this.price = price;
        this.amount = amount;
        this.people = people;
        this.totalPrice=price*amount;
    }

    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 double getPrice() {
    
    
        return price;
    }

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

    public int getAmount() {
    
    
        return amount;
    }

    public void setAmount(int amount) {
    
    
        this.amount = amount;
    }

    public double getTotalPrice() {
    
    
        return totalPrice;
    }

    public void setTotalPrice(double totalPrice) {
    
    
        this.totalPrice = totalPrice;
    }

    public String getPeople() {
    
    
        return people;
    }

    public void setPeople(String people) {
    
    
        this.people = people;
    }

    public String toString() {
    
    
        return "进货商品编号:" + getId() + ", 商品名称" + getName() + ", 联系人:" + getPeople() + ", 单价" + getPrice() + ", 库存数量:" + getAmount() +  "}";
    }
}

package cn.edu.gpnu.bank.cn.edu.gpnu.exp11;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class Mall {
    
    
    //创建商品库存列表
    static ArrayList<Good> stock = new ArrayList<>();

    public static void main(String[] args) {
    
    
        initStock(); //库存商品初始化
        showStock(); //显示库存信息
        intoStock(); //商品入库操作
    }
    /**
     * 库存商品信息初始化
     */
    private static void initStock() {
    
    
        stock.add(new Good(1001, "百事可乐", "张三", 4.5, 100));
        stock.add(new Good(1002, "可口可乐", "李四", 4.0, 100));
        stock.add(new Good(1003, "百事雪碧", "张三", 3.8, 100));
//补充若干行代码
    }

    /**
     * 打印库存的商品信息
     */
    private static void showStock() {
    
    
        System.out.println("库存商品信息如下:");
        Iterator<Good> it = stock.iterator();
        while (it.hasNext()) {
    
    
            Good good = it.next();
            System.out.println(good.toString());
        }
// 补充若干行代码
    }

    /**
     * 商品入库操作
     */
    private static void intoStock() {
    
    
        while (true) {
    
    
            int goodId;
            Scanner scanner = new Scanner(System.in);
            System.out.println("商品入库,请输入商品编号:");
            goodId = scanner.nextInt();
//补充若干行代码
            Good stockGood = getGoodById(goodId);

            if (stockGood != null) {
    
     // 判断是否存在此商品
                int orderAmount;
                System.out.println("请输入进货数量:");
                orderAmount = scanner.nextInt();
//补充若干行代码
// 将入库商品信息封装成 Good 类对象 addGood
                Good addGood = new Good(stockGood.getId(), stockGood.getName(), stockGood.getPeople(), stockGood.getPrice(),orderAmount);
                FileUtil.saveGood(addGood);// 将本条数据保存至本地文件
// 更新库存中该商品数量=原数量+进货数量
                stockGood.setAmount(stockGood.getAmount()+orderAmount);
                stockGood.setTotalPrice(stockGood.getAmount()* stockGood.getPrice());
// 补充代码
// 显示库存信息
                System.out.println("------该商品当前库存信息------");
                showStock();
            } else {
    
    
                System.out.println("商品编号输入错误!");
            }
        }
    }

    /**
     * 根据输入的商品编号查找商品信息
     * 循环遍历库存中商品信息,找到商品编号相等的取出该对象
     */
    private static Good getGoodById(int goodId) {
    
    
        Iterator<Good> it = stock.iterator();
        while (it.hasNext()) {
    
    
            Good good = it.next();
            if(good.getId()==goodId){
    
    
                return good;
            }
        }// 补充若干行代码
        return null;
    }
}

package cn.edu.gpnu.bank.cn.edu.gpnu.exp11;
import java.io.*;
import java.text.*;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileUtil {
    
    
    /**
     * 保存商品信息
     */
    public static void saveGood(Good good) {
    
    
        BufferedOutputStream bos = null; // 带缓冲的字节输出流
        StringBuffer strBuff = new StringBuffer(); // 拼接输出的内容
        Date date = new Date(); //获取当前时间
        DateFormat dateFormat = new SimpleDateFormat("20211115"); //定义日期格式
        String dateStr = dateFormat.format(date); //将日期转换为格式化字符串
        String fileName = "d:\\进货记录表" + dateStr + ".csv"; // 保存的文件名
        try {
    
    
//判断本地是否存在此文件
            File file = new File(fileName);
            if (!file.exists()) {
    
     //不存在文件,采取新建新文件方式
                file.createNewFile();
                bos = new BufferedOutputStream(new FileOutputStream(fileName));
                System.out.println("文件 " + fileName + " 不存在,已新建文件。");
// 将首行标题进行拼接
                String[] fields = {
    
    "商品编号", "商品名称", "购买数量", "单价", "总价", "联系人"}; // 创建表头
                for (String s : fields) {
    
    
                    strBuff.append(s); //追加字段标题
                    strBuff.append(","); //追加字段分隔符
                }
                strBuff.append("\r\n"); //追加换行符
            } else {
    
     //存在文件,采取修改文件方式
                bos = new BufferedOutputStream(new FileOutputStream(fileName,
                        true));//若文件存在,则追加
                System.out.println("文件 " + fileName + " 已存在,将入库记录附加到文件后面。 ");
            }
// 开始追加商品记录
            strBuff.append(good.getId()).append(",");//先追加 id,再继续追加“,”分隔符
            strBuff.append(good.getName()).append(",");
            strBuff.append(good.getAmount()).append(",");
            strBuff.append(good.getPrice()).append(",");
            strBuff.append(good.getTotalPrice()).append(",");
            strBuff.append(good.getPeople()).append(",");
//补充若干行代码
            strBuff.append("\r\n"); //追加换行符
            String str = strBuff.toString();//将 StringBuffer 对象转换为字符串
            byte[] bytes = str.getBytes("GBK");//以 GBK 字符编码方式将字符串

            bos.write(bytes);
//补充代码,将 bytes 数组的全部内容保存到 bos 流。
            System.out.println("成功保存入库信息。");
        } catch (Exception e) {
    
     //捕获各种异常
            e.printStackTrace();
            System.out.println("保存入库信息失败。");
        } finally {
    
    
            try {
    
    
                if (bos != null)
                    bos.close();
            } catch (Exception e2) {
    
    
                e2.printStackTrace();
            }
//补充代码,安全地关闭 bos 流。
        }
    }
}

【résultat de l'opération】
Insérer la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/m0_52703008/article/details/126209311
conseillé
Classement