《图书管理系统毕业设计》
课题名称 统
图书管理系
专 业
络
计算机网
班 级
0701
学 号
20079203106
学生姓名 指导教师 完成日期
2010.04.08
内 容 摘 要.............................................................................................................. 5 第一章 引言.............................................................................................................. 7 1.1、系统的意义 ................................................................................. 7 1.2、系统的特点 ................................................................................. 8 1.3、系统设计环境 ............................................................................. 8 第二章.系统需求分析 ........................................................................................... 8 2.1系统设计的目标 ............................................................................ 8 图书馆信息管理员在对图书管理和学生借还书籍的过程中达到操作简单、方便而又有安全保障。 2.2.功能需求: .................................. 8 2.2.1管理员: ......................................................................... 8 2.2.2学生(读者): ............................................................... 9 2.3系统界面要求: .......................................................................... 10 2.4安全性可靠性: .......................................................................... 10 2.5系统的运行要求: ...................................................................... 10 2.6性能需求 ...................................................................................... 10 2.7异常处理要求: .......................................................................... 10
2.8扩展:........................................................................................... 11 第三章.系统设计 ................................................................................................. 12 3.1数据库设计 .................................................................................. 12 3.1.1功能模块划分: ................................................................. 12 3.1.2基本数据流程图: ............................................................. 13 3.1.3图书管理系统E-R图 ......................................................... 15 3.1.4实体关系模型 ..................................................................... 18 3.1.5逻辑结构设计 ..................................................................... 18 3.2系统功能设计 .............................................................................. 21 3.2.1核心功能函数设计思想 ..................................................... 21 3.2.2程序中总的类视图如下: ................................................. 23 第四章.系统实现 ................................................................................................. 24 4.1登录功能 ...................................................................................... 24 4.2管理员功能 .................................................................................. 28 4.2.1新书登记 ............................................................................. 29 4.2.2图书信息查询 ..................................................................... 32 4.2.3借阅证信息查询 ................................................................. 34 4.2.4借阅证挂失 ......................................................................... 37 4.2.5添加管理员用户 ................................................................. 38 4.2.6修改密码 ............................................................................. 40 4.3学生功能 ...................................................................................... 42 4.3.1 借书/还书 ........................................................................... 42
4.3.2书籍挂失 ............................................................................. 46 4.3.3借书信息查询 ..................................................................... 49 4.3.4办理借阅证 ......................................................................... 52 第五章 各功能模块的设计与实现 ..................................................................... 56 5.1系统的详细设计 .......................................................................... 56 5.2 系统的设计与实现 ..................................................................... 58 5.2.1 系统的主界面的设计与实现 ............................................ 58 5.2.2 图书管理模块的设计与实现 ............................................ 63 5.2.3 读者管理模块的设计与实现 ............................................ 68 5.2.4图书借阅管理模块的设计与实现 ..................................... 73 5.2.5系统管理模块的设计与实现 ............................................. 75 第六章.系统测试与维护 ..................................................................................... 78 6.1系统的测试 .................................................................................. 78 6.2 系统的维护 ................................................................................. 79 设计总结 .................................................................................................................. 81 参 考 文 献............................................................................................................ 82
内 容 摘 要
图书管理系统是典型的信息管理系统。图书管理工作繁琐,借阅频繁,包含大量的信息数据,因此就需要一个完善的图书管理系统来实现对这些数据的有效管理。本系统的主要任务就是对图书、读者、借阅信息、查询进行统一管理,满足各类用户的需求。
其开发主要包括后台数据库的建立和维护以及前端的应用程序的开发两个方面。对于前者要求建立数据的一致性和完整性,对于后者则要求应用程序功能的完备,易用等特点。
基于上述考虑本系统主要利用Visual Basic作前端的应用开发工具,利用Access作为 后台的数据库,充分利用了Visual Basic和Access的优点,利
用WINDOWS_XP作为系统平台,使系统更加完善。
关键词:图书 读者 系统 管理
Abstract
In the library management system with computer management books is a computer application technology innovation, not on the computer before the popularity of management books are books of account management manual approach to the operation. Libraries are now generally used as a tool for computer The practical procedures for the management of computer books to help librarians more effective management of the book.
Book Management System is a typical management information system (MIS), including the development of its background of the establishment and maintenance of the database front-end applications, as well as the development of both. The former set up the
requirements for data integrity and consistency of strong data security a good library. For the latter applications require full-featured and easy to use and so on.
第一章 引言
1.1、系统的意义
随着人们知识层次的提高,图书馆成为日常生活中不可缺少的一部分。而图书馆的存书量和业务量庞大,仅仅靠传统的记账式管理是不可行的。图书管理系统应运而生,逐渐成为信息化建设的重要组成部分。图书管理系统为学校或社会型图书馆的管理员提供所有借阅者的详细信息,以及图书馆内库存的详细情况,而学生或普通用户则拥有借书和还书两大功能,管理员可以对其进行合理的操纵并登记。作
为计算机应用的一部分,使用数据库对图书信息进行管理,具有着手工管理所无法比拟的优点,例如:检索迅速、查找方便、易修改、可靠性高、存储量大、数据处理快捷、保密性好、寿命长、成本低、便于打印等。
1.2、系统的特点
系统界面简易,功能操作方便合理的图书管理系统。
1.3、系统设计环境
以VC为开发平台,Micrsoft SQL Server 2005为后台数据库。
第二章.系统需求分析
2.1系统设计的目标
图书馆信息管理员在对图书管理和学生借还书籍的过程中达到操作简单、方便而又有安全保障。
2.2.功能需求:
2.2.1管理员:
1、图书基本信息管理:
图书入库/出库时,更新图书信息表;
添加,删除,查询,修改图书信息;
统计图书库存/借出数量;
书籍挂失处理,超期罚款金额信息处理;
2、借阅证信息管理:
借阅证信息记录、查询;
借阅证读者注册信息处理、借阅证挂失处理;
3、管理员信息管理:
管理员信息查询,修改,添加,删除;
密码修改;
2.2.2学生(读者):
1、读者信息管理:
读者基本信息的修改、添加、删除; 密码修改;
2、借书/还书管理:
借书信息的输入、查询、更新; 图书信息的查询; 还书时对借阅表的更新; 超期罚款金额的计算,记录;
3、借阅证信息管理: 办理借阅证、借阅证挂失;
2.3系统界面要求:
用户和管理员在系统可视化界面输入信息,触发消息相应函数,系统向用户或管理员显示输出数据库的查询、删除、添加等可视化结果;
2.4安全性可靠性:
使用DOBS进行数据源配置,因为Visual C++提供了MFC ODBC类,所以利用MFC来创建ODBC的应用程序非常简单,具有较强的灵活性。通过ODBC API 很容易访问数据库,而且有比较友好的用户界面,只需简单配置就可以使用,安全性也从根本得到了保障!
2.5系统的运行要求:
硬件方面,支持普遍计算机配置,使用SQL Server2005作为数据库,VC++6.0作为开发语言;通信接口:ODBC API。
软件方面,运行于Windows9X及更高版本具有WIN32API的操作系统上。
2.6性能需求
数据精确度:查询时应保证查全率,所有相应域包含查询关键字的记录都应能查到
时间特性:一般操作的响应时间应在1-2秒内,对相应服务响应时间也应在可接受的时间内完成
适应性:有良好的适应性,可在Windows各版本移植。
2.7异常处理要求:
定义数据边界,防止数据越界或资源故障导致的不正常情况。当操作数据库时发生异常,抛出CDBException异常,具有较好的健壮性。
2.8扩展:
当系统须完善提升功能时,通过系统接口,对于功能的扩展和改进具有可行性。
(3)系统功能分析
通过对现行图书馆的业务进行调查,明确了图书馆工作由图书管理、读者管理、借书服务和还书服务4部分组成。
图书管理:所有的图书按类别统一编号;对各类图书要建图书登记卡,卡上记录图书的主要信息;新购的书要编码和建卡,对丢失的图书要销毁其图书登记卡。
读者管理:建立读者信息表,对读者统一编号。对新加盟的读者,将其信息加入到读者信息表中;对某些特定的读者,将其信息从读者信息表中删除;当读者情况变化时,修改读者信息表中相应的记录。
借书服务:未借出的图书要按类别上架,供读者查看;建立借书登记卡,卡上记录着书号、读者姓名和编号、借书日期;将借书登记卡按读者单位、读者编号集中保管;读者提出借书请求时,先查看该读者的借书卡,统计该读者已借书数量;如果该读者无借书超期或超量情况,则办理借书手续;办理借书手续的方法是,先填写借书登记卡,管理员核实后可将书借出。
还书服务:读者提出还书要求时,先对照相应的借书卡,确认书号和书名无误后可办理还书手续。办理还书手续的方法是,在借书卡上填写还书时间,管理员签字,将已还的借书卡集中保管,收回图书;将收回的图书上架,供读者查看和借阅。
(4)概念结构设计 (给出E-R图)
第三章.系统设计
3.1数据库设计
3.1.1功能模块划分:
通过对图书管理系统的功能分析,可以定义出系统的功能模块,如下图所示,定义的功能模块包括以下几方面:
图书管理系统管理员学生/读者书库管理借阅证管理系统管理身份验证借阅证信息管理借书/还书管理读者信息管理新书登记图书信息查询书籍挂失处理办理借阅证借阅证信息查询借阅证挂失处理添加账号修改密码退出办理借阅证借书/还书借书信息查询图书信息查询书籍挂失读者信息修改修改密码借阅证挂失
3.1.2基本数据流程图:
登录界面登录失败1选择管理员(1)或学生登录(0)0登录失败管理员用户验证登录成功错误超过五次错误超过五次学生用户验证登录成功书库管理借阅证管理系统管理退出系统借阅证信息管理借书还书管理读者信息管理
3.1.3图书管理系统E-R图
借书编号借阅卡编号书籍编号借出时间1借书信息表参照1参照1借阅卡信息表1参照1罚单信息表1参照nm图书信息表罚单编号借出日期还书日期借阅卡编号罚款金额
出版社价格图书总量现存总量图书信息表图书编号入库时间图书名称作者住址身份证号码电话号码现借书总数借阅卡信息表借阅卡号读者姓名性别出生日期管理员信息表学生/读者信息表管理员编号姓名密码读者号姓名密码
3.1.4实体关系模型
借阅卡信息表:借阅卡号,姓名,性别,出生日期,家庭住址,身份
证号码,电话,现借书总数;
图书信息表:图书编号,图书名称,作者,出版社,价格,入库时间,
图书总量,现存总量;
读者/学生信息表:读者号,姓名,密码 管理员信息表:管理员编号,姓名,密码
罚金信息表:罚金号,借阅卡号,图书号,借出时间,返还时间,罚
金
借书信息表:借书号,借阅卡号,图书号,借书日期
3.1.5逻辑结构设计
建库:
新建数据库命名为Library,采用Windows身份验证方式连接数据库。 建表:
管理员信息表Admin_Info :
(姓名)User_Name nvarchar(50) Unchecked 主键
(密码)Password nvarchar(50) Unchecked (管理员编号)WorkID float Unchecked
读者/学生信息表Students_Info:
(读者号)UserID bigint Unchecked 主键 (姓名)User_Name nvarchar(24) Unchecked (密码)Password nvarchar(24) Unchecked
图书信息表 Book_Info:
(图书编号)Book_ID nvarchar(50) Unchecked 主键 (图书名称)Book_Name nvarchar(50) Unchecked (作者) Writer nvarchar(50) Unchecked (出版社) Press nvarchar(50) Unchecked (价格) Price float Unchecked
(入库时间) InLibrary_Date smalldatetime Unchecked (图书总量) Total_Amount int Unchecked (现存总量) Now_Amount int Unchecked
借阅卡信息表 Proof_Info:
(借阅卡号)Proof_ID nvarchar(50) Unchecked 主键 (姓名) Name nvarchar(50) Unchecked (性别) Sex nvarchar(50) Unchecked (出生日期) Birth_Time smalldatetime Unchecked (住址 ) Address nvarchar(50) Unchecked (身份证号码) ID_Number nvarchar(50) Unchecked (电话号码) Tel_Number nvarchar(50) Unchecked (现借书总数) Now_Borrow_Amount int Unchecked
借书信息表 Borrow_Info:
(借书号)BorrowID int Unchecked 主键
(借阅卡号)Proof_ID nvarchar(50) Unchecked 外键 (图书号) Book_ID nvarchar(50) Unchecked 外键 (借书日期) Borrow_Date smalldatetime Unchecked
罚金信息表 Punish_Info:
(罚金号)Puni_ID int Unchecked 主键
(借阅卡号)Proof_ID nvarchar(50) Unchecked 外键 (图书号) Book_ID nvarchar(50) Unchecked 外键 (借书日期) Borrow_Date smalldatetime Unchecked (还书日期) Return_Date smalldatetime Unchecked (罚金金额) Puni_Money float Unchecked
3.2系统功能设计
3.2.1核心功能函数设计思想
系统与数据库通过ODBC建立连接(其中数据源的名称为Library)。 登录模块: CLogin 登入 CLibraryDlg 管理员登入 studentsLogin 学生/读者登入 管理员模块:
CNewBooksDlg 新书登记 OnButtonIn()//入库
OnButtonCheckAll()//显示全部书籍
OnButtonCheckBooks()//图书信息查询 CBookInfoDlg 显示书籍信息 CCheckBooksDlg 图书信息查询 CBookLostDlg 书籍挂失 OnButtonLost()//书籍挂失函数 CProofLostDlg 借阅证挂失 OnButtonLost()//借阅证挂失函数 CCheckProofDlg 借阅证信息查询 CAddUserDlg 添加用户 CChangePasswordDlg 修改密码
学生模块:
CBorrowDlg 借书/还书 CCheckBooksDlg 图书信息查询 OnButtonOk() //借书函数 OnButtonReturn()//还书函数 OnbuttonReset()//重置函数 CCheckBorrowDlg 查询借书信息 CBookLostDlg 书籍挂失 CNewProofDlg 办理借阅证 CChangePasswordDlg 修改密码
3.2.2程序中总的类视图如下:
第四章.系统实现
4.1登录功能
初始登录:
void CLogin::OnAdmin() {
// TODO: Add your control notification handler code here CDialog::OnOK();
CLibraryDlg LoginDlg; LoginDlg.DoModal(); }
void CLogin::Onstudents() {
CDialog::OnOK(); studentsLogin dlg; dlg.DoModal();
// TODO: Add your control notification handler code here }
管理员登录:
void CLibraryDlg::OnOK() {
// TODO: Add extra validation here
UpdateData();
if(m_strUsername.IsEmpty()) {
MessageBox(\"Please input your username!\登\
m_strUsername.Empty(); UpdateData(FALSE); return; }
if(!m_database.IsOpen()) {
录系统 //连接数据源
if(!m_database.Open(_T(\"Library\"))) {
MessageBox(\"连接数据库失败!\图书管理系统\
return; } }
CLoginSet *m_pLogset=new CLoginSet(&m_database);
//编写SQL语句 CString strSQL;
strSQL.Format(\"select * from Admin_Info where User_Name='%s' AND Password='%s'\
//编写SQL语句结束
m_pLogset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_pLogset->GetRecordCount()==0) {
if(count<5) {
MessageBox(\"登录失败!\图书管理系统\
count++;
m_strPassword.Empty(); m_strUsername.Empty(); UpdateData(FALSE); } else {
m_database.Close();
MessageBox(\"您登录失败超过5次,请与管理员联系!\图书管理系统\");
OnOK(); } } else {
m_database.Close(); //*b_Login = 0;
CLibDBSDlg dlg; dlg.DoModal(); CDialog::OnOK(); } }
学生登录与管理员登录类似,只是改成作用在表Students_Info。 初始进入界面如下图:
选择“管理员登录”,在调试时使用默认账号进行测试,账号为111062,密码15,在程序中设为默认值,如有需要可以手动输入,运行如图:
点击登录,进入管理员运行界面:
选择“学生登录”,默认用户名为123,密码123,如图:
点击登录,进入学生管理界面:
4.2管理员功能
4.2.1新书登记
void CNewBooksDlg::OnButtonIn() {
// TODO: Add your control notification handler code here UpdateData();
if(m_strBookID.Compare(\"\")==0) {
MessageBox(\"请正确填写要求的数据\新书入库登记\"); return; }
if(!m_database.IsOpen()) {
if(!m_database.Open(_T(\"Library\"))) {
MessageBox(\"Cannot access database!\新书登记\"); return; } }
CBookSet *m_pset=new CBookSet(&m_database); //判断书库中是否有该书,进行相应操作 //有,把数量加到库中 CString strSQL;
strSQL.Format(\"select * from Book_Info where Book_ID='%s'\
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pset->GetRecordCount()!=0) {
m_pset->Edit();
m_pset->m_Total_Amount=m_pset->m_Total_Amount+m_lTotal; m_pset->m_Now_Amount=m_pset->m_Now_Amount+m_lNow; m_pset->Update(); m_pset->Requery(); m_pset->Close(); m_database.Close();
MessageBox(\"Adding new books successfully!\新书入库登记\"); OnButtonCheckBooks(); return;
}
m_pset->Close();
if(m_strBookID==\"\"||m_strBookName==\"\"||m_strWriter==\"\" ||m_strPress==\"\"||m_dPrice==0||m_lTotal==0 ||m_lNow==0) {
MessageBox(\"请正确填写要求的数据!\新书登记入库\"); m_database.Close(); return; }
strSQL.Format(\"select * from Book_Info\");
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); //if(m_pset->GetRecordCount()==0) //{
//MessageBox(\"There are not any book information!\新书登记\"); //}
m_pset->AddNew();
m_pset->SetFieldNull(&(m_pset->m_Book_ID),FALSE); m_pset->m_Book_ID=m_strBookID;
m_pset->SetFieldNull(&(m_pset->m_Book_Name),FALSE); m_pset->m_Book_Name=m_strBookName;
m_pset->SetFieldNull(&(m_pset->m_Writer),FALSE); m_pset->m_Writer=m_strWriter;
m_pset->SetFieldNull(&(m_pset->m_Press),FALSE); m_pset->m_Press=m_strPress;
m_pset->SetFieldNull(&(m_pset->m_Price),FALSE); m_pset->m_Price=m_dPrice;
m_pset->SetFieldNull(&(m_pset->m_Total_Amount),FALSE); m_pset->m_Total_Amount=m_lTotal;
m_pset->SetFieldNull(&(m_pset->m_Now_Amount),FALSE); m_pset->m_Now_Amount=m_lNow;
CTime curTime=CTime::GetCurrentTime();
m_pset->SetFieldNull(&(m_pset->m_InLibrary_Date),FALSE); m_pset->m_InLibrary_Date=curTime; m_pset->Update();
m_pset->Requery();
m_pset->Close(); m_database.Close();
MessageBox(\"Adding new books successfully!\新书入库登记\");
OnButtonCheckBooks();
m_strBookID.Empty(); m_strBookName.Empty(); m_strPress.Empty(); m_strWriter.Empty(); m_lNow=0; m_lTotal=0; m_dPrice=0.0;
UpdateData(FALSE); return; }
选择管理员登录,进入新书登记,出现新书登记界面,如图:
4.2.2图书信息查询
void CCheckBooksDlg::OnButtonCheck() {
// TODO: Add your control notification handler code here UpdateData();
if(!m_database.IsOpen()) {
if(!m_database.Open(_T(\"Library\"))) {
MessageBox(\"Cannot access the database!\图书查询\"); return; } }
CBookSet *m_pset=new CBookSet(&m_database);
CString strSQL;
strSQL.Format(\"select * from Book_Info where Book_ID='%s'\
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pset->GetRecordCount()==0) {
MessageBox(\"本馆没有这本书!\图书查询\"); m_database.Close(); return; }
//处理表格
m_ctrList.DeleteAllItems(); m_pset->MoveFirst(); char buf[50];
CDBVariant varValue; int i=0;
CString strBookName,strWriter,strPress; while(!m_pset->IsEOF()) {
m_ctrList.InsertItem(i,buf);
m_ctrList.SetItemText(i,0,m_strBookID); m_pset->GetFieldValue(1,strBookName); m_ctrList.SetItemText(i,1,strBookName); m_pset->GetFieldValue(2,strWriter); m_ctrList.SetItemText(i,2,strWriter); m_pset->GetFieldValue(3,strPress); m_ctrList.SetItemText(i,3,strPress); m_pset->GetFieldValue(4,varValue); sprintf(buf,\"%.2f\ m_ctrList.SetItemText(i,4,buf);
m_pset->GetFieldValue(5,varValue);
sprintf(buf,\"%d-%d-%d\h,
varValue.m_pdate->day); m_ctrList.SetItemText(i,5,buf);
m_pset->GetFieldValue(6,varValue); sprintf(buf,\"%d\ m_ctrList.SetItemText(i,6,buf);
m_pset->GetFieldValue(7,varValue); sprintf(buf,\"%d\
m_ctrList.SetItemText(i,7,buf); i++;
m_pset->MoveNext(); UpdateData(FALSE); }
m_pset->Close(); m_database.Close(); }
点击查询图书信息,如图:
4.2.3借阅证信息查询
void CCheckProofDlg::OnButtonCheckProof() {
// TODO: Add your control notification handler code here UpdateData();
if(m_strProofID==\"\") {
MessageBox(\"请填写借阅证号码!\借阅证查询\"); return; }
if(!m_database.IsOpen()) {
if(!m_database.Open(_T(\"Library\"))) {
MessageBox(\"不能打开数据库!\借阅证查询\"); return; } }
CProofSet *m_pset=new CProofSet(&m_database); CString strSQL;
strSQL.Format(\"select * from Proof_Info where Proof_ID='%s'\
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pset->GetRecordCount()==0) {
MessageBox(\"数据库中没有这个人的信息\借阅证查询\"); m_pset->Close(); m_database.Close(); m_strProofID.Empty(); UpdateData(FALSE); return; }
//读取信息,并将信息显示在控件上 m_ctrList.DeleteAllItems(); m_pset->MoveFirst(); CDBVariant varValue; char buf[50]; int i=0;
CString strTemp;
while(!m_pset->IsEOF()) {
int temp=0;
m_ctrList.InsertItem(i,buf);
m_pset->GetFieldValue(temp,strTemp); m_ctrList.SetItemText(i,temp,strTemp);
m_pset->GetFieldValue(1,strTemp); m_ctrList.SetItemText(i,1,strTemp);
m_pset->GetFieldValue(2,strTemp); m_ctrList.SetItemText(i,2,strTemp);
m_pset->GetFieldValue(3,varValue);
h,
sprintf(buf,\"%d-%d-%d\ } }
varValue.m_pdate->day); m_ctrList.SetItemText(i,3,buf); m_pset->GetFieldValue(4,strTemp); m_ctrList.SetItemText(i,4,strTemp); m_pset->GetFieldValue(5,strTemp); m_ctrList.SetItemText(i,5,strTemp); m_pset->GetFieldValue(6,strTemp); m_ctrList.SetItemText(i,6,strTemp); m_pset->GetFieldValue(7,varValue); sprintf(buf,\"%d\m_ctrList.SetItemText(i,7,buf); i++;
m_pset->MoveNext();
4.2.4借阅证挂失
void CProofLostDlg::OnButtonLost() {
// TODO: Add your control notification handler code here UpdateData();
if(m_strProofID==\"\") {
MessageBox(\"请填写借阅证号码!\"); return; }
if(!m_database.IsOpen()) {
if(!m_database.Open(_T(\"Library\"))) {
MessageBox(\"不能打开数据库\借阅证挂失\"); return; } }
CProofSet *m_pset=new CProofSet(&m_database); CString strSQL;
strSQL.Format(\"select * from Proof_Info where Proof_ID='%s'\
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pset->GetRecordCount()==0) {
MessageBox(\"数据库中没有该人的信息\借阅证挂失\"); m_pset->Close(); m_database.Close(); return; }
//挂失,删除该借阅证的记录信息 m_pset->Delete(); m_pset->Close(); m_database.Close(); int iResult;
iResult=MessageBox(\"挂失成功,是否查阅,进行确认\借阅证挂失\
if(iResult==IDYES) {
CCheckProofDlg m_dlg;
m_dlg.m_strProofID=m_strProofID; m_dlg.DoModal(); } }
为借阅证号为0006的学生挂失:
点击“是”,进入查阅界面:
4.2.5添加管理员用户
void CAddUserDlg::OnOK()
{
// TODO: Add extra validation here
// CDialog::OnOK();
this->UpdateData(TRUE);
if(m_strUser.Compare(\"\")==0||m_strPassword.Compare(\"\")==0) {
MessageBox(\"请正确填写所需数据\增加用户\"); return; }
if(!m_database.IsOpen()) {
if(!m_database.Open(_T(\"Library\"))) {
MessageBox(\"数据库打开出错!\图书信息!\"); OnOK(); return ; } }
CString strSQL; long num;
CUserSet *m_pset=new CUserSet(&m_database);
strSQL.Format(\"select * from Admin_Info\");
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); num = m_pset->GetRecordCount();
m_pset->AddNew();
m_pset->SetFieldNull(&(m_pset->m_User_Name),FALSE); m_pset->m_User_Name=m_strUser;
m_pset->SetFieldNull(&(m_pset->m_Password),FALSE); m_pset->m_Password=m_strPassword;
m_pset->SetFieldNull(&(m_pset->m_WorkID),FALSE); m_pset->m_WorkID=num+2;
m_pset->Update(); m_pset->Requery();
m_pset->Close(); m_database.Close();
MessageBox(\"添加帐号成功!\添加帐号\"); }
4.2.6修改密码
void CChangePasswordDlg::OnButtonOk() {
// TODO: Add your control notification handler code here UpdateData();
if(m_strUserName.IsEmpty()) {
MessageBox(\"请输入用户名!\登录系统\
m_strUserName.Empty(); UpdateData(FALSE); return; }
if(!m_database.IsOpen()) {
//连接数据源
if(!m_database.Open(_T(\"Library\"))) {
MessageBox(\"连接数据库失败!\图书管理系统\
return; } }
if(m_strPassword_new1 != m_strPassword_new2)
{
MessageBox(\"两次密码不同!\确认密码\
m_strPassword_old.Empty(); m_strUserName.Empty();
m_strPassword_new1.Empty(); m_strPassword_new2.Empty(); UpdateData(FALSE); return; }
CLoginSet *m_pLogset=new CLoginSet(&m_database);
//编写SQL语句 CString strSQL;
strSQL.Format(\"select * from Admin_Info where User_Name='%s' AND Password='%s'\
//编写SQL语句结束
m_pLogset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_pLogset->GetRecordCount()==0) {
MessageBox(\"登录失败!\图书管理系统\
m_strPassword_old.Empty(); m_strUserName.Empty();
m_strPassword_new1.Empty(); m_strPassword_new2.Empty(); UpdateData(FALSE); } else {
m_pLogset->Edit();
m_pLogset->m_Password = m_strPassword_new2; m_pLogset->Update(); m_pLogset->Requery();
MessageBox(\"修改成功!\修改密码\
m_strPassword_old.Empty();
} }
m_strUserName.Empty();
m_strPassword_new1.Empty(); m_strPassword_new2.Empty(); UpdateData(FALSE); m_database.Close(); return;
4.3学生功能
4.3.1 借书/还书
只列出了借书的函数,还书函数OnButtonReturn() 与借书函数类似。 void CBorrowDlg::OnButtonOk() {
// TODO: Add your control notification handler code here UpdateData();
if(m_strProofID==\"\"||m_strBookID==\"\") {
MessageBox(\"输入的域不完整,请重新输入!\借书管理\
m_strProofID.Empty();
m_strBookID.Empty(); UpdateData(FALSE); return; }
if(!m_database.IsOpen()) {
if(!m_database.Open(_T(\"Library\"))) {
MessageBox(\"Cannot access the database!\借书管理\"); return; } }
CString strSQL;
//判断借书人是否有资格
strSQL.Format(\"select * from Proof_Info where Proof_ID='%s'\m_strProofID);
CProofSet *m_pProof=new CProofSet(&m_database);
m_pProof->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pProof->GetRecordCount()==0) {
MessageBox(\"数据库中没有这个人的信息\借书/还书\
m_pProof->Close(); m_database.Close(); return; }
CDBVariant varValue;
m_pProof->GetFieldValue(7,varValue); if(varValue.m_iVal==5) {
//如果不满足条件
MessageBox(\"你不能借书超过5本!\借书/还书\
m_pProof->Close(); m_database.Close(); return; }
//满足条件 //借书量加一
m_pProof->Edit();
m_pProof->m_Now_Borrow_Amount++; m_pProof->Update(); m_pProof->Requery(); m_pProof->Close();
//Book_Info表中,现存数量减一 strSQL.Format(\"select * from Book_Info where Book_ID='%s'\
CBookSet *m_pBook=new CBookSet(&m_database);
m_pBook->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pBook->GetRecordCount()==0) {
MessageBox(\"对不起,图书馆现在没有这本书!\借书/还书\
m_pBook->Close(); m_database.Close(); return; }
m_pBook->Edit();
m_pBook->m_Now_Amount--; m_pBook->Update(); m_pBook->Requery(); m_pBook->Close();
//将借书信息存入借书信息表中
strSQL.Format(\"select * from Borrow_Info\");
CBorrowSet *m_pBorrow=new CBorrowSet(&m_database); m_pBorrow->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pBorrow->GetRecordCount()==0) {
MessageBox(\"数据库中没有借书信息!\借书/还书\
}
m_pBorrow->AddNew();
m_pBorrow->SetFieldNull(&(m_pBorrow->m_Proof_ID),FALSE); m_pBorrow->m_Proof_ID=m_strProofID;
m_pBorrow->SetFieldNull(&(m_pBorrow->m_Book_ID),FALSE); m_pBorrow->m_Book_ID=m_strBookID;
CTime curTime=CTime::GetCurrentTime();
m_pBorrow->SetFieldNull(&(m_pBorrow->m_Borrow_Date),FALSE); m_pBorrow->m_Borrow_Date=curTime;
// m_pBorrow->m_BorrowID=m_pBorrow->GetRecordCount();
m_pBorrow->Update(); m_pBorrow->Requery(); m_pBorrow->Close(); m_database.Close();
MessageBox(\"借书成功!\借书/还书\
RefreshData(); } 选择学生登录,选择借书/还书登录:
为借阅证号为0001,图书号为10001,的学生还书运行如图:
4.3.2书籍挂失
void CBookLostDlg::OnButtonLost() {
// TODO: Add your control notification handler code here
UpdateData();
if(m_strBookID.Compare(\"\")==0||m_strProofID.Compare(\"\")==0) {
MessageBox(\"请正确填写所需数据\图书挂失\"); return; }
if(!m_database.IsOpen()) {
if(!m_database.Open(_T(\"Library\"))) {
MessageBox(\"Canot connect to the data source!\图书挂失\"); return; } }
double m_dblPunish=0.0; CString strSQL;
CTime curTime,oriTime;
//察看借书(Borrow_Info表)信息,看是否超期
CBorrowSet *m_pBorrow=new CBorrowSet(&m_database);
strSQL.Format(\"select * from Borrow_Info where Proof_ID='%s' AND Book_ID='%s'\
m_pBorrow->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pBorrow->GetRecordCount()==0) {
MessageBox(\"没有关于这个人借这本书的信息!\图书挂失\"); m_pBorrow->Close(); m_database.Close(); return; }
int m_yeardiff,m_monthdiff,m_daydiff,m_timediff; oriTime=m_pBorrow->m_Borrow_Date; curTime=CTime::GetCurrentTime();
m_yeardiff=curTime.GetYear()-oriTime.GetYear();
m_monthdiff=curTime.GetMonth()-oriTime.GetMonth();
m_daydiff=curTime.GetDay()-oriTime.GetDay();
m_timediff=m_yeardiff*365+m_monthdiff*30+m_daydiff; //超期,予以罚款
if(m_timediff>=60) {
//60天为超时限制时间,一天缴纳罚款0.1元 m_dblPunish=m_dblPunish+(m_timediff-60)*0.1; }
//无论是否超期,首先进行还书操作,然后处以丢书罚款 //Borrow_Info删除该条记录 m_pBorrow->Delete(); m_pBorrow->Close();
//Proof_Info减少借书数量
CProofSet *m_pProof=new CProofSet(&m_database); strSQL.Format(\"select * from Proof_Info where Proof_ID='%s'\
m_pProof->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_pProof->GetRecordCount()==0) {
MessageBox(\"读取借书人信息出错,将进行回退,请与馆主联系!\图书挂失\");
//回退,这里不进行 m_pProof->Close(); m_database.Close(); return; }
m_pProof->Edit();
m_pProof->m_Now_Borrow_Amount--; m_pProof->Update(); m_pProof->Requery(); m_pProof->Close();
//查询书籍信息,书库藏书总量减一 strSQL.Format(\"select * from Book_Info where Book_ID='%s'\
CBookSet *m_pBook=new CBookSet(&m_database);
m_pBook->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pBook->GetRecordCount()==0) {
MessageBox(\"查询书籍信息出错,将进行回退,请与馆主联系!\图书挂失\");
m_pBook->Close(); m_database.Close(); }
m_pBook->Edit();
m_pBook->m_Total_Amount--; m_pBook->Update(); m_pBook->Requery();
//查询价格信息,计算罚款金额 double m_dPrice=0.0;
m_dPrice=m_pBook->m_Price; m_dblPunish+=m_dPrice*3; m_pBook->Close();
//将罚款信息存入罚款信息表中
strSQL.Format(\"select * from Punish_Info\");
CPunishSet *m_pset=new CPunishSet(&m_database);
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pset->GetRecordCount()==0) {
MessageBox(\"目前还没有任何罚款信息!\图书挂失\"); }
m_pset->AddNew();
m_pset->SetFieldNull(&(m_pset->m_Proof_ID),FALSE); m_pset->m_Proof_ID=m_strProofID;
m_pset->SetFieldNull(&(m_pset->m_Book_ID),FALSE); m_pset->m_Book_ID=m_strBookID;
m_pset->SetFieldNull(&(m_pset->m_Borrow_Date),FALSE); m_pset->m_Borrow_Date=oriTime;
m_pset->SetFieldNull(&(m_pset->m_Return_Date),FALSE); m_pset->m_Return_Date=curTime;
m_pset->SetFieldNull(&(m_pset->m_Puni_Money),FALSE); //if(m_dblPunish == 0) m_dblPunish +=1; m_pset->m_Puni_Money=m_dblPunish;
m_pset->m_Puni_ID=m_pset->GetRecordCount()+1;
}
m_pset->Update(); m_pset->Requery();
m_pset->Close(); m_database.Close();
MessageBox(\"挂失成功\图书挂失\");
点击返回,选择书籍挂失,出现书籍挂失界面,为借阅证号为0002书号为10001的学生挂失,运行如图:
4.3.3借书信息查询
void CCheckBorrowDlg::OnButtonRequery() {
//刷新显示 UpdateData();
if(!m_database.IsOpen()) {
if(!m_database.Open(_T(\"Library\"))) {
MessageBox(\"Cannot open database!\借书查询\"); return; } }
CString strSQL,m_strName,m_strBName,m_strBookNo,m_strSex; char buf[50];
CDBVariant varValue; //处理借阅证信息
CProofSet *m_pProof=new CProofSet(&m_database); strSQL.Format(\"select * from Proof_Info where Proof_ID='%s'\
m_pProof->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pProof->GetRecordCount()==0) {
MessageBox(\"数据库中没有这个人!\借书查询\"); m_pProof->Close(); m_database.Close(); return; }
CString strTemp;
m_pProof->GetFieldValue(1,strTemp); m_strName=strTemp;
m_pProof->GetFieldValue(2,strTemp); m_strSex=strTemp; m_pProof->Close();
//处理表格
strSQL.Format(\"select * from Borrow_Info where Proof_ID='%s'\
CBorrowSet *m_pBorrow=new CBorrowSet(&m_database); m_pBorrow->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pBorrow->GetRecordCount()==0) {
MessageBox(\"没有该人的借书信息!\借书查询\
m_pBorrow->Close(); m_database.Close(); return; }
m_ctrList.DeleteAllItems();
m_pBorrow->MoveFirst(); int i=0;
CBookSet *m_pBook=new CBookSet(&m_database);
while(!m_pBorrow->IsEOF()) {
m_ctrList.InsertItem(i,buf);
m_ctrList.SetItemText(i,0,m_strProofID);
m_ctrList.SetItemText(i,1,m_strName); m_ctrList.SetItemText(i,2,m_strSex); m_pBorrow->GetFieldValue(2,strTemp); m_strBookNo=strTemp;
m_ctrList.SetItemText(i,3,m_strBookNo); m_pBorrow->GetFieldValue(3,varValue);
sprintf(buf,\"%d-%d-%d %d:%d:%d\alue.m_pdate->year, varValue.m_pdate->month,varValue.m_pdate->day, varValue.m_pdate->hour,varValue.m_pdate->minute, varValue.m_pdate->second); m_ctrList.SetItemText(i,5,buf);
strSQL.Format(\"select * from Book_Info where Book_ID='%s'\
m_pBook->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); m_pBook->GetFieldValue(1,strTemp); m_ctrList.SetItemText(i,4,strTemp); m_pBook->Close(); i++;
m_pBorrow->MoveNext(); }
m_pBorrow->Close(); m_database.Close(); } 点击查询图书信息,如图:
4.3.4办理借阅证
void CNewProofDlg::OnButtonOk() {
// TODO: Add your control notification handler code here UpdateData();
if(m_strProofID==\"\") {
MessageBox(\"请认真填写要求的数据!\办理借阅证\"); return; }
if(!m_database.IsOpen()) {
if(!m_database.Open(_T(\"Library\"))) {
MessageBox(\"不能打开数据库\办理借阅证\"); return; } }
CProofSet *m_pset=new CProofSet(&m_database);
//察看是否已经有该人,有将不予办理!
CString strSQL;
strSQL.Format(\"select * from Proof_Info where Proof_ID='%s'\
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pset->GetRecordCount()!=0) {
MessageBox(\"这个号码数据库中已经存在,请查询后重新选择!\办理借阅证\");
m_pset->Close(); m_database.Close();
m_strProofID.Empty(); UpdateData(FALSE); return; }
m_pset->Close();
//没有这个号码,办理借阅证,存入数据库
if(m_strProofID==\"\"||m_strName==\"\"||m_strAddress==\"\" ||m_strID==\"\"||m_strTel==\"\") {
MessageBox(\"请认真填写要求的数据!\办理借阅证\"); return; }
m_iSex=GetCheckedRadioButton(IDC_RADIO_MALE,IDC_RADIO_FEMALE);
if(m_iSex==IDC_RADIO_MALE) m_strSex=\"Male\";
else if(m_iSex==IDC_RADIO_FEMALE) m_strSex=\"Female\"; else {
MessageBox(\"请选择性别信息!\办理借阅证\"); return; }
CString m_strYear,m_strMonth,m_strDay; int m_year,m_month,m_day;
m_comYear.GetWindowText(m_strYear); m_year=atoi(m_strYear);
m_comMonth.GetWindowText(m_strMonth); m_month=atoi(m_strMonth);
m_comDay.GetWindowText(m_strDay);
m_day=atoi(m_strDay);
strSQL.Format(\"select * from Proof_Info\");
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pset->GetRecordCount()==0) {
MessageBox(\"数据库中还没有一份借阅证信息,将办理第一份借阅证\办理借阅证\");
}
m_pset->AddNew();
m_pset->SetFieldNull(&(m_pset->m_Proof_ID),FALSE); m_pset->m_Proof_ID=m_strProofID;
m_pset->SetFieldNull(&(m_pset->m_Name),FALSE); m_pset->m_Name=m_strName;
m_pset->SetFieldNull(&(m_pset->m_Sex),FALSE); m_pset->m_Sex=m_strSex;
CTime m_strBirthTime(m_year,m_month,m_day,10,5,6,-1); m_pset->SetFieldNull(&(m_pset->m_Birth_Time),FALSE); m_pset->m_Birth_Time=m_strBirthTime;
m_pset->SetFieldNull(&(m_pset->m_Address),FALSE); m_pset->m_Address=m_strAddress;
m_pset->SetFieldNull(&(m_pset->m_ID_Number),FALSE); m_pset->m_ID_Number=m_strID;
m_pset->SetFieldNull(&(m_pset->m_Tel_Number),FALSE); m_pset->m_Tel_Number=m_strTel;
m_pset->SetFieldNull(&(m_pset->m_Now_Borrow_Amount),FALSE); m_pset->m_Now_Borrow_Amount=0;
m_pset->Update(); m_pset->Requery();
m_pset->Close(); m_database.Close();
MessageBox(\"办理借阅证成功!\办理借阅证\"); CPersonInfoDlg m_dlg;
m_dlg.m_strProofID=m_strProofID; m_dlg.DoModal(); }
第五章 各功能模块的设计与实现
5.1系统的详细设计
1.读者类别表
2.读者信息表:
3. 借阅信息表:
4. 书籍信息表:
5.图书类别表:
6.系统管理表:
5.2 系统的设计与实现
5.2.1 系统的主界面的设计与实现
主界面代码:
Private Sub add_admin_Click() frmadduser.Show End Sub
Private Sub add_back_book_Click() frmbackbookinfo.Show End Sub
Private Sub add_book_info_Click() frmaddbookinfo.Show End Sub
Private Sub add_book_style_Click() frmaddbookstyle.Show End Sub
Private Sub add_lend_book_Click()
frmfindbook.Show End Sub
Private Sub add_reader_info_Click() frmaddreaderinfo.Show End Sub
Private Sub add_reader_style_Click() frmaddreaderstyle.Show End Sub
Private Sub change_pwd_Click() frmchangepwd.Show End Sub
Private Sub del_book_info_Click() frmmodifybookinfo.Show End Sub
Private Sub del_book_style_Click() frmmodifybookstyle.Show End Sub
Private Sub del_reader_info_Click() frmreaderinfo.Show End Sub
Private Sub del_reader_style_Click() frmmodifyreaderstyle.Show End Sub
Private Sub exit_sys_Click() End End Sub
Private Sub find_book_info_Click() frmfindbook.Show End Sub
Private Sub find_lend_book_Click() frmfindborrowinfo.Show End Sub
Private Sub find_reader_info_Click() frmfindreader.Show End Sub
Private Sub modify_book_info_Click() frmmodifybookinfo.Show End Sub
Private Sub modify_book_style_Click() frmmodifybookstyle.Show End Sub
Private Sub modify_reader_info_Click() frmreaderinfo.Show
End Sub
Private Sub modify_reader_style_Click() frmmodifyreaderstyle.Show End Sub
5.2.2 图书管理模块的设计与实现
图书管理模块主要由:图书类别管理,图书信息管理. 图书类别管理又分别由以下几个界面构成: 1. 添加图书类别
添加图书类别代码:
Private Sub Command1_Click()
Dim rs_bookstyle As New ADODB.Recordset Dim sql As String
If Trim(Text1.Text) = \"\" Then
MsgBox \"图书种类不能为空\ Text1.SetFocus Exit Sub End If
If Trim(Text2.Text) = \"\" Then
MsgBox \"种类编号不能为空\ Text2.SetFocus Exit Sub End If
sql = \"select * from 图书类别 where 类别名称='\" & Text1.Text & \"'\" rs_bookstyle.Open sql, conn, adOpenKeyset, adLockPessimistic If rs_bookstyle.EOF Then rs_bookstyle.AddNew
rs_bookstyle.Fields(0) = Trim(Text1.Text) rs_bookstyle.Fields(1) = Trim(Text2.Text) rs_bookstyle.Update
MsgBox \"添加图书类别成功!\ rs_bookstyle.Close Else
MsgBox \"读者类别重复!\ Text1.SetFocus Text1.Text = \"\" rs_bookstyle.Close Exit Sub End If End Sub
2. 修改图书类别:
修改图书类别代码: Private Sub Form_Load() Dim sql As String On Error GoTo loaderror sql = \"select * from 图书类别\" rs_reader.CursorLocation = adUseClient
rs_reader.Open sql, conn, adOpenKeyset, adLockPessimistic '打开数据库
cmdupdate.Enabled = False '设定datagrid控件属性
DataGrid1.AllowAddNew = False '不可增加
DataGrid1.AllowDelete = False '不可删除
DataGrid1.AllowUpdate = False
If userpow = \"guest\" Then '权限相关
Frame2.Enabled = False End If
Set DataGrid1.DataSource = rs_reader Exit Sub loaderror:
MsgBox Err.Description
End Sub
5.2.3 读者管理模块的设计与实现
1.添加读者类别界面:
Private Sub Command1_Click() Dim sql As String
If Trim(Text1.Text) = \"\" Then
MsgBox \"读者种类不能为空\ Text1.SetFocus Exit Sub End If
If Trim(Text2.Text) = \"\" Then
MsgBox \"借书数量不能为空\ Text2.SetFocus Exit Sub End If
If Trim(Text3.Text) = \"\" Then
MsgBox \"借书期限不能为空\ Text3.SetFocus Exit Sub End If
If Trim(Text4.Text) = \"\" Then
MsgBox \"有限期限不能为空\ Text4.SetFocus Exit Sub End If
sql = \"select * from 读者类别 where 种类名称='\" & Text1.Text & \"'\" rs_readerstyle.Open sql, conn, adOpenKeyset, adLockPessimistic If rs_readerstyle.EOF Then rs_readerstyle.AddNew
rs_readerstyle.Fields(0) = Trim(Text1.Text) rs_readerstyle.Fields(1) = CInt(Text2.Text) rs_readerstyle.Fields(2) = CInt(Text3.Text) rs_readerstyle.Fields(3) = CInt(Text4.Text) rs_readerstyle.Update
MsgBox \"添加读者类别成功!\ rs_readerstyle.Close Else
MsgBox \"读者类别重复!\ Text1.SetFocus Text1.Text = \"\" rs_readerstyle.Close Exit Sub End If End Sub
3. 查询读者信息
代码分析:
Private Sub Command1_Click()
Dim rs_findreader As New ADODB.Recordset Dim sql As String
If Check1.Value = vbChecked Then
sql = \"读者编号='\" & Trim(Text1.Text & \" \") & \"'\" End If
If Check2.Value = vbChecked Then If Trim(sql) = \"\" Then
sql = \"读者姓名='\" & Trim(Text2.Text & \" \") & \"'\"
Else
sql = sql & \"and 读者姓名='\" & Trim(Text2.Text & \" \") & \"'\" End If End If
If Check3.Value = vbChecked Then If Trim(sql) = \"\" Then
sql = \"读者类别='\" & Trim(Combo1.Text & \" \") & \"'\" Else
sql = sql & \"and 读者类别='\" & Trim(Combo1.Text & \" \") & \"'\" End If End If
sql = \"select * from 读者信息 where \" & sql rs_findreader.CursorLocation = adUseClient
rs_findreader.Open sql, conn, adOpenKeyset, adLockPessimistic DataGrid1.AllowAddNew = False DataGrid1.AllowDelete = False DataGrid1.AllowUpdate = False
Set DataGrid1.DataSource = rs_findreader 'rs_findreader.Close
End Sub
5.2.4图书借阅管理模块的设计与实现
代码实现:
Private Sub Command1_Click() Dim sql As String
Dim rs_find As New ADODB.Recordset If Option1.Value = True Then
sql = \"select * from 书籍信息 where 是否被借出='是'\" End If
If Option2.Value = True Then
sql = \"select * from 书籍信息 where 是否被借出='否'\" End If
If Option3.Value = True Then
sql = \"select * from 借阅信息 where 读者姓名='\" & Text1.Text & \"'\" End If
rs_find.CursorLocation = adUseClient
rs_find.Open sql, conn, adOpenKeyset, adLockPessimistic DataGrid1.AllowAddNew = False DataGrid1.AllowDelete = False DataGrid1.AllowUpdate = False Set DataGrid1.DataSource = rs_find End Sub
5.2.5系统管理模块的设计与实现
Private Sub Command1_Click() Dim sql As String
Dim rs_add As New ADODB.Recordset If Trim(Text1.Text) = \"\" Then
MsgBox \"用户名不能为空\ Exit Sub Text1.SetFocus Else
sql = \"select * from 系统管理\"
rs_add.Open sql, conn, adOpenKeyset, adLockPessimistic While (rs_add.EOF = False)
If Trim(rs_add.Fields(0)) = Trim(Text1.Text) Then
MsgBox \"已有这个用户\ Text1.SetFocus Text1.Text = \"\" Text2.Text = \"\" Text3.Text = \"\" Combo1.Text = \"\" Exit Sub Else
rs_add.MoveNext End If Wend
If Trim(Text2.Text) <> Trim(Text3.Text) Then
MsgBox \"两次密码不一致\ Text2.SetFocus Text2.Text = \"\" Text3.Text = \"\" Exit Sub
ElseIf Trim(Combo1.Text) <> \"system\" And Trim(Combo1.Text) <> \"guest\" Then MsgBox \"请选择正确的用户权限\
Combo1.SetFocus Combo1.Text = \"\" Exit Sub Else
rs_add.AddNew
rs_add.Fields(0) = Text1.Text rs_add.Fields(1) = Text2.Text rs_add.Fields(2) = Combo1.Text rs_add.Update rs_add.Close
MsgBox \"添加用户成功\ Unload Me End If End If End Sub
第六章.系统测试与维护
6.1系统的测试
本系统采用VB编程工具,Access数据库,因此本系统运行需要的软件环境比较平常,易于操作。 (一)系统测试
系统测试:采用人工测试方法进行系统的测试,先从程序调试开始,因为软件的设计需要编出很多的代码,其错误的频率相当的高,如果没有错误,则进行子系统的测试,子系统是各个模块的分支,通过测试之后,再与模块相连接,看总体的设计是否合理。刚开始测试时不必按真实情况下的数据量进行,可以采用一些精心设计的数据量作为测试用例,这样不仅可以使处理工作量大大减少,而且更容易发现错误和确定错误所在范围。 对测试对象的功能测试应侧重于所有可直接追踪到用例或业务功能的测试需求。这种测试的目标是核实数据的接受、处理和检索是否正确。此类测试基于黑盒技术,该技术通过图形用户界面 (GUI)与应用程序进行交互,并对交互的输出或结果进行分析,以此来核实应用程序及其内部进程。下边主要采用黑箱测试法来对系统部分模块进行测试。 1.还书功能测试(黑箱测试法): 测试用例
【输 入】借过书的读者编号和被借出已经过期了的图书 图5-1还书界面
【期望输出】不能正常还书
【实际输出】确定之后
图5-2还书界面 2.借书功能测试(黑箱测试法): 测试用例1
【输入】读者借书,输入读者编号 借书界面
【期望输出】正常借书
【实际输出】此人有图书到期,已列入黑名单,不能借书。 借书登记 测试用例2 【输入】继续借书 借书登记
【期望输出】正常借书
【实际输出】达到一定借书数量,不能再借书了。
6.2 系统的维护
系统的维护是系统生存的重要条件,在系统整个生命周期中,三分之二以上的经费用在系统维护上,从人力资源的分布看,现代世界上90%的软件人员在从事系统的维护工作,开发新系统的人员仅占10%,这些统计数据表明系统维护任务是十分繁重的。 1.维护的内容:
程序的维护:在编程中有许多没有被发现的错误,在系统运营过程中,还
要对程序不但更新,以确保系统能够正常工作;
数据文件的维护:对于有关系统的数据库,其他文件,图片进行维护,定时不定时对数据进行备份。
代码的维护:在编程过程中,代码的书写要整齐,规范,可能当时能够运行,但是还是要对其规范化。
机器、设备的维护:即硬件的维护,对于版本的更新,以及软件的升级的维护工作。 2.维护类型:
更正性维护,适应性维护,完善性维护,预防性维护。
设计总结
我们的毕业设计是图书管理系统,我主要负责的模块是读者管理和借阅管理,还有相关界面设计及系统设计。这部分是图书管理最基本的模块,通过这次毕业设计,使我更大程度上了解了管理信息系统的功能,提高了实践能力。是对所学知识的一次综合应用,系统还有以下部分有待完善: (1)数据库安全性还有待加强。
(2)系统的图书分类还可以更规范化一些,使读者也能够查阅到更多图书信息。
(3)图书管理还可以添加一些期刊,杂志的管理。使图书馆管理工作更全面化,科学化。
系统还应考虑一些实际情况,对一些损坏的图书的处理功能,淘汰书目等。对特定读者的约束还应加强其严密性。通过这次的毕业设计,我学到了很多的东西,不仅使我的知识面有所扩充,对于图书馆业务流程也熟悉了,而且也很好的应用了系统设计相关的软件。在实践中能够及时的发现问题、解决问题。同时也阅读了大量相关书籍,提高了动手制作能力,也提高了团队协作的效率,为以后的工作打下了很好的基础。 最后,衷心感谢各位老师的悉心指导和帮助我的同学们!
参 考 文 献
[1] 王珊 陈红. 数据库系统原理教程. 清华大学出版社.
[2] 萨师煊. 数据库系统概论(第三版). 高等教育出版社.
[3] 王虎. 张俊管理信息系统 . 武汉理工大学出版社.
[4] 邝孔武. 管理信息系统分析与设计. 西安电子科技大学出版社.Http://www.xduph.com
[5] 《刍议数据库技术的最新发展》.微电脑世界.2004年第三期,\"信息时代\"
[6] Visual Basic 编程标准. (美)JAMES D.FOXALL著. 王建华等译. 机械工业出版社.
[7] 王明亮. 关于中国学术期刊标准化数据库系统工程的进展[EB/OL].第八期11卷.
[8] 李光师.如何在VB 中利用Windows API 调用其它应用程序[J].鞍山师范学院学报,2004年第2期.
[9] 李威,王春燕.VB6.0直接调用外部exe文件的一种方法[J].北京 交通与计算机 ,2000年第4期. [10]
在
VB
中
操
纵
OLE
服
务
http://news.softhouse.com.cn/news/show/14723.html
[11] Steve Brown. Visual Basic 开发指南—Win32 API 篇[M] . 北京:电子工业出版社.
[12] 唐大仕. Visual Basic程序设计[J]. 清华大学.
[13] 丁宝康. 《数据库原理》. 经济科学出版社. [14] 陈戈止. [15] 刘韬等. 社.
. 西南财经大学出版社. Visual Basic6.0数据库系统开发导航》.人民邮电出版
《信息系统与管理》《
因篇幅问题不能全部显示,请点此查看更多更全内容