第5章oracle连接C#程序运行测试...13
5.1主要界面...13
5.1.1主要代码...15
图书信息界面代码:17
5.2功能整体连接测试...29
第6章系统特色...30
总结...30
附录:...31
特点:
1)数据的大量性
2)数据的保存的持久性
3)数据的共享性
4)数据的可靠性
2、完备关系的产品:
1)信息准则---关系型DBMS的所有信息都应在逻辑上用一种方法,即表中的值显式地表示;
2)保证访问的准则
3)视图更新准则---只要形成视图的表中的数据变化了,相应的视图中的数据同时变化
4)数据物理性和逻辑性独立准则
4、用ORACLE能轻松的实现数据仓库的操作。
图书管理系统主要是用oracle数据库进行逻辑处理,实现对图书信息的增删改查,以及出库入库的管理。
图书管理系统
管理员子系统
普通借阅者子系统
借阅图书
借阅信息查看,续借
退出
图书信息管理
库存信息管理
借阅证信息管理
归还图书
数据库设计是图书管理系统的重要组成部分。建立良好的数据库结构和文件组织形式,能够使系统快速、准确的获得所需信息。这里采用oracle数据库。该数据库对进行增、删、改、查、显示都极为方便。能为系统提供良好的数据支持。根据系统的详细分析和和总体的需求分析,将为各个不同模块详细设计数据结构。
1用户表(users)
字段名
字段
数据类型
主键
索引
说明
eno
密码
number
ename
编号
varchar2(10)
借阅者,编号以201,管理员,编号以055开
2图书类别表(type)
TID
类别编号
Yes
TypeName
类别名称
3图书表(books)
ISBN
图书编号
varchar2(20)
BookName
名称
VARCHAR2(40)
对应typ表的TID字段
RetailPrice
零售价
Author
作者
Publish
出版社
StockMin
库存下限
StockMax
库存上限
Descriptions
描述
varchar2(100)
4入库表(items)
对应books表中的ISBN字段
varchar2(40)
shuliang
入库数量
Number
5库存表(stock)
StockNum
库存量
6借阅证信息表(cards)
Cardno
借阅证编号
Varchar2(10)
type
类型
1表示管理员0表示普通借阅者
name
名字
Varchar2(50)
7借阅信息表(borrow)
Isbn
Varchar2(20)
Varchar2(10)
bdate
借书日期
rdate
还书日期
还书日期为借书日期的一个月时长
创建用户:
createuserbookmanidentifiedbybookmandefaulttablespacetushu;
赋权:
grantconnecttowsn;--登陆权限
grantcreatesessiontowsn;--可以访问数据库
grantcreateviewtowsn;--可以创建视图
grantresourcetowsn;---可以建表
grantcreateproceduretowsn;---创建存储过程权限
grantcreatetriggertowsn;---创建触发器权限
1用户表:
createtableusers---用户表
(
enonumber,--密码
enamevarchar2(10)----用户名,借阅者,编号以201,管理员,编号以055开
);
2借阅证信息表:
Createtablecards(
Cardnovarchar2(10),foreignkey(cardno)referencesusers(ename),---借阅证编号
Typenumber(1),---0为普通用户,1为管理员
Namevarchar2(50)
3图书类别表
createtabletype--图书类别表
TIDvarchar2(10)primarykey,--类别编号
TypeNamevarchar2(20)notnull--类别名称
4图书表
createtablebooks--图书表
ISBNvarchar2(20)primarykey,--图书编号
BookNamevarchar2(40)notnull,--名称
TIDvarchar2(10),foreignkey(TID)referencestype(TID),--类别编号
RetailPricevarchar2(10)notnull,--零售价
Authorvarchar2(20),--作者
Publishvarchar2(30),--出版
StockMinnumbernotnull,--库存下限
StockMaxnumbernotnull,--库存上限
Descriptionsvarchar2(100)--描述
5入库表
createtableitem--入库表
ISBNvarchar2(20),foreignkey(ISBN)referencesbooks(ISBN),--ISBN
BookNamevarchar2(40)notnull;
shuliangnumber--入库数量
6库存表
createtablestock--库存表
ISBNvarchar2(20),foreignkey(ISBN)referencesbooks(ISBN),--商品编号
StockNumnumber--库存数量
7借阅表
Createtableborrow(
Isbnvarchar2(20),foreignkey(isbn)referencesbooks(isbn),
Cardnovarchar2(10),foreignkey(cardno)referencesusers(ename),
Bdatevarchar2(10),
Rdatevarchar2(10)
创建视图:
图书描述视图:
Createviewbookcribeasselectbooks.isbn,bookname,author,publish,stocknum,description
Frombooks,stockwherebooks.isbn=stock.isbn;
图书查询视图
createviewbookviewasselectisbn,bookname,author,publishfrombooks;
借阅信息视图
Createviewborrowviewasselectcardno.name,bdate,rdatefromcards,books,borrow
Whereborrow.isbn=books.isbnandborrow.cardno=cards.cardno;
as
ivarchar2(20);
pnumber;
begin
flag:=0;
selectt.enameintoifromwsn.yonghutwheret.ename=username;
ifiisnotnullthen
flag:=1;
selectt.enointopfromwsn.yonghutwheret.ename=usernameandt.eno=upwd;
ifupwdisnotnullthen
else
flag:=1;-----密码不正确
endif;
flag:=0;------用户不存在
commit;
exceptionwhenno_data_foundthen
rollback;
end;
---------------------------------------------------------------------------------
----图书类别添加
createsequencetype_s1;---类别添加
dropsequencetype_s1
createorreplaceprocedureinserttype(idoutnumber,nameinvarchar2)
selecttype_s1.nextvalintoidfromdual;
insertintowsn.typvalues(id,name);
endinserttype;
---------类别删除
createorreplaceproceduresc(idnumber)
deletewsn.typwheretid=id;
------------修改
createorreplaceprocedurexg(idnumber,namevarchar2)
updatewsn.typsetTypeName=namewheretid=id;
----------------------------------------------------------------------------
createorreplaceproceduretssc(idnumber)--------图书删除
deletewsn.bookswhereISBN=id;
---------图书添加
createorreplaceprocedureinsertbook(idvarchar2,namevarchar2,tidnumber,rpvarchar2,author
varchar2,pubvarchar2,sminnumber,smaxnumber,desvarchar2)
insertintowsn.booksvalues(id,name,tid,rp,author,pub,smin,smax,des);
endinsertbook;
---------图书修改
createorreplaceprocedureupdatebook(idvarchar2,namevarchar2,tdnumber,rpvarchar2,author
updatewsn.booksset
BookName=name,tid=td,RetailPrice=rp,Author=author,Publish=pub,StockMin=smin,StockMax=smax,Desc
riptions=deswhereisbn=id;
endupdatebook;
-------------------------------------------------------------------------------------------
createorreplaceprocedurerk(isbvarchar2,bnamevarchar2,rpvarchar2,slnumber)------入库
inumber;
selectcount(*)intoifrominwarehouseitemswhereisbn=isb;
if(i<>0)then
updatewsn.inwarehouseitemssetshuliang=shuliang+slwhereisbn=isb;
insertintowsn.inwarehouseitemsvalues(isb,bname,rp,sl);
--------------------------------------------------触发器
createorreplacetriggercharu
afterinsertorupdateonwsn.InWarehouseitems
--referencingnewasnewoldasoldforeachrow
REFERENCINGOLDASOLDNEWASNEW
FOREACHROW
declare
--v_ISBNinwarehouseitems.isbn%type;
n_countnumber(4);
ifupdatingorinsertingTHEN
selectcount(*)inton_countfromstockwhereISBN=:new.ISBN;
ifn_count>0then
updatewsn.stocksetStockNum=StockNum+:NEW.shuliangwhereISBN=:NEW.ISBN;
insertintowsn.stock(ISBN,StockNum)values(:NEW.ISBN,:NEW.shuliang);
管理员登陆界面
图书信息
入库
图书类别
配置文件:
;
数据库连接
classdatabase
{
staticOracleConnectioncon=newOracleConnection();
publicstaticOracleConnectionGetOpen()
try
if(con.State==ConnectionState.Closed)
con.ConnectionString=ConfigurationSettings.AppSettings["ConStr"].ToString();
con.Open();
}
returncon;
catch(Exceptionee)
returnnull;
publicstaticvoidGetClose()
if(con.State==ConnectionState.Open)
con.Close();
底层功能实现:
publicDataTabless()//查询数据库kucunview视图,返回结果集存放在dt中
OracleDataAdapteroda=newOracleDataAdapter();
stringsql="select*fromstockorderbyISBN";
OracleCommandcmd=newOracleCommand(sql,database.GetOpen());
oda.SelectCommand=cmd;
oda.Fill(dt);
returndt;
catch(Exceptioneee)
finally
database.GetClose();
publicvoidse()//将dt里存放的结果显示在listview中
listView1.Items.Clear();
DataTabledt=ss();
foreach(DataRowdrindt.Rows)
ListViewItemitem=newListViewItem(dr[0].ToString());
item.SubItems.Add(dr[1].ToString());
this.listView1.Items.Add(item);
dt.Clear();
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.OracleClient;
usingSystem.Data.Sql;
usingWindowsApplication1.model.command;
namespaceWindowsApplication1.concole
publicpartialclass图a书o¨|信息é:Form
public图a书o¨|信息é()
InitializeComponent();
privatevoidtoolStripButton5_Click(objectsender,EventArgse)
if(MessageBox.Show("确¨¤定§要°a退a出吗e?ê","提¨¢示o对话框¨°",MessageBoxButtons.YesNo,MessageBoxIcon.Information)==DialogResult.Yes)
this.Hide();
主页°3面app=new主页°3面();
app.Show();
privatevoidlistView1_SelectedIndexChanged(objectsender,EventArgse)//便à于¨2修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;
textBox1.Text="";
textBox2.Text="";
textBox3.Text="";
textBox4.Text="";
textBox5.Text="";
textBox6.Text="";
textBox7.Text="";
textBox8.Text="";
textBox9.Text="";
publicDataTabless()//查¨|询¥数oy据Y库abooks表à¨a,ê返¤|ì回结¨¢果集¥存放¤在¨2dt中D
DataTabledt=newDataTable();
stringsql="selectisbn,bookname,typename,retailprice,author,publish,stockmax,stockmin,descriptionsfrombooks,typewherebooks.tid=type.tidorderbyISBN";
catch(Exceptionex)
publicvoidse()//将dt里¤存放¤的ì结¨¢果显示o在¨2listview中D
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());
privatevoid图a书o¨|信息é_Load(objectsender,EventArgse)
this.listView1.Items.Clear();
se();
ShowType();
privatevoidtoolStripButton1_Click(objectsender,EventArgse)//添¨a加¨
if(textBox1.Text=="")
MessageBox.Show("不能¨1空!ê","提¨¢示o对话框¨°",MessageBoxButtons.YesNo,MessageBoxIcon.Information);
//Stringstr="selecttidfromtypewheretypename='"+textBox3.Text+"'";
//OracleCommandcon=newOracleCommand(str,database.GetOpen());
//OracleDataAdapteroda=newOracleDataAdapter();
//oda.SelectCommand=con;
//DataTabledt=newDataTable();
//oda.Fill(dt);
//inttid=Convert.ToInt32(dt.Rows[0]["tid"].ToString());
stringsql="insertbook";
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();
privatevoidtoolStripButton3_Click(objectsender,EventArgse)//删|除y
stringsql="tssc";
OracleCommandcm=newOracleCommand(sql,database.GetOpen());
cm.Parameters.Add("id",OracleType.Number).Value=textBox1.Text;
cm.CommandType=CommandType.StoredProcedure;
cm.ExecuteNonQuery();
MessageBox.Show("删|除y成¨|功|!ê");
{}
privatevoidbutton1_Click(objectsender,EventArgse)
textBox1.Enabled=true;
privatevoidtoolStripButton2_Click(objectsender,EventArgse)//修T改
stringsql="updatebook";
cmd.Parameters.Add("td",OracleType.Number).Value=textBox3.Text;
MessageBox.Show("修T改成¨|功|!ê");
privatevoidbutton2_Click(objectsender,EventArgse)
privatevoidtoolStripButton4_Click(objectsender,EventArgse)
图a书o¨|查¨|询¥thcx=new图a书o¨|查¨|询¥();
thcx.Show();
publicDataTableGetBookType()
stringsql="select*fromtypeorderbytid";
//图a书o¨|信息éssxx=new图a书o¨|信息é();
privatevoidShowType()//填充图a书o¨|类¤¨¤型¨a
DataTabledt=GetBookType();
if(dt!=null)
treeView1.Nodes.Clear();
TreeNodeNode=newTreeNode("图a书o¨|类¤¨¤型¨a");
this.treeView1.Nodes.Add(Node);
TreeNodenodes=newTreeNode(dr[1].ToString());//设|¨¨置文本àtypename
nodes.Tag=dr[0].ToString();//设|¨¨置标à¨o记文本à,设|¨¨置类¤¨¤型¨atid
Node.Nodes.Add(nodes);
treeView1.ExpandAll();//展1开a所¨′有D字á节¨2
publicDataTableGetBook(strings)//查¨|询¥数oy据Y库abooks表à¨a,ê返¤|ì回结¨¢果集¥存放¤在¨2dt中D
Stringsql="select*frombookswheretid='"+s+"'";
//Stringsql="selectisbn,bookname,typename,retailprice,author,publish,stockmax,stockmin,descriptionsfrombooks,typewherebooks.tid=type.tidandtid='"+s+"'orderbyISBN";
privatevoidtreeView1_AfterSelect(objectsender,TreeViewEventArgse)//listview中D显示o相¨¤应|的ì值|ì
if(e.Node.Text!="图a书o¨|类¤¨¤型¨a")
textBox3.Text=e.Node.Text;//根¨′据Y类¤¨¤型¨a显示o图a书o¨|
textBox3.Tag=e.Node.Tag.ToString();
DataTabledt=GetBook(e.Node.Tag.ToString());
//MessageBox.Show(e.Node.Tag.ToString());
item.SubItems.Add(e.Node.Text.ToString());
借阅界面代码:
publicpartialclass借¨¨阅:Form
public借¨¨阅(stringname)
label7.Text=name;
label5.Text=System.DateTime.Now.ToShortDateString();
label6.Text=DateTime.Now.AddMonths(1).ToShortDateString();
stringsql="select*frombookcribewherebookname='"+textBox1.Text.Trim()+"'";
//MessageBox.Show(sql);
MessageBox.Show("出错¨a"+eee.Message.ToString());
if(dt==null)
MessageBox.Show("对不起e,ê没有D该图a书o¨|");
privatevoid借¨¨阅_Load(objectsender,EventArgse)
privatevoidbutton3_Click(objectsender,EventArgse)
//MessageBox.Show(textBox1.Text);
privatevoidbutton1_Click(objectsender,EventArgse)//借¨¨阅
intnum;
//借¨¨阅时oà检¨查¨|库a存。ê检¨查¨|库a存表à¨a数oy量¢大¨于¨20,允¨o许¨a借¨¨阅。ê
Strings1="selectstocknumfromstockwhereisbn='"+label11.Text.Trim()+"'";
OracleCommandcon=newOracleCommand(s1,database.GetOpen());
oda.SelectCommand=con;
num=Convert.ToInt32(dt.Rows[0]["stocknum"]);
//MessageBox.Show(""+num);
if(num>0)
//检¨查¨|borrow表à¨a中D有D没有D记录,ê有D则¨°不允¨o许¨a借¨¨
Strings2="select*fromborrowwhereisbn='"+label11.Text.Trim()+"'andcardno='"+label7.Text.Trim()+"'";
OracleCommandcon2=newOracleCommand(s2,database.GetOpen());
OracleDataReaderodr=con2.ExecuteReader();
if(odr.HasRows)
MessageBox.Show("您¨2已°经-借¨¨阅该图a书o¨|,ê请不要°a重复借¨¨阅!ê");
//进行D借¨¨阅
Stringstr="updatestocksetstocknum=stocknum-1whereisbn='"+label11.Text.Trim()+"'";
OracleCommandcm=newOracleCommand(str,database.GetOpen());
Stringsql="insertintoborrowvalues('"+label11.Text.Trim()+"','"+label7.Text+"','"+label5.Text+"','"+label6.Text+"')";
MessageBox.Show("借¨¨阅成¨|功|");
MessageBox.Show("没有D可¨|借¨¨阅副à本à!ê!ê");
privatevoidlistView1_SelectedIndexChanged(objectsender,EventArgse)
Stringisbn=listView1.SelectedItems[0].SubItems[0].Text;
label11.Text=isbn;
总体测试是组装软件的系统技术,本系统测试采用渐增集成测试,即测试单一功能,将测试完的功能加入系统中,进行一次系统测试,依次类推将所有功能加入系统中,在具体测试时,采用自顶向下的结合方式,从主控功能开始,沿各控制层向下移动,逐渐把所有功能结合了。
在测试过程中使用到调试技术:
1、采用debug调试语句,跟踪数据;
2、嵌入打印语句,输出中间结果;
3、设置断点,观察程序在断点附近的状况。
评估运行的可靠性问题:
1、结果正确;
2、运行速度;
3、空间利用率;
4、算法的可行性。
测试时发现问题及时修正,如没有问题,则设计完成。
1)界面统一,有明确的导航设置
3)借阅图书进行验证,不能借阅同一本图书多次,不能借阅库存量为0的图书
4)查看借阅记录时便可以续借
5)图书信息显示根据树形图的选择而变化
6)操作简便,当选择listview中的条目时便可以获取信息,避免不必要的手动输入
7)熟练掌握安装和卸载oracle
8)文档内容详细
课程设计是本科学习阶段一次非常难得的理论与实际相结合的机会,通过这次比较完整的一个程序的设计,我们摆脱了单纯的理论知识学习状态,和实际设计的结合锻炼了我们的综合运用所学的专业基础知识,解决实际问题的能力,同时也提高我们查阅文献资料、对程序整体的把握等其他能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我们的能力得到了锻炼,经验得到了丰富。这是我们都希望看到的也正是我们进行课程设计的目的所在。
虽然课程设计内容繁多,过程繁琐但我们的收获却更加丰富。各种组件的运用,各种算法的应用,各种控件的利用我们都是随着设计的不断深入而不断熟悉并逐步掌握的。和老师以及同学的沟通交流更使我们对程序整体的规划与设计有了新的认识也对自己提出了新的要求。
提高是有限的但提高也是全面的,正是这一次设计让我积累了许多实际经验,也必然会让我们在未来的工作学习中表现出更高的应变能力和理解力。
顺利如期的完成本次课程设计给了我们很大的信心,但是也让我们看到了自己许多不足的地方,学习其实就是一个不断完善的过程,正视自己的不足之处,在以后的工作和学习中不断的弥补这些不足之处,在以后的生活中也要保持同样的态度,不断的完善自己。