1 实现功能

2 结构概述

分为两个包,各自一个类 Student.java 为学生类,目的是储存学生信息

StudentManager.java 是主程序的代码

3 Student.java 的代码如下

可以快捷生成(eciplise--->右键代码区----->选择source----->选择 generate)

 package com.itheima.domain;

 public class Student {
private String sid;//学生学号
private String name;//学生姓名
private int age;//学生年龄
private String birthday;//学生生日
   //无参数构造方法
public Student() {
super();
}
   //有参数构造方法
public Student(String sid, String name, int age, String birthday) {
super();
this.sid = sid;
this.name = name;
this.age = age;
this.birthday = birthday;
} public String getSid() {
return sid;
} public void setSid(String sid) {
this.sid = sid;
} 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 getBirthday() {
return birthday;
} public void setBirthday(String birthday) {
this.birthday = birthday;
} }

4 StudentManager.java 代码如下 (各个功能以自定义方法实现)

具体代码如下:

 package com.itheima.test;
import java.util.ArrayList;
import java.util.Scanner; import com.itheima.domain.Student; public class StudentManager { public static void main(String[] args) { // TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
// 创建集合容器对象
ArrayList<Student> list = new ArrayList<Student>();
lo: while (true) {
// lo 为循环标号 break lo;
// 1、搭建主界面菜单
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("请输入您的选择:");
int sel = sc.nextInt();
switch (sel) {
case 1:
System.out.println("开始添加学生");
addStudent(list);
break;
case 2:
System.out.println("删除学生");
deleteStudent(list);
break;
case 3:
System.out.println("修改学生");
updateStudent(list);
break;
case 4:
System.out.println("查看学生");
viewStudent(list);
break;
case 5:
System.out.println("感谢您的使用");
break lo;
default:
System.out.println("输入的数字不在我识别之内,请重新输入");
break;
} }
} // 修改学生的方法
private static void updateStudent(ArrayList<Student> list) {
// TODO Auto-generated method stub
System.out.println("请输入您要修改的学号");
Scanner sc = new Scanner(System.in);
String updateSid = sc.next();
int index = getIndex(list, updateSid);
if (index == -1) {
System.out.println("查无信息,请重新输入");
} else {
// 存在: 接受新的学生信息
System.out.println("请输入新的学生姓名");
String name = sc.next();
System.out.println("请输入新的学生年龄");
int age = sc.nextInt();
System.out.println("请输入新的学生生日");
String birthday = sc.next();
// 封装为一个新的学生对象
Student stu = new Student(updateSid, name, age, birthday);
// 调用集合的set方法,完成修改
list.set(index, stu);
System.out.println("修改成功");
} } // 删除学生的方法
public static void deleteStudent(ArrayList<Student> list) {
// TODO Auto-generated method stub
System.out.println("请输入您要删除的学号");
Scanner sc = new Scanner(System.in);
String deleteSid = sc.next();
int index = getIndex(list, deleteSid);
if (index == -1) {
System.out.println("查无信息,请重新输入");
} else {
list.remove(index);
System.out.println("删除成功");
}
} // 查看学生的方法
public static void viewStudent(ArrayList<Student> list) { // TODO Auto-generated method stub
// 判断是否为空数据
if (list.size() == 0) {
System.out.println("无信息,请添加后重新查询");
return;
}
System.out.println("学号\t姓名\t年龄\t生日");
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getSid() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getBirthday());
}
} // 添加学生的方法
public static void addStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
String sid;
while (true) {
System.out.println("请输入学号");
sid = sc.next();
int index = getIndex(list, sid);
if (index == -1) {
// sid can use
break;
}
}
// 1 给出录入的提示信息 System.out.println("请输入姓名");
String name = sc.next();
System.out.println("请输入年龄");
int age = sc.nextInt();
System.out.println("请输入生日");
String birthday = sc.next();
// 2 将键盘录入的信息封装为学生对象
Student stu = new Student(sid, name, age, birthday);
// 3 将封装好的学生对象添加到集合容器中
list.add(stu);
// 4 给出添加成功的提示信息
System.out.println("添加成功");
} /*
* 定义getIndex方法 : 接受一个集合对象,接受一个学生学号 查找这个学号在集合中出现的索引位置
*/
public static int getIndex(ArrayList<Student> list, String sid) {
// 假设传入的学号,在集合中不存在
int index = -1;
// 遍历集合,获取每一个学生对象,准备进行查找
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
String id = stu.getSid();
// 和传入的sid进行比对
if (id.equals(sid)) {
// 存在:让index变量记录正确的索引位置
index = i;
} }
return index;
} }

5 小结:

这个项目融合了Java入门级别的知识,综合性强!(总计约210行代码)

                              ------ BTLord 小白工作室

                                       2020.9.13

Java 9天入门(黑马程序员) 课程收尾 ------学生管理系统 (9.13)的更多相关文章

  1. 2019年最新超级有趣好玩的html+css网页布局课程,前端入门基础,html5+css3零基础入门课程-黑马程序员pink老师精心录制

    大家好,我是黑马程序员pink老师!! 本次视频是前端零基础入门的课程,pink老师采取有趣好玩讲法,带你快乐的学习枯燥的html+css知识,学完之后让你能快速布局pc端页面.代码也可以讲的好玩有趣 ...

  2. 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具

        Java学习路线图引言:        黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...

  3. 黑马程序员:轻松精通Java学习路线连载1-基础篇!

    编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...

  4. 课程4:黑马程序员_spring2.5视频教程--视频列表

    \黑马程序员_spring2.5视频教程\01Struts相关基础理论介绍.mp4; \黑马程序员_spring2.5视频教程\02搭建struts开发环境.mp4; \黑马程序员_spring2.5 ...

  5. 黑马程序员——【Java高新技术】——代理

    ---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ...

  6. 黑马程序员:Java基础总结----泛型(高级)

    黑马程序员:Java基础总结 泛型(高级)   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...

  7. 黑马程序员:Java基础总结----类加载器

    黑马程序员:Java基础总结 类加载器   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个 ...

  8. 黑马程序员:Java基础总结----静态代理模式&动态代理

    黑马程序员:Java基础总结 静态代理模式&动态代理   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public  class  Ts {   ...

  9. 黑马程序员:Java基础总结----枚举

    黑马程序员:Java基础总结 枚举   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...

随机推荐

  1. 坚持第一天:HashMap和Hashtable的区别

    其实,到底是用HashMap和Hashtable主要看需求, 1.它们俩都共同实现了:Map接口,但是Hashtable实现是基于Dictionary抽象类的,在java5的时候提供了Concurre ...

  2. idea生成SpringBoot项目后再次调出依赖

    插眼 https://www.cnblogs.com/cosmos-wong/p/12908580.html

  3. Redis哨兵模式的配置

    绪论 现有三台设备,192.168.137.11.192.168.137.12和192.168.137.13,要求在三台设备上实现redis哨兵模式,其中192.168.137.11为master,其 ...

  4. 《java多线程——线程简介与其创建(1)》

    Java 给多线程编程提供了内置的支持. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开 ...

  5. Mybatis_day3

    三 使用XML配置SQL映射器(映射文件) 关系型数据库和SQL是经受时间考验和验证的数据存储机制.和其他的ORM 框架如Hibernate不同,[MyBatis鼓励]开发者可以直接[使用数据库],而 ...

  6. 数据隐私和GDPR

    近十几年来,随着大数据给各行各业带来的变化,以及数据时代不断强调的数据就是燃料,谁掌握数据谁就掌握未来的各种论调,大家纷纷开始收集数据,挖掘数据,转卖数据.而个人,作为数据真正拥有者的利益早就在商业利 ...

  7. springMVC入门(三)------springMVC的处理器映射器和处理器适配器配置

    简介 springMVC的处理器映射器和处理器适配器存在多种配置,因此在此专门做一个总结 常见处理器映射器.适配器的配置 springmvc多个映射器多个处理器可以并存 所有的映射器都实现了Handl ...

  8. Spring Security认证流程分析--练气后期

    写在前面 在前一篇文章中,我们介绍了如何配置spring security的自定义认证页面,以及前后端分离场景下如何获取spring security的CSRF Token.在这一篇文章中我们将来分析 ...

  9. webstorm激活码2020--定期更新

    2020年8月22日更新 一般错误关闭软件重填即可,key is invalid 错误需要恢复破解或者重装,才能使用 V8AF5QDT5R-eyJsaWNlbnNlSWQiOiJWOEFGNVFEVD ...

  10. 算法-搜索(4)ISAM算法

    ISAM技术是一种典型的多叉搜索树结构,它使用了3级索引结构:主索引.柱面索引.磁道索引 所有数据记录在基本区按关键码升序排序,后一磁道所有关键码均大于前一磁道.在某一磁道插入新记录时,如果原来该磁道 ...