java入门项目:学生管理系统(进阶版超详细搭建)
[TOC]
1、项目介绍
简介
学生管理系统是一个典型的信息管理系统,熟悉并掌握其需求和设计思想对于理解和学习数据库操作和Java编程有非常大的帮助。
设计思路
思路:分为学生端和教师端
- 学生端的功能分为登录、注册、查看个人信息、查看成绩、申请修改信息
- 教师端的功能分为登录、注册、查看学生信息、修改学生信息、删除学生信息、添加学生信息、查看学生申请的修改信息
2、项目搭建
IDEA新建java项目
点击文件 -->新建
点击src右键新建-->软件包
输入软件包名称,回车即可
3、创建实体类
分析
因为实体类可以提供更好的代码组织和数据封装,提高代码的可读性、可维护性和可扩展性,使程序更加健壮和易于开发和维护。
我们有分学生端和教师端,所以我们需要创建两个实体类
- Student
- Teach
学生类和老师类都有自己的属性
学生类
| 信息 | 变量名 | 类型 |
| :------: | :------: | :----: |
| 姓名 | Name | String |
| 学号 | Id | String |
| 年龄 | Age | int |
| 性别 | Sex | String |
| 密码 | Password | String |
| 家庭住址 | Address | String |
| 电话 | Phone | String |
| 语文成绩 | Chinese | double |
| 数学成绩 | Math | double |
| 英语成绩 | English | double |
| 总分 | Score | double |教师类
| 信息 | 变量名 | 类型 |
| :--: | :------: | :----: |
| 姓名 | Name | String |
| 工号 | Id | String |
| 年龄 | Age | int |
| 性别 | Sex | String |
| 密码 | Password | String |
| 电话 | Phone | String |
3.1、创建学生类
Student
package com.demo.studentsystem;
public class Student {
private String Name; //姓名
private String Id; //学号
private int Age; //年龄
private String Sex; //性别
private String Password; //密码
private String Address; //地址
private String Phone; //电话
private double Chinese; //语文成绩
private double Math; //数学成绩
private double English; //英语成绩
private double Score; //总分
public Student() {
}
public Student(String Name, String Id, int Age, String Sex, String Password, String Address, String Phone, double Chinese, double Math, double English) {
this.Name = Name;
this.Id = Id;
this.Age = Age;
this.Sex = Sex;
this.Password = Password;
this.Address = Address;
this.Phone = Phone;
this.Chinese = Chinese;
this.Math = Math;
this.English = English;
}
/**
* 获取
* @return Name
*/
public String getName() {
return Name;
}
/**
* 设置
* @param Name
*/
public void setName(String Name) {
this.Name = Name;
}
/**
* 获取
* @return Id
*/
public String getId() {
return Id;
}
/**
* 设置
* @param Id
*/
public void setId(String Id) {
this.Id = Id;
}
/**
* 获取
* @return Age
*/
public int getAge() {
return Age;
}
/**
* 设置
* @param Age
*/
public void setAge(int Age) {
this.Age = Age;
}
/**
* 获取
* @return Sex
*/
public String getSex() {
return Sex;
}
/**
* 设置
* @param Sex
*/
public void setSex(String Sex) {
this.Sex = Sex;
}
/**
* 获取
* @return Password
*/
public String getPassword() {
return Password;
}
/**
* 设置
* @param Password
*/
public void setPassword(String Password) {
this.Password = Password;
}
/**
* 获取
* @return Address
*/
public String getAddress() {
return Address;
}
/**
* 设置
* @param Address
*/
public void setAddress(String Address) {
this.Address = Address;
}
/**
* 获取
* @return Phone
*/
public String getPhone() {
return Phone;
}
/**
* 设置
* @param Phone
*/
public void setPhone(String Phone) {
this.Phone = Phone;
}
/**
* 获取
* @return Chinese
*/
public double getChinese() {
return Chinese;
}
/**
* 设置
* @param Chinese
*/
public void setChinese(double Chinese) {
this.Chinese = Chinese;
}
/**
* 获取
* @return Math
*/
public double getMath() {
return Math;
}
/**
* 设置
* @param Math
*/
public void setMath(double Math) {
this.Math = Math;
}
/**
* 获取
* @return English
*/
public double getEnglish() {
return English;
}
/**
* 设置
* @param English
*/
public void setEnglish(double English) {
this.English = English;
}
/**
* 获取
* @return Score
*/
public double getScore() {
this.Score = (this.Math+this.English+this.Chinese) / 3;
return this.Score;
}
public String toString() {
return "Student{Name = " + Name + ", Id = " + Id + ", Age = " + Age + ", Sex = " + Sex + ", Password = " + Password + ", Address = " + Address + ", Phone = " + Phone + ", Chinese = " + Chinese + ", Math = " + Math + ", English = " + English + ", Score = " + Score + "}";
}
public void viewPerson(){
System.out.println("姓名:"+getName());
System.out.println("年龄:"+getAge());
System.out.println("学号:"+getId());
System.out.println("性别:"+getSex());
System.out.println("密码:"+getPassword());
System.out.println("住址:"+getAddress());
System.out.println("电话:"+getPhone());
}
public void viewAchieve(){
System.out.println("语文成绩:"+getChinese());
System.out.println("数学成绩:"+getMath());
System.out.println("英语成绩:"+getEnglish());
System.out.println("总分:"+getScore());
}
}
3.2、创建教师类
Teach
package com.demo.studentsystem;
public class Teach {
private String name;
private String Id;
private int Age;
private String Sex;
private String Password;
private String Phone;
public Teach() {
}
public Teach(String name, String Id, int Age, String Sex, String Password, String Phone) {
this.name = name;
this.Id = Id;
this.Age = Age;
this.Sex = Sex;
this.Password = Password;
this.Phone = Phone;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return Id
*/
public String getId() {
return Id;
}
/**
* 设置
* @param Id
*/
public void setId(String Id) {
this.Id = Id;
}
/**
* 获取
* @return Age
*/
public int getAge() {
return Age;
}
/**
* 设置
* @param Age
*/
public void setAge(int Age) {
this.Age = Age;
}
/**
* 获取
* @return Sex
*/
public String getSex() {
return Sex;
}
/**
* 设置
* @param Sex
*/
public void setSex(String Sex) {
this.Sex = Sex;
}
/**
* 获取
* @return Password
*/
public String getPassword() {
return Password;
}
/**
* 设置
* @param Password
*/
public void setPassword(String Password) {
this.Password = Password;
}
/**
* 获取
* @return Phone
*/
public String getPhone() {
return Phone;
}
/**
* 设置
* @param Phone
*/
public void setPhone(String Phone) {
this.Phone = Phone;
}
public String toString() {
return "Teach{name = " + name + ", Id = " + Id + ", Age = " + Age + ", Sex = " + Sex + ", Password = " + Password + ", Phone = " + Phone + "}";
}
}
4、功能实现
分析
- 首先我们需要先搭建起来登录界面,登录界面应该包含登录、注册功能
- 登录注册需要填写身份,判断是学生还是教师,再选择进入对应的界面
创建main函数
接下来的实现都是在主函数里面创建了,自行创建main函数
public class SystemDemo {
public static void main(String[] args) {
}
}
4.1、编写主界面
/**
* 主界面搭建
*/
while (true) {
System.out.println("_________________________________");
System.out.println(" 欢迎使用学生管理系统 ");
System.out.println(" 1、登录系统 ");
System.out.println(" 2、注册账号" );
System.out.println(" 3、退出系统" );
System.out.println("_________________________________");
//从键盘接受数据
System.out.println("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int Number = scanner.nextInt();
if (Number == 1){
//调用登录界面
LoginSystem();
} else if (Number == 2){
//调用注册界面
RegisterSystem();
} else if (Number == 3){
System.out.println("感谢您的使用系统");
//调出循环
break;
} else {
System.out.println("输入错误,请选择序号里面的数字");
}
}
4.2、编写登录界面
分析
- 登录界面需要验证身份,选择让进入学生端还是教师端
//登录界面
public static void LoginSystem() {
System.out.println("欢迎进入登录界面");
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("请输入您的身份(教师或者学生,输入0则返回上一级):");
String identity = scanner.next();
if ("教师".equals(identity)){
System.out.println("请输入您的工号:");
String id = scanner.next();
System.out.println("请输入您的密码");
String password = scanner.next();
//调用判断是否存在
boolean result = JudgmentExistTeach(id, password);
if (result){
System.out.println("登录成功");
//跳转到教师端
TeachTerminal(id);
} else {
System.out.println("登录失败,请检查你的工号和密码是否有问题");
}
} else if ("学生".equals(identity)){
System.out.println("请输入您的学号:");
String id = scanner.next();
System.out.println("请输入您的密码");
String password = scanner.next();
//调用判断是否存在
boolean result = JudgmentExistStudent(id, password);
if (result){
System.out.println("登录成功");
//跳转到学生
StudentTerminal(id);
} else {
System.out.println("登录失败,请检查你的工号和密码是否有问题");
}
} else {
if (identity.equals("0")){
break;
}
System.out.println("您的输入有问题");
}
}
}
创建方法判断教师是否存在
通过传进来的id和password和集合进行判断,id存在,password正确说明登录成功
public static boolean JudgmentExist(String id,String password){
//如果列表里面没有东西,那就不需要判断,直接返回不存在
if (ArrayTeach.size() == 0){
System.out.println("用户不存在,请注册");
return false;
}
//循环判断用户是否存在
for (int i = 0; i < ArrayTeach.size(); i++) {
if (ArrayTeach.get(i).getId().equals(id)){
if (ArrayTeach.get(i).getPassword().equals(password)){
return true;
}
}
}
return false;
}
- 创建方法判断学生是否存在
//判断学生用户是否存在
public static boolean JudgmentExistStudent(String id,String password){
//如果列表里面没有东西,那就不需要判断,直接返回不存在
if (ArrayStudent.size() == 0){
System.out.println("用户不存在,请注册");
return false;
}
//循环判断用户是否存在
for (int i = 0; i < ArrayStudent.size(); i++) {
if (ArrayStudent.get(i).getId().equals(id)){
if (ArrayStudent.get(i).getPassword().equals(password)){
return true;
}
}
}
return false;
}
4.3、编写教师端功能
- 教师端是比较复杂的,需要实现功能有:增删改查和查看学生修改申请
4.3.1、教师端主界面编写
public static void TeachTerminal(String id){
System.out.println("你好老师,欢迎来到教师端管理系统");
Scanner scanner = new Scanner(System.in);
while (true){
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("6、查询所有学生");
System.out.println("7、退出管理系统");
int Number = scanner.nextInt();
if (Number == 1){
System.out.println("请输入学生学号");
String checkId = scanner.next();
StudentId(checkId);
} else if (Number == 2){
boolean result = AddStudent();
if (result){
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
} else if (Number == 3){
System.out.println("请输入学生学号");
String updateId = scanner.next();
//调用更新方法
boolean result = UpdateStudent(updateId);
if (result){
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
} else if (Number == 4){
System.out.println("请输入要删除的学生学号");
String delId = scanner.next();
//调用删除方法
boolean result = delStudent(delId);
if (result){
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
} else if (Number == 5){
//调用查询方法
selectStudent();
} else if (Number == 6){
//调用查看信息方法
selectInformation();
} else if (Number == 7){
System.out.println("感谢使用,再见");
System.exit(0);
} else {
System.out.println("输入错误请选择存在的序号");
}
}
}
4.3.2、查询单个学生信息功能实现
通过id遍历数组实现
public static void StudentId(String id){
for (int i = 0; i < ArrayStudent.size(); i++) {
//如果id存在输出
if (id.equals(ArrayStudent.get(i).getId())){
System.out.println(ArrayStudent.get(i).toString());
}
}
}
4.3.3、添加学生功能实现
//添加学生
public static boolean AddStudent(){
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("请输入学生学号");
String id = scanner.next();
//调用查询id方法,查看id是否存在
boolean flag = JudgmentId(id);
if (flag) {
System.out.println("请输入学生姓名");
String name = scanner.next();
System.out.println("请输入学生年龄");
int age = scanner.nextInt();
System.out.println("请输入学生性别");
String sex = scanner.next();
System.out.println("请输入学生密码");
String password = scanner.next();
System.out.println("请输入学生住址");
String address = scanner.next();
System.out.println("请输入学生电话");
String phone = scanner.next();
System.out.println("请输入学生语文成绩");
double chinese = scanner.nextDouble();
System.out.println("请输入学生数学成绩");
double math = scanner.nextDouble();
System.out.println("请输入学生英语成绩");
double english = scanner.nextDouble();
Student student = new Student();
student.setId(id);
student.setName(name);
student.setSex(sex);
student.setPassword(password);
student.setAddress(address);
student.setPhone(phone);
student.setChinese(chinese);
student.setMath(math);
student.setEnglish(english);
//添加进集合
ArrayStudent.add(student);
//跳出循环
return true;
} else {
System.out.println("用户已经存在");
return false;
}
}
}
4.3.4、查询id是否存在
该方法用于判断集合里面是否有这个学生了,在增删改查都用的到
public static boolean JudgmentId(String id){
for (int i = 0; i < ArrayStudent.size(); i++) {
if (ArrayStudent.get(i).getId().equals(id)){
return false;
}
}
return true;
}
4.3.5、修改学生信息
通过id去确认学生信息进行修改
//修改学生信息
public static boolean UpdateStudent(String id){
Scanner scanner = new Scanner(System.in);
boolean flag = JudgmentId(id);
if (!flag){
//查询下标记位置
int i = checkIndex(id);
if (i>-1){
System.out.println("请输入学生姓名");
ArrayStudent.get(i).setName(scanner.next());
System.out.println("请输入学生年龄");
ArrayStudent.get(i).setAge(scanner.nextInt());
System.out.println("请输入学生性别");
ArrayStudent.get(i).setSex(scanner.next());
System.out.println("请输入学生密码");
String password = scanner.next();
ArrayStudent.get(i).setPassword(scanner.next());
System.out.println("请输入学生住址");
ArrayStudent.get(i).setAddress(scanner.next());
System.out.println("请输入学生电话");
ArrayStudent.get(i).setPhone(scanner.next());
System.out.println("请输入学生语文成绩");
ArrayStudent.get(i).setChinese(scanner.nextDouble());
System.out.println("请输入学生数学成绩");
ArrayStudent.get(i).setMath(scanner.nextDouble());
System.out.println("请输入学生英语成绩");
ArrayStudent.get(i).setEnglish(scanner.nextDouble());
}
return true;
} else {
System.out.println("不存在此学生");
return false;
}
}
4.3.6、查询学生所在下标位置
该方法可以精准确认学生存放顺序位置,在修改和删除方法会使用到
//查询学生所在下标位置
public static int checkIndex(String id){
for (int i = 0; i < ArrayStudent.size(); i++) {
if (ArrayStudent.get(i).getId().equals(id)){
return i;
}
}
return -1;
}
4.3.7、删除学生信息
通过上述方法,确认下标之后用remove方法删除
//删除学生信息
public static boolean delStudent(String id){
boolean flag = JudgmentId(id);
//存在返回flag
if (!flag){
int i = checkIndex(id);
ArrayStudent.remove(i);
return true;
} else {
System.out.println("学生不存在");
return false;
}
}
4.3.8、查询所有学生信息
//查询所有学生
public static void selectStudent(){
for (int i = 0; i < ArrayStudent.size(); i++) {
System.out.println(ArrayStudent.get(i).toString());
}
}
4.3.9、查询学生申请信息
//查询学生申请信息
public static void selectInformation(){
for (int i = 0; i < ArrayInformation.size(); i++) {
System.out.println(ArrayInformation);
}
}
4.4、编写学生端功能
分析
- 学生端的功能有:查看个人信息、查看成绩、提交修改申请,这些功能比较简单,都是一些循环遍历
4.4.1、学生端主界面编写
//学生端
public static void StudentTerminal(String id){
System.out.println("你好同学,欢迎使用学生管理系统");
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("请输入您的选项:");
System.out.println("1、查看个人信息");
System.out.println("2、查看学业成绩");
System.out.println("3、提交修改信息");
System.out.println("4、退出管理系统");
int index = scanner.nextInt();
if (index == 1){
viwePersonalInformation(id);
} else if (index == 2){
viweAchieveInformation(id);
} else if (index == 3){
submitUpdate();
System.out.println("提交成功,等待老师审核");
} else if (index == 4){
System.out.println("感谢使用,再见");
System.out.println("请选择登录或退出");
break;
} else {
System.out.println("输入错误请选择存在的序号");
}
}
}
4.4.2、查看个人信息功能实现
//查看个人信息方法
public static void viwePersonalInformation(String id){
//查看学生所处下标
int i = checkIndex(id);
if (i > -1){
ArrayStudent.get(i).viewPerson();
}
}
4.4.3、查看成绩信息功能实现
//查看成绩
public static void viweAchieveInformation(String id){
int i = checkIndex(id);
if (i > -1){
ArrayStudent.get(i).viewAchieve();
}
}
4.4.4、提交申请功能实现
//学生提交申请
public static void submitUpdate(){
Scanner scanner = new Scanner(System.in);
System.out.println("请描述你要更改的信息,例如:原姓名:小林修改为小陈");
String inform = scanner.next();
ArrayInformation.add(inform);
}
5、总结
有一段时间没写这种控制台版本的了,花了将近两个小时的时间,基本功能已经实现了,相信大家第一个项目基本上都是学生管理系统,不知道这样子写有没有写明白了,没啥文化不太会写,项目里面其实还有很多可以修改的部分,比如一些方法可以用重载,如果是新手可以再以后学习到IO,再用IO来存储账号信息,后面学到mysql,再用mysql,这样子慢慢进步上去。
写这个项目主要是锻炼自己对Java编程语言有了更深入的了解和运用,对软件开发的整个生命周期有了更清晰的认识。
如果需要源码和笔记可以私信我或添加公棕号:小林学编程,回复学生管理系统