题目一:学生成绩档案管理系统(代码实现)
1.学生类和用户类
内容概述:
1.定义一个学生类,在学生类中定义学生的姓名,学号,专业,成绩等属性。
2.在学生类为每个属性定义一个可以设置和返回该属性的方法。
3.定义一个用户类,在学生类中定义用户的姓名,密码等属性。
4.在用户类为每个属性定义一个可以设置和返回该属性的方法
代码如下 :
public class Student implements java.io.Serializable{
private String Student_number;
private String name;
private String specialized;
private double One_subject;
private double Two_subject;
private double Three_subject;
private double Four_subject;
private double Score_sum;
private int position;
public Student(String Student_number, String name, String specialized, double One_subject, double Two_subject, double Three_subject, double Four_subject) {
this.Student_number = Student_number;
this.name = name;
this.specialized = specialized;
this.One_subject = One_subject;
this.Two_subject= Two_subject;
this.Three_subject= Three_subject;
this.Four_subject = Four_subject;
this.Score_sum=One_subject+Two_subject+Three_subject+Four_subject;
}
public String getname() {
return this.name;
}
public void setname(String name) {
this.name =name ;
}
public double getOne_subject() {
return this.One_subject;
}
public void setOne_subject(double One_subject) {
this.One_subject =One_subject;
Score_sum=One_subject+Two_subject+Three_subject+Four_subject;
}
public double getTwo_subject() {
return this.Two_subject;
}
public void setTwo_subject(double Three_subject) {
this.Two_subject = Two_subject;
Score_sum=One_subject+Two_subject+Three_subject+Four_subject;
}
public double getThree_subject() {
return this.Three_subject;
}
public void setThree_subject(double Three_subject) {
this.Three_subject = Three_subject;
Score_sum=One_subject+Two_subject+Three_subject+Four_subject;
}
public double getFour_subject() {
return this.Four_subject;
}
public void setFour_subject(double Four_subject) {
this.Four_subject = Four_subject;
Score_sum=One_subject+Two_subject+Three_subject+Four_subject;
}
public double getScore_sum() {
return this.Score_sum;
}
public String getSpecialized() {
return this.specialized;
}
public void setSpecialized(String specialized) {
this.specialized = specialized;
}
public void setScore_sum(double Score_sum) {
this.Score_sum = Score_sum;
}
public int getposition() {
return this.position ;
}
public void setPosition(int position) {
this.position=position;
}
public String getStudent_number() {
return this.Student_number ;
}
public void setPosition(String Student_number) {
this.Student_number=Student_number;
}
}
public class User implements java.io.Serializable {
private String userName;
private String passWord;
public User(String userName, String passWord) {
this.userName = userName;
this.passWord = passWord;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
2,学生的信息交互
内容概述
1.定义一个StudentDao类用于实现学生的成绩档案功能,具体包括根据学生的学号和姓名查询学生的信息:
List <Student> findByStudent_number(String Student_number)
public List<Student> findByname(String name)
添加新学生:
public void addStudent(Student student)
修改学生信息:
public void modify(String student_number, double One_subject, double Two_subject, double Three_subject, double Four_subj
删除学生:
public void delete(String student_number)
利用快速排序,对学生的信息根据成绩从高到低进行排序输出:
public void print()
public void Fastsort()
2.定义一个用户类实现管理员的登录和注册等功能
添加新用户:
public void AddUser(User user)
根据用户名查找用户:
public User findByName(String Username)
代码如下:
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class StudentDao {
private StudentFile studentfile;
private UserFile userFile;
private Database database;
public StudentDao(Database UserDatabases) {
this.database = UserDatabases;
studentfile=new StudentFile();
userFile=new UserFile();
}
public Database getDatabase() {
return database;
}
public List<Student> findByStudent_number(String Student_number) {
List<Student> list = new ArrayList<>();
String choice = Student_number;
for (Student student : database.getStudentList()) {
if (choice.equals(student.getStudent_number())) {
list.add(student);
}
}
return list;
}
public List<Student> findByname(String name) {
List<Student> list = new ArrayList<>();
String choice = name;
for (Student student : database.getStudentList()) {
if (choice.equals(student.getname())) {
list.add(student);
}
}
return list;
}
public void addStudent(Student student) {
database.getStudentList().add(student);
}
public void modify(String student_number, double One_subject, double Two_subject, double Three_subject, double Four_subject) {
for (Student student : database.getStudentList())
if (student.getStudent_number().equals(student_number)) {
student.setOne_subject(One_subject);
student.setTwo_subject(Two_subject);
student.setThree_subject(Three_subject);
student.setFour_subject(Four_subject);
Fastsort();
System.out.println("修改后学生的信息:");
System.out.println(student.getStudent_number() + "\t" + student.getname() + "\t" + student.getSpecialized() + "\t" + student.getOne_subject() + "\t" + student.getTwo_subject() + "\t" + student.getThree_subject() + "\t" + student.getFour_subject() + "\t" + student.getScore_sum() + "\t" + student.getposition());
break;
}
}
public void delete(String student_number) {
for (Student student : database.getStudentList()) {
if (student.getStudent_number().equals(student_number)) {
database.getStudentList().remove(student);
break;
}
}
}
public void Fastsort(){
int ai1=database.getStudentList().size();
int w1=0;
int w2=1;
Student [] quantity=new Student[ai1];
for (Student student : database.getStudentList()){
quantity[w1++]=student;
}
sort(quantity,0,(ai1-1));
database.getStudentList().clear();
for (int min=0,max=quantity.length-1;min<max;min++,max--){
Student temp=quantity[min];
quantity[min]=quantity[max];
quantity[max]=temp;
}
for (Student student : quantity){
student.setPosition(w2++);
database.getStudentList().add(student);
}
}
public void print() {
Fastsort();
List<Student> list = database.getStudentList();
System.out.println("学号 姓名 专业 学科一 学科二 学科三 学科四 总分 排名");
for (int i = 0; i < list.size(); i++) {
// //获取集合中的每一个元素
Student student = (Student) list.get(i);
System.out.println(student.getStudent_number() + " " + student.getname() + " " + student.getSpecialized() + " " + student.getOne_subject() + " " + student.getTwo_subject() + " " + student.getThree_subject() + " " + student.getFour_subject() + " " + student.getScore_sum() + " " + student.getposition());
}
}
public void Student_informationSave() throws IOException {
studentfile.outPut(database.getStudentList());
userFile.outPut(database.getUserlist());
}
public void Student_informationload() throws IOException {
List<Student> sd = studentfile.inPut();
database.getStudentList().clear();
for (Student student : sd) {
database.getStudentList().add(student);
}
List<User> sd1 = userFile.inPut();
database.getUserlist().clear();
for (User users : sd1) {
database.getUserlist().add(users);
}
Fastsort();
System.out.println("信息加载成功!!");
}
public void sort(Student arr[], int low, int high) {
int l = low;
int h = high;
double baseNum = arr[low].getScore_sum();
while (l < h) {
//1.从右向左查找小于指定基数的数,找到之后跳出循环执行下面if循环,交换数据
while (l < h && arr[h].getScore_sum() >= baseNum) {
h--;
}
//交换数据
if (l < h) {
Student temp = arr[h];
arr[h] = arr[l];
arr[l] = temp;
l++;
}
//2.从左向右查找大于指定基数的数,找到后跳出循环执行下面if循环,交换数据
while (l < h && arr[l].getScore_sum() <= baseNum)
l++;
//交换数据
if (l < h) {
Student temp = arr[h];
arr[h] = arr[l];
arr[l] = temp;
h--;
}
}
if (l > low) {
sort(arr, low, l - 1);
}
if (h < high) {
sort(arr, l + 1, high);
}
}
}
public class UserDao {
private Database UserDatabase ;
public UserDao(Database UserDatabases) {
this.UserDatabase = UserDatabases;
}
public User findByName(String Username){
User user =null;
for(User e:UserDatabase.getUserlist()){
if(e.getUserName().equals(Username)){
user=e;
break;
}
}
return user;
}
public void AddUser(User user){
UserDatabase.getUserlist().add(user);
}
}
3,数据类
内容概述:
1定义一个database类,用于存储学生的信息数据和用户信息,初始化管理员信息为:用户名;root,密码:12345678,
实现返回学生的信息数据
public List<Student> getStudentList()
实现返回管理员的信息数据
public List<User> getUserlist()
代码如下:
import java.util.ArrayList;
import java.util.List;
public class Database {
//用户数据
private List<User> Userlist = new ArrayList<>();
private List<Student> StudentList =new ArrayList<>();
/**
* 在构造方法中对集合的数据进行初始化
*/
public Database() {
//初始化用户数据
User s= new User("root","12345678");
//将用户添加至集合
Userlist.add(s);
}
public List<Student> getStudentList() {
return StudentList;
}
public List<User> getUserlist() {
return Userlist;
}
}
4,用户交互的主界面实现
内容概述:
mainSystem主要用于与用户进行信息交互的界面展示,实现用户的登录,注册和对学生信息修改的功能。
基础选项展示
public void start(){
System.out.println("1. 登录");
System.out.println("2. 注册");
System.out.println("3. 退出系统");
System.out.println("请选择:");
注册和登录功能的函数
public void login()
public void regist()
信息交互界面:
public void showSera(){
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("输入0结束程序");
代码如下:
import java.util.List;
import java.util.Scanner;
import static java.lang.System.exit;
public class managerSystem {
private Scanner scanner = new Scanner(System.in);
private Scanner scanner1 = new Scanner(System.in);
private Scanner scanner2 = new Scanner(System.in);
//DAO数据层对象
private StudentDao studentdao;
private UserDao userdao;
private Database database;
public managerSystem(Database database) {
this.userdao = new UserDao(database);
this.studentdao = new StudentDao(database);
this.database=database;
}
//项目执行函数
public void start(){
System.out.println("1. 登录");
System.out.println("2. 注册");
System.out.println("3. 退出系统");
System.out.println("请选择:");
String chooice = scanner.next();
switch (chooice){
case "1":
//登录
login();
break;
case "2":
regist();
break;
//注册
case "3":
System.out.println("退出了系统!");
break;
default:
System.out.println("无效的选项,请重新输入!");
start();
}
}
/**
* 登录
*/
public void login(){
System.out.println("请输入用户名:");
String userName = scanner.next();
System.out.println("请输入密码:");
String password = scanner.next();
String words="";//获取4位数验证码
for(int i=0;i<4;i++){
words=((int)(Math.random()*10))+words;
}
System.out.println("获得的验证码为:"+words);
System.out.println("请输入验证码");
String yanzhen=scanner.next();
if(yanzhen.equals(words)) {
//通过DAO根据用户名查询数据库中对象
User user = userdao.findByName(userName);
//判断用户是否存在
if ( user!= null) {
//将数据库中找到的账户,再根据其密码和输入的密码比较
if (user.getPassWord().equals(password)) {
System.out.println("登录成功!");
showSera();
} else {
System.out.println("密码错误!");
login();
}
} else {
System.out.println("用户名不存在!请重新输入");
login();
}
}
else{
System.out.println("验证码错误,请重新登录!");
login();
}
}
/**
* 注册
*/
public void regist() {
System.out.println("请输入注册的用户名:");
String userName = scanner.next();
System.out.println("请输入注册的密码:");
String password = scanner.next();
//判断用户名是否被注册
User user = userdao.findByName(userName);
System.out.println("清确认密码:");
String str1 = scanner.next();
if (str1.equals(password)) {
String words = "";
for (int i = 0; i < 4; i++) {
words = ((int) (Math.random() * 10)) + words;
}
System.out.println("获得的验证码为:" + words);
System.out.println("请输入验证码");
String yanzhen = scanner.next();
if (yanzhen.equals(words)) {
if (user!= null) {
System.out.println("该用户名已被注册!输入0返回上一层菜单,其他任意键继续注册");
String result = scanner.next();
if (result.equals("0")) {
start();
} else {
regist();
}
} else {
//根据注册的信息创建一个账户对象
User registuser = new User(userName,password);
//将注册的信息写入数据库
database.getUserlist().add(registuser);
//返回起始菜单
start();
}
} else {
System.out.println("验证码输入错误,输入0返回上一层菜单,其他任意键继续注册");
String result = scanner.next();
if (result.equals("0")) {
start();
} else {
regist();
}
}
} else {
System.out.println("用户两次输入密码不一致,注册失败。输入0返回上一层菜单,其他任意键继续注册。");
String result = scanner.next();
if (result.equals("0")) {
start();
} else {
regist();
}
}
}
public void showSera(){
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("输入0结束程序");
String choice1=scanner.next();
switch (choice1){
case "0":
exit(0);
break;
case "1":
System.out.println("请输入学生的学号");
String student_number= scanner2.next();
System.out.println("请输入学生的姓名");
String name= scanner2.next();
System.out.println("请输入学生的专业");
String specialized= scanner1.next();
System.out.println("请输入学科一的成绩");
double One_subject=scanner.nextDouble();
if(One_subject<=0){
System.out.println("输入错误,返回上一层。");
}
System.out.println("请输入学科二的成绩");
double Two_subject=scanner2.nextDouble();
if(Two_subject<=0){
System.out.println("输入错误,返回上一层。");
}
System.out.println("请输入学科三的成绩");
double Three_subject=scanner.nextDouble();
if(Three_subject<=0){
System.out.println("输入错误,返回上一层。");
}
System.out.println("请输入学科四的成绩");
double Four_subject=scanner1.nextDouble();
if(Four_subject<=0){
System.out.println("输入错误,返回上一层。");
}
studentdao.addStudent(new Student(student_number,name,specialized,One_subject,Two_subject,Three_subject,Four_subject));
System.out.println("添加成功!!");
System.out.println("输入0返回主菜单,其他键结束程序");
String judge= scanner1.next();
if(judge.equals("0")){
showSera();
}else{
exit(0);
}
break;
case "2":
//实现浏览学生信息
studentdao.print();
System.out.println("1.学生信息查询");
System.out.println("2返回上一级");
String ee2= scanner.next();
switch (ee2){
case "2":
showSera();
break;
case "1":
System.out.println("1.按学号查询");
System.out.println("2.按姓名查询");
System.out.println("3.返回主菜单");
String ee90= scanner.next();
switch (ee90) {
case "1":
System.out.println("请输入查询的学号:");
String er1= scanner.next();
List<Student> s3=studentdao.findByStudent_number(er1);
System.out.println("学号 姓名 专业 学科一 学科二 学科三 学科四 总分 排名");
for (Student student : s3) {
System.out.println(student.getStudent_number() + " " + student.getname() + " " + student.getSpecialized() + " " + student.getOne_subject() + " " + student.getTwo_subject() + " " + student.getThree_subject() + " " + student.getFour_subject() + " " + student.getScore_sum() + " " + student.getposition());
}
break;
case "2":
System.out.println("请输入查询的姓名:");
String er2= scanner.next();
List<Student> s4=studentdao.findByname(er2);
System.out.println("学号 姓名 专业 学科一 学科二 学科三 学科四 总分 排名");
for (Student student : s4) {
System.out.println(student.getStudent_number() + " " + student.getname() + " " + student.getSpecialized() + " " + student.getOne_subject() + " " + student.getTwo_subject() + " " + student.getThree_subject() + " " + student.getFour_subject() + " " + student.getScore_sum() + " " + student.getposition());
}
break;
case "3":
showSera();
default:
System.out.println("输入错误!!");
}
System.out.println("输入0返回主菜单,其他键结束程序");
String re1= scanner1.next();
if(re1.equals("0")){
showSera();
}else{
exit(0);
}
break;
default:
System.out.println("输入错误!!");
System.out.println("输入0返回主菜单,其他键结束程序");
String rr= scanner1.next();
if(rr.equals("0")){
showSera();
}else{
exit(0);
}
}
break;
case "3":
System.out.println("请输入学生的学号");
String student_number1= scanner.next();
studentdao.delete(student_number1);
System.out.println("删除成功");
System.out.println("输入0返回主菜单,其他键结束程序");
String rr= scanner1.next();
if(rr.equals("0")){
showSera();
}else{
exit(0);
}
break;
case "4":
System.out.println("确认保存??");
System.out.println("1.确定");
System.out.println("2.取消");
String ee1= scanner.next();
switch (ee1){
case "2":
System.out.println("取消成功,已返回主菜单。");
showSera();
break;
case "1":
studentdao.Student_informationSave();
break;
default:
System.out.println("输入错误!!");
}
System.out.println("输入0返回主菜单,其他键结束程序");
String rx= scanner1.next();
if(rx.equals("0")){
showSera();
}else{
exit(0);
}
break;
case "5":
studentdao.Student_informationload();
System.out.println("输入0返回主菜单,其他键结束程序");
String rx1= scanner1.next();
if(rx1.equals("0")){
showSera();
}else{
exit(0);
}
break;
case"6" :
System.out.println("请入需要修改的学生的学号:");
String student_number2= scanner.next();
System.out.println("请输入学科一的成绩");
double One_subjects=scanner.nextDouble();
System.out.println("请输入学科二的成绩");
double Two_subjects=scanner2.nextDouble();
System.out.println("请输入学科三的成绩");
double Three_subjects=scanner.nextDouble();
System.out.println("请输入学科四的成绩");
double Four_subjects=scanner1.nextDouble();
studentdao.modify(student_number2,One_subjects,Two_subjects,Three_subjects,Four_subjects);
System.out.println("输入0返回主菜单,其他键结束程序");
String ry1= scanner1.next();
if(ry1.equals("0")){
showSera();
}else{
exit(0);
}
default:
System.out.println("输入错误,请重新输入:");
showSera();
}
}
}
5,学生和管理员信息的文件保存和读取实现
内容概述:
学生文件类和用户文件类中均有
public void outPut(List<User> list)
public List<User> inPut()
用于实现文件的改写和读取 。
代码如下:
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class StudentFile {
public void outPut(List<Student> list) throws IOException {
OutputStreamWriter ww = new OutputStreamWriter(new FileOutputStream("Student.txt"), "UTF-8");
for (Student S : list) {
ww.write(S.getStudent_number() + " " + S.getname() + " "+S.getSpecialized()+" " + S.getOne_subject() + " " + S.getTwo_subject() + " " + S.getThree_subject() + " " + S.getFour_subject() + " " + " " + S.getScore_sum() + " " + S.getposition() + "\n");
ww.flush();
}
ww.close();
}
public List<Student> inPut() throws IOException {
String line = "";
List<Student> j1=new ArrayList<>();
File f1 = new File("Student.txt");
FileReader reader = new FileReader(f1);
BufferedReader br = new BufferedReader(reader);
while ((line = br.readLine()) != null) {
String[] spString = line.split("\\s+");
String [] sde=new String[8];
int bg=0;
int a=0;
for (String ss : spString) {
sde[a++]=ss;
if(a==8){
break;
}
}
double sr1=Double.valueOf(sde[3]);
double sr2=Double.valueOf(sde[4]);
double sr3=Double.valueOf(sde[5]);
double sr4=Double.valueOf(sde[6]);
double sr5=Double.valueOf(sde[7]);
j1.add(new Student(sde[0],sde[1],sde[2],sr1,sr2,sr3,sr4));
}
br.close();
return j1;
}
}
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class UserFile {
public void outPut(List<User> list) throws IOException {
OutputStreamWriter ww = new OutputStreamWriter(new FileOutputStream("User.txt"), "UTF-8");
for (User S : list) {
ww.write(S.getUserName() + " " + S.getPassWord()+ "\n");
ww.flush();
}
ww.close();
}
public List<User> inPut() throws IOException {
String line = "";
List<User> j1=new ArrayList<>();
File f1 = new File("User.txt");
FileReader reader = new FileReader(f1);
BufferedReader br = new BufferedReader(reader);
while ((line = br.readLine()) != null) {
String[] spString = line.split("\\s+");
String [] sde=new String[2];
int bg=0;
int a=0;
for (String ss : spString) {
sde[a++]=ss;
if(a==2){
break;
}
}
j1.add(new User(sde[0],sde[1]));
}
br.close();
return j1;
}
}
6.运行结果展示
总结
该项目由于是对学生成绩档案进行管理和存储,为了提高系统的安全性我在系统中设置登录界面和管理员信息,在登陆和注册界面设置验证码提高系统的安全性,在对对该项目实现的过程中,我复习了IO文件的写入,读取等功能的实现,还了解了写入txt文件时乱码的处理方式,收获很大。