Java课程案例学习

Posted 康小庄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java课程案例学习相关的知识,希望对你有一定的参考价值。

【案例3-1】基于控制台的购书系统

【案例介绍】

  1. 案例描述

伴随互联网的蓬勃发展,网络购书系统作为电子商务的一种形式,正以其高效、低成本的优势逐步成为新兴的经营模式,人们已经不再满足互联网的用途仅仅局限于信息的浏览和发布,更渴望着能够充分享受互联网所带来的更多便利。网络购书系统正适应了当今社会快节奏地生活,使顾客足不出户便可以方便快捷轻松地选购自己喜欢的图书。

本任务要求,使用所学知识编写一个基于控制台的购书系统,实现购书功能。输出所有图书的信息:包括每本书的编号、书名、单价、库存。

顾客购买书时,根据提示输入图书编号来选购需要的书,并根据提示输入购买书的的数量。

购买完毕后输出顾客的订单信息,包括:订单号、订单明细、订单总额。
【案例目标】

l 学会分析“基于控制台的购书系统”程序任务实现的逻辑思路。

l 能独立完成“基于控制台的购书系统”程序的源代码编写、编译及运行。

l 理解和掌握面向对象的设计程序。

l 会用类图进行面向对象设计。

l 掌握封装的实现及好处。

l 包和访问控制修饰符的使用。

【案例分析】

(1)通过任务描述可知,该系统中必须包括3个实体类,类名及属性设置如下:

  1. 图书类(Book):
    

a) 图书编号(id)

b) 图书名称(name)

c) 图书单价(price)

d) 库存数量(storage)

  1.  订单项类(OrderItem):
    

a) 图书(book)

b) 购买数量(num)

  1.  订单类(Order):
    

a) 订单号(orderID)

b) 订单总额(total)

c) 订单项列表(items)

(2)由于购买图书时,需要选择图书的数量,所以需要在订单项类里定义获取图书对象以及图书数量的方法。

(3)由于需要指定订单项以及获取订单的订单列表、订单号、订单总额等信息,所以需要有订单列表、订单号、订单总额指定订单项等方法。

【案例实现】

定义图书类Book,其代码如下所示。

Book.java

上述代码中,声明了图书标号id、书名name、价格price、库存storage,并提供了其getter和setter方法。

定义订单项类OrderItem,其代码如下所示。

OrderItem.java

上述代码中,声明了图书对象Book,购买数量num,并提供了其getter和setter方法。

定义订单类Order,其代码如下所示。

Order.java

上述代码中,声明了订单id、订单项数组,并声明了获取订单号方法getOrderId()、获取订单列表方法getItems()、获取订单总额方法getTotal()、指定一个订单项setItem()、计算订单总额的方法calTotal()。

PayBooks.java

上述代码中,输出了图书列表信息包括:图书编号、图书名称、图书单价、库存数量,用户根据图书列表信息,输入图书编号、购买数量等,系统根据用户输入的图书编号及购买数量计算总金额。

Book

public class Book 

	/**
	 * 图书编号
	 */
	private int id;
	/**
	 * 图书名称
	 */
	private String name;
	/**
	 * 图书单价
	 */
	private double price;;
	/**
	 * 库存数量
	 */
	private int storage;

	public int getId() 
		return id;
	

	public void setId(int id) 
		this.id = id;
	

	public String getName() 
		return name;
	

	public void setName(String name) 
		this.name = name;
	

	public double getPrice() 
		return price;
	

	public void setPrice(int price) 
		this.price = price;
	

	public int getStorage() 
		return storage;
	

	public void setStorage(int storage) 
		this.storage = storage;
	

	@Override
	public String toString() 
		return "Book [id=" + id + ", name=" + name + ", price=" + price + ", storage=" + storage + "]";
	

	public Book(int id, String name, double price, int storage) 
		super();
		this.id = id;
		this.name = name;
		this.price = price;
		this.storage = storage;
	

	public Book() 
		super();
	


Order

public class Order 
	private String orderID;
	private OrderItem[] items;
	private double total;

	public Order(String orderID) 
		this.orderID = orderID;
		this.items = new OrderItem[3];
	

	public String getOid() 
		return orderID;
	

	public void setOid(String orderID) 
		this.orderID = orderID;
	

	public OrderItem[] getItems() 
		return items;
	

	public void setItems(OrderItem item, int idx) 
		this.items[idx] = item;
	

	public double getTotal() 
		calcTotal();
		return total;
	

	private void calcTotal() 
		double total = 0;
		for (int i = 0; i < items.length; ++i) 
			total += items[i].getNums() * items[i].getBook().getPrice();
		
		this.total = total;
	

	public void setTotal(double total) 
		this.total = total;
	


OrderItem

public class OrderItem 

	private Book book;
	private int nums;

	public OrderItem(Book book, int nums) 
		this.book = book;
		this.nums = nums;
	

	public Book getBook() 
		return book;
	

	public int getNums() 
		return nums;
	

	public void setBook(Book book) 
		this.book = book;
	

	public void setNums(int nums) 
		this.nums = nums;
	


BookClient

public class BookClient 

	public static void main(String[] args) 
		Book[] books = new Book[3]; // 存储图书

		outBookInfo(books);
		// 购买图书
		Order order = purchase(books);
		// 打印订单
		outOrderInfo(order);
	

	/**
	 * 
	 * @Title: outBookInfo
	 * @Description: 订购书的方法
	 * @author: KangXiaoZhuang
	 * @param: @param books
	 * @return: void
	 * @throws
	 */
	private static void outBookInfo(Book[] books) 
		books[0] = new Book(1, "Java基础案例编程", 16.9, 100);
		books[1] = new Book(2, "Python数据分析", 26.9, 56);
		books[2] = new Book(3, "Java编程思想", 69.9, 220);

		System.out.println("-------------------\\t图书列表\\t--------------------");
		System.out.println("编号\\tISBN\\t名称\\t价格\\t库存");
		String line = null;
		for (int i = 0; i < books.length; i++) 
			line = books[i].getId() + "\\t" + books[i].getName() + "\\t" + books[i].getPrice() + "\\t"
					+ books[i].getStorage();
			System.out.println(line);
		
		System.out.println("------------------------------------------------");
	

	/**
	 * 
	 * @Title: purchase
	 * @Description: 购买图书的方法
	 * @author: KangXiaoZhuang
	 * @param: @param  books
	 * @param: @return
	 * @return: Order
	 * @throws
	 */
	private static Order purchase(Book[] books) 
		Scanner sc = new Scanner(System.in);
		OrderItem item = null;

		Order order = new Order("book-order-" + LocalTime.now().toString());
		for (int i = 0; i < books.length; i++) 
			System.out.println("请选择需要购买的图书编号:");
			int bno = sc.nextInt();
			System.out.println("购买数量:");
			int num = sc.nextInt();
			item = new OrderItem(books[bno - 1], num);
			order.setItems(item, i);
			System.out.println("请继续购买图书。");
		
		sc.close();
		return order;
	
	
	/**
	 * 
	 * @Title: outOrderInfo   
	 * @Description: 处理订单信息
	 * @author: KangXiaoZhuang   
	 * @param: @param order      
	 * @return: void      
	 * @throws
	 */
	private static void outOrderInfo(Order order) 
		System.out.println("-------------------\\t图书订单\\t--------------------");
		System.out.println("订单编号:" + order.getOid());
		System.out.println("\\t图书名称\\t\\t购买数量\\t图书单价");
		OrderItem[] items = order.getItems();
		for (int i = 0; i < items.length; ++i) 
			System.out.println(
					items[i].getBook().getName() + "\\t" + items[i].getNums() + "\\t" + items[i].getBook().getPrice());
		
		System.out.println("订单总额:¥" + order.getTotal());
		System.out.println("------------------------------------------------");
	


运行截图

【案例3-2】银行存取款程序设计

【案例介绍】

  1. 案例描述

银行存取款的流程是人们非常熟悉的事情,用户可在银行对自己的资金账户进行存款、取款、查询余额等操作,极大的便利了人民群众对资金的管理。

本任务要求,使用所学知识编写一个银行存取款程序,实现存取款功能。编写一个帐户类实现银行帐户的概念,创建帐户类的对象ba,假设ba的账号为:123456,初始的存款余额为500元。首先向该账户存入1000元,再取出800元。

【案例目标】

l 学会分析“银行存取款”程序任务实现的逻辑思路。

l 能够独立完成“银行存取款”程序的源代码编写、运行及编译。

l 理解Java语言是如何体现面向对象编程基本思想的。

l 掌握类的声明以及对象的创建。

l 了解类的成员变量和成员方法的特性以及类的构造方法的使用。

【案例分析】

(1)通过任务描述可知,需要定义一个银行帐户类BankAccount实现银行帐户的概念。

(2)账户的属性包括账号和存款余额,所以还需要在BankAccount类中定义两个变量:“帐号” (account_number) 和“存款余额”(leftmoney)。

(3)对账户的操作包括存款、取款、查询余额,所以再定义四个方法:“存款”(savemoney)、“取款”(getmoney) 、“查询余额”(getleftmoney)以及构造方法(BankAccount)。

(4)最后,编写测试类,在main()方法中创建一个BankAccount类的对象ba,假设ba的账号为:123456,初始的存款余额为500元。首先向该账户存入1000元,再取出2000元。

【案例实现】

BankAccount.Java

上述代码中,声明了一个int类型的account_number属性设一个double类型的leftmoney属性,并编写了其存款方法savemoney()、取款方法getmoney()、查询余额方法getleftmoney()以及用来初始化变量的构造方法BankAccount()。最后,在main()方法中进行测试:创建了一个ba对象,账号为123456,初始余额为200元,首先向该账户存入了1000元,随后又取出800元。

BookAccount

public class BankAccount 
	/**
	 * 账户号码
	 */
	private int account_number;
	
	/**
	 * 剩余钱
	 */
	private double leftmoney;

	public int getAccount_number() 
		return account_number;
	

	public void setAccount_number(int account_number) 
		this.account_number = account_number;
	

	public double getLeftmoney() 
		return leftmoney;
	

	public void setLeftmoney(double leftmoney) 
		this.leftmoney = leftmoney;
	

	public BankAccount(int account_number, double leftmoney) 
		super();
		this.account_number = account_number;
		this.leftmoney = leftmoney;
	
	
	public void saveMoney(double money) 
		this.leftmoney += money;
	

	public void getMoney(double money) 
		this.leftmoney -= money;
	
	
	public BankAccount() 
		super();
	

BookClient

public class BankAccountClient 

	public static void main(String[] args) 
		BankAccount bankAccount = new BankAccount();
		int money = 1000;
		bankAccount.saveMoney(money);

		System.out.println("已存入" + money + "元,还剩下" + bankAccount.getLeftmoney() + "元");
		
		int money1 = 800;
		bankAccount.getMoney(money1);

		System.out.println("已取出" + money1 + "元,还剩下" + bankAccount.getLeftmoney() + "元");

	


运行截图

【案例3-3】多功能手机

【案例介绍】

  1. 案例描述

随着科技的发展,手机的使用已经普及到每个家庭甚至个人,手机的属性越来越强大,功能也越来越多,因此人们在生活中越来越依赖于手机。

任务要求,使用所学知识编写一个手机属性及功能分析程序设计,测试各个手机的属性及功能。使用手机时,输出当前手机的各个属性参数以及正在使用的功能。
【任务目标】

l 学会分析“手机属性及功能分析” 程序任务实现的逻辑思路。

l 能够独立完成“手机属性及功能分析”程序的源代码编写、编译及运行。

l 理解和掌握面向对象的设计过程。

l 掌握类的结构和定义过程。

l 掌握构造方法及其重载。

l 掌握对象的创建和使用。

【实现思路】

(1)通过任务描述可知,需要定义一个手机类Phone实现手机的概念。

(2)手机具有属性:品牌(brand)、型号(type)、价格(price)、操作系统(os)和内存(memory)。因此,需要在手机类中定义品牌(brand)、型号(type)、价格(price)、操作系统(os)和内存(memory)的变量。

(3)手机具有功能:查看手机信息(about())、打电话(call(String no))、玩游戏(playGame())、下载音乐(downloadMusic())、播放音乐(playMusic())。所以,可以定义对应的方法about()、call()、playGame()、downloadMusic()、playMusic()。

【实现代码】

Phone.java

上述代码中,定义了手机的品牌brand、型号type、价格price、操作系统os、内存memorySize等属性,并提供了手机类的无参和参构造,以及打电话call()、打游戏playGame()、下载音乐downloadMusic()、播放音乐playMusic()等方法。

PhoneTest.java

上述代码中,创建了两个手机对象,并输出了这两个手机对象的属性及功能。

Phone

public class Phone 
	/**
	 * 品牌
	 */
	private String brand;
	/**
	 * 型号
	 */
	private String type;
	/**
	 * 操作系统
	 */
	private String os;
	/**
	 * 价格
	 */
	private int price;
	/**
	 * 内存
	 */
	private int memory;

	public String getBrand() 
		return brand;
	

	public void setBrand(String brand) 
		this.brand = brand;
	

	public String getType() 
		return type;
	

	public void setType(String type) 
		this.type = type;
	

	public String getOs() 
		return os;
	

	public void setOs(String os) 
		this.os = os;
	

	public int getPrice() 
		return price;
	

	public void setPrice(int price) 
		this.price = price;
	

	public int getMemory() 
		return memory;
	

	public void setMemory(int memory) 
		this.memory = memory;
	

	public Phone(String brand, String type, String os, int price, int memory) 
		super();
		this.brand = brand;
		this.type = type;
		this.os = os;
		this.price = price;
		this.memory = memory;
	

	public Phone() 
		super();
	

	// 关于本机
	public void about() 
		System.out.println("品牌:" + brand + "\\n" + "型号:" + type + "\\n" + "操作系统:" + os + "\\n" + "价格:" + price + "\\n"
				+ "内存:" + memory + "\\n");
	

	// 打电话
	public void call(String num) 
		System.out.println("拨打电话" + num + "。。。");
	

	// 打游戏
	public void playGame() 
		System.out.println(201871010119-帖佼佼《面向对象程序设计(java)》课程学习总结

张玉晶 201871010135《面向对象程序设计(java)》课程学习总结

201871010102-常龙龙《面向对象程序设计(java)》课程学习总结

Java学习笔记49(DBUtils工具类二)

201871010131-张兴盼-《面向对象程序设计java》学习总结

hadoop课程设计