简单用数组和面向对象的思维写一个学生信息管理系统
一,系统需求如下:
-
用户在控制台输入指定的序号,系统会根据输入数字运行相关的功能
-
1.学生添加 2.查询所有学生的信息 3.查询一个专业的学生信息 4.根据学号查询学生的信息 5.输入学号修改学生的专业
截图如下
二,代码介绍
public class Student {
private String sid;//学号
private String name;//学生姓名
private String sex;//学生性别
private int age;//学生年龄
private String major;//学生专业
//无参构造
public Student() {
// TODO Auto-generated constructor stub
}
//有参构造
public Student(String sid, String name, String sex, int age, String major) {
this.sid = sid;
this.name = name;
this.sex = sex;
this.age = age;
this.major = major;
}
@Override
public String toString() {
return "Student [sid=" + sid + ", name=" + name + ", sex=" + sex + ", age=" + age + ", major=" + major + "]";
}
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
}
2,数据控制层StudentDao.java
mport java.util.Scanner;
/**
* 真正项目中,主类是最简单的,对实体进行增删改查的操作是封装在另外一个类里的
* 使用的时候进行调用封装类就可以了.
* 就好比自己买车,我只用知道车的功能,效果等具体功能,我并不用去管车的发动机是怎么做的,车的软件系统是怎么做的
* 我只要用它的功能就行了,这就是封装的思想。
*
* Dao层就是对其进行增删改查的,以后JavaWeb里面dao层就是对数据库进行增删改查的
* 这里相当于就是用数组来代表数据库
* @author 吴小斌
*
*/
public class StudentDao {
Student stu = new Student();
Student[] students = new Student[100];// 代表容器,可以理解为数据库
Scanner sc = new Scanner(System.in);// 扫描器
/*
* 添加学生信息的方法
*/
public void addStudent() {
System.out.println("请输入学生学号");
String sid = sc.next();
System.out.println("请输入学生姓名");
String name = sc.next();
System.out.println("请输入学生性别");
String sex = sc.next();
System.out.println("请输入学生年龄");
int age = sc.nextInt();
System.out.println("请输入学生专业");
String major = sc.next();
Student stu = new Student(sid, name, sex, age, major);// 构造函数,直接给其赋值就行了
// 这个循环判断的时候数组中的对象是不是为空,如果为空就赋值,如果不是空的,获取下一个位置
for (int i = 0; i < students.length; i++) {
if (students[i] == null) {// 判断对象为空要需要null
students[i] = stu;
break;
}
}
}
/*
* 获取全部信息
*/
public void showAll() {
for (int i = 0; i < students.length; i++) {
if (students[i] == null) {// 判断对象为空要需要null
} else {
System.out.println(students[i].toString());
}
}
}
/*
* 根据专业查询一类学生的信息
*/
public void findByMajor() {
System.out.println("请输入专业名");
String major = sc.next();
boolean flag = false;
for (int i = 0; i < students.length; i++) {
if (students[i] == null) {// 判断对象为空要需要null
break;
} else {
if (students[i].getMajor().equals(major)) {
System.out.println(students[i].toString());
flag = true;
}
}
}
if (!flag) {
System.out.println("该专业暂未录入");
System.out.println();
}
}
/*
* 根据学号来查找某一个学生的全部信息
*/
public void findStuBySid() {
System.out.println("请输入需要查询学生的学号");
String sid = sc.next();
boolean flag = false;
for (int i = 0; i < students.length; i++) {
if (students[i] == null) {
break;
} else {
if (students[i].getSid().equals(sid)) {
System.out.println("此学生的信息为:\n");
System.out.println(students[i].toString());
flag = true;
}
}
}
if (!flag) {
System.out.println("系统中无此学号!!!");
System.out.println();
}
}
/*
* 根据学号来拿到学生的专业
*/
public String findStuMajorBySid(String sid) {
String major = null;
boolean flag = false;
for (int i = 0; i < students.length; i++) {
if (students[i] == null) {
break;
} else {
if (students[i].getSid().equals(sid)) {
major = students[i].getMajor();
}
}
}
return major;
}
/*
* 根据学号修改学生的专业为目标专业
*/
public void updateMajorBySid() {
System.out.println("请输入学生的学号");
String stuId = sc.next();
System.out.println("请输入学生现在的本专业");
String majorOld = sc.next();
boolean flag = false;
for (int i = 0; i < students.length; i++) {
if (students[i] == null) {
break;
} else {// 如果说输入的学号跟学生的专业对应,则是正确的
if (findStuMajorBySid(stuId).equals(majorOld)) {
flag = true;
}
}
}
if (flag) {
System.out.println("请输入转入的目标专业");
String majorNew = sc.next();
for (int i = 0; i < students.length; i++) {
if (students[i] == null) {
break;
} else {
students[i].setMajor(majorNew);
System.out.println("修改专业后的信息如下\n" + students[i].toString());
}
}
} else {
System.out.println("学号跟专业对不上,错误");
menu();
}
}
/*
* 菜单方法
*/
public 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("0.退出系统");
System.out.println("请输入您的选择");
int num = sc.nextInt();
switch (num) {
case 1:
addStudent();
menu();
break;
case 2:
showAll();
menu();
break;
case 3:
findByMajor();
menu();
break;
case 4:
findStuBySid();
menu();
break;
case 5:
updateMajorBySid();
menu();
break;
case 0:
System.out.println("感谢使用,再见");
System.exit(0);
}
}
}
3,主类StudentMain.java
public class StudentMain {
public static void main(String[] args) {
StudentDao stu=new StudentDao();
stu.menu();
}
}
三,个人总结
1,在类里面,主方法外面定义的扫描器Scanner类可以在整个类中进行调用
以后如果说需要在整个类中使用扫描器,就可以这么调用
2,本项目只是用到了数组来存储,缺点是很明显的,它的长度是固定的,所以就很有局限性
今后学到了集合,就可以用集合来实现,当然学了数据库就更简单了
3,在给数组遍历元素赋值的时候,有一个条件就是判断是否为空,如果说此处是空的话,那么就可以直接赋值
如果不是空,那么就需要给后面那个位置赋值