1.绪论
内容简介及意义
现如今随着经济的发展, 私家车越来越多, 系统管理停车场变得尤为重要。所以我写了这个系统用来系统化的管理停车场的车辆的停入、驶出和计费,停车位的使用情况,停车证件的信息管理以及工作员工的信息管理,使得停车场的管理可以变的更加的方便快捷和人性化。
开发工具及技术介绍
开发工具:
Microsoft Visual Studio 2019(简称 VS)是美国的开发工具包系列产品。VS 是一个基本的开发工具集,它包括了整个中所需要的大部分工具,如 UML 工具、代码管控工具、(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括、、、、和 Microsoft 及。2018 年 6 月,微软宣布开发新一代集成开发环境(integrated development environment,IDE)Visual Studio 2019。
MySQL 8.0:MySQL 是一个,由瑞典 MySQL AB 公司开发,属于 旗下产品。MySQL 是最流行的之一,在 Web 应用方面,MySQL 是最好的 (Relational Database Management System,关系数据库管理系统) 应用软件之一。
技术介绍:
该课程设计主要使用了.net Window 窗体编程技术,Oracle 的 MySql.Data 技术以及 MySQL8.0 数据库的连接和交互技术以实现数据在系统中的可视化和可修改化。利用编译的 DBHelper.cs 文件实现该技术,对数据库的内容进行增删改查等操作。
2.总体设计
系统总体架构
员工或管理员在登录页面选择不同的身份输入自己的工号和密码后进入系统主页面,点击该页面的菜单项内容进入不同的系统模块进行不同的操作。管理员用户的菜单会额外显示员工管理选项和车位收费标准选项。普通员工登陆之后,菜单中的员工管理选项和车位收费标准选项会隐藏且普通员工无法进行操作。该系统为实现相关的操作,共在数据库中创建了保存管理员相关信息的管理员表(表 2-1)、保存员工信息的员工表(表 2-2)、保存停车证信息的停车证表(表 2-3)、保存停车位信息的停车位表(表 2-4)和保存收费标准的收费标准表(表 2-5)五个表。
该系统共由登录模块、停车证管理模块、停车位管理模块、员工管理模块和其他模块等模块构成,其总体架构图如图 2-1 所示。
表 2-1 管理员表 admin
字段名 | 意义 | 数据类型 | 数据长度 | 是否主键 | 能否为空 |
---|---|---|---|---|---|
id | 编号 | int | 5 | 是 | 否 |
username | 工号 | varchar | 11 | 否 | 否 |
password | 密码 | varchar | 16 | 否 | 否 |
表 2-2 员工表 employee
字段名 | 意义 | 数据类型 | 数据长度 | 默认值 | 是否主键 | 能否为空 |
---|---|---|---|---|---|---|
id | 编号 | int | 5 | 无 | 是 | 否 |
username | 工号 | varchar | 11 | 无 | 否 | 否 |
password | 密码 | varchar | 16 | 000 | 否 | 否 |
name | 姓名 | varchar | 8 | 无 | 否 | 否 |
sex | 性别 | varchar | 4 | 男 | 否 | 否 |
age | 年龄 | int | 3 | 无 | 否 | 是 |
state | 状态 | int | 1 | 0 | 否 | 否 |
表 2-3 停车证表 pardcardinfo
字段名 | 意义 | 数据类型 | 数据长度 | 默认值 | 是否主键 | 能否为空 |
---|---|---|---|---|---|---|
id | 编号 | int | 5 | 无 | 是 | 否 |
card_value | 停车证号 | varchar | 11 | 无 | 否 | 否 |
name | 车主姓名 | varchar | 8 | 无 | 否 | 否 |
idcard | 身份证号 | varchar | 20 | 无 | 否 | 否 |
carnumber | 车牌号 | varchar | 16 | 无 | 否 | 否 |
state | 状态 | int | 2 | 0 | 否 | 否 |
sex | 性别 | varchar | 4 | 男 | 否 | 否 |
表 2-4 停车位表 parking
字段名 | 意义 | 数据类型 | 数据长度 | 默认值 | 是否主键 | 能否为空 |
---|---|---|---|---|---|---|
id | 编号 | int | 5 | 无 | 是 | 否 |
parking_id | 车位编号 | varchar | 11 | 无 | 否 | 能 |
card_value | 停车证号 | varchar | 11 | 无 | 否 | 能 |
car_user | 车主 | varchar | 8 | 无 | 否 | 能 |
car_number | 车牌号 | varchar | 16 | 无 | 否 | 能 |
state | 车位状态 | int | 2 | 0 | 否 | 否 |
begin_time | 停入时间 | datetime | 20 | 无 | 否 | 能 |
表 2-5 收费标准表
字段名 | 意义 | 数据类型 | 数据长度 | 默认值 | 是否主键 | 能否为空 |
---|---|---|---|---|---|---|
id | 编号 | int | 5 | 无 | 是 | 否 |
hour | 每时收费 | int | 6 | 无 | 否 | 否 |
day | 每日收费 | int | 6 | 无 | 否 | 否 |
month | 每月收费 | int | 6 | 无 | 否 | 否 |
year | 每年收费 | int | 6 | 无 | 否 | 否 |
图 2-1 系统总体架构图
登录模块总体设计
登录模块主要用于识别用户的身份,并按照不同的用户身份进行不同的判断,成功则按照不同的身份类型进入主界面,失败按照识别原因进行相应的提示。模块架构图如图 2-1 所示。
图 2-2 登录模块架构图
主界面模块总体设计
主界面由一个 MenuStrip 菜单控件、一个文本提示框 Label 控件和一个 Panel 容器控件组成。菜单选项用于实现用户方便快捷的选择和使用系统的功能,当用户身份为管理员身份时,菜单选项中会额外多出"员工管理"选项和"收费标准"两个选项;当用户身份为普通员工时,这两个选项会隐藏并无法进行操作。当用户需要进行某项操作时,可以点击菜单中的相应选项,点击之后会在 Panel 控件中显示相应的界面以用于用户进行操作。模块架构图如图 2-3 所示。
图 2-3 主界面模块架构图
停车证管理模块总体设计
停车证管理模块包括停车证信息的检索、添加、编辑和删除等功能。主界面菜单中的"停车证管理"选项的子选项用于选择相应功能。停车证办理选项用于实现停车证信息的添加,停车证检索选项用于实现停车证信息的检索、添加、编辑和删除功能。模块架构图如图 2-4 所示。
图 2-4 停车证管理模块架构图
停车位管理模块总体设计
停车位管理模块包括车位信息的查询、添加、编辑和删除以及车辆的驶入、驶出和计费等功能。主界面菜单中的"车位管理"选项用于选择车辆驶入和车辆驶出并计费两种功能;主界面菜单中的"车位信息检索"选项用于实现停车位信息的检索、添加、编辑和删除功能。模块架构图如图 2-5 所示。
图 2-5 停车位管理模块架构图
员工管理模块总体设计
员工管理模块包括对员工信息的检索、添加、编辑和删除的功能。当用户身份为管理员时,主界面的菜单选项会显示"员工管理"选项,用于实现员工信息的查询、添加、删除和密码重置等功能。模块架构图如图 2-6 所示。
图 2-6 员工管理模块架构图
其他模块总体设计
其他模块包括收费标准模块、修改密码模块和退出登录模块。
修改密码模块用于修改用户的登录密码,主界面菜单中的"修改密码"选项用于实现该功能;退出登录模块用于实现用户的登出以及跳转回登陆页面的功能,主界面菜单中的"退出"选项用于实现该功能;收费标准模块用于实现管理员对停车场车位收费标准的修改和保存功能,主界面菜单中的"收费标准"选项用于实现该功能,但只有用户以管理员身份登录进入系统时,主界面才会显示该菜单选项,否则不显示且无法进行相应操作。
3.详细设计
登录模块设计
登录模块主要用于识别用户的身份。该界面允许普通员工和管理员两种身份进行登录,用户在输入工号和对应的密码后,按照自己的身份类型选择代表相应登陆身份的按钮,点击按钮之后系统会按照不同的身份在不同的数据库中进行用户信息检索,当检索到该账号并且对应的密码相匹配时,则用户登录成功,并将其身份信息传送至主菜单界面,以实现不同身份对主菜单的不同处理。
主界面模块设计
主界面模块用于系统功能的汇总和快捷选择,用户可以通过界面上方的菜单导航选项快速的找到自己需要的操作,点击相应的菜单选项时,调用用于实现该功能的窗体程序存放于 Panel 容器控件中并显示与主界面中。但由于 Panel 容器控件的特殊性,用户在选择下一功能时,已经存放的窗体程序不会被直接清空,需要在存放新的窗体程序之前首先执行"panel1.Controls.Clear();"语句对 Panel 容器控件进行手动清空。
Panel 容器控件存放窗体程序代码示例:
c
panel1.Controls.Clear();
this.IsMdiContainer = true;
Carout carin = new Carout();
carin.MdiParent = this;
carin.Parent = this.panel1;
label1.Visible = false;
carin.FormBorderStyle = FormBorderStyle.None;
carin.Show();
停车证管理模块设计
在主菜单界面选择菜单选项中的停车证管理模块,即可对该停车场的停车证管理数据库进行增删改查等操作。
点击停车证管理的停车证办理子菜单,停车证办理界面就会显示在主菜单界面中,按照提示输入相应的信息之后点击"办理"按钮,系统会对输入的内容进行相应的判断,判断输入内容是否符合标准,不符合则弹出相应提示,符合则会弹出输入的信息并提示是否办理证件,点击确定之后系统会将输入的信息插入到数据库中,并提示办理成功。
点击停车证管理的停车证检索子菜单,停车证检索界面就会显示在主菜单界面中,按照提示输入信息之后点击"搜索"按钮,系统会按照您输入的条件在数据库中查询符合条件的数据,并将其显示在界面的 DataGridView 控件中。在控件中选择一条想要编辑的数据信息,点击"编辑"按钮,会弹出编辑子界面,并在子界面中显示该条信息相关数据,按提示修改你想要修改的数据后,点击保存,会对您输入的数据进行判断,满足条件后会提示修改成功并关闭子界面,主界面的 DataGridView 控件内信息会刷新,显示最新的数据库信息。点击主界面的"添加"按钮会调用停车证办理界面做为子界面,执行停车证办理的相关判断和功能,在录入停车证信息完成之后,关闭该窗口之后,主界面显示的停车证信息列表会刷新,显示最新的数据库信息。在主界面的 DataGridView 控件中选中一条或多条数据后点击"注销"按钮,会提示是否注销该停车证,点击确定后会执行注销操作,并提示是否成功,点击取消则不执行。
窗口传值代码示例:
主窗口传值:
c
Edit ed = new Edit(id,this);
ed.Owner = this;
ed.ShowDialog();
子窗口接收:
c
public Edit( int id,SearchParking searchParking)
{
InitializeComponent();
this.id = id;
this.searchParking = searchParking;
}
停车位管理模块设计
该模块分为车辆驶入驶出计费和车位信息的增删改查两部分。
主界面菜单选项中的车位管理选项用于实现停车场内车辆的驶入、驶出、计费和车位的分配功能。点击车位管理选项的车辆驶入子选项,车辆驶入界面会显示在主界面,在输入车辆的停车证号或者车牌号之后,点击"查询"按钮即可检索数据库内与其匹配的停车证信息,查询的结果会显示在界面的 DataGridView 控件内。随后,系统会对停车场内的空闲停车位进行检索,并将查询到的车位编号存放在 ComboBox 控件中,下拉选择一个空余停车位编号后,点击"停入"按钮,系统会将数据库内该停车位的状态修改为使用状态,将停入车辆的相关信息和当前的时间一并进行记录并存入数据库中用于车辆驶出时的查询和收费。点击车位管理选项的车辆驶出子选项,车辆驶出界面会显示在主界面,在输入车辆的停车证号或者车牌号之后,即可检索该车辆停入的停车位信息以及停入时间,检索的结果会显示在界面的 DataGridView 控件内。点击"驶出"按钮即可将车辆驶出停车位,将停车位的状态修改为空闲状态,并计算该车辆从停入时间到驶出时间的停车费用。
主界面菜单选项中的车位信息检索选项用于实现对停车场内车位信息的查询、编辑、添加和删除功能。点击该选项车位信息检索界面会显示在主界面中,按照提示输入信息之后点击"搜索"按钮,系统会按照您输入的条件在数据库中查询符合条件的数据,并将其显示在界面的 DataGridView 控件中。在控件中选择一条想要编辑的数据信息,点击"编辑"按钮,会弹出编辑子界面,并在子界面中显示该条信息相关数据,按提示修改你想要修改的数据后,点击保存,会对您输入的数据进行判断,满足条件后会提示修改成功并关闭子界面,主界面的 DataGridView 控件内信息会刷新,显示最新的数据库信息。点击主界面的"添加"按钮会显示停车位信息添加子界面,执行停车位信息添加的相关判断和功能,在录入停车证信息完成之后,关闭该窗口之后,主界面显示的停车证信息列表会刷新,显示最新的数据库信息。在主界面的 DataGridView 控件中选中一条或多条数据后点击"删除"按钮,会显示相关删除提示,点击确定后会执行侧位删除操作,并提示是否成功,点击取消则不执行。
子界面关闭,主界面数据刷新代码示例:
子界面关闭:
c
SearchParking searchParking = (SearchParking)this.Owner;
searchParking.reLoad_method();
this.Hide();
主界面刷新:
c
public void reLoad_method()
{
SearchP();
}
员工管理模块设计
在主菜单界面选择菜单选项中的员工管理模块,即可对该停车场的员工信息数据库进行增删改查等操作。点击菜单选项的员工管理选项,员工管理界面就会显示在主菜单界面中,按照提示输入信息之后点击"搜索"按钮,系统会按照您输入的条件在数据库中查询符合条件的数据,并将其显示在界面的 DataGridView 控件中。在控件中选择一条数据信息,点击"密码重置"按钮,会弹出是否进行密码重置的相应提示,点击"确定"会将选中的员工的登陆密码重置为 000,随后主界面的 DataGridView 控件内信息会刷新,显示最新的数据库信息。点击主界面的"添加"按钮会弹出员工添加界面做为子界面,执行员工添加的相关判断和功能,在录入员工信息完成之后,关闭该窗口,主界面显示的停车证信息列表会刷新,显示最新的数据库信息。在主界面的 DataGridView 控件中选中一条或多条数据后点击"删除"按钮,会提示是否删除该员工,点击确定后会执行删除操作,并提示是否成功,点击取消则不执行。
密码重置部分代码:
c
int id = int.Parse(row.Cells["id"].Value.ToString());
DialogResult result = MessageBox.Show("确定要重置用户名为" + row.Cells["username"].Value.ToString() + "的员工的登陆密码吗?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (result == DialogResult.OK)
{
string sql="update employee set password ='000' where id ="+id;
int r = dBHelper.UPD(sql);
MessageBox.Show("已将用户名为"+row.Cells["username"].Value.ToString()+ "的员工密码重置为000");
}
其他模块设计
其他模块包括收费标准模块、修改密码模块和退出登录模块。
管理员登陆成功之后主菜单会显示收费标准选项,点击该选项,收费标准修改界面会显示在主界面中,修改完成后点击确认修改按钮即可将输入的各个收费标准保存至数据库中并弹出提示。
在主菜单界面点击修改密码选项,修改密码界面会显示在主界面中,在界面中按照要求输入旧密码用于进行用户身份验证,输入两次新密码进行密码核实,系统判断输入符合要求后会弹出密码修改提示,点击"确定"之后系统会对密码进行修改,修改完成之后会提示密码已修改,请重新登录,点击确定后跳转回登录界面进行重新登录。
在主菜单界面点击退出选项,即可完成用户退出登录操作,主界面会关闭并弹出登陆界面。
4.系统测试
测试内容:项目编码结束后,运行测试整个系统功能
测试方法:测试任何软件都有两种方法:黑盒测试和白盒测试法。
黑盒测试法(又称功能测试法)是把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程,是在程序接口进行的测试,它只检查程序功能是否按照规格说明书的规定正常使用。
白盒测试法(又称结构测试法)是把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程,这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按照预定要求正确工作。
测试结果:
- 空余停车位编号在使用之后,空余停车场的下拉框中仍存在该停车位的编号。
- 用户修改密码后弹出重新登陆界面会跳转至登陆界面,但主菜单界面未关闭。
- 查询停车位信息、员工信息和停车证信息时,限制条件增多后查询会报错。
解决方法:
- 在每次停入车辆之后,清除列表的 Items 属性,并重新查询添加该属性。
- 修改密码界面和主菜单界面的关系和单纯的主窗口与子窗口关系有区别,所以不能在用之前的调用关系。修改二者的关系并添加新的调用函数,问题解决。
- 限制条件的增多会使得查询语句中 where 段和 and 段的关系不明确,造成查询语句的格式不规范,所以报错,修改规范后,问题解决。
5.小结
经过将近一个月的设计和开发,系统基本开发完毕。其功能基本符合用户需求,能够完成停车场车辆管理、车位管理、停车证管理和员工管理以及不同身份用户进入系统时的不同功能等,对于数据的一致性的问题也通过程序进行了有效的解决。
但是由于课程设计时间较短,所以该系统还有许多不尽如人意的地方,比如功能较少等多方面问题。这些都有待进一步改善。
在软件的编写过程中,我充分体会了软件编程工作者的辛苦,因为每一个细微的细节都必须十分的注意,如果稍有不慎,就会全盘皆输,而且往往很多的时候,程序我自己觉得非常的正确,但是就是编译通不过,在查找错误的过程中,面临着否认自己的过程,非常的痛苦,而且由于自己的经验及各方面的能力的不足,所以进展的速度非常的缓慢,往往很长的时间都没有一点进展。
在开始编写程序的时候,我看到别人的软件功能非常的详细,而且界面非常的漂亮,总希望自己的软件也非常的完善,但是,经过二个月的学习,发现编一个优秀的软件决不是一蹴而就的事情,需要长时间的积累和经验,而这个方面又是我的弱项,因此,在朋友的帮助下,我终于认清自己的不足及劣势,不要贪图大而全,只要尽我所能,编制一个实用简单的软件也是件很不容易的事情。
在反反复复的学习及虚心请教之下,我的辛勤努力有了回报,终于做出了一个简单的软件,虽然这个软件的功能非常的简单,而且我想,在实际的运用中,肯定会有所不足,但是,它毕竟代表了我辛勤的结晶。
6.参考文献
- 江红, 于青松. C#程序设计教程(第 3 版)[M]. 清华大学出版社, 2018.
附录
在登录界面输入工号和密码后按身份类型点击对应登录按钮弹出提示,成功后进入主菜单。
图 7-1 管理员登录
图 7-2 员工登录
主菜单显示菜单和主界面点击菜单中的相应选项打开系统相应功能界面。
图 7-3 系统主界面
点击车位管理选项中的"车辆停入"选项显示车辆停入界面,输入车牌号或停车证号查询相应信息并显示,同时查询空余停车位信息并显示。选中空余停车位编号后点击"停入"按钮,车辆停入相应车位。
图 7-4 车辆停入界面
点击车位管理选项中的"车辆驶出"选项显示车辆驶出界面,输入车牌号或停车证号查询该车辆停入的车位信息并显示。点击"驶出并计费"按钮,车辆驶出相应车位,并显示停车费用。
图 7-5 车辆驶出界面
点击车位信息检索选项显示车位信息检索界面,输入查询条件即可查询符合条件的车位信息。
图 7-6 车位信息检索界面
选中一条数据,点击"编辑"按钮,会显示车位信息编辑子界面,输入相应信息,点击"确认修改"按钮即可完成车位信息编辑。
图 7-7 车位信息编辑子界面
点击"添加"按钮,会显示车位信息添加子界面,输入相应信息,点击"确认添加"按钮,即可完成车位信息添加。
图 7-8 车位信息添加子界面
选中一条或多条数据,点击"删除"按钮,会弹出删除提示,点击"确定"会将选中的数据逐条删除。
图 7-9 车位信息删除提示
图 7-10 车位信息删除结果
点击停车证管理选项中的"停车证办理"选项显示停车证办理界面,输入相应信息之后点击"办理"按钮即可完成停车证办理。
图 7-11 停车证办理界面
点击停车证管理选项中的"停车证检索"选项显示停车证检索界面,输入查询条件即可查询符合条件的停车证信息。
图 7-12 停车证检索界面
选中一条数据,点击"编辑"按钮,会显示停车证信息编辑子界面,输入相应信息,点击"确认修改"按钮即可完成停车证信息编辑。
图 7-13 停车证信息编辑子界面
点击"添加"按钮,会调用停车证办理界面作为子界面并显示,输入相应信息,点击"办理"按钮,即可完成停车证信息添加。
图 7-14 停车证信息办理子界面
选中一条或多条数据,点击"注销"按钮,会弹出注销提示,点击"确定"会将选中的停车证注销。
图 7-15 停车证信息注销提示
图 7-16 停车证信息注销结果
点击修改密码选项会显示修改密码界面,输入旧密码和新密码并验证会弹出修改密码提示,点击"确认修改"按钮会完成密码修改并弹出重新登录提示,点击"确定"跳转会登陆界面并关闭系统主界面。
图 7-17 修改密码界面
图 7-18 修改成功提示
管理员身份登录进入系统主界面后,点击员工管理选项会显示员工管理界面,输入检索条件即可检索符合条件的员工信息。
图 7-19 员工信息检索界面
选中一条数据,点击"密码"按钮,会弹出密码重置提示,输入相应信息,点击"确认修改"按钮即可完成员工密码重置。
图 7-20 员工密码重置提示
图 7-21 员工密码重置结果
点击"添加"按钮,会弹出员工信息添加子界面,输入相应信息,点击"确认添加"按钮,即可完成员工信息添加。
图 7-22 员工信息添加子界面
选中一条或多条数据,点击"删除"按钮,会弹出删除提示,点击"确定"会将选中的员工信息删除。
图 7-23 员工信息删除提示
图 7-24 员工信息删除结果
管理员身份登陆进入主系统后,点击收费标准选项会显示收费标准界面,输入相应的收费标准,点击"确认修改"按钮即可完成对收费标准的修改。
图 7-25 收费标准界面
点击退出选项会完成用户退出功能,关闭系统主界面并显示系统登陆界面。