计算机专业课程设计--房屋中介管理系统_第1页
计算机专业课程设计--房屋中介管理系统_第2页
计算机专业课程设计--房屋中介管理系统_第3页
计算机专业课程设计--房屋中介管理系统_第4页
计算机专业课程设计--房屋中介管理系统_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库课程设计报告 房屋中介管理系统 班级: 姓名: 学号: 指导教师: 完成日期:房屋中介管理系统 - 2 - 数据库课程设计评分表 班级 姓名 指导教师 题目: 房屋中介管理系统 评分标准 评分标准 分数权 重 评分的依据 得分 A C 工作态度 10 态度端正, 能主动 认真 完成各项内容 ,不迟到早退,出勤好。 能够完成各环节基本工作,出勤较好。 独立解决问题的能力 10 能独立完成数据库课程设计项目的各项任务,熟悉项目的整体架构;具有独立分析、解决问题能力,具有独立调试程序与测试程 序的能力,程序结构清晰,逻辑严谨,功能完善。 有一定的分析、解决问题能力。能够在老师指导下完成任务的编码与调试工作,程序功能较完善。 程序完成及运行情况 20 完成率 100%,程序运行正确。 完成率不足 70%。 课程设计报告 30 格式规范,层次清晰,设计思想明确,解决问题方法合理,体会深刻。 格式较规范,设计思想基本明确,解决问题方法较合理。 答辨问题回答 30 能准确回答老师提出的问题,并充分理解数据库开发技术,程序逻辑清晰。 能基本准确回答老师提出的问题 总分 指导教师(签字): 注:介于 A 和 C 之间为 B 级,低于 C 为 D 级和 E 级。按各项指标打分后,总分90 100 为优, 80 89为良, 70 79 为中, 60 69为及格, 60 分以下为不及格。 数据库课程设计 目录 第 1 章 需求分析 . 1 1.1 开发背景 . 1 1.2 需求分析 . 1 第 2 章 系统设计 . 2 2.1 项目规划 . 2 2.2 系统业务流程分析 . 2 2.3 系统业务流程分 . 3 2.4 系统 E-R 图 . 4 2.5 开发及运行环境 . 6 第 3 章 数据库设计 . 7 3.1 数据表概要说明 . 7 3.2 主数据表的结构 . 7 第 4 章 系统模块代码设计 . 14 4.1 系统登录模块代码 . 14 4.2 用户信息管理登录模块设计代码 . 15 4.3 房源信息设置模块设计代码 . 16 4.4 房源信息查询模块设计代码 . 20 4.5 房源状态查询模块设计 . 23 4.6 员工信息设置模块设计代码 . 26 第 5 章 疑难问题解析 . 27 5.1 通过触发器对视图进行添加、修改和删除操作 . 27 5.2 结束数据库连接进程完成数据库还原 . 27 第 6 章 课程设计小结和心得 . 29 6.1 小结 . 29 6.2 心得 . 29 第 7 章 源代码 . 30 7.1 系统登录模块设计代码 . 30 7.2 用户信息管理登录模块设 计代码 . 31 7.3 房源信息设置模块设计代码 . 33 7.4 房源信息查询模块设计代码 . 37 7.5 房源状态查询模块设计 . 41 7.6 员工信息设置模块设计代码 . 44 数据库课程设计 - 1 - 第 1 章 需求分析 1.1 开发背景 房屋中介行业是房地产业的重要组成部分, 其在 房地产业经济运作的全过程之中起着至关重要的作用,为房地产业的生产、流通和消费提供了多元化的服务。房屋中介行业作为一个管理房屋信息的机构,其对信息的管理应该准确无误。利用所学的软件工程设计思想、数 据库等知识设计一个房屋中介管理系统的软件对于提高该中介机构的工作效率变得尤为重要。 1.2 需求分析 通过实际调查,要求房屋中介管理系统应该具有一下功能: ( 1)由于操作人员的计算机知识普遍偏低,因此要求系统具有良好的人机界面; ( 2)如果系统的使用对象较多,则要求有较好的权限管理; ( 3)方便的数据查询,支持自定义条件查询; ( 4)自动匹配房源和求房意向信息; ( 5)使用垃圾信息处理机制释放空间; ( 6)在相应的权限下,删除数据方便简单、数据稳定性强; ( 7) 数据计算自动完成,尽量减少人工干预。 房屋中介管理系统 - 2 - 第 2 章 系统设计 2.1 项目规划 房屋中介管理系统在出租者和求租者之间起到了桥梁的作用,是一款非常实用的软件,它主要由用户信息管理、出租信息管理、求租信息管理、房源管理、常用工具和系统管理等模块组成,具体规划如下。 ( 1)用户信息管理模块 该模块主要包括求租人员信息 设置、出租人员信息设置、人员信息控制等功能。 ( 2)求租管理模块 该模块主要包括房源查询设置、房源状态浏览、求租意向设置等功能。 ( 3) 员工管理模块 该模块主要包括录入员工信息、员工信息控制等功能。 ( 4) 出租管理模块 该模块主要 包括房型设置、楼层设置、幢 /座设置、装修程度设置、朝向设置、用途设置等功能。 (5) 交费管理 该模块主要包括收费设置、收费记录等功能。 (6) 业务统计 该模块主要包括成交业务量统计等功能。 (7) 窗体布局 该模块主要包括层叠排列、水平排列、垂直平铺等功能。 (8) 常用工具 该模块主要包括记事本、计算器、 Word、 Excel等功能。 (9) 系统管理 该模块主要包括口令设置、退出系统、数据备份、数据恢复、清理无效信息等功能。 2.2 系统业务流程分析 房屋中介管理系统是业务流程如图 2.1 所示 数据库课程设计 - 3 - 图 2.1 房屋中介管理系统是业务流程 2.3 系统业务流程分 房屋中介管理系统功能结构图如图 2.2所示 是否登录 收集客户信息 身份验证 管理员工 是否找到房源 客户划分 填写意向 是否与房源相符 联系双方交款 录入房源 是否与房源 意愿相符 结束 结束 是 员工 经理 否 是 否 求租人 出租人 是 登录 系统 否 否 是 房屋中介管理系统 - 4 - 图 2.2 房屋中介管理系统功能结构图 2.4 系统 E-R 图 ( 1)出租房屋信息 E-R图 如图 2.3 所示 房屋中介管理系统 用户信息管理 求组管理 员工信息 出租管理 窗体布局 常用工具 系统管 理 房源查询设置 房源状态浏览 求租意向设置 房源查询设置 房源状态浏览 求租意向设置 录入员工信息 员工信息控制 层叠平铺 水平平铺 垂直平铺 记事本 Word 计算器 民族设置 学历设置 房屋设置 楼层设置 装修设置 幢座设置 朝向设置 用途设置 口令设置 退出系统 数据库备份 数据库还原 清理无效信息 Excel 数据库课程设计 - 5 - 图 2.3 出租房屋信息 E-R 图 ( 2) 求购人信息 E-R 图 如图 2.4 所示 图 2.4 求购人信息 E-R 图 求租人信息 客户姓名 联系方式 房屋种类 建筑面积 装修情况 户型 出租房屋信息 客户姓名 联系方式 每月价格 房屋种类 建筑面积 装修情况 房型 房屋地址 房屋情况 房屋中介管理系统 - 6 - 2.5 开发及运行环境 本系统开发平台及运行环境如下 1) 系统开发平台: Microsoft Visual Studio 2008. 2) 系统开发语言: C#。 3) 数据库管理系统软件: SQL Server 2005。 4) 运行平台: Windows XP。 5) 运行环境: Microsoft.NET Framework 数据库课程设计 - 7 - 第 3 章 数据库设计 本系统采用 SQL Server 2005 数据库,名称为 db-showHouse,其中包含 15 张数据表。下面分别给出数据表概要说明、主要数据表结构。 3.1 数据表概要说明 数据表树形结构图包括系统所有数据表 如图 3.1 所示 图 3.1 数据表树形结构图包括系统所有数据表 3.2 主数据表的结构 (1)tb_employee(员工信息表 ) 表 tb_employee 用于保存员工的基本信息,该表的结构如图 3.1 所示。 房屋中介管理系统 - 8 - 图 3.1 员工信息表 (2)tb_favor(朝向 信息表 ) 表 tb_favor 用于设置房源的朝向信息,该表的结构如图 3.2 所示。 图 3.2 朝向信息表 (3)tb_fitment(装修 信息表 ) 表 tb_fitment 用于设置房源装修信息,该表的结构如图 3.3 所 示。 图 3.3 装修信息表 (4)tb_floor(楼层 信息表 ) 表 tb_floor 用于设置房源楼层信息,该表的结构如图 3.4 所示。 数据库课程设计 - 9 - 图 3.4 楼层信息表 (5)tb_gov(民 族 信息表 ) 表 tb_gov 用于保存员工的民族信息,该表的结构如图 3.5 所示。 图 3.5 民族信息表 (6)tb_log(日志 信息表 ) 表 tb_log 用于 保存操作者 使用该系统的日志记录 ,该表的 结构如图 3.6 所示。 图 3.6 日志信息表 (7)tb_house(房屋 信息表 ) 表 tb_house 用于保存房屋信息,该表的结构如图 3.7 所示。 房屋中介管理系统 - 10 - 图 3.7 房源信息表 (8)tb_intent(求租意向 表 ) 表 tb_intent 用于保存求租人对房源的要求信息,该表的结构如图 3.8 所示。 图 3.8 意向信息表 数据库课程设计 - 11 - (9)tb_login(登录 信息表 ) 表 tb_login 用于用户进入系统时进行核对,该表的结构如图 3.9 所示。 图 3.9 登录信息表 (10)tb_MoneyAndInfo(收费 信息表 ) 表 tb_ MoneyAndInfo 用于保存收费信息,该表的结构如图 3.10 所示。 图 3.10 收费信息 表 (11)tb_mothed(用途 信息表 ) 表 tb_mothed 用于保存房源的用途信息,该表的结构如图 3.11 所示 房屋中介管理系统 - 12 - 图 3.11 用途信息表 (12)tb_seat(幢座 信息表 ) 表 tb_seat 用于保存房源幢座信息,该表的结构如图 3.12 所示。 图 3.12 幢座信息表 (13)tb_StudyDegree(学历 信息表 ) 表 tb_ StudyDegree 用于设置员工的学历,该表的结构如图 3.13 所示 图 3.13 学历信息表 (14)tb_type(房型 信息表 ) 表 tb_type 用于保存房源房型信息,该表的结构如图 3.14 所示。 图 3.14 房型信息表 数据库课程设计 - 13 - (15)tb_user(客户 信息表 ) 表 tb_user 用于保存客户信息,该表的结构如图 3.15 所示 图 3.15 客户信息表 房屋中介管理系统 - 14 - 第 4 章 系统模块代码设计 4.1 系统登录模块代码 单击“登录”按钮,调用登录信息表的方法类,判断用户输入的用户名和密码是否正确,如果正确,则登录房屋中介管理系统,同时分配该用户相应的权限,否则弹出“密码有误, 3次后将自动关闭 ”的提示信息。“登录”按钮的 Click 事件代码如下: private void btnLogin_Click(object sender, EventArgs e) #region/用户与密码是否正确不正确给三次机会然后关闭 cl.LName=this.cobName.Text; cl.LPwd=this.txtPwd.Text.Trim().ToString(); string power=cm.select_table(cl); if (power != none) /调一个方法如果成功进入后台否则记到 登陆日制中 frmMain fm = new frmMain(); this.Hide(); fm.M_str_Power = this.cobName.Text + + power; fm.Show(); else if(this.txtPwd.Text= & this.cobName.Text=) /当所有信息都没有时这是一个入口 frmMain fm = new frmMain(); this.Hide(); fm.Show(); else if (ErrorNum = cl.LName) Num += 1; if (Num = 3) this.Close(); else ErrorNum = cl.LName; Num += 1; MessageBox.Show(密码有误 ,三次后将自动关闭 ,这是第 +Num+次 ); this.txtPwd.Text = string.Empty; this.txtPwd.Focus(); 数据库课程设计 - 15 - 4.2 用户信息管理登录模块设计代码 在 frmPeopleList窗体的 load事件中,通过调用自定义 ListInfo方法对 DataGridView控件进行数据绑定,显示所有系统用户信息。 frmPeopleList窗体的 load事 件关键代码如下: private void frmPeopleList_Load(object sender, EventArgs e) sbSql.Append(select User_IDs,User_names,User_homePhone,User_cardID,User_phone from tb_User); ListInfo(sbSql.ToString(); UnAble(); private void tp_cancel_Click(object sender, EventArgs e) this.Close(); 当用户在单击“出租人”选项卡或“求租人”选项卡时,在相应的选项卡页中显示客户信息,实现代码如下: private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) if (this.tabControl1.SelectedTab.Text = 出租人 ) sbWhere.Append( where user_type=lend); ListInfo(sbSql.ToString() + sbWhere.ToString(); sbWhere.Remove(0, sbWhere.Length); else if (this.tabControl1.SelectedTab.Text = 求租人 ) sbWhere.Append( where user_type=want ); ListInfo(sbSql.ToString() + sbWhere.ToString(); sbWhere.Remove(0, sbWhere.Length); 单击 ListView控件中的任一单元格,将对应的详细客户信息显示在相应选项卡的文本框中,实现代码如下: private void listView1_Click(object sender, EventArgs e) string strID =this.listView1.SelectedItems0.Text.ToString(); string sql = select User_IDs,User_names,User_homePhone,User_cardID,User_phone from tb_User where user_ids= + strID + ; SqlCommand cmd=new SqlCommand(sql,con.conn); con.closeCon(); cmd.Connection.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (strID.Substring(0, 4) = lend) 房屋中介管理系统 - 16 - this.tabControl1.SelectTab(0); while (dr.Read() this.textBox1.Text = dr0.ToString(); this.textBox2.Text = dr1.ToString(); this.textBox3.Text = dr2.ToString(); this.textBox4.Text = dr3.ToString(); this.textBox5.Text = dr4.ToString(); else this.tabControl1.SelectTab(1); while (dr.Read() this.textBox10.Text = dr0.ToString(); this.textBox9.Text = dr1.ToString(); this.textBox8.Text = dr2.ToString(); this.textBox7.Text = dr3.ToString(); this.textBox6.Text = dr4.ToString(); dr.Close(); con.closeCon(); tb_update.Enabled = true; 4.3 房源信息设置模块设计代码 在 frmHouse窗体的 Load事件中,通过 M_str_Show变量判断本次调用窗体的目地。如果是浏览或修改信息,则将相应的信息显示到控件上,如果是添加信息,则将基本表的信息绑定到 ComboBox控件上。 frmHouse窗体的 Load事件中实现代码如下: private void frmHouse_Load(object sender, EventArgs e) string strHouseState = string.Empty; con.ConDatabase(); flushFaove(); flushfitment(); flushfloor(); flushmothed(); flushseat(); flushtype(); if (M_str_Show = String.Empty) try SqlCommand cmd = new SqlCommand(select Max(house_ID) from tb_house, con.conn); cmd.Connection.Open(); 数据库课程设计 - 17 - strResult = cmd.ExecuteScalar().ToString(); con.closeCon(); if (strResult = ) strResult = hou1001; else string strTemp = strResult.Substring(3); strResult = hou + Convert.ToString(Int32.Parse(strTemp) + 1); this.lblHouseID.Text = 您的房屋编号为: + strResult; catch (Exception ey) con.closeCon(); MessageBox.Show(ey.Message); else this.button8.Visible = false; this.butOK.Visible = false; Visable(); SqlCommand cmd = new SqlCommand(select * from tb_house where house_ID= + M_str_Show + , con.conn); con.conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) while (dr.Read() lblHouseID.Text = dr0.ToString(); this.txtName.Text = dr1.ToString(); this.picHouse.ImageLocation = dr8.ToString(); txtPrice.Text = dr9.ToString(); this.nudYear.Value = Convert.ToDecimal(dr11.ToString(); this.txtArea.Text = dr12.ToString(); this.ttbRemark.Text = dr13.ToString(); strHouseState = dr4.ToString(); this.cboXing.SelectedValue = dr2.ToString(); this.cobDong.SelectedValue = dr3.ToString(); this.cboFavoe.SelectedValue = dr6.ToString(); this.cobZhuang.SelectedValue = dr5.ToString(); this.cobUser.SelectedValue = dr7.ToString(); this.cobFlood.SelectedValue = dr10.ToString(); con.closeCon(); if (strHouseState = none) /什么时候出显 button1.Visible = true; button2.Visible = true; 房屋中介管理系统 - 18 - private void flushFaove() con.ConDatabase(); try SqlDataAdapter da = new SqlDataAdapter(select * from tb_favor, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cboFavoe.DataSource = dt.DefaultView; cboFavoe.DisplayMember = favor_name; cboFavoe.ValueMember = house_favorID; catch (Exception ey) MessageBox.Show(ey.Message); private void flushfitment() con.ConDatabase(); try SqlDataAdapter da = new SqlDataAdapter(select * from tb_fitment, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cobZhuang.DataSource = dt.DefaultView; cobZhuang.DisplayMember = fitment_name; cobZhuang.ValueMember = house_fitmentID; catch (Exception ey) MessageBox.Show(ey.Message); private void flushfloor() con.ConDatabase(); try SqlDataAdapter da = new SqlDataAdapter(select * from tb_floor, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cobFlood.DataSource = dt.DefaultView; cobFlood.DisplayMember = floor_name; cobFlood.ValueMember = house_floorID; catch (Exception ey) MessageBox.Show(ey.Message); private void flushmothed() con.ConDatabase(); 数据库课程设计 - 19 - try SqlDataAdapter da = new SqlDataAdapter(select * from tb_mothed, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cobUser.DataSource = dt.DefaultView; cobUser.DisplayMember = mothed_name; cobUser.ValueMember = house_mothedID; catch (Exception ey) MessageBox.Show(ey.Message); private void flushseat() con.ConDatabase(); try SqlDataAdapter da = new SqlDataAdapter(select * from tb_seat, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cobDong.DataSource = dt.DefaultView; cobDong.DisplayMember = seat_name; cobDong.ValueMember = house_seatID; catch (Exception ey) MessageBox.Show(ey.Message); 单击“ ”按钮,将更改后的信息立即在界面上显示 , 实现代码如下: private void flushtype() con.ConDatabase(); try SqlDataAdapter da = new SqlDataAdapter(select * from tb_type, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cboXing.DataSource = dt.DefaultView; cboXing.DisplayMember = type_names; cboXing.ValueMember = huose_typeID; catch (Exception ey) MessageBox.Show(ey.Message); 房屋中介管理系统 - 20 - 4.4 房源信息查询模块设计代码 frmSelect 窗体的 load 事件中, DataGridView 控件进行数据绑定,以显示房源相关信息。实现代码如下: private void frmSelect_Load(object sender,EventArgs e) try con.ConDatabase(); SplDataAdapter da=new SplDataAdapter(“ select*from view_house” ,con.conn); DataTable dt=new DataTable(); da.Fill(dt); this.dataGridView1.DataSource=dt.DefaultView; catch(Exception ey) MessageBox.Show(ey.Message); 单击“查询”按钮,对 strMidle 变量进行相关处理,动态生成 SQL 语句,代码如下: private void button1_Click(object sender, EventArgs e) strSql.Append(select * from view_house where ); if (strMidle.IndexOf(house_companyName)!=-1) if (strWhere != string.Empty) strWhere += and + 物业名称 like % + this.txtName.Text.Trim().ToString() + % ; else strWhere += 物业名称 like % + this.txtName.Text.Trim().ToString() + %; strMidle=strMidle.Replace(house_companyName, #); if (strMidle.IndexOf(huose_typeID)!= -1) if (strWhere != string.Empty) strWhere += and + 类型 = + this.cboXing.Text.ToString() + ; else strWhere += 类型 = + this.cboXing.Text.ToString() + ; strMidle=strMidle.Replace(huose_typeID, #); 数据库课程设计 - 21 - if (strMidle.IndexOf(house_seatID) != -1) if (strWhere != string.Empty) strWhere += and + 幢座 = + this.cobDong.Text.ToString() + ; else strWhere += 幢座 = + this.cobDong.Text.ToString() + ; strMidle=strMidle.Replace(house_seatID, #); if (strMidle.IndexOf(house_favorID) != -1) if (strWhere != string.Empty) strWhere += and + 朝向 = + this.cboFavoe.Text.ToString() + ; else strWhere += 朝向 = + this.cboFavoe.Text.ToString() + ; strMidle=strMidle.Replace(house_favorID, #); if (strMidle.IndexOf(house_fitmentID) != -1) if (strWhere != string.Empty) strWhere += and + 装修 = + this.cobZhuang.Text.ToString() + ; else strWhere += 装修 = + this.cobZhuang.Text.ToString() + ; strMidle = strMidle.Replace(house_fitmentID, #); if (strMidle.IndexOf(house_mothedID) != -1) if (strWhere != string.Empty) strWhere += and + 用途 = + this.cobUser.Text.ToString() + ; else strWhere += 用途 = + this.cobUser.Text.ToString() + ; strMidle = strMidle.Replace(house_mothedID, #); /tbho.house_mothedID=tbmo.house_mothedID and if (strMidle.IndexOf(house_floorID) != -1) 房屋中介管理系统 - 22 - if (strWhere != string.Empty) strWhere += and + 楼层 = + this.cobFlood.Text.ToString() + ; else strWhere += 楼层 = + this.cobFlood.Text.ToString() + ; strMidle = strMidle.Replace(house_floorID, #); if (strMidle.IndexOf(house_buildYear) != -1) if (strWhere != string.Empty) strWhere += and + 建筑年限 = + this.nudYear.Text.Trim().ToString() + ; else strWhere += 建筑年限 = + this.nudYear.Text.Trim().ToString() + ; strMidle = strMidle.Replace(house_buildYear, #); if (strMidle.IndexOf(house_area) != -1) if (strWhere != string.Empty) strWhere += and + 建筑面积 like % + this.txtArea.Text.Trim().ToString() + % ; else strWhere += 建筑面积 like % + this.txtArea.Text.Trim().ToString() + %; strMidle = strMidle.Replace(house_area, #); if (strMidle.IndexOf(house_price) != -1) if (strWhere != string.Empty) strWhere += and + 价钱 like % + this.textBox1.Text.Trim().ToString() + % ; else strWhere += 价钱 like % + this.textBox1.Text.Trim().ToString() + %; strMidle = strMidle.Replace(house_price, #); if (strMidle.IndexOf(house_ID) != -1) 数据库课程设计 - 23 - if (strWhere != string.Empty) strWhere += and + 房屋编号 like % + this.textBox2.Text.Trim().ToString() + %; else strWhere += 房屋编号 like % + this.textBox2.Text.Trim().ToString() + %; strMidle = strMidle.Replace(house_ID, #); try string strS = strWhere.Substring(strWhere.Length - 4); if (strS.Trim() = and) strWhere = strWhere.Substring(0, strWhere.Length - 4);/去掉尾 and catch return; strSql.Append(strWhere); string strK = strSql.ToString(); try SqlDataAdapter da = new SqlDataAdapter(strK, con.conn); DataTable dt = new DataTable(); da.Fill(dt); this.dataGridView1.DataSource = dt.DefaultView; ChuShiHua(); clearAll(); this.button1.Enabled = false; catch (Exception ey) MessageBox.Show(ey.Message); strWhere = string.Empty; strMidle = string.Empty; strSql.Remove(0,strSql.ToString().Length); button1.Enabled = false; this.textBox2.Text = ; this.textBox2.Enabled = false; checkBox11.Checked = false; 4.5 房源状态查询模块设计 在 frmStateHouse 窗体的 Load 事件中,进行数据绑定,以显示房源的相关信息。代码如下: 房屋中介管理系统 - 24 - private void frmStateHouse_Load(object sender, EventArgs e) this.button1.Enabled = false; ListInfo(strSql); con.ConDatabase(); 房屋中介管理 系统提供了房屋三种状态的表现形式,即“闲置”,“预定”和“出租”,主要通过 ListInfo(string SQL)方法显示房屋不同状态的图标。实现代码如下: private void ListInfo(string SQL) con.ConDatabase(); this.listView1.Items.Clear(); SqlDataAdapter da = new SqlDataAdapter(SQL, con.conn); DataTable dt = new DataTable(); da.Fill(dt); if (dt.Rows.Count 0) foreach (DataRow dr in dt.Rows) ListViewItem lv; if (dr11.ToString() = none) lv = new ListViewItem(dr0.ToString(), 0);/说明没有要人要呢 else if (dr11.ToString() = remark) lv = new ListViewItem(dr0.ToString(), 1);/有人预订了 else lv = new ListViewItem(dr0.ToString(), 2);/已租出去了 lv.SubItems.Add(dr1.ToString(); lv.SubItems.Add(dr2.ToString(); lv.SubItems.Add(dr5.ToString(); lv.SubItems.Add(dr6.ToString(); lv.SubItems.Add(dr7.ToString(); lv.SubItems.Add(dr8.ToString(); this.listView1.Items.Add(lv); else MessageBox.Show(查询结果为空 ); this.listView1.Columns0.Width =120; 用户可以通过输入手机号码预定或取消预定房源信息,在 txtPhone控件中按下回车键时,判断用户是否有权享受这两项功能。实现代码如下: 数据库课程设计 - 25 - private void textBox1_KeyPress(object sender, KeyPressEventArgs e) if (e.KeyChar = 13) try /在用户里去找这个人把房屋的编号放入这个的信息中去 ClsCon con = new ClsCon(); con.ConDatabase(); con.closeCon(); /查要租房的人不要把要出租的人也混进去 SqlCommand cmd = new SqlCommand(select Max(user_names+您的证件号为 :+user_cardid) from tb_User where user_phone= + textBox1.Text.Trim().ToString() + and user_typelend, con.conn); con.conn.Open(); string strRe = cmd.ExecuteScalar().ToString(); con.closeCon(); if (strRe != ) SqlCommand cmdl = new SqlCommand(select Max(house_ID) from tb_User where user_phone= + textBox1.Text.Trim().ToString() + , con.conn); cmdl.Connection.Open(); string strReS = cmdl.ExecuteScalar().ToString(); con.closeCon(); if (strReS = none) MessageBox.Show(strRe + 你有权预订房源 ); this.button3.Enabled = true; this.button4.Enabled = false; else this.button3.Enabled = false; this.button4.Enabled = true; SendKeys.Send(Tab); else MessageBox.Show(电话号吗不存在 ); this.textBox1.Select(0, this.textBox1.Text.Length); catch (Exception ey) MessageBox.Show(ey.Message); con.conn.Close(); 房屋中介管理系统 - 26 - 4.6 员工信息设置模块设计代码 在 frmEmpleeyAll.cs窗体的 Load事件中。通过调用自定义 showAll方法对 dataGridView控件进行员工信息进行绑定。实现代码如下: private void frmEmpleeyAll_Load(object sender, EventArgs e) showAll(); this.cobPower.Items.Add(员工 ); this.cobPower.Items.Add(经理 ); 自定义 selectInfo方法,主要用来显示员工详细信息,代码如下: private void selectInfo() try string str = this.dataGridView1.SelectedCells0.Value.ToString(); /再来个反添信息 SqlCommand cmd = new SqlCommand(select 姓名 ,电话 ,权限 ,工资 from view_empleey where 员工编号 = + str + , con.conn); cmd.Connection.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read() txtName.Text = dr0.ToString(); txtPhone.Text = dr1.ToString(); txtBasePay.Text = dr3.ToString(); if (dr2.ToString() = 0) cobPower.Text = 员工 ; else cobPower.Text = 经理 ; dr.Close(); con.closeCon(); catch /have hide error 数据库课程设计 - 27 - 第 5 章 疑难问题解析 5.1 通过触发器对视图进行添加、修改和删除操作 当直接对视图表进行操作时,如果没有 instead of 触发器是无法操作的,如果视图是由多个表组成的,一一对每个表进行操作很麻烦,而且出错的可能性很大。通过下面的代码便可以轻松的解决, trig_update_OfEmployee 是一个 update 触发器 ,针对由员工表和登录表组成的视图 view_employeey 进行添 加、修改和删除操作。 trig_update_OfEmployee 触发器代码如下: create TRIGGER trig_update_OfEmployee ON view_employeey INSTEAD OF update AS BEGIN declareUName varchar(15) declarepower varchar(10) declarephone varchar(10) declaremoney numeric selectpower=权限, UName=姓名, phone=电话, money=工资 from inserted update tb_login set login_power=power where login_name=Uname update tb_employee set employee_basepay=money,employee_phone=phone where employee_name=Uname 5.2 结束数据库连接进程完成数据库还原 还原数据时,应确保要还原的数据库处于非连接状态,否则无法还原数据。为了达到要求,我们在这里 写了一个过程 killspid。 存储过程 killspid 通过游标找到相应数据库的编号,然后使用 kill 方法杀死数据库连接过程。存储过程在应用过程中,须在前台通过传递相应的参数完成,有时可能出现服务器超时信息,则再次执行后会成功。 在“还原”按钮的 Click 事件中调用存储过程,代码如下: private bool RestoreBase(string serverName,string uID,string pWD,string dataBase,string bakPath) SqlConnection RestoreCon=new SqlConnection(“ server=” +severName+” ;uid=” uID+” ;pwd=” pWD” ;database=master” ); SqlCommand RestoreCmd=new SqlCommand (“ kill spid” RestoreCon); RestoreCmd.CommandType=CommandType.StoredProcedure; 房屋中介管理系统 - 28 - RestoreCmd.Parameters.Add(“ dbname” ,SqlDbType.VarChar,50); RestoreCmd.Parameters“ dbname” .Value=” +dataBase+” ; Try RestoreCon.Open(); RestoreCmd.ExcuteNonQuery(); SqlCommand RestoreCmd1=new SqlCommand(); RestorwCmd1.CommandText=” RESTORE database” +dataBase+“ FROM DISK=” +bakPath+” ; RestorwCmd1.Connection=RestoreCon; RestorwCmd1.ExcuteNonQuery(); RestoreCon.Close(); Returned true; catch RestoreCon.Close(); Return false; 数据库课程设计 - 29 - 第 6 章 课程设计小结和心得 6.1 小结 在运行程序的时候,首先要进行数据库连接,否则无法运行,系统会提示错误信息。学会触发器的使用非常有必要,我们可以运用触发器解决一些问题,触发器可以对视图进行添加,修改和删除操作。 6.2 心得 通过对此程序的设计和开发,能让我从中学到不少的知识,能充分的 体会到做开发首先要熟练地掌握编程的各种技能, 在这次课程设计中,我还懂得了程序开发的一些比较重要的步骤,比如需求分析、总体设计、数据库设计 (含概念设计、逻辑设计、物理设计 )、程序模块设计 (含功能需求、用户界面设计、程序代码设计与分析、运行结果 )、系统使用说明等。总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。最重要的还是激发了我编程的兴趣和热情,让我从一个只懂理论变成了能做一些小型程序,让我对编程更加热爱了。整体地评价这次课程设计,我认为收获很大,正如上面所说的那样,通过课程设 计,既复习了以前的旧知识,又学到了一些新的知识;设计增强了我们用所学知识去解决具体问题的能力,进一步培养了我们独立思考问题和解决问题的能力。 房屋中介管理系统 - 30 - 第 7 章 源代码 7.1 系统登录模块设计代码 单击“登录”按钮,调用登录信息表的方法类,判 断用户输入的用户名和密码是否正确,如果正确,则登录房屋中介管理系统,同时分配该用户相应的权限,否则弹出“密码有误, 3次后将自动关闭 ”的提示信息。“登录”按钮的 Click 事件代码如下: private void btnLogin_Click(object sender, EventArgs e) #region/用户与密码是否正确不正确给三次机会然后关闭 cl.LName=this.cobName.Text; cl.LPwd=this.txtPwd.Text.Trim().ToString(); string power=cm.select_table(cl); if (power != none) /调一个方法如果成功进入后台否则记到登陆日制中 frmMain fm = new frmMain(); this.Hide(); fm.M_str_Power = this.cobName.Text + + power; fm.Show(); else if(this.txtPwd.Text= & this.cobName.Text=) /当所有信息都没有时这是一个入口 frmMain fm = new frmMain(); this.Hide(); fm.Show(); else if (ErrorNum = cl.LName) Num += 1; if (Num = 3) this.Close(); 数据库课程设计 - 31 - else ErrorNum = cl.LName; Num += 1; MessageBox.Show(密码有误 ,三次后将自动关闭 ,这是第 +Num+次 ); this.txtPwd.Text = string.Empty; this.txtPwd.Focus(); 7.2 用户信息管理登录模块设计代码 在 frmPeopleList窗体的 load事件中,通过调用自定义 ListInfo方法对 DataGridView控件进行数据绑定,显示所有系统用户信息。 frmPeopleList窗体的 load事件关键代码如下: private void frmPeopleList_Load(object sender, EventArgs e) sbSql.Append(select User_IDs,User_names,User_homePhone,User_cardID,User_phone from tb_User); ListInfo(sbSql.ToString(); UnAble(); private void tp_cancel_Click(object sender, EventArgs e) this.Close(); 房屋中介管理系统 - 32 - 当用户在单击“出租人”选项卡或“求租人” 选项卡时,在相应的选项卡页中显示客户信息,实现代码如下: private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) if (this.tabControl1.SelectedTab.Text = 出租人 ) sbWhere.Append( where user_type=lend); ListInfo(sbSql.ToString() + sbWhere.ToString(); sbWhere.Remove(0, sbWhere.Length); else if (this.tabControl1.SelectedTab.Text = 求租人 ) sbWhere.Append( where user_type=want ); ListInfo(sbSql.ToString() + sbWhere.ToString(); sbWhere.Remove(0, sbWhere.Length); 单击 ListView控件中的任一单元格,将对应的详细客户信息显示在相应选项卡的文本框中,实现代码如下: private void listView1_Click(object sender, EventArgs e) string strID =this.listView1.SelectedItems0.Text.ToString(); string sql = select User_IDs,User_names,User_homePhone,User_cardID,User_phone from tb_User where user_ids= + strID + ; SqlCommand cmd=new SqlCommand(sql,con.conn); con.closeCon(); cmd.Connection.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (strID.Substring(0, 4) = lend) this.tabControl1.SelectTab(0); while (dr.Read() this.textBox1.Text = dr0.ToString(); this.textBox2.Text = dr1.ToString(); this.textBox3.Text = dr2.ToString(); this.textBox4.Text = dr3.ToString(); this.textBox5.Text = dr4.ToString(); else this.tabControl1.SelectTab(1); while (dr.Read() this.textBox10.Text = dr0.ToString(); this.textBox9.Text = dr1.ToString(); this.textBox8.Text = dr2.ToString(); this.textBox7.Text = dr3.ToString(); 数据库课程设计 - 33 - this.textBox6.Text = dr4.ToString(); dr.Close(); con.closeCon(); tb_update.Enabled = true; 7.3 房源信息设置模块设计代码 在 frmHouse窗体的 Load事件中,通过 M_str_Show变量判断本次调用窗体的目地。如果是浏览或修改信息,则将相应的信息显示到控件上,如果是添加信息,则将基本表的信息绑定到 ComboBox控件上。 frmHouse窗体的 Load事件中实现代码如下: private void frmHouse_Load(object sender, EventArgs e) string strHouseState = string.Empty; con.ConDatabase(); flushFaove(); flushfitment(); flushfloor(); flushmothed(); flushseat(); flushtype(); if (M_str_Show = String.Empty) try 房屋中介管理系统 - 34 - SqlCommand cmd = new SqlCommand(select Max(house_ID) from tb_house, con.conn); cmd.Connection.Open(); strResult = cmd.ExecuteScalar().ToString(); con.closeCon(); if (strResult = ) strResult = hou1001; else string strTemp = strResult.Substring(3); strResult = hou + Convert.ToString(Int32.Parse(strTemp) + 1); this.lblHouseID.Text = 您的房屋编号 为: + strResult; catch (Exception ey) con.closeCon(); MessageBox.Show(ey.Message); else this.button8.Visible = false; this.butOK.Visible = false; Visable(); SqlCommand cmd = new SqlCommand(select * from tb_house where house_ID= + M_str_Show + , con.conn); con.conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) while (dr.Read() lblHouseID.Text = dr0.ToString(); this.txtName.Text = dr1.ToString(); this.picHouse.ImageLocation = dr8.ToString(); txtPrice.Text = dr9.ToString(); this.nudYear.Value = Convert.ToDecimal(dr11.ToString(); this.txtArea.Text = dr12.ToString(); this.ttbRemark.Text = dr13.ToString(); strHouseState = dr4.ToString(); this.cboXing.SelectedValue = dr2.ToString(); this.cobDong.SelectedValue = dr3.ToString(); this.cboFavoe.SelectedValue = dr6.ToString(); this.cobZhuang.SelectedValue = dr5.ToString(); this.cobUser.SelectedValue = dr7.ToString(); this.cobFlood.SelectedValue = dr10.ToString(); con.closeCon(); if (strHouseState = none) /什么时候出显 button1.Visible = true; 数据库课程设计 - 35 - button2.Visible = true; private void flushFaove() con.ConDatabase(); try SqlDataAdapter da = new SqlDataAdapter(select * from tb_favor, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cboFavoe.DataSource = dt.DefaultView; cboFavoe.DisplayMember = favor_name; cboFavoe.ValueMember = house_favorID; catch (Exception ey) MessageBox.Show(ey.Message); private void flushfitment() con.ConDatabase(); try SqlDataAdapter da = new SqlDataAdapter(select * from tb_fitment, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cobZhuang.DataSource = dt.DefaultView; cobZhuang.DisplayMember = fitment_name; cobZhuang.ValueMember = house_fitmentID; catch (Exception ey) MessageBox.Show(ey.Message); private void flushfloor() con.ConDatabase(); try SqlDataAdapter da = new SqlDataAdapter(select * from tb_floor, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cobFlood.DataSource = dt.DefaultView; cobFlood.DisplayMember = floor_name; cobFlood.ValueMember = house_floorID; catch (Exception ey) MessageBox.Show(ey.Message); 房屋中介管理系统 - 36 - private void flushmothed() con.ConDatabase(); try SqlDataAdapter da = new SqlDataAdapter(select * from tb_mothed, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cobUser.DataSource = dt.DefaultView; cobUser.DisplayMember = mothed_name; cobUser.ValueMember = house_mothedID; catch (Exception ey) MessageBox.Show(ey.Message); private void flushseat() con.ConDatabase(); try SqlDataAdapter da = new SqlDataAdapter(select * from tb_seat, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cobDong.DataSource = dt.DefaultView; cobDong.DisplayMember = seat_name; cobDong.ValueMember = house_seatID; catch (Exception ey) MessageBox.Show(ey.Message); 单击“ ”按钮,将更改后的信息立即在界面上显示 , 实现代码如下: private void flushtype() con.ConDatabase(); try SqlDataAdapter da = new SqlDataAdapter(select * from tb_type, con.conn); DataTable dt = new DataTable(); da.Fill(dt); cboXing.DataSource = dt.DefaultView; cboXing.DisplayMember = type_names; cboXing.ValueMember = huose_typeID; catch (Exception ey) MessageBox.Show(ey.Message); 数据库课程设计 - 37 - 7.4 房源信息查询模块设计代码 frmSelect 窗体的 load 事件中, DataGridView 控件进行数据绑定,以显示房源相关信息。实现代码如下: private void frmSelect_Load(object sender,EventArgs e) try con.ConDatabase(); SplDataAdapter da=new SplDataAdapter(“ select*from view_house” ,con.conn); DataTable dt=new DataTable(); da.Fill(dt); this.dataGridView1.DataSource=dt.DefaultView; catch(Exception ey) MessageBox.Show(ey.Message); 单击“查询”按钮,对 strMidle 变量进行相关处理,动态生成 SQL 语句,代码如下: private void button1_Click(object sender, EventArgs e) strSql.Append(select * from view_house where ); if (strMidle.IndexOf(house_companyName)!=-1) if (strWhere != string.Empty) 房屋中介管理系统 - 38 - strWhere += and + 物业名称 like % + this.txtName.Text.Trim().ToString() + % ; else strWhere += 物业名称 like % + this.txtName.Text.Trim().ToString() + %; strMidle=strMidle.Replace(house_companyName, #); if (strMidle.IndexOf(huose_typeID)!= -1) if (strWhere != string.Empty) strWhere += and + 类型 = + this.cboXing.Text.ToString() + ; else strWhere += 类型 = + this.cboXing.Text.ToString() + ; strMidle=strMidle.Replace(huose_typeID, #); if (strMidle.IndexOf(house_seatID) != -1) if (strWhere != string.Empty) strWhere += and + 幢座 = + this.cobDong.Text.ToString() + ; else strWhere += 幢座 = + this.cobDong.Text.ToString() + ; strMidle=strMidle.Replace(house_seatID, #); if (strMidle.IndexOf(house_favorID) != -1) if (strWhere != string.Empty) strWhere += and + 朝向 = + this.cboFavoe.Text.ToString() + ; else strWhere += 朝向 = + this.cboFavoe.Text.ToString() + ; strMidle=strMidle.Replace(house_favorID, #); if (strMidle.IndexOf(house_fitmentID) != -1) if (strWhere != string.Empty) strWhere += and + 装修 = + this.cobZhuang.Text.ToString() + ; 数据库课程设计 - 39 - else strWhere += 装修 = + this.cobZhuang.Text.ToString() + ; strMidle = strMidle.Replace(house_fitmentID, #); if (strMidle.IndexOf(house_mothedID) != -1) if (strWhere != string.Empty) strWhere += and + 用途 = + this.cobUser.Text.ToString() + ; else strWhere += 用途 = + this.cobUser.Text.ToString() + ; strMidle = strMidle.Replace(house_mothedID, #); /tbho.house_mothedID=tbmo.house_mothedID and if (strMidle.IndexOf(house_floorID) != -1) if (strWhere != string.Empty) strWhere += and + 楼层 = + this.cobFlood.Text.ToString() + ; else strWhere += 楼层 = + this.cobFlood.Text.ToString() + ; strMidle = strMidle.Replace(house_floorID, #); if (strMidle.IndexOf(house_buildYear) != -1) if (strWhere != string.Empty) strWhere += and + 建筑年限 = + this.nudYear.Text.Trim().ToString() + ; else strWhere += 建筑年限 = + this.nudYear.Text.Trim().ToString() + ; strMidle = strMidle.Replace(house_buildYear, #); if (strMidle.IndexOf(house_area) != -1) if (strWhere != string.Empty) strWhere += and + 建筑面积 like % + this.txtArea.Text.Trim().ToString() + % ; else 房屋中介管理系统 - 40 - strWhere += 建筑面积 like % + this.txtArea.Text.Trim().ToString() + %; strMidle = strMidle.Replace(house_area, #); if (strMidle.IndexOf(house_price) != -1) if (strWhere != string.Empty) strWhere += and + 价钱 like % + this.textBox1.Text.Trim().ToString() + % ; else strWhere += 价钱 like % + this.textBox1.Text.Trim().ToString() + %; strMidle = strMidle.Replace(house_price, #); if (strMidle.IndexOf(house_ID) != -1) if (strWhere != string.Empty) strWhere += and + 房屋编号 like % + this.textBox2.Text.Trim().ToString() + %; else strWhere += 房屋编号 like % + this.textBox2.Text.Trim().ToString() + %; strMidle = strMidle.Replace(house_ID, #); try string strS = strWhere.Substring(strWhere.Length - 4); if (strS.Trim() = and) strWhere = strWhere.Substring(0, strWhere.Length - 4);/去掉尾 and catch return; strSql.Append(strWhere); string strK = strSql.ToString(); try SqlDataAdapter da = new SqlDataAdapter(strK, con.conn); DataTable dt = new DataTable(); da.Fill(dt);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论