学生信息管理系统(二)

相对规范的小项目

项目整体结构如下

主通道 Entry类

package com.lanou3g.Main;



import java.io.File;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;




import com.lanou3g.service.Menu;
import com.lanou3g.util.ConstantUtil;

public class Entry {
	//主函数
	public static void main(String args[]) {
		PropertyConfigurator.configure(ConstantUtil.LOG4JCONFIGFILE);
		
		Menu  menu = new Menu();
		menu.run();
	}

}

Clazz班级类

package com.lanou3g.model;


import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;



import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import com.lanou3g.util.ConstantUtil;

public class Clazz {
	private String clazzID;
	private List<Student> list = new ArrayList<Student>();
	Document document;
//	String filePath = System.getProperty("user.dir") + File.separator + "resource" + File.separator + "student.xml";
	
	public Clazz() {}
	
	public Clazz(String clazzID) {
		this.clazzID = clazzID;
		restoreFromFile(ConstantUtil.DATAFILE);
	}
	
	//添加学生信息
	public void addStudent() {
	    Student student = new Student(" ",null, null, null);
	    list.add(student);
	    Element root = document.getRootElement();
	    Element student1 = root.addElement("student");
	    student1.addElement("id");
	    student1.addElement("name");
	    student1.addElement("gender");
	    student1.addElement("age");
	    edit(student);
	    OutputFormat oft = OutputFormat.createPrettyPrint();
	    
	}
	
	public List<Student> restoreFromFile(String fileName) {
		SAXReader reader = new SAXReader();
		try {
			document = reader.read(new File(fileName));
			Element rootElement = document.getRootElement();
			for(Iterator<Element> it = rootElement.elements().iterator(); it.hasNext();) {
				Element stuElm = it.next();
				String ID = stuElm.element("id").getText();
				String name = stuElm.element("name").getText();
				String gender = stuElm.elementText("gender");
			    Integer age = Integer.parseInt(stuElm.elementText("age"));
				Student stu = new Student(ID, name, gender, age);
				list.add(stu);
//				System.out.println(stu.toString());
			}
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
		
	}

	public String getClazzID() {
		return clazzID;
	}

	public void setClazzID(String clazzID) {
		this.clazzID = clazzID;
	}

	public List<Student> getList() {
		return list;
	}

	public void setList(List<Student> list) {
		this.list = list;
	}
	
	
	
	//查询学生函数
    public Student findByID(String ID) {
    	Student student = null;
		for (Iterator<Student> it = this.list.iterator(); it.hasNext();) {
			if ((student = it.next()).getID().equals(ID)) {
				return student;
			}
		}
		return null;//循环正常结束则表示没有找到
	}
	
    //删除功能函数
    public void deleteStudent(Student student) {
    	//在学生列表删除
    	this.getList().remove(student);//从集合中把Student删除
    	//在dom 中删除
    	Element root = document.getRootElement();
    	Iterator<Element> it = root.elements().iterator();
    	while (it.hasNext()) {
    		Element e = it.next();
    		String ID = e.elementText("id");//取到标签文本
    		if (ID.equals(student.getID())) {
    			root.remove(e);
    			break;
    		}
    	}
    	//保存数据到磁盘
    	save();   	
    }
    
    
    //修改学生对象属性
    public Student edit(Student student) {
		Scanner input = new Scanner(System.in);
		System.out.println("ID : ");
	    String ID = input.nextLine();
	    System.out.println("name : ");
	    String name = input.nextLine();
	    System.out.println("gender : ");
	    String gender = input.nextLine();
	    System.out.println("age : ");
	    Integer age = input.nextInt();
	    
	    
	    //修改dom 结点的值
	    Element root = document.getRootElement();
	    Iterator<Element> it = root.elements().iterator();
	    Element stuEle = null;
	    while(it.hasNext()) {
	    	stuEle = it.next();
	    	if (stuEle.elementText("id").equals(student.getID())) {
				break;
	    	}
	    }
	    if (null != stuEle) {
	    	stuEle.element("id").setText(ID);
    		stuEle.element("name").setText(name);
			stuEle.element("gender").setText(gender);
			stuEle.element("age").setText(age + "");
	    }
	    student.setID(ID);
	    student.setName(name);
	    student.setGender(gender);
	    student.setAge(age);
	    
	    //存盘
	    save();
	    return student;
	    
	}
    
    public void save() {
    	saveToFile(document, ConstantUtil.DATAFILE);
    }
  
    
    //把修改过的dom保存到磁盘
    public void saveToFile(Document document, String filename) {
    	try {
    		//一般一样的异常不能放在一起,不知道是哪个出现异常
    		XMLWriter writer = new XMLWriter(new FileWriter(filename));
    		writer.write(document);
    		writer.flush();
    		writer.close();
    	} catch (IOException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    	
    }
	

}

父类Person

package com.lanou3g.model;

public class Person {
	private String ID;
	private String name;
	private String gender;
	private Integer age;
	
	
	public Person() {}
	
	public Person(String ID, String name, String gender, Integer age) {
		this.ID = ID;
		this.name = name;
		this.gender = gender;
		this. age = age;
		
	}
	@Override //表示重写父类方法,如果父类中没有的方法写出来会
	public String toString() {
		String s = "ID:  " + ID + "\nname:  " + name + "\ngender:   " + gender + "\nage:   " + age;
		return s;
	}

	public String getID() {
		return ID;
	}

	public void setID(String iD) {
		ID = iD;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}
	

}

Score成绩类

扫描二维码关注公众号,回复: 2436293 查看本文章
package com.lanou3g.model;


public class Score {
	private Subject subject;
	private Double score;
	
	public Score() {}
	
	public Score(Subject subject, Double score) {
		this.subject = subject;
		this.score = score;
	}

	public Subject getSubject() {
		return subject;
	}

	public void setSubject(Subject subject) {
		this.subject = subject;
	}

	public Double getScore() {
		return score;
	}

	public void setScore(Double score) {
		this.score = score;
	}
	

}

Student学生类 继承于Person类

package com.lanou3g.model;

import java.util.ArrayList;
import java.util.List;

public class Student extends Person {
	private String SID;
	private String grade;
	private String major;
	private String clazz;//班级
	private List<Score> sList = new  ArrayList<Score>(); 

	public Student() {}

	public Student(String ID, String name, String gender, Integer age) {
		super(ID, name, gender, age);
		// TODO Auto-generated constructor stub
	}
	
	//添加成绩
	public void addScore(Score score) {
		this.sList.add(score);
	}

	public String getSID() {
		return SID;
	}

	public void setSID(String sID) {
		SID = sID;
	}

	public String getGrade() {
		return grade;
	}

	public void setGrade(String grade) {
		this.grade = grade;
	}

	public String getMajor() {
		return major;
	}

	public void setMajor(String major) {
		this.major = major;
	}

	public String getClazz() {
		return clazz;
	}

	public void setClazz(String clazz) {
		this.clazz = clazz;
	}
	
	

}

Subject类

package com.lanou3g.model;

public class Subject {
	private String subjectID;
	private String name;
	
	public Subject() {}
	
	public Subject(String subjectID, String name) {
		this.subjectID = subjectID;
		this.name = name;
		
	}

}

Menu类

package com.lanou3g.service;

import java.util.Iterator;
import java.util.Scanner;



import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;


import com.lanou3g.Main.Entry;
import com.lanou3g.model.Clazz;
import com.lanou3g.model.Student;

public class Menu {
	 private static final Logger LOG = Logger.getLogger(Entry.class);
	private Clazz clazz;
	Document document;
	
	public Menu() {}
	
	//lazy loading
	public Clazz getClazz() {
		if (null == clazz) {//如果需要 ,则创建, 节省内存
			clazz = new Clazz("123");
		}
		return clazz;
	}

	private void showMenuHead() {
		System.out.println("*********************************");
		System.out.println("*        欢迎使用学生成绩管理系统             *");
		System.out.println("*********************************");
		
	}
	
	//功能显示函数
	private void showMainMenu() {
		System.out.println("1. 显示全部学生信息 ");
		System.out.println("2. 添加学生信息");
		System.out.println("3. 查询学生信息");
		System.out.println("0. exit");
	}
	//功能跳转函数
	public void run() {
		showMenuHead();
		showMainMenu();
		Scanner input = new Scanner(System.in);
		int selected;
		while ((selected = input.nextInt()) != 0) {
			switch (selected) {//跳转到子菜单
			case 1:
				showAll();
				
				break;
			case 2:
				this.clazz.addStudent();
				break;
			case 3: findStudent();
				
				break;

			default:
				break;
			}
			showMainMenu();
		}
		System.out.println("谢谢使用,bye");
		input.close();//关闭Scanner
	}
	
	//设置输出格式函数
	void showAll() {
		System.out.println("+------------------+--------+------+---+");
		System.out.format("|%18s|%8s|%6s|%3s|\n", "ID", "name", "gender", "age");
		System.out.println("+------------------+--------+------+---+");
		for (Iterator<Student> it = this.getClazz().getList().iterator(); it.hasNext();) {
			Student stu = it.next();
			System.out.format("|%18s|%8s|%6s|%3d|\n", stu.getID(), stu.getName(), stu.getGender(), stu.getAge());
			System.out.println("+------------------+--------+------+---+");
			
		}
	}
	
	//查找函数
	void findStudent() {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入ID:");
		String ID = input.next();
		Student student = this.getClazz().findByID(ID);
		if (null != student) {
			System.out.println(student);
		} else {
			LOG.info("ID not found");
		}
		
		int selected = 0;
		do {
			System.out.println("1. 修改");
			System.out.println("2. 删除");
			System.out.println("0. 返回");
			selected = input.nextInt();
			switch (selected) {
			case 1:
				this.getClazz().edit(student);
				System.out.println("修改成功!!!!");
				break;
			case 2:
				this.getClazz().deleteStudent(student);
				System.out.println("删除成功!!!");
				selected =0;
				break;
				
			default:
				break;
			}
			
		} while (selected !=0);
	}
	
	
	
	
	

}

ConstantUtil类 

存储常量如地址之类的

package com.lanou3g.util;

import java.io.File;

//改成抽象类外界也无法创建对象
//final修饰的类不能被继承
public abstract class ConstantUtil {
	public static String HOMEPATH = System.getProperty("user.dir");
	public static String RESPATH = HOMEPATH + File.separator + "resource";
	public static String LOGPATH = HOMEPATH + File.separator + "log";
	public static String CONFIGPATH = HOMEPATH + File.separator + "config";
	
	public static String LOG4JCONFIGFILE = CONFIGPATH + File.separator + "log4j.properties";
	public static String DATAFILE = RESPATH + File.separator + "student.xml";
	
	public static String HOSTNAME = "www.lanou3g.com";
	public static String HOSTIP = "192.168.1.1";
	
	//构造方法变成私有方法,外面就无法创建了
	private ConstantUtil() {
		
	}
	

}

log4j.properties

日志配置文件

 ## 设置日志级别和输出源
log4j.rootLogger = All,sysout
 
## sysout
## 设置日志输出位置
log4j.appender.sysout = org.apache.log4j.ConsoleAppender
## 设置输出布局
log4j.appender.sysout.layout = org.apache.log4j.PatternLayout
## 设置布局样式
log4j.appender.sysout.layout.ConversionPattern = [%p] [%d] [%l] %n%m%n
## 设置输出源优先级(对文件输出源有效)
log4j.appender.sysout.Threshold = ALL
## 设置是否立即写入
log4j.appender.sysout.ImmediateFlush = TRUE

student.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Students>
	<student>
		<id>1001</id>
		<name>Tom</name>
		<gender>male</gender>
		<age>15</age>
	</student>
	<student>
		<id>1002</id>
		<name>Jerry</name>
		<gender>fmale</gender>
		<age>12</age>
	</student>
</Students>

猜你喜欢

转载自blog.csdn.net/qq_42651904/article/details/81190605