打印票据--java


import java.util.Random;
class commodity{ //商品
	private String type,size;
	public commodity(String s)    { type=s;}
	public String getType()       { return type; }
	public String getSize()       { return size; }
	public double price()         { return 0; }
	public void  addNumber(int n) { ;}
	public void deleteNumber()    { ;}
	public int getNumber()        { return 0;}
}
class Usb extends commodity{
	private double p=100; 
	private String size ="Inspire T10";
	public static int number;
	public void addNumber(int n)  { number+=n;}
	public void deleteNumber()    { number--;}
	public String getSize()       { return size; }
	public int getNumber()        { return number;}
	public Usb()                  { super("U盘"); }
	public double price()         { return p; }
	public String toString()      
	{ return getType()+"\t"+getSize()+"\t"+getNumber()+"\t"+price()+"\t"+price()*getNumber();   }
	public static Usb Create()    { return new Usb(); }
}
class Screen extends commodity{
	private double p=2000;
	private String size ="Inspire T11";
	public static int number;
	public void addNumber(int n)  { number+=n;}
	public void deleteNumber()    { number--;}
	public int getNumber()        { return number;}
	public String getSize()       { return size; }
	public Screen()               { super("显示器"); }
	public double price()         { return p; }
	public String toString()      
	{ return getType()+"\t"+getSize()+"\t"+getNumber()+"\t"+price()+"\t"+price()*getNumber();   }
	public static Screen Create() { return new Screen(); }
}
class Music extends commodity{
	private double p=300;
	private String size ="Inspire T12";
	public static int number;
	public void  addNumber(int n) { number+=n;}
	public void deleteNumber()    { number--;}
	public int getNumber()        { return number;}
	public String getSize()       { return size; }
	public Music()                { super("一对音箱"); }
	public double price()         { return p; }
	public String toString()      
	{ return getType()+"\t"+getSize()+"\t"+getNumber()+"\t"+price()+"\t"+price()*getNumber();   }
	public static Music Create()  { return new Music(); }
}
class shoppingCart{
	private commodity[] commodities;
	private int totalnum;//商品总数量
	private int cartlen=30; //购物车最大容量
	public shoppingCart () {
		commodities = new commodity[cartlen];
	}
	public void filtrate() {//过滤掉重复的
		commodity[] com=new commodity[cartlen];
		com[0]=commodities[0];
		int i,j,k; i=0;j=0;
		while(i<totalnum) {
			k=0; i++;
			while(k<=j) {
				if(com[k].getType()==commodities[i].getType())
				{ i++; break;}
				else k++;
			}
		}	
	}
	public commodity[] Filtrate() {
		commodity[] coms = new commodity[20];
		int comsTail = 0;
		int i=0;
		boolean isAdd = false;
		while(i<totalnum) {
			int j=0;
			while(j<comsTail) {
				if(commodities[i].getType()==coms[j].getType()) {
					isAdd = false;
					break;
				}
				isAdd = true;
				j++;
			}
			if(comsTail==0) {isAdd=true;}
			if(isAdd) {
				coms[comsTail] = commodities[i];
				comsTail++;
			}
			i++;
		}
		return coms;
	}
	
	public void add(commodity c,int n) {//增加
		if(totalnum+n > cartlen)
		{
			System.out.print("购物车已满");
			return ;
		}
		for(int i=totalnum;i<totalnum+n;i++)
		commodities[i]=c;
		totalnum=totalnum+n;
		c.addNumber(n);
	}
	public void delete(commodity c) {//删去
		if(find(c)==-1) {
			System.out.print("购物车中没有这个商品!");
			return ;
		}
		for(int i =find(c);i<totalnum-1;i++) {
			commodities[i]=commodities[i+1];
		}
		totalnum--;
		c.deleteNumber();
	}
	public int find(commodity c) {
		for(int i=0;i<totalnum;i++) {
			if(commodities[i].getType()==c.getType()) //不能用对象直接去比较,要比较对象的属性
				return i;
		}
		return -1;		
	}
	public void show() {
		commodity[] c = Filtrate();
		for(int i=0; i<c.length; i++)
		{
			if(c[i]==null) continue;
			System.out.println(c[i]);
		}
		double s=0;
		for(int i=0; i<totalnum; i++)
		{
			if(c[i]==null) continue;
			s=s+c[i].price()*c[i].getNumber();
		}
		System.out.println("总金额="+s);
	}
	public void printBill(String buyer) {
		Random random = new Random();
		int orderNum = random.nextInt(999999);
		System.out.print("发票抬头:"+buyer+"\n");
		System.out.print("订单号:"+orderNum+"\n");
		System.out.print("货物\t型号\t\t数量\t单价\t价格"+"\n");
	}
}
class App3{
	public static void main(String[] agrs) {
		shoppingCart sc =new shoppingCart();
		sc.add(Usb.Create(),1);
		sc.add(Screen.Create(), 1);
		sc.add(Music.Create(), 1);
		sc.printBill("小可爱");
		sc.show();
		//System.out.println("总金额="+sc.sum());
		System.out.println("增加2个U盘:");
		sc.add(Usb.Create(),2);
		//sc.printBill("小可爱");
		sc.show();
		//System.out.println("总金额="+sc.sum());
		System.out.println("删除1个U盘,1个音响:");
		sc.delete(Music.Create());
		sc.delete(Usb.Create());
		//sc.printBill("小可爱");
		sc.show();
	}
	
}

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java是一种面向对象编程语言,拥有强大的打印和网络编程功能。打印票据和使用Socket进行网络通信是Java编程中常见且重要的功能之一。 在Java中打印票据,通常可以使用Java打印库中的JasperReports或iText等第三方库。这些库可以帮助开发人员快速生成、设计和打印复杂而庞大的票据,同时提供丰富的定制功能。开发人员可以通过这些库创建报表模板,并将数据源与模板连接,以生成所需的打印输出格式。 使用Java Socket进行网络通信则需要实现客户端和服务器之间的连接。开发人员可以使用Java Socket API中的socket、ServerSocket和DatagramSocket等类来实现这些连接。Socket通常用于建立TCP连接,而DatagramSocket用于建立UDP连接。 在使用Java Socket进行网络通信时,需要考虑到通信协议、消息格式、端口号等方面的细节,以确保数据的安全传输。开发人员还可以在Socket之上使用SSL/TLS协议来加密通信内容,进一步保护网络安全。 总的来说,Java在打印票据和使用Socket进行网络通信方面具有强大的能力,开发人员可以利用这些功能来构建高质量、安全可靠的应用程序。 ### 回答2: Java打印票据Socket是一种将Java技术与网络通信技术相结合的应用方式。通过这种方式,可以在网络上实现打印票据的功能,具有方便、高效、安全等多种优势。 首先,Java打印票据Socket利用Java的网络编程技术,从服务器获取打印票据的信息,然后将其传输到打印机进行打印,这样可以避免了在本地进行复杂的设置和操作,从而提高了效率。 其次,Java打印票据Socket的特点是具有安全性和稳定性,它可以通过设置协议、安全认证、数据加密等方式来保护数据的安全性,同时可以通过错误处理、重连机制、超时控制等方式保证网络通信的稳定性。 最后,Java打印票据Socket是一种灵活的应用方式,可以适应各种应用环境。无论是在小型企业、零售店铺还是大型商场、展览会场,都可以通过Java打印票据Socket实现打印票据的功能。 总之,Java打印票据Socket是一种优秀的应用方式,可以提高打印效率、保证打印安全、稳定性,并适应各种应用环境的要求。 ### 回答3: Java打印票据可以通过Socket实现。首先,需要在客户端程序中创建Socket连接,连接到打印机所在的IP地址和端口号。接着,将要打印的文本内容通过Socket传输到打印机端,然后在打印机端进行解析并打印出来。 在打印机端,需要编写一个Socket服务器程序来监听客户端的连接请求,接收客户端传输的文本内容,并将文本写入到打印机的缓存中。当缓存区中的文本达到打印机的缓存大小时,打印机就会打印出文本内容。 需要注意的是,在打印票据时,需要设置打印机的一些参数,如字体大小、字体样式、对齐方式等,以保证打印结果符合要求。 在实现中,可以使用Java自带的Socket类或者第三方库如Netty来处理Socket通信和打印机驱动的编写。此外,还需要了解一些Socket编程和打印机驱动的知识,以确保程序能够正确地实现打印功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值