前言
随着21世纪的到来,计算机技术的发展更加迅猛,在各行各业的应用更加广泛,面对日新月异的新技术、新方法,我们必需对现有计算机课程的设置和教学内容进行调整,以适应技术进步和市场变化的需求,使学生所学到的东西是市场上最学要的。
微软的.NET是一种开发平台,C#是微软特别为.NET平台设计的一种现代变语言,.NET有着广阔的应用前景,.NET的应用必将对整个计算机产业产生重要而深刻的影响。.NET不但改变了开发应用程序的方式和思维方式,而且使开发人员能创建出各种全新的应用程序,大幅度提高软件生产率。未来.NET将无处不在。
C#是一种简单、现代、面向对象且类型安全的编程语言,C#语言从C和C++语言演化而来,C#同时具备应用程序快速开发(RAD)语言的高效率和C++固有的强大能力。同时它吸收了Java语言的特点和精华,熟悉Java的人就觉得它很像Java,比尔盖茨曾说过:“Java是最卓越的程序设计语言!”,不过从C#诞生的那一时刻起,这以成为过去。C#时微软将Java集成到.NET中的产物,它是整个.NET平台的基础,是未来主流的编程语言。
图书管理系统的设计和实现
一、引言
1.1 背景
当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
图书管理系统(电子阅览室)主要提供网上的电子图书阅览平台,读者可以通过该系统阅览丰富的电子资源。在图书管理系统中,读者可以方便地对书目进行检索和阅览,足不出户便可尽览群书。图书管理系统主要提供网上的图书阅览平台。
电子阅览室可提供24小时的在线服务,最大限度的利用了当前互联网的各种优势,使得您无论身在何处,只要能接入互联网就可以享受到它所提供的方便,快捷的服务。它既具有传统图书馆的大部分功能,像图书的查阅及阅览,又新增了基于现有网络技术的许多实用的功能,像用户注册,书签,书评等。它充分的利用了互联网资源,使商家和用户都能从中获得益处。
1.2 目标
1.对图书资源进行分类,发布到网上,以供读者阅读。
2.为读者提供图书检索功能;
3.读者能方便地阅览电子图书;
4. 读者能方便地建立书签;
5. 读者能对书目进行评论;
6. 对读者的用户名、密码及权限进行管理。
二、需求分析
2.1 系统需求
随着互联网的爆炸性发展,人们越来越习惯于利用网络来实现所需的服务,网络已深深影响到人们生活的各个方面。另外,传统的图书馆不能满足一部分现代人的需要,而电子阅览室,由于其不受时间与空间的限制同时又具有传统图书馆的大部分功能,能够满足各类用户的常规与特殊需求,而且其方便快捷,实现技术又比较成熟,因此受到当代人的喜爱。
该系统主要分为两部分:读者部分和管理部分。为了方便读者查找自己感兴趣的主题进行阅读,要将图书按照内容进行分类。读者可以按照类别进行查找,逐级浏览。如果读者明确知道某本书的书名、作者等相关信息,图书搜索功能就很有用处了。有的读者会经常访问某些书目,或者是读者对某本书没有看完准备以后继续完成阅读,这时读者就要把以后还需要阅读的书目做上书签,以后便能方便的进行阅读了。他人对书的评价能够帮助我们选择阅读的对象。本系统的书评功能为读者提供发表意见的平台,以得到读者对书的评价和反馈。以上是个各为读者服务的功能。除此之外,本系统还可对用户的账号和书目的阅读权限进行管理。管理员需要给用户分配用户名和密码,及设定用户的级别。同时,还需要给图书资源也分级,以确定哪些级别的用户可以阅读。
2.2 功能需求
图书管理系统主要提供网上的电子图书阅览平台,读者可以通过该系统阅读丰富的电子图书资源。对于本系统,我们需要实现以下一些基本功能:
1 图书分类浏览:为了方便读者查找书目,将书目按照内容进行分类。这样读者就能很方便的找到自己感兴趣的主题进行阅读。
2 图书搜索:设定多种搜索条件,按条件搜索符合读者要求的图书。如果读者知道某本书的书名、作者等相关信息,利用图书搜索功能就很方便了。
3 书签功能:定义书签,方便读者中断后继续阅读。部分读者可能会定期的访问某些书目;又或者有的读者阅读某本书的时候没有看完,打算以后继续完成阅读,在这样的情况下,书签功能就会给读者带来很大的便利。
4 书评功能:读者可提交对书的评价。书评能够帮助读者更好选择阅读对象,了解图书内容,对读者阅读图书有很大的帮助。
5 权限管理:权限管理包括两部分内容:对用户帐号的管理和对书目阅读权限的管理。管理员需要给用户分配用户名和密码,同时设定用户的级别。同时,管理员还需要给阅读资源也分级,以确定哪些级别的用户可以阅读。
三、总体设计
3.1 基本设计概念和处理流程
互联网技术的飞速发展,ASP技术的灵活、易用、功能Dreamweaver、microsoftFrontpage、VBScript等设计工具的方便实用,以及数据库技术的发展给本系统的设计和实现提供了技术上的支持。本系统在数据库技术方面有如下优点:
开发统一,传统的数据库一般用VB,VC等开发,这些开发工具各有各的标准和方法,不是和开发WEB数据库应用,Web数据库的开发使用统一的HTML,任何人开发的数据库都有符合这个标准。
图1 “图书信息管理系统”系统主模块功能图
3.2 模块设计
1. 用户登录模块:填写已分配的用户名称,填写正确的密码,进入主控制页面。
2. 图书查询模块:图书分类,按类型逐级显示。
3. 图书搜索模块:提供多种查询条件,可按需要进行查询。
4. 管理员模块:显示书评列表和一条书评内容,添加书评。
5. 图书入库模块:为喜爱的图书投票,显示投票结果,选出认为最值得一看的图书。
6. 权限管理模块:分配用户名和密码,设定用户的级别。同时,还要给图书资源进行分级,以确定哪些级别的用户可以阅读。
四、数据库设计
4.1数据库的逻辑设计
由于本电子商务系统没有海量数据的存储问题,其数据一般不是很多,所以没有必要选用像Oracle这样的数据库:另外,现今的各种主页空间很少有支持Oracle的,而支持Access的较多。另外现阶段尚处于演示阶段,对安全性要求不是很高,Access足可以胜任,所以我们选用了Microsoft Access 2000。
数据通信接口采用ODBC(Open Database Connectivity,开放数据库互连)。ODBC是微软开发的一套读取数据库的解决方案,它的目的是将所有对数据库的底层操作全部隐藏在ODBC的驱动程序内核里。对于程序员来说,只要构建了一个指向数据库的连接,就可以采用统一的应用程序编程接口(Application Program Interface)实现对数据库的读写。目前ODBC驱动已经提供了对大多数常见类型数据库的支持,包括dBase,Informix,Access,SQL Server和Oracle等。也包括了对其它类型的数据库的支持,如文本,Excel电子表格等的支持。
根据系统功能设计的要求以及功能模块的划分,对于系统信息数据库,可以列出以下数据项和数据结构:
表名称标识:UserInfo
2.名称:书目信息表
表名称标识:BookCategoryInfo
3.名称:书目类别表
表名称标识:BookInfo
4.名称:书评信息表
表名称标识:OrderInfo
5.名称:书签信息表
表名称标识:StuInfo
6.名称:书目表
5.名称:访问次数表
4.2数据库的配置
一个真正的、完整的站点是离不开数据库的。ODBC为应用程序提供了一种标准方法来操作相关的数据库:管理器根据数据源提供的数据库的位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。
按如下步骤可以建立一个新的系统数据源。
首先,运行项目,输入用户ID和密码,单击“登录”按钮。如下图12所示。
<图12>
出现“河南工院 图书管理系统”对话框中。如下图13所示。
<图13>
在“河南工院 图书管理系统”对话框中,单击“系统”—>“退出”按钮,即可退出。单击“查询”—>“图书查询”如下图14所示。
<图14>
在“图书查询”对话框中,可按查询条件查询,如下图15所示。
<图15>
在“图书查询”对话框中,可按查询条件,输入“西游记”即可查询,如下图16所示。
<图16>
在“河南工院 图书管理系统”对话框中,单击“图书”—>“图书借阅”如下图17所示。
<图17>
在“河南工院 图书管理系统”对话框中,单击“查询”—>“图书归还”如下图18所示。
<图18>
在“河南工院 图书管理系统”对话框中,单击“查询”—>“新书入库”如下图19所示。
<图19>
在“河南工院 图书管理系统”对话框中,单击“管理”—>“查看管理员”如下图20所示。
<图20>
在“河南工院 图书管理系统”对话框中,单击“管理”—>“添加管理员”如下图21所示。
<图21>
在“河南工院 图书管理系统”对话框中,单击“管理”—>“查看管理员”如下图20所示。
五、详细设计
整个系统除了用户登录外,主要有用户登录模块、 图书查询模块、图书搜索模块、管理员模块、图书入库模块和权限管理模块六个模块。通过本系统,读者可以方便的对书目进行检索和阅览,足不出户就可尽览群书。
5.1 用户登录模块的设计与实现
1. 登录模块的IPO图
功能:本模块主要用于对用户身份进行鉴别。用户通过表单提供用户名和密码信息,系统根据用户提供的登录信息对用户进行身份查询鉴别。如果身份合法,则将用户导向系统的主页面并记录用户的相关信息,留待以后的系统页面使用。
输入:用户名、密码
处理:
- 输入用户的登录信息。
在页面提供的表单出输入用户的用户名和密码信息,点击“登录”按钮提交表单信息到身份验证页面。或点击“重填”按钮,重新输入。
- 从form表单获取输入数据。
当用户单击“登录”按钮后,登录信息由form表单提交到logon.asp进行处理。
- 用户身份进行验证。
连接数据库,打开用户数据表usertype,检验用户登录信息。以输入数据“用户名”为查询条件创建数据集查看输入用户名是否存在。如果存在,继续检验输入的密码是否正确。密码和用户名都正确,则进入图书馆主页面frame.asp;如果用户名不存在或密码不正确,则给出登录失败的提示框,并返回首页重新登录。
输出:图书馆主页面
2.图书馆登录页面图如下图所示:
图15 图书管理系统登录页面图
5.2 主页面模块的设计与实现
本系统的主页面使用了框架结构。使用框架(frames)结构设计的HTML文件,能够将整个窗口分成几个独立的小窗口,每个窗口可以分别载入不同的文件。框架的主要优点是独立显示内容,能直观的分开内容。可以在一个框架中定义链接,在另一个框架中显示内容或触发操作,而不必从重设计整个屏幕。
主页模块的设计
1. 主页模块
功能:主页面中显示推荐书目和新书书目的书目、作者、访问次数和简单介绍等相关信息。通过书名超链接文本,就可以阅读到图书内容。
输入:点击书名的超链接文本
处理:
- 构造页面格式。
使用HTML语言的TABLE表格标签构造页面表单,构造放置各个字段及字段值的表单,美化页面。
- 连接数据库。
与数据库创建链接,使用SQL语言在数据库中选取符合条件的记录。在符合条件的记录中选取相关字段值组成记录集。显示在页面的相应位置中。
- 创建超链接文本。
将书名设置为超链接文本。用户点击想要阅读的图书的书名,程序就会将页面导向readbook.asp页面。在readbook.asp页面中,用户就可以看到图书的详细内容。
输出:用户要求的页面
2.模块所使用的数据表
使用SQL语言在数据库中选取新书书目表newbook中的条目编号id、新书信息description字段及书目信息表bookdetail中的书目编号bookid、书目名称name、作者author和阅读次数times共六个字段值组成记录集。在记录集中选取符合新书书目表中的新书书目编号bookid字段值与书目信息表中的书目编号bookid的字段值相同的记录,创建记录集RS。
5.3 更改密码模块的设计与实现
1.更改密码模块的IPO图
功能:留言查看页面如图7-23所示,在主页面的上部分中的top.asp页面中,点击“更改密码”,就会调用javascript脚本语言,生成一个窗口。用户在生成的窗口中输入新的密码,提交后程序会将数据表中的密码进行修改。
输入:点击更改密码的超链接文本。
(1) 构造页面格式。
使用HTML语言的TABLE表格标签构造页面表单,构造放置各个字段及字段值的表单,美化页面。
(2) 判断合法性。
对session对象中的用户名字段值进行判断,判断用户的登录是否合法。如果不合法,显示要求重新登录的提示语,重新登录。
(3) 输入新密码。
在页面的相应位置填入用户的旧密码、新密码,在重新输入一次新密码,以确保输入无误。然后提交到pass_action.asp页面进行处理。
5.4添加书签模块的设计与实现
1. 添加书签模块的IPO图
功能:在各种表格和表单构成的add_bookmark.asp页面中的适当位置输入用户选择的书签图标、书签的详细内容等信息后,提交到add_action.asp页面进行将一条新记录插入数据表的操作。
输入:新增加的书签信息的用户选择的表情图标和书签的详细内容。
处理:
- 构造页面格式。
应用表格进行页面布局,相应的字段名称后使用多行文本框或单选框表单组件,构成书签信息输入页面。
- 判断合法性。
在连接数据库之前,首先判断用户是否在阅读某一本书。然后判断要添加书签的书目是否存在。
- 连接数据库。
以上一页提交的图书的编号为条件选取数据表中的记录创建记录集,将记录中的用户名、书名和作者等信息显示在相应位置。
- 输入书签。
在相应表单元素中选取书签标图,输入书签的详细内容。提交到add_action.asp页面进行处理。
- 插入操作。
获取相关信息,在add_action.asp页面中打开数据库,使用recordset对象的insert into方法向书签信息表bookmark插入一条新记录。
1. 书目搜索模块的IPO图
功能:搜索方式分为3种:通过书名、作者和十大热门来进行查询。查出的结果显示在名字为 searchresult的窗口中。用户可通过以上各查询方式,方便的查询自己想要阅读的书目。
输入:选择一种查询方式,输入查询条件。
处理:
- 构造页面格式。
使用HTML语言的TABLE表格标签构造页面表单。本模块使用了框架结构。单行文本框和单选框来确定查询条件。
- 查询条件。
在三种查询方式中选择一种作为读者的查询方式。然后在单行文本框中输入查询条件。
- 查询结果。
连接数据库,在相应的数据表中选取符合查询条件的记录。将查询结果显示在下面的窗口中。
六、系统维护和改进
6.1 运行维护
本网站的维护主要包括以下内容:
1.权限维护
管理员需要对用户的用户名、密码和权限进行维护,给每位读者分配享用的用户名和密码,确定阅读级别。
2.书目管理
书目需要经常进行更新,在书目信息表中更改、增加各相应的数据信息。
3.书目类别管理
书目的更新操作,引起书目类别信息表的更改,管理员就需要及时调整书目类别。
6.2 系统的改进与提高
由于各种原因,本系统有许多缺点。针对本系统的一些缺点,在二期开发时主要在以下方面进行改进:
1、 加强后台管理页面的建设
本系统只是面向用户,对书目的管理只靠人工在后台操作,费时又费力。加强后台管理系统的建设,各项操作由程序执行,方便、准确,又节省人工。
2、图书查询页面功能应该加强
例如:图书查询功能可以加入查询条件,方便读者查看符合要求的图书。
3、各模块之间的联系比较混乱。
七 代码
7.1登录代码(Login)
namespace BookInfoM
{
public partial class Login : Form
{
public static string[] LuserID;
private int Logintimes=0;
public Login()
{
InitializeComponent();
}
private void Login_Load(object sender, EventArgs e)
{
combUserID.Text = "";
txtPassWord.Text = "";
}
private void btnLogin_Click(object sender, EventArgs e)
{
if (this.Text.Trim() != "")
{
if (txtPassWord.Text != "")
{
SqlCommand command = CustomDataProvide.GetCommand(
"select * from UserInfo where UserID='" + combUserID.Text.Trim() +
"'and Password='" + txtPassWord.Text.Trim() + "'");
SqlDataReader dr;
try
{
command.Connection.Open();
dr = command.ExecuteReader();
dr.Read();
if (dr.HasRows)
{
Logintimes = 0;
Main main = new Main();
Main.LoginUser.UserID = dr.GetString(0);
Main.LoginUser .UserName = dr.GetString(1);
Main.LoginUser .Password = dr.GetString(2);
Main.LoginUser .Isadmin = dr.GetBoolean(3);
Main.LoginUser.Day = (Week )dr.GetInt32(4);
this.Hide();
main.Show();
dr.Close();
command.Connection.Close();
command.Dispose(); }
else
{ Logintimes++;
if (Logintimes == 3)
{ MessageBox.Show("对不起,你登录的次数
已经超过三次!", "警告!");
Application.Exit();
}
if (BookInfoM.ClassCodes.DataValidate.IDExist("select
UserID from UserInfo where UserID='" + combUserID.Text.Trim().ToString()
+ "'") == true)
{ MessageBox.Show("密码不正确", "警告!");
txtPassWord.Text = ""; }
else
{ MessageBox.Show("此用户ID不存在,请查
证后登录", "提示");
combUserID.Text = "";
txtPassWord.Text = "";
} } }
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
} }
else
{ MessageBox.Show("密码不能为空", "提示"); } }
else
{ MessageBox.Show("用户ID不能为空", "提示"); } }
private void btnExit_Click(object sender, EventArgs e)
{
if (MessageBox.Show("你确认要退出该程序吗?",
"提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
== DialogResult.Yes)
Application.Exit();
} } }
7.2主界面代码(Main)
namespace BookInfoM
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit(); }
private void 查询管理员ToolStripMenuItem_Click(object sender, Event
Args e)
{ UserManag.ViewAdmin view = new BookInfoM.UserManag.
ViewAdmin();
view.Show(); }
private void 注销ToolStripMenuItem_Click(object sender, EventArgs e)
{
Login flogin = new Login();
flogin.Show();
this.Close(); }
private void 添加管理员ToolStripMenuItem_Click(object sender,
EventArgs e)
{ AddAdmin addadmin = new AddAdmin();
addadmin.Show(); }
private void 修改管理员ToolStripMenuItem_Click(object sender,
EventArgs e)
{ ModAdmin modadmin = new ModAdmin();
modadmin.Show(); }
private void 图书查询ToolStripMenuItem_Click(object sender,
EventArgs e)
{ SearchBook SeachB = new SearchBook();
SeachB.Show(); }
private void 图书借阅ToolStripMenuItem_Click(object sender,
EventArgs e)
{ LendBook LendB = new LendBook();
LendB.Show(); }
private void 图书送还ToolStripMenuItem_Click(object sender,
EventArgs e)
{ ReturnBook ReturnB = new ReturnBook();
ReturnB.Show(); }
private void 删除管理员ToolStripMenuItem_Click(object sender,
EventArgs e)
{ ModAdmin modadmin = new ModAdmin();
modadmin.Show();
}
private void 库存查询ToolStripMenuItem_Click(object sender,
EventArgs e)
{ SearchBook SeachB = new SearchBook();
SeachB.Show(); }
private void 新书入库ToolStripMenuItem_Click(object sender,
EventArgs e)
{ BookWarehousing BookW = new BookWarehousing();
BookW.Show(); }
private void 帮助ToolStripMenuItem_Click(object sender,
EventArgs e)
{ HalpWord HalpW = new HalpWord();
HalpW.Show();
}
}
}
7.3图书查询代码(ViewAdmin)
namespace BookInfoM.UserManag
{
public partial class ViewAdmin : Form
{
public ViewAdmin()
{
InitializeComponent();
}
private void ViewAdmin_Load(object sender, EventArgs e)
{ txtUserID.Text = BookInfoM.Main.LoginUser.UserID;
txtUserName.Text = Main.LoginUser.UserName;
txtPassword.Text = "*******";
txtAdmin.Text = Main.LoginUser.Admin;
txtWorkday.Text = Main.LoginUser.Day.ToString();
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
ModAdmin modadmin = new ModAdmin();
modadmin.Show();
}
}
}
总 结
经过几周的学习琢磨,顺利的结束了此次课程设计。期间查阅了大量技术资料,学习到了许多新的知识。在这次课程设计的过程中,受到了许多同学和老师的帮助,特别对刘洪破老师、范顺垚同学和王圆同学表示感谢!
C#是一门功能十分强大的语言,在课程设计的过程中,从一些书籍及网络资源中看到许多实现程序功能的方法,由于个人精力及时间的限制,没有及时应用到课程设计中,在今后的学习开发过程中将会试着使用一些更好的实现功能的方法,提高程序的运行效率和正确性。
在这次课程设计的过程中,也反映出了许多问题,比较突出的是对一些基础知识掌握的不够牢靠,在使用的时候不能够灵活运用。在以后的学习生活中,会注意对基础只是的记忆理解,避免“模糊记忆” 。提高编写程序的效率。
如果有同学也希望学习C#这门语言的话,建议多看下Microsoft官方配套Studio .NET 2005出版的MSDN帮助文档,里面对几乎所有的类及空间的使用都做了比较经典的讲解,无论是初学者还是资深程序员都是最直接的参考学习资料。
在我个人学习C#的过程中,也总结了一些经验及对软件设计的看法,如果有同学需要交流的话,可以加我QQ:764846521.
最后,在新年来临之际,祝各位老师同学新年快乐,万事如意!
本次毕业设计完成了图书采购系统的设计。该系统使用Microsoft公司开发的管理系统的应用程序。在编写这个系统中遇到诸多困难,但都一一解决,并有很大的收获。
通过这次毕业设计,我深深的体会到自己所学的知识还不够,有许多方面还需要自己进一步的学习,以便使自己在今后的工作当中能够有出色的表现。
系统的设计过程中,我收集许多关于这一块的资料,并征集老师与同学比较好的意见,在汇总整理之后,经过系统的分析,最终在规定的时间内,完成此系统的每个模块的设计。
图书采购系统虽然已经完成,但是限于时间和水平,所以有些地方还不够完善。今后还需要不断的完善,以求尽善尽美。
参考文献
[1] Karli Watson,ChristianNagel编著.齐立波译.C#入门经典(第3版).北京:清华大学出版社,2006年;
[2] Christian Nagel,Bill Evjen,Jay Glynn编著.李敏波译.C#高级编程(第4版).北京:清华大学出版社,2006年;
[3] Harvey M. Deitel编著.须得译.C#大学教程.北京:电子工业出版社,2004年;
[4] 欧立奇,康祥顺,马煜编著.Visual C# .NET 案例开发集锦.北京:电子工业出版社,2006年;
[5] 易向东,陈蓓,万英编著.C#程序员开发指南.北京:北京希望电子出版社,2006年;
[6] 王华杰,黄山著编著.精通C#数据库编程.北京:北京科学出版社,2003年;
[7] Kouresh Ardestani编著.张哲译.高效掌握ADO.NET.北京:清华大学出版社,2003年;
[8] 微软公司著.熊盛新,许志庆,李钦译.Visual C# .NET语言参考手册.北京:清华大学出版社,2002年。