学生成绩管理系统

Java课程设计 - 学生成绩管理系统

一、团队介绍

名字 负责任务
黄家雯(组长) 界面层GUI和登录功能的实现
许慎谨 业务逻辑层基本功能的实现
吴绍杰 随机生成十万学生数据信息和学生成绩的可视化分析(柱状图)

二、系统功能

​ 1.添加学生功能:姓名、学号、性别、出生年月日。(学号自动生成,学号唯一)

​ 2.添加学生成绩功能:假设每个人都选修了数学、Java与体育。但输入成绩的时候,一般是给所有学生输入某一 门课程的成绩。

​ 3.根据学生学号查找学生成绩,并在界面上显示姓名、学号和成绩,学号不存在的给出提示信

​ 4. 根据学生姓名(支持模糊匹配)查找学生成绩,并在界面上显示姓名、学号和成绩,如果有多个相同姓名学生存在,一起显示出来,姓名不存在的给出提示信息

​ 5. 生成学生学习情况报表:报表包含学号、姓名、各科目成绩及对应的该科目班级平均值,总成绩以及班级总成绩平均值。最后以总成绩平均值降序在图形界面输出,并可将该排序结果按照输出​ ​ 至"成绩表.txt"文件

​ 6. 支持分别对所有学生各科成绩画出柱状分布图

​ 7. 支持对学生信息的修改与删除(要在文件或数据库中有所体现),不能修改学号。
​ 8. 测试:支持随机生成10万个学生及其姓名、学号、成绩放入文本文件,以进行测试。(学号不能相同,每颗的成绩以80分为中心成正态分本)
​ 9. 支持用户登录、验证操作

三、项目Git地址

传送门Click to gitee

四、Gitee提交截图

yCz48e.png

yCz5gH.png

五、系统架构图

六、包规划

dao:

gui:

main:

model:

七、运行截图

登录界面

验证码

界面

添加学生

删除学生

按姓名模糊查找

学生成绩柱状图

导入学生成绩

修改学生成绩

展示所有学生成绩

八、关键代码

public interface StudentDao {
	public boolean writeStudent(Student student);
	public boolean writeStudentTest(Student student);
	public List<Student> getStudentsByName(String name);
	public Student getStudentsByStuno(int stuno);
	public List<Student> getAllStudents();
	public List<Student> diplayAllStudent();
	public void deleteStudent(int num);
	public void revise(Student stu) throws ParseException;
	public void addMath(double num);
	public void addPe(double num);
	public void addJava(double num);
	public boolean SearchNum(int num);
	public void deleteAll();
	public void reviseMath(double score,int id);
	public void reviseJava(double score, int id);
	public void revisePe(double score,int id);
}
public class Operation {

	private StudentDao stuDao = new StudentDaoJDBCImpl();
	
	public void addStudent(Student stus) {//添加学生
			if (!stuDao.writeStudent(stus)) {
				JOptionPane.showMessageDialog(null,"添加学生失败");
			} else {
				JOptionPane.showMessageDialog(null,"添加学生成功");
			}
		
	}
	
	public List<Student> showStudent() {
		return stuDao.diplayAllStudent();
	}
	

	public void addStudentSumSco() {
		stuDao.addMath(95);
		stuDao.addJava(91.0);
		stuDao.addPe(92);
	}
	
	public Student searchStuno(int num) {
		if(stuDao.SearchNum(num)) {
			return stuDao.getStudentsByStuno(num);
		}
		return null;
		
	}
	
	public void searchName() {
		System.out.println("===========查询学生========");
		List<Student> stuList = stuDao.getStudentsByName("wsj");
		if (stuList.size() == 0) {
			System.out.println("查无此人");
		} else {
			for (Student e : stuList) {
				System.out.println(e.getNumber()+","+e.getName());
			}
		}
	}
	
	public void studentTable() throws FileNotFoundException {
		List<Student> studentList = stuDao.getAllStudents();
		DecimalFormat df =new DecimalFormat("#0.00");
		PrintWriter out = new PrintWriter("成绩表.txt");
		for (Student e : studentList) {
			
			out.println(e.getNumber()+"   "+e.getName()+"    "+e.getBirthday()+"    "+df.format(e.getAverage()));
			out.flush();
		}
	}
	
	public void histogram(int num) {
		Picture pic = new Picture();
		Student e = searchStuno(num);
			pic.getChart(e.getMath(), "数学", e.getJava(), "体育", e.getPe(), "Java");
		
	}
	
	public boolean delete(int num) {
		if(stuDao.SearchNum(num))
		{
			stuDao.deleteStudent(num);
			return true;
		}
		return false;
	}
	
	

	public void deleteAll() {
		stuDao.deleteAll();
	}
	
	
	
	public void modify() throws ParseException {
		Student stu = stuDao.getStudentsByStuno(1001);
		stuDao.revise(stu);
	}
	
	public void modifyMath(double score,int num) throws ParseException {
		
		
		stuDao.reviseMath(score,num);
	}
	public void modifyJava(double score,int num) throws ParseException {
		
		
		stuDao.reviseJava(score, num);
	}
	public void modifyPe(double score,int num) throws ParseException {
		
		
		stuDao.revisePe(score, num);
	}
	
	public void testing() throws IOException {
		StudentList list = new StudentList();
		List<Student> studentList = new ArrayList<>();
		studentList = list.getRandomList();
	}
	

}

九、课程设计感想

一开始第一个小难题就是使用JDBC来连接数据库,后来发现原来是自己jar包忘记加入路径,一开始瞎查资料,后来一问同学就发现了,还是先多学习资料的好。后来则是关于如何将我设置为String的生日正确放进数据库里的date类型,花了我不少时间和精力了解到sql.Date是专门针对数据库的,而我们可以先规定String转换成util.Date的格式,然后再用util.Date的getTime方法去转换成数据库内的sql.Date。接下来则是和图形界面监听器的对接,这让我修改了很多代码,内容,属性,逻辑方式都有去改变,也算是一件繁琐的事情。

十、尚待改进的功能及想法

  • 录入成绩代码可以更为简洁
  • 添加信息不能判断信息的格式是否正确
  • DAO模式的丰富,实现文件或者集合的数据读取
  • 用POI技术实现Excel报表的打印
  • 实现多次不同考试成绩的录入和成绩波动表
  • 可以实现学生老师双方面的使用
  • 可以实现多个成绩排行表,单科以及全科总分排行
  • ... ...
posted @ 2021-01-29 23:11  字圣大人  阅读(767)  评论(0)    收藏  举报