《加油站管理系统.doc》由会员分享,可在线阅读,更多相关《加油站管理系统.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流加油站管理系统.精品文档.目 录目 录II一课程设计简介11.1课程设计的目的11.2课程设计的内容12 系统分析32.1 用户工作流程32.2 用户业务需求33 系统设计43.1 设计思想43.2 系统功能结构图43.3模块功能设计54 系统数据库设计64.1系统数据库的建立64.2 系统E-R图64.3存储过程设计84.4 触发器的设计94.5数据库的连接105系统实现115.1 系统实现工具与支持平台115.2系统主要的功能界面与实现代码115.3系统主要功能实现216总结与展望226.1收获与体会226.2未来的展望227源代码附录2
2、37.1 系统与数据库交互代码23参考文献34致 谢35课程设计检查表36一课程设计简介1.1课程设计的目的随着人类社会的进步和科学技术的发展,人们生活水平也在不断的提高,拥有车的人越来越多,这又影响着油的耗量急剧增大,加油站也也来越多。现在人们进行信息交流的深度与广度不断增加,信息量急剧增长,传统的信息处理与决策的手段已不能适应社会的需要,信息的重要性和信息处理问题的紧迫性空前提高了,面对着日益复杂和不断发展,变化的社会环境,人们已经习惯快速的获得信息以及完成各种事情,加油站的反战中当然也要考虑这些因素。本次设计的加油站管理系统就是为满足人们的需求而设计的,此加油占管理系统是为了解决人们生活
3、中加油的快捷、方便以及减轻加油站管理人员和其他工作人员工作的负担,帮助他们很好的管理和工作的顺利进行。1.2课程设计的内容本系统采用的是微软公司的Microsoft Visual C+ 6.0开发工具做为开发系统程序。在连接数据库上,利用ADO对象模型,创建几个简单的对象和数据来源进行连接,然后从中取得所需要的数据,进行数据访问操作后保存。在连接数据库上,以往在数据访问应用程序开发中,不管是使用DAO或RDO对象来访问数据来源,都会对这些对象模型众多而且复杂的组成结构印象深刻。但利用ADO对象模型,就可以只创建几个简单的对象和数据来源进行连接,然后从中取得所需要的数据,进行数据访问操作后保存。
4、ADO (ActiveX Data Objects)对象模型主要由三个对象成员:Connection、Command与Record set对象;以及三个集合对象:Errors、Parameters与Fields对象所组成。ADO对象模型与DAO、RDO另一个较大的差异,在于某些ADO对象可以直接创建而不需依据上下层按顺序产生,比如我们可以直接创建一个Command对象而不需要先行创建该对象的上层Connection对象,ADO会在该Command对象产生时自动创建上层Connection对象。此加油站要完成以下任务:l 实现用户的登陆,以很好管理工作人员的分工。l 实现系统的管理,包括管理工作
5、人员信息,油库信息,会员信息,会员等级信息等。l 能够记录油品购进和销售情况,剩余量等信息。l 工作人员能够直接查询库存情况,会计人员能够对账目进行管理。l 此系统还要能够实现数据库对个功能模块的访问。其实现的具体任务还包括:在连接数据库后先要有登陆界面,在确认用用户身份后,符合身份的工作人员便可登陆,进入系统主界面,可以在主界面上访问个功能模块。各功能键包括:工作人员管理、油品信息管理、油品类型信息管理、会员信息管理、添加进货记录、添加销售记录、库存查询、账目管理;通过工作人员信息管理模块查询各工作人员信息;通过对油品的管理模块查询油品的单价,销售储量,存储地等,通过对会员的管理模块能查询顾
6、客等级、花费等。2 系统分析2.1 用户工作流程下面是对本企业的业务流程的描述:图2.1系统业务流程图2.2 用户业务需求此系统要满足用户的如下需求:(1)对不同工作类型的员工要能辨别其身份,根据身份限制其权限,设置完成其工作任务。(2)当购进油时要记录油的相关信息,对不同的油放入相应的油库,同时记录其价格,储量等。(3)要记录销售信息,同时根据销售情况对油库灯做相应的修改(4)对不同的顾客根据其购买油量,消费金额等给其设置相应的会员等级,根据等级的不同给予不同的优惠政策(5)对油库进行编号,不同的油库存放不同的油,可根据用户需要快速在相应油库找到所需的油。3 系统设计3.1 设计思想(1)系
7、统分成前台和后台几个相对进程,这些进程都进行集中式管理。(2)整个系统采用模块化结构设计,并且有较强的可操作性和扩展性。(3)采用合理的数据流设计思想,在应用系统设计中,相对独立的模块间以数据流相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全性。3.2 系统功能结构图根据对管理系统进行可行性分析和结构化程序设计的要求,可得到系统的总体结构如图3-1所示:图3.1 加油站总功能模块图 加油站管理系统的分功能模块如图3.2所示:图3.2 加油站分功能模块图3.3模块功能设计系统功能设计是设计一个加油站管理系统,要求满足油品管理的基本要求、油品销售管理的基本要求、工作人员管理的基本要求、
8、油库管理的基本要求、销售管理的基本要求以及系统管理的基本要求。并且能够实现方便的扩张,满足加油站发展的需求,能够保障加油站管理数据的安全,准确对于工作人员有不同的职位,不同职位人员所拥有的工作权限也不一样,对于油有购油信息、出售情况、有的类别以及油量的多少等情况,能设置一些优惠政策,比如会员可以优惠。本系统共包括五大模块,分别是用户登录模块、系统管理模块、经销操作模块、查询操作模块、数据库防护问模块。每个模块的功能如下:(1)用户登陆,根据不同用户身份启用不同的职务(2)系统管理,包括工作人员信息管理、油库信息管理、油品信息管理、会员信息、会员等级信息管理。(3)进销操作,包括进货信息和销售信
9、息。(4)查询操作,包括库存查询和账目管理。(5)数据库访问模块,提供各模块数据库操作接口。4 系统数据库设计4.1系统数据库的建立数据库的设计尽量的实现与应用程序做到最低等级的耦合,按照三层模式两级联系的方式设计数据库,把数据库设计成层次清晰的,高效的实用数据库。在该系统的数据库设计方面,把数据库的设计分为四层:基本表、存储过程、触发器。其中触发器的作用是这个表修改后,自动触发到另外一个表,这样可以减少代码的编写。 因为该系统是采用三层架构设计的,可通过应用服务器的扩展来实现新功能的添加。而在该课程设计的内容定义方面,保证了数据的独立性,该系统对数据记录的操作也因为其课程设计中定义的数据操作
10、方式和操作内容而注定不会产生脏数据及数据读写的不一致性,故在数据库设计方面采用触发器。4.2 系统E-R图 1. 数据流图根据系统的功能,得到该系统的数据流图,其中第一层数据流图如图4-1所示:图4.1加油站管理系统一层数据流图第二层数据流图如图4.24.4所示:图4.2 送进购买情况图4.3 处理顾客购油图4.4 处理账款2. E-R模型 根据数据流图设计E-R模型,如图4.5所示:图4.5 加油站管理系统的总E-R图3、将产生的E-R模型转化为关系模型如下:工作人员(工作号,姓名,身份证号,员工类型,密码) 油库管理(油库编号,工作号) 油库(油库编号,名称,地点,容量)油品(油品编号,名
11、称,价格,储量,油库编号) 会员(会员编号,姓名,身份证号,等级名称,车牌号,总消费额)会员等级(等级名称,折扣,最低消费额) 进货油品(油品编号,工作号,进货时间,油库编号,进货量,单价) 销售油品(油品编号,工作号,销售时间,油库编号,单价,客户,折扣,销售量) 4.3存储过程设计1、创建用于油品入库的存储过程:CREAT OR REPLACE ROCEDURE GAS_InfoAdd( pgas_type IN number(8), pdepot IN varchar(50), pamount IN varchar(30), pprice IN float , pget_date IN
12、date, pworker IN varchar(30)ASBEGINInsert into Gas _Info values(pgas_type,pdepot,pamount,pprice,pprice,pget_date,pworker);END GAS_InfoAdd;2、创建添加工作人员的存储过程:CREATE OR REPLACE PROCEDURE worker_InfoAdd( pnumber IN number(8), pname IN varchar(25), pid IN numberr(18), ptype IN varchar(20), ppassword IN var
13、char(12)ASBEGINInsert into worker_Info values(pnumber, pname,pid,ptype,ppasswordEND worker_InfoAdd;4.4 触发器的设计1、创建一个触发器,实现当一个油库撤销时,修改相应的油品信息的触发器:CREATE OR REPLACE TRRIGER UP_GAS(BEFORE DELETE ON DEPOT FOR EACH ROW BEGIN Update Gastype where depot.number=Gastype.number And number=:old number; End UP_G
14、AS;4.5数据库的连接应用程序与Oracle10g数据库的连接是通过创建ADO数据源,然后在程序中利用代码与数据库建立连接来实现的。具体实现方法是:在模块中声明调用ADO连接控件,这样便能在任何时间连接数据库了。使用ADOConnection对象连接到Oracle10g。在查询等按钮的单击事件中访问数据库。可以使用应用程序配置文件建立一条到数据库服务器的连接,返回一个关键字ConnectionString,在实体数据链路层定义一个用于存储过程的一个基类DBdata.cs在这个基类中接受该关键字ConnectionString,使用SqlConnection连接数据库。配置文件连接数据库的代码
15、:。存储过程基类接受该关键字的代码:System.Configuration.ConfigurationSettings.AppSettingsConnectionString.ToString();5系统实现5.1 系统实现工具与支持平台(1)用户界面:本系统采用Microsoft Visual C+ 6.0设计,用户交互界面采用的是基于Windows的窗口界面。(2)硬件要求:运行本系统的硬件基本要求如下:CPU:Intel P4及以上;内存:1024MB及以上;硬盘:40GB及以上。(3)软件要求:数据库服务器:Oracle10g。5.2系统主要的功能界面与实现代码下面为运行后的界面图:
16、1、系统的登录界面与代码:图5.1 系统登录界面实现代码如下:void CgasStationDlg:OnLogin() Cstring strBtnText;m_btnLogin.GetWindowText(strBtnText);if ( strBtnText= “登陆”) CloginDlg loginDlg;if (loginDlg.DoModal() != IDOK) return ;if(!ADOSQLServer.IsValidWorkerPassword(loginDlg.m_nNumber, loginDlg.m_strPassword) MB_ERROR(“密码错误,登陆失
17、败!”);return ; else if (MB_QUERY(“确定要注销当前用户么?”) = IDNO)return ;m_btnLogin.SetWindowText(“登陆”);m_btnWorkerMgr.EnableWindow(FALSE);m_btnLogin.EnableWindow(FALSE);2、加油站管理系统主窗口界面如下:图5.2加油站管理系统主窗口3、工作人员信息管理模块的界面与代码:图5.3工作人员信息管理界面 实现代码如下:BOOL CWorkerMgrDlg:OnInitDialog() CDialog:OnInitDialog();const char *
18、list_column = 编号,姓名,身份证号,类型,int i=0;while (*list_columni != 0x00) m_listWorker.InsertColumn(i, list_columni+, LVCFMT_LEFT, 100);m_listWorker.SetExtendedStyle(LVS_EX_FULLROWSELECT);return TRUE; void CWorkerMgrDlg:OnAdd() int nNumber = -1;if (!ADOSQLServer.AutoAssignNumber(Worker, nNumber) MB_ERROR( 无
19、法添加工作人员信息,可能是数据库已满!);return ;CWorkerInfoDlg workerInfoDlg;workerInfoDlg.m_nNumber = nNumber;if (workerInfoDlg.DoModal() = IDOK) if (!ADOSQLServer.AddNewWorker(workerInfoDlg.m_nNumber,workerInfoDlg.m_strName,workerInfoDlg.m_strID,workerInfoDlg.m_nWorkerType,workerInfoDlg.m_strPassword) MB_ERROR(添加工作人
20、员信息失败!);RefreshList();void CWorkerMgrDlg:OnModify() int nItem = m_listWorker.GetSelectionMark();if (nItem = -1)return ;CWorkerInfoDlg workerInfoDlg;CString strNumber = m_listWorker.GetItemText(nItem, 0);GET_INT(workerInfoDlg.m_nNumber, strNumber);ADOSQLServer.GetWorker(workerInfoDlg.m_nNumber, worke
21、rInfoDlg.m_strName,workerInfoDlg.m_strID,workerInfoDlg.m_nWorkerType,workerInfoDlg.m_strPassword);if (workerInfoDlg.DoModal() = IDOK) if (!ADOSQLServer.ModifyWorker(workerInfoDlg.m_nNumber,workerInfoDlg.m_strName,workerInfoDlg.m_strID,workerInfoDlg.m_nWorkerType,workerInfoDlg.m_strPassword) MB_ERROR
22、(修改工作人员信息失败!);RefreshList();void CWorkerMgrDlg:OnRemove() int nItem = m_listWorker.GetSelectionMark();if (nItem = -1)return ;int nNumber;CString strNumber = m_listWorker.GetItemText(nItem, 0);GET_INT(nNumber, strNumber);if (MB_QUERY(确定要删除此项么?) = IDYES) if (!ADOSQLServer.RemoveWorker(nNumber) MB_ERRO
23、R(删除工作人员信息失败!);RefreshList();void CWorkerMgrDlg:RefreshList()m_listWorker.DeleteAllItems();CStringArray strNumber, strName, strID, strType, strPassword;ADOSQLServer.GetWorkers(strNumber, strName, strID, strType, strPassword);for (int i=0;istrNumber.GetSize();i +) m_listWorker.InsertItem(i, strNumber
24、.GetAt(i);m_listWorker.SetItemText(i, 1, strName.GetAt(i);m_listWorker.SetItemText(i, 2, strID.GetAt(i);int nType;GET_INT(nType, strType.GetAt(i);switch (nType) case 0:m_listWorker.SetItemText(i, 3, 销售员);break;case 1:m_listWorker.SetItemText(i, 3, 进货员);break;case 2:m_listWorker.SetItemText(i, 3, 会计)
25、;break;case 3:m_listWorker.SetItemText(i, 3, 经理);break;default:m_listWorker.SetItemText(i, 3, 未知类型);break;void CWorkerMgrDlg:OnShowWindow(BOOL bShow, UINT nStatus) CDialog:OnShowWindow(bShow, nStatus);/ TODO: Add your message handler code hereRefreshList();void CWorkerMgrDlg:OnDblclkListWorker(NMHDR
26、* pNMHDR, LRESULT* pResult) OnModify();*pResult = 0;void CWorkerMgrDlg:OnSearch() m_listWorker.DeleteAllItems();UpdateData();int nType;CString strNumber, strName, strID, strPassword;if (!ADOSQLServer.GetWorker(m_nNumber, strName, strID, nType, strPassword) MB_INFO(没有找到此编号的工作人员!);RefreshList();return
27、 ;strNumber.Format(%d, m_nNumber);m_listWorker.InsertItem(0, strNumber);m_listWorker.SetItemText(0, 1, strName);m_listWorker.SetItemText(0, 2, strID);switch (nType) case 0:m_listWorker.SetItemText(0, 3, 销售员);break;case 1:m_listWorker.SetItemText(0, 3, 进货员);break;case 2:m_listWorker.SetItemText(0, 3,
28、 会计);break;case 3:m_listWorker.SetItemText(0, 3, 经理);break;default:m_listWorker.SetItemText(0, 3, 未知类型);break;void CWorkerMgrDlg:OnSearchAll() RefreshList();4、油库信息管理界面与实现代码:图5.4 油库信息管理界面实现代码如下:BOOL CDepotMgrDlg:OnInitDialog() CDialog:OnInitDialog();const char *list_column = 编号,名称,位置,容量,int i=0;while
29、 (*list_columni != 0x00) m_listDepot.InsertColumn(i, list_columni+, LVCFMT_LEFT, 100);m_listDepot.SetExtendedStyle(LVS_EX_FULLROWSELECT);return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEvoid CDepotMgrDlg:OnAdd() int nNumber = -1;if (
30、!ADOSQLServer.AutoAssignNumber(Depot, nNumber) MB_ERROR( 无法添加油库信息,可能是数据库已满!);return ;CDepotInfoDlg depotInfoDlg;depotInfoDlg.m_nNumber = nNumber;if (depotInfoDlg.DoModal() = IDOK) if (!ADOSQLServer.AddNewDepot(depotInfoDlg.m_nNumber,depotInfoDlg.m_strName,depotInfoDlg.m_strLocation,depotInfoDlg.m_fC
31、apacity ) MB_ERROR(添加油库信息失败!);RefreshList();void CDepotMgrDlg:OnModify() int nItem = m_listDepot.GetSelectionMark();if (nItem = -1)return ;CDepotInfoDlg depotInfoDlg;CString strNumber = m_listDepot.GetItemText(nItem, 0);GET_INT(depotInfoDlg.m_nNumber, strNumber);ADOSQLServer.GetDepot(depotInfoDlg.m_
32、nNumber, depotInfoDlg.m_strName,depotInfoDlg.m_strLocation,depotInfoDlg.m_fCapacity );if (depotInfoDlg.DoModal() = IDOK) if (!ADOSQLServer.ModifyDepot(depotInfoDlg.m_nNumber,depotInfoDlg.m_strName,depotInfoDlg.m_strLocation,depotInfoDlg.m_fCapacity ) MB_ERROR(修改油库信息失败!);RefreshList();void CDepotMgrD
33、lg:OnRemove() int nItem = m_listDepot.GetSelectionMark();if (nItem = -1)return ;int nNumber;CString strNumber = m_listDepot.GetItemText(nItem, 0);GET_INT(nNumber, strNumber);if (MB_QUERY(确定要删除此项么?) = IDYES) if (!ADOSQLServer.RemoveDepot(nNumber) MB_ERROR(删除油库信息失败!);RefreshList();void CDepotMgrDlg:Re
34、freshList()m_listDepot.DeleteAllItems();CStringArray strNumber, strName, strLocation, strCapacity;ADOSQLServer.GetDepots(strNumber, strName, strLocation, strCapacity);for (int i=0;iMoveNext();nCount +;return nCount;BOOL CADODataBase_SQLServer:AddNewDepot(int nNumber, CString strName, CString strLoca
35、tion, float &fCapacity)CString strQuery;strQuery.Format(insert into Depot values(%d,%s,%s,%.2f),nNumber,strName,strLocation,fCapacity);try Query(strQuery);catch(.) return FALSE;return TRUE;BOOL CADODataBase_SQLServer:ModifyDepot(int nNumber, CString strName, CString strLocation, float &fCapacity)CString strQuery;strQuery.Format(update Depot set name = %s, location = %s, capacity = %.2f where number = %d,strName,strLocation,fCapacity,nNumber);try Query(strQuery);ca