Longjingrap

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

学生成绩管理系统

可实现功能

学生管理系统

  • 查询学生信息:姓名、学号、性别、出生年月日。(学号自动生成且唯一)
  • 查询学生成绩:每个人都有数学、Java与体育与选修课
  • 查询学生课程
  • 进行公选课选课

教师管理系统

  • 添删改学生功能
  • 查找学生(姓名查找(支持模糊查找),学号查找,班级查找,科目查找)
  • 进行学生成绩分析(柱状图(显示学生在各个分数范围的人数)与饼状图(显示学生及格与不及格的比例))
  • 进行学生成绩导出(poi)

一、 团队成员与任务分配

姓名 任务分配
马艺芳 DAO模式实现,数据库建立与连接,逻辑代码编写,代码整合,学生教师部分功能实现。
梁乐国 POI技术应用(导出学生成绩并生成excel表格),学生部分功能实现。
谢国庆 图形界面设计,部分教师功能。
梁志湖 学生成绩图形分析实现(柱形图,饼状图),团队博客编写,项目所需要的图片绘制与寻找

团队成员课程设计博客链接:

二、 项目git地址:

欢迎大家访问学生管理系统的码云

三、 项目git提交记录截图


四、 项目功能架构图与主要功能流程图

项目功能架构图

主要功能流程图

五、 项目运行截图

1.用户登录界面:

2.教师系统界面

3.按照班级查找

4.柱状图和饼状图

5.导出成绩

6.学生信息界面

7.学生选课

六、 项目关键代码

生成柱状图

public BarChartPanel(int x1, int x2, int x3, int x4, int x5, String name) {
		// TODO 自动生成的构造函数存根   		
    	//CategoryDataset dataset = getDataSet();
       DefaultCategoryDataset dataset = new DefaultCategoryDataset();      
          
          dataset.addValue(x1,name,"0~60");
        
          dataset.addValue(x2, name, "61~70");
        
          dataset.addValue(x3, name, "71~80");
       
          dataset.addValue(x4, name, "81~90");
        
          dataset.addValue(x5, name, "91~100");
       JFreeChart chart = ChartFactory.createBarChart3D(
      		                 "成绩柱形图", // 图表标题
                           "科目", // 目录轴的显示标签
                           "人数", // 数值轴的显示标签
                           dataset, // 数据集
                           PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                           true,           // 是否显示图例(对于简单的柱状图必须是false)
                           false,          // 是否生成工具
                           false           // 是否生成URL链接
                           );
       
       //从这里开始
       CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象
      // plot.getRenderer().setSeriesPaint(50, new Color(10,10,10)) ;
       BarRenderer3D customBarRenderer = (BarRenderer3D) plot.getRenderer(); 
       customBarRenderer.setSeriesPaint(0, Color.decode("#7979FF")); // 给series1 Bar 
       
       CategoryAxis domainAxis=plot.getDomainAxis();         //水平底部列表
        domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));         //水平底部标题
        domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));  //垂直标题
        ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状
        rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
         chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
         chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));//设置标题字体
         
         //到这里结束,虽然代码有点多,但只为一个目的,解决汉字乱码问题
         
        frame1 = new ChartPanel(chart,true);    }    //这里也可以用chartFrame,可以直接生成一个独立的Frame

poi导出表格

public void ExportBycoursePOI(List<Student> student) throws IOException {

		HSSFWorkbook wb = new HSSFWorkbook();

		HSSFCellStyle cellStyle = wb.createCellStyle(); 

        HSSFSheet sheet = wb.createSheet("学生成绩");

        HSSFRow row = sheet.createRow(0);

        HSSFCell cell = row.createCell(0);

        HSSFDataFormat format = wb.createDataFormat();

        cellStyle.setDataFormat(format.getFormat("@")); 
        cell.setCellValue("学号");
        cell.setCellStyle(cellStyle);
        row.createCell(1).setCellValue("姓名");
        row.createCell(2).setCellValue("班级");
        row.createCell(3).setCellValue("科目");
        row.createCell(4).setCellValue("成绩");
        for (int i = 0; i < student.size(); i++) {
            //创建list.size()行数据
            row = sheet.createRow(i + 1);
            //把值一一写进单元格里
            //设置第一列为自动递增的序号
            row.createCell(0).setCellValue(student.get(i).getStudentID());
            row.createCell(1).setCellValue(student.get(i).getName());
            row.createCell(2).setCellValue(student.get(i).getClasses());
            row.createCell(3).setCellValue(student.get(i).getSublist().get(0).getName());
            row.createCell(4).setCellValue(student.get(i).getSublist().get(0).getScore());
        }
        try {
			FileOutputStream output = new FileOutputStream("E:\\JAKARTA.xls");
			wb.write(output);
			output.flush(); 
			JOptionPane.showMessageDialog(null, "导出成功!");
			System.out.println("成功创建excel文件");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

通过关键字实现模糊查找

public List<Student> searchByname(String stuname) {
		List<Student> stulist = new ArrayList<>();
		PreparedStatement pstat = null;
		ResultSet rs = null;
		//数据库模糊匹配的sql语法
		String sql = "select * from student where name like'%"+stuname+"%'" ;
		try (Connection conn = JDBCUtil.getConnection()) {
			pstat = conn.prepareStatement(sql);
			rs = pstat.executeQuery(sql);
			//创建ResultSetMetaData
			//获得ResultSet对象rs
			ResultSetMetaData data = rs.getMetaData();
			//调用方法得到表的列数
			int colum = rs.getMetaData().getColumnCount();
			String[] columnamestr = new String[colum];
			
			//获得表头,以实现图形界面动态建表
			for(int i = 7;i <= colum;i++) {
				columnamestr[i-1] = data.getColumnName(i);
				System.out.println(data.getColumnName(i));
			}
			//获取数据库数据
			while(rs.next()){
				int id = rs.getInt("id");
				String name = rs.getString("name");
				String classes = rs.getString("class");
				String gender = rs.getString("gender");
				String birthdate = rs.getString("birthdate");
				System.out.println(id+" "+name+" "+classes+" "+gender+" "+birthdate);
				double[] source = new double[colum];
				for(int j = 6;j < colum;j++) {
					source[j] = rs.getDouble(columnamestr[j]);
					System.out.println(source[j]);
				}
				//将课程信息包装成Subject类型
				List<Subject> subject = new ArrayList<>();
				for(int k = 6;k<colum;k++) {
					Subject s = new Subject(columnamestr[k],new Teacher(""));
					s.setScore(source[k]);
					subject.add(s);
				}
				//将所得数据包装成Student类型,
				Student student = new Student(id,name,classes,gender,birthdate);
				//加入课程信息
				student.setSublist(subject);
				//加入List
				stulist.add(student);
			}	
			
		} catch (SQLException sqle) {
			sqle.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return stulist;
	}


七、项目代码扫描结果及改正

一,没有添加创建者信息

改正

二,不能在代码尾部添加注释

改正(应在代码上方)

八、UML类图


九、尚待改进或者新的想法

  • 尝试过网络功能,但目前还是未能实现,后面会争取再去尝试一下。
  • 由于时间问题,多线程(多个账户同时登陆)与学生抢课功能还未能实现
  • 代码结构进一步改善
posted on 2019-01-18 00:22  Longjingrap  阅读(3880)  评论(0编辑  收藏  举报