java学生管理系统_java实现学生管理系统

学生管理系统实现与源码解析
这篇博客详细介绍了如何实现一个简单的Java学生管理系统,包括添加、删除、修改和查看学生信息的功能。通过主函数`student_main.java`,使用ArrayList存储`student`类对象,并通过Scanner获取用户输入。关键函数如`isUsed`用于检查学号是否已存在,避免重复添加。文章还提到了IntelliJ IDEA的快捷键技巧,如自动生成构造函数、set和get方法,提高编码效率。

简介

这篇博客参考

学生管理系统要实现的功能

整段源码

student_main.java主函数

package student_lei;

import java.util.Scanner;

import java.util.ArrayList;

public class student_main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

//定义一个集合,装入student类 ArrayList arr = new ArrayList<>();

//定义初使页面,并使用死循环,退出使用system.exit(0) 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("输入你的选择:");

int n = sc.nextInt();

switch (n) {

//按照输入的数字调用对应的函数 case 1 -> addStudent(arr);

case 2 -> deleteStudent(arr);

case 3 -> updateStudent(arr);

case 4 -> showStudent(arr);

case 5 -> System.exit(0);

}

}

}

//添加学生函数 public static void addStudent(ArrayList arr) {

Scanner sc = new Scanner(System.in);

//定义在外面,使后面的print能够调用 String sid;

//用死循环配合isUsed函数判断是否输入相同学号 while (true) {

System.out.println("学号");

sid = sc.nextLine();

if (isUsed(arr, sid)) {

System.out.println("学号输入重复,请重新输入");

} else break;

}

System.out.println("姓名");

String name = sc.nextLine();

System.out.println("年龄");

String age = sc.nextLine();

System.out.println("居住地");

String address = sc.nextLine();

//装进student类中 student s = new student();

s.setSid(sid);

s.setName(name);

s.setAge(age);

s.setAddress(address);

//把类装到集合中 arr.add(s);

System.out.println("添加学生成功!");

}

//删除学生函数 public static void deleteStudent(ArrayList arr) {

Scanner sc = new Scanner(System.in);

System.out.println("请输入要删除学生的学号:");

String sid = sc.nextLine();

//用boolean来判断是否删除成功,Java中不能把0当作false boolean index = true;

for (int j = 0; j < arr.size(); j++) {

student s = arr.get(j);

//遍历加if,删除对应的学生 if (s.getSid().equals(sid)) {

arr.remove(j);

index = false;

System.out.println("删除成功!");

break;

}

}

if (index) {

System.out.println("学号输入错误");

}

}

//修改学生函数 public static void updateStudent(ArrayList arr) {

Scanner sc = new Scanner(System.in);

System.out.println("请输入要修改的学生学号");

String n = sc.nextLine();

int temp = 0;

for (int j = 0; j < arr.size(); j++) {

if (arr.get(j).getSid().equals(n)) {

temp = j;

break;

}

}

//修改学生功能菜单 System.out.println("-----------");

System.out.println("1.修改学号");

System.out.println("2.修改姓名");

System.out.println("3.修改年龄");

System.out.println("4.修改居住地");

System.out.println("请输入你的选择");

int s = sc.nextInt();

switch (s) {

case 1 -> {

System.out.println("输入新的学号");

//与which连用时,删除缓存 sc.nextLine();

String newSid = sc.nextLine();

arr.get(temp).setSid(newSid);

System.out.println("修改成功");

}

case 2 -> {

System.out.println("输入新姓名");

sc.nextLine();

String newName = sc.nextLine();

arr.get(temp).setName(newName);

System.out.println("修改成功");

}

case 3 -> {

System.out.println("输入新年龄");

sc.nextLine();

String newAge = sc.nextLine();

arr.get(temp).setAge(newAge);

System.out.println("修改成功");

}

case 4 -> {

System.out.println("输入新居住地");

sc.nextLine();

String newAddress = sc.nextLine();

arr.get(temp).setAddress(newAddress);

System.out.println("修改成功");

}

}

}

//展示学生函数 public static void showStudent(ArrayList arr) {

//判断是否有数据存入其中 if (arr.size() == 0) {

System.out.println("无数据,请先输入数据");

return;

}

//使用制表符制作表格,更好的展示 System.out.println("学号" + "\t" + "姓名" + "\t" + "年龄" + "\t" + "地址");

//可以使用增强for循环,针对只对数组,集合中对象单一遍历操作的函数 for (student s : arr) {

System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "\t"+ s.getAddress());

}

}

//判断是否有相同学号的函数,传入集合和输入的新学号,在studentAdd函数中使用,返回值根据情况有所不同 public static boolean isUsed(ArrayList arr, String sid) {

boolean n = false;

for (student s : arr) {

if (s.getSid().equals(sid)) {

n = true;

break;

}

}

return n;

}

}

student.java类

package student_lei;

public class student {

//学号 private String sid;

//姓名 private String name;

//年龄 private String age;

//居住地 private String address;

public student() {}

//使用command + n 自动生成构造函数,配合shift,还能生成get,set函数 public student(String sid, String name, String age, String address) {

this.sid = sid;

this.name = name;

this.age = age;

this.address = address;

}

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 getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

}

如何利用IntelliJ自动生成构造函数,set(),get()函数

相信大家都很厌倦写构造函数和get,set函数了,如果你使用的是intellij,那么可以用一个快捷键来快速解决哦,用完之后我直接感动,以后再也不用像个 一样自己写了

Mac快捷键command + n

Mac我会配合自己的截图,如果使用Windows,我查到快捷键的是alt + insert,用windows的小伙伴如果不清楚的话,可以搜索一下哦

先创建一个Java类,然后随便定义几个变量,按下command + n 后,会有这个界面

选你想选的,这里我选Getter + Setter,然后会有这个界面

一般来说,你只能点一个,但是如果按下shift的同时点击,就能达到我这样的多选效果

最后成果图

省时又省力,芜湖

学生管理系统初始化界面书写

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("输入你的选择:");

int n = sc.nextInt();

switch (n) {

//按照输入的数字调用对应的函数 case 1 -> addStudent(arr);

case 2 -> deleteStudent(arr);

case 3 -> updateStudent(arr);

case 4 -> showStudent(arr);

case 5 -> System.exit(0);

}

}

前面一大段输出函数,用来输出一开始的选择界面

这没说明好说的,到后面的switch(

添加学生函数

isUsed函数

使用这个函数,是为了完成添加学生类的附加功能,判断学号是否重合

public static boolean isUsed(ArrayList arr, String sid) {

boolean n = false;

for (student s : arr) {

if (s.getSid().equals(sid)) {

n = true;

break;

}

}

return n;

}

}

要用一个函数来判断,可以使用boolean来定义,代码中的for循环为

添加学生

public static void addStudent(ArrayList arr) {

Scanner sc = new Scanner(System.in);

//定义在外面,使后面的print能够调用 String sid;

//用死循环配合isUsed函数判断是否输入相同学号 while (true) {

System.out.println("学号");

sid = sc.nextLine();

if (isUsed(arr, sid)) {

System.out.println("学号输入重复,请重新输入");

} else break;

}

System.out.println("姓名");

String name = sc.nextLine();

System.out.println("年龄");

String age = sc.nextLine();

System.out.println("居住地");

String address = sc.nextLine();

//装进student类中 student s = new student();

s.setSid(sid);

s.setName(name);

s.setAge(age);

s.setAddress(address);

//把类装到集合中 arr.add(s);

System.out.println("添加学生成功!");

}

重点在为什么把String sid放到while循环定义外,而不是直接使用

String sid = sc.nextLine()

因为定义在while循环内的变量循环外是无法访问到的,这也是我们容易忽视的一点

删除学生函数

public static void deleteStudent(ArrayList arr) {

Scanner sc = new Scanner(System.in);

System.out.println("请输入要删除学生的学号:");

String sid = sc.nextLine();

//用boolean来判断是否删除成功,Java中不能把0当作false boolean index = true;

for (int j = 0; j < arr.size(); j++) {

student s = arr.get(j);

//遍历加if,删除对应的学生 if (s.getSid().equals(sid)) {

arr.remove(j);

index = false;

System.out.println("删除成功!");

break;

}

}

if (index) {

System.out.println("学号输入错误");

}

}

这个函数中,比较重要的是对于index的使用,我是第一次碰到,删除成功很好输出,跟在remove的后面就行了,但是输出失败(学号输入错误)的提示该放在哪呢,如果直接放在for循环外,那么输出成功后也会提示输出失败,所以,需要把加一个判断条件index,如果输出成功,就把index赋值为false,这样就不会在输出成功后也提示输出失败了

修改学生函数

public static void updateStudent(ArrayList arr) {

Scanner sc = new Scanner(System.in);

System.out.println("请输入要修改的学生学号");

String n = sc.nextLine();

int temp = 0;

for (int j = 0; j < arr.size(); j++) {

if (arr.get(j).getSid().equals(n)) {

temp = j;

break;

}

}

//修改学生功能菜单 System.out.println("-----------");

System.out.println("1.修改学号");

System.out.println("2.修改姓名");

System.out.println("3.修改年龄");

System.out.println("4.修改居住地");

System.out.println("请输入你的选择");

int s = sc.nextInt();

switch (s) {

case 1 -> {

System.out.println("输入新的学号");

//与which连用时,删除缓存 sc.nextLine();

String newSid = sc.nextLine();

arr.get(temp).setSid(newSid);

System.out.println("修改成功");

}

case 2 -> {

System.out.println("输入新姓名");

sc.nextLine();

String newName = sc.nextLine();

arr.get(temp).setName(newName);

System.out.println("修改成功");

}

case 3 -> {

System.out.println("输入新年龄");

sc.nextLine();

String newAge = sc.nextLine();

arr.get(temp).setAge(newAge);

System.out.println("修改成功");

}

case 4 -> {

System.out.println("输入新居住地");

sc.nextLine();

String newAddress = sc.nextLine();

arr.get(temp).setAddress(newAddress);

System.out.println("修改成功");

}

}

}

看起来有一大段代码,但是重要的只有一行代码,就是

sc.nextLine();

在switch中用nextLine(),需要先用上面的代码,否则在运行的时候会直接当你输入的值为空,具体为什么我没查到,但我猜跟

展示学生函数

public static void showStudent(ArrayList arr) {

//判断是否有数据存入其中 if (arr.size() == 0) {

System.out.println("无数据,请先输入数据");

return;

}

//使用制表符制作表格,更好的展示 System.out.println("学号" + "\t" + "姓名" + "\t" + "年龄" + "\t" + "地址");

//可以使用增强for循环,针对只对数组,集合中对象单一遍历操作的函数 for (student s : arr) {

System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "\t"+ s.getAddress());

}

}

比较重要的就是制表符的使用,在学C语言时就把\t叫制表符,这次使用\t按表格输出数据,会有更好的展示效果

后记

到此,需要注意的点都讲完了,这个管理系统虽然简单,但是在写它的过程中,我还是发现了许多我之前不知道的知识,算是有所收获吧,我也会经常拿这篇文章看看,复习一下,如果太长时间不敲,也会忘记,我一般复习的时候,会同时打开intellij和sublime,先用sublime敲一下代码中比较重要的部分,在对照intellij看看写错没有,只需要敲比较重要,容易出错的地方就行,希望大家也能多多复习哦

1、把6个java文件保存到同一文件夹,例如C:\Student.然后将6个java文件分别编译生成相应的字节码(.class)文件,然后,用java 解释器运行主类:C:\Student\java StudentManager 2、使用jar.exe把一些文件压缩成JAR文件,来发布我们的应用程序。我们可以把本java应用程序中涉及到的类文件(*.class)压缩成一个JAR文件,例如StudentManager.jar。 首先,用记事本编写一个清单文件(Manifestfiles): Manifest-Version: 1.0 Main-class: StudentManager Created-By: 1.2.2(Sun Microsystems Inc.) 例如,清单文件命名为moon.mf,保存到C:\Student。 注意:在编写清单文件时,在“Manifest-Version:”和“1.0”之间,“Main-class:”和“StudentManager”之间,以及在“Created-By:”和“1.2.2(Sun Microsystems Inc.)”之间必须有且只有一个空格。 然后,如下生成JAR文件: C:\Student\jar cvfm StudentManager.jar moon.mf *.class 其中,参数C表示要生成一个新的JAR文件;f表示要生成的JAR文件的名字,m表示文件清单文件的名字,v表示生成详细输出到标准输出上。具体运行jar命令请查看 现在就可以将StudentManager.jar拷贝到任何一个安装了java运行环境(jdk版本号须高于1.2.2)的计算机上,只要鼠标双击StudentManager.jar文件就可以运行该java应用程序了。 注意在装了WinRAR解压缩软件的机子上可能不能运行,因此,在发布本系统时,还应该建立一个有如下内容的.bat文件(StudentManager.bat),用记事本编写: javaw -jar StudentManager.jar 保存即可。
package cn.com.dao.chivementdao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import cn.com.util.DBConnection; import cn.com.util.DBSql; import cn.com.vo.chivementvo.ChivementVo; public class ExamDao { private Connection conn = DBConnection.getConnectionOracle(); private ChivementVo examVo; public ExamDao() { } public ExamDao(ChivementVo examVo) { super(); this.examVo = examVo; } /** * 全部查询 */ public Object[][] selectAll() { Object date[][] = null; int max = 0; int i = 0; PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(DBSql.SELECT_ALL); rs = ps.executeQuery(); // 得到列数 max = rs.getMetaData().getColumnCount(); date = new Object[getnumberAll(DBSql.SELECT_ALL_COUNT)][max]; while (rs.next()) { for (int j = 0; j < max; j++) { date[i][j] = rs.getObject(j + 1); } i++; } // rs.close(); // ps.close(); // conn.close(); } catch (SQLException e) { e.printStackTrace(); } return date; } /** * 根据学号查询 */ public Object[][] selectBySid() { Object date[][] = null; int max = 0; int i = 0; PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(DBSql.SELECT_BY_S_ID); ps.setInt(1, examVo.getS_id()); rs = ps.executeQuery(); // 得到列数 max = rs.getMetaData().getColumnCount(); date = new Object[getnumber(DBSql.SELECT_BY_S_ID_COUNT, examVo .getS_id())][max]; while (rs.next()) { for (int j = 0; j < max; j++) { date[i][j] = rs.getObject(j + 1); } i++; } // rs.close(); // ps.close(); // conn.close(); } catch (SQLException e) { e.printStackTrace(); } return date; } /** * 根据组号查询 */ public Object[][] selectByGid() { Object date[][] = null; int max = 0; int i = 0; PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(DBSql.SELECT_BY_G_ID); ps.setInt(1, examVo.getG_id()); rs = ps.executeQuery(); // 得到列数 max = rs.getMetaData().getColumnCount(); date = new Object[getnumber(DBSql.SELECT_BY_G_ID_COUNT, examVo .getG_id())][max]; while (rs.next()) { for (int j = 0; j < max; j++) { date[i][j] = rs.getObject(j + 1); } i++; } // rs.close(); // ps.close(); // conn.close(); } catch (SQLException e) { e.printStackTrace(); } return date; } /** * 根据课程号查询 */ public Object[][] selectByCid() { Object date[][] = null; int max = 0; int i = 0; PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(DBSql.SELECT_BY_C_ID); ps.setInt(1, examVo.getC_id()); rs = ps.executeQuery(); // 得到列数 max = rs.getMetaData().getColumnCount(); date = new Object[getnumber(DBSql.SELECT_BY_C_ID_COUNT, examVo .getC_id())][max]; while (rs.next()) { for (int j = 0; j < max; j++) { // System.out.println( examVo.getG_id()); date[i][j] = rs.getObject(j+1); } i++; } // rs.close(); // ps.close(); // conn.close(); } catch (SQLException e) { e.printStackTrace(); } return date; } /** * 根据姓名模糊查询 * * @return */ public Object[][] selectByName() { Object date[][] = null; int max = 0; int i = 0; PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(DBSql.SELECT_BY_S_NAME); ps.setString(1, examVo.getS_name()); ps.setString(2, "%" + examVo.getS_name() + "%"); ps.setString(3, "%" + examVo.getS_name()); ps.setString(4, examVo.getS_name() + "%"); rs = ps.executeQuery(); // 得到列数 max = rs.getMetaData().getColumnCount(); date = new Object[getnumberByName(DBSql.SELECT_BY_S_NAME_COUNT, examVo.getS_name())][max]; while (rs.next()) { for (int j = 0; j < max; j++) { date[i][j] = rs.getObject(j + 1); } i++; } } catch (SQLException e) { e.printStackTrace(); } return date; } /** * 根据课程名称模糊查询 * * @return */ public Object[][] selectByClassName() { Object date[][] = null; int max = 0; int i = 0; PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(DBSql.SELECT_BY_CLASS_NAME); ps.setString(1, examVo.getClass_name()); ps.setString(2, "%" + examVo.getClass_name() + "%"); ps.setString(3, "%" + examVo.getClass_name()); ps.setString(4, examVo.getClass_name() + "%"); rs = ps.executeQuery(); // 得到列数 max = rs.getMetaData().getColumnCount(); date = new Object[getnumberByName(DBSql.SELECT_BY_CLASS_COUNT, examVo.getClass_name())][max]; while (rs.next()) { for (int j = 0; j < max; j++) { date[i][j] = rs.getObject(j + 1); } i++; } } catch (SQLException e) { e.printStackTrace(); } return date; } /** * 修改选中学生的成绩 * */ public void updatSelectClass() { PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(DBSql.UPDATE_EXAM_BY_STUID); ps.setInt(1, examVo.getClassExamChivement()); ps.setInt(2, examVo.getS_id()); ps.setInt(3, examVo.getC_id()); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } /** * 得到所有课程号和课程名 * * @return */ public String[] getClassNoName() { String[] classNoName = null; PreparedStatement ps = null; ResultSet rs = null; int j = 0; try { int i = getnumberAll(DBSql.SELECT_CLASS_NAME_COUNT); classNoName = new String[i + i]; ps = conn.prepareStatement(DBSql.SELECT_CLASS_NAME); rs = ps.executeQuery(); while (rs.next()) { classNoName[j] = rs.getString(1); classNoName[j + i] = rs.getString(2); j++; } } catch (SQLException e) { e.printStackTrace(); } return classNoName; } /** * 根据科目修改成绩 查询学号 姓名 成绩 * */ public void SelectClassStuName() { int i = 0; PreparedStatement ps = null; ResultSet rs = null; int j = getnumberBySelectClassName( DBSql.SELECT_CLASS_STU_SNO_SNAME_EXAM_COUNT, examVo.getC_id()); int[] sNum = new int[j]; String[] sName = new String[j]; int[] classExam = new int[j]; try { ps = conn.prepareStatement(DBSql.SELECT_CLASS_STU_SNO_SNAME_EXAM); ps.setInt(1, examVo.getC_id()); rs = ps.executeQuery(); while (rs.next()) { sNum[i] = rs.getInt(1); sName[i] = rs.getString(2); classExam[i] = rs.getInt(3); i++; } } catch (SQLException e) { e.printStackTrace(); } examVo.setSid(sNum); examVo.setSname(sName); examVo.setClassExam(classExam); } /** * 根据科目修改成绩 查询学号 姓名 成绩 后修改成绩 * */ public void UpdateClassStuName() { // int i = 0; PreparedStatement ps = null; ResultSet rs = null; int j = getnumberBySelectClassName( DBSql.SELECT_CLASS_STU_SNO_SNAME_EXAM_COUNT, examVo.getC_id()); try { ps = conn.prepareStatement(DBSql.UPDATE_CHIVEMENT_BY_CLASS); for(int i =0;i<j;i++){ ps.setInt(1, examVo.getClassExam()[i]); ps.setInt(2, examVo.getSid()[i]); ps.setInt(3, examVo.getC_id()); ps.executeUpdate(); } } catch (SQLException e) { e.printStackTrace(); } } /** * 全部查询获得行数 * * @return */ public int getnumberAll(String str) { int number = 0; PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(str); rs = ps.executeQuery(); rs.next(); number = rs.getInt(1); // rs.close(); // ps.close(); // conn.close(); } catch (SQLException e) { e.printStackTrace(); } return number; } /** * 根据学号 根据组号 根据课程号查询 获得行数 * * @return */ public int getnumber(String str, int i) { int number = 0; PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(str); ps.setInt(1, i); rs = ps.executeQuery(); rs.next(); number = rs.getInt(1); // rs.close(); // ps.close(); // conn.close(); } catch (SQLException e) { e.printStackTrace(); } return number; } /** * 根据姓名 课程名 查询 获得行数 * */ public int getnumberByName(String str, String i) { int number = 0; PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(str); ps.setString(1, i); ps.setString(2, "%" + i + "%"); ps.setString(3, "%" + i); ps.setString(4, i + "%"); rs = ps.executeQuery(); rs.next(); number = rs.getInt(1); } catch (SQLException e) { e.printStackTrace(); } return number; } // /** // * 根据课程名查询 获得行数 // * // */ // // public int getnumberByClassName(String str, String i) { // int number = 0; // PreparedStatement ps = null; // ResultSet rs = null; // try { // ps = conn.prepareStatement(str); // ps.setString(1, i); // ps.setString(2, "%" + i + "%"); // ps.setString(3, "%" + i); // ps.setString(4, i + "%"); // rs = ps.executeQuery(); // rs.next(); // number = rs.getInt(1); // } catch (SQLException e) { // e.printStackTrace(); // } // return number; // } /** * * 根据课程名修改成绩获得行数 * * @param str * @param i * @return */ public int getnumberBySelectClassName(String str, int i) { int number = 0; PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(str); ps.setInt(1, i); rs = ps.executeQuery(); rs.next(); number = rs.getInt(1); } catch (SQLException e) { e.printStackTrace(); } return number; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值