基于C#和MySQL实现的房屋租赁管理系统

Theevilspirit

发布日期: 2018-11-05 22:29:54 浏览量: 1447
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

第一章 引言

随着房价的不断升高,人们对房屋的需求越来越难以满足,对于一些在外地工作的人来说租房子成为了一种常态,因此出现了越来越多的房屋中介,而对于房屋中介而言,管理日益增加租户的信息和房产的信息成了一个至关重要的问题。与此同时,环保也是大家关注的焦点。因此,开发一款能够实现无纸化的管理系统来管理房屋和租户的信息就显得十分必要。

房屋租赁管理系统的任务目标:简化房屋信息及租客信息的管理步骤,可以方便快捷地查询所需要的信息,系统自动进行水电等费用的计算。在系统启动时有对用户身份的检查,以保证信息的安全性。

房屋租赁管理系统的开发及运行环境:

  • Windows7 64位

  • Microsoft Visual Studio 2010

  • Mysql 5

  • Windows .NET4.0及以上

第二章 系统分析与设计

2.1 需求分析

通过对任务的分析,可以发现运行的系统要能实现以下的功能:

  • 登录管理:实现以正确的员工号、密码和登录人员身份才能登陆系统的功能,正确登录之后才能进行之后的管理

  • 房屋信息管理:包括添加新的房屋信息、修改房屋信息、查询房屋信息、删除房屋信息

  • 用户信息管理:包括添加新的用户信息、修改用户信息、查询用户信息、删除用户信息

  • 租赁信息管理:包括查询某个房屋的租赁状况、添加租赁关系、删除租赁关系

  • 水电费用管理:包括水电费用的查询、添加、修改、删除

  • 财务收支记录:添加公司的财务记录(不允许修改和删除)

  • 收费项目设置:设置水费、电费、物业费、宽带费单价及财务余额

  • 管理员信息维护/密码修改:若登陆用户为超级管理员(admin),则可以管理其他员工的信息,否则就只有修改自己密码的权限

数据流图如下:

2.2 数据库概念结构设计

E-R图

2.3 数据库逻辑结构设计

关系模式(加的为主键,所有表中数据均为varchar类型):

  • 管理员(用户名、密码)

  • 房屋信息(房屋编号、所属区域、房屋名称、房屋类型、房屋面积、装修情况、房屋设施、房屋用途、月租价格、房间状态、备注说明)

  • 用户信息(身份证号、用户姓名、性别、电话)

  • 租赁信息(房屋编号租户身份证号、租赁开始时间、租赁月数 、月租金)

  • 水电费信息(受理单号、房屋编号、上次电表数、本次电表数、上次水表数、本次水表数、收费金额)

  • 财务收支报(编号、类型、金额、日期)

  • 杂项设置(编号、水费单价、电费单价、宽带费单价、物业费单价、财务余额)

管理员表(manageruser)

列名 含义 数据类型 约束
user 管理员用户名 varchar(20) 主键
password 密码 varchar(20) 不为空

房屋信息表(roominf)

列名 含义 数据类型 约束
num 房屋编号 varchar(10) 主键
weizhi 房屋位置 varchar(30) 不为空
mingzi 房屋名称 varchar(20) 不为空
zhonglei 房屋类型 varchar(10) 不为空
mianji 房屋面积 varchar(11) 不为空
zhuangxiu 装修状况 varchar(4) 不为空
sheshi 屋内设施 varchar(20) 不为空
yongtu 房屋用途 varchar(4) 不为空
jiage 房屋价格 varchar(11) 不为空
zhuangtai 房屋状态 varchar(4) 不为空
beizhu 备注信息 varchar(40) 不为空

用户信息表(userinf)

列名 含义 数据类型 约束
sfzid 身份证号 varchar(18) 主键
username 姓名 varchar(10) 不为空
xingbie 性别 varchar(2) 不为空
dianhua 电话 varchar(14) 不为空

房屋租赁表(roomrent)

列名 含义 数据类型 约束
roomnum 房屋编号 varchar(10) 主键
sfznum 身份证号 varchar(18) 主键
starttime 开始租住时间 varchar(12) 不为空
monthnum 租住月份数 varchar(4) 不为空
monthlyrent 月租金 varchar(20) 不为空

水电费表(billsinf)

列名 含义 数据类型 约束
danhao 受理单号 varchar(15) 主键
roomnum 房屋编号 varchar(10) 不为空
predianbiao 上次电表数 varchar(15) 不为空
dianbiao 本次电表数 varchar(15) 不为空
preshuibiao 上次水表数 varchar(15) 不为空
shuibiao 本次水表数 varchar(15) 不为空
jine 金额 varchar(20) 不为空

财务报表(caiwu)

列名 含义 数据类型 约束
bianhao 编号 varchar(20) 主键
leixing 类型 varchar(2) 不为空
jine 金额 varchar(15) 不为空
date 日期 varchar(12) 不为空

杂项设置表(othersetting)

列名 含义 数据类型 约束
bianhao 编号 varchar(10) 主键
shuiprice 水价 varchar(10) 不为空
dianprice 电价 varchar(10) 不为空
wangprice 网费 varchar(10) 不为空
wuyeprice 物业费 varchar(10) 不为空
yue 余额 varchar(10) 不为空

2.4 数据库创建

在实验室实验室使用的是phpadmin建立的数据库roomrentsystem,本机上没有,用Navicat演示、下图为创建表的界面:

下图为创建外码的界面:

若使用SQL命令建表则如下:

水电费表

  1. CREATE TABLE IF NOT EXISTS `billsinf` (
  2. `danhao` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  3. `roomnum` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  4. `predianbiao` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  5. `dianbiao` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  6. `preshuibiao` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  7. `shuibiao` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  8. `jine` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  9. PRIMARY KEY (`danhao`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

财务表

  1. CREATE TABLE IF NOT EXISTS `caiwu` (
  2. `bianhao` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  3. `leixing` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
  4. `jine` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  5. `date` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
  6. PRIMARY KEY (`bianhao`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

管理员信息表

  1. CREATE TABLE IF NOT EXISTS `manageruser` (
  2. `user` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  3. `password` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  4. PRIMARY KEY (`user`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

杂项设置表

  1. CREATE TABLE IF NOT EXISTS `othersetting` (
  2. `bianhao` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  3. `shuiprice` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  4. `dianprice` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  5. `wangprice` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  6. `wuyeprice` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  7. `yue` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  8. PRIMARY KEY (`bianhao`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

房屋信息表

  1. CREATE TABLE IF NOT EXISTS `roominf` (
  2. `num` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  3. `weizhi` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  4. `mingzi` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  5. `zhonglei` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  6. `mianji` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
  7. `zhuangxiu` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
  8. `sheshi` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  9. `yongtu` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
  10. `jiage` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
  11. `zhuangtai` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
  12. `beizhu` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
  13. PRIMARY KEY (`num`)
  14. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

租赁表

  1. CREATE TABLE IF NOT EXISTS `roomrent` (
  2. `roomnum` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  3. `sfznum` varchar(18) COLLATE utf8_unicode_ci NOT NULL,
  4. `starttime` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
  5. `monthnum` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
  6. `monthlyrent` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  7. PRIMARY KEY (`roomnum`,`sfznum`),
  8. KEY `userinfyueshu` (`sfznum`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

用户信息表

  1. CREATE TABLE IF NOT EXISTS `userinf` (
  2. `sfzid` varchar(18) COLLATE utf8_unicode_ci NOT NULL,
  3. `username` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  4. `xingbie` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
  5. `dianhua` varchar(14) COLLATE utf8_unicode_ci NOT NULL,
  6. PRIMARY KEY (`sfzid`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

约束关系

  1. ALTER TABLE `roomrent`
  2. ADD CONSTRAINT `roominfyueshu` FOREIGN KEY (`roomnum`) REFERENCES `roominf` (`num`) ON DELETE CASCADE ON UPDATE CASCADE,
  3. ADD CONSTRAINT `userinfyueshu` FOREIGN KEY (`sfznum`) REFERENCES `userinf` (`sfzid`) ON DELETE CASCADE ON UPDATE CASCADE;

第三章 系统开发及实现

开发本系统采用C#语言+Mysql数据库,数据显示使用了DataGridView控件。

3.1 登陆模块

界面设计如下:

登陆模块为Login.cs:当用户点击登陆按钮时用用户名和密码向数据库中的manageruser表提交查询,若校验通过则将用户名作为初始化参数传递到MainForm.cs、否则提示用户不存在或密码错误。

主要代码:

  1. sqltext1 = "select password from manageruser where user='" + username + "'";
  2. ds = MySqlHelper.GetDataSet(MySqlHelper.Conn, CommandType.Text, sqltext1, null);
  3. MainForm mainform = new MainForm(username);

主界面代码:

  1. // 在窗口初始化时通过函数重载,获得当前登陆的用户的用户名
  2. public MainForm()
  3. {
  4. usernamestr = "admin";
  5. InitializeComponent();
  6. }
  7. public MainForm(string user)
  8. {
  9. usernamestr = user;
  10. InitializeComponent();
  11. }

根据登陆的用户不同,顶部工具菜单第二项可能为管理员信息维护、修改密码,登陆用户若为admin则为管理员信息维护,否则为修改密码。

窗口的主体部分用SplitContainer空间分割为两部分,左侧为功能列表、右侧为具体的操作窗口。当点击功能能列表中的不同按钮时、右侧操作窗口内容随之改变。

关键代码(切换右侧操作窗口):

  1. splitContainer1.Panel2.Controls.Clear();
  2. Rentinf rentinf = new Rentinf();
  3. rentinf.TopLevel = false;
  4. rentinf.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
  5. rentinf.WindowState = FormWindowState.Normal;
  6. rentinf.Dock = DockStyle.Fill;
  7. rentinf.KeyPreview = true;
  8. rentinf.Parent = splitContainer1.Panel2;
  9. rentinf.Show();

3.2房屋信息管理模块

界面设计如下:

可以按照房屋编号、房屋名称、房屋区域、房屋状态进行查询。

查询关键代码:

  1. sqltext1 = "select * from roominf where " + chaxunfangshi + " like '%" + textBox1.Text + "%'";
  2. roomdataGridView.DataSource = MySqlHelper.GetDataSet(MySqlHelper.Conn, CommandType.Text, sqltext1, null).Tables[0].DefaultView;

添加关键代码:

  1. sqltext="insert into roominf(num, weizhi, mingzi, zhonglei, mianji, zhuangxiu, sheshi, yongtu, jiage, zhuangtai, beizhu)values('" + num + "','" + weizhi + "','" + mingzi + "','" + leixing + "','" + mianji + "','" + zhuangxiu + "','" + sheshi + "','" + yongtu + "','" + jiage + "','" + zhuangtai + "','" + beizhu + "')";
  2. MySqlHelper.ExecuteNonQuery(MySqlHelper.Conn,CommandType.Text,sqltext, null);
  3. roomdataGridView.DataSource = MySqlHelper.GetDataSet(MySqlHelper.Conn, CommandType.Text,"select * from roominf ", null).Tables[0].DefaultView;

修改代码:

  1. sqltext = "update roominf set weizhi='" + weizhi + "',mingzi='" + mingzi + "',zhonglei='" + leixing + "',mianji='" + mianji + "',zhuangxiu='" + zhuangxiu + "',sheshi='" + sheshi + "',yongtu='" + yongtu + "',jiage='" + jiage + "',zhuangtai='" + zhuangtai + "',beizhu='" + beizhu + "' where num='" + num + "'";
  2. MySqlHelper.ExecuteNonQuery(MySqlHelper.Conn, CommandType.Text, sqltext, null);
  3. roomdataGridView.DataSource = MySqlHelper.GetDataSet(MySqlHelper.Conn, CommandType.Text, "select * from roominf ", null).Tables[0].DefaultView;

删除关键代码:

  1. sqltext = "delete from roominf where num='" + num + "'"; MySqlHelper.ExecuteNonQuery(MySqlHelper.Conn,CommandType.Text, sqltext, null);
  2. roomdataGridView.DataSource=MySqlHelper.GetDataSet(MySqlHelper.Conn,CommandType.Text, "select * from roominf ", null).Tables[0].DefaultView;

3.3 用户信息管理模块

可以按照身份证号、姓名、电话查询相应的用户信息。

添加、修改、删除操作与房屋信息管理类似。在代码中设置了身份证号和电话号码,必须为数字的函数进行处理。

3.4 租赁信息管理模块

用于查询、记录房屋租赁信息。期中由于数据房屋编号和身份证号是外键,分别参照房屋信息表和用户信息表,所以房屋信息和身份证号使用了comobox控件来完成选择,不允许手工输入。

3.5 水电费用管理模块

用于记录出租的房屋的水电费用信息。由电表数据来计算应缴费的金额,并存入数据库。添加、修改、删除操作与房屋信息管理类似。

3.6 财务收支模块

本模块用于记录公司的收支状况,为防止篡改,不允许进行修改和删除。

3.7 其他

Admin用户登陆后工具菜单中显示相应的菜单可以进入,用于进行系统管理员信息的修改和删除、若非admin管理员登陆,则不显示该菜单,只显示修改密码的菜单。

其他设置模块用于设置水费电费等设置。仅与费用计算有关。

第四章 总结

学习中,只学习了一些基本的SQL语句特点及操作方法,但这次课程设计是要求作出一个独立的系统,不仅要用到SQL知识,还有用到其他的软件,这些软件大部分对我来说都是陌生的,这让我在设计的过程中遇到了很大的困难,课设后我稍加总结,我在课程设计中遇到了以下方面的问题:

  • 本次课设我采用了Mysql 作为建立数据库的工具,C#作为开发界面的工具。Mysql对我来说都是不熟悉的,在这里我遇到了第一个难题,如何在C#中使用Mysql数据库,一度设计进度为零,但后来经过在网上查阅资料和自己摸索,慢慢的我能作出一些界面了。这一个麻烦算是解决了。

  • 在做好界面之后,又遇到了另一个问题,不知道怎么把设计好的界面和SQL建立的数据库连接在一起,如果不能连接在一起的话,那这次课设将是不成功的,后经去图书馆查阅资料,上网搜索资料,和同学讨论,在了解到想要把C#做的界面的Mysql建立的数据库连接在一起必须要用到数据库操作类,在从网上找到相应的操作类后,既能连接到数据库了,能够实现一些基本的功能。

  • 数据库中数据的显示也是困扰了我很久的问题,经过网络查询最终我选择DataGridView来显示数据。

第五章 心得体会

这次课程设计对我的意义很大。不仅巩固了就知识,还学会了新知识。更是激起了我对数据库的兴趣。

设计时,遇到了很多在书本中和课堂上没有机会遇到的问题,在课堂上只能学习到数据库中有一些最为基本的知识,但在课程设计中这些基本知识只是一个基础。这体现在课程设计中的是我花费近一半的时间去学习怎么把C#和Mysql数据库连接在一起,怎么能实现一个界面到另一个界面的跳转,怎么通过直观上界面的操作改变个显示数据库中的信息。这个过程是很痛苦的,一方面是对设计出一个系统的兴趣驱使我不断的去学习新知识和改正错误;另一方面是对设计出一个系统没有任何经验,甚至在设计过程中没有人可以指导你或是和你有一起讨论,一度都想过随便弄一个现有的程序修改一下交差。但是看到运用所学知识做出的成果时,还是选择继续做下去,哪怕不能实现太多的更能,但最起码要凭借自己去做出一个系统。

在课设中遇到了诸多苦难和千奇百怪的错误,一度灰心过。但当改正错误时,不由兴起一股成就感,这些改正后的错误一直激励我坚持到最后,从这次的课程设计中我巩固了以前所学,新学习到了C#知识,遇到了很多错误,但是最终也完成了一个系统,这次课程设计对我来说是使我受益匪浅!

附录(部分源代码)

判断textbox中获取的string是否为数字的函数:

  1. using System.Text.RegularExpressions;
  2. public bool IsNum(String strNumber)
  3. {
  4. Regex objNotNumberPattern = new Regex("[^0-9.-]");
  5. Regex objTwoDotPattern = new Regex("[0-9]*[.][0-9]*[.][0-9]*");
  6. Regex objTwoMinusPattern = new Regex("[0-9]*[-][0-9]*[-][0-9]*");
  7. String strValidRealPattern = "^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$";
  8. String strValidIntegerPattern = "^([-]|[0-9])[0-9]*$";
  9. Regex objNumberPattern = new Regex("(" + strValidRealPattern + ")|(" + strValidIntegerPattern + ")");
  10. return !objNotNumberPattern.IsMatch(strNumber) && !objTwoDotPattern.IsMatch(strNumber) && !objTwoMinusPattern.IsMatch(strNumber) && objNumberPattern.IsMatch(strNumber);
  11. }

数据库操作类MySqlHelper.cs:关键代码

  1. public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
  2. {
  3. MySqlCommand cmd = new MySqlCommand();
  4. using (MySqlConnection conn = new MySqlConnection(connectionString))
  5. {
  6. PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  7. int val = cmd.ExecuteNonQuery();
  8. cmd.Parameters.Clear();
  9. return val;
  10. }
  11. }
  12. public static DataSet GetDataSet(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
  13. {
  14. //创建一个MySqlCommand对象
  15. MySqlCommand cmd = new MySqlCommand();
  16. //创建一个MySqlConnection对象
  17. MySqlConnection conn = new MySqlConnection(connectionString);
  18. //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在
  19. try
  20. {
  21. //调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数
  22. PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  23. //调用 MySqlCommand 的 ExecuteReader 方法
  24. MySqlDataAdapter adapter = new MySqlDataAdapter();
  25. adapter.SelectCommand = cmd;
  26. DataSet ds = new DataSet();
  27. adapter.Fill(ds);
  28. //清除参数
  29. cmd.Parameters.Clear();
  30. conn.Close();
  31. return ds;
  32. }
  33. catch (Exception e)
  34. {
  35. throw e;
  36. }
  37. }

参考文献

[1] 萨师煊著系统概论(第四版), 2006: P91-P117

[2] 马俊等著C#程序设计及应用教程(第二版), 2009:P220-P230

[3] 历小军等著软件开发过程及规范, 2013:P178-P180

[4] 王华杰, 黄山, 著《精通C#数据库编程》 科学出版社

[5] 周峰, 李德路, 王征 著《Visual C#.NET 20. 中文版基础与实践教程》电子工业出版社

[6] 康莉 著《新手学Visual C# 2008 程序设计》电子工业出版社

上传的附件 cloud_download 基于C#和MySQL实现的房屋租赁管理系统.7z ( 12.64mb, 413次下载 )
error_outline 下载需要5点积分

发送私信

不要靠提高嗓门获取自己的存在感,那样只是虚张声势

14
文章数
16
评论数
最近文章
eject