手机通话记录管理系统设计报告

上传人:nu****n 文档编号:164006131 上传时间:2022-10-24 格式:DOC 页数:16 大小:1.27MB
返回 下载 相关 举报
手机通话记录管理系统设计报告_第1页
第1页 / 共16页
手机通话记录管理系统设计报告_第2页
第2页 / 共16页
手机通话记录管理系统设计报告_第3页
第3页 / 共16页
点击查看更多>>
资源描述
C+面向对象课程设计报告院(系): 计算机工程学院 专业: 计算机网络 学生姓名: 班级:学号: 题目: 手机通话记录管理系统 起迄日期: 设计地点: 指 导 教 师: 完成日期: 2012 年 5 月 4 日一、 课程设计目的进行本次C+面向对象程序设计课程设计主要是在学习了C+这门面向对象语言之后,依靠自己的理解自学MFC,掌握一种可视化编程的方法,加深对C+这门语言的理解并强化记忆。同时,可以提高运用C+编程语言解决实际问题的能力,在进行课程设计的过程中对于一些算法的设计可以使我们更好的应对C+以及其他编程语言的综合编程能力,还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。二、 课程设计内容与实现的功能 1)设计内容:1、 模拟手机的通话记录功能,具有记录最新20个未接电话、已接电话、已拨电话(并记录时间,并按时间排序);2、 相同的记录只记录最新的一个;3、 符合课题的要求,实现响应功能,可以增加其他功能或者修饰,使程序更加完善合理;4、 要求界面友好美观,操作简便易行。2) 实现基本功能:1、模拟手机的通话记录功能,具有记录最新20个未接电话、已接电话、已拨电话(并记录时间,并按时间排序);2、 相同的记录只记录最新的一个;3)基于上述功能,又添加了几个功能,使程序模拟效果更合理些,添加功能包括:1、 简易的电话簿电话薄功能:只实现能够读取出数据库中存储的10个联系人的姓名以及电话号码,可以根据个人需要往数据库中添加自己的联系人,之所以不在程序界面实现添加功能是考虑到可能这样会偏离设计的主题,不利于界面的美观。2、 实际的来模拟手机的拨打、接听、挂断、等待等的功能,将操作的结果存入拨打、未接、已接等的记录中,可以更好的实现通话记录的管理这一功能。3、 考虑到个人手机的通话管理功能,在本通话记录管理系统中,添加了一个删除记录的功能,可以将界面显示的记录与数据库中对应的记录同步删除,更加方便易行。三、 系统分析与设计1、 系统分析1) 基于本系统设计的要求,我首先做的是回想自己用过的手机中通话记录的管理有一些什么样的功能,初步分析,如果要真正的实现一个手机通话记录管理系统的模拟这两个功能是不够的,还需要有删除记录的功能。本系统主要实现的就是对于电话号码的操作,可以将从界面中获得的电话号码添加的数据库中,对数据库进行操作,从而间接的在界面上对电话号码进行操作。2) 在系统中初步确定的功能有:(1)模拟手机的拨打、接听、挂断、等待等的功能,(2)将操作的结果存入拨打、未接、已接等的数据库表中(3)通过界面按钮可以查看数据库中存储的拨打、未接、已接号码,也可以同步的将界面显示的与数据库中的记录删除。2、系统设计:2.1、模块设计:对于这一课题的总体模块设计:1) 首先需要对于打电话接电话的过程进行模拟,对此我准备设置一个拨打电话的编辑框,里面输入要拨打的电话号码,还有设置一个来电号码的编辑框,用来接收拨打号码编辑中的号码,相当于一个打电话接电话的模拟,不过来电号码也可以自己输毕竟可能来自于未知的号码。2) 对于“拨打”按钮下我设置一个void CPhoneRecordDlg:OnDo()函数,当单击这个按钮时候执行里面的代码进行逻辑处理完成存储拨打号码的操作,同理分别设置了“接收”、“等待。”、“挂断”三个按钮,分别为void CPhoneRecordDlg:OnReceive() 、void CPhoneRecordDlg:OnWait() 、void CPhoneRecordDlg:OnInterrupt() 在这三个函数体下进行对应的逻辑处理记录相应的记录以便后面进行查看删除等的操作。3) 我们需要查看的是拨打、挂断等的记录,所以相应的我又设置了三个按钮“查看已拨电话”、“查看已接电话”、“查看未接电话”对应的函数分别voidCPhoneRecordDlg:OnCheckdo()、void CPhoneRecordDlg:OnCheckrec() 、void CPhoneRecordDlg:OnChecknorec()完成的操作时当点击这三个按钮时会分别弹出对应的子对话框进行查看或者删除。 4) 下面的操作就是对于通话记录的查看以及删除操作,在拨打中,弹出的对应子对话框中分别添加两个按钮:“查看”、“删除”,当当单击“查看”按钮时,会从对应的数据库表中查询出前20条最新记录并显示在列表框中函数体为void CHdoneDlg:OnCheckd(),要将列表框设置一个control类型变量,通过调用InsertString()函数来向列中添加记录,然后单击删除的时候调用函数体void CHdoneDlg:OnDeletedo() ,分别调用GetCurSel()获取选择列,m_list1.GetText(i,text)和m_list1.DeleteString(i)进行对应列的删除操作,删除列表框中选中项的同时,通过数据函数的操作将数据库中的内容同步删除。5) 添加一个简单的“电话薄”功能,用来从数据库中查找部分熟识人电话进行直接拨打,我分别从数据库中查出英文以及利用CStdioFile file对于txt文本进行操作读取出里面的中文+号码显示在两个对话框中。2.2、数据库表设计:1)电话薄表(numberbook):设置了一列bid 自增以及存储号码的一列bnumber如下:2)拨打电话记录表(dorecord):设置了did自增、拨打电话号码列dnumber以及记录日期时间的ddate如下:3)未接电话记录表(norecrecord):设置了nid自增、未接电话号码列nonumber和记录日期时间的nodate如下:4)已接电话记录表(receiverecord):设置了rid自增、已接电话号码列rnumber和记录来电日期时间的rdate如下:2.3、算法流程图:四、系统测试与调试分析1、系统测试测试说明测试名称手机通话记录管理系统测试目的验证系统通过电话薄拨打号码的流程测试技术单元测试测试方法黑盒测试法测试用例测试内容电话薄功能中选择拨打功能测试步骤选择电话薄中的号码并拨打选择电话薄中的号码但不拨打不选择电话薄中的号码不拨打测试数据电话薄中选择号码,按“拨打”电话薄中选择号码,不按“拨打”不选择电话薄中选择号码,不按“拨打”预期结果电话薄中选择号码拨打成功并加入到数据库中电话薄中选择号码进入拨打编辑框但没加入到数据库中电话薄中选择号码不加入编辑框中测试结果与预期相符与预期相符与预期相符2、调试分析:1)遇到问题:在电话簿中选择了一条记录之后如何单击一个按钮从列表框中读取选中的记录并加入编辑框中开始不会解决,主要是对于列表框的应用不是很熟悉。 解决方法:通过网上查找相关的资料比如列表框的操作都如何实现等的方法,了解到应该对于列表框关联一个control型的变量,然后利用这个变量的GetCurSel()函数来获取当前选中的行号,然后利用GetText(i,text)函数获取行号中的内容给text,再利用SetDlgItemText(IDC_EDIT1,text);将text的值添加到编辑框,就可以单击拨打完成拨打操作了。具体代码如下:CString text;int i=m_cb1.GetCurSel();/获得选中的行号if(i0)/先判断一下有没有选中行MessageBox(无电话号码!);elsem_cb1.GetText(i,text);/将选中行号的内容赋给textSetDlgItemText(IDC_EDIT1,text);/将text的内容添加到编辑框中2)回顾展望:对于电话薄的模拟是添加的一个功能,功能不是很齐全是考虑到可能会脱离“手机通话记录”管理这一课题。数据库中对于汉字的支持不好,以后可以想办法加以改进使界面能够直接从数据库中读取并显示,是程序界面更加的完善可观。五、用户手册1)此系统运行在windows xp或win7操作系统环境下,不需要安装,直接双击PhoneRecord.exe即可运行程序2)以下流程将指导您如何使用该软件:1、双击PhoneRecord.exe可执行文件运行手机通话记录管理系统,弹出以下操作界面:2、首先可以查看电话簿功能,单击“电话簿”按钮,会出现以下界面:其中,左面的汉字姓名+电话号码是从记事本numberbook.txt里面读取的,而右面的编辑框中出现的是从数据库中查找出的联系人+电话号码,可以按顺序相互对照,适合国人与外国人。3、可以在右面的电话簿中选中一条记录然后单击选择:会将选择的一条记录加入到拨打的编辑框中,如果此时单击拨打,就会将此时拨打电话编辑框中的内容加入到拨打电话数据库中,而且会将拨打的电话加入到来电号码编辑框中,也可以自己输入不同位数的电话号码然后单击拨打,这是模拟拨打的过程,显示结果如下:4、在上面的界面中,可以单击“接收”按钮,会出现以下界面,并且将来电号码后面的编辑框中的内容加入到已接电话数据库的记录中以待查看:5、同样,如果在3所示的界面中,单击“等待”按钮,程序会等待10秒钟,然后出现以下界面并将编辑框内容加入到未接数据库中:这是模拟的来电因个别原因未来得及接系统自动挂断的过程。6、如果在3所示的界面中,直接单击“挂断”,会直接将编辑框内容加入到未接数据库中,出现以下界面:这是模拟因有事而不方便接听直接挂断的过程。7、可以分别单击“已拨电话”,“已接电话”,“未接电话”来查看电话记录,这里举例“查看已接电话”,单击之后会弹出以下界面:单击“查看”按钮,系统会从数据库中将已拨电话的记录读取最新的前20条,以下为查询出的界面:此时若选择一条记录单击选择,然后单击“删除”按钮之后,会在列表框中删除该条记录,同时数据库中的记录也会被删除在以上界面中如果单击完“确定”之后再单击“查看”按钮,就会将数据库中做删除操作之后的前20条数据重新读取并显示出来。其他。“查看未接电话”以及“查看已拨电话”的功能与此功能类似,可以仿照此功能进行操作。8、在以下界面中如果单击“清除”,会将拨打电话编辑框和来电号码编辑框中的内容全部清除。这是清除功能。六、程序清单1、与mysql数据库连接代码段:CDatabase db;/创建一个数据库连接对象 if(!db.IsOpen()/判断数据库是否已经被打开BOOL bflag=db.Open(phone,false,false,ODBC;DNS=phone;UID=root;PWD=123);/连接数据库if(!bflag)/判断是否连接上 AfxMessageBox(打开数据库失败!);2、 拨打并连同时间一同加入数据库功能代码:void CPhoneRecordDlg:OnDo() /拨打功能函数体CString str1;CString str2;CTime tm;/创建一个系统时间对象tm=CTime:GetCurrentTime();/获取当前系统时间str1=tm.Format(%Y-%m-%d %X);UpdateData();str2=m_do;SetDlgItemText(IDC_EDIT2,str2);/数据库连接CDatabase db; if(!db.IsOpen()/判断数据库是否已经被打开BOOL bflag=db.Open(phone,false,false,ODBC;DNS=phone;UID=root;PWD=123);/连接数据库if(!bflag) AfxMessageBox(打开数据库失败!); CRecordset rs(&db);/绑定数据库结果集CString strsql;strsql=select * from dorecord;rs.Open(CRecordset:forwardOnly, strsql);/查询数据,获得结果集while(!rs.IsEOF()/遍历数据库结果集CString dnum;rs.GetFieldValue(dnumber,dnum);/MessageBox(dnum);if(dnum=str2) CString strSQL1;strSQL1.Format(delete from dorecord where dnumber=%s,dnum);/从数据库中删除相同的旧记录db.ExecuteSQL(strSQL1);rs.MoveNext();CString strSQL; strSQL.Format(insert into dorecord(dnumber,ddate) values(%s,%s),str2,str1);/向数据库中插入最新的记录db.ExecuteSQL(strSQL);3、 单击“查看*记录”按钮弹出子对话框代码:void CPhoneRecordDlg:OnCheckrec() /查看已接记录函数体CReceiveDlg dlg;/创建一个子对话框类对象dlg.DoModal();/子对话框类的对象调用模态函数弹出子对话框void CPhoneRecordDlg:OnChecknorec() /查看未接记录函数体CNoreceiveDlg dlg;dlg.DoModal();void CPhoneRecordDlg:OnCheckdo() /查看已拨打电话函数体/ TODO: Add your control notification handler code hereCHdoneDlg dlg;dlg.DoModal();4、 删除对话框中的内容,即“清除”按钮void CPhoneRecordDlg:OnDrop() SetDlgItemText(IDC_EDIT1, );/将编辑框的内容置为空SetDlgItemText(IDC_EDIT2, );UpdateData(true);/更新数据5、 等待10秒后挂断代码:void CPhoneRecordDlg:OnWait() /等待挂断函数体Sleep(10000);/休眠10秒钟执行下面的代码/SetTimer(1,1000,NULL);CString nstr1;CString nstr2;CTime ntm;ntm=CTime:GetCurrentTime();/获得系统当前时间nstr2=ntm.Format(%Y-%m-%d %X);UpdateData(true);nstr1=m_receive;/对数据库进行操作的部分CDatabase db;/创建数据库对象 if(!db.IsOpen()/判断数据库是否已经被打开BOOL bflag=db.Open(phone,false,false,ODBC;DNS=phone;UID=root;PWD=123);/连接数据库if(!bflag) AfxMessageBox(打开数据库失败!);CRecordset rs(&db);/绑定数据源,rs是是查询到的结果集CString strsql;strsql=select * from norecrecord;rs.Open(CRecordset:forwardOnly, strsql);/查询数据,获得结果集while(!rs.IsEOF()/遍历结果集函数体CString nnum;rs.GetFieldValue(nonumber,nnum);/MessageBox(dnum);if(nnum=nstr1) CString strSQL1;/从数据库中查找相同的记录并删除strSQL1.Format(delete from norecrecord where nonumber=%s,nnum);db.ExecuteSQL(strSQL1);rs.MoveNext();CString strSQL;/在数据库中插入新的数据 strSQL.Format(insert into norecrecord(nonumber,nodate) values(%s,%s),nstr1,nstr2); db.ExecuteSQL(strSQL);MessageBox(电话来了,您未接收!);七、体会与自我评价通过这段时间对于C+程序设计的复习,我把以前学习过的编程知识又系统地串接了一遍,这次课程设计对自己所学知识起到了检测和提高的作用,把在大学所学的编程知识系统的联系在了一起,进一步加深对所学知识的理解。程序的设计中遇到不少问题,其中最为突出的一个问题就是作为一个管理系统MFC界面中要怎么与mysql数据库相连接,在具体实现的过程中,我尝试过各种的方法比如ado和mfc本身对于mysql提供的接口这几种方法,最终还是通过odbc的方式完成了这一任务,这一过程感觉学到了很多东西,通过与同学的讨论与交流,从下载哪一个版本的odbc开始到odbc该如何去配置,再到程序里面具体的代码该怎么去写,最终解决了问题之后的那种心情与感觉是很不错的,这对于自己的自信心又是一次提高,同时也锻炼了自己如何与同学交流以及上网查资料的能力。还有界面美化问题,在MFC界面中插入各种图片,存在一个像素的问题,如果插入像素不适应会产生相片模糊的后果这样对于程序的美化效果是很不利的,通过网上看别人怎么处理,自己学习了思路,然后实践于程序中,最终做的界面比较的美观。课程设计完成后,感觉上最大的收获就是在设计之前要有一个清晰的思路和完整的设计提纲,在程序刚开始的阶段就要设计出一个稳定的界面,对各功能函数的作用做详细考虑,以避免后期设计中出现不必要的麻烦。自我感觉耐心在这次课程设计中起到很关键的作用,当调试一段代码出现未知的错误时而且反复改正反复出现这个错误时这时一定要平静心情耐心查资料问同学,当经过一段艰难的调试之后最终解决问题将会获得一种前所未有的成就感,这对于自信心的提升是很有帮助的。当然要做这一次课程设计基础的知识是不可缺少的,老师针对我们的情况设计了基础知识提问这一环节,鼓动我们积极的去对待学习过的基础知识,为此我们又将以前学习过的内容系统的复习了一遍,我想只有对这些所学得知识能够真正掌握并能加以运用,才算是达到了这一次课程设计的目的。八、参考文献1 李兰 任凤华. C+面向对象程序设计. 西安电子科技大学出版社,2010.92 孙鑫 MFC教学视频3 吕凤褚. C+语言程序设计,2版.北京:电子工业出版社,2007.84 姚领田 精通MFC程序设计 人民邮电出版社2007.55 杨秀金 张红梅 数据结构(第二版) 西安电子科技大学出版社 2007.9九、课程设计评价课程设计评价 成绩: 教师: 年 月 日
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 建筑工程


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!