当前位置: 首页 > java >正文

综合练习二

使用到的知识点:xml文件,printf方法

第一单元单元考核:销售数据分析系统

  • 背景:某电商平台需要对季度销售数据进行统计分析,根据分析结果总结经验,并制定下一季度的销售计划,需要你来编写小程序,实现以下数据分析功能
  • (5分)为了系统设计轻便,采用XML文件记录销售记录,记录包括以下内容:销售单号、售单月份、商品名称、销售数量、单价、营销顾问工号、售单状态(已结款、未结款)
  • (10分)主要功能界面要求参考如下:

  • (25分)选择1时,在控制台打印全部销售单信息:

  • (25分)选择2时,要求输入营销顾问工号,显示如下图,要有统计:

  • (10分)选择3时,显示如图:

  • (20分)选择4时,要求输入商品编号,显示如图:

  • (5分)选择5时,程序结束
  • (5分)附加分,项目结构设计合理,代码清晰,注释命名等规范,此项额外加分

saleRecord.xml

<?xml version="1.0" encoding="UTF-8"?>
<saleInfo><jobNum name="x0001"><id>pd0001</id><month>1</month><itemName>可口可乐</itemName><itemCount>102</itemCount><itemPrice>3.5</itemPrice><saleStatus>true</saleStatus></jobNum><jobNum name="x0001"><id>pd0002</id><month>1</month><itemName>笔记本</itemName><itemCount>10</itemCount><itemPrice>3000</itemPrice><saleStatus>true</saleStatus></jobNum><jobNum name="x0001"><id>pd0003</id><month>3</month><itemName>可口可乐</itemName><itemCount>50</itemCount><itemPrice>3.5</itemPrice><saleStatus>false</saleStatus></jobNum><jobNum name="x0001"><id>pd0004</id><month>4</month><itemName>汽车</itemName><itemCount>2</itemCount><itemPrice>100000</itemPrice><saleStatus>true</saleStatus></jobNum><jobNum name="x0001"><id>pd0005</id><month>5</month><itemName>可口可乐</itemName><itemCount>100</itemCount><itemPrice>3.5</itemPrice><saleStatus>false</saleStatus></jobNum><jobNum name="x0001"><id>pd0006</id><month>5</month><itemName>汽车</itemName><itemCount>11</itemCount><itemPrice>80000</itemPrice><saleStatus>true</saleStatus></jobNum><jobNum name="x0002"><id>pd0007</id><month>5</month><itemName>可口可乐</itemName><itemCount>80</itemCount><itemPrice>3.5</itemPrice><saleStatus>true</saleStatus></jobNum><jobNum name="x0002"><id>pd0008</id><month>7</month><itemName>可口可乐</itemName><itemCount>10</itemCount><itemPrice>3.5</itemPrice><saleStatus>true</saleStatus></jobNum>
</saleInfo>

entity:

        SaleItem类

public class SaleItem {private String id;private Integer month;private String itemName;private Integer itemCount;private Double itemPrice;private String jobNum;private Boolean isSale = true;public SaleItem(String id, Integer month, String itemName, Integer itemCount, Double itemPrice, Boolean saleStatus) {}public SaleItem(String id, Integer month, String itemName, Integer itemCount, Double itemPrice, String jobNum, Boolean isSale) {this.id=id;this.month=month;this.itemName=itemName;this.itemCount=itemCount;this.itemPrice=itemPrice;this.jobNum=jobNum;this.isSale=isSale;}public String getId() {return id;}public void setId(String id) {this.id=id;}public Integer getMonth() {return month;}public void setMonth(Integer month) {this.month=month;}public String getItemName() {return itemName;}public void setItemName(String itemName) {this.itemName=itemName;}public Integer getItemCount() {return itemCount;}public void setItemCount(Integer itemCount) {this.itemCount=itemCount;}public Double getItemPrice() {return itemPrice;}public void setItemPrice(Double itemPrice) {this.itemPrice=itemPrice;}public String getJobNum() {return jobNum;}public void setJobNum(String jobNum) {this.jobNum=jobNum;}public Boolean getSale() {return isSale;}public void setSale(Boolean sale) {isSale=sale;}public void show(){System.out.printf("%-8s %-10s %-10s %-10s %-10.2f %-8s %-8s\n", getId(),getMonth(),getItemName(),getItemCount(),getItemPrice(),getJobNum(),(getSale() ? "已结款":"未结款"));}
}

SaleList类

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class SaleList {private List<SaleItem> saleList = new ArrayList<>();public SaleList() {}public SaleList(List<SaleItem> list) {this.saleList=list;}public List<SaleItem> getList() {//读取XML文件SAXReader saxReader=new SAXReader();Document doc=null;try {doc=saxReader.read("src/saleRecord.xml");} catch (DocumentException e) {e.printStackTrace();}Element root=doc.getRootElement();Iterator<Element> it=root.elementIterator();while (it.hasNext()) {Element job=it.next();//获取子元素的type属性String jobNum=job.attributeValue("name");//获取元素Element idElement=job.element("id");Element monthElement=job.element("month");Element itemNameElement=job.element("itemName");Element itemCountElement=job.element("itemCount");Element itemPriceElement=job.element("itemPrice");Element saleStatusElement=job.element("saleStatus");//获取元素值String id=idElement.getText();Integer month=Integer.valueOf(monthElement.getText());String itemName=itemNameElement.getText();Integer itemCount=Integer.valueOf(itemCountElement.getText());Double itemPrice=Double.valueOf(itemPriceElement.getText());Boolean saleStatus=Boolean.valueOf(saleStatusElement.getText());SaleItem saleItem = new SaleItem(id,month,itemName,itemCount,itemPrice,jobNum,saleStatus);saleList.add(saleItem);}return saleList;}public void setList(List<SaleItem> list) {this.saleList=list;}}

service:

        Analysis类

import entity.SaleItem;
import entity.SaleList;
import java.util.List;public class AnalysisSystem {private SaleList saleList = new SaleList();public void show(){List<SaleItem> itemList = saleList.getList();for (SaleItem saleItem : itemList) {saleItem.show();}itemList.clear();}public boolean hasJobNum(String jobNum){List<SaleItem> itemList = saleList.getList();boolean hasJobNum = false;for (SaleItem saleItem : itemList) {if (saleItem.getJobNum().equals(jobNum)) {hasJobNum = true;break;}}itemList.clear();return hasJobNum;}public boolean hasItemName(String itemName){List<SaleItem> itemList = saleList.getList();boolean hasItemName = false;for (SaleItem saleItem : itemList) {if (saleItem.getItemName().equals(itemName)) {hasItemName = true;break;}}itemList.clear();return hasItemName;}public void jobNumShow(String jobNum){List<SaleItem> itemList = saleList.getList();int isPay = 0;int notPay = 0;double payTotal = 0;double notPayTotal = 0;double totalAll = 0;for (SaleItem saleItem : itemList) {if (saleItem.getJobNum().equals(jobNum)){if (saleItem.getSale() == true){isPay++;payTotal += (saleItem.getItemCount() * saleItem.getItemPrice());}else {notPay++;notPayTotal += (saleItem.getItemCount() * saleItem.getItemPrice());}totalAll += (saleItem.getItemCount() * saleItem.getItemPrice());saleItem.show();}}System.out.println("【共成功签单"+isPay+"笔,结款销售总额"+payTotal+"元,其中有"+notPay+"笔签单未结款,未结款销售额:"+notPayTotal+",销售额总计(结款&未结款):"+totalAll+"元】");itemList.clear();}public void notPayTotal(){int notPay =0;double notPayTotal = 0;List<SaleItem> itemList = saleList.getList();for (SaleItem saleItem : itemList) {if (saleItem.getSale() == false){notPay++;notPayTotal += (saleItem.getItemCount() * saleItem.getItemPrice());}}System.out.println("【共有未签单"+notPay+"笔,涉及总额:"+notPayTotal+"元】");itemList.clear();}public void singleItemShow(String itemName){List<SaleItem> itemList = saleList.getList();for (SaleItem saleItem : itemList) {if (saleItem.getItemName().equals(itemName)){saleItem.show();}}itemList.clear();}
}

view:

        SaleView

import service.AnalysisSystem;import java.util.Scanner;public class SaleView {public static void main(String[] args) {SaleView saleView = new SaleView();saleView.show();}private Scanner input = new Scanner(System.in);private AnalysisSystem analysisSystem = new AnalysisSystem();public void show(){while (true) {System.out.println("--销售数据分析系统--");System.out.println("1.显示全部销售单数据");System.out.println("2.销售顾问业绩查询");System.out.println("3.未结款总额查询");System.out.println("4.商品销量查询");System.out.println("5.退出系统");System.out.println("请选择:");int type = input.nextInt();switch (type) {case 1:showList();break;case 2:showJobNumList();break;case 3:notPayCount();break;case 4:showSingleItem();break;case 5:System.out.println("系统已退出,谢谢使用!");return;}}}public void showList(){System.out.printf("%-8s %-5s %-10s %-10s %-10s %-8s %-8s\n","销售单号","售单月份","商品名称","销售数量","单价","营销顾问工号","售单状态");analysisSystem.show();}public void showJobNumList(){System.out.print("请输入营销顾问工号单号:");String jobNum = input.next();if (analysisSystem.hasJobNum(jobNum)){analysisSystem.jobNumShow(jobNum);}else {System.out.println("未查询到此顾问的销售信息!");}}public void notPayCount(){analysisSystem.notPayTotal();}public void showSingleItem(){System.out.print("请输入商品名称:");String itemName = input.next();if (analysisSystem.hasItemName(itemName)){analysisSystem.singleItemShow(itemName);}else {System.out.println("未查询到商品信息!");}}
}

附录:

dom4j

https://download.csdn.net/download/m0_62696265/90707510?spm=1001.2014.3001.5503

http://www.xdnf.cn/news/3252.html

相关文章:

  • PCB设计实战技巧宝典:从库管理到布线优化的全流程解析
  • 「Mac畅玩AIGC与多模态09」开发篇05 - 使用自定义天气查询插件开发智能体应用
  • 数据库设计理论:从需求分析到实现的全流程解析
  • BT138-ASEMI无人机专用功率器件BT138
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: [1]如何使用原生NSAlert消息框 (runModal模式)
  • 从Oculus到Meta:Facebook实现元宇宙的硬件策略
  • 第十六届蓝桥杯 2025 C/C++组 数列差分
  • 氢混合气配气系统在传感器检测中的重要应用
  • 海外社交软件开发实战:从架构设计到合规落地的技术解析
  • 健达智能 盘古信息IMS项目启动:携手开启数字化转型新篇章
  • DC-DC常见应用问题解疑
  • 爬虫逆向思维
  • 深入理解 C++11 delete 关键字:禁用函数的艺术
  • CMU-15445(2)——PROJECT#0-C++PRIMER
  • [Java入门]抽象类和接口
  • Vue3源码学习3-结合vitetest来实现mini-vue
  • Spring Boot 实现多种来源的 Zip 多层目录打包下载(本地文件HTTP混合)
  • windows 使用websocket++ (C++环境)
  • 高效管理远程服务器Termius for Mac 保姆级教程
  • 第三部分:走向共产主义 第二章:科技发展(续)
  • 使用Dagster定义数据资产:从入门到实践
  • Unity编辑器扩展之导出项目中所有预制体中文本组件文字内容
  • 提示词工程(GOT)把思维链推理过程图结构化
  • 移动端akamai风控分析
  • 【阿里云大模型高级工程师ACP习题集】2.7 通过微调增强模型能力 (下篇)(⭐️⭐️⭐️ 重点章节!!!)
  • 【LLM】基于 Ollama 部署 DeepSeek-R1 本地大模型
  • 2025 Java八股文深度解读版:原理+场景+高频追问答案
  • 【Unity】如何解决UI中的Button无法绑定带参数方法的问题
  • 【网工第6版】第6章 网络安全②
  • JESD204B 探究