[案例7-2]商城进货交易记录
生活随笔
收集整理的這篇文章主要介紹了
[案例7-2]商城进货交易记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
任務描述:
每個商城都需要進貨.而這些進貨記錄整理起來很不方便,本案例要求編寫一個商城進貨記錄交易的程序,使用字節流將商場的進貨信息記錄在本地的csv文件中.程序具體要求如下:???????????????????????????????
當用戶輸入商品編號時,后臺會根據商品編號查詢到相應的商品信息,并打印商品信息,接著讓用戶輸入需要進貨的商品數量,程序將原有的庫存數量與輸入的數量相加作為商品最新的庫存數量,并將商品進貨的記錄保存至本地的csv文件中,在csv文件中,每條語句包含商品編號,商品名稱,購買數量,單價,總價,聯系人,等數據,每條記錄的數據之間直接用英文的逗號或空格分隔,每條記錄之間由換行符分隔,文件命名格式為"進貨記錄"加上當天日期加上".csv"后綴,如進貨記錄"20210611.csv".保存文件時,需要判斷本地文件是否存在當天的數據,如果存在則追加,不存在則創建.
初始文件信息:
?
?
運行結果:
?
?運行后文件信息:
?代碼如下:
定義一個實體類:
/*** 2022/4/13*/ public class Good {int id; // 商品idString name; // 商品名字double price; // 商品單價int number; // 進貨數量double money; // 總價String people; // 審批人// 創建帶參構造方法public Good(int id, String name, double price, int number, double money, String people) {this.id = id;this.name = name;this.price = price;this.number = number;this.money = money;this.people = people;}@Overridepublic String toString() { // 重寫toString方法return"進貨記錄編號=" + id +"\n商品名稱='" + name + '\'' +"\n單價=" + price +"\n庫存數量=" + number +"\n聯系人='" + people + '\'' +'\n';}public void setNumber(int number){this.number = number;} }? 定義RecordGoodOrder類來記錄和操作商品信息:
import java.util.ArrayList; import java.util.Scanner;/*** 2022/4/13*/ public class RecordGoodOrder {// 創建商品庫存static ArrayList<Good> goodsList = new ArrayList<Good>();public static void main(String[] args) {init(); // 初始化商品庫存// 將書架上所有商品信息打印出來for (int i = 0 ; i < goodsList.size() ; i++){ // 遍歷集合System.out.println(goodsList.get(i)); // 將集合中指定索引處的元素}while (true){// 獲取控制臺輸入的信息Scanner in = new Scanner(System.in);System.out.println("請輸入商品編號(輸入-1退出):");int goodId = in.nextInt();Good stockGood = getGoodsById(goodId); // 調用getGoodById方法,將值賦給stockGoodif (stockGood != null){ // 判斷是否存在此商品System.out.println("當前商品庫存信息:" + stockGood); // 打印商品信息System.out.println("請輸入進貨數量:");int bookNumber = in.nextInt(); // 用戶輸入進貨量// 將輸入的信息封裝成Books對象Good good = new Good(stockGood.id, stockGood.name,stockGood.price,bookNumber,stockGood.price*bookNumber,stockGood.people);FileUtil.saveBooks(good);// 調用saveBooks方法,將本條數據保存到本地文件// 修改庫存stockGood.setNumber(stockGood.number+bookNumber); // 通過stockGood調用setNumber方法,將輸入的庫存與原始庫存相加}else if (goodId == -1){ // 判斷輸入的id是否為-1System.exit(0); // JVM退出}else{System.out.println("商品編號錯誤!");}}}// 初始化商品庫存的信息,將商品存入庫存private static void init(){Good good1 = new Good(10001,"百事可樂",3.5,100,350,"張三"); // 創建Good對象,往里存入元素Good good2 = new Good(10002,"可口可樂",3,100,300,"李四");Good good3 = new Good(10003,"百事雪碧",4,100,400,"張三");goodsList.add(good1); // 將Good對象存入集合中goodsList.add(good2);goodsList.add(good3);}// 根據輸入的商品編號查找商品信息,循環遍歷庫存中的商品信息,找到商品編號相等的取出private static Good getGoodsById(int goodId){for (int i = 0 ; i < goodsList.size() ; i++){ // 遍歷數組Good thisGood = goodsList.get(i);if (goodId == thisGood.id){ // 判斷是否有該idreturn thisGood; // 如果有則返回}}return null; // 否則返回null} }定義工具類FileUtil保存圖書信息:
import java.io.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;/*** 2022/4/13*/ // 工具類 public class FileUtil {public static final String zd = ","; // 字段分隔public static final String hfg = "\r\n"; // 行分隔// 保存商品信息public static void saveBooks(Good good){ // 創建saveBooks方法// 判斷本地是否存在此文件Date date = new Date(); // 創建Date日期類對象// 定義日期格式DateFormat format = new SimpleDateFormat("yyyyMMdd"); // y:年 , M:月, d:日// 拼接文件名String name = "進貨記錄" + format.format(date) + ".csv"; // format.format(date):設置對象格式以生成字符串InputStream in; // 定義字節輸入流// 使用try...catch處理異常try{in = new FileInputStream(name); // 判斷本地是否存在該文件if (in != null){in.close(); // 關閉輸入流// 可獲取輸入流,則存在文件,采取修改文件方式createFile(name,true,good);}}catch (FileNotFoundException e){// 輸入流獲取失敗,則不存在文件,采取新建新文件方式createFile(name,false,good);}catch (IOException e){e.printStackTrace();}}public static void createFile(String name,boolean label,Good good){ // name :文件名,label:表示文件是否存在,good:商品信息BufferedOutputStream out = null; // 定義字節緩沖輸出流對象// 構造一個字符串生成器StringBuilder sdf = new StringBuilder(); // 拼接內容try{if (label){ // 當已存在當天的文件,則在文件內容后追加// 創建輸出流,用于追加文件out = new BufferedOutputStream(new FileOutputStream(name,true)); // 末尾定義為true,表示追加寫入,不會重新寫入}else{ // 不存在當天文件,則新建文件// 創建輸出流,用于保存文件out = new BufferedOutputStream(new FileOutputStream(name));String[] fieldSort = new String[]{"商品編號","商品名稱","購買數量","單價","總價","聯系人"}; // 創建表頭for (String fieldKey : fieldSort){ // 增強for遍歷// 新建時,將表頭存入本地文件sdf.append(fieldKey).append(zd);}}sdf.append(hfg); // 追加換行符號sdf.append(good.id).append(zd);sdf.append(good.name).append(zd);sdf.append(good.number).append(zd);sdf.append(good.price).append(zd);sdf.append(good.money).append(zd);sdf.append(good.people).append(zd);String str = sdf.toString(); // 將sdf轉換為String類型byte[] b = str.getBytes(); // 創建字節數組for (int i = 0 ; i < b.length ; i++){ // 遍歷數組out.write(b[i]); // 將內容寫入本地文件}}catch (Exception e){e.printStackTrace();}finally {try{if (out != null){out.close(); // 關閉輸出流}}catch (Exception e){e.printStackTrace();}}} }有些小伙伴可能會出現亂碼問題,像下面這樣:
解決方法如下:
點擊文件上面的數據,選擇從文本/csv:
點擊它:
選擇這個文件 ,點擊導入:
然后點擊加載:
?之后就顯示出來了:
?
總結
以上是生活随笔為你收集整理的[案例7-2]商城进货交易记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米组织架构调整成立技术委员会 强化技术
- 下一篇: 写一段情人节耳钉礼物文案,要求100字左