




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成绩南京工程学院课程设计说明书(论文)题 目 图书管理系统 课 程 名 称 面向对象程序设计B 院(系、部、中心) 通信工程学院 专 业 计算机通信 班 级 算通111 学 生 姓 名 余丹红 学 号 208110410 设 计 地 点 信息楼C322 指 导 教 师 郭 丽 红 设计起止时间: 2013年 5月 27日至 2013年 5月31日目 录1系统设计的目的和意义32系统总框架图43软件功能描述44软件代码的设计541数据结构描述与定义842模块设计95软件使用说明106测试结果与分析117比较有特色的函数158存在的不足与对策169课程设计总结17附录:源程序清单17 图书管理系统1系统设计的目的和意义课程设计是巩固所学理论知识、使理论与实际相结合的重要实践环节。此次课程设计的目的是以C+程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。该系统针对的是图书馆目前依靠手工记录图书信息,手工记录管理信息,既使图书管理人员工作量繁重,而且还容易出现错误,图书管理系统是一个现代图书管不可缺少的部分,它的内容对于图书管的决策者和管理者来说都至关重要,所以图书管理系统应该能够为管理员提供充足的信息和快捷的查询手段。随着现在社会的发展,人们越来越重视对信息资源的开发和管理,尤其在数据处理中的应用,对经济和社会有着明显效益。依靠手工处理图书信息,已经不能满足现行的图书管本课题以图书管理为背景,意义在于使用计算机进行科学的管理,实现高效、有序的工作方式,把工作人员从繁重的工作程序中解放出来,以提高工作效率。该系统主要是为了培养我们学生的动手操作能力,以及考核我们这学期对C+面向对象这门课的学习成果,为了让我们正真能够做出一个属于自己的软件,老师在起先对我们此次所要用到的软件和方法进行了讲解和教授。2系统总框架图3软件功能描述设计数据结构,其中图书信息包含(名称,出版时间,作者,入库时间,价格,买入本数,借出本数,借出时间)等字段。1.采用面向对象程序设计思想2.图书信息写入ACCESS文件中,从文件中查询出图书信息3.采用工程文件方式组织程序4.能实现图书信息的增、删、 查 、改等功能。5.外观设计风格各异,在基本功能完成的基础上可以自行设计添加新功能。(或设计目标或需求分析)对问题的描述应避开具体的算法和涉及的数据结构,描述系统实现功能及达到的目标。4软件代码的设计41数据结构描述与定义1 用到各种构造函数和析构函数主界面CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX)CYdhDlg:CYdhDlg(CWnd* pParent /*=NULL*/): CDialog(CYdhDlg:IDD, pParent)void CYdhDlg:DoDataExchange(CDataExchange* pDX)BOOL CYdhDlg:OnInitDialog()void CYdhDlg:OnSysCommand(UINT nID, LPARAM lParam)void CYdhDlg:OnPaint() HCURSOR CYdhDlg:OnQueryDragIcon()void CYdhDlg:Onenter()void CYdhDlg:OnCancel()次界面tsglxt:tsglxt(CWnd* pParent /*=NULL*/): CDialog(tsglxt:IDD, pParent)void tsglxt:DoDataExchange(CDataExchange* pDX)void tsglxt:OnSearch()void tsglxt:OnAdd()void tsglxt:OnModify()void tsglxt:OnDelete()void tsglxt:OnCancel()void tsglxt:Onclean()2用到各种继承和派生class CAboutDlg : public CDialogpublic:CAboutDlg();protected:DECLARE_MESSAGE_MAP();1.用户登录void CYdhDlg:Onenter() / TODO: Add your control notification handler code hereUpdateData(true);if(m_password=123)&(m_name=ydh)AfxMessageBox(登录成功!);tsglxt s;s.DoModal();elseAfxMessageBox(密码错误请重试!);2.图书信息查询void tsglxt:OnSearch() / TODO: Add your control notification handler code here library s(&db);UpdateData(true);CString str=select * from book;s.Open(library:dynaset,_T(str);flag=0;while(!s.IsEOF()if(m_name=s.m_name)m_pdate=s.m_pdate;m_writer=s.m_writer;m_indate=s.m_indate;m_price=s.m_price;m_innumber=s.m_innumber;m_outnumber=s.m_outnumber;m_outdate=s.m_outdate;flag=1;break;elses.MoveNext();if(flag=1)AfxMessageBox(查找成功!);elseAfxMessageBox(没有该本书籍!);UpdateData(false);s.Close();3.图书信息添加void tsglxt:OnAdd() / TODO: Add your control notification handler code herelibrary s(&db);UpdateData(true);CString str=select * from book;s.Open(library:dynaset,_T(str);s.AddNew();if(m_name=)|(m_pdate=)|(m_writer=)|(m_indate=)|(m_price=0)|(m_innumber=0) AfxMessageBox(书籍相关内容不能为空!);elses.m_name=m_name;s.m_pdate=m_pdate;s.m_writer=m_writer;s.m_indate=m_indate;s.m_price=m_price;s.m_innumber=m_innumber;s.m_outnumber=m_outnumber;s.m_outdate=m_outdate;s.Update();s.Close();AfxMessageBox(添加成功!);4.图书信息修改void tsglxt:OnModify() / TODO: Add your control notification handler code herelibrary s(&db);UpdateData(true);CString str=select * from book;s.Open(library:dynaset,_T(str);while(!s.IsEOF() if(m_name=s.m_name) flag=1; break; else s.MoveNext();if(flag=1)s.Edit();s.m_name=m_name; s.m_pdate=m_pdate; s.m_writer=m_writer; s.m_indate=m_indate; s.m_price=m_price; s.m_innumber=m_innumber; s.m_outnumber=m_outnumber; s.m_outdate=m_outdate; s.Update();AfxMessageBox(修改成功!);else AfxMessageBox(无该记录!);s.Close();5.图书信息删除void tsglxt:OnDelete() / TODO: Add your control notification handler code herelibrary s(&db);UpdateData(true);CString str=select * from book;s.Open(library:dynaset,_T(str); while(!s.IsEOF()if(m_name=s.m_name)flag=1;break;else s.MoveNext();if(flag=1) s.Delete(); AfxMessageBox(删除成功!);elseAfxMessageBox(无该记录);s.Close();6.退出系统void tsglxt:OnCancel() / TODO: Add extra cleanup hereAfxMessageBox(感谢您的使用,再见!);CDialog:OnCancel();42模块设计输入书籍名称判断是否存在该书籍YN输出该书籍的所有信息结束开始开始输入用户名=所设置用户名&输入密码=所设置密码输入用户名输入密码进入图书管理系统结束YN1 登录 2.查询3.添加 4.删除输入书籍名称判断是否存在该书籍YN删除数据库中该书籍信息结束开始输入书籍的各项信息信息存入数据库中结束开始5.修改输入书籍信息判断是否存在该书籍YN更新数据库中该书籍信息结束开始5软件使用说明1. 使用者必须用前定义说明; 2. 该软件所用的数据库为ACCESS为小型数据库,仅限于小型的图书馆书籍信息管理;3.该系统可用于书籍信息的查找、添加、删除、修改四个基本操作;4.为方便使用者,已在原有的表格中添加若干书籍信息供测试;5.定义的ODBC数据库名称为book,表名也为book;6测试结果与分析1.登录2.进入图书管理页面3.查找、添加、删除、修改等一系列操作4.退出4.查找出错7比较有特色的函数 1.清空对话框void tsglxt:Onclean() / TODO: Add your control notification handler code here/m_name.SetWindowText();/m_name.SetFocus();GetDlgItem(IDC_name)-SetWindowText();GetDlgItem(IDC_pdate)-SetWindowText();GetDlgItem(IDC_writer)-SetWindowText();GetDlgItem(IDC_indate)-SetWindowText();GetDlgItem(IDC_price)-SetWindowText(0);GetDlgItem(IDC_innumber)-SetWindowText(0);GetDlgItem(IDC_outnumber)-SetWindowText(0);GetDlgItem(IDC_outdate)-SetWindowText();2.用列表框显示所有图书信息BOOL CYdhDlg:OnInitDialog()CDialog:OnInitDialog(); /初始化列表控件m_List.InsertColumn(0,书名,LVCFMT_LEFT,200,0);m_List.InsertColumn(1,出版时间,LVCFMT_LEFT,200,1);m_List.InsertColumn(2,作者,LVCFMT_LEFT,200,2);m_List.InsertColumn(3,入库时间,LVCFMT_LEFT,200,3);m_List.InsertColumn(4,价格,LVCFMT_LEFT,200,4);m_List.InsertColumn(5,买入本数,LVCFMT_LEFT,200,5);m_List.InsertColumn(6,借出本数,LVCFMT_LEFT,200,6);m_List.InsertColumn(7,借出时间,LVCFMT_LEFT,200,7);void CYdhDlg:OnSearched() / TODO: Add your control notification handler code hereUpdateData(true);CString str;POSITION pos=m_Link.GetHeadPosition(); int i;for(i=0;iname=m_name|m_book-pdate=m_pdate|m_book-writer=m_writer|m_book-indate=m_indate|m_book-price=m_price|m_book-innumber=m_innumber|m_book-outnumber=m_outnumber|m_book-outdate=m_outdate)str=书名:+m_book-name+ 出版时间: +m_book-pdate+ 作者: +m_book-writer+入库时间: +m_book-indate+ 价格: +m_book-price+ 买入本数: +m_book-innumber+借出本数: +m_book-outnumber+ 借出时间: +m_book-outdate;AfxMessageBox(str);Setlist();break;UpdateData(false);8存在的不足与对策 在进行查找操作时,出现以下情况:输入一本不存在的书籍名称,结果对话框显示:没有该本书籍!再一次进行查找一本存在的书籍,显示出正确的书籍信息,第三次再输入第一次输入的书籍名称,原本不存在的结果也显示:查找成功!存在的缺陷是flag定义后未进行再次重新赋值操作,使flag一直维持着前一个结果,导致后来的操作产生错误。之后对flag操作进行初始化赋值以及对其最后再幅值,即能消除此漏洞!在对图书进行管理时,每次的查询、删除、添加、修改等操作的时候,都会有前一次的操作记录在相对应的对话框内,为了避免混淆使用者的视觉效果,达到更好的操作管理效果,对对话框的代码加入函数:GetDlgItem(IDC_名字)-SetWindowText();使每一个对话框在进行完一次操作后能够及时清零,以方便后面的操作。9课程设计总结C+是从C语言发展演变而来的。为了解决C语言除其优点外的局限性而设计了C+,继承了C原有的精髓,扩充增加了对开发大型软件颇为有效的面向对象机制,主要特点有:保持与C兼容,简洁、高效、安全、可读性更好、代码结构更为合理,用C+编写的程序质量高、可重用性高、可扩展性好、可维护性好、可靠性高,使得大中型程序开发变得更加容易;增加了面向对象机制,主要包括:抽象数据类型;封装与信息隐藏;以继承方式实现程序的重用;以函数重载、运算符重载和虚函数来实现多态性;以模版来实现类型的参数化。在课程设计过程中我逐步学习了C+面向对象的要领,在学习中摸索,在摸索中成长,在老师授课之余能够有机会上机操作,实实在在地编写出一个软件是件很好的事,也是个很不错的经历,无论是对于我们理论课巩固和提高还是对于我们上机动手写代码的能力都是很好的锻炼。说句实在的,自己的编程能力的确不怎么样,可以说也有点害怕,虽然大一和上学期都有过编程的课程设计,多多少少也自己做过一些东西,但总的来说还是不怎么样,感觉都是在懵懂中学到些许东西就这样过来了。而这次课程设计是基于C+面向对象和ACCESS数据库应用系统开发的一个图书馆管理系统,不仅需要用到我们学到的专业知识也要我们学习对数据库的应用,根据图书管理系统的需求设计出具体的功能呢个然后根据各个模块功能编写代码,建立对话框窗口,建立数据库和表格,最后进行两者的级联。这次系统的开发是由我们这自己个人独立完成的,但是在做的过程中,老师的提醒帮助和同学之间的互相交流探讨和纠错是十分重要的。在设计期间碰到了大大小小可以说是无数个问题和BUG,导致我一个登录界面反反复复做了6遍,最后感觉自己闭着眼睛都能做出来第一个界面了,期间因为一个小小的函数体或者的头函数的位置摆放问题或者是遗漏情况都导致程序结果运行不起来。而后来的数据库的建立和级联问题又是格外伤脑筋,每一个字段对应的名字和数据类型都要一一对应,所以只要中间有出错便导致系统发生错误。在一次又一次的测试过程不断发现错误,改正,以致最后达到预期的要求的结果,那种兴奋是无法言表的。总体来说,这次课设自己付出了很多,但同时也收获了不少,无论是动手能力和排错能力,还是同学之间的互相帮助与协作,更让我在学习编程中收获到乐趣,并且实现了自我价值!附录:源程序清单编码规范,符合软件工程的要求(变量名,函数名见名知义,注释规范占总程序行数的2/5)。1.ydhDlg.cpp/ ydhDlg.cpp : implementation file/#include stdafx.h#include ydh.h#include ydhDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif#include tsglxt.h#include cstdlib/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CYdhDlg dialogCYdhDlg:CYdhDlg(CWnd* pParent /*=NULL*/): CDialog(CYdhDlg:IDD, pParent)/AFX_DATA_INIT(CYdhDlg)m_name = _T();m_password = _T();/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CYdhDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CYdhDlg)DDX_Text(pDX, IDC_name, m_name);DDX_Text(pDX, IDC_password, m_password);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CYdhDlg, CDialog)/AFX_MSG_MAP(CYdhDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_enter, Onenter)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CYdhDlg message handlersBOOL CYdhDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CYdhDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CYdhDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CYdhDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CYdhDlg:Onenter() / TODO: Add your control notification handler code hereUpdateData(true);if(m_password=123)&(m_name=ydh)AfxMessageBox(登录成功!);tsglxt s;s.DoModal();elseAfxMessageBox(密码错误请重试!);void CYdhDlg:OnCancel() / TODO: Add extra cleanup hereAfxMessageBox(感谢您的使用,再见!);CDialog:OnCancel();2.tsglxt.cpp/ tsglxt.cpp : implementation file#include stdafx.h#include ydh.h#include tsglxt.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif#include library.hCDatabase db;int flag;/ tsglxt dialogtsglxt:tsglxt(CWnd* pParent /*=NULL*/): CDialog(tsglxt:IDD, pParent)/AFX_DATA_INIT(tsglxt)m_name = _T();m_pdate = _T();m_indate = _T();m_innumber = 0;m_outdate = _T();m_outnumber = 0;m_price = 0.0;m_writer = _T();/AFX_DATA_INITvoid tsglxt:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(tsglxt)DDX_Text(pDX, IDC_name, m_name);DDX_Text(pDX, IDC_pdate, m_pdate);DDX_Text(pDX, IDC_indate, m_indate);DDX_Text(pDX, IDC_innumber, m_innumber);DDX_Text(pDX, IDC_outdate, m_outdate);DDX_Text(pDX, IDC_outnumber, m_outnumber);DDX_Text(pDX, IDC_price, m_price);DDX_Text(pDX, IDC_writer, m_writer);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(tsglxt, CDialog)/AFX_MSG_MAP(tsglxt)ON_BN_CLICKED(IDC_Search, OnSearch)ON_BN_CLICKED(IDC_Add, OnAdd)ON_BN_CLICKED(IDC_Modify, OnModify)ON_BN_CLICKED(IDC_Delete, OnDelete)ON_BN_CLICKED(IDC_clean, Onclean)/AFX_MSG_MAPEND_MESSAGE_MAP()/tsglxt message handlersvoid tsglxt:OnSearch() / TODO: Add your control notification handler code here library s(&db);UpdateData(true);CString str=select * from book;s.Open(library:dynaset,_T(str);flag=0;while(!s.IsEOF()if(m_name=s.m_name)m_pdate=s.m_pdate;m_writer=s.m_writer;m_indate=s.m_indate;m_price=s.m_price;m_innumber=s.m_innumber;m_outnumber=s.m_outnumber;m_outdate=s.m_outdate;flag=1;break;elses.MoveNext();if(flag=1)AfxMessageBox(查找成功!);elseAfxMessageBox(没有该本书籍!);UpdateData(false);s.Close();void tsglxt:OnAdd() / TODO: Add your control notification handler code herelibrary s(&db);UpdateData(true);CString str=select * from book;s.Open(library:dynaset,_T(str);s.AddNew();if(m_name=)|(m_pdate=)|(m_writer=)|(m_indate=)|(m_price=0)|(m_innumber=0) AfxMessageBox(书籍相关内容不能为空!);elses.m_name=m_name;s.m_pdate=m_pdate;s.m_writer=m_writer;s.m_indate=m_indate;s.m_price=m_price;s.m_innumber=m_innumber;s.m_outnumber=m_outnumber;s.m_outdate=m_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广西河池市本年度(2025)小学一年级数学部编版摸底考试((上下)学期)试卷及答案
- 天津市南开中学2024-2025学年高三下学期第五次月考英语试题(原卷版+解析版)
- 航空旅游智能客服系统考核试卷
- 煤炭洗选厂信息化建设与数据管理考核试卷
- 硝酸钾生产过程中的能量优化与节约考核试卷
- 胃肠道功能紊乱的防治考核试卷
- 数据分析师的核心技能考核试卷
- 社会责任履行考核试卷
- 油气仓储与能源市场供需预测及分析报告考核试卷
- 天津市宁河县芦台五中重点名校2025届初三下学期第一次教学质量检查考试数学试题含解析
- LY/T 1529-2020普通胶合板生产综合能耗
- FZ/T 13056-2021涤粘混纺色纺弹力布
- 构图基础课件
- 礼仪文书写作课件
- 20CrMnTi较详细材料属性
- 《三国演义》竞赛100题含答案
- 行列式概念和性质
- (新版)农网配电营业工(综合柜员)资格考试题库(含答案)
- (完整版)市政道路综合管廊施工方案
- 生产要素国际流动概论
- 叉车日常使用状况点检记录表(日常检查记录)
评论
0/150
提交评论