版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、jiangsu university 項(xiàng) 目 實(shí) 踐 ii圖書館管理系統(tǒng)library management system學(xué) 院 名 稱 : 計(jì)算機(jī)科學(xué)與通信工程 專 業(yè) 班 級(jí) : 嵌入式軟件2012 學(xué) 號(hào) : 3120609004 學(xué) 生 姓 名 : 孫靜 指 導(dǎo) 教 師 : 宋和平 2014 年 6 月 正文一、課程設(shè)計(jì)概述1,目的: 本系統(tǒng)為學(xué)校的圖書館信息而設(shè)計(jì),實(shí)現(xiàn)信息處理的自動(dòng)化、規(guī)范化,主要用于處理圖書日常借閱和還書、圖書入庫(kù)、各種查詢操作,系統(tǒng)具有以下功能:1)圖書借閱與歸還處理,罰款與賠償2)圖書與讀者信息查詢與修改、刪除3)圖書入庫(kù)與圖書的信息修改、刪除4)員工信息的修
2、改、刪除2,任務(wù):1) 新建數(shù)據(jù)庫(kù),進(jìn)行表的設(shè)計(jì),實(shí)現(xiàn)數(shù)據(jù)錄入與更新2) 創(chuàng)建界面,實(shí)現(xiàn)客戶端的友好界面3) 對(duì)系統(tǒng)進(jìn)行功能的實(shí)現(xiàn)4) 解決實(shí)現(xiàn)過程中的問題3,開發(fā)環(huán)境:本系統(tǒng)采用sqlserver創(chuàng)建后臺(tái)數(shù)據(jù)庫(kù),前臺(tái)開發(fā)工具采用的visualstudio2010,編程語(yǔ)言為c#二、項(xiàng)目的需求分析1.分析系統(tǒng)的功能(1) 所有人員需要登陸才能操作系統(tǒng),可以修改密碼。(2) 圖書管理員可以添加圖書(包括書號(hào)、書名、出版社、作者、圖書簡(jiǎn)介、價(jià)格、封面圖片等信息)、刪除圖書,假設(shè)每種圖書只有一本。(3) 圖書管理員可以添加借閱者(包括借書證號(hào)、姓名、類別(教師或?qū)W生)、學(xué)院、性別、照片等信息)、刪除
3、借閱者。(4) 借閱者可以根據(jù)書名或者作者模糊查詢圖書,可以查看自己所借圖書信息。(5) 借閱者可以借閱圖書,此時(shí)需要記錄借書日期和應(yīng)還日期信息(設(shè)置借閱日期為30天)。(6) 借閱者包括教師和學(xué)生,教師最多可以借閱10本圖書,學(xué)生最多可以借閱5本圖書。(7) 借閱者如果有超期圖書則不能再借。(8) 借閱者還書時(shí),檢查是否超期,如果超期,按照0.1元/天計(jì)算罰款金額,繳納罰款后還書。如果圖書丟失,按照?qǐng)D書價(jià)格的兩倍賠償。(9) 實(shí)現(xiàn)系統(tǒng)時(shí)請(qǐng)考慮數(shù)據(jù)的參照完整性,例如借閱圖書時(shí)應(yīng)該是存在的圖書,刪除圖書時(shí)同時(shí)刪除該圖書的借閱信息。2. 劃分模塊a. 大的功能(見需求分析)b. 描述:填寫信息(見
4、概念模型,如何創(chuàng)建數(shù)據(jù)庫(kù))管理員有權(quán)利對(duì)人員和圖書進(jìn)行添加刪除操作,但不能刪除不存在的書或者人,添加也不能出現(xiàn)重復(fù)老師或者學(xué)生借閱時(shí)能夠看到未被借出的書的信息,并且不可以借不存在或者已借出的書怎樣處理借閱與歸還以及管理的事務(wù)可根據(jù)登錄人員的不同劃分為3個(gè)模塊(即管理員,老師,學(xué)生),分別實(shí)現(xiàn)各自的功能??筛鶕?jù)不同的操作方式劃分模塊,如圖:三、概念模型1.e-r圖分析。四、數(shù)據(jù)模型根據(jù)e-r圖轉(zhuǎn)換成關(guān)系模型(關(guān)系表)新建數(shù)據(jù)庫(kù)create database bookssystem創(chuàng)建表 create table books( bookid varchar(20), bname varchar(2
5、0) not null, bpublish varchar(20) not null, bauthor varchar(20) not null, bbrief varchar(20) , bprice money , bcover varchar(20) not null, primary key(bookid)create table bookout( readerid varchar(20) , bookid varchar(20) , outdate datetime, isreturn int, primary key(readerid,bookid), )create table
6、users( userid varchar(20) not null, username varchar(20)not null, usertype varchar(20), primary key(userid)create table readers( rid varchar(20) not null, rname varchar(20)not null, rtype varchar(20), rsex varchar(10) not null, rphone int, rmoney money, primary key(rid)1. books表:2,booksout表:3,reaser
7、s表:4,users表:五、功能設(shè)計(jì)1,登錄流程圖:根據(jù)登錄的信息判斷登錄者的類型,據(jù)此跳出不同的窗體界面來(lái)進(jìn)行不同的操作。private void button1_click(object sender, eventargs e) sqlconnection con = new sqlconnection(); con.connectionstring = data source =(local);initial catalog =bookssystem;integrated security=true; con.open();/用于連接數(shù)據(jù)庫(kù) sqlcommand da = new sql
8、command(select count(*) from dbo.users where userid =+textbox1 .text + and userpassword = +textbox2 .text + and usertype=+combobox1 .text +, con);/通過填入信息判斷是否是系統(tǒng)允許人員登錄 int flag = (int)da.executescalar(); da.connection.close(); con.close (); if (flag !=1) messagebox .show (用戶或密碼錯(cuò)誤); else b = combobox1
9、.text; a = textbox1.text; d = textbox2.text; if ( combobox1 .text=管理員 )/跳出管理操作界面 new form1().hide(); form2 f2 = new form2(); f2.show(); else /跳出借閱界面 if(combobox1 .text =學(xué)生|combobox1 .text =老師) new form1().hide(); form3 f3 = new form3(); f3.show(); form1 f1 = new form1(); f1.visible = false; 2,管理界面操作
10、的流程圖:需要判斷是圖書操作還是人員操作。還需判斷是否存在,是否重復(fù)添加,是否刪除了原本不存在的圖書和人員。/用一個(gè)button實(shí)現(xiàn)人員的添加和刪除(添加圖書時(shí)與此操作同理)if (button3.text = add) /連接數(shù)據(jù)庫(kù),添加符合要求的圖書并顯現(xiàn)出來(lái) sql a = new sql(); datagridview1.datasource = a.dt(insert into dbo.readers(rid,rname,rtype,rsex,rphone,rmoney) values( + textbox8.text + , + textbox9.text + , + textbo
11、x10.text + , + textbox11.text + , + textbox12.text + , + textbox13.text + ), readers); datagridview1.datasource = a.dt( select * from dbo.readers, readers); textbox8.text = ; else if (button3 .text =delete) /連接數(shù)據(jù)庫(kù),并判斷所要?jiǎng)h除的人員數(shù)據(jù)庫(kù)中是否存在,若不存在,則進(jìn)行處理 sqlconnection con = new sqlconnection(); con.connections
12、tring = data source =(local);initial catalog =bookssystem;integrated security=true; con.open(); string str = select count (userid) from dbo.users where userid=+textbox8 .text + ; sqlcommand db = new sqlcommand(str, con); int c = int.parse(db.executescalar().tostring(); if (c = 0) messagebox.show(該人員
13、不存在); else /人員存在時(shí)實(shí)行刪除操作并把操作后的數(shù)據(jù)表顯現(xiàn)出來(lái) sqlcommand da = new sqlcommand(delete from dbo.readers where rid= + textbox8.text + , con); da.executenonquery(); sql b = new sql(); / datagridview1.datasource = b.dt(delete from dbo.readers where rid= + textbox8.text + , readers); datagridview1.datasource = b.dt
14、( select * from dbo.readers, readers); da.connection.close(); con.close(); 3,借還界面的流程圖:借書時(shí)有些限制也需要實(shí)現(xiàn)。比如,學(xué)生只能最多借5本,老師最多只能借10本。如果有超期圖書則不能借。/用button1實(shí)現(xiàn)查詢,若書不滿足搜索條件顯示該書不存在;在歸還時(shí),查詢此書是否借出等信息 private void button1_click(object sender, eventargs e) if (button1 .text = 搜索) sql b = new sql(); datagridview1.datas
15、ource = b.dt( select * from dbo.books join dbo.bookout on dbo.bookout.bookid = dbo.books.bookid where dbo.bookout.isreturn=1 and bname like % + textbox1.text + % and bauthor like % + textbox7.text + %, books); sqlconnection con = new sqlconnection(); con.connectionstring = data source =(local);initi
16、al catalog =bookssystem;integrated security=true; con.open(); string str= select count(dbo.bookout.bookid) from dbo.books join dbo.bookout on dbo.bookout.bookid = dbo.books.bookid where dbo.bookout.isreturn=1 and bname like % + textbox1.text + % and bauthor like % + textbox7.text + %; sqlcommand da
17、= new sqlcommand(str , con); int c=int.parse (da.executescalar().tostring(); if (c = 0) messagebox.show(該書不存在); else if(button1 .text =確認(rèn)歸還) sql b = new sql(); datagridview1.datasource = b.dt( select * from dbo.books join dbo.bookout on dbo.bookout.bookid = dbo.books.bookid where dbo.books.isreturn
18、= 0 and dbo.books.bname like% + textbox1.text + % and bauthor like % + textbox7.text + %and readerid=+form1.a + , return); /此鍵用于確認(rèn)借書或者還書private void button2_click(object sender, eventargs e) /用于獲取借書時(shí)日期,并顯示在textbox5里 textbox5.text = system.datetime.now.tostring(); /用于獲取還書日期 textbox6.text = system.dat
19、etime.now.adddays(30).tostring(); sqlconnection con = new sqlconnection(); con.connectionstring = data source =(local);initial catalog =bookssystem;integrated security=true; con.open(); string str = select count(dbo.books.bookid) from dbo.books join dbo.bookout on dbo.bookout.bookid = dbo.books.book
20、id where dbo.books.isreturn = 0 and readerid= + form1.a + ; sqlcommand da = new sqlcommand(str, con); int c = int.parse(da.executescalar().tostring();/判斷借書者身份,限制借書數(shù) if (form1.b = 學(xué)生) if (c = 5) messagebox.show(不得超過5本!); else sqlcommand da1 = new sqlcommand(update dbo.books set dbo.books.isreturn=0 w
21、here dbo.books.bookid = + textbox3.text + and exists(select * from dbo.books join dbo.bookout on dbo.bookout.bookid=dbo.books.bookid join dbo.readers on readerid=rid where dbo.bookout.bookid= + textbox3.text + ), con); da1.executenonquery(); sql b = new sql(); datagridview1.datasource = b.dt( select
22、 * from dbo.books, books); if (da.executenonquery() != 0) sqlcommand db = new sqlcommand(update dbo.bookout set isreturn=0 ,readerid= + form1.a + where bookid= + textbox3.text + and exists(select * from dbo.books join dbo.bookout on dbo.bookout.bookid=dbo.books.bookid join dbo.readers on readerid=ri
23、d where dbo.bookout.bookid= + textbox3.text + ), con); db.executenonquery(); db.connection.close(); con.close(); da.connection.close(); con.close(); else if (c = 10) messagebox.show(不得超過10本!); else sqlcommand da1 = new sqlcommand(update dbo.books set dbo.books.isreturn=0 where dbo.books.bookid = + t
24、extbox3.text + and exists(select * from dbo.books join dbo.bookout on dbo.bookout.bookid=dbo.books.bookid join dbo.readers on readerid=rid where dbo.bookout.bookid= + textbox3.text + ), con); da1.executenonquery(); sql b = new sql(); datagridview1.datasource = b.dt( select * from dbo.books, books);
25、if (da.executenonquery() != 0) /操作完成時(shí)更新數(shù)據(jù)庫(kù) sqlcommand db = new sqlcommand(update dbo.bookout set isreturn=0 ,readerid= + form1.a + where bookid= + textbox3.text + and exists(select * from dbo.books join dbo.bookout on dbo.bookout.bookid=dbo.books.bookid join dbo.readers on readerid=rid where dbo.boo
26、kout.bookid= + textbox3.text + ), con); db.executenonquery(); db.connection.close(); con.close(); da.connection.close(); con.close(); 6、 運(yùn)行過程1. 登陸界面:需要填寫用戶名,密碼與用戶類型管理員登錄:老師登錄:學(xué)生登錄:2. 管理員操作:欲添加圖書時(shí)需要填寫信息,此時(shí)bookid必填,且不能出現(xiàn)添加同本書的情況:添加人員,類似添加圖書,出現(xiàn)重復(fù)添加時(shí):(主鍵的設(shè)置)不添加同一個(gè)人時(shí):刪除人員時(shí),若此人不存在,則提醒:3,老師或者學(xué)生登錄時(shí)出現(xiàn)借閱者操作界面
27、,可以實(shí)現(xiàn)借書與還書功能。借閱時(shí)可根據(jù)書名或者作者名進(jìn)行模糊查詢,并且已借出書籍不可再借。借不存在書籍時(shí)出現(xiàn)提醒。4,還書時(shí),系統(tǒng)根據(jù)登陸時(shí)的用戶名顯示出所借的書的詳細(xì)信息,以便輕松還書,根據(jù)書的id號(hào)來(lái)還書。5,當(dāng)歸還時(shí)產(chǎn)生借閱記錄,欠款金額的查詢項(xiàng)等,點(diǎn)擊即可查詢,若有丟失,可直接返回借閱界面進(jìn)行信息查詢,并及時(shí)賠款:6,登錄界面時(shí)可以進(jìn)行密碼的修改7、 個(gè)人遇到的困難、解決方法與個(gè)人小結(jié)1,起初連接數(shù)據(jù)庫(kù)時(shí)有問題解決發(fā)法:通過查閱書籍與上網(wǎng)查資料等手段,掌握兩種連接數(shù)據(jù)庫(kù)的手段與方法。先創(chuàng)建sql連接類,然后創(chuàng)建實(shí)例如:sql b = new sql();再在datagridview導(dǎo)出
28、數(shù)據(jù)庫(kù)的表格 datagridview1.datasource = b.dt( select * from dbo.books join dbo.bookout on dbo.bookout.bookid = dbo.books.bookid where dbo.bookout.isreturn=1 and bname like % + textbox1.text + % and bauthor like % + textbox7.text + %, books);這種方法比較慢,還有一種是比較快速的方式,如: sqlconnection con = new sqlconnection();
29、con.connectionstring = data source =(local);initial catalog =bookssystem;integrated security=true; con.open(); string str = select count (userid) from dbo.users where userid=+textbox8 .text + ; sqlcommand db = new sqlcommand(str, con);2,問題:創(chuàng)建數(shù)據(jù)庫(kù)時(shí)發(fā)現(xiàn)book表與bookout表雖然可以連接,但是在借出書之后,更新表bookout時(shí)可以將isreturn
30、設(shè)為0,表示已借出,但book表里面沒有顯示出已借出,其他人員搜索時(shí),會(huì)出現(xiàn)同一本書,被兩個(gè)人同時(shí)借走的狀況。解決方法:在book表里面也設(shè)置一個(gè)isreturn屬性,當(dāng)借出書時(shí),兩表連接,使得isreturn 都變?yōu)?,此時(shí)若有人想借書,在gridview顯示的未借出列表中就不會(huì)出現(xiàn)該書,不會(huì)導(dǎo)致沖突。3,問題:在計(jì)算日期時(shí),使用的此方法: 借書日期: textbox5.text = system.datetime.now.tostring(); 還書日期: textbox6.text = system.datetime.now.adddays(30).tostring();因此導(dǎo)致在計(jì)算欠
31、款時(shí),價(jià)錢出現(xiàn)了上千的情況,并沒有按照小時(shí)來(lái)算超期時(shí)間解決方法:先連接數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)中讀取借出時(shí)的日期,由此讀取當(dāng)前日期與借出日期的差值,并轉(zhuǎn)化為天數(shù) int i = d.days-30;減30是因?yàn)槌^30 天之后才需要罰款 sqlconnection con = new sqlconnection(); con.connectionstring = data source =(local);initial catalog =bookssystem;integrated security=true; con.open(); string str = select outdate from
32、dbo.bookout where readerid=+form1 .a + and isreturn=0; sqlcommand da = new sqlcommand(str, con); string s = da.executescalar().tostring(); datetime t = convert.todatetime(s); datetime t1 = datetime.now; timespan d = t1 - t; int i = d.days-30; double ii = (double)(i / 10); textbox1.text = ii.tostring
33、() + 元;4,問題:起初還書時(shí),發(fā)現(xiàn)自己不光能查閱到自己所未還的書,還能查閱到其他人未還的書。此漏洞屬于泄露隱私的情況。只要限定用戶名和isreturn=0即可,也造成了數(shù)據(jù)的多余。又因?yàn)榈卿浗缑媾c借還界面不在一個(gè)form里,限定自己的用戶名時(shí)必須要回到原界面否則需要再次輸入用戶名,顯得累贅和繁瑣。解決方法:在form1中將登陸時(shí)所填的用戶名設(shè)為靜態(tài)變量,因此查詢所需還的書時(shí),在sql語(yǔ)句中可以這樣寫:select * from dbo.books join dbo.bookout on dbo.bookout.bookid = dbo.books.bookid where dbo.boo
34、ks.isreturn = 1 and readerid= + form1.a + 同理,只要在登錄時(shí)將登錄時(shí)的密碼和用戶類型設(shè)為靜態(tài)變量,修改密碼和判斷用戶可借多少本書時(shí)就變得容易得多了。如: if (form1 .b=學(xué)生) sqlconnection con = new sqlconnection(); con.connectionstring = data source =(local);initial catalog =bookssystem;integrated security=true; con.open(); string str =select count(dbo.book
35、s.bookid) from dbo.books join dbo.bookout on dbo.bookout.bookid = dbo.books.bookid where dbo.books.isreturn = 0 and readerid= + form1.a + ; sqlcommand da = new sqlcommand(str, con); int c = int.parse(da.executescalar().tostring(); if (c=5) messagebox.show(不得超過5本!); 5,問題:在登陸時(shí),無(wú)法判斷所填信息是否是數(shù)據(jù)庫(kù)中所有的信息,即,該用戶是否存在,或者,所填信息用戶名與密碼,用戶類型是否匹配的問題。解決方法:sqlcommand da = new sqlcommand(select count(*) from dbo.users where userid =+tex
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度木結(jié)構(gòu)工程安全風(fēng)險(xiǎn)評(píng)估與管控合同
- 二零二五版航空航天設(shè)備采購(gòu)合同集2篇
- 二零二五年度跨境電商物流服務(wù)合同變更2篇
- 管理溝通培訓(xùn)
- 二零二五年度貨車貨運(yùn)配送承包合同3篇
- 基于2025年度財(cái)務(wù)預(yù)算的合同成本管理與優(yōu)化2篇
- 地質(zhì)勘查專用設(shè)備制造考核試卷
- 二零二五版環(huán)保項(xiàng)目墊資合同范本2篇
- 2025年度木材加工鋼材買賣居間合同附帶供應(yīng)鏈金融方案3篇
- 2025版小學(xué)校園廣播系統(tǒng)升級(jí)合同3篇
- 《電影之創(chuàng)戰(zhàn)紀(jì)》課件
- 社區(qū)醫(yī)療抗菌藥物分級(jí)管理方案
- 開題報(bào)告-鑄牢中華民族共同體意識(shí)的學(xué)校教育研究
- 《醫(yī)院標(biāo)識(shí)牌規(guī)劃設(shè)計(jì)方案》
- 夜市運(yùn)營(yíng)投標(biāo)方案(技術(shù)方案)
- 電接點(diǎn) 水位計(jì)工作原理及故障處理
- 國(guó)家職業(yè)大典
- 2024版房產(chǎn)代持協(xié)議書樣本
- 公眾號(hào)運(yùn)營(yíng)實(shí)戰(zhàn)手冊(cè)
- 教學(xué)查房及體格檢查評(píng)分標(biāo)準(zhǔn)
- 西方經(jīng)濟(jì)學(xué)(第二版)完整整套教學(xué)課件
評(píng)論
0/150
提交評(píng)論