• 【JAVA】-- 简易超市管理系统窗口(五)(实现思路+每步代码)


    前面完成了“删除内容”部分的界面布局,下面完成具体功能。

    一、为“添加货物”按钮增加点击事件

    Shan类增加

    构造方法增加

    增加点击事件,先去除上次添加商品,重置列表的作用。

    1. //添加货物
    2. button1.addActionListener(new ActionListener() {
    3. @Override
    4. public void actionPerformed(ActionEvent e) {
    5. box1.removeAllItems();//去除上次添加商品,重置列表

     先判断文件是否存在,如果不存在则提示并返回。

    1. try {
    2. File file = new File("E:\\大二\\\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_member.txt");
    3. if(!file.exists()){
    4. JOptionPane.showMessageDialog(null,"库存文件不存在");
    5. return;
    6. }

    然后读取文件内容,将文件内容,存入集合中。

    1. FileReader fr = new FileReader(file);
    2. BufferedReader br = new BufferedReader(fr);
    3. List<String> list = new ArrayList<String>();
    4. String str;
    5. while ((str = br.readLine())!=null){
    6. list.add(str);
    7. }

    再将集合中的内容取出,并截取商品的名称,将商品名称添加到下拉框中。

    1. int line = list.size();
    2. for (int i = 0;i<line;i++){
    3. String iStr = list.get(i);
    4. int start = iStr.indexOf("商品名称");
    5. int end = iStr.indexOf("商品数量");
    6. String value = iStr.substring(start+5,end);//截取商品名称
    7. box1.addItem(value);//将商品添加到下拉框
    8. }
    9. }catch (Exception e1){
    10. e1.printStackTrace();
    11. }
    12. }
    13. });

     二、为下拉框里的Item增加点击事件

    先获取到文件所有内容,存入集合,再根据点击的Item下标找到集合里相同的下标的元素,最后输入到输入框。

    Shan类增加

    构造方法增加

    为下拉框里的每个元素增加点击事件,先读取文件里的所有内容并添加到集合。

    1. //下拉框
    2. box1.addItemListener(new ItemListener() {
    3. @Override
    4. public void itemStateChanged(ItemEvent e) {
    5. try {
    6. File file = new File("E:\\大二\\下\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_member.txt");
    7. FileReader fr = new FileReader(file);
    8. BufferedReader br = new BufferedReader(fr);
    9. List<String> list = new ArrayList<String>();
    10. String str;
    11. while((str = br.readLine())!=null){
    12. list.add(str);
    13. }

    然后通过遍历下拉框元素,在集合里找到与点击下拉框Item的下标相同的元素,截取到商品名称,将商品名称输入到输入框中。

    1. for(int i = 0;i<box1.getItemCount();i++){
    2. String iStr = list.get(box1.getSelectedIndex());//得到下拉列表中的商品名称,然后集合中得到与下拉列表获取的商品名称相同的元素。
    3. int start1 = iStr.indexOf("商品名称");
    4. int end1= iStr.indexOf("商品数量");
    5. String value1 = iStr.substring(start1+5,end1);
    6. field2.setText(value1);//将商品名称添加到输入框.
    7. }
    8. }catch (Exception e1){
    9. e1.printStackTrace();
    10. }
    11. }
    12. });

    三、为“销售”按钮增加点击事件,设置不可为空条件

    Shan类增加

    构造方法增加

    1. button2.addActionListener(new ActionListener() {
    2. @Override
    3. public void actionPerformed(ActionEvent e) {
    4. if(field3.getText().equals("")){
    5. field3.setText("未知");
    6. }
    7. if(field4.getText().equals("")){
    8. JOptionPane.showMessageDialog(null,"商品价格不可为空");
    9. return
    10. }
    11. if(field5.getText().equals("")){
    12. JOptionPane.showMessageDialog(null,"销售数量不可为空");
    13. return;
    14. }
    15. }
    16. });

    四、“销售”后修改库存中的商品数量

    “销售”后将剩余的商品数量计算出来,并遍历库存文件找到销售的商品,先将集合中的剩余商品数量更新,再将集合更新到库存文件中。注意库存文件是否存在、库存是否足够的问题。

    Shan类增加

    构造方法中的button2点击事件增加

    首先读取库存文件,不存在则返回

    1. try {
    2. File file = new File("E:\\大二\\\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_member.txt");
    3. if(!file.exists()){
    4. JOptionPane.showMessageDialog(null,"库存文件不存在");
    5. return;
    6. }

    遍历找到文件中销售的商品,截取文件中每条数据的商品名称和输入框中的商品名称。

    1. FileReader fr= new FileReader(file);
    2. BufferedReader br = new BufferedReader(fr);
    3. String str;
    4. while((str = br.readLine())!=null){
    5. String key = field2.getText();
    6. int start = str.indexOf("商品名称");
    7. int end = str.indexOf("商品数量");
    8. String value = str.substring(start+5,end);

    判断商品名称是否相同,相同则获取库存文件中的商品数量并转换为int类型。

    1. if(value.equals(key)){
    2. int start1 = str.indexOf("商品数量");
    3. int end1 = str.indexOf(";");
    4. String value1 = str.substring(start1+5,end1);
    5. int intValue1 = Integer.parseInt(value1);

    如果库存中的商品数量小于输入的商品数量,则提示库存不足并返回。

    1. if(intValue1 < Integer.parseInt(field5.getText())){
    2. JOptionPane.showMessageDialog(null,"库存不足");
    3. return;
    4. }

    如果库存足够,计算剩余数量,将剩余数量保存进文件,

    先将文件内容全部存入集合中。

    1. else{
    2. int member = intValue1 - Integer.parseInt(field5.getText());
    3. try {
    4. //将剩余数量保存进文件
    5. FileReader fr2 = new FileReader("E:\\大二\\\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_member.txt");
    6. BufferedReader br2 = new BufferedReader(fr2);
    7. List<String> list2 = new ArrayList<String>();
    8. String str2;
    9. while ((str2 = br2.readLine())!=null){
    10. list2.add(str2);
    11. }

    再更新集合中的商品的数量,将剩余的商品数量存到集合中商品名称相同的位置。

    1. int line2 = list2.size();
    2. for(int i = 0;i<line2;i++){//更新集合中的商品数量
    3. String iStr2 = list2.get(i);
    4. int start2 = iStr2.indexOf("商品名称");
    5. int end2 = iStr2.indexOf("商品数量");
    6. String value2 = iStr2.substring(start2+5,end2);
    7. if(value2.equals(field2.getText())){
    8. list2.set(i,"商品名称:"+value2+"商品数量:"+member);
    9. }
    10. }

    创建一个高级输入流,将文件内容清空。

    1. FileWriter fw2 = new FileWriter("E:\\大二\\\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_member.txt");
    2. BufferedWriter bw2 = new BufferedWriter(fw2);
    3. bw2.write("");

    再创建一个输入流将集合中的内容存入文件,最后关闭所有流。

    1. FileWriter fw3 = new FileWriter("E:\\\\大二\\\\\\\\JAVA\\\\JAVA课程\\\\专题训练\\\\超市管理系统\\\\sava_member.txt",true);//追加内容不会覆盖以前的
    2. BufferedWriter bw3 = new BufferedWriter(fw3);
    3. Iterator<String> it = list2.iterator();
    4. while (it.hasNext()){
    5. String value3 = it.next();
    6. bw3.write(value3);
    7. bw3.newLine();
    8. }
    9. bw3.close();
    10. fw3.close();
    11. bw2.close();
    12. fw2.close();
    13. br2.close();
    14. fr2.close();
    15. }catch (Exception e1){
    16. e1.printStackTrace();
    17. }
    18. }
    19. }
    20. }
    21. }catch (Exception e1){
    22. e1.printStackTrace();
    23. }

    五、“销售”后修改总资金文件中的总资金

    将输入框中的销售数量与单价相乘得到收益,将资金文件中的资金与收益相加得到目前总资金。

    Shan类增加

    构造方法增加

    计算收益的资金,即销售数量与单价相乘,并输入到输入框。

    1. double price=Double.parseDouble(field4.getText());
    2. int member=Integer.parseInt(field5.getText());
    3. double money=price*member;//获取销售商品的收益资金
    4. field6.setText(String.format("%.2f", money));

    判断文件是否存在

    1. double totalMoney=0;
    2. try{
    3. File file=new File("E:\\大二\\\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_money.txt");
    4. if(!file.exists()){
    5. JOptionPane.showMessageDialog(null, "存款文件不存在");
    6. return;//判断save_money.txt是否存在
    7. }

    如果存在,读取文件内容,将收益与原来的总资金相加得到现在总资金,并输入到输入框。

    1. FileReader fr=new FileReader(file);
    2. BufferedReader br=new BufferedReader(fr);
    3. String str;
    4. if((str=br.readLine())!=null){
    5. totalMoney=Double.parseDouble(str);//读取剩余资金
    6. totalMoney+=money;//把收益和原来的资金相加
    7. field7.setText(String.valueOf(totalMoney));

    将现在的总资金,保存到文件中。

    1. try{
    2. File file1=new File("d:/save_money.txt");
    3. FileWriter fw=new FileWriter(file1);
    4. BufferedWriter bw=new BufferedWriter(fw);
    5. bw.write(String.valueOf(totalMoney));
    6. //把目前的资金数量写入文件
    7. bw.close();
    8. fw.close();
    9. }catch(Exception e1){
    10. e1.printStackTrace();
    11. }
    12. }
    13. }catch(Exception e1){
    14. e1.printStackTrace();
    15. }

    六、经办人、日期

    Shan类增加

    构造方法增加

    经办人不可为空

    1. if(field8.getText().equals("")){
    2. JOptionPane.showMessageDialog(null, "经办人不可为空");
    3. return;
    4. }

    获取当前时间并输入到输入框。

    1. SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
    2. Date date=new Date();
    3. String dateNow=format.format(date);
    4. field9.setText(dateNow);//把销售信息填写到各个输入框

    七、“销售”后修改进货文件中的销售信息

    Shan类增加

    构造方法增加

    找到进货文件,不存在则返回。

    1. try{
    2. File file=new File("E:\\大二\\\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_date.txt");
    3. if(!file.exists()){
    4. JOptionPane.showMessageDialog(null, "订单文件不存在");
    5. return;
    6. }//如果文件不存在,直接返回,否则写入销售信息

    如果存在,读取文件内容,将所有内容添加到集合中。

    1. FileReader fr=new FileReader(file);
    2. BufferedReader br=new BufferedReader(fr);
    3. List<String> list=new ArrayList<String>();
    4. String str;
    5. while((str=br.readLine())!=null){
    6. list.add(str);
    7. }

    拼接字符串将新信息添加到集合。

    1. int line=list.size();
    2. String nameStr=",货物名称:"+field2.getText();
    3. String makerStr=",货物厂家:"+field3.getText();
    4. String priceStr=",货物价格:"+field4.getText();
    5. String memberStr=",货物数量:"+field5.getText();
    6. String getStr=",货物开销:"+field6.getText();
    7. String surplusStr=",货款余额:"+field7.getText();
    8. String operatorStr=",经办人:"+field8.getText();
    9. String dateStr=",进货日期:"+field9.getText();
    10. String finStr="单号:"+field9.getText()+"#"+ i++
    11. +nameStr+makerStr+priceStr+memberStr+getStr+
    12. surplusStr+operatorStr+dateStr;
    13. /**
    14. 把每个输入框的信息合并
    15. */
    16. list.add(line, finStr);//合并信息写入集合

    先清空文件,将新的集合重新写进进货文件。

    1. FileWriter fw=new FileWriter(file);
    2. BufferedWriter bw=new BufferedWriter(fw);
    3. bw.write("");//清空文件
    4. FileWriter fw1=new FileWriter(file, true);
    5. BufferedWriter bw1=new BufferedWriter(fw1);
    6. Iterator<String> it=list.iterator();
    7. while(it.hasNext()){
    8. String value=it.next();
    9. bw1.write(value);
    10. bw1.newLine();
    11. }//把合并后的销售信息写入文件
    12. bw.close();
    13. fw.close();
    14. bw1.close();
    15. fw1.close();
    16. br.close();
    17. fr.close();
    18. }catch(Exception e1){
    19. e1.printStackTrace();
    20. }
  • 相关阅读:
    在执行对 HDFS 中创建用户目录的指令时,回复的命令如下图所示
    1000W用户1Wqps高并发签到系统的架构和实操
    BUG记录:springMVC引入vue报错---not defined
    13年老鸟整理,性能测试技术知识体系总结,从零开始打通...
    2022牛客多校联赛第四场 题解
    【Dive into Deep Learning / 动手学深度学习】第十章 - 第一节:注意力提示
    【Python】对中文排序
    撸视频号收益这个副业靠谱吗?
    【青书学堂】2023年第二学期 PhotoShop基础与应用(高起专) 作业
    git教程(1)---本地仓库操作
  • 原文地址:https://blog.csdn.net/Tir_zhang/article/details/125458722