1**交通大学信息科学与工程学院《程序设计实训I》综合设计报告图书销售系统学号:631206050***姓名:***专业:计算机科学与技术(软件开发)班级:软件2班实验室(中心):专业机房指导老师:***完成时间:2013年12月18日2目录一、任务书………………………………………………….4二、需求分析……………………………………………….5三、系统设计……………………………………………….6四、编程与实现…………………………………………….14五、测试内容与结果……………………………………….56六、存在的问题与不足及对策…………………………….67七、对这门课的建议……………………………………….68八、参考文献……………………………………………….683以下为设计报告正文内容教师评阅意见:签名:年月日成绩:4**交通大学信息科学与工程学院综合设计任务书课程程序设计实训I班级软件二班指导教师***题目图书销售系统完成时间2013年12月18日主要内容图书销售系统应主要包括以下一些内容:1.用户信息管理;2.图书信息管理;3.客户信息管理;4.销售信息管理;5.统计信息;设计报告要求设计报告要求格式规范、内容完整。主要包括:(1)需求分析;(2)系统设计;(3)编程实现:本部分主要写实现的过程或步骤,以及关键代码(必须附上自己添加的源代码并加上注释)(4)测试与分析;(5)存在的问题与不足及对策;(6)对这门课的建议;(7)参考文献等说明:设计报告要求打印上交。版面要求1.题目用黑体三号,段后距18磅(或1行),居中对齐;2.标题用黑体四号,段前、段后距6磅(或0.3行);3.正文用小四号宋体,行距为1.25倍行距;4.标题按“一”、“㈠”、“1”、“⑴”顺序编号。备注原则上一人一题,部分题目允许多人一题,分工协作,独立完成。(多人协作完成,要注明分工情况)每位同学单独演示自己的程序并现场回答提问。成绩评定详见评分标准说明5二、需求分析(一)图书销售管理系统体系结构图书销售管理系统是该系统软件的重要内容之一,该系统为书店的库存书籍的动态调整提供了决策依据,有利于及时对有大量需求的新书进行订货入库。它的主要功能包括:图书的管理,图书销售管理,图书退货管理和销售统计,退货统计以及进货商信息管理,顾客信息管理,用户信息管理等。系统管理,帮助等功能。(二)图书销售系统整体概述1.图书信息管理添加图书信息修改图书信息查询图书信息删除图书信息2.销售信息管理添加销售信息修改销售信息查询销售信息删除销售信息3.退货信息管理添加退货信息修改退货信息查询退货信息删除退货信息4.统计信息管理销售信息统计退货信息统计图书库存信息统计5.顾客信息管理添加顾客信息修改顾客信息6查询顾客信息删除顾客信息6.供应商信息管理添加供应商信息修改供应商信息查询供应商信息删除供应商信息7.用户信息管理添加用户信息修改用户密码退出系统8.系统帮助图书销售系统简介三、系统设计(一)系统结构1.系统总体结构图书销售系统用户登录用户信息管理图书信息管理顾客信息管理销售信息管理退货信息管理统计信息管理供应商信息管理系统帮助72.图书信息管理结构图图书信息管理添加图书信息修改图书信息删除图书信息查询图书信息查询所有图书按条件查询图书83.销售信息管理结构图4.退货信息管理销售信息管理添加销售信息修改销售信息删除销售信息查询销售信息退货信息管理添加退货信息修改退货信息删除退货信息查询退货信息95.统计信息管理6.顾客信息管理统计信息管理销售信息统计退货信息统计库存信息统计顾客信息管理添加顾客信息修改顾客信息删除顾客信息查询顾客信息107.供应商信息管理8.用户信息管理供应商信息管理添加供应商信息修改供应商信息删除供应商信息查询供应商信息用户信息管理添加用户信息修改用户密码退出系统11(二)数据库设计1.数据库结构设计(1)图书信息E-R图(2)销售信息E-R图图书信息图书编号书名作者价格出版社数量销售信息销售代码书名顾客姓名销售价格销售总额销售数量图书编号销售日期12(3)退货信息E-R图(4)顾客信息E-R图销售信息退货代码书名顾客姓名退货价格退货总额退货数量图书编号退货日期备注销售信息身份证号顾客姓名性别年龄联系方式顾客编号注册日期13(5)供应商信息E-R图(6)用户信息E-R图2.数据库关系模式本系统的E-R图可转化为如下关系模式:图书(图书编号、书名、作者、出版社、价格、数量)顾客(顾客编号、姓名、性别、年龄、身份证号、联系方式、注册日期)供应商(供应商编号、公司名称、公司地址、联系人、联系方式、备注信息)图书销售(销售代码、图书编号、书名、顾客姓名、销售价格、销售数量、销售总额、销售日期)图书退货(退货代码、图书编号、书名、退货价格、退货数量、销退货总额、退货日期、顾客姓名、备注信息)用户(账号、密码)库存(图书编号、书名、数量)图书信息供应商编号公司名称联系人公司地址联系方式备注用户信息用户密码用户名14四、编程与实现(一)创建单文档应用程序BSMS1.用MFCAppWizard创建一个单文档应用程序BSMS,在向导步骤中将CBSMSView的基类由CView改为CListView。2.在CBSMSView::PreCreateWindow函数添加下列代码,用来设置列表视图内嵌列表控件的风格:BOOLCBSMSView::PreCreateWindow(CREATESTRUCT&cs){cs.style|=LVS_REPORT;//报表风格returnCListView::PreCreateWindow(cs);}(二)图书信息管理实现1.在BSMS中添加图书信息表的类CBookadd。2.创建图书信息添加对话框。为对话框类CAddbook添加背景图片,为CAddbook类添加成员函数OnPaint,并添加下列代码:voidCAddbook::OnPaint(){CPaintDCdc(this);//devicecontextforpainting//TODO:在此处添加消息处理程序代码CDCmemdc;memdc.CreateCompatibleDC(&dc);//创建兼容YDCCBitmapbkg;bkg.LoadBitmap(IDB_BITMAP11);//载入位图BITMAPbkginfo;bkg.GetBitmap(&bkginfo);//获取位图信息memdc.SelectObject(&bkg);15RECTrect;GetWindowRect(&rect);//获取对话框信息dc.SetStretchBltMode(COLORONCOLOR);dc.StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&memdc,0,0,bkginfo.bmWidth,bkginfo.bmHeight,SRCCOPY);//不为绘图消息调用CDialogEx::OnPaint()}3.创建图书信息修改对话框。为对话框类CChangebook添加背景图片,为CChangebook类添加成员函数OnPaint,并添加下列代码:voidChangebook::OnPaint(){CPaintDCdc(this);//devicecontextforpainting//TODO:在此处添加消息处理程序代码CDCmemdc;memdc.CreateCompatibleDC(&dc);//创建兼容YDCCBitmapbkg;bkg.LoadBitmap(IDB_BITMAP4);//载入位图BITMAPbkginfo;bkg.GetBitmap(&bkginfo);//获取位图信息memdc.SelectObject(&bkg);RECTrect;GetWindowRect(&rect);//获取对话框信息dc.SetStretchBltMode(COLORONCOLOR);dc.StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&memdc,0,0,bkginfo.bmWidth,bkginfo.bmHeight,SRCCOPY);16//不为绘图消息调用CDialogEx::OnPaint()}4.实现图书添加、修改、查询、删除功能(1)在CBSMSView类添加成员函数DeleteAllColumn(),用来删除列表视图的标题头,以便能在创建标题头显示不同的信息:voidCBSMSView::DeleteAllColumn(void){CListCtrl&m_ListCtrl=GetListCtrl();intnCount=0;CHeaderCtrl*pHeaderCtrl=m_ListCtrl.GetHeaderCtrl();if(pHeaderCtrl!=NULL)nCount=pHeaderCtrl-GetItemCount();for(inti=0;inCount;i++)m_ListCtrl.DeleteColumn(0);}(2)在CBSMSView类添加成员函数DispBookInfo,用来显示图书信息。voidCBSMSView::DispBookInfo(CStringstrFilter){DeleteAllColumn();CListCtrl&m_ListCtrl=GetListCtrl();CStringstrHeader[]={_T(图书编号),_T(书名),_T(作者),_T(价格),_T(数量),_T(出版社)};for(intncol=0;ncolsizeof(strHeader)/sizeof(CString);ncol++)m_ListCtrl.InsertColumn(ncol,strHeader[ncol],LVCFMT_LEFT,100);m_ListCtrl.DeleteAllItems();//删除所有的列表项CBookaddbSet;bSet.m_strFilter=strFilter;bSet.m_strSort=bookno;bSet.Open();17intnitem=0;CStringstr;while(!bSet.IsEOF()){m_ListCtrl.InsertItem(nitem,bSet.m_bookno);m_ListCtrl.SetItemText(nitem,1,bSet.m_bookname);m_ListCtrl.SetItemText(nitem,2,bSet.m_bookauthor);str.Format(_T(%4.2f),bSet.m_bookprice);m_ListCtrl.SetItemText(nitem,3,str);str.Format(_T(%8d),bSet.m_booksum);m_ListCtrl.SetItemText(nitem,4,str);m_ListCtrl.SetItemText(nitem,5,bSet.m_bookpublisher);nitem++;bSet.MoveNext();}bSet.Close();}(3)为CBSMSView类添加一个成员变量m_strFilter,类型为CString。(4)用MFCClassWizard在CBSMSView类中映射菜单ID_ADDBOOK的COMMAND消息,并添加下列代码:voidCBSMSView::OnAddbook(){//TODO:在此添加命令处理程序代码CAddbookdlg;CBookaddbSet;if(dlg.DoModal()!=IDOK)return;bSet.Open();bSet.AddNew();//在表的末尾增加新记录bSet.SetFieldNull(&(bSet.m_bookno),FALSE);//设定m_Bookadd_bookno不能为空18bSet.m_bo