《小型记账系统数据库课程设计报告.pdf》由会员分享,可在线阅读,更多相关《小型记账系统数据库课程设计报告.pdf(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 目录 相关技术介绍.2 1.1 Visual Studio 2008 的简介.2 1.2 Microsoft Access 2007 的简介.2 1.3 C/S 结构的简介.2 需求分析.3 2.1 需求简介.3 2.2 数据字典.3 2.2.1 数据项.3 2.2.2 数据结构.4 2.3 用例图.4 总体设计.5 3.1 系统总体功能模块图.5 数据库设计.5 4.1 ER 图设计.6 4.2 关系模式.6 4.3 逻辑模型.7 4.4 物理设计.7 4.4.1 数据库建立.7 4.4.2 数据库备份和恢复.8 用户界面的设计和实现和应用程序编码.8 5.1 用户界面设计.8 系统测试方
2、案和测试报告.16 6.1 系统测试.17 6.1.1 错误数据.17 6.1.2 正确数据.20 安装和使用说明.23 7.1 安装.23 7.2 使用说明.23 参考文献.24 相关技术介绍 1.1 Visual Studio 2008的简介 对于应用程序开发工具的选择,很多人都听过这句经典的说法:聪明的程序员使用Delphi,真正的程序员使用 Visual C+。Visual Studio 是微软公司推出的开发 Win32 应用程序(Windows 95/98/2000/XP/NT)的、面向对象的可视化集成开发工具。它的最大优点就是提供了功能强大的 MFC 类库,MFC 是一个很大的 C
3、+类层次结构,其中封装了大量的类及其函数,很多 Windows 程序所共有的标准内容可以由 MFC 的类来提供,MFC 类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。1.2 Microsoft Access 2007的简介 Microsoft Access 数据库管理系统是 Microsoft Office 套件的重要组成部分,先后出现了Access 97、Access 2000 和 Access 2007。其中 Access 2007 是最新版本。
4、Access 适用于小型商务活动,用以存贮和管理商务活动所需要的数据。Access 不仅是一个数据库,而且它具有强大的数据管理功能,它可以方便地利用各种数据源,生成窗体(表单),查询,报表和应用程序等。Access 2007 数据库由七种对象组成:表、查询、窗体、报表、页、宏和模块。表(Table)表是数据库的基本对象,是创建其他 6 种对象的基础。表由记录组成,记录由字段组成,表用来存贮数据库的数据,故又称数据表。查询(Query)查询可以按索引快速查找到需要的记录,按要求筛选记录并能连接若干个表的字段组成新表。窗体(Form)窗体提供了一种方便的浏览、输入及更改数据的窗口。还可以创建子窗体
5、显示相关联的表的内容。窗体也称表单。报表(Report)报表的功能是将数据库中的数据分类汇总,然后打印出来,以便分析。页(Page)也叫数据访问页。是连接到数据库的 Web 页,在数据访问页中,可以查看、添加、编辑和操作存储在数据库中的数据。数据访问页还可以包括其他来源的数据,例如 Microsoft Excel。宏(Macro)宏相当于 DOS 中的批处理,用来自动执行一系列操作。Access 列出了一些常用的操作供用户选择,使用起来十分方便。模块(Module)模块的功能与宏类似,但它定义的操作比宏更精细和复杂,用户可以根据自己的需要编写程序。模块使用 Visual Basic 编程。1.
6、3 C/S 结构的简介 随着网络的发展,出现了 C/S 模式,应用被分为前端(客户机部分)和后端(服务器部分)。C/S 结构的系统有三个基本组成部分:客户机、服务器、客户机与服务器的连接件。客户机一般运行在微机上,而服务器一般运行在大型机或高性能微机上。这种模式的最大特 点就在于利用客户机和服务器双方的资源来共同执行一个特定的任务,也就是一个应用由客户机和服务器共同承担完成。C/S 结构的优点有:交互性强,运行效率高,开放性强,可扩充性好,应用服务器运行负荷较轻,提供了更安全的存储模式。由于 C/S 模式在逻辑结构上比 B/S 模式少一层,对于相同的任务,C/S 完成的速度总比 B/S 快。需
7、求分析 2.1 需求简介 在生活节奏非常快的当今社会,人们需要对日常的开支有一个明确的但是简单的记录方式,迷你一个记账系统就是提供这样一种方式的小型管理系统。它可以用来管理日常生活的支出,可以对消费进行分类、统计、查询,使支出更加清晰明确,你可以根据时间段进行统计出消费的情况,打印出消费单。因为是面向实用的,所以功能不需要太过于复杂,只需要实用就可以了,考虑到用户的需求,界面需要比较简洁和美观,操作尽量简单。2.2 数据字典 2.2.1 数据项 数据项名称:用户名 简述:用户的名称,用于登录系统 类型:字符串 长度:20 数据项之间的联系:用户名密码 数据项名称:条目编号 简述:消费的条目编号
8、 类型:字符串 长度:7 取值范围:00000009999999 数据项之间的联系:条目编号条目名称,条目编号消费类型,条目编号单价,条目编号数量,条目编号消费时间 数据项名称:消费类型 简述:消费的类型 类型:字符串 长度:20 2.2.2 数据结构 数据结构名称:用户信息 含义说明:使用系统的用户的具体信息 组成:用户名+密码 数据结构名称:消费信息 含义说明:消费的条目的具体信息 组成:条目编号+条目名称+消费类型+单价+数量+消费时间 数据结构名称:类型信息 含义说明:消费类型的具体信息 组成:消费类型 2.3 用例图 用户添加类别添加消费修改消费删除消费删除类别系统修改登录名修改登录
9、密码 总体设计 3.1 系统总体功能模块图 用户管理迷你记账系统消费管理类型管理统计查询修改用户名修改用户密码添加消费删除消费添加类型删除类型修改类型统计导出统计信息设置查询条件查询 数据库设计 4.1 ER 图设计 用户名用户密码条目编号消费条目名称单价数量消费类型消费时间消费类型消费类型消费类型n1 4.2 关系模式 用户(用户名,密码)消费类型(消费类型)消费(条目编号,条目名称,消费类型,单价,数量,消费时间)关系模式对应的基本表 关系模型 基本表 用户 users 消费类型 class 消费 entry 4.3 逻辑模型 消费类型用户#o用户名密码Variable character
10、s(20)Variable characters(20)消费#o*ooo条目编号条目名称消费类型单价数量消费时间Variable characters(7)Variable characters(15)Variable characters(20)Money(7,2)IntegerDate消费类型*消费类型 Variable characters(20)4.4 物理设计 4.4.1 数据库建立 Access 数据库本身就是一个文件,创建一个文件就创建一个数据库,所以不需要再建立数据库。建立表 users CREATE TABLE users(u_name VARCHAR(20)PRIMARY
11、KEY,u_password VARCHAR(20);建立表 class CREATE TABLE class(c_name VARCHAR(20)PRIMARY KEY);建立表 entry CREATE TABLE entry(e_no VARCHAR(7)PRIMARY KEY,e_tag VARCHAR(15),e_class VARCHAR(20),e_price MONEY,e_quantity INT,e_date DATE,e_description TEXT,FOREIGN KEY(e_class)REFERENCES class(c_name);4.4.2 数据库备份和恢复
12、 因为 Access 数据库本身就是一个数据文件,所以可以直接对这个文件进行备份,如果数据遭到破坏需要恢复,那么将备份文件覆盖到原来的数据文件就可以恢复数据了,非常方便。用户界面的设计和实现和应用程序编码 5.1 用户界面设计 用户界面使用 MFC(微软基础类库)进行开发,其中的界面元素主要用的是 BCG Control Bar框架,这个框架是 BCG Soft 公司的界面库产品,后来被微软收购,并在后续发布的 VS2008 SP 版本中将其嵌入到 MFC 中作为 MFC 的一部分。用该框架可以开发出类似于 office2007 的界面。登录界面 关键代码 void CLoginDlg:OnB
13、nClickedBnLogin()/TODO:在此添加控件通知处理程序代码 UpdateData();CString strSQL;strSQL=_T(SELECT*FROM users);CAdoRecordSet rs;if(CPayoutManagerApp:OpenRecordSet(rs,strSQL)if(rs.GetRecordCount()0)CString strUsername;CString strPassword;rs.GetCollect(_T(u_name),strUsername);rs.GetCollect(_T(u_password),strPassword)
14、;if(strUsername.Compare(m_strUsername)=0)if(strPassword.Compare(m_strPassword)=0)EndDialog(TRUE);else AfxMessageBox(_T(密码错误!);else AfxMessageBox(_T(用户名错误!);else AfxMessageBox(_T(用户表为空!);主界面 面板/添加管理主面板 bNameValid=strTemp.LoadString(IDS_RIBBON_MANAGER);ASSERT(bNameValid);CMFCRibbonCategory*pManagerCat
15、egory=m_wndRibbonBar.AddCategory(strTemp,IDB_WRITESMALL,IDB_WRITELARGE);/面板工厂(管理)CPanelFactory managerFactory(pManagerCategory);/利用面板工厂创建类别面板 m_pClassPanel=new CClassPanel(IDS_RIBBON_CLASS,managerFactory);/初始化面板内容 m_pClassPanel-InitializeContainer();/利用面板工厂创建条目面板 m_pEntryPanel=new CEntryPanel(IDS_RI
16、BBON_ENTRY,managerFactory);/初始化面板内容 m_pEntryPanel-InitializeContainer();/添加搜索主面板 bNameValid=strTemp.LoadString(IDS_RIBBON_SEARCH);ASSERT(bNameValid);CMFCRibbonCategory*pSearchCategory=m_wndRibbonBar.AddCategory(strTemp,IDB_WRITESMALL,IDB_WRITELARGE);/面板工厂(搜索)CPanelFactory searchFactory(pSearchCatego
17、ry);/利用面板工厂创建搜索面板 m_pSearchPanel=new CSearchPanel(IDS_RIBBON_SEARCH,searchFactory);/初始化面板内容 m_pSearchPanel-InitializeContainer();/添加统计主面板 bNameValid=strTemp.LoadString(IDS_RIBBON_STAT);ASSERT(bNameValid);CMFCRibbonCategory*pStatCategory=m_wndRibbonBar.AddCategory(strTemp,IDB_WRITESMALL,IDB_WRITELARG
18、E);/面板工厂(统计)CPanelFactory statFactory(pStatCategory);/利用面板工厂创建统计面板 m_pStatPanel=new CStatPanel(IDS_RIBBON_STAT,statFactory);/初始化面板内容 m_pStatPanel-InitializeContainer();列表视图 void CEntryGrid:OnInitialUpdate()CListView:OnInitialUpdate();/TODO:在此添加专用代码和/或调用基类 /设定列表样式 DWORD dwStyle=:GetWindowLong(m_hWnd,
19、GWL_STYLE);dwStyle|=LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL;:SetWindowLong(m_hWnd,GWL_STYLE,dwStyle);dwStyle=m_listCtrl.GetExtendedStyle();dwStyle|=LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT;m_listCtrl.SetExtendedStyle(dwStyle);CAdoRecordSet rs;CString strSQL;strSQL=_T(SELECT e_no AS 条目编号,e_tag AS 条目名
20、称,e_class AS 消费类型,e_price AS 单价,e_quantity AS 数量,e_date AS 购买时间,e_description AS 备注FROM entry);CPayoutManagerApp:OpenRecordSet(rs,strSQL+_T(ORDER BY e_no),adCmdText);long colCount=rs.GetFieldsCount();/插入列名 for(long i=0;i GetFieldsCount();long rowCount=pRs-GetRecordCount();m_listCtrl.SetColumnWidth(c
21、olCount-1,200);pRs-MoveFirst();for(long i=0;i GetCollect(j,item);m_listCtrl.InsertItem(i,item);/插入内容 for(j=1;j GetCollect(_T(购买时间),dtDate);item=dtDate.Format(_T(%Y-%m-%d);else pRs-GetCollect(j,item);m_listCtrl.SetItemText(i,j,item);pRs-MoveNext();if(bCreated=TRUE)delete pRs;管理面板 void CEntryPanel:OnC
22、lickedBnAdd(void)UpdateData();CEntry entry(m_strNo,m_strTag,m_strClass,m_strPrice,m_strQuantity,m_strDate,m_strDescription);if(entry.Add()AfxMessageBox(_T(添加成功);NotifyOthersToUpdate();else AfxMessageBox(_T(添加失败);void CEntryPanel:OnClickedBnMod(void)UpdateData();CEntry entry;MakeEntry(entry);if(entry
23、.Update()=TRUE)AfxMessageBox(_T(修改成功);NotifyOthersToUpdate();else AfxMessageBox(_T(修改失败);void CEntryPanel:OnClickedBnDel(void)CEntry entry;MakeEntry(entry);if(entry.Delete()=TRUE)AfxMessageBox(_T(删除成功);NotifyOthersToUpdate();else AfxMessageBox(_T(删除失败);搜索面板 void CSearchPanel:OnBnSearch(void)CString
24、strText=m_pBnSearch-GetText();CString strField=m_pCBField-GetEditText();CString strValue=m_pEditValue-GetEditText();if(strField.Compare(_T(条目编号)=0)strField=_T(e_no);else if(strField.Compare(_T(条目名称)=0)strField=_T(e_tag);else if(strField.Compare(_T(消费类型)=0)strField=_T(e_class);CString strStatement;if
25、(strText.Compare(_T(精确搜索)=0)strStatement.Format(_T(%s=%s),strField,strValue);else strStatement.Format(_T(%s LIKE%s%s%s),strField,_T(%),strValue,_T(%);CString strSQL;strSQL.Format(_T(SELECT e_no AS 条目编号,e_tag AS 条目名称,e_class AS 消费类型,e_price AS 单价,e_quantity AS 数量,e_date AS 购买时间,e_description AS 备注FRO
26、M%s WHERE%s ORDER BY e_no),m_strTable,strStatement);CAdoRecordSet rs;if(OpenRecordSet(rs,strSQL)CMainFrame*pMainFrame=(CMainFrame*)theApp.m_pMainWnd;CEntryGrid*pEntryGrid=(CEntryGrid*)pMainFrame-GetActiveView();pEntryGrid-ListData(&rs);统计面板 void CStatPanel:OnBnStat(void)CString strStart=m_pCBStart-G
27、etEditText();CString strEnd=m_pCBEnd-GetEditText();CString strCount=_T(0);CString strSum=_T(0);CString strHighest=_T(0);CString strStatement;strStatement.Format(_T(e_date BETWEEN#%s#AND#%s#),strStart,strEnd);CString strSQL;strSQL.Format(_T(SELECT SUM(e_price*e_quantity)AS 消费总额,MAX(e_price*e_quantity
28、)AS 最高消费FROM%s WHERE%s),m_strTable,strStatement);CAdoRecordSet rs;if(OpenRecordSet(rs,strSQL)if(!rs.IsFieldNull(0l)rs.GetCollect(_T(消费总额),strSum);rs.GetCollect(_T(最高消费),strHighest);strSQL.Format(_T(SELECT e_no AS 条目编号,e_tag AS 条目名称,e_class AS 消费类型,e_price AS 单价,e_quantity AS 数量,e_date AS 购买时间,e_desc
29、ription AS 备注FROM%s WHERE%s ORDER BY e_no),m_strTable,strStatement);if(OpenRecordSet(rs,strSQL)strCount.Format(_T(%d),rs.GetRecordCount();CMainFrame*pMainFrame=(CMainFrame*)theApp.m_pMainWnd;CEntryGrid*pEntryGrid=(CEntryGrid*)pMainFrame-GetActiveView();pEntryGrid-ListData(&rs);m_pEditCount-SetEditTe
30、xt(strCount);m_pEditSum-SetEditText(strSum);m_pEditHighest-SetEditText(strHighest);系统测试方案和测试报告 6.1 系统测试 6.1.1 错误数据 登录测试 用户名错误 密码错误 修改用户测试 价格非数字 数量非数字 类别重复 6.1.2 正确数据 添加类别 添加消费 结果图 搜索测试(精确搜索)搜索测试(模糊搜索)统计测试 安装和使用说明 7.1 安装 该程序为绿色程序,不需要安装,附带 Access 数据库文件放在同级目录下,就可以直接运行。7.2 使用说明 打开程序后出现登陆提示框,输入用户名:admin,
31、密码:admin,之后进入主界面,如下图所示 编辑类别 在类别编辑框里输入类别,点击“添加类别”,就完成添加类别的操作,相应的,你可以在这个面板中删除一个选中的类别。编辑消费 在条目区域填写消费的信息,然后点击添加条目,就完成添加消费的操作,也可以在下列列表中选择一个条目进行编辑 搜索 点击顶部的选项卡切换到搜索面板,选择进行搜索的字段,然后输入搜索关键字,再点击“精确搜索”就可以进行精确搜索了,如果需要进行模糊搜索,点击搜索按钮的下拉箭头,切换到模糊搜索模式,点击搜索就可以进行模糊搜索了。统计 点击顶部的选项卡切换到统计面板,选择需要统计的时间段,然后点击统计,就会将时间段内的消费统计出来,这时候用户可以点击下面的“导出统计表”,将会弹出保存对话框,用户选定路径后,将统计结果导出。使用技巧 用户可以搜索指定的消费出来(参考搜索),然后切换到统计面板,点击“导出统计表”也可以将搜索的结果导出。修改用户资料 点击主菜单按钮,选择修改用户资料,进入修改用户资料界面,输入旧用户的资料和新用户资料,验证成功后就修改了用户信息。参考文献 1、王珊 主编 数据库系统概论(第四版)高等教育出版社 2、李代平 主编 软件工程(第二版)冶金工业出版社 3、姚领田 编著 精通 MFC 程序设计 人民邮电出版社
限制150内