本学习笔记的图片和题目均来源于黑马程序员,本人小白一枚,如有错误请及时指出,感谢感谢
第一个项目
1.学生管理系统
需求文档
画图分析
代码
public class Student {
private String id;
private String name;
private int age;
private String Address;
public Student() {
}
public Student(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
Address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return Address;
}
public void setAddress(String address) {
Address = address;
}
}
import java.util.ArrayList;
import java.util.Scanner;
public class StudentSystem {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
loop:
while (true) {
menu();
Scanner sc = new Scanner(System.in);
String choose = sc.next();
switch (choose) {
case "1": {
addStudent(list);
break;
}
case "2": {
deleteStudent(list);
break;
}
case "3": {
alterStudent(list);
break;
}
case "4": {
searchStudent(list);
break;
}
case "5": {
System.out.println("退出");
break loop;
//System.exit(0);//停止虚拟机运行,让所有代码都停止运行。
}
default:
System.out.println("没有这个选项");
break;
}
}
}
public static void menu() {
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("请输入您的选择");
}
//添加学生
public static void addStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
//输入学生信息,创建学生对象
String id;
while(true) {
System.out.println("请输入学生id");
id = sc.next();
if (contains(list,id)) {//需要重新输入
System.out.println("id重复,请重新输入");
}else{
break;
}
}
System.out.println("请输入学生姓名");
String name = sc.next();
System.out.println("请输入学生年龄");
int age = sc.nextInt();
System.out.println("请输入学生家庭住址");
String address = sc.next();
Student s = new Student(id, name, age, address);
//添加到集合中
list.add(s);
//提示
System.out.println("添加成功");
}
//删除学生
public static void deleteStudent(ArrayList<Student> list) {
System.out.println("请输入要删除的id");
Scanner sc = new Scanner(System.in);
String id = sc.next();
if(index(list,id)>=0){
list.remove(index(list,id));
System.out.println("删除成功");
}else{
System.out.println("id不存在,删除失败");
}
}
//修改学生信息
public static void alterStudent(ArrayList<Student> list) {
System.out.println("请输入要修改的id");
Scanner sc = new Scanner(System.in);
String id = sc.next();
if(index(list,id)==-1){
System.out.println("id不存在,修改失败");
return;
}
//当代码执行到这里时,表示当前id是存在的
System.out.println("请输入要修改的姓名");
String name = sc.next();
System.out.println("请输入要修改的年龄");
int age = sc.nextInt();
System.out.println("请输入要修改的地址");
String address = sc.next();
Student s = new Student(id, name, age, address);
list.set(index(list,id),s);
System.out.println("修改成功");
}
//查询学生信息
public static void searchStudent(ArrayList<Student> list) {
if (list.size() == 0) {
System.out.println("当前无学生信息,请添加后再查询");
return;//结束方法
}
//到这里,集合中一定有数据
System.out.println("id\t\t姓名\t年龄\t家庭住址");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getId() + "\t" + list.get(i).getName() + "\t" + list.get(i).getAge() + "\t" + list.get(i).getAddress());
}
}
//判断id是否存在
public static boolean contains(ArrayList<Student> list,String id) {
/*for (int i = 0; i < list.size(); i++) {
if (id.equals(list.get(i).getId())) {
return true;//重复返回true
}
}return false;*/
return index(list,id)>=0;//提高代码复用性
}
//返回索引
public static int index(ArrayList<Student> list,String id) {
for (int i = 0; i < list.size(); i++) {
if (id.equals(list.get(i).getId())) {
return i;//重复返回i
}
}return -1;
}
}
2.学生管理系统升级版
画图分析
注册是登录和忘记密码的基础操作,所有第一步是先写注册
对每一步进行详细分析
历经三小时写出的
以下是本人历经三小时写出的初版代码,第一次写这么长的代码
public class User {
private String userName;
private String password;
private String id;
String phoneNumber;
User(){};
User(String userName, String password, String id, String phoneNumber) {
this.userName=userName;
this.password=password;
this.id=id;
this.phoneNumber=phoneNumber;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Random;
public class StudentSystemPlus {
public static void main(String[] args) {
ArrayList<User>list=new ArrayList<>();//一定要在循环外创建哇,找了好久才发现bug
while(true) {
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作:1.登录 2.注册 3.忘记密码");
Scanner sc = new Scanner(System.in);
String choose=sc.next();
switch(choose){
case "1"->{login(list);break;}
case "2"->{register(list);break;}
case "3"->{forget(list);break;}
default->{System.out.println("输入错误,请重新输入");break;}
}
}
}
public static void register(ArrayList<User>list){
//System.out.println(list.size());
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
//用户名满足的要求的代码
String name=sc.next();
int sum=0;
int sum1=0;
boolean flag=!isonly(list,name);
//System.out.println(flag);
if(flag){//最外层判断用户名是否唯一
if(name.length()>=3&&name.length()<=15){//第二层判断长度是否在3-15之间
for(int i=0;i<name.length();i++){//循环遍历每个字符
if(name.charAt(i)>='0'||name.charAt(i)<='9'||name.charAt(i)>='A'||name.charAt(i)<='Z'||name.charAt(i)>='a'||name.charAt(i)<='z'){
sum++;//验证只是字母和数字的组合
}
if(name.charAt(i)>='A'||name.charAt(i)<='Z'||name.charAt(i)>='a'||name.charAt(i)<='z'){
sum1++;//字母的数量
}
}
if(sum1>0&&sum==name.length()){//验证不全是数字并且只是字母和数字的组合
System.out.println("用户名满足要求");
}else{
System.out.println("用户名不满足要求,请重新输入");
return;
}
}else{
System.out.println("用户名不满足要求,请重新输入");
return;
}
}else{
System.out.println("用户名重复,请重新输入");
return;
}
//进行到这里,说明用户名满足要求
//比较密码是否一致
System.out.println("请输入密码");
String password1=sc.next();
System.out.println("请确认密码");
String password2=sc.next();
if(password1.equals(password2)){
System.out.println("密码满足要求");
}else{
System.out.println("密码不满足要求,请重新输入");
return;
}//进行到这里,说明密码满足要求
//验证身份证号码
System.out.println("请输入身份证号码");
String id=sc.next();
int sum2=0;
if(id.length()==18){//最外层判断长度为18
if(id.charAt(0)!=0){//判断开头不为0
for(int i=0;i<17;i++){
if(id.charAt(i)>'0'||id.charAt(i)<='9'){
sum2++;//判断前17位有几位是数字
}
}
if(sum2==17){//都是数字才满足条件
if(id.charAt(17)>'0'||id.charAt(17)<='9'||id.charAt(17)=='x'||id.charAt(17)=='X'){
System.out.println("身份证号码满足要求");
}else{
System.out.println("身份证号码不满足要求,请重新输入");
return;
}
}else{
System.out.println("身份证号码不满足要求,请重新输入");
return;
}
}else{
System.out.println("身份证号码不满足要求,请重新输入");
return;
}
}else{
System.out.println("身份证号码不满足要求,请重新输入");
return;
}
//进行到这里,说明身份证号码满足要求
//验证手机号
System.out.println("请输入手机号");
String phoneNumber=sc.next();
int sum4=0;
if(phoneNumber.length()==11){//判断长度是否是11位
if(phoneNumber.charAt(0)!=0){//是否以0为开头
for(int i=0;i<11;i++){
if(phoneNumber.charAt(i)>='0'||phoneNumber.charAt(i)<='9'){
sum4++;
}
}//统计数字数
if(sum4==11){//判断是不是都是数字
System.out.println("密码满足要求");
} else{
System.out.println("密码不满足要求,请重新输入");
return;
}
}else{
System.out.println("手机号不满足要求,请重新输入");
return;
}
}else{
System.out.println("手机号不满足要求,请重新输入");
return;
}
//进行到这里,说明手机号满足要求
User user=new User(name,password1,id,phoneNumber);
boolean flag1=list.add(user);
//System.out.println(flag1);
//System.out.println(list.size());
System.out.println("注册成功");
}
public static void login(ArrayList<User>list) {
Scanner sc = new Scanner(System.in);
loop: for(int i=0;i<3;i++){
System.out.println("请输入用户名");
String name=sc.next();
if(isonly(list,name)){//用户名存在
while(true){//输入验证码
String creat=creatCode();//一定要定义一个字符串,在循环中都使用同一个验证码
System.out.println("验证码为"+creat);
System.out.println("请输入验证码");
String code=sc.next();
if(code.equals(creat)){//判断验证码是否正确
System.out.println("验证码正确");
break;
}
}
System.out.println("用户名正确");//运行到这里,用户名和验证码均正确
for(int j=0;j<3;j++){//三次验证密码是否正确
System.out.println("请输入密码");
String password=sc.next();
if(password.equals(list.get(Index(list,name)).getPassword())){
System.out.println("密码正确");
System.out.println("登录成功");
break loop;//正确就跳出大循环,登录成功
}else{//错误提示还有几次机会
if(j<2){
System.out.println("密码错误,还有"+(2-j)+"次机会");
}else{
return;
}
}
}
}
else{//不存在提示先注册
System.out.println("用户名未注册,请先注册");
}
}
return;
}
public static void forget(ArrayList<User>list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String name=sc.next();
if(isonly(list,name)){
System.out.println("请输入身份证号码");
String id=sc.next();
System.out.println("请输入手机号码");
String phoneNumber=sc.next();
if(id.equals(list.get(Index(list,name)).getId())&&phoneNumber.equals(list.get(Index(list,name)).getPhoneNumber())){
System.out.println("请输入新密码");
String password=sc.next();
list.set(Index(list,name),new User(name,password,id,phoneNumber));
System.out.println("修改成功");
}else{
System.out.println("账号信息不匹配,修改失败");
}
}else{
System.out.println("未注册");
}
}
//判断用户名是否唯一
public static boolean isonly(ArrayList<User>list,String userName){
/*for(int i=0;i<list.size();i++){
if(list.get(i).getUserName().equals(userName)){
return true;//本来就存在,即不唯一,为true
}
}
return false;*///本来不存在,即唯一,为false
if(Index(list,userName)>=0){
return true;//存在
}
return false;//不存在
}
//返回第几个
public static int Index(ArrayList<User>list,String userName){
for(int i=0;i<list.size();i++){
if(list.get(i).getUserName().equals(userName)){
return i;//存在,返回序号
}
}
return -1;//不存在
}
//产生验证码
public static String creatCode() {
StringBuilder sb=new StringBuilder();
char[]code1={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'
,'A','B','C','D','E','F','G','H','I','G','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char[]code2={'1','2','3','4','5','6','7','8','9','0'};
Random r=new Random();
for(int i=0;i<5;i++){//长度为5
int index=r.nextInt(52);
sb.append(code1[index]);
}//此时验证码全是字母
String str=sb.toString();//生成String
int index1=r.nextInt(5);//验证码第几位
int index2=r.nextInt(10);//替换为数字几
str=str.replace(str.charAt(index1),code2[index2]);//替换
return str;
}
}