前面完成了“删除内容”部分的界面布局,下面完成具体功能。
构造方法增加
增加点击事件,先去除上次添加商品,重置列表的作用。
- //添加货物
- button1.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- box1.removeAllItems();//去除上次添加商品,重置列表
先判断文件是否存在,如果不存在则提示并返回。
- try {
- File file = new File("E:\\大二\\下\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_member.txt");
- if(!file.exists()){
- JOptionPane.showMessageDialog(null,"库存文件不存在");
- return;
- }
然后读取文件内容,将文件内容,存入集合中。
- FileReader fr = new FileReader(file);
- BufferedReader br = new BufferedReader(fr);
- List<String> list = new ArrayList<String>();
- String str;
- while ((str = br.readLine())!=null){
- list.add(str);
- }
再将集合中的内容取出,并截取商品的名称,将商品名称添加到下拉框中。
- int line = list.size();
- for (int i = 0;i<line;i++){
- String iStr = list.get(i);
- int start = iStr.indexOf("商品名称");
- int end = iStr.indexOf("商品数量");
- String value = iStr.substring(start+5,end);//截取商品名称
- box1.addItem(value);//将商品添加到下拉框
- }
- }catch (Exception e1){
- e1.printStackTrace();
- }
- }
- });

先获取到文件所有内容,存入集合,再根据点击的Item下标找到集合里相同的下标的元素,最后输入到输入框。
构造方法增加
为下拉框里的每个元素增加点击事件,先读取文件里的所有内容并添加到集合。
- //下拉框
- box1.addItemListener(new ItemListener() {
- @Override
- public void itemStateChanged(ItemEvent e) {
- try {
- File file = new File("E:\\大二\\下\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_member.txt");
- FileReader fr = new FileReader(file);
- BufferedReader br = new BufferedReader(fr);
- List<String> list = new ArrayList<String>();
- String str;
- while((str = br.readLine())!=null){
- list.add(str);
- }
然后通过遍历下拉框元素,在集合里找到与点击下拉框Item的下标相同的元素,截取到商品名称,将商品名称输入到输入框中。
- for(int i = 0;i<box1.getItemCount();i++){
- String iStr = list.get(box1.getSelectedIndex());//得到下拉列表中的商品名称,然后集合中得到与下拉列表获取的商品名称相同的元素。
- int start1 = iStr.indexOf("商品名称");
- int end1= iStr.indexOf("商品数量");
- String value1 = iStr.substring(start1+5,end1);
- field2.setText(value1);//将商品名称添加到输入框.
- }
- }catch (Exception e1){
- e1.printStackTrace();
- }
- }
- });
构造方法增加
- button2.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- if(field3.getText().equals("")){
- field3.setText("未知");
- }
- if(field4.getText().equals("")){
- JOptionPane.showMessageDialog(null,"商品价格不可为空");
- return
- }
- if(field5.getText().equals("")){
- JOptionPane.showMessageDialog(null,"销售数量不可为空");
- return;
- }
-
- }
- });
“销售”后将剩余的商品数量计算出来,并遍历库存文件找到销售的商品,先将集合中的剩余商品数量更新,再将集合更新到库存文件中。注意库存文件是否存在、库存是否足够的问题。
构造方法中的button2点击事件增加
首先读取库存文件,不存在则返回
- try {
- File file = new File("E:\\大二\\下\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_member.txt");
- if(!file.exists()){
- JOptionPane.showMessageDialog(null,"库存文件不存在");
- return;
- }
遍历找到文件中销售的商品,截取文件中每条数据的商品名称和输入框中的商品名称。
- FileReader fr= new FileReader(file);
- BufferedReader br = new BufferedReader(fr);
- String str;
- while((str = br.readLine())!=null){
- String key = field2.getText();
- int start = str.indexOf("商品名称");
- int end = str.indexOf("商品数量");
- String value = str.substring(start+5,end);
判断商品名称是否相同,相同则获取库存文件中的商品数量并转换为int类型。
- if(value.equals(key)){
- int start1 = str.indexOf("商品数量");
- int end1 = str.indexOf(";");
- String value1 = str.substring(start1+5,end1);
- int intValue1 = Integer.parseInt(value1);
如果库存中的商品数量小于输入的商品数量,则提示库存不足并返回。
- if(intValue1 < Integer.parseInt(field5.getText())){
- JOptionPane.showMessageDialog(null,"库存不足");
- return;
- }
如果库存足够,计算剩余数量,将剩余数量保存进文件,
先将文件内容全部存入集合中。
- else{
- int member = intValue1 - Integer.parseInt(field5.getText());
- try {
- //将剩余数量保存进文件
- FileReader fr2 = new FileReader("E:\\大二\\下\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_member.txt");
- BufferedReader br2 = new BufferedReader(fr2);
- List<String> list2 = new ArrayList<String>();
- String str2;
- while ((str2 = br2.readLine())!=null){
- list2.add(str2);
- }
再更新集合中的商品的数量,将剩余的商品数量存到集合中商品名称相同的位置。
- int line2 = list2.size();
- for(int i = 0;i<line2;i++){//更新集合中的商品数量
- String iStr2 = list2.get(i);
- int start2 = iStr2.indexOf("商品名称");
- int end2 = iStr2.indexOf("商品数量");
- String value2 = iStr2.substring(start2+5,end2);
- if(value2.equals(field2.getText())){
- list2.set(i,"商品名称:"+value2+"商品数量:"+member);
- }
- }
创建一个高级输入流,将文件内容清空。
- FileWriter fw2 = new FileWriter("E:\\大二\\下\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_member.txt");
- BufferedWriter bw2 = new BufferedWriter(fw2);
- bw2.write("");
再创建一个输入流将集合中的内容存入文件,最后关闭所有流。
- FileWriter fw3 = new FileWriter("E:\\\\大二\\\\下\\\\JAVA\\\\JAVA课程\\\\专题训练\\\\超市管理系统\\\\sava_member.txt",true);//追加内容不会覆盖以前的
- BufferedWriter bw3 = new BufferedWriter(fw3);
- Iterator<String> it = list2.iterator();
- while (it.hasNext()){
- String value3 = it.next();
- bw3.write(value3);
- bw3.newLine();
- }
- bw3.close();
- fw3.close();
- bw2.close();
- fw2.close();
- br2.close();
- fr2.close();
- }catch (Exception e1){
- e1.printStackTrace();
- }
- }
- }
- }
- }catch (Exception e1){
- e1.printStackTrace();
- }
将输入框中的销售数量与单价相乘得到收益,将资金文件中的资金与收益相加得到目前总资金。
构造方法增加
计算收益的资金,即销售数量与单价相乘,并输入到输入框。
- double price=Double.parseDouble(field4.getText());
- int member=Integer.parseInt(field5.getText());
- double money=price*member;//获取销售商品的收益资金
- field6.setText(String.format("%.2f", money));
判断文件是否存在
- double totalMoney=0;
- try{
- File file=new File("E:\\大二\\下\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_money.txt");
- if(!file.exists()){
- JOptionPane.showMessageDialog(null, "存款文件不存在");
- return;//判断save_money.txt是否存在
- }
如果存在,读取文件内容,将收益与原来的总资金相加得到现在总资金,并输入到输入框。
- FileReader fr=new FileReader(file);
- BufferedReader br=new BufferedReader(fr);
- String str;
- if((str=br.readLine())!=null){
- totalMoney=Double.parseDouble(str);//读取剩余资金
- totalMoney+=money;//把收益和原来的资金相加
- field7.setText(String.valueOf(totalMoney));
将现在的总资金,保存到文件中。
- try{
- File file1=new File("d:/save_money.txt");
- FileWriter fw=new FileWriter(file1);
- BufferedWriter bw=new BufferedWriter(fw);
- bw.write(String.valueOf(totalMoney));
- //把目前的资金数量写入文件
- bw.close();
- fw.close();
- }catch(Exception e1){
- e1.printStackTrace();
- }
- }
- }catch(Exception e1){
- e1.printStackTrace();
- }
构造方法增加
经办人不可为空
- if(field8.getText().equals("")){
- JOptionPane.showMessageDialog(null, "经办人不可为空");
- return;
- }
获取当前时间并输入到输入框。
- SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
- Date date=new Date();
- String dateNow=format.format(date);
- field9.setText(dateNow);//把销售信息填写到各个输入框
构造方法增加
找到进货文件,不存在则返回。
- try{
- File file=new File("E:\\大二\\下\\JAVA\\JAVA课程\\专题训练\\超市管理系统\\sava_date.txt");
- if(!file.exists()){
- JOptionPane.showMessageDialog(null, "订单文件不存在");
- return;
- }//如果文件不存在,直接返回,否则写入销售信息
如果存在,读取文件内容,将所有内容添加到集合中。
- FileReader fr=new FileReader(file);
- BufferedReader br=new BufferedReader(fr);
- List<String> list=new ArrayList<String>();
- String str;
- while((str=br.readLine())!=null){
- list.add(str);
- }
拼接字符串将新信息添加到集合。
- int line=list.size();
- String nameStr=",货物名称:"+field2.getText();
- String makerStr=",货物厂家:"+field3.getText();
- String priceStr=",货物价格:"+field4.getText();
- String memberStr=",货物数量:"+field5.getText();
- String getStr=",货物开销:"+field6.getText();
- String surplusStr=",货款余额:"+field7.getText();
- String operatorStr=",经办人:"+field8.getText();
- String dateStr=",进货日期:"+field9.getText();
- String finStr="单号:"+field9.getText()+"#"+ i++
- +nameStr+makerStr+priceStr+memberStr+getStr+
- surplusStr+operatorStr+dateStr;
- /**
- 把每个输入框的信息合并
- */
- list.add(line, finStr);//合并信息写入集合
先清空文件,将新的集合重新写进进货文件。
- FileWriter fw=new FileWriter(file);
- BufferedWriter bw=new BufferedWriter(fw);
- bw.write("");//清空文件
- FileWriter fw1=new FileWriter(file, true);
- BufferedWriter bw1=new BufferedWriter(fw1);
- Iterator<String> it=list.iterator();
- while(it.hasNext()){
- String value=it.next();
- bw1.write(value);
- bw1.newLine();
- }//把合并后的销售信息写入文件
- bw.close();
- fw.close();
- bw1.close();
- fw1.close();
- br.close();
- fr.close();
- }catch(Exception e1){
- e1.printStackTrace();
- }