企业用电管理系统设计bfzm.docx
数据库课程实训(2016)数据库课程程实训报报告( 20115- 20116年度第第2学期)题目: 企企业用电电管理系系统 专业软件工程学生姓名成晓伟班级软件1411学号141000750094指导教师徐静完成日期2016.7.11目 录目 录21 课题内内容和要要求11.1课题题描述11.2 课课题要求求12 需求分分析12.1 对对功能的的规定12.2 数数据需求求分析23 系统设设计33.1 功功能模块块设计33.2 数数据库概概念设计计43.2.22 E-R图43.3 数数据库逻逻辑设计计53.4 数数据库物物理设计计53.5 数数据库表表间联系系64系统实现现64.1登陆陆模块实实现64.2查询询模块实实现74.3 添添加模块块实现84.4 删删除模块块实现94.5 修修改模块块实现104.6 生生成电费费单模块块实现105 代码调调试与功功能测试试115.1 测测试方案案115.2 测测试结果果126 收获与与体会16参考文献17附录18附录1源程程序部分分清单18 3企业用电管管理系统统设计1 课题内内容和要要求 1.1课题题描述系统设计的的的信息息有:(1) 用电企业(用用电企业业编号、用用电企业业名、地地址、电电话、联联系人);(2) 电费信息(谷谷价、峰峰价);(3) 用电情况(用用电企业业编号、谷谷电量、峰峰电量、年年月、年年合计用用电量、年年合计用用电费)。1.2 课课题要求求要求能够进进行如下下操作:(1) 能够统计各各个用电电企业的的月耗电电量以及及电费;(2) 能够统计查查询各个个用电企企业的总总的谷电电量和峰峰电量;(3) 能够统计该该地区的的峰谷电电量比例例以及电电费情况况;(4) 能维护基本本数据;(5) 用户分级管管理,人人机界面面良好。2 需求分分析2.1 对对功能的的规定1、理解需需求理解需求是是在问题题及其最最终解决决方案之之间架设设桥梁的的第一步步。开发发者只有有和用户户充分理理解了需需求之后后才能开开始设计计系统,否否则,对对需求定定义的任任何改进进,设计计上都必必须大量量的返工工。下面是对系系统的终终端用户户和客户户调研后后得到的的需求规规格说明明书。(1)由于于使用者者为相关关电力部部门及学学习使用用,系统统开始时时,便可可以进入入到欢迎迎界面。 (2)进入入到系统统之后,友友好的界界面可以以很清晰晰的分为为企业信信息管理理跟企业业用电信信息管理理两大选选择。(3)点击击企业信信息管理理,下拉拉菜单中中选项可可以实现现对企业业信息的的查询、添添加、修修改、删删除操作作。 (4)点击击企业用用电管理理信息,下下拉菜单单中选项项可以实实现对企企业用电电管理信信息的查查询、添添加、修修改和删删除操作作。 (5)系统统客户端端运行在在Winndowws平台台下,服服务器可可以运行行在Wiindoows或或Uniix平台台下。系系统还应应该有一一个较好好的图形形用户界界面。 (6)系统统应该有有很好的的可扩展展性。2、需求分分析需求分析是是从客户户的需求求中提取取出软件件系统能能够帮助助用户解解决的业业务问题题,通过过对用户户业务问问题的分分析,确确定系统统的功能能需求。这这个步骤骤是对理理解需求求的升华华,直接接关系到到该系统统的质量量。分析析的根本本目的是是在开发发者和提提出需求求的人之之间建立立一种理理解和沟沟通机制制,因此此,系统统的需求求分析也也应该是是开发人人员和用用户或客客户一起起完成的的。2.2 对对性能的的规定1、精度在精度需求求上,根根据使用用需要,在在各项数数据的输输入,输输出及传传输过程程中,可可以满足足各种精精度的需需求。如如:根据据关键字字精度的的不同,查查找可分分为精确确查找和和泛型查查找,精精确查找找可精确确匹配系系统使用用者所知知道的企企业名称称及编号号快速便便捷的查查询所要要知道的的信息。2、时间特特性要求求在软件方面面,响应应时间,更更新处理理时间都都比较快快且迅速速,完全全满足用用户要求求。3、灵活性性当用户需求求,如操操作方式式,运行行环境,结结果精度度,数据据结构于于其他软软件接口口等发生生变化时时,设计计的软件件要做适适当调整整,灵活活性非常常大。 2.2 数数据需求求分析 数据字典(1)faactoory名称:factory别名:无描述:企业的基本信息组成:factory=(num+facname+repname+tel+usefnum+usegnum+usemoney)(2) wworkker名称:worker别名:无描述:员工及管理员的基本信息组成:worker=(id+workername+password+level)3 系统设设计3.1 功功能模块块设计3.2 数数据库概概念设计计3.2.11实体属属性图 3.2.22 E-R图3.3 数数据库逻逻辑设计计企业(编号号,企业业名,法法人代表表)电价(峰电电量,谷谷电量,峰峰电价,谷谷电价,总总电费)系统用户(编号,姓名,密码,权限)3.4 数数据库物物理设计计表一:factoory列名数据类型允许Nulll值numvarchhar(50)是facnaamevarchhar(50)是repnaamevarchhar(50)是telvarchhar(50)是usefnnumint是usegnnumint是usemooneyyint是numfacnaamerepnaametelusefnnumusegnnumusemooneyy001新华书店陈国勇17802259000011131410222333002苏果超市陈博文17802259000022151622532863003微软公司毕世勇17802259000033368524674952004乐天玛特丁小杰17802259000044301127943105005三厂中学陈家勇17802259000055242219742875表二:workeer列名数据类型允许Nulll值idint否workeernaamevarchhar(50)否passwworddvarchhar(50)否leveelint否idworkeernaamepasswworddleveel111张三12345561112李四12345561113熊大12345562114熊二123455623.5 数数据库表表间联系系 数数据库中中所建的的两张表表facctorry与wworkker之之间并没没有任何何直接的的联系,一一个代表表的是企企业信息息,一个个代表的的是员工工信息。4系统实现现4.1登陆陆模块实实现privaate claass ButttonnacttionnPerrforrmedd immpleemennts ActtionnLisstenner/为登陆陆按钮BButttonaactiionPPerfformmed添添加事件件监视器器pubblicc voiid aactiionPPerfformmed(ActtionnEveent e)/从wworkker表表中获得得元组信信息进行行登陆,下下面为获获得元组组登陆代代码a=useernaame22.geetTeext();s=passswoord22.geetTeext();trycconnn=DrriveerMaanagger.gettConnnecctioon(uurl, usser, paasswwordd);cconnn.seetAuutoCCommmit(truue);SSysttem.outt.prrinttln("和数数据库已已经建立立连接!""); sstmtt=(SStattemeent) coonn.creeateeStaatemmentt(); rs=(ReesulltSeet)sstmtt.exxecuuteQQuerry(""sellectt * froom wworkker ");if(c.equualss(a)&&bb.eqqualls(ss)mmesssagee.seetTeext("姓名名和密码码不能为为空");ellse if(truue)wwhille(rs.nexxt()iif(rrs.ggetSStriing(2).equualss(a)&& rs.gettStrringg(3).eqqualls(ss)&&&rs.gettIntt(4)=lleveel)messsagge.ssetTTextt("数数据库连连接成功功!");if(lleveel=1)opeeratte2 appp2=nnew opeeratte2();appp2.ssetLLocaatioonReelattiveeTo(nulll);elsseopeeratte aapp33=neew ooperratee();appp3.ssetLLocaatioonReelattiveeTo(nulll);eelseemesssagge.ssetTTextt("用用户名和和密码或或者身份份不正确确");rss.cllosee();sttmt.cloose();coonn.cloose();4.2查询询模块实实现privaate claass ButttonnacttionnPerrforrmedd immpleemennts ActtionnLisstenner/为查询询按钮BButttonaactiionPPerfformmed添添加事件件监视器器pubblicc voiid aactiionPPerfformmed(ActtionnEveent e)/从woorkeer表中中获取元元组,并并且显示示在系统统上faacnaame=seaarchh.geetTeext();ttryconnn=DDrivverMManaagerr.geetCoonneectiion(urll, uuserr, ppasssworrd);connn.ssetAAutooCommmitt(trrue);Sysstemm.ouut.pprinntlnn("和和数据库库已经建建立连接接!"); stmmt=(Staatemmentt) cconnn.crreatteSttateemennt();rss=(RResuultSSet)stmmt.eexeccuteeQueery("seelecct * frrom facctorry "");whhilee(rss.neext()iif(rrs.ggetSStriing(2).equualss(faacnaame)texxt1.settTexxt(rrs.ggetSStriing(1);texxt2.settTexxt(rrs.ggetSStriing(2);texxt3.settTexxt(rrs.ggetSStriing(3);texxt4.settTexxt(rrs.ggetSStriing(4);texxt5.settTexxt("""+(rs.gettIntt(5);texxt6.settTexxt("""+rrs.ggetIInt(6);texxt7.settTexxt("""+rrs.ggetIInt(7);rss.cllosee();sttmt.cloose();coonn.cloose();4.3 添添加模块块实现privaate claass ButttonnacttionnPerrforrmedd immpleemennts ActtionnLisstenner/为添加加按钮BButttonaactiionPPerfformmed添添加事件件监视器器pubblicc voiid aactiionPPerfformmed(ActtionnEveent e)/在系统统内输入入要添加加的元组组信息,通通过添加加按钮添添加到数数据库中中的faactoory表表内x11=teext11.geetTeext();x22=teext22.geetTeext();x33=teext33.geetTeext();x44=teext44.geetTeext();x55=teext55.geetTeext();x66=teext66.geetTeext();x77=teext77.geetTeext();ttryconnn=DDrivverMManaagerr.geetCoonneectiion(urll, uuserr, ppasssworrd);connn.ssetAAutooCommmitt(trrue);Sysstemm.ouut.pprinntlnn("和和数据库库已经建建立连接接!");prrepsstmtt1=(PreeparredSStattemeent) coonn.preeparreSttateemennt(""INSSERTT INNTO facctorry(nnum,faccnamme,rrepnnamee,teel,uuseffnumm,ussegnnum,useemonney)"+""VALLUESS(?,?,?,?,?,?,?)");prrepsstmtt1.ssetSStriing(1, x1);prrepsstmtt1.ssetSStriing(2, x2);prrepsstmtt1.ssetSStriing(3, x3);prrepsstmtt1.ssetSStriing(4, x4);prrepsstmtt1.ssetSStriing(5, x5);prrepsstmtt1.ssetSStriing(6, x6);prrepsstmtt1.ssetSStriing(7, x7);prrepsstmtt1.eexeccuteeUpddatee();coonn.cloose();4.4 删删除模块块实现privaate claass ButttonnacttionnPerrforrmedd immpleemennts ActtionnLisstennerpubblicc voiid aactiionPPerfformmed(ActtionnEveent e)x11=teext11.geetTeext();ttryconnn=DDrivverMManaagerr.geetCoonneectiion(urll, uuserr, ppasssworrd);connn.ssetAAutooCommmitt(trrue);Sysstemm.ouut.pprinntlnn("和和数据库库已经建建立连接接!"); stmmt=(Staatemmentt) cconnn.crreatteSttateemennt();sttmt.exeecutteUppdatte(""delletee frrom facctorry wwherre nnum="+xx1);coonn.cloose();4.5 修修改模块块实现privaate claass ButttonnacttionnPerrforrmedd immpleemennts ActtionnLisstennerpubblicc voiid acctioonPeerfoormeed(AActiionEEvennt ee)x11=teext11.geetTeext();x22=teext22.geetTeext();x33=teext33.geetTeext();x44=teext44.geetTeext();ttryconnn=DDrivverMManaagerr.geetCoonneectiion(urll, uuserr, ppasssworrd);connn.ssetAAutooCommmitt(trrue);Sysstemm.ouut.pprinntlnn("和和数据库库已经建建立连接接!");prrepsstmtt2=(PreeparredSStattemeent) coonn.preeparreSttateemennt(""upddatee faactoory sett nuum=?,ussegnnum=?,uuseffnumm=?,useemonney=? wwherre nnum=?");prrepsstmtt2.ssetSStriing(1, x1);prrepsstmtt2.ssetSStriing(2, x2);prrepsstmtt2.ssetSStriing(3, x3);prrepsstmtt2.ssetSStriing(4, x4);prrepsstmtt2.ssetSStriing(5, x1);prrepsstmtt2.eexeccuteeUpddatee();prrepsstmtt2.cclosse();coonn.cloose();4.6 生生成电费费单模块块实现privaate claass ButttonnacttionnPerrforrmedd immpleemennts ActtionnLisstennerpubblicc voiid aactiionPPerfformmed(ActtionnEveent e)faacnaame=seaarchh.geetTeext();tryconnn=DDrivverMManaagerr.geetCoonneectiion(urll, uuserr, ppasssworrd);connn.ssetAAutooCommmitt(trrue);Sysstemm.ouut.pprinntlnn("和和数据库库已经建建立连接接!"); stmmt=(Staatemmentt) cconnn.crreatteSttateemennt();rss=(RResuultSSet)stmmt.eexeccuteeQueery("seelecct * frrom facctorry "");whhilee(rss.neext()iif(rrs.ggetSStriing(2).equualss(faacnaame)x1=rs.gettStrringg(5);x2=rs.gettStrringg(6);x3=rs.gettStrringg(7);texxt1.settTexxt(rrs.ggetSStriing(5);texxt2.settTexxt(rrs.ggetSStriing(6);texxt3.settTexxt(rrs.ggetSStriing(7);rss.cllosee();sttmt.cloose();coonn.cloose();5 代码调调试与功功能测试试5.1 测测试方案案(1)分别别输入用用户、管管理员查查看登陆陆进去后后的界面面(2)分别别用用户户和管理理员查询询企业用用电信息息(3)添加加企业用用电信息息(4)修改改企业用用电信息息(5)删除除企业用用电信息息(6)生成成电费单单5.2 测测试结果果 管理员员登陆 管管理员登登陆后的的界面 管理员员登陆后后查询的的界面 用户登登陆后查查询的界界面 点击击添加后后的界面面 输入数数据添加成功 点击修修改进行行修改信信息 修改改成功 点击击删除后后出现的的界面 删删除成功功 点击击生成电电费单出出现的界界面在桌面生成成的电费费单6 收获与与体会一、这次课课程设计计的心得得体会通通过实践践我的收收获如下下:一开始接触触数据结结构课程程设计真真的挺难难的,好好多都不不会,不不是逻辑辑方面的的问题,而而不具备备动手能能力,脑脑子里总总有一团团火,比比如对于于这个题题目,一一开始有有很多的的想法,想想到了从从逻辑上上怎么实实现他,要要编写哪哪些程序序,但是是一到需需要编写写了就开开始为难难了,可可以说是是几乎不不知道从从哪里入入手,参参考了书书本里的的程序,仿仿照他的的结构一一步一步步做下来来,现在在对于单单链表的的各种操操作已经经算是比比较熟练练了,但但我知道道光有理理论知识识还远远远不够,需需要多动动手,写写的多了了自然就就能手到到擒来。二、根据我我在实习习中遇到到得问题题,我将将在以后后的学习习过程中中注意以以下几点点:1、认真上上好专业业实验课课,多在在实践中中锻炼自自己。2、写程序序的过程程中要考考虑周到到,严密密。3、在做设设计的时时候要有有信心,有有耐心,切切勿浮躁躁。4、认真的的学习课课本知识识,掌握握课本中中的知识识点,并并在此基基础上学学会灵活活运用。5、在课余余时间里里多写程程序,熟熟练掌握握在调试试程序的的过程中中所遇到到的常见见错误,以以便能节节省调试试程序的的时间。91参考文献1 钱钱雪忠,王燕玲玲,林挺挺.数据库原原理及技技术MM.北北京:清清华大学学出版社社,20111.2 钱钱雪忠,罗海驰驰,陈国俊俊.数据库库原理及及技术课课程设计计M.北京京:清华华大学出出版社,220144.附录附录1源程程序部分分清单附录1.11reccordd代码imporrt jjavaa.awwt.*;imporrt jjavaa.awwt.eevennt.*;imporrt jjavaa.sqql.CConnnecttionn;imporrt jjavaa.sqql.DDrivverMManaagerr;imporrt jjavaa.sqql.SSQLEExceeptiion;imporrt jjavaa.sqql.RResuultSSet;imporrt jjavaa.sqql.SStattemeent;imporrt jjavaax.sswinng.*;publiic claass Reccordd exxtennds JFrrameeprivvatee staaticc finnal lonng serriallVerrsioonUIID = 1LL;privvatee JLLabeel uuserrnamme,ppasssworrd;privvatee JTTexttFieeld useernaame22;privvatee JTTexttFieeld passswoord22,meessaage;privvatee JBButtton butttonn;privvatee JRRadiioBuuttoon bbox11,boox2;privvatee BuuttoonGrroupp buuttoongrroupp;privvatee Sttrinng aa,s;privvatee Sttrinng cc="""privvatee Sttrinng bb="""privvatee intt leevell=2;/prrivaate Strringg juuzi; publlic Reccordd()supper("Reecorrd");settSizze(3300,3000);tryyUIMaanagger.settLoookAnndFeeel(UIMManaagerr.geetSyysteemLoookAAndFFeellClaassNNamee();caatchh(Exxcepptioon ee)Conntaiinerr coontaaineer=ggetCConttenttPanne();conntaiinerr.seetBaackggrouund(Collor.ligghtGGrayy);conntaiinerr.seetLaayouut(nnulll);useernaame=neww JLLabeel(""用户名名:",JLaabell.RIIGHTT);passswoord=neww JLLabeel("" 密码码: "",JLLabeel.RRIGHHT);butttonngrooup=neww BuuttoonGrroupp();boxx1=nnew JRaadiooButttonn("员员工",truue);boxx2=nnew JRaadiooButttonn("管管理员"");useernaame22=neew JJTexxtFiieldd(200);passswoord22=neew JJTexxtFiieldd(200);messsagge=nnew JTeextFFielld(""欢迎使使用企业业用电管管理系统统");messsagge.ssetHHoriizonntallAliignmmentt(JTTexttFieeld.CENNTERR);butttonn=neew JJButttonn("登登录");useernaame.settBouundss(500, 550, 50, 255);useernaame22.seetBooundds(1100, 500, 1120, 255);passswoord.settBouundss(500, 885, 50, 255);passswoord22.seetBooundds(1100,85, 1220, 25);messsagge.ssetBBounnds(55,1600, 1190, 255);boxx1.ssetBBounnds(50,1200,500,255);boxx2.ssetBBounnds(1100,1220,770,225);butttonn.seetBooundds(1190, 1220, 60, 255);butttonngrooup.addd(boox1);butttonngrooup.addd(boox2);ButttonnacttionnPerrforrmedd buuttoonerr=neew BButttonaactiionPPerfformmed();butttonn.adddAcctioonLiisteenerr(buuttoonerr);RaddioBButttonHHanddlerr haandller = nnew RaddioBButttonHHanddlerr();boxx1.aaddIItemmLisstenner(hanndleer);boxx2.aaddIItemmLisstenner(hanndleer);conntaiinerr.addd(uuserrnamme);conntaiinerr.addd(uuserrnamme2);conntaiinerr.addd(ppasssworrd);conntaiinerr.addd(ppasssworrd2);conntaiinerr.addd(bbox11);conntaiinerr.addd(bbox22);conntaiinerr.addd(bbuttton);conntaiinerr.addd(mmesssagee);settVissiblle(ttruee);settDeffaulltClloseeOpeerattionn(JFFramme.EEXITT_ONN_CLLOSEE);publlic staaticc voiid mmainn(Sttrinng arrgs)Reccordd appp=neew RRecoord();appp.seetLoocattionnRellatiiveTTo(nnulll);privvatee claass RaddioBButttonHHanddlerr immpleemennts IteemLiisteenerrpubblicc voiid iitemmStaateCChanngedd(IttemEEvennt eevennt) iff(boox1.isSSeleecteed()mmesssagee.seetTeext("员工工登录"");lleveel=22;ellse if(bbox22.issSellectted()mmesssagee.seetTeext("管理理员登录录");lleveel=11;privvatee claass ButttonnacttionnPerrforrmedd immpleemennts ActtionnLisstennerpubblicc voiid aactiionPPerfformmed(ActtionnEveent e)/登录录a=useernaame22.geetTeext();s=passswoord22.geetTeext();trryCClasss.fforNNamee("ddrivver"");caatchh(CllasssNottFouundEExceeptiion argg0)SSysttem.outt.prrintt