资源描述
数据库课程设计 网上图书销售系统数据库课程设计上报告.doc
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
数据库系统原理及其应用教程
课程设计报告
题目名称:网上图书销售系统
任课教师:
姓 名:
学 号:
2010年12月30日
目 录
摘 要 3
1 引言 3
2 需求分析 3
2.1 功能需求 3
2。2 数据描述 5
2。3 数据库描述 6
3 概要设计 6
3.1 系统运行环境 6
3.2 系统功能模块设计 7
3.3 系统处理流程 7
3。4 接口设计 8
4 详细设计 8
4。1 登录模块及主界面 9
4.2 图书录入模块 10
4.3 图书销售模块 15
4.4 销售统计模块 20
4.5 查询库存模块 22
5 系统测试 25
6 操作手册 29
7 结论 29
7。1 系统功能 29
7.2 系统不足和改进 29
7.3 总结 30
参考文献 30
评 语 31
摘 要
随着计算机的普及书店规模的不断扩大,使图书销售管理成为书店管理中的一个重要课题。通过图书销售管理系统可以解决书店管理中遇到的各种问题。本系统分析了市场需求和实际需要,利用VC++连接SQL数据库的方式,主要实现了书店的网上图书销售管理,该系统具有处理图书录入、图书销售、销售统计、查询库存等功能.
关键词:图书;销售;库存
1 引言
传统的图书销售管理方法,都是通过人工统计和计算的管理方式进行的。这样的管理方法不但费时费力,也容易产生计算上的错误和疏漏;计算机技术的全面普及,打破了书店管理的传统管理方法,提高了管理效率的同时,克服了传统管理方法中易产生的问题,使管理员能够有序的、全面的对图书销售和库存进行管理。
网上图书销售系统可以完成书店的日常管理,如图书录入、图书销售、销售统计、查询库存等功能,迅速准确地对已售图书和剩余库存进行统计和汇总工作,大大提高了书店的管理效率和准确性.
2 需求分析
2.1 功能需求
2。1.1待开发软件的功能需求
本系统是根据书店的实际需求而开发的,要求稳定、可靠的实现图书销售的自动化管理,通过本系统可以达到以下目标:
1. 图书录入,包括图书的基本信息,如分类、进价、售价、作者等.
2. 图书销售,包括图书的售价、折扣、销售日期,并实现对库存量的修改。
3. 销售统计,包括按图书类型、书名、作者、出版社等进行统计。
4. 查询库存,对指定的某本图书剩余库存量进行查询.
5. 售完图书查询,对已售完图书进行查询。
2。1.2待开发软件的功能
按照用户需求,要满足以上功能,我设计出了图书销售管理系统的系统功能图,如图2.1所示.图书销售管理系统
图书录入
查询库存
图书销售
销售统计
售完图书查询
图2.1 图书销售管理系统的系统功能图
综合系统要求,对图2。1所示的系统功能解释如下:
图书录入,包括图书的基本信息,如分类、进价、售价、作者等。
图书销售,包括图书的售价、折扣、销售日期,并实现对库存量的修改.
销售统计,包括按图书类型、书名、作者、出版社等进行统计。
查询库存,对指定的某本图书剩余库存量进行查询。
售完图书查询,对已售完图书进行查询。
通过以上分析,可以得到仓库管理系统的数据流图,如图2。2所示.
管理员
图书信息
处理
图书管理
反馈信息
图书信息
反馈信息
记录数据
数据库
图2.2图书管理系统的数据流图
2.2 数据描述
2。2。1数据库概要说明
数据库中包括管理员信息表、图书基本信息表、图书类型表、图书销售记录表等4个数据表.
图2.3所示的即为本系统中数据库中的数据表结构图,该数据表结构图包含系统所有数据表.可以清晰地反应数据库信息。
图2。3 数据表结构图
2。2.2主要数据表的结构
表2。1 Pwd(管理员信息表)
字段名
数据类型
字段大小
描述
ID
int
4
管理员帐号
Password
nvarchar
50r
密码
表2。2 BookInfo(图书基本信息表)
字段名
数据类型
字段大小
描述
BookID
int
4
图书编号
BookName
nvarchar
50
图书名称
CategoryID
int
4
图书类型编号
Author
nvarchar
50
作者
Publisher
nvarchar
50
出版社
PublishDate
smalldatetime
4
出版日期
Purchase
float
8
进价
Price
float
8
售价
Stock
int
4
库存本数
Discount
int
4
折扣
BarCode
nvarchar
50
条形码
表2。3 BookCategory(图书类型表)
字段名
数据类型
长度
描述
CategoryID
int
4
图书类型编号
CategoryName
nvarchar
8
图书类型名称
表2。4 BookSale(图书销售记录表)
字段名
数据类型
长度
描述
ID
int
4
销售记录编号
BookID
int
4
图书编号
SalePrice
float
8
实际售价
SaleDate
smalldatetime
4
销售日期
2.3 数据库描述
本软件采用SQL数据库.
3 概要设计
本系统是根据书店的实际需求而开发的,完全能够帮助书店实现高效、准确的图书销售自动化管理。在分析阶段,我们已经提出了系统的结构和数据字典。本节我们将对系统的使用环境作简要介绍,并对该系统作概要设计.
3。1 系统运行环境
PC机
Windows操作系统
Visual C++6。0
3。2 系统功能模块设计
在前面系统功能分析的基础上,结合Visual C++程序编制的特点,得到如图3.1所示的系统功能模块图.
图书销售管理系统
图书录入模块(M2)
查询库存模块(M5)
图书销售模块(M3)
销售统计模块(M4)
售完图书查询模块(M6)
管理员登录模块(M1)
图3.1图书销售管理系统功能模块图
各模块功能分配如下:
(1)用户登陆功能:管理员登陆模块(M1).
(2)图书录入功能:图书录入模块(M2)。
(3)图书销售功能:图书销售模块(M3)。
(4)销售统计功能:销售统计模块(M4)。
(5)查询图书库存功能:查询库存模块(M5)。
(6)售完图书查询功能:售完图书查询模块(M6)。
3.3 系统处理流程
(1)系统启动,进入身份验证.
(2)初始化系统,导入数据库.
(3)录入图书信息.
(4)图书销售。
(5)统计图书销售信息。
(6)查询图书库存信息。
(7)查询已售完图书信息。
(8)退出系统。
3.4 接口设计
3。4。1 外部接口
(1) 用户界面
采用图形用户界面,包含菜单、按钮、对话框等元素。
(2) 软件接口
软件运行于Visual C++6。0平台上。
(3) 硬件接口
运行于PC机上.
3。4.2 内部接口
(1)用户登陆模块(M1):由相应事件驱动消息激活,完成用户登陆功能,之后进入消息循环状态.
(2)图书销售模块(M3):由相应事件驱动消息激活,完成图书销售功能,之后进入消息循环状态。
(3)销售统计模块(M4):由相应事件驱动消息激活,完成销售统计功能,之后进入消息循环状态.
(4)查询库存模块(M5):由相应事件驱动消息激活,完成查询库存功能,之后进入消息循环状态。
(5)售完图书查询模块(M6):由相应事件驱动消息激活,完成售完图书查询功能,之后进入消息循环状态。
4 详细设计
该系统采用VC++6。0中的MFC连接SQL数据库的方式,使用图形用户界面,主要实现图书录入、图书销售等功能。下面具体对各模块进行介绍。
4。1 登录模块及主界面
在登录界面(如图4.1所示)中输入用户名和密码,登录成功后进入主界面。登陆框流程图如图4。2所示,系统主界面如图4.3所示,单击某个按钮就能弹出某个功能的界面。
图4.1 系统登录界面
输入用户名
开始
验证密码是否正确
输入密码
登录成功进入主界面
结束
是
否
选择帐号类型
图4.2登录模块流程图
4.2 图书录入模块
4.2。1 实现目标
添加图书信息,图书录入对话框的设计如图4.4所示。“保存”按钮对应的方法为RAddBookDlg::OnSave(),流程图如图4.5所示.
图4。4 图书录入对话框
开始
结束
输入图书基本信息
判断输入是否正确且完整
添加该信息到关联表并写入数据库
是
否
图4。5 RAddBookDlg::OnSave()方法的流程图
4.2。2 设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_ADDBOOK。在IDD_YGTJK对话框资源中单击鼠标右键,执行弹出快捷菜单的“Properties”菜单命令,打开“Dialog Properties”对话框。在“Dialog Properties"对话框中选择General选项卡,更改其“Caption"文本框内容为“图书信息录入"。
(2)从Controls面板上向Dialog资源中添加所需控件,更改资源的属性,并为资源设置相对应的变量,如表4.1所示。
表4.1 图书录入Dialog资源属性设置
ID
Properties
Member Variables
Type
Member
IDC_BK_CATEGORY
默认
文本
CategoryName
IDC_BK_NAME
默认
文本
BookName
IDC_BK_AUTHOR
默认
文本
Author
IDC_BK_PUBLISHER
默认
文本
Publisher
IDC_BK_DATE
默认
日期/时间
PublishDate
IDC_BK_PURCHASE
默认
数字
Purchase
IDC_BK_PRICE
默认
数字
Price
IDC_BK_PAYOFF
默认
数字
Price
IDC_BK_STOCK
默认
数字
Stock
IDC_BK_BARCODE
默认
文本
BarCode
IDC_BK_DISCOUNT
默认
数字
Discount
IDC_RESET
Caption 重填
IDC_SAVE
Caption 添加
IDCANCEL
Caption 退出
4。2.3 代码分析
(1)打开ClassWizard窗口,添加在OnInitDialog成员函数,向OnInitDialog添加代码如下:
BOOL RAddBookDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
GetBookGategory();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
(2)当用户单击“保存“按钮时,实现添加图书功能,其响应代码如下:
void RAddBookDlg::OnSave()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(!IsValidInput())
return ;
if(IDYES != AfxMessageBox("确定要保存吗?",MB_YESNO)) //放弃保存
return ;
if(SaveData())
{
AfxMessageBox("保存成功!”);
//保存后重置数据
m_bHasNewBook = true;
OnReset();
GetDlgItem(IDC_BK_CATEGORY)—〉SetFocus();
}
else
AfxMessageBox("保存失败!”);
}
(3)判断输入信息是否正确的函数是IsValidInput(),其响应代码如下:
bool RAddBookDlg::IsValidInput()
{
CString str = "0123456789”;
if(m_strBookCategory.IsEmpty() || m_strBookCategory。FindOneOf(str) != -1)
{
AfxMessageBox("输入有误!图书类型不能为空或包含数字.”);
GetDlgItem(IDC_BK_CATEGORY)->SetFocus();
return false;
}
if(m_strBookName。IsEmpty())
{
AfxMessageBox("输入有误!书名不能为空。”);
GetDlgItem(IDC_BK_NAME)->SetFocus();
return false;
}
if(m_strAuthor.IsEmpty() || m_strAuthor。FindOneOf(str) != -1)
{
AfxMessageBox(”输入有误!作者名称不能为空或包含数字。”);
GetDlgItem(IDC_BK_AUTHOR)-〉SetFocus();
return false;
}
if(m_strPublisher。IsEmpty()|| m_strPublisher。FindOneOf(str) != —1)
{
AfxMessageBox("输入有误!出版社名称不能为空或包含数字.”);
GetDlgItem(IDC_BK_PUBLISHER)—>SetFocus();
return false;
}
if(m_dPurchase 〈= 0)
{
AfxMessageBox(”图书进价应为正值!");
GetDlgItem(IDC_BK_PURCHASE)-〉SetFocus();
return false;
}
if(m_dPrice 〈= 0 )
{
AfxMessageBox(”图书售价应为正值!”);
GetDlgItem(IDC_BK_PRICE)—〉SetFocus();
return false;
}
if( m_lDiscount 〈 0 || m_lDiscount 〉 100)
{
AfxMessageBox(”图书折扣应为0—100之间正值!");
GetDlgItem(IDC_BK_DISCOUNT)—>SetFocus();
return false;
}
if(m_lStock <1)
{
AfxMessageBox(”图书数量应为正值!”);
GetDlgItem(IDC_BK_STOCK)-〉SetFocus();
return false;
}
if(m_strBarcode。IsEmpty() || m_strBarcode。GetLength() 〉 15)
{
AfxMessageBox(”条形码应为15位整数!”);
GetDlgItem(IDC_BK_BARCODE)—〉SetFocus();
return false;
}
// AfxMessageBox(m_strBookName + ”\r\n” +
// m_strBookCategory + "\r\n” +
// m_strAuthor + ”\r\n” +
// m_strPublisher + ”\r\n" +
// m_strBarcode );
return true;
}
4。3 图书销售模块
4。3。1 实现目标
实现图书销售功能,图书销售对话框设计如图4.6所示。“销售”按钮对应的方法为RSaleBookDlg::OnOK(),流程图如图4。7所示.
图4.6 图书销售对话框
开始
结束
输入书名或条形码
判断输入是否正确且FindBook()函数返回值为1
添加该信息到关联表并写入数据库
是
否
图4。7 RSaleBookDlg::OnOK()方法的流程图
4。3.2 实现步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_SALEBOOK。在IDD_YGGONGZITJ对话框资源中单击鼠标右键,执行弹出快捷菜单的 “Properties”菜单命令,打开“Dialog Properties”对话框.在“Dialog Properties”对话框中选择General选项卡,更改其“Caption"文本框内容为“图书销售.”
(2)从Controls面板上向Dialog资源中添加相关控件,更改资源的属性,并为资源设置相对应的变量,如表3。2所示:
表4.2 图书销售添加Dialog资源属性设置
ID
Properties
Member Variables
Type
Member
IDC_SBK_NAME
默认
文本
BookName
IDC_SBK_BARCODE
默认
文本
BarCode
IDC_SBK_PRICE
默认
数字
Price
IDC_SBK_SALEPRICE
默认
数字
SalePrice
IDC_SBK_DISCOUNT
默认
数字
Discount
IDC_SBK_DATE
默认
日期/时间
SaleDate
IDOK
Caption 销售
IDCANCEL
Caption 退出
4。3.3 代码分析
(1)为“销售”按钮添加代码,实现图书销售功能,代码如下:
void RSaleBookDlg::OnOK()
{
// TODO: Add extra validation here
if(!m_bReadySale)
m_bReadySale = FindBook();
else
{
UpdateData(TRUE);
CString strMsg;
strMsg.Format("是否出售?\n 书名:%s\n 价格:%。2f”,m_strBookName
,m_dSalePrice);
if(IDYES == AfxMessageBox(strMsg,MB_YESNO))
{
ModifyStock(); //修改图书库存
SaveSaleRecord(); //记录销售记录
}
Init();
UpdateData(FALSE);
GetDlgItem(IDC_SBK_NAME)->SetFocus();
m_editDiscount。EnableWindow(FALSE);
}
//CDialog::OnOK();
}
(2)判断销售是否能够成功的函数是RSaleBookDlg::FindBook(),其代码如下:
bool RSaleBookDlg::FindBook()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString strSql ;
_variant_t var;
double dPurchase;
if(!m_strBookName。IsEmpty())
strSql.Format("SELECT * FROM BookInfo WHERE BookName = \”%s\” and Stock 〉0”, m_strBookName);
else if(!m_strBarCode.IsEmpty())
strSql.Format("SELECT * FROM BookInfo WHERE BarCode = \”%s\" and Stock 〉0”, m_strBarCode);
else
{
AfxMessageBox("请输入书名或条码!”);
GetDlgItem(IDC_SBK_NAME)—>SetFocus();
return false;
}
CRBookSaleApp* pApp = (CRBookSaleApp*)AfxGetApp();
try
{
pApp-〉m_pRecordset—>Open(strSql。AllocSysString(),
pApp—〉m_pConnection。GetInterfacePtr() adLockOptimistic,
adCmdText);
if(pApp—>m_pRecordset—〉adoEOF)
{
AfxMessageBox(”查无此书!请输入书名或条码无误。");
pApp->m_pRecordset->Close();
return false;
}
var = pApp—〉m_pRecordset->GetCollect("BookID");
if(var.vt != NULL)
m_lBookID = var.lVal;
var = pApp->m_pRecordset—〉GetCollect("Discount");
if(var.vt != NULL)
m_lDiscount = var。lVal;
var = pApp—〉m_pRecordset—〉GetCollect(”Price”);
if(var.vt != NULL)
m_dPrice = var。dblVal;
var = pApp-〉m_pRecordset-〉GetCollect("Purchase”);
if(var.vt != NULL)
dPurchase = var。dblVal;
var = pApp—〉m_pRecordset—〉GetCollect("CategoryID”);
if(var。vt != NULL)
m_lCategory = var。lVal;
pApp—〉m_pRecordset—〉Close();
}
catch(_com_error * e)
{
AfxMessageBox(e-〉ErrorMessage());
}
m_editDiscount.EnableWindow(m_dPrice 〉= dPurchase);
m_lDiscount = (m_dPrice 〉= dPurchase) ? m_lDiscount :100; //售价小于进价时,不允许打折
m_dSalePrice = m_dPrice * (double(m_lDiscount)/100); //计算折后价
UpdateData(FALSE);
return true;
}
4.4 销售统计模块
4。4.1 实现目标
实现对已销售的图书进行统计的功能,销售统计对话框如图4。8所示。
图4.8 销售统计对话框
4。4。2 设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_REPORT。在IDD_REPORT对话框资源中单击鼠标右键,执行弹出快捷菜单的“Properties”菜单命令,打开“Dialog Properties”对话框。在“Dialog Properties”对话框中选择General选项卡,更改其“Caption"文本框内容为“销售统计"。
(2)从Controls面板上向Dialog资源中添加相应控件,更改资源的属性,并为资源设置相应的变量,如表4。3所示:
表4。3用户信息管理Dialog资源属性设置
ID
Properties
Member Variables
Type
Member
IDC_RADIO2
默认
单选框
IDC_RADIO3
默认
单选框
IDC_RADIO4
默认
单选框
IDC_RADIO5
默认
单选框
IDC_RADIO6
默认
单选框
IDC_STATIC
默认
单选框
IDOK
Caption 确定
IDCANCEL
Caption 取消
4。4.3 代码分析
查询函数为CRBookSaleView::OnSaleReport(),代码如下:
void CRBookSaleView::OnSaleReport()
{
// TODO: Add your command handler code here
RReportDlg dlg;
dlg.m_iReportType = m_iReportType ;
if(IDOK == dlg.DoModal())
{
m_iReportType = dlg。m_iReportType;
//设置销售报表标题
//前2个标题类型为用户模式和书店管理模式,故此处加2
int iTitleType = 0;
switch(m_iReportType)
{
case 0://图书类型统计
iTitleType = CATEGORY_REPORT_TITLE;
break; case 1://图书名称统计
iTitleType = BOOKNAME_REPORT_TITLE;
break;
case 2://图书作者统计
iTitleType = AUTHOR_REPORT_TITLE;
break;
case 3://出版社统计
iTitleType = PUBLISHER_REPORT_TITLE;
break;
case 4://全部销售记录统计
iTitleType = SALE_REPORT_TITLE;
break;
default:
break;
}
SetTitle(iTitleType);
ShowReport();
}
}
4.5 查询库存模块
4.5。1 实现目标
实现对已销售的图书进行统计的功能,销售统计对话框如图4.9所示。
图4。9 查询库存对话框
4。5。2 设计步骤
(1)向项目中添加一个新Dialog资源,资源ID为IDD_QUERY。在IDD_QUERY对话框资源中单击鼠标右键,执行弹出快捷菜单的“Properties”菜单命令,打开“Dialog Properties”对话框.在“Dialog Properties”对话框中选择General选项卡,更改其“Caption”文本框内容为“查询”.
(2)从Controls面板上向Dialog资源中添加相应控件,更改资源的属性,并为资源设置相应的变量,如表4。4所示:
表4。4库存查询Dialog资源属性设置
ID
Properties
Member Variables
Type
Member
IDC_BOOK_CATEGORY
默认
组合框
IDC_BOOK_NAME
默认
文本
BookName
IDC_BOOK_AUTHOR
默认
文本
Author
IDC_BOOK_PUBLISHER
默认
文本
Publisher
IDOK
Caption 确定
IDCANCEL
Caption 取消
4。5.3 代码分析
(1)“确定”按钮的函数为RQueryDlg::OnOK(),代码如下:
void RQueryDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
//单独处理类型为全部的情况,0表示选择类型为全部
m_ctrlCategory.GetLBText(m_ctrlCategory.GetCurSel(),m_strCategory);
if(m_strCategory == _T("全部"))
m_strCategory = _T("");
CDialog::OnOK();
}
(2)组合框根据图书类型查询的函数为RQueryDlg::GetBookGategory(),代码如下:
void RQueryDlg::GetBookGategory()
{
int num = 0;
CString strSql;
_variant_t var;
m_ctrlCategory。ResetContent(); //清空组合框中原有数据
//生成SQL查询语句,在数据苦中查找图书类型
strSql。Format(SQL_SELECT_CATEGORYNAME);
CRBookSaleApp* pApp = (CRBookSaleApp*)AfxGetApp();
try
{
pApp-〉m_pRecordset—>Open(strSql.AllocSysString(),
pApp—>m_pConnection。GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
//遍历数据库中BookCategory表,获取全部图书类型
while(!(pApp—〉m_pRecordset-〉adoEOF))
{
var = pApp—〉m_pRecordset-〉GetCollect("CategoryName");
if(var。vt != NULL)
m_ctrlCategory。AddString((LPCSTR)_bstr_t(var));
pApp->m_pRecordset—〉MoveNext();
num++;
}
m_ctrlCategory.AddString("全部");
pApp—>m_pRecordset—〉Close();
}
catch(_com_error * e)
{
AfxMessageBox(e->ErrorMessage());
}
//设置当前选择类型为全部
m_ctrlCategory。SetCurSel(num);
}
5 系统测试
进入VC++6。0,打开工程RBookSale.dsw,然后进入源程序,接着编译和运行即可运行。下面将给出系统运行的过程.
(1)打开程序后,选择“使用书店身份登录”,输入密码“111”,进入主对话框,如图5。1.
图5.1 主对话框
(2)在功能菜单下选择图书录入功能,添加一本新的图书信息,如图5.2。
图5.2 添加图书信息
(3)点击“返回"按钮后,系统会自动显示现有图书信息,如图5.3。
图5。3 系统自动显示现有图书信息
(4)在功能菜单下进入图书销售对话框,卖出一本《C++教程》,如图5。4。点击返回按钮后,系统会显示当前所有图书剩余库存信息,如图5。4.
图5。4 图书销售
(5)点击结束销售后,系统会自动显示当前所有图书的库存信息,《C++教程》的库存量已减少一本,如图5.5。
图5。5 完成销售后的库存信息
(6)在功能菜单下进入销售统计对话框,查询全部销售清单,并给出已售出图书总本数,如图5。6。
图5.6 查询所有图书销售清单
(7)在功能菜单下进入查询库存对话框,查询《魅力何来》这本书的库存信息,如图5。7。
图5。7 查询图书库存信息
(8)再售出《魅力何来》2本后,在功能菜单下进入售完图书列表功能,查询已售完的图书的信息如图5.8。
图5。8 查询售完图书列表
(9)在出售图书时,若无对应图书信息或图书库存为零,将出售失败,并给出提示信息,如图5。9。
图5。9图书销售失败
6 操作手册
首先将date文件夹下的两个数据库文件附加到本地的SQL数据库中,然后进入VC++6。0,打开工程RBookSale.dsw,进入源程序后,接着编译和运行即可。
7 结论
7。1 系统功能
本系统为图书销售管理系统,主要实现图书录入、图书销售、销售统计、查询库存等功能。该系统中采用图形用户界面,直观、清晰,方便用户操作。图书销售管理系统可以完成书店的日常管理,迅速准确地对已售图书和剩余库存进行统计和汇总工作,大大提高了书店的管理效率和准确性。
7。2 系统不足和改进
我在同学的帮助和老师的悉心指导下完成了该图书销售管理,但程序还是存在一些不足之处。比如程序没有直接提供修改密码的功能,系统管理员密码保存在数据库的Pwd表中,若要修改密码,可以到数据库中直接修改。由于时间仓促,没有优化设计,还存在一些垃圾和重复代码,也没有进行全面的测试,需要进一步的改进。本系统规模小,实现的功能简单,但稍加改动和完善,完全可以应用到普通书店的销售管理中。
7。3 总结
本次课程设计完成的是图书销售管理系统,我基本完成了所要求的几个功能,包括图书录入、图书销售、销售统计、查询库存等功能。通过本次课程设计,自己对Visual C++6。0的基本知识有了一个很好的巩固和学习,特别是Visual C++6。0中的MFC,它的功能是非常强大的,使用它制作图形界面很方便。而且自己还进一步熟悉了SQL数据库的知识,包括建表、查询、修改等操作,以及学习了Visual C++6.0怎样连接数据库。
开始做这个课
展开阅读全文