综合设计报告小型图书管理系统_第1页
综合设计报告小型图书管理系统_第2页
综合设计报告小型图书管理系统_第3页
综合设计报告小型图书管理系统_第4页
综合设计报告小型图书管理系统_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、综 合 设 计 报 告小型图书管理系统学生姓名:学 号:年级专业:学 院:提交日期:2012年2月23日小型图书管理系统一、实验目的1、 熟练掌握sql命令2、 掌握swing图形用户界面编程。3、 掌握java与数据库的连接技术。4、 掌握java.sql包中提供各种类,编写程序实现数据库信息的存取和查询。5、 培养独立查找资料,并解决问题的能力。二、实验任务1、建立一个数据库library,其中含有如下表格(字段):books(isbn,title,authors,publisher,editionnumber,publicationdate,type)reader(readerid,fi

2、rstname,lastname,address,phonenumber,limits)record(recordid,isbn,readerid,borrowingdate,returndate)administrator(administratorid,password)student(readerid,password)使用microsoft sql server 2005数据库系统,提前设置好books,reader等的数据。2、使用java编程实现如下功能:(1)用户可通过相应界面,依据图书的isbn,title,authors,publisher,publicationdate,t

3、ype的组合条件,查询数据库中的符合条件的书籍,程序需将查询结果以表格的方式展示给用户,用户可选择结果排序的依据。(2)提供用户相应的方式借书。当用户选择借阅某本书籍时,应查询该书是否已经被借出:如果被借出,则显示信息(“该书已被借出,归还时间xxxxx”);如该书未被借出,则查阅读者权限(是否超出该读者所能借阅的最大数目书籍),如未超出显示借书成功,并向数据库中增加一条借阅记录,如果超出,则显示信息(“已超过您的最大借阅数目)。(3)提供用户相应的方式还书。还书成功时,将该次的借阅记录删除。(4)修改数据库设计,通过相应界面,提供reader、books的增加、删除、修改功能。(5)修改数据

4、库设计,可查询某用户的所有借阅记录。三、开发工具与平台1.开发工具:eclipse默认是一个和jbuilder类似的java开发工具,但它不仅仅只 是java开发工具,只要装上相应的插件,eclipse也可作为其它语言的开发工具。如c/c+插件(cdt)。2.开发平台:jdk1.73.数据库:microsoft sql server 2005四、设计内容1.界面设计 (1)登录界面(可选择学生用户或者管理员身份)主要采用gridlayout布局管理。(2) 学生用户界面(主要通过jtree和卡片布局) a.卡片布局主要是实现: 当用户通过jtree选择不同功能时,实现右边界面的切换。 b.界面

5、如下:(3) 管理界面的设计此界面主要采用borderlayout和box布局方式。2. 逻辑设计图书馆管理系统学生端管理员端查询图书归还图书借阅图书学生用户管理添加图书借阅图书归还图书管理添加加用户管理员规则查询图书2.1、学生用户端l 查询图书,学生用户可以进行简单查询和模糊查询;l 归还图书,学生自动输入自己的id号,再输入所要还的书,点击确认归还;l 借阅图书,借阅图书,可由学生自行操作,当然这有点不符合图书馆的原则。2.2、管理员端l 学生用户管理,原本打算实现用户信息的增、删、改、查,时间关系此功能并没有实现。l 图书管理,包括图书的增、删、改、查,时间关系,目前也只做了增加图书和

6、查询图书的功能。l 借阅管理,主要是学生借阅图书、归还图书和交纳罚款的管理。l 查询图书,可以进行简单查询和模糊查询。l 归还图书管理,实现学生的还书管理。l 添加新用户,目前只做了学生用户的添加,管理员得添加还要涉及超级管理员的管理,又时间较短,故也没有去实现。3. 程序测试 在程序测试中,主要问题在于组件放到有布局管理器的容器中时,其大小的设置有没有受到影响,比如setalignmentx(alignmentx)在其他布局管理其中不起作用,只在box布局管理器中起作用,网格布局管理器的组件大小(按钮等)大小也没办法自定义大小,介于此,我在写 addbookframe()和adduserfr

7、ame()两个界面时,采用 setlayout(null),使我能够完全按照自己的意愿来设置各组件的大小,同时也发现,其实布局管理器给我们提供的界面管理,也是非常非常好用好看的。五、附录 用eclipse编写的包及代码: 一 mon.frame: 管理学生用户和管理员得公共界面,包括借书界面(borrowpanel.java)、登录界面(login.java)、还书界面(returnpanel.java),查询(lookpanel.java)。public class borrowpanel extends jpanel implements actionlistener private fi

8、nal int max_student_borrow = 6; private jbutton yes; private jbutton no; private jbutton look; private jtable result; private jpanel pnorth; private jpanel p1; private jpanel p2; private jlabel bookisbn; private jtextfield isbn; private string c =isbn,书名,作者,出版社,编号,出版日期,类型; private string data = new

9、string3535; private jscrollpane s; private string readerid; private boolean islook =false;/是否存在; private string date;/借阅日期; private string rdate;/还书日期; private string dbdriver=com.microsoft.sqlserver.jdbc.sqlserverdriver; private string url = jdbc:sqlserver:/localhost:1433;databasename=library; priv

10、ate static final long serialversionuid = -8959055752439578441l; public borrowpanel(string readerid) super(); setname(借阅图书); setsize(450,400); setlayout(new borderlayout(); setbackground(color.red); this.readerid = readerid;/当前登录的读者id号; init(); this.add(pnorth,borderlayout.north); s.setautoscrolls(tr

11、ue); this.add(s,borderlayout.center); setvisible(true); private void init() yes = new jbutton(确认借阅);yes.setborder(borderfactory.createraisedbevelborder();yes.setpreferredsize(new dimension(150, 30);no = new jbutton(取消);no.setborder(borderfactory.createraisedbevelborder();no.setpreferredsize(new dime

12、nsion(150, 30);look = new jbutton(查询);look.setborder(borderfactory.createraisedbevelborder();look.setpreferredsize(new dimension(150, 30);bookisbn = new jlabel(请输入所要借阅的图书isbn号:);isbn = new jtextfield(15);pnorth = new jpanel();pnorth.setlayout(new borderlayout();p1 =new jpanel();p2 =new jpanel();p1.s

13、etlayout(new flowlayout();p2.setlayout(new flowlayout();p2.add(bookisbn,swingconstants.center);p2.add(isbn);p1.add(yes);p1.add(no);p1.add(look);pnorth.add(p1,borderlayout.center);pnorth.add(p2,borderlayout.north);result = new jtable(data,c);s = new jscrollpane(result);look.addactionlistener(this);ye

14、s.addactionlistener(this);no.addactionlistener(this);public void actionperformed(actionevent e) if(e.getsource() = yes)simpledateformat f = new simpledateformat(yyyy.mm.dd);date = f.format(new date();rdate = returndate(date);if(result.getselectedrow()=0)&(islook)borrow();else if(e.getsource() = look

15、) islook = look();else if(e.getsource() = no)private string returndate(string date2) /归还日期一个月string d = date2.split(.);string str1 = ,str2 = ,str3= ;if(d1.equals(10)|d1.equals(11)|d1.equals(12)if(d1.equals(12) str1 = string.valueof(integer.parseint(d0)+1); str2 = 01; str3 = d2;elsestr1 =d0;int s = i

16、nteger.parseint(d1)-1;str2 = string.valueof(s);str3 = d2;else int l = integer.parseint(d1.substring(1, 2)+1;str1 = d0;str2 = string.valueof(l);str3 = d2;return str1+.+str2+.+str3;private void borrow() connection cn; statement sm;string bookisbn = isbn.gettext().trim();string sql1 = select * from rec

17、ord where isbn = +bookisbn+;/从record中查看是否被借走;string sql2 = insert into record values(null,+bookisbn+,+readerid+,+date+,+rdate+);/插入到record;string sql3 = select * from reader where readerid = +readerid+;/查看读者已借阅的图书数;resultset rs1,rs2;int isinsert;int readerbook = 0;/已借阅的图书数;try class.forname(dbdriver

18、); / 加载驱动器cn = drivermanager.getconnection(url, sa, 123456); / 连接数据库sm = cn.createstatement();/查询该读者已借阅的图书数;rs2 = sm.executequery(sql3);while(rs2.next()+readerbook;if(readerbook = max_student_borrow)joptionpane.showmessagedialog(null, 该读者借阅图书数已超过上限,不能再继续借书);return;else /查询此图书被借阅的情况;rs1 =sm.executequ

19、ery(sql1);if(!rs1.next()/判断是否已经被别人借走;isinsert = sm.executeupdate(sql2);if(isinsert = 1)/借书成功joptionpane.showmessagedialog(null,借阅成功);else joptionpane.showmessagedialog(null, 借书功能维护中,暂时无法借阅);/end if(isinsert = 1)else string str = rs1.getstring(returndate);joptionpane.showmessagedialog(null, 此图书已被借走,不

20、在架+归还日期+str); / end else cn.close();catch(exception e)joptionpane.showmessagedialog(null, 数据库连接失败。);private boolean look() /按isbn号查询connection cn; statement sm;string bookisbn = isbn.gettext().trim();string sql = select * from books where isbn = +bookisbn+;resultset rs;try class.forname(dbdriver); /

21、 加载驱动器cn = drivermanager.getconnection(url, sa, 123456); / 连接数据库sm = cn.createstatement();rs = sm.executequery(sql);if(rs.next()/如果存在此书; data00 = rs.getstring(1); data01 = rs.getstring(2); data02 = rs.getstring(3); data03 = rs.getstring(4); data04 = rs.getstring(5); data05 = rs.getstring(6); data06

22、= rs.getstring(7); repaint(); cn.close(); return true; else cn.close();return false;catch(exception e)joptionpane.showmessagedialog(null, 查询失败,请检查连接);return false;public class loginframe extends jframe implements actionlistener /* 用户登录界面 */private jlabel numlabel;private jlabel codelabel;private jla

23、bel background;private jtextfield num;private jpasswordfield code;private jbutton loginbutton;private jbutton exitbutton;private jpanel pcenter;private jpanel psouth;private jradiobutton adiministrator;private jradiobutton student;private static final long serialversionuid = -8959055752439578441l;lo

24、ginframe()super();settitle(用户登录);setsize(350,300);/设置窗体大小setresizable(false);/设置不可调窗体大小dimension dimension = toolkit.getdefaulttoolkit().getscreensize();/返回窗口的大小setlocation(dimension.width-getwidth()/2,(dimension.height-getheight()/2);createloginframe();getcontentpane().add(background,borderlayout.n

25、orth);getcontentpane().add(pcenter,borderlayout.center);getcontentpane().add(psouth,borderlayout.south);pack();setvisible(true);private void createloginframe() numlabel = new jlabel(用户名,swingutilities.center);codelabel = new jlabel(密码,swingutilities.center);background = new jlabel(new imageicon(c:us

26、ershzlworkspacelibrarybackgroundlogin.png);num = new jtextfield();code = new jpasswordfield();code.setechochar(*);/设置此 jpasswordfield 的回显字符。loginbutton = new jbutton(登录);loginbutton.setborder(borderfactory.createraisedbevelborder();loginbutton.setpreferredsize(new dimension(150, 30);exitbutton = new

27、 jbutton(退出);exitbutton.setborder(borderfactory.createraisedbevelborder();exitbutton.setpreferredsize(new dimension(150, 30);pcenter = new jpanel();psouth = new jpanel();adiministrator = new jradiobutton(管理员);adiministrator.addactionlistener(this);student = new jradiobutton(学生);student.addactionlist

28、ener(this);loginbutton.addactionlistener(this);exitbutton.addactionlistener(this);adiministrator.addactionlistener(this);student.addactionlistener(this);buttongroup group = new buttongroup();group.add(adiministrator);group.add(student);pcenter.setlayout(new gridlayout(2,2,3,3); psouth.setlayout(new

29、gridlayout(2,2,4,4);pcenter.add(numlabel);pcenter.add(num);pcenter.add(codelabel);pcenter.add(code);loginbutton.setpreferredsize(new dimension(2,2);exitbutton.setpreferredsize(new dimension(2,2);psouth.add(student);psouth.add(adiministrator);psouth.add(loginbutton);psouth.add(exitbutton);public stat

30、ic void main(string args) new loginframe();public void actionperformed(actionevent e) if(e.getsource() = loginbutton)&adiministrator.isselected()if(new check(num.gettext().trim().tostring(),string.valueof(code.getpassword().trim(),a).checkright()dispose();new administratorframe(num.gettext().trim();

31、else joptionpane.showmessagedialog(null, 密码错误或账号不存在,请重新登录);/end loginbutton adiministrator.isselected() else if(e.getsource() = loginbutton)&student.isselected() if(new check(num.gettext().trim(),string.valueof(code.getpassword().trim(),s).checkright()dispose();new studentframe(num.gettext().trim();

32、else joptionpane.showmessagedialog(null, 密码错误或账号不存在,请重新登录);/end loginbutton student.isselected() else if(e.getsource() = exitbutton) system.exit(0); public class lookpanel extends jpanel implements actionlistener private jlabel labelbook;private jtextfield textbook;private jpanel p1;private jpanel p

33、2;private jscrollpane s;private cardlayout card;private jbutton lookallbutton;private jbutton lookbutton;private jbutton rt;private jtable looktable;private string c = isbn, 书名, 作者, 出版社, 编号, 出版日期, 类型 ;private string data = new string2525;private string dbdriver=com.microsoft.sqlserver.jdbc.sqlserver

34、driver;private string url = jdbc:sqlserver:/localhost:1433;databasename=library;private static final long serialversionuid = -8959055752439578441l;public lookpanel() super();setname(查询图书);setsize(250, 300);setbackground(color.red);init();p1.setlayout(new gridlayout(8, 2, 3, 3);for (int i = 0; i labe

35、lbook.length; +i) p1.add(labelbooki);p1.add(textbooki);p1.add(lookbutton);p1.add(lookallbutton);lookbutton.addactionlistener(this);lookallbutton.addactionlistener(this);rt.addactionlistener(this);looktable = new jtable(data, c);s = new jscrollpane(looktable);p2.setlayout(new borderlayout();p2.add(s,

36、 borderlayout.center);p2.add(rt, borderlayout.south);this.setlayout(card);this.add(p1, 1);this.add(p2, 2);setvisible(true);private void init() p1 = new jpanel();p2 = new jpanel();rt = new jbutton(返回查询条件设置);rt.setborder(borderfactory.createraisedbevelborder();rt.setpreferredsize(new dimension(150, 30

37、);lookbutton = new jbutton(依据参数查询);lookbutton.setborder(borderfactory.createraisedbevelborder();lookbutton.setpreferredsize(new dimension(150, 30);lookallbutton = new jbutton(查询全部);lookallbutton.setborder(borderfactory.createraisedbevelborder();lookallbutton.setpreferredsize(new dimension(150, 30);l

38、abelbook = new jlabel7;textbook = new jtextfield7;for (int t = 0; t labelbook.length; +t) labelbookt = new jlabel(, jlabel.center);textbookt = new jtextfield();labelbook0.settext(isbn);labelbook1.settext(书名);labelbook2.settext(作者);labelbook3.settext(出版社);labelbook4.settext(编号);labelbook5.settext(出版日

39、期);labelbook6.settext(类型);card = new cardlayout();public void actionperformed(actionevent e) if (e.getsource() = lookallbutton) lookallbook();card.show(this, 2); else if (e.getsource() = lookbutton) lookbook();card.show(this, 2); else if (e.getsource() = rt) card.show(this, 1);private void lookbook(

40、) connection con;statement stmt;resultset result;string sql;string s = new string7;for(int i =0;is.length;+i)si = ;if(!textbook0.gettext().trim().equals()s0 = textbook0.gettext().trim();sql = select * from books where isbn = +s0+;else if(!textbook4.gettext().trim().equals()s4 = textbook4.gettext().t

41、rim();sql = select * from books where editionnumber = +s6+;else sql = select * from books where title like %+ s1+% or type like %+s6+% +or authors like %+s2+% or publisher like %+s3+% or publicationdate like %+s5+% ; int c = 0;try class.forname(dbdriver); / 加载驱动器con = drivermanager.getconnection(url

42、, sa, 123456); / 连接数据库stmt = con.createstatement();result = stmt.executequery(sql);while (result.next() datac0 = result.getstring(1);datac1 = result.getstring(2);datac2 = result.getstring(3);datac3 = result.getstring(4);datac4 = result.getstring(5);datac5 = result.getstring(6);datac6 = result.getstr

43、ing(7);+c;con.close(); catch (exception e) joptionpane.showmessagedialog(null, 查询失败,请检查连接);private void lookallbook() connection con;statement stmt;resultset result;string sql;int c = 0; sql = select * from books;try class.forname(dbdriver); / 加载驱动器con = drivermanager.getconnection(url, sa, 123456);

44、 / 连接数据库stmt = con.createstatement();result = stmt.executequery(sql);if (result != null) while (result.next() datac0 = result.getstring(1);datac1 = result.getstring(2);datac2 = result.getstring(3);datac3 = result.getstring(4);datac4 = result.getstring(5);datac5 = result.getstring(6);datac6 = result.

45、getstring(7);+c;/ end while()con.close();/ end if catch (exception e) joptionpane.showmessagedialog(null, 查询失败,请检查连接情况);public class returnpanel extends jpanel implements actionlistener private jpanel pcenter;/ 用户结束情况显示;private jpanel pncenter;private jpanel pccenter;private jpanel pscenter;private

46、jpanel psouth;private jlabel labelid;private jtextfield textid1;private jbutton query;private jbutton newquery;private jtable table;/ 借书情况表;private string c = isbn, 书名, 作者, 出版社, 编号, 出版日期, 类型 ;private string data = new string3030;private jscrollpane s;private jlabel bookid;private jtextfield textid2;

47、private jbutton returnbutton;private jbutton returnup;/ 返回上级界面; private string dbdriver=com.microsoft.sqlserver.jdbc.sqlserverdriver; private string url = jdbc:sqlserver:/localhost:1433;databasename=library;private static final long serialversionuid = -8959055752439578441l;public returnpanel() super

48、();setname(书籍归还管理界面);dimension d = toolkit.getdefaulttoolkit().getscreensize();setlocation(d.width - getwidth() / 2 - 350,(d.height - getheight() / 2 - 350);setsize(600, 650);this.setlayout(new borderlayout();init();query.addactionlistener(this);newquery.addactionlistener(this);returnbutton.addactio

49、nlistener(this);returnup.addactionlistener(this);this.add(pcenter, borderlayout.center);this.add(psouth, borderlayout.south);setvisible(true);private void init() pcenter = new jpanel();pcenter.setborder(borderfactory.createtitledborder(borderfactory.createraisedbevelborder(), 用户借书情况显示);pncenter = new jpanel();pccenter = new jpanel();pscenter = new jpanel();psouth = new jpanel();labelid = new jlabel(请输入

温馨提示

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

评论

0/150

提交评论