客运综合管理系统项目—售票管理(库存/取票)
来源:互联网 发布:西点学校排行知乎 编辑:程序博客网 时间:2024/05/11 18:06
2.2 售票管理
2.2.1 库存/取票
库存/取票这个模块包括,入库,出库,按时间查询入库,按时间和接收用户查询出库,取票等功能; 2.2.1(图1)是库存模块的界面,2.2.1(图2)是取票模块的界面,
2.2.1(图1)
2.2.1(图2)
从界面上可以看到我们这里用到的控件有
控件名称
说明
日期控件(DateTimePicker)
控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以编辑事件。右击控件选择属性,在跳出框里面选择带有雷电的图标,在里面可以选择属性
下拉框(ComboBox)
文本(TextBox)
按钮(Button)
表格(DataGridView)
容器(Panel)
查询功能实现:
第一步:数据库
1、表与关系
2.2.1(图3)
表1.用户表(dbo.UserList)
列名 数据类型 主键/外键 说明
UserID
int
主键
用户ID
UserNumber
char (100)
用户编码
StaffID
int
外键
员工表.员工ID
WorkValue
char (100)
工价
LimitsOfAuthorityGroupID
int
外键
权限组ID
Password
char (100)
密码
Remarks
char (100)
备注
StopUseNo
bit
停用否
表2.员工表(dbo.StaffList)
列名 数据类型 主键/外键 说明
StaffID
int
主键
员工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)
相片
表3.取票表(ReceiveBillList)
列名 数据类型 主键/外键 说明
ReceiveBillID
int
主键
接收票据ID
UserID
int
外键
用户表.用户ID
BillTypeID
int
外键
票据类型表.票据类型ID
OpenTicketNumber
char (100)
开始票号
GetNumber
decimal (18)
领用数量
EndTicketNumber
char (100)
结束票号
BillStatusID
int
外键
票据状态表.票据状态ID
Remarks
char (100)
备注
ReceiveBillTime
datetime
取票时间
SurplusNumber
decimal (18)
剩余数量
表4.票据状态表(BillStatusList)
列名 数据类型 主键/外键 说明
BillStatusID
int
主键
票据状态ID
BillStatus
char (100)
票据状态
1、设置表格(DataGridView)控件(公共静态方法的设定)
#region 加载dgvCellFormatting方法 public static DataGridView SetDgv(DataGridView dgv) { dgv.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(dgv_CellFormatting);//公共方法 dgv.MultiSelect = false;//不允许选择多行 dgv.AllowUserToAddRows = false;//不能自动添加行 dgv.ReadOnly = true;//dgv仅仅可以读 dgv.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;//选择一个单元格,则选择一行数据 dgv.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;// dgv.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;//对单元格的内容进行调整 return dgv; //返回dgv } #endregion #region 加载dgvCellFormatting方法 public static void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)//第二个公共方法 { try { DataGridView dgv = sender as DataGridView;//声明一个dgv DataGridViewRow CurrentRow = dgv.Rows[e.RowIndex];//dgv的当前行等于 CurrentRow.HeaderCell.Value = Convert.ToString(e.RowIndex + 1); } catch { }//try{ }catch{ }当有错误时跳过执行 界面的Load事件: this.dgvBillStock = SYS_PublicStaticClass.SetDgv(dgvBillStock);//显示序号(调用上面静态的方法)
1、(DataGridView)绑定数据
第一步:数据库的存储过程,查询库存的信息
IF @TYPE ='frmSatffTakeTicket_SelectTicketSearch'--dgv的绑定BEGIN SELECT ReceiveBillList.ReceiveBillID, LTRIM(RTRIM(ReceiveBillList.OpenTicketNumber))AS OpenTicketNumber, LTRIM(RTRIM(ReceiveBillList.GetNumber))AS GetNumber, LTRIM(RTRIM(ReceiveBillList.EndTicketNumber))AS EndTicketNumber, BillStatusList.BillStatusID, UserList.UserID, StaffList.StaffID, LTRIM(RTRIM(StaffList.StaffName))AS StaffName, LTRIM(RTRIM(BillStatusList.BillStatus))AS BillStatus, ReceiveBillList.ReceiveBillTime, LTRIM(RTRIM(ReceiveBillList.Remarks))AS Remarks, LTRIM(RTRIM(ReceiveBillList.SurplusNumber))AS SurplusNumber FROM ReceiveBillList INNER JOIN BillStatusList ON ReceiveBillList.BillStatusID = BillStatusList.BillStatusID INNER JOIN UserList ON ReceiveBillList.UserID = UserList.UserID INNER JOIN StaffList ON UserList.StaffID = StaffList.StaffID WHERE ReceiveBillList.BillStatusID=4//范围,当票据状态为领用时符合要求 ORDER BY ReceiveBillList.ReceiveBillTime DESC--按时间从大到小排列END
第二步:逻辑层(BLL)代码
[OperationContract] public DataSet frmSatffTakeTicket_SelectTicketSearch()//库存的信息 { SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char) }; mySqlParameter[0].Value = "frmSatffTakeTicket_SelectTicketSearch"; DataTable myDataTable = myDALMethod.QueryDataTable("SellTicketManage_frmSatffTakeTicket", mySqlParameter); DataSet myDataSet = new DataSet(); myDataSet.Tables.Add(myDataTable); return myDataSet;//返回值 }
第三步:界面层(UIL)代码,在窗体的Load事件中绑定dgv的数据
在Load事件里面写:
DataTable dtSearch = myfrmSatffTakeTicketClient.frmSatffTakeTicket_SelectTicketSearch().Tables[0]; dgvSearch.DataSource = dtSearch;//DataGridView 名称.数据源=数据集的值
1、下拉框(公共静态方法的设定)
#region 设置下拉框 public static ComboBox SetXiaLaKuang(ComboBox cbo下拉框, DataTable dt数据表, string str列ID, string str列名) { try { cbo下拉框.DataSource = dt数据表;//下拉框绑定的值 cbo下拉框.DisplayMember = str列名; cbo下拉框.ValueMember = str列ID; return cbo下拉框; } catch (Exception exc) { MessageBox.Show(exc.ToString()); return null;//返回空 } } #endregion #region 设置自动完成源 public static ComboBox SetXiaLaKuang(ComboBox cbo下拉框, DataTable dt数据表, string str列ID, string str列名, bool bol是否完成源) { try { cbo下拉框.DataSource = dt数据表; cbo下拉框.DisplayMember = str列名; cbo下拉框.ValueMember = str列ID; cbo下拉框.DropDownStyle = ComboBoxStyle.DropDown; string [] str =new string[dt数据表.Rows.Count];//声明一个数组 for (int x = 0; x < dt数据表.Rows.Count; x++)//循环dt数据表 { str[x] = dt数据表.Rows[x][str列名].ToString(); } cbo下拉框.AutoCompleteSource = AutoCompleteSource.CustomSource;//下拉框的样式 cbo下拉框.AutoCompleteCustomSource.AddRange(str); cbo下拉框.AutoCompleteMode = AutoCompleteMode.Suggest; return cbo下拉框;//符返回值给下拉框 } catch (Exception exc) { MessageBox.Show(exc.ToString()); return null; } } #endregion
调用下拉框公共静态方法:
Load事件添加
DataTable dtReceiveUser = myfrmSatffTakeTicketClient.frmSatffTakeTicket_SelectSatff().Tables[0];//获取数据集 cboReceiveUser = SYS_PublicStaticClass.SetXiaLaKuang(cboReceiveUser, dtReceiveUser, "UserID", "StaffName");//调用静态方法,控件名+数据集名+用户ID+用户名 cboReceiveUser.SelectedIndex = -1;
1、查询出库信息
第一步:数据库的存储过程,
IF @TYPE ='frmSatffTakeTicket_SelectTicketSearch'--dgv的绑定BEGIN SELECT ReceiveBillList.ReceiveBillID, LTRIM(RTRIM(ReceiveBillList.OpenTicketNumber))AS OpenTicketNumber, LTRIM(RTRIM(ReceiveBillList.GetNumber))AS GetNumber, LTRIM(RTRIM(ReceiveBillList.EndTicketNumber))AS EndTicketNumber, BillStatusList.BillStatusID, UserList.UserID, StaffList.StaffID, LTRIM(RTRIM(StaffList.StaffName))AS StaffName, LTRIM(RTRIM(BillStatusList.BillStatus))AS BillStatus, ReceiveBillList.ReceiveBillTime, LTRIM(RTRIM(ReceiveBillList.Remarks))AS Remarks, LTRIM(RTRIM(ReceiveBillList.SurplusNumber))AS SurplusNumber FROM ReceiveBillList INNER JOIN BillStatusList ON ReceiveBillList.BillStatusID = BillStatusList.BillStatusID INNER JOIN UserList ON ReceiveBillList.UserID = UserList.UserID INNER JOIN StaffList ON UserList.StaffID = StaffList.StaffID WHERE ReceiveBillList.BillStatusID=4////范围,当票据状态为领用时符合要求 ORDER BY ReceiveBillList.ReceiveBillTime DESC--按时间从大到小排列
第二步:逻辑层(BLL)代码,查询的实现
[OperationContract] public DataSet frmSatffTakeTicket_SelectTicketSearch()// { SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char) }; mySqlParameter[0].Value = "frmSatffTakeTicket_SelectTicketSearch"; DataTable myDataTable = myDALMethod.QueryDataTable("SellTicketManage_frmSatffTakeTicket", mySqlParameter); DataSet myDataSet = new DataSet(); myDataSet.Tables.Add(myDataTable); return myDataSet; }
第三步:界面层(UIL)代码,查询的实现
private void btnSearch_Click(object sender, EventArgs e) { if (chkTime.Checked == true)//当复选框打上勾时 { DateTime dtTimeOne = Convert.ToDateTime(dtpTimeOne.Text); DateTime dtTimeTwo = Convert.ToDateTime(dtpTimeTwo.Text);//声明一个datetine,它的值等于时间控件的数据 string strReceiveUser = cboReceiveUser.Text.ToString().Trim();//声明一个字符串,它的值等于一个下拉框的值 //string strBillType = cboBillType.Text.ToString().Trim(); DataTable dtSearch = myfrmSatffTakeTicketClient.frmSatffTakeTicket_SelectTicketSearch().Tables[0];//数据集获取数据 DataView dv = new DataView(dtSearch);//声明一个DataView,它的数据时数据集的数据 dv.RowFilter = "(ReceiveBillTime>='" + dtTimeOne + "'AND ReceiveBillTime<='" + dtTimeTwo + "')";//选择时间控件的中查询的数据 dgvSearch.DataSource = dv.ToTable();//给dgv赋值 if (cboReceiveUser.Text != "") { DataView dv1 = new DataView(dtSearch); dv1.RowFilter = "StaffName like '%" + strReceiveUser + "%'";//选择文本框中查询的数据 dtSearch = dv1.ToTable(); dgvSearch.DataSource = dv1; } else { dgvSearch.DataSource = dtSearch; } } else { string strReceiveUser = cboReceiveUser.Text.ToString().Trim(); DataTable dtSearch = myfrmSatffTakeTicketClient.frmSatffTakeTicket_SelectTicketSearch().Tables[0]; if (cboReceiveUser.Text != "") { DataView dv1 = new DataView(dtSearch); dv1.RowFilter = "StaffName like '%" + strReceiveUser + "%'"; dtSearch = dv1.ToTable(); dgvSearch.DataSource = dv1; } else { dgvSearch.DataSource = dtSearch; } timSearchTicket.Enabled = true; dtpTimeOne.Format = DateTimePickerFormat.Custom;//格式Format dtpTimeOne.CustomFormat = "yyyy-MM-dd HH:mm"; dtpTimeTwo.Format = DateTimePickerFormat.Custom; dtpTimeTwo.CustomFormat = "yyyy-MM-dd HH:mm";//设置时间控件的格式为(2015-01-20 16:52) txtReceiveUser.Text = PublicStaticObject.strStaffName; } }
1、新增入库
第一步:数据库的存储过程
IF @TYPE='frmSatffTakeTicket_InsertLaidUp'--新增入库BEGININSERT INTO LaidUpList(LaidUpTime, LaidUpNumber, Remarks)VALUES (@LaidUpTime, @LaidUpNumber, @Remarks)END
第二步:逻辑层(BLL)代码,新增入库信息
[OperationContract] public int frmSatffTakeTicket_InsertLaidUp(DateTime dtLaidUpTime,string strLaidUpNumber,string strRemarks)//--新增入库 { SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char), new SqlParameter("@LaidUpTime", SqlDbType.DateTime), new SqlParameter("@LaidUpNumber", SqlDbType.Char), new SqlParameter("@Remarks", SqlDbType.Char),}; mySqlParameter[0].Value = "frmSatffTakeTicket_InsertLaidUp"; mySqlParameter[1].Value = dtLaidUpTime; mySqlParameter[2].Value = strLaidUpNumber; mySqlParameter[3].Value = strRemarks; return myDALMethod.UpdateData("SellTicketManage_frmSatffTakeTicket", mySqlParameter); }
第三步:界面层(UIL)代码
private void btnLaidUp_Click(object sender, EventArgs e) { if (txtLaidUp.Text == "") { MessageBox.Show("入库数量为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);//提示框 return; } if (MessageBox.Show("您确定入库,数量为:" + txtLaidUp.Text.ToString().Trim() + "?", "操作提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)//提示框,有确定和取消按钮 { DateTime dtLaidUpTime = DateTime.Now;//绑定值 string strLaidUpNumber = txtLaidUp.Text.ToString().Trim(); string strRemarks = txtRemarksOne.Text.ToString().Trim(); int i = myfrmSatffTakeTicketClient.frmSatffTakeTicket_InsertLaidUp(dtLaidUpTime, strLaidUpNumber, strRemarks); if (i > 0) { MessageBox.Show("入库完成!");//提示框 string strGetNumber = Convert.ToString(Convert.ToDecimal(dgvBillStock.CurrentRow.Cells["GetNumber"].Value) + Convert.ToDecimal(txtLaidUp.Text));//修改库存数 myfrmSatffTakeTicketClient.frmSatffTakeTicket_UpdateLaidUpNumber(strGetNumber); frmSatffTakeTicket_Load(null, null);////执行Load事件,即刷新 txtLaidUp.Text = ""; txtRemarksOne.Text = ""; } else { MessageBox.Show("系统错误!"); frmSatffTakeTicket_Load(null, null);//刷新 txtLaidUp.Text = "";//清空文本框 txtRemarksOne.Text = ""; } } }
6、新增出库
第一步:数据库的存储过程
IF @TYPE='frmSatffTakeTicket_InsertCheckTicket'--新增出库BEGININSERT INTO ReceiveBillList(UserID, OpenTicketNumber, GetNumber, EndTicketNumber, BillStatusID, Remarks, ReceiveBillTime, SurplusNumber) VALUES (@UserID, @OpenTicketNumber, @GetNumber, @EndTicketNumber, @BillStatusID, @Remarks, @ReceiveBillTime, @SurplusNumber) END
第二步:逻辑层(BLL)代码,
[OperationContract] public int frmSatffTakeTicket_InsertCheckTicket(int intUserID, string strOpenTicketNumber, Decimal sttGetNumber, string EndTicketNumber, int intBillStatusID, string strRemarks, DateTime strReceiveBillTime, decimal SurplusNumber)//新增出库 { SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char), new SqlParameter("@UserID", SqlDbType.Int), new SqlParameter("@OpenTicketNumber", SqlDbType.Char), new SqlParameter("@GetNumber", SqlDbType.Decimal), new SqlParameter("@EndTicketNumber", SqlDbType.Char), new SqlParameter("@BillStatusID", SqlDbType.Int), new SqlParameter("@Remarks", SqlDbType.Char), new SqlParameter("@ReceiveBillTime", SqlDbType.DateTime), new SqlParameter("@SurplusNumber", SqlDbType.Decimal)}; mySqlParameter[0].Value = "frmSatffTakeTicket_InsertCheckTicket"; mySqlParameter[1].Value = intUserID; mySqlParameter[2].Value = strOpenTicketNumber; mySqlParameter[3].Value = sttGetNumber; mySqlParameter[4].Value = EndTicketNumber; mySqlParameter[5].Value = intBillStatusID; mySqlParameter[6].Value = strRemarks; mySqlParameter[7].Value = strReceiveBillTime; mySqlParameter[8].Value = SurplusNumber; return myDALMethod.UpdateData("SellTicketManage_frmSatffTakeTicket", mySqlParameter); }
第三步:界面层(UIL)代码
private void btnConfirm_Click(object sender, EventArgs e) { try { if (MessageBox.Show("您确定要出库?", "操作提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)//提示框,有确定和取消按钮 { if (txtStartTicketNumber.Text == "") { MessageBox.Show("开始票号不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);//提示框,有确定和取消按钮 return; } if (txtCollarUseTicketNumber.Text == "") { MessageBox.Show("取票数量不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } if (txtTicketNumber.Text == "") { MessageBox.Show("结束票号不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } if (txtStartTicketNumber.Text == "") { MessageBox.Show("不填备注?", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } int intUserID = PublicStaticObject.UserID;//赋值 string strOpenTicketNumber = txtStartTicketNumber.Text.ToString().Trim(); decimal sttGetNumber = Convert.ToDecimal(txtCollarUseTicketNumber.Text.ToString().Trim()); string EndTicketNumber = txtTicketNumber.Text.ToString().Trim(); string strRemarks = txtRemarks.Text.ToString().Trim(); int intBillStatusID = 4; decimal SurplusNumber =Convert.ToDecimal(txtCollarUseTicketNumber.Text.ToString().Trim()); DateTime strReceiveBillTime = Convert.ToDateTime(txtSearchTime.Text.ToString().Trim()); int i = myfrmSatffTakeTicketClient.frmSatffTakeTicket_InsertCheckTicket(intUserID, strOpenTicketNumber, sttGetNumber, EndTicketNumber, intBillStatusID, strRemarks, strReceiveBillTime, SurplusNumber);//所新增传递数据的代码 if (i > 0) { MessageBox.Show("出库成功!"); string strGetNumber = Convert.ToString(Convert.ToDecimal(dgvBillStock.CurrentRow.Cells["GetNumber"].Value) - Convert.ToDecimal(txtCollarUseTicketNumber.Text)); myfrmSatffTakeTicketClient.frmSatffTakeTicket_UpdateNumber(PublicStaticObject.intBillStockID, strGetNumber); frmSatffTakeTicket_Load(null, null);//执行Load事件 } else { MessageBox.Show("出库失败!");//提示框,没有确定和取消按钮 btnCancel_Click(null, null); } } } catch { }
7、新增集体取票
第一步:数据库的存储过程
IF @TYPE='frmSeatAndTicket_InsertSeatAndTicket'--新增票连座位BEGININSERT INTO TicketNumberList(TicketNumber, ASeatNumberID, UserNo)VALUES (@TicketNumber, @ASeatNumberID, @UserNo) END
第二步:逻辑层(BLL)代码
[OperationContract] public int frmSeatAndTicket_InsertSeatAndTicket(string strTicketNumber, int intASeatNumberID, bool boolUserNo)//新增取票 { SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char), new SqlParameter("@TicketNumber", SqlDbType.Char), new SqlParameter("@ASeatNumberID", SqlDbType.Int), new SqlParameter("@UserNo", SqlDbType.Bit),}; mySqlParameter[0].Value = "frmSeatAndTicket_InsertSeatAndTicket"; mySqlParameter[1].Value = strTicketNumber; mySqlParameter[2].Value = intASeatNumberID; mySqlParameter[3].Value = boolUserNo; return myDALMethod.UpdateData("SellTicketManage_frmSeatAndTicket", mySqlParameter); }
第三步:界面层(UIL)代码
private void btnPlay_Click(object sender, EventArgs e)//集体取票按下 { try { if (PublicStaticObject.intReceiveBill > 0)//当获取的ID大于0时 { string strSurplusNumberOne = "";//声明一个字符串等于空 string strEndTicketNumber = ""; string strTicketNumber = ""; for (int i = 0; i < dgvASeat.Rows.Count; i++)//循环dgv { DataTable dtReceiveBillOne = myfrmSeatAndTicketClient.frmSeatAndTicket_SelectReceiveBillOne(PublicStaticObject.intReceiveBill).Tables[0];//在PublicStaticObject.intReceiveBill的限制下获取数据集 strSurplusNumberOne = dtReceiveBillOne.Rows[0]["SurplusNumber"].ToString().Trim();//上面字符串的值等于数据集中的某个值 strEndTicketNumber = dtReceiveBillOne.Rows[0]["EndTicketNumber"].ToString().Trim(); strTicketNumber = Convert.ToString(Convert.ToDecimal(strEndTicketNumber) - Convert.ToDecimal(strSurplusNumberOne) + 1);//将两个字符串转化为数字类型然后相减,在转化为字符串 int intASeatNumberID = (int)dgvASeat.Rows[i].Cells["ASeatNumberID"].Value; Boolean boolUserNo = true; int j = myfrmSeatAndTicketClient.frmSeatAndTicket_InsertSeatAndTicket(strTicketNumber, intASeatNumberID, boolUserNo); if (j > 0) { if (Convert.ToDecimal(strSurplusNumberOne) > 0) { myfrmSeatAndTicketClient.frmSeatAndTicket_UpdateLinkNo(intASeatNumberID); string strSurplusNumber = Convert.ToString(Convert.ToDecimal(strSurplusNumberOne) - 1);// int intReceiveBillID = PublicStaticObject.intReceiveBill; myfrmSeatAndTicketClient.frmSeatAndTicket_UpdateSurplusNumber(strSurplusNumber, intReceiveBillID); DataTable dtReceiveBill = myfrmSeatAndTicketClient.frmSeatAndTicket_SelectReceiveBill().Tables[0]; dgvReceiveBill.DataSource = dtReceiveBill;//dgv绑定数据 cboClassesOne_DropDownClosed(null, null);//刷新 } else { cboClassesOne_DropDownClosed(null, null); return;//返回 } } } } else { MessageBox.Show("请选择一项!"); } } catch { }}
仅供学习,禁止用于商业用途
- 客运综合管理系统项目—售票管理(库存/取票)
- 客运综合管理系统项目—售票管理(售票)
- 客运综合管理系统项目—售票管理(退票)
- 客运综合管理系统项目—售票管理(废票)
- 客运综合管理系统项目—售票管理(留票)
- 客运综合管理系统项目解析-领导查询-售票查询
- 客运综合管理系统项目—登录界面的实现
- 客运综合管理系统项目—出车情况
- 客运综合管理系统项目—线路管理(站点新增修改)
- 客运综合管理系统项目解析-检票管理-检票
- 客运综合管理系统项目解析-检票管理-补检
- 客运综合管理系统项目解析-检票管理-检票查询
- 客运综合管理系统项目解析-调度管理-临时加班
- 客运综合管理系统项目—报班统计(员工报班)
- 客运综合管理系统项目—报班统计(车辆调度报班)
- 客运综合管理系统项目—附加(员工图片的上传)
- 客运综合管理系统项目—附加(数据的导出)
- 客运综合管理系统项目(1) 搭建WCF框架
- hdu1166
- hdu1166
- 从迁徙自由论社会公平
- Pascal's Triangle
- phpstorm配置Xdebug进行调试PHP教程
- 客运综合管理系统项目—售票管理(库存/取票)
- 操作系统课程是如何改变我的
- java执行class指定第三方jar路径
- go环境配置
- mysql在centos上的安装以及canal数据同步配置
- WCF承志医疗管理系统技术解析药品入库(一)
- Search in Rotated Sorted Array
- 获取标题栏(actionbar)、状态栏高度的办法 onCreate()有效
- 用ZipInputStream和ZipOutputStream实现文件及文件夹的压缩解压