图书管理系统设计与实现.docx

上传人:b****6 文档编号:5825956 上传时间:2023-01-01 格式:DOCX 页数:54 大小:381.92KB
下载 相关 举报
图书管理系统设计与实现.docx_第1页
第1页 / 共54页
图书管理系统设计与实现.docx_第2页
第2页 / 共54页
图书管理系统设计与实现.docx_第3页
第3页 / 共54页
图书管理系统设计与实现.docx_第4页
第4页 / 共54页
图书管理系统设计与实现.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

图书管理系统设计与实现.docx

《图书管理系统设计与实现.docx》由会员分享,可在线阅读,更多相关《图书管理系统设计与实现.docx(54页珍藏版)》请在冰豆网上搜索。

图书管理系统设计与实现.docx

图书管理系统设计与实现

(此文档为word格式,下载后您可任意编辑修改!

图书管理系统的设计

一、系统分析2

1.开发背景2

2.需求分析2

二、系统设计2

1.系统总体结构2

2.数据库设计3

3.编码设计4

三、系统实施4

1.登录4

2.系统主界面5

3.书库管理7

1)新书登记:

7

2)借书/还书:

13

1)缴费20

2)书籍挂失:

23

3)图书信息查询:

28

4)借书信息查询:

30

4.借阅证管理:

31

1)办理借阅证:

31

2)借阅证信息查询:

34

3)借阅证挂失:

35

5.系统/其它:

38

1)添加账号:

38

2)修改密码:

40

3)退出:

41

四、总结(体会、经验与教训)42

 

一、系统分析

1.开发背景

随着人们知识层次的提高,图书馆成为日常生活中不可缺少的一部分。

而图书馆的存数量和业务量庞大,仅仅靠传统的记账式管理是不可行的。

图书馆管理系统应运而生,逐渐成为信息化建设的重要组成部分。

图书馆管理系统为学校或社会型图书馆的管理员提供所有借阅者的详细信息,以及馆内库存的详细情况,对借书和还书两大功能进行合理操纵并登记。

2.需求分析

经过仔细分析系统需求之后,本图书管理系统主要完成的主要功能如下:

●进入系统前需要身份验证、用户名、密码,输入正确后方可进入。

●用户可以根据需要进行书库管理。

●用户可以进行借书证的办理、查询、挂失等操作。

●用户可以添加账户和修改密码。

●身份验证:

提供系统的访问控制功能。

●书库管理:

包括新书登记、借书、还书、书籍挂失、图书信息查询、借书信息查询等功能。

●借阅证管理:

提供办理借阅证、借阅证信息查询、借阅证挂失功能。

●系统管理功能:

包括添加账号、修改密码和退出系统等功能。

二、系统设计

1.系统总体结构

通过对图书管理系统的功能分析,可以定义出系统的功能模块图如下:

2.数据库设计

●管理员基本信息表

字段名称

数据类型

可否为空

约束条件

说明

WorkID

int

NOTNULL

主键

成员ID

User_Name

VARCHAR(24)

NOTNULL

姓名

Password

VARCHAR(24)

NOTNULL

密码

●图书信息表

字段名称

数据类型

可否为空

约束条件

说明

Book_ID

VARCHAR(50)

NOTNULL

主键

书籍ID

Book_Name

VARCHAR(50)

NOTNULL

书名

Writer

VARCHAR(50)

NOTNULL

作者

Press

VARCHAR(50)

NOTNULL

出版社

Price

float

NOTNULL

单价

InLibrary_Date

datetime

NOTNULL

入库时间

Total_Amount

int

NOTNULL

总量

Now_Amount

int

NOTNULL

现存量

●借阅卡信息表

字段名称

数据类型

可否为空

约束条件

说明

Proof_ID

VARCHAR(50)

NOTNULL

主键

借阅卡ID

Name

VARCHAR(50)

NOTNULL

姓名

Sex

VARCHAR(50)

NOTNULL

性别

Birth_Time

datetime

NOTNULL

出生日期

Address

VARCHAR(50)

NOTNULL

地址

ID_Number

VARCHAR(50)

NOTNULL

身份证号

Tel_Number

VARCHAR(50)

NOTNULL

电话号码

Now_Borrow_Amount

int

NOTNULL

现借书量

●借书信息表

字段名称

数据类型

可否为空

约束条件

说明

BorrowID

int

NOTNULL

主键

借书ID

Proof_ID

VARCHAR(50)

NOTNULL

外键(Proof_Info)

借书卡ID

Book_ID

VARCHAR(50)

NOTNULL

外键(Book_Info)

书籍ID

Borrow_Date

datetime

NOTNULL

借出时间

●罚单信息表

字段名称

数据类型

可否为空

约束条件

说明

Puni_ID

int

NOTNULL

主键

罚单ID

Proof_ID

VARCHAR(50)

NOTNULL

借书卡ID

Book_ID

VARCHAR(50)

NOTNULL

书籍ID

Borrow_Date

datetime

NOTNULL

借出时间

Return_Date

datetime

NOTNULL

还书时间

Puni_Money

float

NOTNULL

罚金

3.编码设计

●WorkID,BorrowID,Puni_ID都设置了标识规范,增加记录时自动加1,保持其唯一性。

●Borrow_Date,Return_Date,InLibrary_Date都设置成datetime类型,插入记录时自动获取当前日期,不需要管理员输入日期。

●Proof_ID,Book_ID,ID_Number,Tel_Number,Proof_ID由于它们只是代表一个标识,不是一个表示大小的数字,所以用VARCHAR类型,用int或long可能会有溢出现象。

三、系统实施

1.登录

●功能说明:

验证管理员的用户名和密码是否正确,正确则进入主界面。

●源代码:

头文件:

usingSystem.Data.SqlClient;

连接数据库:

Security=True");

程序主体:

privatevoidbutton_exit_Click(objectsender,EventArgse)//退出

{

Application.Exit();

}

privatevoidbutton_log_Click(objectsender,EventArgse)//登录

{

if(this.UserName.Text.Trim()==""||this.PassWord.Text.Trim()=="")

MessageBox.Show("用户名和密码都不能为空!

");

if(con.State==ConnectionState.Closed)

con.Open();

Stringstr="selectcount(*)fromAdmin_InfowhereUser_Name='"+this.UserName.Text.Trim()+

"'andPassword='"+this.PassWord.Text+"'";

SqlCommandcom=newSqlCommand(str,con);

inti=Convert.ToInt32(com.ExecuteScalar());

if(i>0)

{

Form2form2=newForm2();//系统主界面

form2.Show();

this.Visible=false;

}

else

{

MessageBox.Show("用户名或密码输入有误,请重新输入!

");

this.UserName.Text="";

this.PassWord.Text="";

}

}

●界面演示:

登录名和密码正确的话进入系统主界面(图一);登录名或者密码不正确的话会弹出提示对话框,并将用户名、密码栏置空(图二);如果用户名或者密码有空,弹出对话框并将用户名、密码栏置空(图三)。

图1图2图3图4

2.系统主界面

●功能说明:

选择各个功能模块

●源代码:

privatevoidForm2_FormClosing(objectsender,FormClosingEventArgse)

{

Application.Exit();

}

privatevoidbutton_exit_Click(objectsender,EventArgse)

{

Application.Exit();

}

privatevoidbutton_new_book_Click(objectsender,EventArgse)

{

Form3form3=newForm3();//新书登记

form3.Show();

}

//初始化对应界面,和上面类似,不再赘述

……

●界面演示:

如图4

3.书库管理

1)新书登记:

●功能说明:

入库的实现过程是首先要输入书籍的各种信息,包括书的书号、书名、作者、出版社、价钱、总量、现存量等,这里书的数量由两个变量来记录,总量代表图书馆中这种这种书的总量,现存量是目前正在管中的量,两者之差就是被读者借出去的数量。

其中每个信息不能有遗漏或者格式不正确,因为这是每一本书的基本信息,在函数的实现过程中有检验的功能。

然后判断图书馆中是否存在这种图书,如果存在,那么时间简单的把库存的数量加上新加入的数量,如果不存在,那么就要新建记录。

●源代码:

连接数据库:

SqlDataAdapterda=newSqlDataAdapter();

DataSetds=newDataSet();

程序主体:

//主界面调用的每个模块的返回按钮都是隐藏本体,以后不再写出返回按钮的操作带代码

privatevoidbutton_back_Click(objectsender,EventArgse)//返回

{

this.Visible=false;

}

privatevoidbutton_in_Click(objectsender,EventArgse)//入库

{

intres;

//检验输入数据是否合法

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();

Stringstr1="selectTotal_AmountfromBook_InfowhereBook_ID='"

+this.textBox_book_no.Text.Trim()+"'";

SqlCommandcom1=newSqlCommand(str1,con);

inttotal_num=Convert.ToInt32(com1.ExecuteScalar());

Stringstr2="selectNow_AmountfromBook_InfowhereBook_ID='"

+this.textBox_book_no.Text.Trim()+"'";

SqlCommandcom2=newSqlCommand(str2,con);

intnow_num=Convert.ToInt32(com2.ExecuteScalar());

intnum1=Convert.ToInt32(this.textBox_total.Text);

total_num+=num1;

now_num+=num1;

Stringstr="selectcount(*)fromBook_InfowhereBook_ID='"

+this.textBox_book_no.Text.Trim()+"'";

SqlCommandcom=newSqlCommand(str,con);

inti=Convert.ToInt32(com.ExecuteScalar());

if(i>0)

{

Stringstr3="updatedbo.Book_InfosetTotal_Amount='"+

total_num.ToString().Trim()+"',Now_Amount='"+now_num.ToString().Trim()

+"'whereBook_ID='"+this.textBox_book_no.Text.Trim()+"'";

da.UpdateCommand=newSqlCommand(str3,con);

res=da.UpdateCommand.ExecuteNonQuery();

if(res>0)

MessageBox.Show("新书入库成功!

","新书登记");

else

MessageBox.Show("新书入库失败!

","新书登记");

}

else

{

Stringbookid=this.textBox_book_no.Text.ToString().Trim();

Stringname=this.textBox_name.Text.ToString().Trim();

Stringwriter=this.textBox_writer.Text.ToString().Trim();

Stringpress=boBox_press.Text.ToString().Trim();

floatprice=(float)Convert.ToDouble(this.textBox_price.Text.ToString().Trim());

Stringdt=DateTime.Now.ToString();

inttotalaccount=Convert.ToInt32(total_num.ToString().Trim());

intnowacount=Convert.ToInt32(now_num.ToString().Trim());

Stringstr3="insertintodbo.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=newSqlCommand(str3,con);

res=da.InsertCommand.ExecuteNonQuery();

if(res>0)

MessageBox.Show("新书入库成功!

","新书登记");

else

MessageBox.Show("新书入库失败!

","新书登记");

}

con.Close();

}

}

//主界面调用的每个模块的关闭按钮都是隐藏本体,以后不再写出关闭按钮的操作带代码

privatevoidForm3_FormClosing(objectsender,FormClosingEventArgse)

{

this.Visible=false;

}

privatevoidbutton_check_Click(objectsender,EventArgse)//查询

{

if(con.State==ConnectionState.Closed)

con.Open();

inti;

Stringstr1;

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!

="")//按书号查找

{

Stringstr="selectcount(*)fromdbo.Book_InfowhereBook_ID='"+

this.textBox_book_no.Text.ToString().Trim()+"'";

da.SelectCommand=newSqlCommand(str,con);

i=Convert.ToInt32(da.SelectCommand.ExecuteScalar());

if(i>0)

{

str1="select*fromdbo.Book_InfowhereBook_ID='"+

this.textBox_book_no.Text.ToString().Trim()+"'";

da.SelectCommand=newSqlCommand(str1,con);

da.Fill(ds,"selectifo2");

dataGridView_result.DataSource=ds.Tables["selectifo2"];

dataGridView_result.Refresh();

}

else

{

MessageBox.Show("不存在此记录!

");

}

}

elseif(this.textBox_name.Text!

="")//按书名查找

{

……//和上面类似

}

elseif(this.textBox_writer.Text!

="")//按作者查找

{

……//和上面类似

}

elseif(this.textBox_price.Text!

="")//按单价查找

{

……//和上面类似

}

elseif(boBox_press.Text!

="")//按出版社查找

{

……//和上面类似

}

elseif(this.textBox_total.Text!

="")//按总量查找

{

……//和上面类似

}

}

con.Close();

}

//更新的代码操作就是将控件内容置空,每个模块都是,所以以后的更新操作不再给出具体代码

privatevoidbutton_update_Click(objectsender,EventArgse)//更新

{

this.textBox_book_no.Text="";

this.textBox_name.Text="";

boBox_press.Text="";

this.textBox_price.Text="";

this.textBox_total.Text="";

this.textBox_writer.Text="";

}

privatevoiddataGridView_result_CellClick(objectsender,DataGridViewCellEventArgse)

{

inti=dataGridView_result.CurrentRow.Index;//dataGridView当前选中行

this.textBox_book_no.Text=ds.Tables["selectifo2"].Rows[i][0].ToString();

this.textBox_name.Text=ds.Tables["selectifo2"].Rows[i][1].ToString();

this.textBox_writer.Text=ds.Tables["selectifo2"].Rows[i][2].ToString();

this.textBox_price.Text=ds.Tables["selectifo2"].Rows[i][4].ToString();

boBox_press.Text=ds.Tables["selectifo2"].Rows[i][3].ToString();

}

}

●运行结果:

◆运行前数据库中Book_Info表中的数据:

图5

◆如果信息有没填的,点击“入库”会弹出如下对话框,图6:

图6图7图8图9

◆填入书号后点击“查询”在DataGridView控件里会显示按书号查询的结果,图7:

◆在DataGridView控件里点击一条记录会在上面的textBox和ComboBox控件里显示该书的信息,图8:

◆20变到28本,现存量由20(图5)变到28本(图10)。

并弹出图9对话

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1