JAVA课程设计——多源教学数据管理系统
团队简介
团队名称:
419圣斗士
团队成员
| 姓名 | 成员介绍 | 任务分配 |
|---|---|---|
| 周炳辉(组长) | 来自网络的一个大佬,穿女装很合适 | poi与servlet |
| 徐宏伟 | 网络中一个具有强大隐藏实力的大哥 | css,部分jsp与html |
| 李金谣 | 旭宝的忠实粉丝,来自格兰迪的挖矿者 | 部分jsp与echarts |
| 龚顺德 | 常规划水,一个默默无闻的人 | 团队博客,Student类 |
项目git地址
git项目地址
项目git提交记录

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

- 主要功能图

项目运行截图或屏幕录制










项目关键代码
public class ExcelUtil {
//默认单元格内容为数字时格式
private static DecimalFormat df = new DecimalFormat("0");
// 默认单元格格式化日期字符串
private static SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
// 格式化数字
private static DecimalFormat nf = new DecimalFormat("0.00");
public static ArrayList<ArrayList<Object>> readExcel(File file){
if(file == null){
return null;
}
if(file.getName().endsWith("xlsx")){
//处理ecxel2007
return readExcel2007(file);
}else{
//处理ecxel2003
return readExcel2003(file);
}
}
/*
* @return 将返回结果存储在ArrayList内,存储结构与二位数组类似
* lists.get(0).get(0)表示过去Excel中0行0列单元格
*/
public static ArrayList<ArrayList<Object>> readExcel2003(File file){
try{
ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>();
ArrayList<Object> colList;
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file));
int length = wb.getNumberOfSheets();
int index = 0;
for(int i = 0; i < length; i++) {
HSSFSheet tempSheet = wb.getSheetAt(i);
HSSFRow row = tempSheet.getRow(0);
HSSFCell cell = row.getCell(0);
String value = cell.getStringCellValue();
if(value.contains("网络17")) {
index = i;
break;
}
}
HSSFSheet sheet = wb.getSheetAt(index);
HSSFRow row;
HSSFCell cell;
Object value;
for(int i = sheet.getFirstRowNum() , rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows() ; i++ ){
row = sheet.getRow(i);
colList = new ArrayList<Object>();
if(row == null){
//当读取行为空时
if(i != sheet.getPhysicalNumberOfRows()){//判断是否是最后一行
rowList.add(colList);
}
continue;
}else{
rowCount++;
}
for( int j = row.getFirstCellNum() ; j <= row.getLastCellNum() ;j++){
cell = row.getCell(j);
if(cell == null || cell.getCellType() == CellType.BLANK){
//当该单元格为空
if(j != row.getLastCellNum()){//判断是否是该行中最后一个单元格
colList.add("");
}
continue;
}
switch(cell.getCellType()){
case STRING:
value = cell.getStringCellValue();
break;
case NUMERIC:
value = df.format(cell.getNumericCellValue());
break;
case BOOLEAN:
value = Boolean.valueOf(cell.getBooleanCellValue());
break;
case BLANK:
value = "";
break;
default:
value = cell.toString();
}// end switch
colList.add(value);
}//end for j
rowList.add(colList);
}//end for i
return rowList;
}catch(Exception e){
return null;
}
}
public static ArrayList<ArrayList<Object>> readExcel2007(File file){
try{
ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>();
ArrayList<Object> colList;
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(file));
int length = wb.getNumberOfSheets();
int index = 0;
for(int i = 0; i < length; i++) {
XSSFSheet tempSheet = wb.getSheetAt(i);
XSSFRow row = tempSheet.getRow(0);
XSSFCell cell = row.getCell(0);
if(cell!=null&&cell.getCellType()!=CellType.BLANK) {
String value = cell.getStringCellValue();
if(value.contains("网络17")) {
index = i;
break;
}
}
}
XSSFSheet sheet = wb.getSheetAt(index);
XSSFRow row;
XSSFCell cell;
Object value;
for(int i = sheet.getFirstRowNum() , rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows() ; i++ ){
row = sheet.getRow(i);
colList = new ArrayList<Object>();
if(row == null){
//当读取行为空时
if(i != sheet.getPhysicalNumberOfRows()){//判断是否是最后一行
rowList.add(colList);
}
continue;
}else{
rowCount++;
}
for( int j = row.getFirstCellNum() ; j <= row.getLastCellNum() ;j++){
cell = row.getCell(j);
if(cell == null || cell.getCellType() == CellType.BLANK){
//当该单元格为空
if(j != row.getLastCellNum()){//判断是否是该行中最后一个单元格
colList.add("");
}
continue;
}
switch(cell.getCellType()){
case STRING:
value = cell.getStringCellValue();
break;
case NUMERIC:
value = df.format(cell.getNumericCellValue());
break;
case BOOLEAN:
value = Boolean.valueOf(cell.getBooleanCellValue());
break;
case BLANK:
value = "";
break;
default:
value = cell.toString();
}// end switch
colList.add(value);
}//end for j
rowList.add(colList);
}//end for i
return rowList;
}catch(Exception e){
e.printStackTrace();
System.out.println("exception");
return null;
}
}
public static void writeExcel(ArrayList<ArrayList<Object>> result,String path){
if(result == null){
return;
}
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("sheet1");
for(int i = 0 ;i < result.size() ; i++){
XSSFRow row = sheet.createRow(i);
if(result.get(i) != null){
for(int j = 0; j < result.get(i).size() ; j ++){
XSSFCell cell = row.createCell(j);
cell.setCellValue(result.get(i).get(j).toString());
}
}
}
ByteArrayOutputStream os = new ByteArrayOutputStream();
try
{
wb.write(os);
} catch (IOException e){
e.printStackTrace();
}
byte[] content = os.toByteArray();
File file = new File(path);//Excel文件生成后存储的位置。
OutputStream fos = null;
try
{
fos = new FileOutputStream(file);
fos.write(content);
os.close();
fos.close();
}catch (Exception e){
e.printStackTrace();
}
}
public static DecimalFormat getDf() {
return df;
}
public static void setDf(DecimalFormat df) {
ExcelUtil.df = df;
}
public static SimpleDateFormat getSdf() {
return sdf;
}
public static void setSdf(SimpleDateFormat sdf) {
ExcelUtil.sdf = sdf;
}
public static DecimalFormat getNf() {
return nf;
}
public static void setNf(DecimalFormat nf) {
ExcelUtil.nf = nf;
}
}
public class POIUtil {
public static void buildStandardScale(String path) {
Connection con = null;
PreparedStatement pStatement = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<ArrayList<Object>> ans;
String sql = "insert into study(id,name,sex,class,major,faculty) values(?,?,?,?,?,?)";
try {
con = JDBCUtil.getConnection();
con.setAutoCommit(false);
ans = new ArrayList<ArrayList<Object>>();
ans = TxtUtil.readFile(path);
// ans = TxtUtil.readFile("C:\\Users\\你们走啊\\Desktop\\study\\学生名单.txt");
stmt = con.createStatement();
pStatement = con.prepareStatement(sql);
for(int i = 1; i < ans.size(); i++) {
String id = ans.get(i).get(0).toString();
String newSql = "select * from study where id = "+id;
rs = stmt.executeQuery(newSql);
String c = "0";
while (rs.next()) {
c = rs.getString(1);
}
if(c.equals("0")) {
for(int j = 1; j <= ans.get(i).size(); j++) {
pStatement.setString(j, ans.get(i).get(j-1).toString());
}
pStatement.addBatch();
pStatement.executeBatch();
con.commit();
}
}
}catch (SQLException sqle) {
sqle.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtil.realeaseAll(rs, stmt, con, pStatement);
}
}
public static void mergeExcel(String path) {
Connection con = null;
PreparedStatement pStatement = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<ArrayList<Object>> ans;
ArrayList<Object> cowList;
ArrayList<ArrayList<Object>> errorAns = new ArrayList<ArrayList<Object>>();
ArrayList<Object> temp = new ArrayList<Object>();
temp.add("学号");
temp.add("姓名");
temp.add("该信息所在的文件夹");
errorAns.add(temp);
String sql = "insert into study(id,name,sex,class,major,faculty) values(?,?,?,?,?,?)";
try {
con = JDBCUtil.getConnection();
con.setAutoCommit(false);
stmt = con.createStatement();
// String Path = "C:\\Users\\你们走啊\\Desktop\\新建文件夹";
File file = new File(path);
File[] tempList = file.listFiles();
String tempNameList [] = new String [tempList.length];
for(int i = 0; i < tempList.length; i++) {
if (tempList[i].isFile()) {
tempNameList[i] = tempList[i].toString();
}
}
int begin = 0, index = 0;
ArrayList<ArrayList<Object>> result;
for(int l = 0; l < tempNameList.length; l++) {
begin = 0;
index = 0;
if(tempNameList[l].contains("txt")) {
continue;
}
if(tempNameList[l].contains("错误")) {
continue;
}
if(tempNameList[l].contains("网络汇总")) {
continue;
}
String name;
File newFile = new File(tempNameList[l]);
if(newFile.getName().contains("期中")) {
name = "midterm";
}else if(newFile.getName().contains("期末")) {
name = "terminal";
}else if(newFile.getName().contains("语言程序设计")) {
name = "MOOC";
}else {
name = "pta";
}
result = ExcelUtil.readExcel(newFile);
for(int i = 0 ;i < result.size() ;i++){
for(int j = 0;j<result.get(i).size(); j++){
if(result.get(i).get(j).toString().equals("学号")) begin = i+1;
if(result.get(i).get(j).toString().contains("总分")) {
index = j;
break;
}
}
}
boolean flag;
for(int i = begin; i < result.size(); i++) {
temp = new ArrayList<Object>();
String id = result.get(i).get(0).toString();
flag = false;
if(result.get(i).get(0)==null||result.get(i).get(0).toString().equals("")||result.get(i).get(1)==null||result.get(i).get(1).toString().equals("")) {
flag = false;
}
else {
String newSql2 = "select * from study where id = "+result.get(i).get(0)+" and name = '"+result.get(i).get(1)+"'";
rs = stmt.executeQuery(newSql2);
while(rs.next()) {
flag = true;
}
}
if(!flag) {
temp.add(result.get(i).get(0));
temp.add(result.get(i).get(1));
temp.add(tempNameList[l]);
errorAns.add(temp);
}
String newSql = "update study set "+name+" = (?) where id = "+id;
// String newSql = "update study set "+name.toString()+" = "+result.get(i).get(index).toString()+" where id = "+id;
if(NumberUtil.isNumber(id)){
pStatement = con.prepareStatement(newSql);
pStatement.setString(1, result.get(i).get(index).toString());
pStatement.addBatch();
pStatement.executeBatch();
con.commit();
}
}
}
//将合并excel文件写入新的excel
ans = new ArrayList<ArrayList<Object>>();
sql = "select COLUMN_NAME from information_schema.COLUMNS where table_name = 'study'";
rs = stmt.executeQuery(sql);
cowList = new ArrayList<Object>();
while(rs.next()) {
cowList.add(rs.getString(1));
}
ans.add(cowList);
rs.close();
String newSql="select * from study";
rs = stmt.executeQuery(newSql);
while(rs.next()) {
cowList = new ArrayList<Object>();
for(int i = 1; i <= 11; i++)
if(rs.getString(i)==null) {
cowList.add("");
}
else cowList.add(rs.getString(i));
ans.add(cowList);
}
ExcelUtil.writeExcel(ans, path+"/java网络汇总.xlsx");
ExcelUtil.writeExcel(errorAns, path+"/错误汇总表.xlsx");
}catch (SQLException sqle) {
sqle.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtil.realeaseAll(rs, stmt, con, pStatement);
}
}
项目代码扫描结果及改正


根据提示的错误,修改相关的错误。
尚待改进
界面美化,数据库远程连接等等。
JAVA课程设计——多源教学数据管理系统的更多相关文章
- JAVA课程设计---多源教学数据管理系统
1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2.个人负责模块或任务说明 (1)到控制台实现GUI界面中浏览文件并选取文件的功能. ...
- Java课程设计(2019版)
参考资料 Java课程设计参考资料(2018-12-26更新) Java课程设计常见问题(程序部署.数据库.JSP) 项目开发参考-阿里巴巴Java开发手册(正式版) 更多参考资料请查看QQ群文件中的 ...
- Java课程设计——博客作业教学数据分析系统(201521123082 黄华林)
Java课程设计--博客作业教学数据分析系统(201521123082 黄华林) 一.团队课程设计博客链接 博客作业教学数据分析系统(From:网络五条狗) 二.个人负责模块或任务说明 1.网络爬虫 ...
- Java课程设计——学生成绩管理系统(201521123003 董美凤)
Java课程设计--学生成绩管理系统(201521123003 董美凤) 1.团队课程设计博客链接 学生成绩管理系统博客链接 2.个人负责模块或任务说明 信息修改 密码修改 部分界面设计 3.自己的代 ...
- Java课程设计——博客作业教学数据分析系统(201521123084 林正晟)
#课程设计--博客作业教学数据分析系统(201521123084 林正晟) 1.团队课程设计博客链接 博客作业教学数据分析系统 2.个人负责模块或任务说明 学生登陆界面的前端实现和与数据库的连接 学生 ...
- Java课程设计—学生成绩管理系统(201521123004-林艺如)
1.团队课程设计博客 团队课程设计博客链接 2.个人负责模块或任务说明 ①.Menu Menu.jsp 在页面中给出提示,用HTML的 MenuTeacher.jsp 利用Menu.jsp进行具体化完 ...
- java课程设计团队博客《基于学院的搜索引擎》
JAVA课程设计 基于学院网站的搜索引擎 对学院网站用爬虫进行抓取.建索(需要中文分词).排序(可选).搜索.数据摘要高亮.分页显示.Web界面. 一.团队介绍 学号 班级 姓名 简介 2016211 ...
- Java课程设计-算术运算测试(D级) 齐鲁工业大学 计科20-1 王瀚垠 202003010033
Java课程设计-算术运算测试(D级) 齐鲁工业大学 计科20-1 王瀚垠 202003010033 目录 1.项目简介 2.项目采用技术 3.功能需求分析 4.项目亮点 5.项目功能架构图和UML类 ...
- java课程设计--We Talk(201521123061)
java课程设计--We Talk(201521123061) 团队博客链接:http://www.cnblogs.com/slickghost/ 数据库 一.通过Dao模式建立与数据库的连接 1.数 ...
随机推荐
- Python3.5+SQL+Prometheus+Grafana报表/监控
参考资料: pymysql 单独获取表的栏位名称 pymysql返回数据为字典形式(key:value--列:值) 行列结合,作为prometheus_client的输出. 话不多说,直接上脚本. ...
- MySQL5.7 主从复制配置
一.主从复制原理 MySQL 主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致.每一个主从复制的连接,都有三个线程.拥有多个从库的主 ...
- CUDA ---- Memory Access
Memory Access Patterns 大部分device一开始从global Memory获取数据,而且,大部分GPU应用表现会被带宽限制.因此最大化应用对global Memory带宽的使用 ...
- ora-01830:日期格式图片在转换整个输入字符串之前结束
在to_date的时候因为 fldsj这个字段的大小 与 ‘yyyy-MM-dd’不符合 所以需要截取下fldsj字段的大小 to_char(to_date(substr(fldsj,1,10),' ...
- Emacs矩形操作
原始矩形块模式 emacs以C-x r开头的命令来进行矩形操作.先用C-space或者C-@设一个mark,移动光标到另一点,用以下命令进行列操作: C-x r r 复制一个矩形区域到寄存器 C-x ...
- 升级 macOS Mojave 后部分软件 (如 VS Code) 字体变虚的解决方法
目前有些朋友的设备可能还是“非 Retina” 显示器,那这样如果升级到 Mojave 后你会发现文字不清晰了,这是因为 Mojave 默认关闭了文字次像素渲染字体,你需要在终端里执行: defaul ...
- Nuxt.js实践篇
nuxt.js 追求完美,相信大家都是这样的.因为前后端分离的弊端性,在项目构建时,浏览器并不会捕捉到项目的内容,所以开始,笔者决定引入nuxt.js文件来配合vue完成Server Slider R ...
- Markdown的写法
这里只介绍Markdown的书写格式.在github中显示出来. 当你看到下面两张图片时,你会发现区别还是蛮大的. 标题: 首先>就是最左边的那条竖线,但是=(最高阶标题)和-(第二阶标题). ...
- Future接口和FutureTask类【FutureTask实现了Runnable和Future接口】
Future API: public interface Future<V> { /** * Attempts to cancel execution of this task. This ...
- C#/.NET 使用 CommandLineParser 来标准化地解析命令行
CommandLineParser 是一款用于解析命令行参数的 NuGet 包.你只需要关注你的业务,而命令行解析只需要极少量的配置代码. 本文将介绍如何使用 CommandLineParser 高效 ...