Bootstrap

【Java 】便利店管理信息系统

介绍:便利店管理信息系统是一个典型的商用系统。在生活中便利店中的角色通常包括店主也就是管理员、店内员工以及来购买的顾客。所以整个系统应分为三个层次:

1、管理员:管理员使用权限最高的管理界面来实现对全店信息的整体管理。对于店内员工,管理员可以查看所有的店内员工信息,并可以进行提拔,录用和开除操作。对于便利店中的商品,管理员可以查看店内所有商品的基本信息,并根据实际情况对指定商品进行补货操作。除此之外在管理员操作界面的首页应设计一个区域用来显示便利店的总收入以及顾客信息,更加方便管理员对便利店进行管理。

2、店员:店员在便利店中的的权限相比于管理员就要少很多。店员可以查看店内的商品信息来决定商品是否需要补货。

3、顾客:因为每天的顾客不固定,而且来便利店的目的只有购买商品,所以只需要向其展示便利店的特色以及店中的商品信息满足顾客的购买需求。

代码:

//Administrators类


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.*;
public class Administrators {
    public JTextArea at;
    public Administrators() {
        at = new JTextArea();
        at.setEditable(false); // 设置为不可编辑
    }
    public void start(String name) {   //初始化管理员界面
        JFrame f1 = new JFrame("管理界面");
        JPanel p1 = new JPanel();//北
        JPanel p2 = new JPanel();//西
        JPanel p3 = new JPanel();//中
        //JPanel p4 = new JPanel();
        JLabel l1 = new JLabel("管理员"+name+"欢迎回来!");
        JScrollPane scrollPane = new JScrollPane(at);
        String way = "D:\\顾客信息.csv";//顾客信息表路径
        JButton b1 = new JButton("首页");
        JButton b2 = new JButton("商品");
        JButton b3 = new JButton("员工信息");    
        Csv c1 = new Csv();
        double sum = c1.sumColumn(way,3);
        JLabel l2 = new JLabel("总收入"+sum+"元");
        loadAndDisplayCSV(way);
        b2.addActionListener(new ActionListener() {//商品按钮,跳转商品类的管理
                public void actionPerformed(ActionEvent e) {
                    Product p1 = new Product();
                    p1.productor(name);
                   f1.dispose();
                   }
            });
         
        b3.addActionListener(new ActionListener(){//员工按钮,跳转员工类管理
             public void actionPerformed(ActionEvent e) {
                 new Salesperson().Display(name);
                 f1.dispose();
             }
         });
        p3.add(at);
        p3.add(scrollPane);
        p2.setLayout(new GridLayout(3,1));
        p2.add(b1);
        p2.add(b2);
        p2.add(b3);
        f1.setSize(600, 400);
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        p1.add(l1);
        p1.add(l2);
        f1.add(p1,BorderLayout.NORTH);
        f1.add(p2,BorderLayout.WEST);
        f1.add(p3,BorderLayout.CENTER);
        f1.setLocationRelativeTo(null);
        f1.setVisible(true);
    }
    
    public void loadAndDisplayCSV(String filePath) {//读文件方法
        BufferedReader br = null;
            try {
                br = new BufferedReader(new FileReader(filePath));
                   String line;
                    while ((line = br.readLine()) != null) {
                        // 去除逗号,并整齐显示
                        String[] fields = line.split(",");
                        StringBuilder formattedLine = new StringBuilder();
                        for (String field : fields) {
                            formattedLine.append(field).append("\t"); // 使用制表符作为字段之间的分隔符
                        }
                        at.append(formattedLine.toString().trim() + "\n");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (br != null) {
                        try {
                            br.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
}

//Csv类,实现对csv文件的一些基本操作


import java.io.*;

import java.util.ArrayList;
import java.util.List;
public class Csv {
    
    //删除指定单元格
     public void modifyCSV(String csvFile, String targetData, int targetColumn, int modifyColumn, String newData)throws IOException {
            // 读取CSV文件内容到二维数组中
            String[][] data = readCSV(csvFile);

            // 查找给定数据所在的单元格位置
            int rowToUpdate = -1;
            for (int row = 0; row < data.length; row++) {
                if (data[row][targetColumn].equals(targetData)) {
                    rowToUpdate = row;
                    break;
                }
            }

            if (rowToUpdate == -1) {
                throw new IllegalArgumentException("未找到指定的目标数据:" + targetData);
            }

            // 修改同一行中指定列的单元格内容
            if (modifyColumn >= 0 && modifyColumn < data[rowToUpdate].length) {
                data[rowToUpdate][modifyColumn] = newData;
            } else {
                throw new IllegalArgumentException("要修改的列超出范围!");
            }

            // 将修改后的数据写回CSV文件
            writeCSV(csvFile, data);
        }

        // 读取CSV文件并返回二维数组
        private  String[][] readCSV(String csvFile) throws IOException {
            BufferedReader reader = new BufferedReader(new FileReader(csvFile));
            String line;
            int lines = 0;
            int fields = 0;

            // 统计行数和列数
            while ((line = reader.readLine()) != null) {
                lines++;
                String[] parts = line.split(",");
                if (fields == 0) {
                    fields = parts.length;
                }
            }

            reader.close();

            // 创建二维数组
            String[][] data = new String[lines][fields];
            // 重新读取CSV文件并填充二维数组
            reader = new BufferedReader(new FileReader(csvFile));
            int row = 0;
            while ((line = reader.readLine()) != null) {
                String[] parts = line.split(",");
                for (int col = 0; col < parts.length; col++) {
                    data[row][col] = parts[col];
                }
                row++;
            }
            reader.close();
            return data;
        }

        // 将二维数组写回CSV文件
        private void writeCSV(String csvFile, String[][] data) throws IOException {
            BufferedWriter writer = new BufferedWriter(new FileWriter(csvFile));
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < data.length; i++) {
                for (int j = 0; j < data[i].length; j++) {
                    sb.append(data[i][j]);
                    if (j < data[i].length - 1) {
                        sb.append(",");
                    }
                }
                sb.append("\n");
            }
            writer.write(sb.toString());
            writer.close();
        }
    //删一行
     public void deleteCSVRow(String csvFile, int rowToDelete) throws IOException {
            List<List<String>> rows = new ArrayList<>();

            // 读取CSV文件
            try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
                String line;
                while ((line = br.readLine()) != null) {
                    String[] data = line.split(","); // CSV文件的列使用逗号分隔
                    List<String> rowData = new ArrayList<>();
                    for (String datum : data) {
                        rowData.add(datum);
                    }
                    rows.add(rowData);
                }
            }

            // 删除指定的行
            if (rowToDelete < rows.size()) {
                rows.remove(rowToDelete);
            } else {
                throw new IndexOutOfBoundsException("Row index is out of bounds.");
            }

            // 将更新后的数据写回CSV文件
            try (BufferedWriter bw = new BufferedWriter(new FileWriter(csvFile))) {
                for (List<String> rowData : rows) {
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < rowData.size(); i++) {
                        if (i > 0) {
                            sb.append(",");
                        }
                        sb.append(rowData.get(i));
                    }
                    bw.write(sb.toString());
                    bw.newLine();
                }
            }
        }
     
     //追加一行
     public void appendToCSV(String csvFile, String[] data) throws IOException {
            BufferedWriter writer = new BufferedWriter(new FileWriter(csvFile, true)); // true 表示追加模式
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < data.length; i++) {
                if (i > 0) {
                    sb.append(",");
                }
                sb.append(data[i]);
            }
            sb.append("\n"); 
            // 写入数据行到文件
            writer.write(sb.toString());
            writer.close();
        }
    //某列除第一个单元格相加
     public double sumColumn(String filename, int columnIndex) {
            double sum = 0;

            try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
                String line;
                while ((line = br.readLine()

;