下面是java的一些入门基础知识,有需要借鉴即可。
课程:B站黑马程序员,JAVA入门上半部分LINK
一、初识JAVA
1.java概述
- 概念:java是由sun公司研发,在2009年被oracle收购,祖师爷詹姆斯·高斯林,是一种高级编程语言
- - 特性:可移植性质
- java体系:Java SE(核心) && Java EE(企业级开发) && Java ME
- Java产品:JDK(Java 开发工具包),注:LTS为长期支持版
目前的长期支持版有8、11、17
2.JAVA常用指令
- cls 清屏
- cd 进入目录
- dir 列举当前目录文件
- :切盘
3.编写第一个java程序
文件名称全英文,首字母大写,后缀java
4.path环境变量
意义:用于记录程序路径,方便在命令行任意位置进行调用
便于配置java版本的程序编译环境。
5.集成开发编译器:IDEA
二、JAVA基本语法
1.类型转换
①初步认识java中的类型:
②类型转换意义:处理不同类型的变量进行运算
③分类:
-
自动转换
-由高类型所决定
-自动小范围转换为大范围的类型 -
强制转换
-类型自己决定,不过有丢失数据的风险
2.运算符
+ | 连接符/加 |
---|---|
- | |
* | |
/ | |
% | |
++ | |
– | |
+= | 自带强制转换 |
-= | 自带强制转换 |
*= | 自带强制转换 |
/= | 自带强制转换 |
%= | 自带强制转换 |
== | |
!= | |
>= | |
<= | |
> | |
< | |
& | 位运算符/逻辑与 |
&& | |
| | 位运算符/逻辑与 |
|| | |
! | |
^ | 位运算符/逻辑与 |
?: | |
– | – |
注:&与&&的区别在于&&会短路。
3.API
- 导包
- 创建一个扫描器
- 接收用户数据
4.程序流控制
①顺序结构
②分支结构
if
switch
注:switch仅支持byte、short、int、char,后来支持枚举(JDK5)、String(JDK7)
③循环结构
while
for
do_while
continue
break;
5.数组
意义:存储同一类型的多个数据
格式分类:
- 静态数组:type[] + name = new type[]{nums};
- 动态数组:type[] + name = new type[length];
注意,动态数组默认值为0
6.方法(method)
①定义:方法(函数):一种语法结构,将一段代码封装,方便重复调用
②语法格式
在java中,返回类型要明确指出且接收一致。
③
④下面是一些方法案例:
public class test4_2 {
public static void main(String[] args) {
//1.计算1——n的和
int sum = sumNumbers(10);
System.out.println(sum);
//2.判断奇偶
String a = SelectNumbers(8);
System.out.println(a);
}
public static int sumNumbers(int n)
{
int i = 0;
int sum = 0;
for(i = 1;i<=n;i++)
{
sum+=i;
}
return sum;
}
public static String SelectNumbers(int m)
{
if(m%2==0)
{
return "even";
}
else {
return "odd";
}
}
}
⑤拓展知识:方法重载
一个类中,出现多个方法名称相同,但是形参列表不同的方法
区分形参列表不同:形参个数、类型、顺序(不关心名称)
意义:便于处理同一类业务,提供多种解决方案。
⑥拓展知识:参数传递机制
java的参数传递机制,一般来说,分为基本值传递(基本类型)和地址传递(引用类型)。
7.简单练习
①买飞机票
public static double buyTicket(int month,double money,String manner)
{
if(month>=5 && month<=10)
{
//旺季
if(manner == "头等舱")
{
money*=0.9;
}
else {
money*=0.85;
}
}
else {
//淡季
if(manner == "头等舱")
{
money*=0.7;
}
else {
money*=0.65;
}
}
return money;
}
②开发验证码
public static String creatCaptcha(int number)
{
String captcha = "";
Random r = new Random();
for(int i = 0;i<number;i++)
{
int type = r.nextInt(3);//[0,3)
switch(type)
{
case 0://生成小字母
char ch1 = (char)(r.nextInt(26)+65);
captcha+=ch1;
break;
case 1://生成大写字母
char ch2 = (char)(r.nextInt(26)+97);
captcha+=ch2;
break;
case 2://生成数字
int num = r.nextInt(9);
captcha+=num;
break;
}
}
return captcha;
}
要点提示:
Random r = new Random();
char ch1 = (char)(r.nextInt(26)+65);
③评委打分
public static double JudgesScore(int numbers)
{
int[] arr = new int[numbers];
int max = 0;
int min = 100;
int average = 0;
Scanner sc = new Scanner(System.in);
for(int i = 0;i<numbers;i++){
int num = sc.nextInt();
arr[i] = num;
if(arr[i]<min)
{
min = arr[i];
}
if(arr[i]>max)
{
max = arr[i];
}
average+=arr[i];
}
average-=(max+min);
average/=(numbers-2);
return average;
}
}
重点提示:
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
④数字加密
private static String DigitalEncryption(int number) {
//先将数字每位数字分开,放到数组中
int[] nums = Separate(number);
//对每个数字+5
for(int i = 0;i<4;i++)
{
nums[i]+=5;
nums[i]%=10;
}
//将所有数字顺序反转
Swap(nums,0,3);
String str = "";
for(int i = 0;i<4;i++)
{
str+=nums[i];
}
return str;
}
private static void Swap(int[] arr, int start, int end) {
while(start<end)
{
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
⑤数组拷贝
private static int[] Copyarray(int[] arr) {
int[] arrcopy = arr;
int i = 0;
for(i = 0;i<arrcopy.length;i++)
{
System.out.print(arrcopy[i] + " ");
}
System.out.println();
return arrcopy;
}
⑥抢红包
private static void GrabREnvelope() {
Scanner sc = new Scanner(System.in);
Random r = new Random();
int[] arr = new int[]{9,666,188,520,99999};
int j = 0;
for(j = 0;j<5;j++)
{
System.out.println("请您输入一个数值进行抽奖");
sc.nextInt();
while(true)
{
//随机值
int i = r.nextInt(5);
if(arr[i]!=0)
{
System.out.println("恭喜您抽到了" + arr[i] + "元");
arr[i] = 0;
break;
}
else {
continue;
}
}
}
System.out.println("抽奖结束,敬请待续");
}
⑦找素数
private static int findPrime1(int start, int end) {
int i;
int count = 0;
int flag = 0;
for(i = start;i<=end;i++)
{
flag = 0;
int q = 2;
for(q=2;q<=i/2;q++)
{
if(i%q==0)
{
flag = 1;
break;
}
}
if(flag == 0)
{
System.out.println(i + "是素数");
count++;
}
}
return count;
}
private static int findPrime2(int start, int end) {
int i;
int count = 0;
OUT:
for(i = start;i<=end;i++)
{
int q = 2;
for(q=2;q<=i/2;q++)
{
if(i%q==0)
{
continue OUT;
}
}
System.out.println(i + "是素数");
count++;
}
return count;
}
private static int findPrime3(int start, int end) {
int i;
int count = 0;
for(i = 101;i<=200;i++)
{
if(Check(i))
{
count++;
System.out.println(i + "是素数");
}
}
return count;
}
private static boolean Check(int data) {
for(int i = 2;i<=data/2;i++)
{
if(data%i==0)
{
return false;
}
}
return true;
}
⑧打印乘法口诀表
private static void Multiplication() {
int i;
for(i = 1;i<=9;i++)
{
int j;
for(j = 1;j<=i;j++)
{
System.out.print( j + "*" + i + "=" + (i*j) + " ");
}
System.out.println();
}
}
⑨打印三角形
private static void Triangle(int n) {
for(int i = 0;i<n;i++)
{
//先打印空格
for(int j = 0;j<n-i-1;j++)
{
System.out.print(" ");
}
//打印形状
for(int j = 0;j<2*i-1;j++)
{
System.out.print("*");
}
System.out.println();
}
}
⑩双色球
private static void ComparativeJudgment(int[]arr1,int[]arr2) {
int redcount = 0;
int bluecount = 0;
//统计红色蒙对的个数
for(int i = 0;i<6;i++)
{
for(int j = 0;j<6;j++)
{
if(arr1[i] == arr2[i])
{
redcount++;
break;
}
}
}
//统计蓝色蒙对的个数
if(arr1[6] == arr2[6])
{
bluecount++;
}
if(redcount == 6 && bluecount == 1)
{
System.out.println("恭喜您,中1奖了");
}
else if(redcount == 6 && bluecount == 0)
{
System.out.println("恭喜您,中2奖了");
}
else if(redcount == 5 && bluecount == 1)
{
System.out.println("恭喜您,中3奖了");
}
else if(redcount == 5 && bluecount == 0)
{
System.out.println("恭喜您,中4奖了");
}
else if(redcount == 4 && bluecount == 1)
{
System.out.println("恭喜您,中5奖了");
}
else if(redcount == 4 && bluecount == 0)
{
System.out.println("恭喜您,中6奖了");
}
else if(redcount == 3 && bluecount == 1)
{
System.out.println("恭喜您,中7奖了");
}
else if(redcount == 2 && bluecount == 1)
{
System.out.println("恭喜您,中8奖了");
}
else if(redcount == 1 && bluecount == 1)
{
System.out.println("恭喜您,中9奖了");
}
else if(redcount == 0 && bluecount == 1)
{
System.out.println("恭喜您,中10奖了");
}
}
public static int[] CreLuckNumbers() {
Random r = new Random();
int[] arr = new int[7];
//红色球
for(int i = 0;i < 6;i++)
{
while(true)
{
int number = r.nextInt(33)+1;
if(Select(number,arr))
{
arr[i] = number;
break;
}
}
}
//蓝色球
int number = r.nextInt(16)+1;
arr[6] = number;
return arr;
}
private static void PrintArray(int[] arr) {
for(int i = 0;i< arr.length;i++)
{
System.out.print(arr[i]+ " ");
}
System.out.println();
}
public static int[] UserNumbers() {
Scanner sc = new Scanner(System.in);
int[] numbers = new int[7];
int i = 1;
//红球
for(i = 0;i<6;i++)
{
while(true)
{
System.out.println("请输入您要选择的第" + (i+1) + "个双色球号码");
int number = sc.nextInt();
//判断是否在范围内&&是否重复
if(number>=1&&number<=33&&Select(number,numbers))
{
numbers[i] = number;
break;
}
System.out.println("您选择的号码重复/不在范围中,请重新选择第" + (i+1) + "个号码");
}
}
//蓝色球
while(true)
{
System.out.println("请输入您要选择的蓝球号码是哪个(1-16):");
int number = sc.nextInt();
if(number>=1&&number<=16)
{
numbers[6] = number;
break;
}
System.out.println("您选择的号码重复了/不再范围中,请重新选择第红球号码");
}
return numbers;
}
private static boolean Select(int number,int[] numbers) {
int i = 0;
for(i = 0;i<6;i++)
{
if(number == numbers[i])
{
return false;//重复的直接返回false
}
}
return true;
}
8.面向对象编程
①快速入门
1.为什么设计类?
符合人类的编程习惯,思维习惯。2.类的本质:
实际上是一种特殊的数据结构,这种数据结构是一种待填的表格模板。
3.对象的设计由来
4.面向对象的注意事项
①.类名用的英文,首字母大写,驼峰模式
②.类中定义的变量/方法称为成员变量/成员方法
③.成员变量本身存在默认值
④.一个class类中只能有一个public修饰,且public修饰的类名必须成为代码的文件名称。
⑤.对象与对象之间相互独立,除非两个对象指向同一块空间
⑥.如果对象没有被变量引用,则对象会成为垃圾对象,由java中的垃圾回收机制自动回收空间
②面向对象在计算机中执行原理
判断引用类型变量:如果一个变量中存储的是一个对象的地址,称为引用类型变量。
③this:一个变量,用在对象本身的方法中,来拿到当前对象的地址。
this的意义:解决成员变量名称与成员方法形参名称冲突问题。
说白了,this是一个java内置的对象形参,用来接收创建的变量的地址的。
④构造器:一种特殊的方法
个人感觉就是方便调用的对象方法。我们在创建对象时候,可以方便调用里面的同名方法。
⑤封装
封装的规则:合理隐藏,合理暴露
⑥实体类
应用示例:
⑦综合案例
public class MovieData {
private int id;
private String name;
private double price;
private double score;
private String director;
private String actor;
private String info;
public MovieData(int id, String name, double price, double score, String director, String actor, String info) {
this.id = id;
this.name = name;
this.price = price;
this.score = score;
this.director = director;
this.actor = actor;
this.info = info;
}
public MovieData() {
}
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(double price) {
this.price = price;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
public class MovieOperation {
MovieData[] movies = new MovieData[4];
//功能1:一键展示所有电影的名称和价格信息
public MovieOperation(MovieData[] movies) {
this.movies = movies;
}
public void printAllInfo(MovieData[] movies){
System.out.println("下面是所有电影的名称和价格信息:");
for (int i = 0; i < 4; i++) {
System.out.println("name:" + movies[i].getName());
System.out.println("price" + movies[i].getPrice());
}
}
//功能2:查询某个id的详细信息
public void printMovieInfo(int id){
for (int i = 0; i <4 ; i++) {
if(movies[i].getId() == id)
{
System.out.println("下面是该电影的所有信息:");
System.out.println("name:" + movies[i].getName());
System.out.println("price" + movies[i].getPrice());
System.out.println("score:" + movies[i].getScore());
System.out.println("actor:" + movies[i].getActor());
System.out.println("director:" + movies[i].getDirector());
System.out.println("info:" + movies[i].getInfo());
break;
}
}
System.out.println("您输入的id未找到匹配项~");
}
}
import java.util.Scanner;
public class test {
public static void main(String[] args) {
//1.创建一个存储电影信息的类
//2.创建一个电影操作方法的类
//3.保存数据
MovieData[] arr = new MovieData[4];
arr[0] = new MovieData(1, "水门桥", 38.9, 9.8, "徐克", "吴京", "12w");
arr[1] = new MovieData(2, "出拳吧", 39, 7.8, "唐晓白", "田雨", "3.5w");
arr[2] = new MovieData(3, "月球陨落", 42, 7.9, "罗兰", "贝瑞", "17.9w");
arr[3] = new MovieData(4, "一点就到家", 35, 8.7, "许宏宇", "刘昊然", "10.8w");
//测试
MovieOperation a = new MovieOperation(arr);
System.out.println("---------------------");
//4.实现test逻辑
Scanner sc = new Scanner(System.in);
do {
System.out.println("提示:1.展开全部电影信息"+"\n" + "2.输入id,搜查该电影的详细信息"+"\n"+"0:退出");
int commend = sc.nextInt();
switch (commend) {
case 0: {
System.out.println("退出");
break;
}
case 1: {
System.out.println("展开所有电影");
a.printAllInfo(arr);
break;
}
case 2: {
System.out.println("展开该电影所有信息");
int id = sc.nextInt();
a.printMovieInfo(id);
break;
}
default:
System.out.println("输入错误");
}
}while(true);
}
}
9.常用API
①导包
API:全程应用程序编程接口,是别人写好的一些代码,方便程序员直接拿去调用以提高开发效率。
包:包是分门别类管理程序的,别人写好的程序通常都放在对应的包种进行管理和维护。
建包的语法格式:
自动导包
包的注意事项:
package a;
import b.Teacher;
import java.util.Random;
import java.util.Scanner;
public class test_a {
public static void main(String[] args) {
//导包的注意事项
// 1.同一个包下的类,可以直接互相调用
Student s1 = new Student();
s1.printStudent();
// 2.不同包下,需要导入包,import+包名.类名
Teacher t1 = new Teacher();
//3.要调用java提供的程序,需要先导包才可以使用,但是java.lang中的包可以直接使用
Scanner s2 = new Scanner(System.in);
Random r1 = new Random();
//4.当前程序中如果要调用多个不同包下的程序且这些程序类名一致,此时默认值只能导入一个,另一个需要输入全称。
Teacher t = new Teacher();
t.printTeacher();
a.Teacher t2 = new a.Teacher();
t2.printTeacher();
}
}
②字符串(String)
拓展练习题:
package page_2024_4_9;
public class class_2024_4_9 {
public static void main(String[] args) {
//题目1:下面两个代码分别创建几个对象?
String s2 = new String("abc");//这个abc是先放在常量池中,再拿到堆中的,创建两个对象
String s1 = "abc";//这个abc是放在常量池中的,但是前面已经创建了,所以只创建一个对象
System.out.println("-------------");
System.out.println(s2 == s1);
System.out.println("-------------");
//题目2:阅读下面程序,请写出程序的打印结果是多少?
String b1 = "abc";
String b2 = "ab";
String b3 = s2 + "c";//注意,如果需要变量参与运算时候,要放在堆中进行运算
System.out.println("-------------");
System.out.println(b1 == b3);
System.out.println("-------------");
//题目3:阅读下面程序,请写出程序的打印结果是多少?
String c1 = "abc";
String c2 = "a" + "b" + "c";
System.out.println("-------------");
System.out.println(c1 == c2);
System.out.println("-------------");
}
}
案例1:完成用户登录
private static void test2() {
//开发一个登录验证的逻辑
int count = 3;
do {
//1.首先要接收用户输入的账号和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的账号");
String Account = sc.next();
System.out.println("请输入您的密码");
String password = sc.next();
//2.判断账号密码是否正确的函数
boolean check = Checkpassword(Account,password);
if(check)
{
System.out.println("欢迎进入系统");
break;
}
else {
System.out.println("账号/密码有误");
}
count--;
}while(count!=0);
if(count == 0)
System.out.println("3次机会已经用完~~");
}
private static boolean Checkpassword(String Account,String password) {
//定义正确的账号与密码
String okAccount = "suziguang";
String okpassword = "123456";
//返回
return Account.equals(okAccount) && password.equals(okpassword);
}
案例2:使用String来开发验证码
private static void test3() {
//制造验证码
String code = CreatCode(4);
System.out.println(code);
}
private static String CreatCode(int n) {
String code = "";
String data = "abcdefghijklmnopqrstuvwxyzABCDEFGIJKLMNOPQRSTUVWXYZ0123456789";
Random r = new Random();
for (int i = 0; i < n; i++) {
int k = r.nextInt(data.length());
code += data.charAt(k);
}
return code;
}
③集合(ArrayList)
集合的概念:集合是一种容器,类似于数组,用来储存数据。
注:集合是一种泛类型,ArrayList<>可以用来限制类型
集合的特点:长度灵活可变(相较于数组大小固定而言)
集合的种类:ArrayList、TreeSet、LinkedList…
集合提供的各种接口:
private static void test4() {
ArrayList<String> list = new ArrayList();
//1.add尾插,返回是否插入成功
list.add("zhaoyun");
list.add("zhugeliang");
System.out.println(list);
//2.pos插入,返回void
list.add(1,"zhangfei");
System.out.println(list);
//3.get返回指定索引处的元素
System.out.println(list.get(0));
//4.size,返回集合中的元素个数
System.out.println(list.size());
//5.remove,删除指定索引处的元素,并返回该元素
System.out.println(list.remove(0));
System.out.println(list);
//6.remove,删除指定元素,并返回是否成功
System.out.println(list.remove("zhugeliang"));
System.out.println(list);
//7.修改指定索引处的元素,返回被修改的元素
System.out.println(list.set(0, "zhaozilong"));
System.out.println(list);
}
技巧:删除集合元素的技巧
private static void PopElements() {
ArrayList<String> list = new ArrayList();
list.add("张飞");
list.add("赵子龙");
list.add("李云龙");
list.add("龙");
list.add("赵云");
list.add("刘备");
System.out.println(list);
//方法一,删除之后i--;
/*for (int i = 0; i < list.size(); i++) {
String ele = list.get(i);
if(ele.contains("龙"))
{
list.remove(i);
i--;
}
}*/
//方法二:从后面往前删除
for (int j = list.size() - 1; j >= 0; j--) {
String ele = list.get(j);
if(ele.contains("龙"))
{
list.remove(j);
}
}
System.out.println(list);
}
案例:菜品上架
小技巧:在java的switch中可以中用String来做参数,防止有其他类型的元素造成直接代码崩溃。
package testpage_2024_4_10;
public class test {
//完成菜品上架以及展示的功能
public static void main(String[] args) {
//1.首先要创建一个food类,就是一个空白的表格
//2.创建一个food操作方法类,用来对集合进行操作
FoodOperation op = new FoodOperation();
op.start();
}
}
package testpage_2024_4_10;
import java.util.ArrayList;
import java.util.Scanner;
public class FoodOperation {
private ArrayList<Food> FoodList = new ArrayList<>();
//1.add功能
public void add()
{
Food food = new Food();
Scanner sc = new Scanner(System.in);
//1.输入
System.out.println("请输入您要添加的菜品名称");
String name = sc.next();
food.setName(name);
System.out.println("请输入您要添加的菜品价格");
String price = sc.next();
food.setPrice(price);
System.out.println("请输入您要添加的菜品描述");
String desc = sc.next();
food.setDesc(desc);
FoodList.add(food);
System.out.println("菜品上架成功!");
}
//2.展示功能
public void show(){
if(FoodList == null)
{
System.out.println("没有商品");
return;
}
Food food = new Food();
System.out.println("------------------------");
for(int i = 0;i<FoodList.size();i++)
{
food = FoodList.get(i);
System.out.println("商品的名称:" + food.getName());
System.out.println("商品的价格:" + food.getPrice());
System.out.println("商品的描述:" + food.getDesc());
System.out.println("------------------------");
}
}
public void start(){
Scanner sc = new Scanner(System.in);
String commend = new String();
do {
System.out.println("1.add");
System.out.println("2.showall");
System.out.println("0.exit");
System.out.println("请输入选项");
commend = sc.next();
switch(commend)
{
case "1":
add();
break;
case "2":
show();
break;
case "0":
break;
default:
System.out.println("没有该选项,重新选择");
}
}while(!commend.equals("0"));
}
}
package testpage_2024_4_10;
public class Food {
private String name;
private String price;
private String desc;
public Food(String name, String price, String desc) {
this.name = name;
this.price = price;
this.desc = desc;
}
public Food() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
10.ATM项目实践
package page_ATM;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
private ArrayList<Account> accounts = new ArrayList<Account>();
Scanner sc = new Scanner(System.in);
Random r = new Random();
public void start(){
String commend = "0";
do {
System.out.println("欢迎进入ATM系统");
menu();
System.out.println("请输入您要选择的选项");
commend = sc.next();
switch(commend)
{
case "1":
System.out.println("用户登录");
System.out.println();
login();
break;
case "2":
System.out.println("用户开户");
System.out.println();
addAccount();
break;
case "0":
System.out.println("ATM退出成功!");
System.out.println();
break;
default:
System.out.println("没有该选项,重新选择");
System.out.println();
break;
}
}while(!commend.equals("0"));
}
private void login() {
if(accounts.size() == 0)
{
System.out.println("当前ATM中无任何账号,请先去开户");
return;
}
Account acc = new Account();
while(true)
{
System.out.println("请您输入卡号");
String st = sc.next();
//检查是否有该卡号
acc = CheckID(st);
if(acc!=null)
{
System.out.println("当前ATM系统中存在该账号,请继续输入密码");
break;
}
else {
System.out.println("当前ATM系统中不存在该账号,请重新输入");
}
}
while(true)
{
String password = sc.next();
if(password.equals(acc.getPassword()))
{
System.out.println("密码输入正确," + acc.getName() + "您已成功登录系统中");
UserMenu(acc);
return;
}
else {
System.out.println("密码输入错误,请重新输入密码");
}
}
}
private void UserMenu(Account acc) {
while(true)
{
System.out.println(acc.getName() + "您可以选择如下选项对该账号进行操作:");
Menu();
int commend = sc.nextInt();
switch(commend)
{
case 1:
//查询账号
CheckThisID(acc);
break;
case 2:
//存款
addmoney(acc);
break;
case 3:
//取款
drawmoney(acc);
break;
case 4:
//转账
transfermoney(acc);
break;
case 5:
//修改密码
break;
case 6:
//退出
return;
case 7:
//注销账户
break;
default:
//其他情况
System.out.println("您输入的命令不合法,请重新输入");
break;
}
}
}
private void transfermoney(Account acc) {
//首先得判断系统中的账号是否大于等于2
if(accounts.size() < 2)
{
System.out.println("当前系统中仅一个账号,请先去开户~~");
return;
}
//在判断一下自己账号是否有钱
if(acc.getMoney()==0)
{
System.out.println("您的账号余额不足,请先存钱");
return;
}
//到这里,再开始接收用户的卡号
while(true)
{
System.out.println("请输入您要转账的卡号");
String id = sc.next();
Account acc2 = CheckID(id);
if(acc2 == null)
{
System.out.println("抱歉,在系统中没有找到该账号");
}
else {
while(true)
{
System.out.println("为了安全考量,请输入转账人的姓氏");
String name = "*" + acc2.getName().substring(1);
System.out.println("提示:[" + name + "]");
String surname = sc.next();
if(acc2.getName().startsWith(surname))
{
System.out.println("认证成功");
//下面开始真正转钱了
while(true)
{
System.out.println("请输入您要转钱的金额");
double money = sc.nextDouble();
if(money>acc.getMoney())
{
System.out.println("您的金额不足,您当前可转的最大金额是" + acc.getMoney() + "请您重新输入");
}
else {
System.out.println("转钱中,请稍等");
acc.setMoney(acc.getMoney() - money);
acc2.setMoney(acc2.getMoney() + money);
System.out.println("您的账号余额为" + acc.getMoney() + "对方的余额为" + acc2.getMoney());
System.out.println("转钱成功,跳转到个人账户菜单");
return;
}
}
}
else {
System.out.println("您的转账姓氏认证有问题,请重新输入");
}
}
}
}
}
private void drawmoney(Account acc) {
if(acc.getMoney()<100)
{
System.out.println("当前您的账号金额为" + acc.getMoney() + "满100元之后方可取款");
}
System.out.println("请输入您要取钱的金额");
double money = sc.nextDouble();
if(money>acc.getMoney())
{
System.out.println("当前账号余额不足,请重新输入金额");
}
else {
if(money>acc.getLimit())
{
System.out.println("超过当前账号的单次取款限额,请重新输入金额");
}
acc.setMoney(acc.getMoney() - money);
System.out.println(acc.getName() + "您当前账号的余额为" + acc.getMoney());
}
}
private void addmoney(Account acc) {
System.out.println("请输入您要存入多少钱");
double money = sc.nextDouble();
acc.setMoney(acc.getMoney()+money);
System.out.println(acc.getName() + "您的存钱成功,存入后的金额是" + acc.getMoney());
}
private void CheckThisID(Account acc) {
System.out.println(acc.getName() + "下面是您该账号下的所有信息:");
System.out.println("账号ID:" + acc.getID());
System.out.println("姓名" + acc.getName());
System.out.println("性别" + acc.getSex());
System.out.println("限额" + acc.getLimit());
System.out.println("存款" + acc.getMoney());
}
private void Menu() {
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("请选择:");
}
private void menu() {
System.out.println("---------------");
System.out.println("1.用户登录");
System.out.println("2.用户开户");
System.out.println("0.退出ATM系统");
System.out.println("---------------");
}
private void addAccount()
{
Account acc = new Account();
System.out.println("请输入您的姓名");
String name = sc.next();
acc.setName(name);
while(true)
{
System.out.println("请输入您的性别");
String sex = sc.next();
if(sex.equals("男") || sex.equals("女"))
{
acc.setSex(sex);
break;
}
else {
System.out.println("您输入的性别有误,请输入男/女");
}
}
while(true)
{
System.out.println("请输入您的密码");
String password = sc.next();
System.out.println("请再次输入您的密码作确认");
String okpassword = sc.next();
if(password.equals(okpassword))
{
acc.setPassword(password);
break;
}
else
{
System.out.println("您输入的两次密码不一致,请重新输入");
}
}
while(true)
{
System.out.println("请输入您每次的取现额度");
double limit = sc.nextDouble();
if(limit > 0)
{
acc.setLimit(limit);
break;
}
else{
System.out.println("您输入的limit限制<=0,请重新输入");
}
}
//系统自动生成卡号
String id = CreatID(8);
acc.setID(id);
//最后把acc这一个账号扔到集合中进行管理
System.out.println(acc.getName() + "开户成功,您的卡号是" + id);
accounts.add(acc);
}
private String CreatID(int n) {
while(true)
{
String id = "";
for (int i = 0; i < n; i++) {
id += r.nextInt(10);
}
Account acc = CheckID(id);
if(acc == null)
{
return id;
}
}
}
private Account CheckID(String id) {
for (int i = 0; i < accounts.size(); i++) {
if(id.equals(accounts.get(i).getID()))
{
return accounts.get(i);
}
}
return null;
}
}
package page_ATM;
public class Test {
public static void main(String[] args) {
//首先完成ATM类的变量和start功能设计
ATM atm = new ATM();
atm.start();
}
}
package page_ATM;
public class Account {
private String ID;
private String name;
private String sex;
private String password;
private double money;
private double limit;
public Account() {
}
public Account(String ID, String name, String sex, String password, double money, double limit) {
this.ID = ID;
this.name = name;
this.sex = sex;
this.password = password;
this.money = money;
this.limit = limit;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getName() {
return name + (sex.equals("男") ? "先生" : "女士");
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
}
EOF