赞
踩
目录
当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,而有信息处理就离不开数据库,这使得数据库管理系统被广泛应用于各领域。使用数据库管理系统进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
数据库应用系统开发的目标是建立一个满足用户长期需求的产品。开发的主要过程为:理解用户的需求,然后,把它们转变为有效的数据库设计。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用。本系统就是为了管理好图书信息而设计的
图书管理包括的图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书管理系统都是初步开始使用,甚至尚未使用计算机进行信息管理。以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。
尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是图书管理系统开发所要解决的问题。基于这此问题,有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的进行查询和修改图书情况等图书管理操作。
SQL是英文(Structured Query Language)的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。
SQL语言有以下几个优点:
1. 非过程化语言
SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集,所有SQL 语句接受集合作为输入,返回集合作为输出。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。
SQL不要求用户指定对数据的存放方法, 这种特性使用户更易集中精力于要得到的结果;所有SQL语句使用查询优化器,它是RDBMS的一部分,由它决定对指定数据存取的最快速度的手段,查询优化器知道存在什么索引,在哪儿使用索引合适,而用户则从不需要知道表是否有索引、有什么类型的索引。
2. 统一的语言
SQL可用于所有用户的DB活动模型,包括系统管理员、数据库管理员、 应用程序员、决策支持系统人员及许多其它类型的终端用户。基本的SQL 命令只需很少时间就能学会,最高级的命令在几天内便可掌握。
3. 所有关系数据库的公共语言
由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS(关系数据库管理系统)转到另一个,所有用SQL编写的程序都是可以移植的。
本系统的设计是在Windows 操作系统环境下,使用Visual Studio 2008开发成功的。
Visual Studio具有以下特点:
1、面向对象设计不再是单纯的从代码的第一行一直编到最后一行,而是考虑如何创建类和对象,利用类和对象来简化程序设计,并提供代码的封装和可重用性,便于程序的维护与扩展。
2、所谓的对象是一种抽象的名称,用来对应实现世界存在的“东西”。一个窗口、一个按钮、一个菜单都可视为一个对象,而按钮对象、菜单对象、又会出现在窗口对象中,因此按钮对象、菜单对象便是窗口的组件之一。对象内部的数据是不能随意更改的,必须由外部向其传递信息,再由对象按其方法加以处理。用户无需知道其任何细节,操作是封闭的,对象之间能通过函数调用相互通信。
3、类可视为一个产品模具、一个模块。在面向对象设计中,类是对象的原型,是对象的制作器。类的概念是面向对象程序设计最重要的特征。所谓类,是指由数据结构及其相关操作所形成的集合,描述该类任一对象的共同的行为特征,是对一组性质相同的对象的程序描述,概括了对象的共同性质和数据。
4、面向对象设计的核心是类的设计。例如:可以定义一个“成绩查询”类,该类中可以定义查询的姓名、学号、班级等信息,则以此类为原型可以设计出众多的“成绩查询”类的对象实例,这些实体都具有类中所定义的特征。
2.1.1读者的主要功能
(1)查询功能:学生登录系统后可以查询本人信息,查询图书信息。
(2)修改功能:学生可以修改自己的信息。
(3)预约功能:学生可以对在馆的图书进行预约。
(4)注销功能:学生可以注销自己的信息。
2.1.2管理员的主要功能
(1)管理员管理:管理员可以对自身信息进行管理,包括查询,修改,删除自身信息,还可以添加新的管理员,对系统进行管理。
(2)读者管理:管理员可以对已注册的读者信息进行管理,包括查询,修改,删除和添加读者。
(3)图书管理:管理员可以对图书进行管理,包括查询,修改,删除和添加新的图书信息。
(4)借阅图书:管理员可以给读者借书。
(1)系统登录流程图
图2-1登录流程图
(3)管理员流程
图2-2管理员流程
N
Y
图2-3系统流程图
我(王春羽)负责登录和管理员管理
(1)管理员信息:包括管理员编号、管理员姓名、对应密码和管理员年龄、性别等。
(2)读者信息:包括读者编号、姓名、读者密码、读者性别、读者年龄、读者专业、读者所属系别。
(3)图书信息:包括图书编号、书名、作者、出版社、图书价格等。
(4)借阅信息:包括所借图书编号、书名,借阅者编号、姓名和借阅时间等。根据这些需要,本系统需要“读者信息表”,“ “图书信息表”,“借阅信息表”。
(4)还书信息:包括所要归还图书编号、书名,还书者编号、姓名和借阅时间、还书时间、是否超期等。根据这些需要,本系统还需要“读者信息表”,“图书信息表”,“借阅信息表”和“还书信息表”等。
(5) 状态信息:包括状态记录编号、图书编号、书名和对应的状态。
读者的主要功能
(1)查询功能:学生登录系统后可以查询本人信息,查询图书信息。
(2)修改功能:学生可以修改自己的信息。
(3)预约功能:学生可以对在馆的图书进行预约。
(4)注销功能:学生可以注销自己的信息。
管理员的主要功能
(1)管理员管理:管理员可以对自身信息进行管理,包括查询,修改,删除自身信息,还可以添加新的管理员,对系统进行管理。
(2)读者管理:管理员可以对已注册的读者信息进行管理,包括查询,修改,删除和添加读者。
(3)图书管理:管理员可以对图书进行管理,包括查询,修改,删除和添加新的图书信息。
(4)借阅图书:管理员可以给读者借书。
(5)归还图书:管理员可以给读者还书。
3.2.1局部E-R图
(1)管理员E-R图
图3-1管理员E-R图
(2)读者E-R图
图3-2读者E-R图
(3)图书E-R图
图3-3图书E-R图
(4)总体E-R图
图3-4总体E-R图
现在需要将上面的数据库概念结构转化为SQL Server 2000 数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。
图书管理系统数据库中各个表格的设计结果如下面的几个表所示。每个表表示在数据库中的一个数据表:
(1)管理员信息表
其中admin_id是主键
(2)读者信息表
其中reader_id是主键
(4)图书信息表
其中book_id是主键
经过前面的需求分析和概念结构设计以后,得到数据库的逻辑结构。就可以在SQL Servr 2005数据库系统中实现该逻辑结构(通过建立约束关系),利用SQL Server 2005数据库系统中SQL查询分析器实现的。
(1)建立数据库
CREATE DATABASE [D_library] ON PRIMARY
( NAME = N'D_library', FILENAME = N'H:\公文包\课程设计\数据库课程设计\数据库\D_library.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'D_library_log', FILENAME = N'H:\公文包\课程设计\数据库课程设计\数据库\D_library_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
COLLATE Chinese_PRC_CI_AS
建立管理员信息表并添加数据:
CREATE TABLE [dbo].[T_admin](
CONSTRAINT [PK_T_admin] PRIMARY KEY CLUSTERED
([admin_id] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
上面的SQL语句在SQL Server 2005中查询分析器执行后,将自动产生需要的所有表。有关数据库结构的所有后台工作已经完成。现在将通过学生管理系统中各个功能模块的实现,来编写数据库系统的客户端程序。
1. 创建空白解决方案
为了在Visual Studio 2008中创建应用程序,应当先创建一个空白解决方案,它包括:
● 通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案中。(.sln)。
● 记录所有将与解决方案建立关联的选项,以便在每次打开时,它都包含您所做的自定义设置。(.suo)。
2.创建管理员主窗体
单击工具栏的“MainMenu”、“Menustrip”和“Toolstrip”控件,生成一个如下所示的窗体:
在VS中可以使用类库模板快速创建能够与其他项目共享的可再次使用的类和组件。整个工程项目中的任何地方都可以调用公用类库的类和组件,这样可以极大地提高代码的效率。在项目资源管理器中为项目添加一个类,保存为sqlhelp.cs。下面就可以开始添加需要的代码。
public class sqlhelp
{
SqlConnection conn = null;
SqlCommand cmd = null;
SqlDataAdapter da = null;
SqlDataReader dr = null;
DataTable dt = new DataTable();
public sqlhelp()
{
conn = new SqlConnection("server=shadow\\sqlexpress;database=D_library;trusted_connection=yes");
}
/// <summary>
/// executereader以表显示
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns>表</returns>
public DataTable ExecuteReader(string sql)
{
conn.Open();
cmd = new SqlCommand(sql, conn);
dr = cmd.ExecuteReader();
dt.Load(dr);
return dt;
}
/// <summary>
/// 执行插入、删除、修改SQL语句
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="para">传入的值</param>
/// <returns>受影响的行数</returns>
public int ExecuteNonQuery(string sql, SqlParameter[] para)
{
conn.Open();
int count;
cmd = new SqlCommand(sql,conn );
cmd.Parameters.AddRange(para );
count = cmd.ExecuteNonQuery();
return count;
}
/// <summary>
/// 用dataset执行查询
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="table">执行表名</param>
/// <param name="para">传入的值</param>
/// <returns>数据</returns>
public DataSet sdu(string sql, string table)
{
da = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds, table);
return ds;
}
/// <summary>
/// 用dataset执行条件查询、插入、删除、更新操作
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="table">执行表名</param>
/// <param name="para">传入的值</param>
/// <returns>数据</returns>
public DataSet udu(string sql, string table, SqlParameter[] para)
{
da = new SqlDataAdapter(sql, conn);
da.SelectCommand.Parameters.AddRange(para);
DataSet ds = new DataSet();
da.Fill(ds, table);
return ds;
}
//两个表查询
public DataSet select_borrowbookid(string book_id)
{
try
{
SqlDataAdapter da = new SqlDataAdapter("select T_book.book_id as 编号,T_book.book_name as 书名,status as 状态 from T_book,T_status where T_book.book_id=T_status.book_id and T_book.book_name=T_status.book_name", conn);
SqlParameter[] para = { new SqlParameter("@id", book_id ) };
da.SelectCommand.Parameters.AddRange(para);
DataSet ds = new DataSet();
da.Fill(ds, "T_book");
return ds;
}
catch (SqlException ww)
{
throw ww;
}
finally
{ conn.Close(); }
} }
用Visual Studio 2008中的新建项目创建windows窗体应用程序并利用工具栏中“button”、“textbox”和“combox”控件建立起如下窗体
管理员登录需要密码验证,只有在用户名和对应的密码都正确才能登录,在txtbox中分别输入用户名和密码后点击登录按钮就可以登录了,其代码如下:
namespace 图书管理系统
{
public partial class login : Form
{
public login()
{
InitializeComponent();
}
admin m = new admin();
readers r = new readers();
newreaders ne = new newreaders();
readerlogin rl = new readerlogin();
private void logn_Load(object sender, EventArgs e)
{
UsercomboBox.Items.Add("管理员");
UsercomboBox.Items.Add("读者");
UsercomboBox.SelectedIndex = 0;
}
private void bt_ok_Click(object sender, EventArgs e)
{
if (UsercomboBox.Text == "读者")
{
string reader_name = txt_name.Text;
bool f = false;
f = new T_reader().exit(reader_name);
if (f == true)
{
if (txt_pwd.Text == new T_reader().select_readername(txt_name.Text).Tables["T_reader"].Rows[0][2].ToString())
{
rl.ShowDialog();
this.Close();
}
else
{
MessageBox.Show("用户名或者密码错误,请重新输入");
txt_pwd.Text = null;
}
}
else
{ MessageBox.Show("该读者不存在!请注册后再登录"); }
}
if (UsercomboBox.Text == "管理员")
{
string admin_name = txt_name.Text;
bool f = false;
f = new T_admin().exit_name(admin_name);
if (f == true)
{
if (txt_pwd.Text == new T_admin().select_adminname(txt_name.Text).Tables["T_admin"].Rows[0][2].ToString())
{
m.ShowDialog();
this.Close();
}
else
{
MessageBox.Show("用户名或者密码错误,请重新输入");
txt_pwd.Text = null;
}
}
else
{ MessageBox.Show("该管理员不存在!请注册后再登录"); }
}
}
private void bt_close_Click(object sender, EventArgs e)
{
this.Close();
}
private void butenrollment_Click(object sender, EventArgs e)
{
ne.ShowDialog();
this.Close();
}
}
}
登录成功后将进入管理员主界面
点击管理员管理按钮将进入管理员管理界面
代码如下:
namespace 图书管理系统
{
public partial class selectadmin : Form
{
public selectadmin()
{
InitializeComponent();
}
private void selectadmin_Load(object sender, EventArgs e)
{
comboBox1.Items.Add("编号");comboBox1.Items.Add("姓名"); comboBox1.Items.Add("性别");
comboBox1.Items.Add("年龄"); comboBox1.SelectedIndex = 1;
}
private void button1_Click(object sender, EventArgs e)
{
if (comboBox1.Text == "编号")
{
string admin_id = textBox4.Text;
bool f = false;
f = new T_admin().exit_id(admin_id);
if (f == true)
{
dataGridView1.DataSource = new T_admin().select_adminid(admin_id ).Tables ["T_admin"];
}
else
{
MessageBox.Show("对不起,该用户不存在");
}
}
if (comboBox1.Text == "姓名")
{
string admin_name = textBox4.Text;
bool f = false;
f = new T_admin().exit_name(admin_name);
if (f == true)
{
dataGridView1.DataSource = new T_admin().select_adminname(admin_name).Tables["T_admin"];
}
else
{
MessageBox.Show("对不起,该用户不存在");
}
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
dataGridView1.DataSource = null;
textBox4.Text = null;
}
}
}
代码如下:
namespace 图书管理系统
{
public partial class newadmin : Form
{
public newadmin()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string admin_pwd = txt_pwd.Text;
string admin_name = txt_name.Text;
string admin_sex = txt_sex.Text;
string admin_age = txt_age.Text;
bool f = false;
f = new T_admin().insert_admin(admin_pwd, admin_name, admin_sex, admin_age);
if (f == true)
{
MessageBox.Show("保存成功,你已经成为管理员");
}
else
{
MessageBox.Show("对不起,保存失败");
}
dataGridView1.DataSource = new T_admin().selectalladmin();
}
private void button2_Click(object sender, EventArgs e)
{
txt_pwd.Text = null; txt_name.Text = null;
txt_sex.Text = null; txt_age.Text = null;
}
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
代码如下:
namespace 图书管理系统
{
public partial class updateadmin : Form
{
public updateadmin()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string admin_id = textBox1 .Text;
bool f = false;
f = new T_admin().exit_id(admin_id);
if (f == true)
{
txt_id.Text =new T_admin ().select_adminid (textBox1 .Text ).Tables ["T_admin"].Rows [0][0].ToString ();
txt_pwd.Text = new T_admin().select_adminid(textBox1.Text).Tables["T_admin"].Rows[0][2].ToString();
txt_name.Text = new T_admin().select_adminid(textBox1.Text).Tables["T_admin"].Rows[0][1].ToString();
txt_sex.Text = new T_admin().select_adminid(textBox1.Text).Tables["T_admin"].Rows[0][3].ToString();
txt_age.Text = new T_admin().select_adminid(textBox1.Text).Tables["T_admin"].Rows[0][4].ToString();
}
else
{
MessageBox.Show("对不起,该用户不存在");
}
}
private void button2_Click(object sender, EventArgs e)
{
string admin_id = txt_id.Text;
string admin_name = txt_name.Text;
string admin_pwd = txt_pwd.Text;
string admin_sex = txt_sex.Text;
string admin_age = txt_age.Text;
bool f = false;
f = new T_admin().update_admin(admin_id,admin_pwd ,admin_name ,admin_sex ,admin_age );
if (f == true)
{
MessageBox.Show("修改成功");
this.Close();
}
else
{
MessageBox.Show("修改失败了");
}
}
private void button3_Click(object sender, EventArgs e)
{
string admin_id = textBox1.Text;
bool f = false;
f = new T_admin().delete_admin(admin_id );
if (f == true)
{
MessageBox.Show("删除管理员成功!");
this.Close();
}
else
{
MessageBox.Show("删除失败!");
}
}
private void button4_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
(3)管理员函数库
在管理员模块中也有对应的类库,包含了管理员实现功能的所需要的所有函数,其代码如下:
public class T_admin
{
sqlhelp help = null;
DataTable dt=new DataTable();
public T_admin ()
{
help = new sqlhelp();
}
//查询所有的管理员
public DataTable selectalladmin()
{
string sql = "select * from T_admin";
dt = help.ExecuteReader(sql );
return dt;
}
// dataset 显示所有管理员
public DataSet select_alladmin()
{
string sql = "select * from T_admin ";
string table = "T_admin";
DataSet ds = help.sdu(sql, table);
return ds;
}
//按编号查询管理员
public DataSet select_adminid(string admin_id)
{
string sql = "select * from T_admin where admin_id=@id";
string table = "T_admin";
SqlParameter[] para = { new SqlParameter("@id", admin_id) };
DataSet ds = new sqlhelp().udu(sql, table, para);
return ds;
}
// 按名字查询管理员信息
public DataSet select_adminname(string admin_name)
{
string sql = "select * from T_admin where admin_name=@name";
string table = "T_admin";
SqlParameter[] para = { new SqlParameter("@name", admin_name) };
DataSet ds = new sqlhelp().udu(sql, table, para);
return ds;
}
//按姓名查看管理员是否存在
public bool exit_name(string admin_name)
{
bool flag = false;
string sql = "select * from T_admin where admin_name=@name";
string table = "T_admin";
SqlParameter[] para = { new SqlParameter("@name", admin_name) };
DataSet ds = help .udu(sql, table ,para );
if (ds.Tables["T_admin"].Rows.Count > 0)
{
flag = true;
}
else
{
flag = false;
}
return flag;
}
//按编号查看管理员是否存在
public bool exit_id(string admin_id)
{
bool flag = false;
string sql = "select * from T_admin where admin_id=@id";
string table = "T_admin";
SqlParameter[] para = { new SqlParameter("@id", admin_id) };
DataSet ds = help.udu(sql,table , para);
if (ds.Tables["T_admin"].Rows.Count > 0)
{
flag = true;
}
else
{
flag = false;
}
return flag;
}
//插入新的管理员
public bool insert_admin(string admin_pwd,string admin_name,string admin_sex,string admin_age)
{
bool flag = false;
string sql = "insert into T_admin values(@pwd,@name,@sex,@age)";
SqlParameter[] para = { new SqlParameter ("@pwd",admin_pwd),new SqlParameter ("@name",admin_name ),new SqlParameter ("@sex",admin_sex ),new SqlParameter ("@age",admin_age )};
if (help.ExecuteNonQuery(sql, para) > 0)
{
flag = true;
}
return flag;
}
//修改管理员
public bool update_admin(string admin_id,string admin_pwd,string admin_name,string admin_sex,string admin_age)
{
bool flag = false;
string sql = "update T_admin set admin_pwd=@pwd ,admin_name=@name,admin_sex=@sex,admin_age=@age where admin_id=@id ";
SqlParameter[] para = { new SqlParameter("@pwd",admin_pwd),new SqlParameter ("@name",admin_name ), new SqlParameter ("@sex",admin_sex ),new SqlParameter ("@age",admin_age ),new SqlParameter ("@id",admin_id) };
if (help.ExecuteNonQuery(sql, para) > 0)
{
flag = true;
}
return flag;
}
//根据编号删除管理员
public bool delete_admin(string admin_id)
{
string sql = "delete from T_admin where admin_id=@id";
SqlParameter[] para = { new SqlParameter("@id", admin_id) };
bool flag = false;
if (help.ExecuteNonQuery(sql, para) > 0)
{
flag = true;
}
else flag = false;
return flag;
}
经过一段时间辛苦的设计和开发,我和我的小组对图书管理系统基本开发完毕。其功能能够符合老师需求。对于数据的一致性的问题也通过程序进行了有效的解决。通过这次课程设计真切地体会到课程设计的目的并不止于自己单纯任务的完成,而在于巩固已学过的知识和学习新的知识并掌握具体的方法,如何具体使用和具体应用你所学所用的语言,从而获得两种本领:应用一种语言的能力和应用一种开发工具的能力。回首整个开发设计过程,我觉得我学到的东西太多太多了:
一是,我学到了很多书本上学不到的东西。比如以前开发软件的时候,一般做的就是编码工作,实现比较简单的功能。但是这次课程设计设计,作为组长我要负责图书管理系统的整个开发过程,包括系统可行性分析、系统需求分析、系统概要设计、系统详细设计等方面的工作。在每个设计阶段我都能学到一些新知识,对我的动手能力提高很大。在整个课程设计过程中,我基本上完成了图书管理系统各个模块的功能,达到了课程设计的要求。但是该系统还有许多不尽如人意的地方,在今后有待进一步完善善。页面设计也还有进一步改善的地方,我会在今后的学习工作中着重加强这方面的锻炼。
从接到设计课题到具体设计再到完成系统开发,是一个不断地遇到问题与解决问题的过程。其中包括:分析各种需求、完善各种功能、增加必要环节、对各部分及整体进行检测与维护。当然仍存在许多问题不能解决地尽善尽美,还需不断地继续与探索。在结束设计的同时也感到了劳动的艰辛与劳动成果的来之不易,明白了课程设计是给自己提供了一个锻炼、升华、提高、完善的机会。
二是,在这次课程设计中,我们不仅组建团队,完成图书管理系统数据库的物理及逻辑结构的设计,同时也分工完成数据库的建立和各个功能窗体的建立,用户界面设计以及相关功能的实现。通过这次课程设计,并把所学与实际结合起来,为以后对项目的接手,处理打下基础。更重要的是,在这次课程设计中,我深深体会到了团队精神的重要性,对于我们团队意识的培养有极大的促进作用。我知道在以后的工作中,还会遇到很多类似的情况,此次课程设计为我以后的工作积累了很宝贵的经验。总之,在这次数据库课程设计中,我受益匪浅。
[1] 麦斯科.《C#设计模式》[M]. 北京:中国电力出版社
[2] 刘亚秋.《C#程序设计与应用》[M]. 北京:电子工业出版社
[3] 朱冰.《C#语言实用教程》[M]. 北京:中国铁道出版社.2005
[4] 尹立宏.《Visual C#.NET应用编程150例》[M]. 北京:电子工业出版社
[5] 王华杰,李律松.《精通C#数据库开发》[M]. 北京:清华大学出版社
[6] 王晟.《Visual C#.NET数据库开发经典案例解析》[M]. 北京:清华大学出版社
[7] 微软公司著.熊盛新,许志庆,李钦译.Visual C# .NET语言参考手册[M].北京:清华大 学出版社
[8] (美)Kaili Watson .C#2005数据库编程经典教程[M].人民邮电出版社[9]
[10] 刘烨,季石磊等.C#编程及应用程序开发教程[M].北京:清华大学出版社
[11] 殷泰晖,张强,杨豹等C#编程从基础到实践,电子工业出版社[12]
[13] 李永平.ASP.NET 2.0(C#)基础教程[M] .北京:清华大学出版社
[14] 王珊 萨师煊. 数据库系统概论(第四版).北京:高等教育出版社
[15] 刘意成.SQL实战演练[M] .北京:西安电子科技大学出版社
[16] 罗运模. SQL Server 2000数据仓库应用与开发[M] .北京:人民邮电出版社
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。