客运综合管理系统项目解析-调度管理-临时加班
来源:互联网 发布:java离线安装包 32位 编辑:程序博客网 时间:2024/04/28 23:40
2.2-1 临时加班:
该功能模块可与售票、检票管理联动进行。如调度进行临时加班处理后,票房就可以对新增加的班次进行售票,无需人工通知。而班次延时的执行,又使对应班次的售票、检票时间也相应延长。功能如图2.2-1:
从界面上可以看到我们这里用到工具箱的控件有:
控件名称
说明
容器控件(框)GroupBox
每个控件都可以根据需要的功能更改其属性,右键查看.也可以进行编辑事件-->找到一个闪电图标点击查看需要的事件,例如:查询按钮(btnSrean)是修改过按钮文本Text属性的重命名!
btnSrean_Click这是单击查询事件,还有很多的事件根据项目需求找到来编辑.
公共控件(下拉框)ComboBox
公共控件(文字描写)Label
公共控件(按钮)Button
公共控件(日期)DateTimePicker
公共控件(文本框)TextBox
所有Windows窗体(dgv)DataGridView
公共控件(单选框)CheckBox
临时加班功能实现:
第一步:数据库
1、 表与表关系(图2.2-2)
从上面可以知道用到的表有:
表1:员工表 (StaffList)
主要包含如下字段信息:(说明)
列名
数据类型
主键/外键
说明
StaffID
int - Identity
主键
员工ID
StaffNumber
char (100)
员工编号
StaffName
char (100)
员工姓名
Sex
char (100)
性别
IdentityCardNumber
char (100)
身份证号
HomeLocation
char (100)
家庭地址
Phone
char (100)
电话
StaffTypeID
int
外键
员工类型ID
OrganizationID
int
外键
机构ID
StationID
int
外键
站点ID
Remarks
char (100)
备注
LeaveOfficeNo
bit
离职否
InvokingNo
bit
调用否
Date
datetime
日期
Photo
nvarchar (3000)
相片
表2:站点表 (StationList)
主要包含如下字段信息:(说明)
列名
数据类型
主键/外键
说明
StationID
int - Identity
主键
站点ID
StationNumber
char (100)
站点编号
StationName
char (100)
站点名称
WindowID
int
外键
窗口ID
StopNo
bit
调用否
表3:司机表 (DriverList)
主要包含如下字段信息:(说明)
列名
数据类型
主键/外键
说明
DriverID
int - Identity
主键
司机ID
DriverNumber
char (100)
司机编号
WorkValue
char (100)
工价
DriveCardNumber
char (100)
驾驶证号
GrantDriveVehicleTypeID
int
外键
准驾车型ID
FollowEnterpriseQualificationCard
char (100)
从业资格证
CardCheckDate
datetime
证件验期
Remarks
char (100)
备注
MountGuardCardValidityDate
datetime
上岗证有效期
CardLicenseNewsID
int
外键
证照信息ID
StaffID
int
外键
员工ID
Picture
char (100)
图片
下面开始编写数据库储存过程:
数据库对应逻辑层(BLL)和界面层(UIL)文件夹:SchedulingManage_frmTemporaryOvertime(临时加班窗体和对应的类的存储过程)
USE [客运综合管理系统2015]GO/****** Object: StoredProcedure [dbo].[SchedulingManage_frmTemporaryOvertime] Script Date: 05/30/2015 19:42:38 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:<Author,,Name>-- Create date: <Create Date,,>-- Description:<Description,,>-- =============================================ALTER PROCEDURE [dbo].[SchedulingManage_frmTemporaryOvertime]--调度管理-临时加班 @Type CHAR(200)='',@StartTime DATETIME='',@EndTime DATETIME='',@TimeLong CHAR(100)='', @OvertimeWages DECIMAL(18,3)=0,@StaffID INT=0,@NullifyNo BIT=0ASBEGIN IF @Type='frmTemporaryOvertime_Load_cboStaffName'--绑定cboStaffNameBEGIN SELECT StaffID, LTRIM(RTRIM(StaffName))AS StaffName FROM StaffList END IF @Type='frmTemporaryOvertime_Load_cboCheckTicketMouth'--绑定cboCheckTicketMouthBEGIN SELECT StationID, LTRIM(RTRIM(StationName))AS StationName FROM StationList END IF @Type='frmTemporaryOvertime_Load_dgvStaffNews'--绑定dgvStaffNewsBEGIN SELECT StaffList.StaffID, LTRIM(RTRIM(StaffList.StaffNumber))AS StaffNumber, LTRIM(RTRIM(StaffList.StaffName))AS StaffName, LTRIM(RTRIM(StaffList.Sex))AS Sex, LTRIM(RTRIM(StaffList.IdentityCardNumber))AS IdentityCardNumber, LTRIM(RTRIM(StaffList.HomeLocation))AS HomeLocation, LTRIM(RTRIM(StaffList.Phone))AS Phone, LTRIM(RTRIM(StationList.StationName))AS StationName, LTRIM(RTRIM(StaffList.Remarks))AS Remarks, StaffList.LeaveOfficeNo, StaffList.InvokingNo FROM StaffList INNER JOIN StationList ON StaffList.StationID = StationList.StationID ORDER BY StaffList.StaffID DESC END IF @Type='frmTemporaryOvertime_Insert_dgvTemporaryOvertime'--加班dgvTemporaryOvertimeBEGIN INSERT INTO OvertimeList (StartTime, EndTime, TimeLong, OvertimeWages, StaffID,NullifyNo) VALUES (@StartTime,@EndTime,@TimeLong,@OvertimeWages,@StaffID,0) END IF @Type='frmTemporaryOvertime_Load_dgvTemporaryOvertime'--加班信息BEGIN SELECT OvertimeID, StartTime, EndTime, TimeLong, OvertimeWages, StaffID, NullifyNo FROM OvertimeList WHERE OvertimeList.StaffID=@StaffID END IF @Type='frmTemporaryOvertime_Load_AlldgvTemporaryOvertime'--全部加班信息显示BEGIN SELECT OvertimeID, StartTime, EndTime, LTRIM(RTRIM(TimeLong))AS TimeLong, LTRIM(RTRIM(OvertimeWages))AS OvertimeWages, NullifyNo, StaffID FROM OvertimeList ORDER BY OvertimeList.StartTime DESC--数据按日期最新排序 ENDEND
第二步:服务端BLL(逻辑层)写方法<---调用数据库代码:
对应文件夹:SchedulingManage_frmTemporaryOvertime.cs(临时加班类)
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ServiceModel;//添加命名空间using System.Data;//添加命名空间using System.Data.SqlClient;//添加命名空间namespace BLL客运综合管理系统.SchedulingManage{ [ServiceContract]//添加服务标签 public class frmTemporaryOvertime { DALPublic.DALMethod myDALMethod = new DALPublic.DALMethod();//实例化调用数据库存储过程方法 #region 绑定cboStaffName [OperationContract]//添加行为标签 public DataSet frmTemporaryOvertime_Load_cboStaffName()//编写方法 { SqlParameter[] mySqlParameters = { new SqlParameter("@Type", SqlDbType.Char), }; mySqlParameters[0].Value = "frmTemporaryOvertime_Load_cboStaffName";//方法名称对应数据库方法名称 DataTable dt = myDALMethod.QueryDataTable("SchedulingManage_frmTemporaryOvertime", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds } #endregion #region 绑定cboCheckTicketMouth [OperationContract] public DataSet frmTemporaryOvertime_Load_cboCheckTicketMouth() { SqlParameter[] mySqlParameters = { new SqlParameter("@Type", SqlDbType.Char), }; mySqlParameters[0].Value = "frmTemporaryOvertime_Load_cboCheckTicketMouth"; DataTable dt = myDALMethod.QueryDataTable("SchedulingManage_frmTemporaryOvertime", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; } #endregion #region 绑定dgvStaffNews员工信息 [OperationContract] public DataSet frmTemporaryOvertime_Load_dgvStaffNews() { SqlParameter[] mySqlParameters = { new SqlParameter("@Type", SqlDbType.Char), }; mySqlParameters[0].Value = "frmTemporaryOvertime_Load_dgvStaffNews"; DataTable dt = myDALMethod.QueryDataTable("SchedulingManage_frmTemporaryOvertime", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; } #endregion #region 加班dgvTemporaryOvertime信息(Insert) [OperationContract] public int frmTemporaryOvertime_Insert_dgvTemporaryOvertime(DateTime dtStartTime, DateTime dtEndTime, string strTimeLong, decimal decOvertimeWages, int intStaffID) { SqlParameter[] mySqlParameters = { new SqlParameter("@Type", SqlDbType.Char), new SqlParameter("@StartTime", SqlDbType.DateTime), new SqlParameter("@EndTime", SqlDbType.DateTime), new SqlParameter("@TimeLong", SqlDbType.Char), new SqlParameter("@OvertimeWages", SqlDbType.Decimal), new SqlParameter("@StaffID", SqlDbType.Int), }; mySqlParameters[0].Value = "frmTemporaryOvertime_Insert_dgvTemporaryOvertime"; mySqlParameters[1].Value =dtStartTime; mySqlParameters[2].Value =dtEndTime; mySqlParameters[3].Value =strTimeLong; mySqlParameters[4].Value = decOvertimeWages; mySqlParameters[5].Value = intStaffID; return myDALMethod.UpdateData("SchedulingManage_frmTemporaryOvertime", mySqlParameters); } #endregion #region 根据StaffID查询加班信息dgvTemporaryOvertime [OperationContract] public DataSet frmTemporaryOvertime_Load_dgvTemporaryOvertime(int intStaffID) { SqlParameter[] mySqlParameters = { new SqlParameter("@Type", SqlDbType.Char), new SqlParameter("@StaffID", SqlDbType.Int), }; mySqlParameters[0].Value = "frmTemporaryOvertime_Load_dgvTemporaryOvertime"; mySqlParameters[1].Value = intStaffID; DataTable dt = myDALMethod.QueryDataTable("SchedulingManage_frmTemporaryOvertime", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; } #endregion #region 查询全部加班信息dgvTemporaryOvertime信息 [OperationContract] public DataSet frmTemporaryOvertime_Load_AlldgvTemporaryOvertime() { SqlParameter[] mySqlParameters = { new SqlParameter("@Type", SqlDbType.Char), }; mySqlParameters[0].Value = "frmTemporaryOvertime_Load_AlldgvTemporaryOvertime"; DataTable dt = myDALMethod.QueryDataTable("SchedulingManage_frmTemporaryOvertime", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; } #endregion }}
第三步:客户端UIL(界面层)写调用方法<---调用BLL(逻辑层)代码:
对应文件夹:SchedulingManage_frmTemporaryOvertime.cs(临时加班窗体)对应各种功能详解:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;//添加命名空间namespace XX集团客运综合管理系统client.SchedulingManage{ public partial class frmTemporaryOvertime : Form { public frmTemporaryOvertime() { InitializeComponent(); } public delegate void ChangeFormColor(bool topmost); public delegate void ChangeFormColor1(bool topmost1); public event ChangeFormColor ChangeColor;//自定义方法调用窗体颜色 public event ChangeFormColor1 ChangeColor1;//自定义方法调用 BLL客运综合管理系统.SchedulingManage.frmTemporaryOvertime.frmTemporaryOvertimeClient myfrmTemporaryOvertimeClient = new BLL客运综合管理系统.SchedulingManage.frmTemporaryOvertime.frmTemporaryOvertimeClient();//实例化调用BLL方法 private void frmLingShiJiaBan_FormClosing(object sender, FormClosingEventArgs e) { ChangeColor1(true); ChangeColor(true); } #region frmTemporaryOvertime_Load事件功能 DataTable dtdgvStaffNews; DataTable dtAlldgvTemporaryOvertime;//声明全局变量使用 private void frmTemporaryOvertime_Load(object sender, EventArgs e) { try { DataTable dtcboStaffName = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_cboStaffName().Tables[0];//绑定数据DataTable cboStaffName.DataSource = dtcboStaffName;//绑定员工姓名下拉框 cboStaffName.DisplayMember = "StaffName"; cboStaffName.ValueMember = "StaffID"; cboStaffName.SelectedValue = -1; cboOvertimeMan.DataSource = dtcboStaffName.Copy();//绑定加班人下拉框 cboOvertimeMan.DisplayMember = "StaffName"; cboOvertimeMan.ValueMember = "StaffID"; cboOvertimeMan.SelectedValue = -1; DataTable dtcboCheckTicketMouth = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_cboCheckTicketMouth().Tables[0]; cboCheckTicketMouth.DataSource = dtcboCheckTicketMouth;//绑定检票口下拉框 cboCheckTicketMouth.DisplayMember = "StationName"; cboCheckTicketMouth.ValueMember = "StationID"; cboCheckTicketMouth.SelectedValue = -1; dtdgvStaffNews = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_dgvStaffNews().Tables[0]; dgvStaffNews.DataSource = dtdgvStaffNews;//查询dgv员工信息 this.dgvStaffNews = SYS_PublicStaticClass.SetDgv(dgvStaffNews);//dgv序号 this.dgvStaffNews.CellBorderStyle = DataGridViewCellBorderStyle.Sunken;//设置dgv三维凹陷边框 this.dgvStaffNews.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv列标题居中 this.dgvStaffNews.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv单元格内容居中 string[] strStaffNumber = new string[dtdgvStaffNews.Rows.Count]; for (int i = 0; i < dtdgvStaffNews.Rows.Count; i++) { strStaffNumber[i] = dtdgvStaffNews.Rows[i]["StaffNumber"].ToString().Trim(); } txtStaffNumber.AutoCompleteSource = AutoCompleteSource.CustomSource;//自动完成源--员工编号 txtStaffNumber.AutoCompleteCustomSource.AddRange(strStaffNumber); txtStaffNumber.AutoCompleteMode = AutoCompleteMode.SuggestAppend; string[] strRemarks = new string[dtdgvStaffNews.Rows.Count]; for (int j = 0; j < dtdgvStaffNews.Rows.Count; j++) { strRemarks[j] = dtdgvStaffNews.Rows[j]["Remarks"].ToString().Trim(); } txtRemarks.AutoCompleteSource = AutoCompleteSource.CustomSource;//自动完成源方法--备注 txtRemarks.AutoCompleteCustomSource.AddRange(strRemarks); txtRemarks.AutoCompleteMode = AutoCompleteMode.SuggestAppend; dtAlldgvTemporaryOvertime = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_AlldgvTemporaryOvertime().Tables[0];//绑定DGV信息 dgvTemporaryOvertime.DataSource = dtAlldgvTemporaryOvertime;//查询DGV全部加班信息 this.dgvTemporaryOvertime = SYS_PublicStaticClass.SetDgv(dgvTemporaryOvertime);//序号 this.dgvTemporaryOvertime.CellBorderStyle = DataGridViewCellBorderStyle.Sunken;//设置dgv三维凹陷边框 this.dgvTemporaryOvertime.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv列标题居中 this.dgvTemporaryOvertime.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv单元格内容居中 dtpStartTime.Format = DateTimePickerFormat.Custom;//设置时间格式2015-04-15 16:26:00 dtpStartTime.CustomFormat = "yyyy-MM-dd HH:mm:ss"; dtpEndTime.Format = DateTimePickerFormat.Custom; dtpEndTime.CustomFormat = "yyyy-MM-dd HH:mm:ss"; } catch { MessageBox.Show("请认真检查绑定的数据是否有问题!"+"\n否则系统会崩溃!!!");//提示框 } } #endregion #region 多条件查询功能 private void btnSearch_Click(object sender, EventArgs e) { try { if (chkInvokingNoOne.Checked == true)//判断绑定选择否 { DataView dvdgvStaffNewsOne = new DataView(dtdgvStaffNews);//实例化DataView调用 dvdgvStaffNewsOne.RowFilter = "InvokingNo =" + chkInvokingNo.Checked; dtdgvStaffNews = dvdgvStaffNewsOne.ToTable(); dgvStaffNews.DataSource = dtdgvStaffNews;//绑定DGV数据 DataView dvdgvStaffNews = new DataView(dtdgvStaffNews); string strcboStaffName = "";//声明变量并赋值 string strtxtStaffNumber = ""; string strcboCheckTicketMouth = ""; string strtxtRemarks = ""; if (cboStaffName.Text != "")//判断文本是否为空 { strcboStaffName = cboStaffName.Text.ToString().Trim();//获取文本值 } if (txtStaffNumber.Text != "") { strtxtStaffNumber = txtStaffNumber.Text.ToString().Trim(); } if (cboCheckTicketMouth.Text != "") { strcboCheckTicketMouth = cboCheckTicketMouth.Text.Trim(); } if (txtRemarks.Text != "") { strtxtRemarks = txtRemarks.Text.ToString().Trim(); } dvdgvStaffNews.RowFilter = "StaffName LIKE '%" + strcboStaffName + "%'AND StaffNumber LIKE '%" + strtxtStaffNumber + "%'AND StationName LIKE '%" + strcboCheckTicketMouth + "%'AND Remarks LIKE '%" + strtxtRemarks + "%'"; dgvStaffNews.DataSource = dvdgvStaffNews.ToTable();//查询相应数据 } if (chkInvokingNoOne.Checked == false)//当单选框为没选择状态时 { DataTable dtdgvStaffNewsOne = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_dgvStaffNews().Tables[0];//获取DGV数据 DataView dvdgvStaffNews = new DataView(dtdgvStaffNewsOne); string strcboStaffName = ""; string strtxtStaffNumber = ""; string strcboCheckTicketMouth = ""; string strtxtRemarks = "";//声明变量并赋值 if (cboStaffName.Text != "") { strcboStaffName = cboStaffName.Text.ToString().Trim();//获取文本值 } if (txtStaffNumber.Text != "") { strtxtStaffNumber = txtStaffNumber.Text.ToString().Trim(); } if (cboCheckTicketMouth.Text != "") { strcboCheckTicketMouth = cboCheckTicketMouth.Text.Trim(); } if (txtRemarks.Text != "") { strtxtRemarks = txtRemarks.Text.ToString().Trim(); } dvdgvStaffNews.RowFilter = "StaffName LIKE '%" + strcboStaffName + "%'AND StaffNumber LIKE '%" + strtxtStaffNumber + "%'AND StationName LIKE '%" + strcboCheckTicketMouth + "%'AND Remarks LIKE '%" + strtxtRemarks + "%'"; dgvStaffNews.DataSource = dvdgvStaffNews.ToTable(); } } catch { MessageBox.Show("查询失败!字符串拼接是否有问题?请检查!!!");//显示提示框内容 } } #endregion #region 加班功能 private void btnOvertime_Click(object sender, EventArgs e) { if (txtOvertimeWages.Text == "" || dtpStartTime.Value >= dtpEndTime.Value)//判断两个条件是否同时成立 { MessageBox.Show("加班工资不能为空!或者结束时间应大于开始时间!!!");//提示框 return; } if (cboOvertimeMan.Text == "") { MessageBox.Show("对不起!没有选择加班人则不能加班!!!"); return; } else { if (MessageBox.Show("您确定要加班?", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Question) == DialogResult.OK) { try { DateTime dtStartTime = Convert.ToDateTime(dtpStartTime.Value.ToString().Trim());//时间格式转换 DateTime dtEndTime = Convert.ToDateTime(dtpEndTime.Value.ToString().Trim()); string strTimeLong = (dtEndTime - dtStartTime).ToString();//文本时长的结算 decimal decOvertimeWages = Convert.ToDecimal(txtOvertimeWages.Text.ToString().Trim()); int intStaffID = Convert.ToInt32(cboOvertimeMan.SelectedValue);//获取ID int OvertimeCount = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Insert_dgvTemporaryOvertime(dtStartTime, dtEndTime, strTimeLong, decOvertimeWages, intStaffID); if (OvertimeCount > 0) { MessageBox.Show("加班成功!");//提示框 dgvStaffNews.DataSource = dtdgvStaffNews;//刷新查询员工信息 dgvTemporaryOvertime.DataSource = dtAlldgvTemporaryOvertime;//刷新查询全部加班信息 // btnReset_Click(null, null); } else { MessageBox.Show("加班失败了!"); dgvStaffNews.DataSource = dtdgvStaffNews;//刷新查询员工信息 dgvTemporaryOvertime.DataSource = dtAlldgvTemporaryOvertime;//刷新查询全部加班信息 //btnReset_Click(null, null); return; } } catch { MessageBox.Show("数据有问题!请检查!!!"); } } } } #endregion #region 重置功能 private void btnReset_Click(object sender, EventArgs e) { cboStaffName.SelectedValue = -1;//隐藏值 txtStaffNumber.Text = "";//清空文本 cboCheckTicketMouth.SelectedValue = -1; txtRemarks.Text = ""; chkInvokingNo.Checked = false; txtOvertimeWages.Text = ""; dgvStaffNews.DataSource = dtdgvStaffNews;//刷新查询员工信息 dgvTemporaryOvertime.DataSource = dtAlldgvTemporaryOvertime;//刷新查询全部加班信息 } #endregion #region dgvStaffNews单击获取ID功能 private void dgvStaffNews_CellClick(object sender, DataGridViewCellEventArgs e)//事件 { PublicStaticObject.intStaffID = Convert.ToInt32(dgvStaffNews.CurrentRow.Cells["员工ID"].Value);//获取ID DataTable dtdgvTemporaryOvertime = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_dgvTemporaryOvertime(PublicStaticObject.intStaffID).Tables[0]; dgvTemporaryOvertime.DataSource = dtdgvTemporaryOvertime;//根据员工ID查询加班信息 } #endregion }}
以上是调度管理-临时加班功能实现步骤:数据库-->BLL-->UIL
-------实现功能待续!!!- 客运综合管理系统项目解析-调度管理-临时加班
- 客运综合管理系统项目解析-检票管理-检票
- 客运综合管理系统项目解析-检票管理-补检
- 客运综合管理系统项目解析-检票管理-检票查询
- 客运综合管理系统项目解析-领导查询-售票查询
- 客运综合管理系统项目—报班统计(车辆调度报班)
- 客运综合管理系统项目—售票管理(售票)
- 客运综合管理系统项目—售票管理(退票)
- 客运综合管理系统项目—售票管理(废票)
- 客运综合管理系统项目—售票管理(留票)
- 客运综合管理系统项目解析-WCF-新建项目与服务端架构
- 客运综合管理系统项目解析-WCF-客户端-配置详细流程-登陆信息
- 客运综合管理系统项目解析—安全检查(模块)-司机信息
- 客运综合管理系统项目解析-安全检查(模块)-车辆信息
- 客运综合管理系统项目解析-安全检查(模块)-车辆安检情况查询
- 客运综合管理系统项目解析-安全检查(模块)-出站检查查询
- 客运综合管理系统项目解析-领导查询(模块)-退票查询
- 客运综合管理系统项目解析-领导查询(模块)-废票查询
- 第12周 项目3 日期时间类
- VFL(Auto Layout)
- svn 总结(二)——冲突
- STL源码剖析---deque
- JAVA基础笔记——Collections与Arrays
- 客运综合管理系统项目解析-调度管理-临时加班
- MYSQL常用命令详解
- va_arg
- Oracle 执行计划(Explain Plan) 说明
- poi导入excel2007没问题导入2003报错IncompatibleClassChangeError
- cognos cube分区
- 解决不同版本opencv链接库出错问题
- 【C++总结】关于函数返回对象析构的问题
- 前景提取--PBAS算法