Java 9天入门(黑马程序员) 课程收尾 ------学生管理系统 (9.13)
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)的更多相关文章
- 2019年最新超级有趣好玩的html+css网页布局课程,前端入门基础,html5+css3零基础入门课程-黑马程序员pink老师精心录制
大家好,我是黑马程序员pink老师!! 本次视频是前端零基础入门的课程,pink老师采取有趣好玩讲法,带你快乐的学习枯燥的html+css知识,学完之后让你能快速布局pc端页面.代码也可以讲的好玩有趣 ...
- 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具
Java学习路线图引言: 黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...
- 黑马程序员:轻松精通Java学习路线连载1-基础篇!
编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...
- 课程4:黑马程序员_spring2.5视频教程--视频列表
\黑马程序员_spring2.5视频教程\01Struts相关基础理论介绍.mp4; \黑马程序员_spring2.5视频教程\02搭建struts开发环境.mp4; \黑马程序员_spring2.5 ...
- 黑马程序员——【Java高新技术】——代理
---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ...
- 黑马程序员:Java基础总结----泛型(高级)
黑马程序员:Java基础总结 泛型(高级) ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...
- 黑马程序员:Java基础总结----类加载器
黑马程序员:Java基础总结 类加载器 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个 ...
- 黑马程序员:Java基础总结----静态代理模式&动态代理
黑马程序员:Java基础总结 静态代理模式&动态代理 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public class Ts { ...
- 黑马程序员:Java基础总结----枚举
黑马程序员:Java基础总结 枚举 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...
随机推荐
- C#LeetCode刷题之#219-存在重复元素 II(Contains Duplicate II)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3704 访问. 给定一个整数数组和一个整数 k,判断数组中是否存在 ...
- 极简 Node.js 入门 - 2.3 process
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- Kruscal算法求图的最小生成树
Kruscal算法求图的最小生成树 概述 和Prim算法求图的最小生成树一样,Kruscal算法求最小生成树也用到了贪心的思想,只不过前者是贪心地选择点,后者是贪心地选择边.而且在算法的实现中,我 ...
- 调试备忘录-NTC电阻的使用(教程 + 代码)
软件环境:CodeWarrior 11.1 硬件环境:NXP S9KEAZ64A 传感器参数:NTC热敏电阻(R25 = 50k,B25-50 3950) 写在前面 最近做小项目需要用到NTC电阻,因 ...
- Java并发---并发理论
一.如何理解线程安全 在多线程中稍微不注意就会出现线程安全问题,那么什么是线程安全问题? 我的认识是.在多线程下代码执行的结果和预期的正确的结果不一致,该代码就是线程不安全的,否则就是线程安全的 在深 ...
- python 04 分支和循环
创建一个框架 名字.py 打飞机游戏 加载音乐 播放音乐 我打飞机诞生 inter=0 while true: if 用户是否惦记了关闭: 退出程序 bleak inter+=1 if inter ...
- 记录一次idae和maven设置的巨坑
这个忽略pom.xml文件千万别勾选,不然会导致项目的pom.xml怎么填写都无法导入新的依赖包!
- linux驱动之内核多线程(四)
本文摘自 http://www.cnblogs.com/zhuyp1015/archive/2012/06/13/2548494.html 自己创建的内核线程,当把模块加载到内核之后,可以通过:ps ...
- Linux内核之 内存管理
前面几篇介绍了进程的一些知识,从这篇开始介绍内存.文件.IO等知识,发现更不好写哈哈.但还是有必要记录下自己的所学所思.供后续翻阅,同时写作也是一个巩固的过程. 这些知识以前有文档涉及过,但是角度不同 ...
- IDEA_Shelve代码搁置与恢复
日常开发中,经常会遇到在当前分支开发到一半,但是需要Checkout上个版本解决bug或调查问题的情况.这个时候,我们是将代码提到Push远程?还是直接Rollback? 最理想的做法,就是将当前的开 ...