已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图书管理系统的设计一、系统分析21.开发背景22.需求分析2二、系统设计21.系统总体结构22.数据库设计33.编码设计4三、系统实施41.登录42.系统主界面53.书库管理71)新书登记:72)借书/还书:131)缴费202)书籍挂失:233)图书信息查询:284)借书信息查询:304.借阅证管理:311)办理借阅证:312)借阅证信息查询:343)借阅证挂失:355.系统/其它:381)添加账号:382)修改密码:403)退出:41四、总结(体会、经验与教训)42一、 系统分析1. 开发背景随着人们知识层次的提高,图书馆成为日常生活中不可缺少的一部分。而图书馆的存数量和业务量庞大,仅仅靠传统的记账式管理是不可行的。图书馆管理系统应运而生,逐渐成为信息化建设的重要组成部分。图书馆管理系统为学校或社会型图书馆的管理员提供所有借阅者的详细信息,以及馆内库存的详细情况,对借书和还书两大功能进行合理操纵并登记。2. 需求分析经过仔细分析系统需求之后,本图书管理系统主要完成的主要功能如下:l 进入系统前需要身份验证、用户名、密码,输入正确后方可进入。l 用户可以根据需要进行书库管理。l 用户可以进行借书证的办理、查询、挂失等操作。l 用户可以添加账户和修改密码。l 身份验证:提供系统的访问控制功能。l 书库管理:包括新书登记、借书、还书、书籍挂失、图书信息查询、借书信息查询等功能。l 借阅证管理:提供办理借阅证、借阅证信息查询、借阅证挂失功能。l 系统管理功能:包括添加账号、修改密码和退出系统等功能。二、 系统设计1. 系统总体结构通过对图书管理系统的功能分析,可以定义出系统的功能模块图如下:2. 数据库设计l 管理员基本信息表字段名称数据类型可否为空约束条件说明WorkIDintNOT NULL主键成员IDUser_NameVARCHAR(24)NOT NULL无姓名PasswordVARCHAR(24)NOT NULL无密码l 图书信息表字段名称数据类型可否为空约束条件说明Book_IDVARCHAR(50)NOT NULL主键书籍IDBook_NameVARCHAR(50)NOT NULL无书名WriterVARCHAR(50)NOT NULL无作者PressVARCHAR(50)NOT NULL无出版社PricefloatNOT NULL无单价InLibrary_DatedatetimeNOT NULL无入库时间Total_AmountintNOT NULL无总量Now_AmountintNOT NULL无现存量l 借阅卡信息表字段名称数据类型可否为空约束条件说明Proof_IDVARCHAR(50)NOT NULL主键借阅卡IDNameVARCHAR(50)NOT NULL无姓名SexVARCHAR(50)NOT NULL无性别Birth_TimedatetimeNOT NULL无出生日期AddressVARCHAR(50)NOT NULL无地址ID_NumberVARCHAR(50)NOT NULL无身份证号Tel_NumberVARCHAR(50)NOT NULL无电话号码Now_Borrow_AmountintNOT NULL无现借书量l 借书信息表字段名称数据类型可否为空约束条件说明BorrowIDintNOT NULL主键借书IDProof_IDVARCHAR(50)NOT NULL外键(Proof_Info)借书卡IDBook_IDVARCHAR(50)NOT NULL外键(Book_Info)书籍IDBorrow_DatedatetimeNOT NULL无借出时间l 罚单信息表字段名称数据类型可否为空约束条件说明Puni_IDintNOT NULL主键罚单IDProof_IDVARCHAR(50)NOT NULL无借书卡IDBook_IDVARCHAR(50)NOT NULL无书籍IDBorrow_DatedatetimeNOT NULL无借出时间Return_DatedatetimeNOT NULL无还书时间Puni_MoneyfloatNOT NULL无罚金3. 编码设计l WorkID,BorrowID,Puni_ID都设置了标识规范,增加记录时自动加1,保持其唯一性。l Borrow_Date,Return_Date,InLibrary_Date都设置成datetime类型,插入记录时自动获取当前日期,不需要管理员输入日期。l Proof_ID,Book_ID,ID_Number,Tel_Number,Proof_ID由于它们只是代表一个标识,不是一个表示大小的数字,所以用VARCHAR类型,用int或long可能会有溢出现象。三、 系统实施1. 登录l 功能说明:验证管理员的用户名和密码是否正确,正确则进入主界面。l 源代码:头文件:using System.Data.SqlClient;连接数据库:SqlConnection con = new SqlConnection(server=20100310-1827SQLEXPRESS;database=Library;Integrated Security=True);程序主体:private void button_exit_Click(object sender, EventArgs e)/退出 Application.Exit(); private void button_log_Click(object sender, EventArgs e)/登录 if (this.UserName.Text.Trim() = | this.PassWord.Text.Trim() = ) MessageBox.Show(用户名和密码都不能为空!); if (con.State = ConnectionState.Closed) con.Open(); String str = select count(*) from Admin_Info where User_Name= + this.UserName.Text.Trim() + and Password= + this.PassWord.Text + ; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar(); if (i 0) Form2 form2 = new Form2();/系统主界面 form2.Show(); this.Visible = false; else MessageBox.Show(用户名或密码输入有误,请重新输入!); this.UserName.Text = ; this.PassWord.Text = ; l 界面演示:登录名和密码正确的话进入系统主界面(图一);登录名或者密码不正确的话会弹出提示对话框,并将用户名、密码栏置空(图二);如果用户名或者密码有空,弹出对话框并将用户名、密码栏置空(图三)。 图1 图2 图3 图42. 系统主界面l 功能说明:选择各个功能模块l 源代码:private void Form2_FormClosing(object sender, FormClosingEventArgs e) Application.Exit(); private void button_exit_Click(object sender, EventArgs e) Application.Exit(); private void button_new_book_Click(object sender, EventArgs e) Form3 form3 = new Form3();/新书登记 form3.Show(); /初始化对应界面,和上面类似,不再赘述l 界面演示:如图43. 书库管理1) 新书登记:l 功能说明:入库的实现过程是首先要输入书籍的各种信息,包括书的书号、书名、作者、出版社、价钱、总量、现存量等,这里书的数量由两个变量来记录,总量代表图书馆中这种这种书的总量,现存量是目前正在管中的量,两者之差就是被读者借出去的数量。其中每个信息不能有遗漏或者格式不正确,因为这是每一本书的基本信息,在函数的实现过程中有检验的功能。然后判断图书馆中是否存在这种图书,如果存在,那么时间简单的把库存的数量加上新加入的数量,如果不存在,那么就要新建记录。l 源代码:连接数据库:SqlDataAdapter da = new SqlDataAdapter();DataSet ds = new DataSet();程序主体:/主界面调用的每个模块的返回按钮都是隐藏本体,以后不再写出返回按钮的操作带代码private void button_back_Click(object sender, EventArgs e)/返回 this.Visible = false; private void button_in_Click(object sender, EventArgs e)/入库 int res; /检验输入数据是否合法 if (this.textBox_book_no.Text.Trim() = |this.textBox_name .Text .Trim ()= |boBox_press .Text .Trim ()=|this.textBox_price .Text .Trim ()= |this.textBox_total .Text .Trim ()=|this.textBox_writer .Text .Trim ()=) MessageBox.Show (请正确填写要求的数据!, 新书入库登记); this.textBox_book_no.Text = ; this.textBox_name.Text = ; boBox_press .Text = ; this.textBox_price.Text = ; this.textBox_total.Text = ; this.textBox_writer.Text = ; /判断书库中是否有该书,有,仅把数量加进去,没有,加进一条新的记录 else if (con.State = ConnectionState.Closed) con.Open(); String str1 = select Total_Amount from Book_Info where Book_ID= + this.textBox_book_no.Text.Trim() + ; SqlCommand com1 = new SqlCommand(str1, con); int total_num = Convert.ToInt32(com1.ExecuteScalar(); String str2 = select Now_Amount from Book_Info where Book_ID= + this.textBox_book_no.Text.Trim() + ; SqlCommand com2 = new SqlCommand(str2, con); int now_num = Convert.ToInt32(com2.ExecuteScalar(); int num1 = Convert.ToInt32(this.textBox_total.Text); total_num += num1; now_num += num1; String str = select count(*) from Book_Info where Book_ID= + this.textBox_book_no.Text.Trim() + ; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar(); if (i 0) String str3 = update dbo.Book_Info set Total_Amount= + total_num.ToString ().Trim () + ,Now_Amount= + now_num.ToString() .Trim () + where Book_ID= + this.textBox_book_no.Text.Trim() + ; da.UpdateCommand = new SqlCommand(str3, con); res=da.UpdateCommand.ExecuteNonQuery(); if(res0) MessageBox.Show(新书入库成功!,新书登记); else MessageBox.Show(新书入库失败!, 新书登记); else String bookid = this.textBox_book_no.Text .ToString().Trim(); String name = this.textBox_name.Text .ToString().Trim(); String writer = this.textBox_writer.Text .ToString().Trim(); String press = boBox_press .Text .ToString().Trim(); float price =(float) Convert.ToDouble (this.textBox_price.Text .ToString().Trim(); String dt = DateTime.Now.ToString(); int totalaccount = Convert.ToInt32(total_num.ToString().Trim(); int nowacount =Convert .ToInt32 (now_num.ToString().Trim(); String str3 = insert into dbo.Book_Info (Book_ID,Book_Name,Writer,Press,Price,+ InLibrary_Date,Total_Amount,Now_Amount) +values (+bookid+,+name+, +writer+,+press+,+price+, + dt + ,+totalaccount+,+nowacount+); da.InsertCommand = new SqlCommand(str3, con); res=da.InsertCommand.ExecuteNonQuery(); if (res 0) MessageBox.Show(新书入库成功!, 新书登记); else MessageBox.Show(新书入库失败!, 新书登记); con.Close(); /主界面调用的每个模块的关闭按钮都是隐藏本体,以后不再写出关闭按钮的操作带代码 private void Form3_FormClosing(object sender, FormClosingEventArgs e) this.Visible = false; private void button_check_Click(object sender, EventArgs e)/查询 if (con.State = ConnectionState.Closed) con.Open(); int i; String str1; ds.Tables.Clear(); if (this.textBox_book_no.Text.Trim() = & this.textBox_name.Text.Trim() = & boBox_press .Text.Trim() = & this.textBox_price.Text.Trim() = & this.textBox_total.Text.Trim() = & this.textBox_writer.Text.Trim() = ) MessageBox.Show(请填写任一项进行查询!, 新书入库登记); else if (this.textBox_book_no.Text != )/按书号查找 String str = select count(*) from dbo.Book_Info where Book_ID= + this.textBox_book_no.Text.ToString().Trim() + ; da.SelectCommand = new SqlCommand(str, con); i = Convert.ToInt32(da.SelectCommand.ExecuteScalar(); if (i 0) str1 = select * from dbo.Book_Info where Book_ID= + this.textBox_book_no.Text.ToString().Trim() + ; da.SelectCommand = new SqlCommand(str1, con); da.Fill(ds, selectifo2); dataGridView_result.DataSource = ds.Tablesselectifo2; dataGridView_result.Refresh(); else MessageBox.Show(不存在此记录!); else if (this.textBox_name.Text != )/按书名查找 /和上面类似 else if (this.textBox_writer.Text != )/按作者查找 /和上面类似 else if (this.textBox_price.Text != )/按单价查找 /和上面类似 else if (boBox_press.Text != )/按出版社查找 /和上面类似 else if (this.textBox_total.Text != )/按总量查找 /和上面类似 con.Close(); /更新的代码操作就是将控件内容置空,每个模块都是,所以以后的更新操作不再给出具体代码 private void button_update_Click(object sender, EventArgs e)/更新 this.textBox_book_no.Text = ; this.textBox_name.Text = ; boBox_press .Text = ; this.textBox_price.Text = ; this.textBox_total.Text = ; this.textBox_writer.Text = ; private void dataGridView_result_CellClick(object sender, DataGridViewCellEventArgs e) int i = dataGridView_result.CurrentRow.Index;/dataGridView当前选中行 this.textBox_book_no.Text = ds.Tablesselectifo2.Rowsi0.ToString(); this.textBox_name.Text = ds.Tablesselectifo2.Rowsi1.ToString(); this.textBox_writer.Text = ds.Tablesselectifo2.Rowsi2.ToString(); this.textBox_price.Text = ds.Tablesselectifo2.Rowsi4.ToString(); boBox_press.Text = ds.Tablesselectifo2.Rowsi3.ToString(); l 运行结果:u 运行前数据库中Book_Info表中的数据: 图5 u 如果信息有没填的,点击“入库”会弹出如下对话框,图6: 图6 图7 图8 图9u 填入书号后点击“查询”在DataGridView控件里会显示按书号查询的结果,图7:u 在DataGridView控件里点击一条记录会在上面的textBox和ComboBox控件里显示该书的信息,图8:u 输入总量:8,点击“入库”会在数据库中看到书号是787121030462的书籍的总量由20变到28本,现存量由20(图5)变到28本(图10)。并弹出图9对话框: 图10 图11u 如果入库的书籍在数据库中没有的话,在Book_Info表中则增加一条新的记录: 图12 图13 图14u “刷新”按钮就是将textBox和ComboBox控件里的信息清空: u “查询”可以在textBox和ComboBox控件里填写任一项来查询,如果同时填有多项,则按前面的一项查询。u “返回”则返回到主界面窗口。2) 借书/还书:l 功能说明:借书/还书管理是图书管理系统中的最重要的模块,包括了查询书籍、显示借阅信息、借书、还书等功能。l 源代码:private void button_check_books_Click(object sender, EventArgs e) Form5 form5 = new Form5();/查询书籍 form5.Show(); private void button_borrow_Click(object sender, EventArgs e) if (this.textBox_book_no.Text.Trim() = | this.textBox_proof_no.Text.Trim() = ) MessageBox.Show(请正确填写要求的数据!, 借书/还书管理); this.textBox_book_no.Text = ; this.textBox_proof_no.Text = ; else /判断借书人是否有资格 if (con.State = ConnectionState.Closed) con.Open(); String str = select count(*) from dbo.Proof_Info where Proof_ID= + this.textBox_proof_no.Text.Trim() + ; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar(); if (i 0) ds.Tables.Clear(); /检查该读者已借书中是否有超期的 String str1 = select * from dbo.Borrow_Info where Proof_ID=+ this.textBox_proof_no .Text .Trim ()+; da.SelectCommand = new SqlCommand(str1, con); da.Fill(ds,borrow); bool BORROW = true; float punish = (float)0.0; String str9 = select * from dbo.Punish_Info where Proof_ID= + this.textBox_proof_no.Text.Trim() + ; da.SelectCommand = new SqlCommand(str9, con); da.Fill(ds, borrow1); for (int p = 0; p ds.Tablesborrow1.Rows.Count; p+) BORROW = false; float punishment = (float)Convert.ToDouble(ds.Tablesborrow1.Rowsp5); punish += punishment; for (int j = 0; j 30) BORROW =false; punish+=(float)0.1*(day-30); if (!BORROW) MessageBox.Show(您已欠费+punish+元,请先缴费!, 借书/还书); else /检查该读者所借图书数量,是否达到个人限度 String str2 = select Now_Borrow_Amount from dbo.Proof_Info where Proof_ID= + this.textBox_proof_no.Text.Trim() + ; SqlCommand com1 = new SqlCommand(str2, con); int total_num = Convert.ToInt32(com1.ExecuteScalar(); String str3 = select Now_Amount from Book_Info where Book_ID= + this.textBox_book_no.Text.Trim() + ; SqlCommand com2 = new SqlCommand(str3, con); int now_num = Convert.ToInt32(com2.ExecuteScalar(); if (total_num = 8)/不满足借书条件 MessageBox.Show(该读者的借书数量已达到8本!, 借书/还书); else/满足借书条件 ds.Tables.Clear(); /判断书号是否正确 String str4 = select count(*) from dbo.Book_Info where Book_ID= + this.textBox_book_no.Text.Trim() + ; SqlCommand com3 = new SqlCommand(str4, con); int j = Convert.ToInt32(com3.Execu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江西人力诚聘派遣至中国铁路南昌局集团有限公司赣州工务段招聘13人考试参考题库及答案解析
- 2026天津职业技术师范大学附属高级技术学校招聘4人考试参考试题及答案解析
- 2026年河南省科学院航空港区分院下属平台公司招聘工作人员5名笔试模拟试题及答案解析
- 支行内部谈心会制度
- 万科a内部审计制度
- 中国小微企业内部制度
- 收费处内部控制制度
- 九江妇保内部管理制度
- 医院内部职工检验制度
- 报销大厅内部管理制度
- AI在人力资源招聘中的应用【课件文档】
- 妇科恶性肿瘤研究进展2026
- 以梦为马 不负韶华2026新年高中开学第一课
- GB/T 20663-2026蓄能压力容器
- 2026年春季第二学期学校德育主题活动工作安排表
- 2026年春节后复工复产安全培训:筑牢安全防线护航开工大吉
- 2026年江西省高职单招数学试题及答案
- 2025幼儿园园务工作计划
- 国轩高科测评试题
- DB37T5336-2025 房屋市政工程安全文明工地建设标准 第1部分:房屋建筑工程
- 2026年黑龙江伊春市高职单招语文考试试卷及答案
评论
0/150
提交评论