学生成绩管理系统
Java课程设计 - 学生成绩管理系统
一、团队介绍
| 名字 | 负责任务 |
|---|---|
| 黄家雯(组长) | 界面层GUI和登录功能的实现 |
| 许慎谨 | 业务逻辑层基本功能的实现 |
| 吴绍杰 | 随机生成十万学生数据信息和学生成绩的可视化分析(柱状图) |
二、系统功能
1.添加学生功能:姓名、学号、性别、出生年月日。(学号自动生成,学号唯一)
2.添加学生成绩功能:假设每个人都选修了数学、Java与体育。但输入成绩的时候,一般是给所有学生输入某一 门课程的成绩。
3.根据学生学号查找学生成绩,并在界面上显示姓名、学号和成绩,学号不存在的给出提示信
4. 根据学生姓名(支持模糊匹配)查找学生成绩,并在界面上显示姓名、学号和成绩,如果有多个相同姓名学生存在,一起显示出来,姓名不存在的给出提示信息
5. 生成学生学习情况报表:报表包含学号、姓名、各科目成绩及对应的该科目班级平均值,总成绩以及班级总成绩平均值。最后以总成绩平均值降序在图形界面输出,并可将该排序结果按照输出 至"成绩表.txt"文件
6. 支持分别对所有学生各科成绩画出柱状分布图
7. 支持对学生信息的修改与删除(要在文件或数据库中有所体现),不能修改学号。
8. 测试:支持随机生成10万个学生及其姓名、学号、成绩放入文本文件,以进行测试。(学号不能相同,每颗的成绩以80分为中心成正态分本)
9. 支持用户登录、验证操作
三、项目Git地址
传送门:Click to gitee
四、Gitee提交截图
五、系统架构图

六、包规划
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报表的打印
- 实现多次不同考试成绩的录入和成绩波动表
- 可以实现学生老师双方面的使用
- 可以实现多个成绩排行表,单科以及全科总分排行
- ... ...



浙公网安备 33010602011771号