300 likes | 457 Views
综合实例. 图书管理系统. 功能需求. 图书信息查询,要提供多种信息查询方式。 读者个人借阅记录查询。 办理借书、还书手续。 读者信息维护。 馆藏图书的管理,包括新书入库,图书数据的统计等 。 当查询读者个人借阅信息时,读者需要输入自己的读者号及口令、且只能查询自己的信息。 面向图书管理员的功能,要核对管理员的编号和密码,读者不能进入。. 数据库表设计. 管理员表 adm ( admid 管理员编号, admps 管理员密码) 读者信息表 reader ( rno 读者号, rname 读者姓名, class 班级, passwd 密码)
E N D
综合实例 图书管理系统
功能需求 • 图书信息查询,要提供多种信息查询方式。 • 读者个人借阅记录查询。 • 办理借书、还书手续。 • 读者信息维护。 • 馆藏图书的管理,包括新书入库,图书数据的统计等。 • 当查询读者个人借阅信息时,读者需要输入自己的读者号及口令、且只能查询自己的信息。 • 面向图书管理员的功能,要核对管理员的编号和密码,读者不能进入。
数据库表设计 • 管理员表 adm(admid 管理员编号,admps 管理员密码) • 读者信息表reader(rno 读者号,rname读者姓名,class 班级, passwd 密码) • 图书信息表books(bno 图书编号,bname书名,author作者, price定价,brief简介,cover封皮, num 馆藏册数 ) • 借阅记录borrow (rno读者号, bno图书编号,rdate还书时间)
主界面设计 database1
主窗体代码 implementation {$R *.dfm} uses unit2,unit3,unit4,unit5,unit6,unit7 ,unit8; procedureTForm1.Button1Click(Sender: TObject); Begin //图书信息查询 form2.ShowModal ; end; procedure TForm1.Button6Click(Sender: TObject); Begin //办理借还书 if form8.ShowModal = mrOk then //核查管理员身份 form7.ShowModal ; end;
管理员身份认证 SQL属性: select * from adm where admid= :admid procedure TForm8.Button1Click(Sender: TObject); //“确认”按钮 begin query1.Close ; query1.ParamByName('admid').Value := edit1.Text ; query1.Open ; if query1['admps']=null then //如果帐号查不到,说明帐号错 begin showmessage('管理员帐号错'); exit ; end ;
管理员身份认证 if query1['admps'] <> edit2.Text then //检查密码 begin showmessage('密码错'); exit ; end ; form8.ModalResult := mrOk ; //对话框mrOk返回 end; procedure TForm8.Button2Click(Sender: TObject); //“撤销” 按钮 begin form8.ModalResult := mrCancel; //对话框mrCancel返回 end; procedure TForm8.FormShow(Sender: TObject); //进入对话框预清 begin edit1.Clear; edit2.Clear ; end; end.
无条件查询界面代码 procedure TForm2.ListBox1Click(Sender: TObject); //选择排序列 begin query1.Close ; query1.SQL.Clear ; case listbox1.ItemIndex of //判断用户选择了第几项 0 : query1.SQL.Add('select * from books order by bno'); 1 : query1.SQL.Add('select * from books order by bname'); 2 : query1.SQL.Add('select * from books order by author'); end ; query1.Open ;
有条件查询界面代码 procedure TForm2.Button3Click(Sender: TObject); // “书名查询” begin query1.Close ; query1.SQL.Clear ; query1.SQL.Add( 'select * from books where bname like ''%' + edit1.Text + '%'''); query1.Open ; end; procedure TForm2.Button4Click(Sender: TObject); //“作者查询” begin query1.Close ; query1.SQL.Clear ; query1.SQL.Add( 'select * from books where author = ''' + edit1.Text + ''''); query1.Open ; end; Where bname like '%计算机%' Where author = ‘王欣’
个人借书查询界面 select * from reader where rno=:rno select borrow.bno, bname, rdate from borrow, books where rno=:rno and borrow.bno=books.bno
个人借书查询代码 procedure TForm6.Button1Click(Sender: TObject); //“确定” begin query1.Close ; query1.ParamByName('rno').Value := edit1.Text ; query1.Open ; //根据输入的读者号查询读者信息 if query1['rname']=null then // 如果没有查出读者名 begin showmessage('读者号错'); //给出提示信息 exit ; //退出事件处理程序 end ; if query1['passwd'] <> edit2.Text then //核对输入的密码 begin showmessage('密码错');
个人借书查询代码 exit ; //密码错,退出事件处理程序 end ; edit3.Text := query1['rname'] ; //显示读者姓名(读数据集字段值) edit4.Text := query1['class'] ; //显示读者班级 query2.Close ; query2.ParamByName('rno').Value := edit1.Text ; query2.Open ; //显示读者借书信息 end;
借书处理 procedure TForm7.Button1Click(Sender: TObject); //“借书”按钮 var rname,bname :string ; // rname保存读者名,bname保存书名 num : integer ; //保存某本书的馆藏册数 begin query1.Close ; query1.SQL.Clear ; query1.SQL.Add('select rname from reader where rno= ''' + edit1.text + '''') ; query1.Open ; //由读者号查读者名 if query1['rname'] = null then //如果没有查出读者名,则… begin showmessage('读者号没有注册'); exit ; //退出 end ; rname := query1['rname'] ; //保存查到的读者名
借书处理 query1.Close ; query1.SQL.Clear ; query1.SQL.Add( 'select count(*) cnt from borrow where rno= ''' + edit1.text + '''') ; query1.Open ; //查询该读者已经借了几本书 if query1['cnt'] = 10 then begin showmessage('该读者已借了10本书,不能再借'); exit ; end ;
借书处理 query1.Close ; query1.SQL.Clear ; query1.SQL.Add( 'select bname,num from books where bno= ''' + edit2.text + '''') ; query1.Open ; //由书号查书名 if query1['bname'] = null then //如果查不出书名,则…. begin showmessage('没有此书号'); exit ; end ; bname := query1['bname'] ; //保存查出的书名 num := query1['num'] ; //保存该书的馆藏册数
借书处理 query1.Close ; query1.SQL.Clear ; query1.SQL.Add( 'select count(*) from borrow where bno= ''' + edit2.text + '''') ; query1.Open ; //查询该书已借出的册数 if query1.Fields[0].AsInteger = num then //如果借出册数等于馆藏册书,则… begin showmessage(bname + ' 已全部借出'); exit ; end ;
借书处理 query1.Close ; query1.SQL.Clear ; query1.SQL.Add('select * from borrow where rno= ''' + edit1.text + ''' and bno =''' + edit2.Text + '''') ; query1.Open ; //查询该读者是否借了该书 if query1.Fields[0].Value = null then begin //如果没有借 query1.Close ; query1.SQL.Clear ; query1.SQL.Add('insert into borrow values(''' + edit1.Text + ''',''' + edit2.Text + ''','''+ formatdatetime('m"/"d"/"yyyy',date+15) + ''')' ) ; query1.ExecSQL ; //插入一条借书记录,完成借书手续 end
借书处理 else //如果读者已经借了该书 if MessageDlg( '是否续借', mtConfirmation,[mbYes,mbNo] , 0)=mrYes hen begin //办理续借手续 ,延长15天 query1.Close ; query1.SQL.Clear ; query1.SQL.Add('update borrow set rdate= rdate +15 where rno=''' + edit1.Text + ''' and bno=''' + edit2.Text + '''') ; query1.ExecSQL ; //修改还书时间 end else exit ; memo1.Clear ; //在memo对象中显示借书信息 memo1.Lines.add(rname + ' 借阅图书:'); memo1.Lines.add(bname); edit1.Clear ; edit2.Clear ; end;
还书处理 select bno,bname,rdate from borrow,books where borrow.bno = books.bno and rno = :rno delete from borrow where rno=:rno and bno=:bno
还书处理 procedure TForm7.Button3Click(Sender: TObject); //“确定” begin query2.Close ; query2.ParamByName('rno').Value := edit3.Text ; query2.Open ; //查询读者借书信息 procedure TForm7.Button2Click(Sender: TObject); //“还书” begin query3.Close ; query3.ParamByName('rno').Value := edit3.Text ; query3.ParamByName('bno').Value := query2bno.Value ; query3.ExecSQL ; //删除借书记录,完成还书手续 query2.Close ; query2.Open ; //重新显示该读者还书后的借书信息 end;
读者信息管理 select rno from borrow where rno= :rno
读者信息管理 procedure TForm3.Table1BeforeDelete(DataSet: TDataSet); begin //在对数据集当前记录删除之前触发 query1.Close ; query1.ParamByName('rno').Value := table1['rno'] ; //取要删除的当前读者号为参数赋值 query1.Open ; if query1['rno'] <>null then //如果该读者还有书未还 begin showmessage('该读者书未还清,读者记录不能删除'); abort ; //禁止删除 end ; end;
新书入库 DBImage1.PasteFromClipboard
图书资产统计 Query1 select count(*), sum(num), sum(price*num) from books Query2 procedure TForm5.Table1CalcFields(DataSet: TDataSet); begin query2.Close ; query2.ParamByName('bno').Value := table1bno.Value ; query2.Open ; table1bnum.Value := query2.Fields[0].AsInteger ; end; select count(*) from borrow where bno=:bno 永久字段