图书管理系统
完成时间:
2013年12月2日
第1章 引 言... 2
课题背景及意义... 2
开发工具的选用及介绍... 3
1.2.1 Microsoft Visual Studio 2005. 3
1.2.2oracle. 3
第2章 总体分析与设计... 4
2.1需求概述... 4
2.2概念结构设计... 4
2.3数据流程图... 5
第3章 数据库分析... 6
3.1 数据库总体设计... 6
3.2 数据库表设计... 6
第4章 数据库详细设计... 8
4.1创建表空间及用户... 8
4.2创建数据表... 8
4.3存储过程及触发器... 10
第5章 oracle连接C#程序运行测试... 13
5.1 主要界面... 13
5.1.1主要代码... 15
图书信息界面代码: 17
5.2 功能整体连接测试... 29
第6章 系统特色... 30
总 结... 30
附录:... 31
第1章 引 言
课题背景及意义
图书管理系统以方便、快捷、费用低的优点正慢慢地进入人们的生活,将传统的图书管理方式彻底地解脱出来,提高效率,减轻工作人员以往繁忙的工作,减小出错的概率,使读者可以花更多的时间在选择书和看书上。从而使人们有更多时间来获取信息、了解信息和掌握信息。图书馆作为提供学习的场所,不仅要求便于管理,而且要求对读者和借阅者提供方便快速的查找,借阅和登记手续。一个好的图书馆不仅仅看它的藏书的种类和数量是否齐全,还要看它的管理机制是否健全。这不仅仅是人的因素,还有操作手段和途径,比如一个好的图书管理系统。 本系统根据图书馆的日常业务运作而设计,能够更好的管理借书,还书,统计图书类别等业务,系统操作流程与图书馆的业务流程相一致。界面友好、操作容易、维护简单;系统数据库稳定、安全,有图书管理业务操作知识的人皆能方便操作。 本系统实用于各种图书馆。
开发工具的选用及介绍
1.2.1 Microsoft Visual Studio 2005
Visual Studio是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环境。Visual Studio 2010版本于2010年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。Visual Studio 2010同时带来了NET Framework 4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview--CTP),并且支持开发面向Windows 7的应用程序。除了Microsoft SQL Server,它还支持 IBM DB2和Oracle数据库。
1.2.2oracle
ORACLE 数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。
特点:
1、完整的数据管理功能:
1)数据的大量性
2)数据的保存的持久性
3)数据的共享性
4)数据的可靠性
2、完备关系的产品:
1)信息准则---关系型DBMS的所有信息都应在逻辑上用一种方法,即表中的值显式地表示;
2)保证访问的准则
3)视图更新准则---只要形成视图的表中的数据变化了,相应的视图中的数据同时变化
4)数据物理性和逻辑性独立准则
3、分布式处理功能:
1)ORACLE数据库自第5版起就提供了分布式处理能力,到第7版就有比较完善的分布式数据库功能了,一个ORACLE分布式数据库由oracle rdbms、sql*Net、SQL*CONNECT和其他非ORACLE的关系型产品构成。我相信现在我们用到的基本上是8i或9i的产品了。
4、用ORACLE能轻松的实现数据仓库的操作。
第2章 总体分析与设计
2.1需求概述
图书管理系统主要是用oracle数据库进行逻辑处理,实现对图书信息的增删改查,以及出库入库的管理。
2.2概念结构设计
图书管理系统 |
管理员子系统 |
普通借阅者子系统 |
普通借阅者子系统 |
借阅图书 |
借阅信息查看,续借 |
退出 |
管理员子系统 |
图书信息管理 |
库存信息管理 |
借阅证信息管理 |
归还图书 |
退出 |
2.3数据流程图
第3章 数据库分析
3.1 数据库总体设计
数据库设计是图书管理系统的重要组成部分。建立良好的数据库结构和文件组织形式,能够使系统快速、准确的获得所需信息。这里采用oracle 数据库。该数据库对进行增、删、改、查、显示都极为方便。能为系统提供良好的数据支持。根据系统的详细分析和和总体的需求分析,将为各个不同模块详细设计数据结构。
3.2 数据库表设计
1用户表(users)
字段名 |
字段 |
数据类型 |
主键 |
索引 |
说明 |
eno |
密码 |
number |
|||
ename |
编号 |
varchar2(10) |
借阅者,编号以201,管理员,编号以055开 |
2图书类别表(type)
字段名 |
字段 |
数据类型 |
主键 |
索引 |
说明 |
TID |
类别编号 |
varchar2(10) |
Yes |
||
TypeName |
类别名称 |
varchar2(10) |
3图书表(books)
字段名 |
字段 |
数据类型 |
主键 |
索引 |
说明 |
ISBN |
图书编号 |
varchar2(20) |
Yes |
||
BookName |
名称 |
VARCHAR2(40) |
|
||
TID |
类别编号 |
varchar2(10) |
对应typ表的TID字段 |
||
RetailPrice |
零售价 |
varchar2(10) |
|
||
Author |
作者 |
varchar2(20) |
|
||
Publish |
出版社 |
varchar2(20) |
|
||
StockMin |
库存下限 |
number |
|
||
StockMax |
库存上限 |
number |
|
||
Descriptions |
描述 |
varchar2(100) |
|
4入库表(items)
字段名 |
字段 |
数据类型 |
主键 |
索引 |
说明 |
ISBN |
图书编号 |
varchar2(20) |
Yes |
对应books表中的ISBN字段 |
|
BookName |
名称 |
varchar2(40) |
Yes |
||
RetailPrice |
零售价 |
varchar2(10) |
|||
shuliang |
入库数量 |
Number |
5库存表(stock)
字段名 |
字段 |
数据类型 |
主键 |
索引 |
说明 |
ISBN |
图书编号 |
varchar2(20) |
对应books表中的ISBN字段 |
||
StockNum |
库存量 |
Number |
6借阅证信息表(cards)
字段名 |
字段 |
数据类型 |
主键 |
索引 |
说明 |
Cardno |
借阅证编号 |
Varchar2(10) |
Yes |
||
type |
类型 |
Number |
1表示管理员 0表示普通借阅者 |
||
name |
名字 |
Varchar2(50) |
7借阅信息表(borrow)
字段名 |
字段 |
数据类型 |
主键 |
索引 |
说明 |
Isbn |
图书编号 |
Varchar2(20) |
|||
Cardno |
借阅证编号 |
Varchar2(10) |
|||
bdate |
借书日期 |
Varchar2(10) |
|||
rdate |
还书日期 |
Varchar2(10) |
还书日期为借书日期的一个月时长 |
第4章 数据库详细设计
4.1创建表空间及用户
创建用户:
create user bookman identified by bookman default tablespace tushu;
赋权:
grant connect to wsn;--登陆权限
grant create session to wsn;--可以访问数据库
grant create view to wsn;--可以创建视图
grant resource to wsn;---可以建表
grant create procedure to wsn;---创建存储过程权限
grant create trigger to wsn;---创建触发器权限
4.2创建数据表
1用户表:
create table users---用户表
(
eno number ,--密码
ename varchar2(10)----用户名,借阅者,编号以201,管理员,编号以055开
);
2借阅证信息表:
Create table cards(
Cardno varchar2(10) ,foreign key (cardno) references users(ename),---借阅证编号
Type number(1),---0为普通用户,1为管理员
Name varchar2(50)
);
3图书类别表
create table type--图书类别表
(
TID varchar2(10) primary key,--类别编号
TypeName varchar2(20) not null--类别名称
);
4图书表
create table books--图书表
(
ISBN varchar2(20) primary key,--图书编号
BookName varchar2(40) not null,--名称
TID varchar2(10), foreign key (TID) references type (TID),--类别编号
RetailPrice varchar2(10) not null,--零售价
Author varchar2(20),--作者
Publish varchar2(30),--出版
StockMin number not null,--库存下限
StockMax number not null,--库存上限
Descriptions varchar2(100)--描述
);
5入库表
create table item--入库表
(
ISBN varchar2(20),foreign key (ISBN) references books (ISBN),--ISBN
BookName varchar2(40) not null;
shuliang number--入库数量
);
6库存表
create table stock--库存表
(
ISBN varchar2(20),foreign key (ISBN) references books (ISBN),--商品编号
StockNum number--库存数量
);
7借阅表
Create table borrow(
Isbn varchar2(20),foreign key(isbn) references books(isbn),
Cardno varchar2(10),foreign key(cardno) references users(ename),
Bdate varchar2(10),
Rdate varchar2(10)
);
创建视图:
图书描述视图:
Create view bookcribe as select books.isbn,bookname,author,publish,stocknum,description
From books,stock where books.isbn=stock.isbn;
图书查询视图
create view bookview as select isbn,bookname,author,publish from books;
借阅信息视图
Create view borrowview as select cardno.name,bdate,rdate from cards,books,borrow
Where borrow.isbn=books.isbn and borrow.cardno=cards.cardno;
4.3存储过程及触发器
create or replace procedure denglu(flag out number,username varchar2,upwd number)---登录
as
i varchar2(20);
p number;
begin
flag:=0;
select t.ename into i from wsn.yonghu t where t.ename=username;
if i is not null then
flag:=1;
select t.eno into p from wsn.yonghu t where t.ename=username and t.eno=upwd;
if upwd is not null then
flag := 2;----登录成功
else
flag := 1;-----密码不正确
end if;
else
flag := 0;------用户不存在
end if;
commit;
exception when no_data_found then
rollback;
end;
---------------------------------------------------------------------------------
----图书类别添加
create sequence type_s1;---类别添加
drop sequence type_s1
create or replace procedure inserttype(id out number,name in varchar2)
as
begin
select type_s1.nextval into id from dual;
insert into wsn.typ values(id,name);
end inserttype;
---------类别删除
create or replace procedure sc(id number)
as
begin
delete wsn.typ where tid = id;
commit;
exception when no_data_found then
rollback;
end;
------------修改
create or replace procedure xg(id number,name varchar2)
as
begin
update wsn.typ set TypeName=name where tid=id;
commit;
exception when no_data_found then
rollback;
end;
----------------------------------------------------------------------------
create or replace procedure tssc(id number) --------图书删除
as
begin
delete wsn.books where ISBN = id;
commit;
exception when no_data_found then
rollback;
end;
---------图书添加
create or replace procedure insertbook(id varchar2,name varchar2,tid number,rp varchar2,author
varchar2,pub varchar2,smin number,smax number,des varchar2)
as
begin
insert into wsn.books values(id,name,tid,rp,author,pub,smin,smax,des);
end insertbook;
---------图书修改
create or replace procedure updatebook(id varchar2,name varchar2,td number,rp varchar2,author
varchar2,pub varchar2,smin number,smax number,des varchar2)
as
begin
update wsn.books set
BookName=name,tid=td,RetailPrice=rp,Author=author,Publish=pub,StockMin=smin,StockMax=smax,Desc
riptions=des where isbn=id;
commit;
end updatebook;
-------------------------------------------------------------------------------------------
create or replace procedure rk(isb varchar2,bname varchar2,rp varchar2,sl number)------入库
as
i number;
begin
select count(*) into i from inwarehouseitems where isbn=isb;
if(i<>0) then
update wsn.inwarehouseitems set shuliang=shuliang+sl where isbn=isb;
else
insert into wsn.inwarehouseitems values(isb,bname,rp,sl);
end if;
end;
--------------------------------------------------触发器
create or replace trigger charu
after insert or update on wsn.InWarehouseitems
--referencing new as new old as old for each row
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
declare
--v_ISBN inwarehouseitems.isbn%type;
n_count number(4);
begin
if updating or inserting THEN
select count(*) into n_count from stock where ISBN = :new.ISBN;
if n_count > 0 then
update wsn.stock set StockNum = StockNum + :NEW.shuliang where ISBN = :NEW.ISBN;
else
insert into wsn.stock(ISBN, StockNum) values(:NEW.ISBN, :NEW.shuliang);
end if;
end if;
end;
第5章 oracle连接C#程序运行测试
5.1 主要界面
登录
管理员登陆界面
图书信息
入库
图书类别
归还图书
5.1.1主要代码
配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ConStr" value="Data Source=orcl;User ID=bookman;Password=bookman;Unicode=True"/>
</appSettings>
</configuration>;
数据库连接
class database
{
static OracleConnection con = new OracleConnection();
public static OracleConnection GetOpen()
{
try
{
if (con.State == ConnectionState.Closed)
{
con.ConnectionString = ConfigurationSettings.AppSettings["ConStr"].ToString();
con.Open();
}
return con;
}
catch (Exception ee)
{
return null;
}
}
public static void GetClose()
{
if (con.State == ConnectionState.Open)
{
con.Close();
}
}
}
底层功能实现:
public DataTable ss() //查询数据库kucunview视图 ,返回结果集 存放在dt中
{
try
{
OracleDataAdapter oda = new OracleDataAdapter();
string sql = "select * from stock order by ISBN";
OracleCommand cmd = new OracleCommand(sql, database.GetOpen());
oda.SelectCommand = cmd;
oda.Fill(dt);
return dt;
}
catch (Exception eee)
{
return null;
}
finally
{
database.GetClose();
}
}
public void se()//将dt里存放的结果显示在listview中
{
listView1.Items.Clear();
DataTable dt = ss();
foreach (DataRow dr in dt.Rows)
{
ListViewItem item = new ListViewItem(dr[0].ToString());
item.SubItems.Add(dr[1].ToString());
this.listView1.Items.Add(item);
}
dt.Clear();
}
图书信息界面代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OracleClient;
using System.Data.Sql;
using WindowsApplication1.model.command;
namespace WindowsApplication1.concole
{
public partial class 图ª?书º¨¦信?息¡é : Form
{
public 图ª?书º¨¦信?息¡é()
{
InitializeComponent();
}
private void toolStripButton5_Click(object sender, EventArgs e)
{
if (MessageBox.Show("确¨¡¤定¡§要°a退ª?出?吗e?ê?", "提¬¨¢示º?对?话¡ã框¨°", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
this.Hide();
}
else
{
主¡Â页°3面? app = new 主¡Â页°3面?();
app.Show();
this.Hide();
}
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e) //便À?于®¨²修T改?
{
if (listView1.SelectedItems.Count > 0)
{
textBox1.Enabled = false;
textBox1.Text = listView1.SelectedItems[0].SubItems[0].Text;
textBox2.Text = listView1.SelectedItems[0].SubItems[1].Text;
textBox3.Text = listView1.SelectedItems[0].SubItems[2].Text;
textBox4.Text = listView1.SelectedItems[0].SubItems[3].Text;
textBox5.Text = listView1.SelectedItems[0].SubItems[4].Text;
textBox6.Text = listView1.SelectedItems[0].SubItems[5].Text;
textBox7.Text = listView1.SelectedItems[0].SubItems[6].Text;
textBox8.Text = listView1.SelectedItems[0].SubItems[7].Text;
textBox9.Text = listView1.SelectedItems[0].SubItems[8].Text;
}
else
{
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";
textBox9.Text = "";
}
}
public DataTable ss() //查¨¦询¡¥数ºy据Y库abooks表À¨ª,ê?返¤¦Ì回?结¨¢果?集¡¥ 存ä?放¤?在¨²dt中D
{
try
{
DataTable dt = new DataTable();
OracleDataAdapter oda = new OracleDataAdapter();
string sql = "select isbn,bookname,typename,retailprice,author,publish,stockmax,stockmin,descriptions from books,type where books.tid=type.tid order by ISBN";
OracleCommand cmd = new OracleCommand(sql, database.GetOpen());
oda.SelectCommand = cmd;
oda.Fill(dt);
return dt;
}
catch (Exception ex)
{
return null;
}
finally
{
database.GetClose();
}
}
public void se()//将?dt里¤?存ä?放¤?的Ì?结¨¢果?显?示º?在¨²listview中D
{
listView1.Items.Clear();
DataTable dt = ss();
foreach (DataRow dr in dt.Rows)
{
ListViewItem item = new ListViewItem(dr[0].ToString());
item.SubItems.Add(dr[1].ToString());
item.SubItems.Add(dr[2].ToString());
item.SubItems.Add(dr[3].ToString());
item.SubItems.Add(dr[4].ToString());
item.SubItems.Add(dr[5].ToString());
item.SubItems.Add(dr[6].ToString());
item.SubItems.Add(dr[7].ToString());
item.SubItems.Add(dr[8].ToString());
this.listView1.Items.Add(item);
}
dt.Clear();
}
private void 图ª?书º¨¦信?息¡é_Load(object sender, EventArgs e)
{
this.listView1.Items.Clear();
se();
ShowType();
}
private void toolStripButton1_Click(object sender, EventArgs e) //添¬¨ª加¨®
{
if (textBox1.Text == "")
{
MessageBox.Show("不?能¨¹空?!ê?", "提¬¨¢示º?对?话¡ã框¨°", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
}
else
{
//String str = "select tid from type where typename='" + textBox3.Text + "'";
//OracleCommand con = new OracleCommand(str,database.GetOpen());
//OracleDataAdapter oda = new OracleDataAdapter();
//oda.SelectCommand = con;
//DataTable dt = new DataTable();
//oda.Fill(dt);
//int tid = Convert.ToInt32(dt.Rows[0]["tid"].ToString());
string sql = "insertbook";
OracleCommand cmd = new OracleCommand(sql, database.GetOpen());
cmd.Parameters.Add("id", OracleType.VarChar,20).Value = textBox1.Text;
cmd.Parameters.Add("name", OracleType.VarChar,40).Value = textBox2.Text;
cmd.Parameters.Add("tid", OracleType.Number).Value = textBox3.Tag;
cmd.Parameters.Add("rp", OracleType.VarChar,10).Value = textBox4.Text;
cmd.Parameters.Add("author", OracleType.VarChar,20).Value = textBox5.Text;
cmd.Parameters.Add("pub", OracleType.VarChar,30).Value = textBox6.Text;
cmd.Parameters.Add("smax", OracleType.Number).Value = textBox7.Text;
cmd.Parameters.Add("smin", OracleType.Number).Value = textBox8.Text;
cmd.Parameters.Add("des", OracleType.VarChar,100).Value = textBox9.Text;
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
this.listView1.Items.Clear();
se();
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";
textBox9.Text = "";
}
}
private void toolStripButton3_Click(object sender, EventArgs e) //删¦?除y
{
try
{
string sql = "tssc";
OracleCommand cm = new OracleCommand(sql, database.GetOpen());
cm.Parameters.Add("id", OracleType.Number).Value = textBox1.Text;
cm.CommandType = CommandType.StoredProcedure;
cm.ExecuteNonQuery();
MessageBox.Show("删¦?除y成¨¦功|!ê?");
this.listView1.Items.Clear();
se();
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";
textBox9.Text = "";
}
catch (Exception ee)
{ }
finally
{
database.GetClose();
}
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Enabled = true;
}
private void toolStripButton2_Click(object sender, EventArgs e) //修T改?
{
try
{
if (textBox1.Text == "")
{
MessageBox.Show("不?能¨¹空?!ê?", "提¬¨¢示º?对?话¡ã框¨°", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
}
else
{
string sql = "updatebook";
OracleCommand cmd = new OracleCommand(sql, database.GetOpen());
cmd.Parameters.Add("id", OracleType.VarChar, 20).Value = textBox1.Text;
cmd.Parameters.Add("name", OracleType.VarChar, 40).Value = textBox2.Text;
cmd.Parameters.Add("td", OracleType.Number).Value = textBox3.Text;
cmd.Parameters.Add("rp", OracleType.VarChar, 10).Value = textBox4.Text;
cmd.Parameters.Add("author", OracleType.VarChar, 20).Value = textBox5.Text;
cmd.Parameters.Add("pub", OracleType.VarChar, 30).Value = textBox6.Text;
cmd.Parameters.Add("smax", OracleType.Number).Value = textBox7.Text;
cmd.Parameters.Add("smin", OracleType.Number).Value = textBox8.Text;
cmd.Parameters.Add("des", OracleType.VarChar, 100).Value = textBox9.Text;
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
MessageBox.Show("修T改?成¨¦功|!ê?");
this.listView1.Items.Clear();
se();
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";
textBox9.Text = "";
}
}
catch (Exception ee)
{ }
finally
{
database.GetClose();
}
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Enabled = true;
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";
textBox9.Text = "";
}
private void toolStripButton4_Click(object sender, EventArgs e)
{
图ª?书º¨¦查¨¦询¡¥ thcx = new 图ª?书º¨¦查¨¦询¡¥();
thcx.Show();
}
public DataTable GetBookType()
{
try
{
DataTable dt = new DataTable();
OracleDataAdapter oda = new OracleDataAdapter();
string sql = "select * from type order by tid";
OracleCommand cmd = new OracleCommand(sql, database.GetOpen());
oda.SelectCommand = cmd;
oda.Fill(dt);
return dt;
}
catch (Exception eee)
{
return null;
}
finally
{
database.GetClose();
}
}
// 图ª?书º¨¦信?息¡é ssxx = new 图ª?书º¨¦信?息¡é();
private void ShowType() //填¬?充?图ª?书º¨¦类¤¨¤型¨ª
{
DataTable dt = GetBookType();
if (dt != null)
{
treeView1.Nodes.Clear();
TreeNode Node = new TreeNode("图ª?书º¨¦类¤¨¤型¨ª");
this.treeView1.Nodes.Add(Node);
foreach (DataRow dr in dt.Rows)
{
TreeNode nodes = new TreeNode(dr[1].ToString());//设¦¨¨置?文?本À?typename
nodes.Tag = dr[0].ToString(); //设¦¨¨置?标À¨º记?文?本À?,设¦¨¨置?类¤¨¤型¨ªtid
Node.Nodes.Add(nodes);
}
treeView1.ExpandAll();//展1开a所¨´有®D字Á?节¨²
}
}
public DataTable GetBook(string s) //查¨¦询¡¥数ºy据Y库abooks表À¨ª,ê?返¤¦Ì回?结¨¢果?集¡¥ 存ä?放¤?在¨²dt中D
{
try
{
DataTable dt = new DataTable();
OracleDataAdapter oda = new OracleDataAdapter();
String sql = "select * from books where tid='"+s+"'";
// String sql = "select isbn,bookname,typename,retailprice,author,publish,stockmax,stockmin,descriptions from books,type where books.tid=type.tid and tid='"+s+"' order by ISBN";
OracleCommand cmd = new OracleCommand(sql, database.GetOpen());
oda.SelectCommand = cmd;
oda.Fill(dt);
return dt;
}
catch (Exception eee)
{
return null;
}
finally
{
database.GetClose();
}
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) //listview中D显?示º?相¨¤应®|的Ì?值¦Ì
{
this.listView1.Items.Clear();
if (e.Node.Text != "图ª?书º¨¦类¤¨¤型¨ª")
{
textBox3.Text = e.Node.Text;//根¨´据Y类¤¨¤型¨ª显?示º?图ª?书º¨¦
textBox3.Tag = e.Node.Tag.ToString();
DataTable dt = GetBook(e.Node.Tag.ToString());
// MessageBox.Show(e.Node.Tag.ToString());
this.listView1.Items.Clear();
foreach (DataRow dr in dt.Rows)
{
ListViewItem item = new ListViewItem(dr[0].ToString());
item.SubItems.Add(dr[1].ToString());
item.SubItems.Add(e.Node.Text.ToString());
item.SubItems.Add(dr[3].ToString());
item.SubItems.Add(dr[4].ToString());
item.SubItems.Add(dr[5].ToString());
item.SubItems.Add(dr[6].ToString());
item.SubItems.Add(dr[7].ToString());
item.SubItems.Add(dr[8].ToString());
this.listView1.Items.Add(item);
}
dt.Clear();
}
}
}
}
借阅界面代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OracleClient;
using WindowsApplication1.model.command;
namespace WindowsApplication1.concole
{
public partial class 借¨¨阅? : Form
{
public 借¨¨阅?(string name)
{
InitializeComponent();
label7.Text = name;
label5.Text = System.DateTime.Now.ToShortDateString();
label6.Text = DateTime.Now.AddMonths(1).ToShortDateString();
}
public DataTable ss() //查¨¦询¡¥数ºy据Y库abooks表À¨ª,ê?返¤¦Ì回?结¨¢果?集¡¥ 存ä?放¤?在¨²dt中D
{
DataTable dt = new DataTable();
try
{
OracleDataAdapter oda = new OracleDataAdapter();
string sql = "select * from bookcribe where bookname='" + textBox1.Text.Trim() + "'";
OracleCommand cmd = new OracleCommand(sql, database.GetOpen());
oda.SelectCommand = cmd;
// MessageBox.Show(sql);
oda.Fill(dt);
return dt;
}
catch (Exception eee)
{
MessageBox.Show("出?错䨪" + eee.Message.ToString());
return null;
}
finally
{
database.GetClose();
}
}
public void se()//将?dt里¤?存ä?放¤?的Ì?结¨¢果?显?示º?在¨²listview中D
{
listView1.Items.Clear();
DataTable dt = ss();
if (dt == null)
{
MessageBox.Show("对?不?起e,ê?没?有®D该?图ª?书º¨¦");
}
else
{
foreach (DataRow dr in dt.Rows)
{
ListViewItem item = new ListViewItem(dr[0].ToString());
item.SubItems.Add(dr[1].ToString());
item.SubItems.Add(dr[2].ToString());
item.SubItems.Add(dr[3].ToString());
item.SubItems.Add(dr[4].ToString());
item.SubItems.Add(dr[5].ToString());
this.listView1.Items.Add(item);
}
}
dt.Clear();
}
private void 借¨¨阅?_Load(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
this.listView1.Items.Clear();
se();
// MessageBox.Show(textBox1.Text);
}
private void button1_Click(object sender, EventArgs e) //借¨¨阅?
{
int num;
//借¨¨阅?时º¡À检¨¬查¨¦库a存ä?。¡ê检¨¬查¨¦库a存ä?表À¨ª数ºy量¢?大䨮于®¨²0,允¨º许¨ª借¨¨阅?。¡ê
String s1 = "select stocknum from stock where isbn='" + label11.Text.Trim() + "'";
OracleDataAdapter oda = new OracleDataAdapter();
OracleCommand con = new OracleCommand(s1, database.GetOpen());
oda.SelectCommand = con;
DataTable dt = new DataTable();
oda.Fill(dt);
num = Convert.ToInt32(dt.Rows[0]["stocknum"]);
// MessageBox.Show("" + num);
if (num > 0)
{
//检¨¬查¨¦borrow表À¨ª中D有®D没?有®D记?录?,ê?有®D则¨°不?允¨º许¨ª借¨¨
String s2 = "select * from borrow where isbn='" + label11.Text.Trim() + "' and cardno='" + label7.Text.Trim() + "'";
OracleCommand con2 = new OracleCommand(s2, database.GetOpen());
OracleDataReader odr = con2.ExecuteReader();
if (odr.HasRows)
{
MessageBox.Show("您¨²已°?经-借¨¨阅?该?图ª?书º¨¦,ê?请?不?要°a重?复¡ä借¨¨阅?!ê?");
}
else
{
//进?行D借¨¨阅?
String str = "update stock set stocknum=stocknum-1 where isbn='" + label11.Text.Trim() + "'";
OracleCommand cm = new OracleCommand(str, database.GetOpen());
cm.ExecuteNonQuery();
String sql = "insert into borrow values('" + label11.Text.Trim() + "','" + label7.Text + "','" + label5.Text + "','" + label6.Text + "')";
OracleCommand cmd = new OracleCommand(sql, database.GetOpen());
cmd.ExecuteNonQuery();
MessageBox.Show("借¨¨阅?成¨¦功|");
database.GetClose();
}
}
else
{
MessageBox.Show("没?有®D可¨¦借¨¨阅?副¡À本À?!ê?!ê?");
}
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
String isbn = listView1.SelectedItems[0].SubItems[0].Text;
label11.Text = isbn;
}
}
}
5.2 功能整体连接测试
总体测试是组装软件的系统技术,本系统测试采用渐增集成测试,即测试单一功能,将测试完的功能加入系统中,进行一次系统测试,依次类推将所有功能加入系统中,在具体测试时,采用自顶向下的结合方式,从主控功能开始,沿各控制层向下移动,逐渐把所有功能结合了。
在测试过程中使用到调试技术:
1、采用debug调试语句,跟踪数据;
2、嵌入打印语句,输出中间结果;
3、设置断点,观察程序在断点附近的状况。
评估运行的可靠性问题:
1、结果正确;
2、运行速度;
3、空间利用率;
4、算法的可行性。
测试时发现问题及时修正,如没有问题,则设计完成。
第6章 系统特色
1) 界面统一,有明确的导航设置
2) 根据不同的用户登录进入不同的主页面,区分角色
3) 借阅图书进行验证,不能借阅同一本图书多次,不能借阅库存量为0 的图书
4) 查看借阅记录时便可以续借
5) 图书信息显示根据树形图的选择而变化
6) 操作简便,当选择listview中的条目时便可以获取信息,避免不必要的手动输入
7) 熟练掌握安装和卸载oracle
8) 文档内容详细
总 结
课程设计是本科学习阶段一次非常难得的理论与实际相结合的机会,通过这次比较完整的一个程序的设计,我们摆脱了单纯的理论知识学习状态,和实际设计的结合锻炼了我们的综合运用所学的专业基础知识,解决实际问题的能力,同时也提高我们查阅文献资料、对程序整体的把握等其他能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我们的能力得到了锻炼,经验得到了丰富。这是我们都希望看到的也正是我们进行课程设计的目的所在。
虽然课程设计内容繁多,过程繁琐但我们的收获却更加丰富。各种组件的运用,各种算法的应用,各种控件的利用我们都是随着设计的不断深入而不断熟悉并逐步掌握的。和老师以及同学的沟通交流更使我们对程序整体的规划与设计有了新的认识也对自己提出了新的要求。
提高是有限的但提高也是全面的,正是这一次设计让我积累了许多实际经验,也必然会让我们在未来的工作学习中表现出更高的应变能力和理解力。
顺利如期的完成本次课程设计给了我们很大的信心,但是也让我们看到了自己许多不足的地方,学习其实就是一个不断完善的过程,正视自己的不足之处,在以后的工作和学习中不断的弥补这些不足之处,在以后的生活中也要保持同样的态度,不断的完善自己。
附录:
程序部分截图: