河南理工大学 计算机科学与技术学院
课程设计
2011 — 2012学年 第二学期
课程名称 C#Windows程序设计课设 设计题目 图书馆管理信息系统 学生姓名 学 号 专业班级
指导教师
2012年 6月 15日
1
河南理工大学《C#程序设计》实训报告
目录
1.设计任务书………………………………………………………………3
1.1项目目地………………………………………………………………3 1.2 题目与要求……………………………………………………………3 1.2本系统涉及的知识点…………………………………………………3
2.功能设计…………………………………………………………………4
2.1.系统功能概述…………………………………………………………4 2.2功能设计………………………………………………………………4
3.数据库设计………………………………………………………………4 3.1数据库分析…………………………………………………………4
3.2系统的E-R模型………………………………………………………5 3.3创建数据表……………………………………………………………6 3.4 数据库中表的关系…………………………………………………6
4.系统实现…………………………………………………………………7
4.1登陆界面……………………………………………………………7 4.2应用程序主界面………………………………………………………11 4.3图书查询操作…………………………………………………………11 4.4借阅查询操作…………………………………………………………14 4.5 用户管理……………………………………………………………17
5.总结…………………………………………………………………………20 6.参考文献……………………………………………………………………12
2
河南理工大学《C#程序设计》实训报告
1. 设计任务书
1.1项目目的
当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。
数据处理手工操作,工作量大,出错率高,出错后不易更改。图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的图书进行更改就更加困难了。
基于这此问题,我认为有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。
1.2题目与要求
本人计划与刘贺和王刘英编写一个图书馆管理信息系统,主要用来管理研究生的基本信息及成绩信息。本图书馆管理信息系统具有以下特点: 1. 实现图书馆的归档、借出、归还和查找等操作;
2. 实现对图书馆的借阅、读者的管理、书库的增减等操作; 3. 界面设计简单、操作方便。
本系统的功能主要包括以下几个方面: 1. 能随时查询图书的库存量,以便准确、及时、方便地为读者提供借阅信息。
但不能修改数据,无信息处理权,即只可以浏览数据,管理权限由系统管理员掌握和分配; 2. 图书馆各项信息必须保证安全性和完整性; 3. 系统管理员定时整理系统数据库,实现对图书的借阅、读者的管理、书库
的增减等操作,并将运行结果归档。
1.3本系统设计的知识点
WinForm常用控件、属性、方法,ADO.NET技术。
3
河南理工大学《C#程序设计》实训报告
2. 功能设计
2.1.系统功能概述
图书馆管理信息系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前台应用程序的开发两个方面,一方面要求建立起数据一致性和完善性强、数据安全性好的数据库;另一方面则要求应用程序具有功能完备,易使用等特点。
原来的图书管理处理中心进行信息管理主要是基于手工处理,信息处理工作量大,容易出错,缺乏系统、规范的信息管理手段。现在准备建立的图书管理系统,要对图书馆的图书管理、读书借阅等日常管理工作实行计算机统一管理,以提高工作效率和管理水平。
图书馆作为提供学习的场所,不仅要求便于管理,而且要求给读者和借阅者提供方便快速的查找、借阅和登记手续。
图书馆需要统一图书的管理,对各类书籍的借阅情况和图书馆现有藏书的数量、种类要及时掌握,这就要求它具有很强的时效性。既要减少旧书和大量内容重复的图书占用有限的空间而又尽量做到图书种类的齐全,作为图书馆的管理人员需要及时地对图书进行上架和注销处理。
2.2功能设计
本图书馆管理信息系统的功能由登录界面和主窗体界面两部分的功能组成。其中主窗体界面的功能由系统管理、图书管理、用户管理等模块组成。具体如下: (1)主界面设计
首页设计应该清晰简单、美观大方,同时还要做到信息充足,突出图书馆的特点和操作的入口。 (2)系统管理
在系统设置中可以对借阅设置、图书借阅时限设置、类别设置、图书借阅数量设置。 (3)用户管理
只有登录后的用户才可以对图书进行管理,登录人员姓名/密码组合来进行验证。 (4)图书管理
对图书增加、删除、修改、注销、遗失等事件的处理。以便管理员对图书的信息直观而且有效的进行处理。
3. 数据库设计
3.1数据库分析
本系统利用Visual Studio 2008处理数据库的功能,实现对图书馆信息的管理。
4
河南理工大学《C#程序设计》实训报告
主要功能为管理有关用户、管理员、书籍和借阅的信息等。
本系统的结构分为用户信息管理模块、书籍信息管理模块、借阅信息管理模块、管理者管理信息模块和查询处理模块。
图书馆管理系统框图如图2.1所示 进入图书馆管理系统 管理员 用户 失败
登录 查询图书 借阅图书
成功 图书管理
查询图书 增加图书 修改图书 删除图书
图2.1 图书馆管理系统框图 3.2系统的E-R模型
该图书管理系统的E-R模型,如图2.2所示 BookID UID BookName BookType UName 图书管理 1 管理员 BookAuthor m UPwd 图书 BookPricem 借阅 N 用户 UState BookPic BookContent UBookID BookIssue IssID BookID IssBookID IssDateTime
5
河南理工大学《C#程序设计》实训报告
2.2 系统的E-R模型
3.3创建数据表
创建数据库后,为BookManage数据库添加数据表,步骤如下。
(1)在服务器资源管理器中右击数据库BookManage下的“表”文件夹在弹出
的快捷菜单中执行“新建表”命令。
(2)添加表的字段和其他详细资料。各表数据结构如下表所示。 表3-1用户信息(userinfo) 列 名 含 义 数据类型 说明 UID 用户ID int 自动,主键 UName 用户名 vchar(50) 不为空 UPwd 密码 vchar(50) 不为空 UState 用户权限,管理员=1,普通int 不为空,默认值用户=2 为2 UBookID 借阅证号 bigint 可以为空
表3-2图书信息(bookinfo) 列 名 含 义 数据类型 主 键 BookID 图书ID bigint 自动,主键 BookName 图书名称 Varchar(50) 不为空 BookType 类别 Varchar(100) 不为空 BookAuthor 作者 Varchar(100) 不为空 BookPrice 价格 smallmoney 不为空 BookPic 封面 Varchar(200) 允许为空 BookContent 内容简介 text 不为空 BookIssue 图书制定访问码 Varchar(50) 不为空
表3-3借阅信息(issueinfo) 列 名 含 义 数据类型 说明 IssID 借阅ID bigint 自动,主键 BookID 图书ID bigint 外键 IssBookID 借阅证号 bigint 不为空 IssDateTime 借书日期 datetime 不为空
3.4 数据库中表的关系
在数据库中新建BookManage数据库的数据库关系图如图2.4所示
6
河南理工大学《C#程序设计》实训报告
图 2.4 数据库关系图
4.系统实现
4.1登陆界面
4.1.1登陆界面编码
using System;
using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;
using System.Data.OleDb;
7
河南理工大学《C#程序设计》实训报告
namespace LibraryMIS {
public class Login : System.Windows.Forms.Form {
private System.Windows.Forms.Button btClose; private System.Windows.Forms.Button btAdd; private System.Windows.Forms.TextBox password; private System.Windows.Forms.TextBox name; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label1;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.RadioButton radioPerson; private System.Windows.Forms.RadioButton radioManage;
private System.ComponentModel.Container components = null; private OleDbConnection oleConnection1 = null;
public Login() {
InitializeComponent(); this.oleConnection1 = new
OleDbConnection(LibraryMIS.database.dbConnection.connection);
}
protected override void Dispose( bool disposing ) {
if( disposing ) {
if (components != null) {
components.Dispose(); } }
base.Dispose( disposing ); }
8
河南理工大学《C#程序设计》实训报告
static void Main() {
Application.Run(new main()); }
private void btAdd_Click(object sender, System.EventArgs e) {
if(name.Text.Trim()==\"\"||password.Text.Trim()==\"\") MessageBox.Show(\"请输入用户名和密码\",\"提示\"); else {
oleConnection1.Open();
OleDbCommand cmd=new OleDbCommand(\"\",oleConnection1); if (radioManage.Checked==true) {
string sql=\"select * from manager where
MName='\"+name.Text.Trim()+\"' and MCode='\"+password.Text.Trim()+\"'\"; cmd.CommandText=sql;
if (null!=cmd.ExecuteScalar()) {
this.Visible=false; main main=new main(); main.Tag=this.FindForm(); OleDbDataReader dr; cmd.CommandText=sql; dr=cmd.ExecuteReader(); dr.Read();
main.menuItem1.Visible=(bool)(dr.GetValue(2)); main.menuItem2.Visible=(bool)(dr.GetValue(2)); main.menuItem3.Visible=(bool)(dr.GetValue(2)); main.menuItem5.Visible=(bool)(dr.GetValue(4));
main.menuItem4.Visible=(bool)(dr.GetValue(3)); main.menuItem5.Visible=(bool)(dr.GetValue(4));
main.statusBarPanel2.Text=name.Text.Trim(); main.statusBarPanel6.Text=\"管理员\";
main.ShowDialog(); } else
9
河南理工大学《C#程序设计》实训报告
MessageBox.Show(\"用户名或密码错误\",\"警告\");
}
else if (radioPerson.Checked==true) {
string sql=\"select * from person where
PID='\"+name.Text.Trim()+\"' and PCode='\"+password.Text.Trim()+\"'\"; cmd.CommandText=sql;
if (null!=cmd.ExecuteScalar()) {
this.Visible=false; main main=new main(); main.Tag=this.FindForm(); OleDbDataReader dr; cmd.CommandText=sql; dr=cmd.ExecuteReader(); dr.Read();
main.menuItem1.Visible=(bool)(dr.GetValue(9)); main.menuItem2.Visible=(bool)(dr.GetValue(9)); main.menuItem3.Visible=(bool)(dr.GetValue(9)); main.menuItem4.Visible=(bool)(dr.GetValue(9));
main.statusBarPanel2.Text=name.Text.Trim(); main.statusBarPanel6.Text=\"读者\";
main.ShowDialog(); } else
MessageBox.Show(\"用户名或密码错ª误\",\"警告\"); } else
MessageBox.Show(\"没有选择角色\",\"提示\"); oleConnection1.Close(); } }
private void btClose_Click(object sender, System.EventArgs e) {
this.Close(); }
private void Login_Load(object sender, EventArgs e)
10
河南理工大学《C#程序设计》实训报告
{
} } }
4.2应用程序主界面
4.3图书查询操作 4.3.1图书查询设计
在主界面中选择【查询管理】|【图书查询】命令菜单,即可进入查询图书界面,如图所示。
11
河南理工大学《C#程序设计》实训报告
在该界面上共有三个查询条件:图书编号、图书名和作者。单击【查询】按钮,根据查询条件得出的图书信息将显示在DataGrid控件中,并且计算出该图书目前在库中的数量。
该窗体中设计了3个TextBox控件、2个Button控件和1个DataGrid控件。
4.3.2图书查询代码 using System;
using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;
using System.Data.OleDb;
namespace LibraryMIS {
public BookQuery() {
12
河南理工大学《C#程序设计》实训报告
InitializeComponent(); this.oleConnection1 = new
OleDbConnection(LibraryMIS.database.dbConnection.connection);
}
protected override void Dispose( bool disposing ) {
if( disposing ) {
if(components != null) {
components.Dispose(); } }
base.Dispose( disposing ); }
private void btQuery_Click(object sender, System.EventArgs e) {
string sql1 = \"(BNum-(select count(*) from bookOut where \";
string sql = \"select BID as “图书编号”BName as 图书名,BWriter as 作者,BPublish as 出版社,BDatete as 出版日期,BPrice as 价格,BNum as 数量,type as 类型,BRemark as 备注\";
if (textID.Text.Trim() != \"\") {
sql1 = sql1+\" BID= \"+\"'\"+textID.Text.Trim()+\"')) as 库存数量\";
sql = sql+sql1+\"from book where BID= \"+\"'\"+textID.Text.Trim()+\"'\"; }
else if (textName.Text.Trim() != \"\") {
sql1 = sql1+\" BID=(select BID from book where BName='\"+textName.Text+\"'))) as 库存数量\"; sql = sql+sql1+\"from book where BName= \"+\"'\"+textName.Text+\"'\"; }
else if (textWriter.Text.Trim() != \"\") {
sql1 = sql1+\" BID=(select BID from book where BWriter='\"+textWriter.Text+\"'))) as 库存数量 \";
sql = sql+sql1+\"from book where BWriter=
13
河南理工大学《C#程序设计》实训报告
\"+\"'\"+textWriter.Text+\"'\"; } else {
MessageBox.Show(\"请输入查询条件\",\"提示\"); return; }
oleConnection1.Open();
OleDbDataAdapter adp = new OleDbDataAdapter(sql,oleConnection1); DataSet ds = new DataSet(); ds.Clear();
adp.Fill(ds,\"book\");
dataGrid1.DataSource=ds.Tables[0].DefaultView;
dataGrid1.CaptionText=\"共有\"+ds.Tables[0].Rows.Count+\"条查询记录\";
oleConnection1.Close(); }
private void btClear_Click(object sender, System.EventArgs e) {
textID.Text=\"\"; textName.Text=\"\"; textWriter.Text=\"\"; }
private void btClose_Click(object sender, System.EventArgs e) {
this.Close(); }
}
}
4.4借阅查询操作
4.4.1借阅查询设计
选择【查询管理】|【借阅管理】命令菜单,即可进入查询借阅界面,显示当前登录用户的个人信息和已借图书信息,如图所示。
14
河南理工大学《C#程序设计》实训报告
该窗体中设计了3个DataGrid控件,其中一个控件用来传递数据,不显示。
4.4.2借阅查询编码
using System;
using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;
using System.Data.OleDb;
namespace LibraryMIS {
public class PersonQuery : System.Windows.Forms.Form {
private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.DataGrid dataGrid2; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.DataGrid dataGrid1;
15
河南理工大学《C#程序设计》实训报告
private System.ComponentModel.Container components = null; private System.Windows.Forms.DataGrid dataGrid3; private OleDbConnection oleConnection1 = null;
public PersonQuery() {
InitializeComponent(); this.oleConnection1 = new
oleDbConnection(LibraryMIS.database.dbConnection.connection);
protected override void Dispose( bool disposing ) {
if( disposing ) {
if(components != null) {
components.Dispose(); } }
base.Dispose( disposing ); }
DataSet ds;
private void PersonQuery_Load(object sender, System.EventArgs e) {
oleConnection1.Open();
string sql1 = \"select PName as 姓名,PSex as 性别,PN as 身份证,PMoney as 罚款,identity as 身¦份 from person where PID='\"+this.Tag.ToString().Trim()+\"'\";
string sql3 = \"select BID from bookOut where PID = '\"+this.Tag.ToString().Trim()+\"'\";
OleDbDataAdapter adp = new OleDbDataAdapter(sql1,oleConnection1); OleDbDataAdapter adp3 = new OleDbDataAdapter(sql3,oleConnection1); ds = new DataSet(); ds.Clear();
adp.Fill(ds,\"person\"); adp3.Fill(ds,\"bookid\");
dataGrid2.DataSource = ds.Tables[\"person\"].DefaultView;
16
河南理工大学《C#程序设计》实训报告
dataGrid2.CaptionText = \"共有\"+ds.Tables[\"person\"].Rows.Count+\"条记录\";
dataGrid3.DataSource = ds.Tables[\"bookid\"].DefaultView; for (int x=0;x 名,BWriter as 作者,BPublish as 出版社,BDate as 出版日期,BPrice as 价格,type as 类型,ODate as 借书日期,(select longTime from identityinfo where identity=(select identity from person where PID='\"+this.Tag.ToString().Trim()+\"')) as 最长借书时间,dateAdd('m',最长借书¦时间,ODate) as 应还日期 from book,bookOut where book.BID = bookOut.BID and book.BID = '\"+ds.Tables[\"bookid\"].Rows[x][0]+\"\" and PID='\"+this.Tag.ToString().Trim()+\"'\"; OleDbDataAdapter adp2 = new OleDbDataAdapter(sql2,oleConnection1); adp2.Fill(ds,\"bookout\"); dataGrid1.DataSource = ds.Tables[\"bookout\"].DefaultView; dataGrid1.CaptionText = \"已借图书\"+ds.Tables[\"bookout\"].Rows.Count+\"本\"; } oleConnection1.Close(); } } } 4.5 用户管理 4.5.1用户管理设计 在主界面中选择【用户管理】|【修改密码】命令菜单,即可进入修改密码界面,如图所示: 17 河南理工大学《C#程序设计》实训报告 单击【确定】按钮,如果密码正确并且新密码和确认密码相同,则显示修改成功,否则修改失败。 在该窗体中设计了4个TextBox控件和2个Button 控件。 4.5.2用户管理编码 using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data.OleDb; namespace LibraryMIS { /// /// ModifyCode 的Ì?摘a要°a说¦Ì明¡Â。¡ê /// public class ModifyCode : System.Windows.Forms.Form { private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox textPWDNew; private System.Windows.Forms.TextBox textPWDNew2; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox textPWD; private System.Windows.Forms.TextBox textName; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label1; private System.Windows.Forms.Button btClose; 18 河南理工大学《C#程序设计》实训报告 private System.Windows.Forms.Button btSave; private System.ComponentModel.Container components = null; public System.Windows.Forms.Label label5; private OleDbConnection oleConnection1 = null; public ModifyCode() { InitializeComponent(); this.oleConnection1 = new OleDbConnection(LibraryMIS.database.dbConnection.connection); } protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } private void btSave_Click(object sender, System.EventArgs e) { if (textName.Text.Trim()==\"\"||textPWD.Text.Trim()==\"\"||textPWDNew.Text.Trim()==\"\"||textPWDNew2.Text.Trim()==\"\") MessageBox.Show(\"请填写完整信息!\",\"提示\"); else { oleConnection1.Open(); OleDbCommand cmd = new OleDbCommand(\"\",oleConnection1); string sql1 = \"select * from person where PID='\"+textName.Text.Trim()+\"' and PCode='\"+textPWD.Text.Trim()+\"'\"; string sql2 = \"select * from manager where MName='\"+textName.Text.Trim()+\"' and MCode='\"+textPWD.Text.Trim()+\"'\"; if (label5.Text == \"管理员\") cmd.CommandText = sql2; else 19 河南理工大学《C#程序设计》实训报告 cmd.CommandText = sql1; if (null!=cmd.ExecuteScalar()) { if (textPWDNew.Text.Trim()!=textPWDNew2.Text.Trim()) MessageBox.Show(\"两次密码输入不致!\",\"警告\"); else { sql1 = \"update person set PCode='\"+textPWDNew.Text.Trim()+\"' where PID='\"+textName.Text.Trim()+\"'\"; sql2 = \"update manager set MCode='\"+textPWDNew.Text.Trim()+\"' where MName='\"+textName.Text.Trim()+\"'\"; if (label5.Text == \"管理员\") cmd.CommandText = sql2; else cmd.CommandText = sql1; cmd.ExecuteNonQuery(); MessageBox.Show(\"密码修改成功!\",\"提示\"); this.Close(); } } else MessageBox.Show(\"密码错误!\",\"提示\"); oleConnection1.Close(); } } private void btClose_Click(object sender, System.EventArgs e) { this.Close(); } private void ModifyCode_Load(object sender, System.EventArgs e) { textName.Text = this.Tag.ToString().Trim(); } } } 5.总结 为期两周的课程设计结束了,在老师和同学的帮助下,我基本完成系统的设计。 20 河南理工大学《C#程序设计》实训报告 我按照系统工程软件设计的要求,从需求分析,概念设计,总体设计,详细设计,系统测试等各个步骤,分步完成系统的各项任务,实现了系统中的查询管理和用户管理等模块的功能。 在这短短的五天里我收获如下: 1、巩固和加深了对C#的理解,提高综合运用本课程所学知识的能力。 2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。 3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。 根据我在课程设计中遇到的问题,我将在以后的学习当中注意以下几点: 1、认真上好专业实验课,多在实践中锻炼自己。 2、写程序的过程中要考虑周到,严密。 3、在做设计的时候要有信心,有耐心,切勿浮躁。 4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。 5、在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。 6.参考文献 [1] 黄光奇,李子木.WEB数据库互连技术开发指南[M].北京:国防工业出版社,2000. [2] 刘立军.学生信息管理系统的研究与开发[J].江苏泰州:泰州职业技术学院学报,2005. [3] 李金山.学生信息管理系统的设计[J].太原:科技情报开发与经济,2005:(14):132. [4] 王珊,萨师煊.数据库系统概论[M].第四版. 北京:高等教育出版社,2006-05 [5] 王小科,梁冰,吕双. C#全能速查宝典[M].北京:人民邮电出版社,2009-11 [6] 林邦杰.深入浅出 C#程序设计[M].北京:中国铁道出版社,2005.3 [7] 周靖 John Sharp Visual C# 2005从入门到精选。北京:清华大学 刘培文 耿小芬 SQL Server2000 数据库原理及应用教程 北京:科海 [8] 薛华成 管理信息系统(第5版) 清华大学出版社 (2007-08出版) 21 因篇幅问题不能全部显示,请点此查看更多更全内容