面向对象
写程序的套路
简单易懂逻辑清晰
设计类
public class 类名{
1 成员变量(代表属性,一般名词)
2 成员方法 (代表行为,一般名词)
3 构造器
4 代码块
5 内部类
调用类
内存机制
购物车案例
实现录入 查询 更新 计算
package com.xu.creatobject;
import java.util.Scanner;
public class shopCardemo {
public static void main(String[] args) {
// 定义购物车对象
Goods[] shopcar = new Goods[100];
while (true) {
System.out.println(“请进行如下命令选择”);
System.out.println(“添加商品到购物车:add”);
System.out.println(“查询商品到购物车:query”);
System.out.println(“修改商品购买数量:update”);
System.out.println(“结算购买商品金额:pay”);
Scanner sc=new Scanner(System.in);
System.out.println(“请输入命令”);
String command=sc.next();
switch (command){
case “add”:
// 添加商品
addGoods(shopcar,sc);
break;
case “query”:
// 查询商品
queryGoods(shopcar);
break;
case “update”:
// 修改
updateGoods(shopcar,sc);
break;
case “pay”:
pay(shopcar);
// 结算
break;
default:
System.out.println(“没有该功能”);
}
}
}
public static void addGoods(Goods[] shopcar,Scanner sc) {
// 录入用户购买信息
System.out.println(“请输入商品编号(不重复)”);
int id=sc.nextInt();
System.out.println(“请输入商品名称”);
String name=sc.next();
System.out.println(“请输入商品价格”);
double price=sc.nextDouble();
System.out.println(“请输入商品数量”);
int buynumber=sc.nextInt();
// 创建对象录入用户信息
Goods g=new Goods();
g.id=id;
g.name=name;
g.price=price;
g.buyNumber=buynumber;
// 把信息存入购物车数组
for (int i = 0; i < shopcar.length; i++) {
if(shopcar[i]==null)
{
shopcar[i]=g;
break;
}
System.out.println(“您的商品” + g.name + “添加到了购物车”);
}
}
public static void queryGoods(Goods[] shopcar) {
System.out.println("============查询购物车信息如下==============");
System.out.println("编号\t\t名称\t\t\t\t价格\t\t\t\t数量\t\t\t\t");
for (int i = 0; i < shopcar.length; i++) {
Goods g=shopcar[i];
if(g!=null){
System.out.println(g.id + "\t\t" + g.name + "\t\t\t\t" + g.price + "\t\t\t\t" + g.buyNumber);
}else{
break;
}
}
}
public static void updateGoods(Goods[] shopcar,Scanner sc) {
while (true) {
System.out.println("请输入要修改商品的id");
int id=sc.nextInt();
// 添加修改方法
Goods g=Getgoodsid(id,shopcar);
if (g!=null){
System.out.println(“请输入”+g.name+“商品最新购买个数”);
int number=sc.nextInt();
g.buyNumber=number;
System.out.println(“修改完成”);
queryGoods(shopcar);
break;
}else{
System.out.println(“对不起没有购买商品”);
}
}
}
public static Goods Getgoodsid(int id,Goods[] shopcar)
{
for (int i = 0; i < shopcar.length; i++) {
Goods g=shopcar[i];
if(g!=null){
if(g.id==id)
{
return g;
}
}else
{
return null;
}
}
return null;
}
public static void pay(Goods[] shopcar) {
System.out.println("以下是您购买的商品");
queryGoods(shopcar);
double sum=0;
for (int i = 0; i < shopcar.length; i++) {
if(shopcar[i]!=null) {
sum += (shopcar[i].price * shopcar[i].buyNumber);
}else{
break;
}
}
System.out.println("您购买的商品总价是" + sum);
}
}
构造器
this关键字
不加this会无效赋值
封装
javabean
String类
ArrayList集合
使用add方法对集合增加数据
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("我的");
list.add(2.5);
list.add("g");
list.add(90);
list.add("123");
list.add(4,"www");
System.out.println(list);
}
public static void main(String[] args) {
// 常用API
ArrayList<String> list=new ArrayList<>();
list.add("java");
list.add("linux");
list.add("hadoop");
list.add("ubuntu");
// 1获取索引位置元素值get
String s=list.get(1);
System.out.println(s);
// 2获取集合大小
System.out.println(list.size());
// 3完成集合遍历fori
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 4删除某个位置值并返回remove
String s1=list.remove(2);
System.out.println(s1);
System.out.println(list);
// 5直接删除remove
System.out.println(list.remove("java"));
System.out.println(list);
// 6修改某个位置的值set
list.set(0,"solar");
System.out.println(list);
}
}
和数组遍历不一样容易删除覆盖
public static void main(String[] args) {
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(98);
list.add(77);
list.add(66);
list.add(89);
list.add(79);
list.add(50);
list.add(100);
System.out.println(list);
// 错误方案 for (int i = 0; i < list.size(); i++) {
// if(list.get(i)<80){
// list.remove(i);
// }
// }
// 正确方案1
// for (int i = 0; i < list.size(); i++) {
// if(list.get(i)<80){
// list.remove(i);
// i--;
// 删除后退一位
// }
// }
// 正确方案2倒着遍历
for (int i = list.size()-1; i >=0; i--) {
if(list.get(i)<80){
list.remove(i);
}
}
System.out.println(list);
}
// 1定义电影类
// 2定义对象赋值
Movie m1=new Movie("<<肖申克的救赎>>",9.7,"罗宾斯");
Movie m2=new Movie("<<霸王别姬>>",8.7,"张国荣");
Movie m3=new Movie("<<阿甘正传>>",7.7,"汉克斯");
// 3创建电影集合存储
ArrayList<Movie> movies=new ArrayList<>();
movies.add(m1);
movies.add(m2);
movies.add(m3);
System.out.println(movies);
// 4遍历对象信息
for (int i = 0; i < movies.size(); i++) {
Movie m=movies.get(i);
// 将第一个电影对象地址给m
System.out.println("电影名称" + m.getName());
System.out.println("电影得分" + m.getScore());
System.out.println("电影演员" + m.getActor());
System.out.println("-------------");
}
}
public static void main(String[] args) {
ArrayList students=new ArrayList<>();
students.add(new Student(“20180302”,“叶孤城”,23,“护理一班”));
students.add(new Student(“20180303”,“东方不败”,23,“推拿二班”));
students.add(new Student(“20180304”,“令狐冲”,26,“中药学四班”));
students.add(new Student(“20180305”,“西门吹雪”,26,“神经科二班”));
System.out.println(“学生学号\t\t学生姓名\t\t学生年龄\t\t学生班级”);
for (int i = 0; i < students.size(); i++) {
Student s=students.get(i);
System.out.println(s.getId()+“\t\t”+s.getName()+“\t\t”+s.getAge()+“\t\t”+s.getClassname());
}
// 学生查找功能测试
Scanner sc=new Scanner(System.in);
while (true){
System.out.println(“请输入你要查找学生的学号”);
String idnumber=sc.next();
Student s=getStudentById(students, idnumber);
if(s!=null){
System.out.println(“您查询的学生信息如下”);
System.out.println(s.getId()+“\t\t”+s.getName()+“\t\t”+s.getAge()+“\t\t”+s.getClassname());
}else
{
System.out.println(“查无此人”);
}
}
}
/**
* 根据学生学号来查找学生
* @param students 学生对象的集合
* @param idnumber 学生学号
* @return 学生对象
*/
public static Student getStudentById(ArrayList<Student> students,String idnumber){
for (int i = 0; i < students.size(); i++) {
Student m=students.get(i);
// 比较字符串方法用equals等于没法比较地址
if (m.getId().equals(idnumber))
{
return m;
}
}
return null;
}
ATM项目设计
ArrayList<Account> accounts=new ArrayList<>();
// 展示系统首页
while (true) {
System.out.println("=====================嘘的ATM系统=====================");
System.out.println("1、账户登录");
System.out.println("2、账户开户");
Scanner sc=new Scanner(System.in);
System.out.println("请选择你的操作");
int command =sc.nextInt();
switch (command){
case 1:
// 用户登录功能
break;
case 2:
// 用户开户功能
break;
default:
System.out.println("您输入的操作不存在");
}
/**
* 用户开户功能实现
*
* @param accounts 接受的账号集合
*/
private static void register(ArrayList<Account> accounts, Scanner sc) {
System.out.println("==============系统开户操作==============");
//创建账户对象用以封装输入信息
//结束账户名
Account account = new Account();
System.out.println("请输入用户名");
String userName = sc.next();
account.getUserName();
//接受账户密码
while (true) {
System.out.println("请输入账户密码:");
String passWord = sc.next();
System.out.println("请输入确认密码:");
String okpassWord = sc.next();
if (passWord.equals(okpassWord)) {
account.getPassWord();
break;
} else {
System.out.println("对不起,您输入两次密码不一致,请重新确认");
}
}
//接受账户限额
System.out.println("请输入账户限额:");
double quotaMoney = sc.nextDouble();
account.getQuotaMoney();
//生成账户卡号(独立成一个方法)
String carId = getRandomCarId(accounts);
account.setCarId(carId);
System.out.println("感谢您," + userName + "先生/女生您开户成功,您的卡号是" + carId + "请妥善保管卡号");
}
/**
* 为账户生成随机八位卡号
*
* @return返回卡号值
*/
private static String getRandomCarId(ArrayList<Account> accounts) {
Random r = new Random();
while (true) {
String carId = "";//空字符连接
for (int i = 0; i < 8; i++) {
carId += r.nextInt(9);
}
//判断八位卡号是否重复
if(getAccountByCarId(carId,accounts)==null){
return carId;
}
}
}
/**
* 根据id查找账户对象
* @param carId 传来新生成的卡号
* @param accounts 账户集合
* @return
*/
private static Account getAccountByCarId(String carId,ArrayList<Account> accounts){
for (int i = 0; i < accounts.size(); i++) {
Account acc=accounts.get(i);
if(acc.getCarId().equals(carId)){
return acc;
}
}
return null;
}
private static void login(ArrayList<Account> accounts,Scanner sc) {
System.out.println("====================系统登录操作====================");
//判断账户是否为空
if(accounts.size()==0){
System.out.println("对不起当前系统中无账户,请先去开户,再来登录!");
return;
}
//正式进入登陆操作
while (true) {
System.out.println("请输入您的卡号");
String carId=sc.next();
//判断卡号是否存在
Account acc=getAccountByCarId(carId,accounts);
if(acc!=null){
//卡号存在的
//输入密码
while (true) {
System.out.println("请输入密码");
String passWord=sc.next();
if(acc.getPassWord().equals(passWord)){
//登陆成功
System.out.println("恭喜你" + acc.getUserName() + "先生/女生进入系统,您的卡号是" + acc.getCarId());
}else{
System.out.println("对不起您输入的密码有误");
}
}
}else{
System.out.println("对不起系统中不存在该卡号");
}
}
}
操作界面功能
/**
* 操作页面
* @param sc
*/
private static void showUserCommand(Scanner sc,Account acc) {
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("6、退出");
System.out.println("7、注销账户");
System.out.println("请选择:");
int command=sc.nextInt();
switch (command){
case 1:
//展示当前账户信息
showAccount(acc);
break;
case 2:
//存款
pushMoney(acc,sc);
break;
case 3:
//取款
getMoney(acc,sc);
break;
case 4:
break;
case 5:
break;
case 6:
System.out.println("退出成功");
return;
case 7:
break;
default:
System.out.println("没有这项操作请重新选择");
break;
}
}
}
存款功能
private static void pushMoney(Account acc, Scanner sc) {
System.out.println("===============存款===============");
System.out.println("请输入存款金额");
double money=sc.nextDouble();
acc.setMoney(acc.getMoney()+money);
System.out.println("存款成功");
}
取款功能
private static void getMoney(Account acc, Scanner sc) {
System.out.println("==================取款================");
System.out.println("请输入取款金额");
double getmoney= sc.nextDouble();
if(getmoney<100){
System.out.println("账户余额不足一百先去存钱吧");
pushMoney(acc,sc);
}else if(getmoney> acc.getQuotaMoney()){
System.out.println("对不起您超过了取款最大限额:" + acc.getQuotaMoney());
System.out.println("请重新取款");
getMoney(acc,sc);
} else if(getmoney> acc.getMoney()){
System.out.println("对不起您的余额不足账户仅剩"+acc.getMoney()+"元");
System.out.println("请重新取款");
getMoney(acc,sc);
}else {
acc.setMoney(acc.getMoney()-getmoney);
System.out.println("恭喜你取款"+getmoney+"成功");
}
}
转账功能
private static void transferMoney(Scanner sc, Account acc, ArrayList accounts) {
System.out.println(“===用户转账功能”);
//1判断系统用户是否足够两人
if(accounts.size()<2){
System.out.println(“当前系统用户不足两人无法转账,请去开户吧”);
return;//结束方法
}
//2判断自己账户是否有钱
if(acc.getMoney()!=0){
while (true) {
System.out.println(“请输入你要转账的卡号”);
String carid=sc.next();
if(carid.equals(acc.getCarId())){
System.out.println(“对不起您不可以给自己的卡转账”);
continue;//跳出当此执行继续循环
}
Account account=getAccountByCarId(carid,accounts);
if(account!=null){
//判断姓名
String username=account.getUserName();
String tip=“*”+username.substring(1);
System.out.println(“请输入”+tip+“姓氏”);
String pername=sc.next();
if(username.startsWith(pername)){
//认证通过
System.out.println(“请输入转账金额”);
double zmoney=sc.nextDouble();
//判断余额是否足够
if(zmoney>acc.getMoney()){
System.out.println(“对不起您的余额不足,您最多可以转账:” + acc.getMoney());
}else {
//余额够了
acc.setMoney(acc.getMoney()-zmoney);
account.setMoney(account.getMoney()+zmoney);
System.out.println(“转账成功,您还剩” + acc.getMoney());
return;
}
}else{
System.out.println("对不起您输入的认证信息有误");
}
}else {
System.out.println("您输入的卡号不存在");
}
}
}else{
System.out.println("您的账户余额不足就别转了吧");
return;
}
}
销户
private static boolean removeAccount(Scanner sc, Account acc, ArrayList accounts) {
System.out.println(“用户销户”);
System.out.println(“你真的要销户吗y/n”);
String rs=sc.next();
switch (rs){
case “y”:
//正真的销户
if(acc.getMoney()>0){
System.out.println(“你账户中还有钱没有取完不允许销户”);
return false;
}else
{
accounts.remove(acc);
System.out.println(“您的账户销户完毕”);
return true;
}
default:
System.out.println(“好的当前账户继续保留”);
return false;
}
}
修改密码
private static void updataPassword(Account acc, Scanner sc) {
while (true) {
System.out.println(“请输入您当前账户的密码”);
String password=sc.next();
if(password.equals(acc.getPassWord())){
System.out.println(“请你输入新的密码”);
String newpassword=sc.next();
System.out.println(“请在此输入密码确认”);
String oknewpassword=sc.next();
if (newpassword.equals(oknewpassword)){
acc.setPassWord(newpassword);
System.out.println(“密码修改成功请重新登录”);
return;
}else{
System.out.println("密码确认错误,请重新修改");
}
}else{
System.out.println("当前账户密码不正确");
}
}
}