需要实现学生管理系统,需要进行登录操作,登录满足开发的完整性和 满足面向对象,所以我们队用户进行了封装
这是包的命名
实现用户登录,需要先创建User实体
User.java
package student.bean; /** *用户实体类 */ public class User { private String username; private String password; public User() { } public User(String username, String password) { this.username = username; this.password = password; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public String getPassword() { return password; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
登录的操作实现,因为没有用到数据库,所以我们直接写死!!!
LoginDao.java
package student.dao; import student.bean.Student; import student.bean.User; public class LoginDao { public boolean login(User user){ if ("admin".equals(user.getUsername())&& "123456".equals(user.getPassword())){ return true; } return false; } }
实现登录的操作后,我们对登录页面进行编写
LoginMenu.java
package student.ui; import student.bean.User; import student.dao.LoginDao; import student.dao.StudentDao; import java.util.Scanner; public class LoginMenu { /** * 用户登录界面 */ StudentMenu studentMenu = new StudentMenu(); User user = new User(); LoginDao loginDao = new LoginDao(); StudentDao studentDao = new StudentDao(); public void login() { Scanner sc = new Scanner(System.in); Scanner sc1 = new Scanner(System.in); System.out.println("学员管理系统"); System.out.println("------------------------"); while (true) { System.out.println("【用户登录】"); System.out.print("请输入用户名:"); user.setUsername(sc.nextLine()); System.out.print("请输入密 码:"); user.setPassword(sc.nextLine()); if (loginDao.login(user)) { // studentMenu.mainMenu(); break; } else { System.out.println("用户密码错误,请重新输入!!!"); continue; } } } }
登录界面写好后开始进入系统,对各项功能进行编写
既然知道了需要实现哪些功能,这就需要我们去创建一个实体类,学生类,那我们也应该创建一个学生实体,因此,我们去创建了一个学生实体;
Student.java
package student.bean; import student.util.Util; import java.util.Arrays; /** *学生实体类 */ public class Student { Util util=new Util(); private String id;//学号 private String name;//姓名 private double[] score;//成绩 private double avg;//平均成绩 private double sum=0.0;//总分 private int index; public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public void Student(){} public Student() { } public Student(String id, String name) { this.id = id; this.name = name; } public Student(String id, String name, double[] score) { this.id = id; this.name = name; setScore(score); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getAvg() { return avg; } public double getSum() { return sum; } public double[] getScore() { return score; } public void setScore(double[] score) { this.score = score; this.sum = this.score[0]+ this.score[1]+ this.score[2]; double temp=this.sum/this.score.length; this.avg=util.format("0.00",temp); } @Override public String toString() { return "Student{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", score=" + Arrays.toString(score) + ", avg=" + avg + ", sum=" + sum + '}'; } }
写完学生这个实体类后,我们接下来就是在Dao中写入各种方法,实现对实体的操作!!这里就不过多赘述了,直接上代码!!
StudentDao.java
package student.dao; import student.bean.Student; import student.ui.StudentMenu; import javax.swing.plaf.IconUIResource; import java.util.Objects; import java.util.Scanner; /** * 操作学生类 */ public class StudentDao { static int n=2; private static StudentMenu studentMenu=new StudentMenu(); private static Student[] student=new Student[50]; private static StudentDao studentDao=new StudentDao(); static { double scores[]={99,88,77}; double scores1[]={88,77,66}; Student s1=new Student("1001","jack",scores); Student s2=new Student("1002","peter",scores1); student[0]=s1; student[1]=s2; } /** * 显示所有学生信息 */ public void showStudent(){ System.out.println("所有学员信息:"); System.out.println("------------------------------------------------------------------------"); System.out.println("学号\t\t姓名\t成绩一\t成绩二\t" + "成绩三\t平均分\t总分"); for(int i=0;i<n;i++){ System.out.println(student[i].getId()+"\t\t"+student[i].getName() +"\t"+student[i].getScore()[0]+"\t"+student[i].getScore()[1] +"\t"+student[i].getScore()[2]+"\t"+ student[i].getAvg()+"\t"+student[i].getSum()); } } /** * 按总分位置,插入学生信息 */ public void insertSotrStudent(Scanner sc){ studentMenu.addStudent(sc); sortStudentSum(); } /** * 通过学号查找学生 * @param id 学号 * @return 返回查询出来的结果,是一个Student */ public Student selectStudentId(String id){ return getStuById(id); } /** * 通过学号模糊查询学生个人信息 * @param id 学生学号 * @return 查询出来的数据集 */ public Student[] selectStudentIds(String id){ return getStuByIds(id); } /** * 通过学号模糊查询学生个人信息 * @param name 学生学号 * @return 查询出来的数据集 */ public Student[] selectStudentNmaes(String name){ return getStuByNames(name); } /** * 通过平均值查询学生个人信息 * @param min 最小平均值 * @param max 最大平均值 * @return 查询出来的student数组 */ public Student[] selectStudentAvgs(double min ,double max){ return getStuByAvgs(min,max); } /** * 通过学号模糊查询学生个人信息 * @param name 学生学号 * @return 查询出来的数据集 */ private Student[] getStuByNames(String name) { int count=0; for (int i=0;i<n;i++){ if (student[i].getName().contains(name)){ count++; } } Student[] students=new Student[count]; int j=0; for (int i=0;i<n;i++){ if (student[i].getName().contains(name)){ students[j]=student[i]; j++; continue; } } return students; } /** * 通过平均值查询学生个人信息 * @param min 最小平均值 * @param max 最大平均值 * @return 查询出来的student数组 */ private Student[] getStuByAvgs(double min,double max) { int count=0; for (int i=0;i<n;i++){ if (student[i].getAvg()>=min &&student[i].getAvg()<=max){ count++; } } Student[] students=new Student[count]; int j=0; for (int i=0;i<n;i++){ if (student[i].getAvg()>=min &&student[i].getAvg()<=max){ students[j]=student[i]; j++; continue; } } return students; } /** * 增加学生信息 * @param stu 学生信息 * @param */ public int addStudent(Student stu){ student[n]=stu; return ++n; } /** * 按照sum总分从小到大排序 */ public void sortStudentSum(){ for (int i=0;i<n;i++){ for (int j=i;j<n-1;j++){ if (student[j].getSum()>student[j+1].getSum()){ Student stuTemp=new Student(); stuTemp=student[j]; student[j]=student[j+1]; student[j+1]=stuTemp; } } } showStudent(); } /** * 查看学生信息 * @param id 需要查询的学号 * @return 返回查询出来的结果 */ public Student getStuById(String id){ Student tempStudent=null; for (int i=0;i<n;i++){ if (student[i].getId().equals(id)){ tempStudent=student[i]; student[i].setIndex(i); break; } } return tempStudent; } /** * 查看学生信息 * @param id 需要查询的学号 * @return 返回查询出来的结果 */ public Student[] getStuByIds(String id){ int count=0; for (int i=0;i<n;i++){ if (student[i].getId().contains(id)){ count++; } } Student[] students=new Student[count]; int j=0; for (int i=0;i<n;i++){ if (student[i].getId().contains(id)){ students[j]=student[i]; j++; continue; } } return students; } /** * 删除学生信息 * @param id 要删除学生的学号 * @return 是否产出成功的boolean值 */ public boolean deleStudent(String id) { boolean flag = true; Student[] stuTemp = new Student[n - 1]; int count = 0; for (int i = 0; i < n; i++) { if (student[i].getId().equals(id)) { flag = false; break; } } if (flag) { return flag; } else { for (int i = 0; i < n; i++) { if (student[i].getId().equals(id)) { flag = false; continue; } else { stuTemp[count] = student[i]; count++; } } for (int i = 0; i < stuTemp.length; i++) { student[i] = stuTemp[i]; } student[n - 1] = null; n = n - 1; return flag; } } /** * 学生信息修改,修改学生姓名 * * @param id 学生学号 * @param value 学生成绩 */ public void updateStudent(String id,String value) { Student stu=getStuById(id); stu.setName(value); } /** * 学生信息修改,修改学生成绩 * @param id 学生学号 * @param scores 学生成绩 */ public void updateStudent(String id,double[] scores) { Student stu=getStuById(id); stu.setScore(scores); } }
学生实体的操作写完后,就开始写主页面的菜单信息!
StudentMenu.java
package student.ui; import student.bean.Student; import student.bean.User; import student.dao.LoginDao; import student.dao.StudentDao; import java.util.Scanner; public class StudentMenu { /** * 用户界面 */ User user = new User(); LoginDao loginDao = new LoginDao(); private static StudentDao studentDao = new StudentDao(); Scanner sc = new Scanner(System.in); Scanner sc1 = new Scanner(System.in); Scanner sc2 = new Scanner(System.in); public void mainMenu() { System.out.println("学员管理系统"); System.out.println("------------------------"); while (true) { System.out.println("学员管理系统平台"); System.out.println("--------------------------------------------------"); System.out.println("\t\t\t\t○功能菜单:"); System.out.println("\t\t\t\t\t-----------------------"); System.out.println("\t\t\t\t\t1、录入单个学员信息"); System.out.println("\t\t\t\t\t-----------------------"); System.out.println("\t\t\t\t\t2、显示所有学员信息"); System.out.println("\t\t\t\t\t-----------------------"); System.out.println("\t\t\t\t\t3、排序显示所有学员信息"); System.out.println("\t\t\t\t\t-----------------------"); System.out.println("\t\t\t\t\t4、插入单个学员信息"); System.out.println("\t\t\t\t\t-----------------------"); System.out.println("\t\t\t\t\t5、查找学员信息"); System.out.println("\t\t\t\t\t-----------------------"); System.out.println("\t\t\t\t\t6、删除单个学员信息"); System.out.println("\t\t\t\t\t-----------------------"); System.out.println("\t\t\t\t\t7、读取所有学员信息"); System.out.println("\t\t\t\t\t-----------------------"); System.out.println("\t\t\t\t\t8、保存所有学员信息"); System.out.println("\t\t\t\t\t-----------------------"); System.out.println("\t\t\t\t\t9、修改学生信息"); System.out.println("\t\t\t\t\t-----------------------"); System.out.println("\t\t\t\t\t0、退出系统"); System.out.print("请选择功能编号:"); int num = sc1.nextInt(); switch (num) { case 1: addCase(); System.out.println("按任意键进入菜单选择!!"); sc.nextLine(); continue; case 2: studentDao.showStudent(); System.out.println("按任意键进入菜单选择!!"); sc.nextLine(); continue; case 3: studentDao.sortStudentSum(); System.out.println("按任意键进入菜单选择!!"); sc.nextLine(); continue; case 4: studentDao.insertSotrStudent(sc); System.out.println("按任意键进入菜单选择!!"); sc.nextLine(); continue; case 5: select(); continue; case 6: deleStudent(); System.out.println("按任意键进入菜单选择!!"); sc.nextLine(); continue; case 7: break; case 8: break; case 9: updateStudent(sc); System.out.println("按任意键进入菜单选择!!"); sc.nextLine(); continue; case 0: break; default: System.out.println("输入错误,请重新输入!!"); continue; } break; } } /** * 修改学生信息 */ private void updateStudent(Scanner sc) { System.out.println("单个学员信息的修改"); while (true) { System.out.println("请输入学号:"); String id = sc.nextLine(); Student stutemp = studentDao.getStuById(id); if (stutemp == null) { System.out.println("学号未找到,是否继续修改?(y/n)"); String str = sc.nextLine(); if ("y".equals(str)) { continue; } else { break; } } else { System.out.println("学号\t\t姓名\t成绩一\t成绩二\t" + "成绩三\t平均分\t总分"); System.out.println(stutemp.getId() + "\t\t" + stutemp.getName() + "\t" + stutemp.getScore()[0] + "\t" + stutemp.getScore()[1] + "\t" + stutemp.getScore()[2] + "\t" + stutemp.getAvg() + "\t" + stutemp.getSum()); System.out.println("-----------------------"); System.out.println("1、修改姓名"); System.out.println("-----------------------"); System.out.println("2、修改成绩"); System.out.println("-----------------------"); System.out.println("0、退出"); System.out.println("请输入编号选择功能:"); int s = sc1.nextInt(); switch (s) { case 1: System.out.println("请输入你要修改的值:"); String valueName = sc.nextLine(); studentDao.updateStudent(id, valueName); System.out.println("修改成功!是否继续修改?(y/n)"); String str1 = sc.nextLine(); if ("y".equals(str1)) { continue; } else { break; } case 2: double[] scores = new double[3]; for (int i = 0; i < 3; i++) { System.out.println("请输入成绩" + (i +1)+ "修改后的值:"); scores[i] = sc2.nextDouble(); } studentDao.updateStudent(id, scores); System.out.println("修改成功!是否继续修改?(y/n)"); String str2 = sc.nextLine(); if ("y".equals(str2)) { continue; } else { break; } case 0: break; } break; } } } /** * 单个学员信息录入 * * @param sc 扫描器 * @param * @return */ public void addStudent(Scanner sc) { System.out.println("单个学员信息的循环录入"); boolean flag = false; String id; do { flag = false; System.out.println("学号:"); id = sc.nextLine(); Student tempStu = studentDao.getStuById(id); // Student tempStu=null; if (tempStu != null) { System.out.println(id + "学号重复了,请重新输入!!"); flag = true; } } while (flag); System.out.println("姓名:"); String stuName = sc.nextLine(); double[] scores = new double[3]; for (int i = 0; i < scores.length; i++) { System.out.println("成绩:" + (i + 1)); scores[i] = Double.parseDouble(sc.nextLine()); } Student stu = new Student(id, stuName, scores); studentDao.addStudent(stu); } /** * 封装case 1:中的方法 */ public void addCase() { Scanner scanner = new Scanner(System.in); addStudent(scanner); studentDao.showStudent(); } public void deleStudent() { Scanner scanner = new Scanner(System.in); while (true) { System.out.println("请输入你要删除的学号:"); String id = scanner.nextLine(); boolean flag = studentDao.deleStudent(id); if (flag) { System.out.println("学号未找到,是否继续删除?(y/n)"); String str = scanner.nextLine(); if ("y".equals(str)) { continue; } else { break; } } { System.out.println("删除成功!是否继续删除?(y/n)"); String str = scanner.nextLine(); if ("y".equals(str)) { continue; } else { break; } } } } /** * 封装case5的方法 */ public void select() { while (true) { System.out.println("查找学生信息:"); System.out.println("-----------------------"); System.out.println("1、通过学号查找学生信息"); System.out.println("-----------------------"); System.out.println("2、通过姓名查找学生信息"); System.out.println("-----------------------"); System.out.println("3、通过平均成绩查询学生信息"); System.out.println("-----------------------"); System.out.println("4、退出"); System.out.println("请输入编号选择功能:"); int s = sc1.nextInt(); switch (s) { case 1: selectStudentId(); System.out.println("按任意键进入菜单选择!!"); sc.nextLine(); continue; case 2: selectStudentNames(); System.out.println("按任意键进入菜单选择!!"); sc.nextLine(); continue; case 3: selectStudentAvgs(); System.out.println("按任意键进入菜单选择!!"); sc.nextLine(); continue; case 4: break; } break; } } /** * 封装case5中case1,通过学号模糊查找学生 */ public void selectStudentId() { // Student student = new Student(); while (true) { System.out.println("请输入你要查找的学号:"); Scanner sc = new Scanner(System.in); String id = sc.nextLine(); Student[] student = studentDao.selectStudentIds(id); if (student != null) { System.out.println("学号包含" + id + "的学生个人信息为:"); System.out.println("------------------------------------------------------------------------"); System.out.println("学号\t\t姓名\t成绩一\t成绩二\t" + "成绩三\t平均分\t总分"); for (int i = 0; i < student.length; i++) { System.out.println(student[i].getId() + "\t\t" + student[i].getName() + "\t" + student[i].getScore()[0] + "\t" + student[i].getScore()[1] + "\t" + student[i].getScore()[2] + "\t" + student[i].getAvg() + "\t" + student[i].getSum()); } System.out.println("是否继续查询?(y/n)"); String s = sc.nextLine(); if ("y".equals(s)) { continue; } else { break; } } else { System.out.println("学号不存在!"); System.out.println("是否继续查询?(y/n)"); String s = sc.nextLine(); if ("y".equals(s)) { continue; } else { break; } } } } /** * 封装case5中case2,通过学号模糊查找学生 */ public void selectStudentNames() { while (true) { System.out.println("请输入你要查找的姓名:"); Scanner sc = new Scanner(System.in); String name = sc.nextLine(); Student[] student = studentDao.selectStudentNmaes(name); if (student != null) { System.out.println("姓名包含" + name + "的学生个人信息为:"); System.out.println("------------------------------------------------------------------------"); System.out.println("学号\t\t姓名\t成绩一\t成绩二\t" + "成绩三\t平均分\t总分"); for (int i = 0; i < student.length; i++) { System.out.println(student[i].getId() + "\t\t" + student[i].getName() + "\t" + student[i].getScore()[0] + "\t" + student[i].getScore()[1] + "\t" + student[i].getScore()[2] + "\t" + student[i].getAvg() + "\t" + student[i].getSum()); } System.out.println("是否继续查询?(y/n)"); String s = sc.nextLine(); if ("y".equals(s)) { continue; } else { break; } } else { System.out.println("姓名不存在!"); System.out.println("是否继续查询?(y/n)"); String s = sc.nextLine(); if ("y".equals(s)) { continue; } else { break; } } } } /** * 封装case5中case2,通过平均成绩查找学生 */ public void selectStudentAvgs() { while (true) { System.out.println("请输入你要查找的最低平均值:"); double minAvg = sc2.nextDouble(); System.out.println("请输入你要查找的最高平均值:"); double maxAvg = sc2.nextDouble(); Student[] student = studentDao.selectStudentAvgs(minAvg, maxAvg); if (student != null) { System.out.println("平均成绩在" + minAvg + "-" + maxAvg + "中的学生个人信息为:"); System.out.println("------------------------------------------------------------------------"); System.out.println("学号\t\t姓名\t成绩一\t成绩二\t" + "成绩三\t平均分\t总分"); for (int i = 0; i < student.length; i++) { System.out.println(student[i].getId() + "\t\t" + student[i].getName() + "\t" + student[i].getScore()[0] + "\t" + student[i].getScore()[1] + "\t" + student[i].getScore()[2] + "\t" + student[i].getAvg() + "\t" + student[i].getSum()); } System.out.println("是否继续查询?(y/n)"); String s = sc.nextLine(); if ("y".equals(s)) { continue; } else { break; } } else { System.out.println("成绩区间不存在!"); System.out.println("是否继续查询?(y/n)"); String s = sc.nextLine(); if ("y".equals(s)) { continue; } else { break; } } } } }
最后,这些都写完,项目也已经基本写完了,接下来就是把登录页面,和主页面进行拼接,让他们可以连续执行
StudentTest.java
package student.ui; import java.util.Scanner; public class StudentTest { public static void main(String[] args) { LoginMenu loginMenu=new LoginMenu(); loginMenu.login(); StudentMenu studentMenu=new StudentMenu(); studentMenu.mainMenu(); } }
最后就是我自己写的一个工具类,实现double数据取两位数
Util.java
package student.util; import java.math.RoundingMode; import java.text.DecimalFormat; /** * */ public class Util { public static double format(String rule, double num){ DecimalFormat df = new DecimalFormat("0.00"); df.setRoundingMode(RoundingMode.HALF_UP); num= Double.parseDouble(df.format(num)); return num; } }
到这里,这个项目就算完成了,但是还有很多地方是不够完善的,例如没有进行成绩判断哪些,这些就需要同学们自己进行修改了。刚开始学习java,还有很多不规范的地方,也希望各位指正!!!