失物招领课设报告--哈工大_第1页
失物招领课设报告--哈工大_第2页
失物招领课设报告--哈工大_第3页
失物招领课设报告--哈工大_第4页
失物招领课设报告--哈工大_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Harbin Institute of Technology at Weihai数据结构课程设计报告设计题目 失物招领助手 院 系: 计算机科学与技术学院 班 级: 学 号: 设 计 者: 需要程序的留下联系方式 哈尔滨工业大学(威海)二零壹壹年六月301项目计划21.1问题定义21.2可行性分析21.2.1.技术上的可行性分析21.2.2进度上的可行性分析21.2.3收益上的可行性分析31.3项目总体任务31.3.1项目总体任务图32.需求分析52.1需要解决的问题52.2过程中可能遇见的问题63概要设计与算法思想阐述73.1总流程图73.2 算法思想阐述83.2.1. 列表的初始化(基于文件存取)83.2.2 查找算法的设计93.2.2 删除及修改算法设计94详细设计与算法分析94.1 广度优先遍历模块94.1.1 功 能94.1.2. 流程图104.1.3. 存储结构与算法分析105数据测试与分析116帮助文档126.1使用说明126.2界面127收获与体会178参考文献189附源代码191项目计划1.1问题定义在日益忙碌的现代生活中,我们每天都有繁忙的事要做,就算是在大学校园里也是如此。因此,丢失物品的事件屡见不爽。有些人拾到东西,但却不知道谁是失主;有些人丢失了东西,进而惊慌失措。我想,能不能有一个公众的信息平台来解决这个问题呢?作为哈工大的一员,有人或许会说,不是有个失物招领中心吗?但是我想说的是,失物招领中心也不可能白天12小时都有人在工作。或许有人又会说,观海听涛论坛不是有个失物招领板块吗?但我想说的是,学校有很大一部分同学是没有电脑的,特别是那些刚来学校的新同学。我在想,如何一并解决上述的两个问题呢。于是,我想设计一个系统,在公众场所能利用的系统。我想设计一个失物招领助手这么一个系统,这个系统能让我们及时的刊登寻物启事,了解到最新的失物招领信息。当然更具体的功能可以进一步的优化。我们可以把这个系统安置在例如,图书馆大厅公众电脑上。这样,任何一个同学都能及时的刊登自己的失物信息,及时的了解招领信息。1.2可行性分析 1.2.1.技术上的可行性分析根据实际情况,要完成失物招领系统,其核心内容在于:(1)能够正确地对文件进行读取操作;(2)熟悉数据结构中的有关排序查找的算法;(3)能设计出人性化的用户界面以及对界面进行进一步的美化;1.2.2进度上的可行性分析从课设任务发布开始,有足够的时间做准备,可以从各方面查找资料。1.2.3收益上的可行性分析通过做课程设计,能够测试我们对C语言,数据结构的学习程度;并且我们运用软件工程的思想来对课程设计的各个阶段进行规划,有助于加深对软件设计的理解程度,在设计过程中对数据结构的各方面知识的运用也能使我们收益非浅。我们通过课设,还可以学习到许多课本知识之外的东西。1.3项目总体任务及小组任务分配1.3.1项目总体任务图图2-1项目总体任务图 2.需求分析2.1需要解决的问题算法是程序组成的主要部分,而算法的主要原则就是高效性与低存储性。现在需要的解决的主要问题是如何能在实现功能的基础上设计算法。如何利用数据结构中的查找与排序结构实现按姓名查找与按时间排序这一浏览功能。掌握list control控件的用法。当然界面的优化也是一个重要的问题。2.2过程中可能遇见的问题(1) 文件的读写操作需要花时间了解(2) 排序的方式有很多种,选取简单而又有效的算法(3) 自己设计算法实现修改等(4) 界面美化有很多种方法,选取合适又美观的界面美化3概要设计与算法思想阐述3.1总流程图图3-1总流程图3.2 算法思想阐述3.2.1. 列表的初始化(基于文件存取)存储结构:数据于txt文件中算法思想:基于文件的操作,由于txt文件的存取是对每行数据进行读取及写入。所以,我的方法就是设置循环,控制文件的行数,用字符串的读取方式,来实现文件数据的读取。3.2.2 查找算法的设计基于数据结构中的的顺序查找算法,设置循环,利用字符串匹配,找到需要修改的行,设置一个变量,用来记录列表的行数,循环的搭配实现查找结构在列表显示。2.2 删除及修改算法设计 设置一个过渡文件,用来临时存储数据。删除时,每读取一行数据就存入临时文件中,当读取到删除那一行时就跳过,直到文件的数据全部被查找过一遍,把文件置空,最后把过渡文件中的数据复制到文件中,把过渡文件置空,实现删除功能。在修改算法的实现中,当读取到需要修改的那一行时就把那一行替换,其余地方与删除算法相同。4详细设计与算法分析4.1 游客模块4.1.1 功 能游客模块中实现信息的查找,及失物信息的刊登,给管理员留言等。4.1.2. 流程图4.1.3.存储结构与算法分析(1) 存储结构:存放txt文件中。 (2) 算法分析:利用文件的函数,把指针指向文件末尾,进行数据添加。(3) 核心分析:char* pszFileName=ClaimingData.txt; CStdioFile myFile; CFileException fileException; if(myFile.Open(pszFileName,CFile:typeText|CFile:modeReadWrite),&fileException) CString strBuf; int Row=0;while(myFile.ReadString(strBuf) +Row; myFile.SeekToBegin(); /函数SeekToBegin将文件指针指向文件开始处int i=0;while (iRow) /如果没有运行到数据库的底部则一直执行CString str; myFile.ReadString(str); int m1=0,m2=0,m3=0,m4=0;for(int j=0;jstr.GetLength();j+) if(str.GetAt(j)= ) m1=j; break;for(int j=m1+1;jstr.GetLength();j+)if(str.GetAt(j)= ) m2=j; break;for(int j=m2+1;jstr.GetLength();j+)if(str.GetAt(j)= ) m3=j; break;for(int j=m3+1;jstr.GetLength();j+)if(str.GetAt(j)= ) m4=j; break;CString Temp1=str.Mid(0,m1);CString Temp2=str.Mid(m1+1,m2-m1-1);CString Temp3=str.Mid(m2+1,m3-m2-1);CString Temp4=str.Mid(m3+1,m4-m3-1);CString Temp5=str.Mid(m4+1,str.GetLength()-m4-1);m_list.InsertItem(i, Temp1 );m_list.SetItemText(i, 1 ,Temp2 ); m_list.SetItemText(i, 2 ,Temp3 ); m_list.SetItemText(i, 3 ,Temp4 ); m_list.SetItemText(i, 4 ,Temp5 ); i + ; else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause);UpdateData(true);if(m_pname.IsEmpty()|(m_lostth.IsEmpty()|(m_phone.IsEmpty()|(m_qq.IsEmpty()|(m_des2.IsEmpty()AfxMessageBox(信息不完整,请输入完整信息!);elseCString Temp=m_pname + +m_lostth+ + m_phone+ +m_qq+ + m_des2;char* pszFileName=LostPropertydata.txt; CStdioFile myFile; CFileException fileException; if(myFile.Open(pszFileName,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileException) CString strBuf; int Row=0;while(myFile.ReadString(strBuf) if(strBuf=Temp)AfxMessageBox(已存在相同信息,不需要添加!);return;+Row; /Row存储的是txt的行数myFile.SeekToEnd();myFile.WriteString(n); myFile.WriteString(Temp); myFile.Close();m_lostlist.InsertItem(Row,m_pname );m_lostlist.SetItemText(Row,1,m_lostth );m_lostlist.SetItemText(Row,2,m_phone );m_lostlist.SetItemText(Row,3,m_qq );m_lostlist.SetItemText(Row, 4 ,m_des2 ); /将添加上去的条目显示在listcontrol上 else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); m_pname.Empty();m_lostth.Empty();m_phone.Empty();m_qq.Empty();m_des2.Empty();UpdateData(false);5数据测试与分析自己选取数据进行测试,大体上没问题。程序有点简单,可以扩展。目前程序已知的缺陷有:1.文件存储数据,有时会自动把指针指向文件尾,导致出现空行。2.有部分数据无法删除。6帮助文档6.1使用说明双击下图中的Lost Property Pelper.exe文件(注:XPCorona.ssk和SkinPlusPlusDLL.dll文件必须在同一目录中,其为皮肤文件和皮肤的动态链接库),便出现图7-2-1的对话框。 图6-1 使用说明图6.2界面1.点击程序图标后显示主界面如下图:图6-2-1 主界面2.点击游客入口中的“点击进入”显示如下界面: 图6-2-2 新建工程界面3.在游客界面可以进行失物上报,招领信息查询,给管理员留言,刊登失物信息。图6-2-3 运行中截图4.在密码修改板块中可以进行密码修改:图6-2-4 修改密码5. 管理员密码登陆后:图6-2-5 管理员窗口6. 接收拾物信息,及对所有信息进行修改删除操作。7. 文件存储: 图6-2-6 详细内容图7收获与体会数据结构的课程设计,今天终于验收了。虽然不是很完备,但是总体还是一个比较能体现数据结构知识点能力的程序了,。看着自己的成果,真的很高兴,很有成就感. 其实做课设,自己懂的东西确实不多,但是只要肯于研究学习,我们还是能学到很多东西的。通过做课设,我们学会许多课外的扩展知识,让我们的学识增长了。我相信只要努力了,就会有收获的。8参考文献清华大学出版社:数据结构(c语言版)9附源代码CDialogEx:OnInitDialog();m_list.ModifyStyle(0L,LVS_REPORT); /招领栏,表单控件的各种属性m_list.ModifyStyle(0L,LVS_SINGLESEL);m_list.ModifyStyle(0L,LVS_SHOWSELALWAYS);m_list.ModifyStyle(0L,LVS_NOSORTHEADER);m_list.SetExtendedStyle(LVS_EX_GRIDLINES); m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT ); m_list.InsertColumn(0,_T(招领物品类型); m_list.InsertColumn(1,_T(拾物时间); /初始化招领栏的内容标题m_list.InsertColumn(2,_T(物品数量);m_list.InsertColumn(3,_T(拾物地点);m_list.InsertColumn(4,_T(物品描述);m_list.SetColumnWidth(0,100); /初始化招领栏标题的长度m_list.SetColumnWidth(1,80);m_list.SetColumnWidth(2,80); m_list.SetColumnWidth(3,80);m_list.SetColumnWidth(4,250);char* pszFileName=ClaimingData.txt; CStdioFile myFile; CFileException fileException; if(myFile.Open(pszFileName,CFile:typeText|CFile:modeReadWrite),&fileException) CString strBuf; int Row=0;while(myFile.ReadString(strBuf) +Row; myFile.SeekToBegin(); /函数SeekToBegin将文件指针指向文件开始处int i=0;while (iRow) /如果没有运行到数据库的底部则一直执行CString str; myFile.ReadString(str); int m1=0,m2=0,m3=0,m4=0;for(int j=0;jstr.GetLength();j+) if(str.GetAt(j)= ) m1=j; break;for(int j=m1+1;jstr.GetLength();j+)if(str.GetAt(j)= ) m2=j; break;for(int j=m2+1;jstr.GetLength();j+)if(str.GetAt(j)= ) m3=j; break;for(int j=m3+1;jstr.GetLength();j+)if(str.GetAt(j)= ) m4=j; break;CString Temp1=str.Mid(0,m1);CString Temp2=str.Mid(m1+1,m2-m1-1);CString Temp3=str.Mid(m2+1,m3-m2-1);CString Temp4=str.Mid(m3+1,m4-m3-1);CString Temp5=str.Mid(m4+1,str.GetLength()-m4-1);m_list.InsertItem(i, Temp1 );m_list.SetItemText(i, 1 ,Temp2 ); m_list.SetItemText(i, 2 ,Temp3 ); m_list.SetItemText(i, 3 ,Temp4 ); m_list.SetItemText(i, 4 ,Temp5 ); i + ; else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause);/文件列表初始化UpdateData(true);if(m_xmima.IsEmpty()AfxMessageBox(请输入新密码!);elsechar* pszFileName=ForLogin.txt; char* pszFileNameTemp=Transition.txt; CStdioFile myFile; CStdioFile myFileTemp; CFileException fileException; CFileException fileExceptionTemp; CString m_yonghu;m_yonghu+=user;CString Temp=m_yonghu + +m_xmima;POSITION pos = m_change_list.GetFirstSelectedItemPosition();/获取光标的位置if( pos = NULL )AfxMessageBox(请选中需要修改的信息条目!); /如果没有选中return;if(MessageBox(你真的要修改选择信息吗?,修改,MB_YESNO)=IDNO)return;/弹出对话框提示用户是否真的需要删除int Row=0,k=0;int CurUser=m_change_list.GetNextSelectedItem(pos); /获取选择的位置CString CurUserID = m_change_list.GetItemText(CurUser,0);if(myFile.Open(pszFileName,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileException) CString strBuf; int i=0;while(myFile.ReadString(strBuf) +Row; /Row存储的是txt的行数int i=0;for(i=0;istrBuf.GetLength();i+)if(strBuf.GetAt(i)= )if(CurUserID=strBuf.Mid(0,i) k=Row;/第K行需要修改break;else break;/if/for/while else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); myFile.Close();if(myFileTemp.Open(pszFileNameTemp,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileExceptionTemp)&myFile.Open(pszFileName,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileException) CString strBuf; for(int i=0;iRow;i+)if(i!=k-1)myFile.ReadString(strBuf);myFileTemp.WriteString(strBuf);myFileTemp.WriteString(n);elsemyFile.ReadString(strBuf);myFileTemp.WriteString(Temp);myFileTemp.WriteString(n);else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); myFile.Close();myFileTemp.Close();if(myFileTemp.Open(pszFileNameTemp,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileExceptionTemp)&myFile.Open(pszFileName,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileException) CString strBuf; for(int i=0;iRow;i+)myFileTemp.ReadString(strBuf);myFile.WriteString(strBuf);myFile.WriteString(n);else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); myFile.Close();myFileTemp.SetLength(0);m_change_list.SetItemText(k-1, 0, m_yonghu); m_change_list.SetItemText(k-1, 1 ,m_xmima); myFileTemp.Close();m_xmima.Empty();UpdateData(false);AfxMessageBox(密码修改成功!);/密码修改UpdateData(true);if(m_name.IsEmpty()|(m_time.IsEmpty()|(m_number.IsEmpty()|(m_size.IsEmpty()|(m_des.IsEmpty()AfxMessageBox(信息不完整,请输入完整信息!);elseCString Temp=m_name + +m_time+ + m_number+ +m_size+ + m_des;char* pszFileName=ClaimingData.txt; CStdioFile myFile; CFileException fileException; if(myFile.Open(pszFileName,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileException) CString strBuf; int Row=0;while(myFile.ReadString(strBuf) if(strBuf=Temp)AfxMessageBox(已存在相同信息,不需要添加!);return;+Row; /Row存储的是txt的行数myFile.SeekToEnd();myFile.WriteString(n); myFile.WriteString(Temp); myFile.Close();m_list.InsertItem(Row,m_name );m_list.SetItemText(Row,1,m_time );m_list.SetItemText(Row,2,m_number );m_list.SetItemText(Row,3,m_size );m_list.SetItemText(Row, 4 ,m_des ); /将添加上去的条目显示在listcontrol上 else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); m_name.Empty();m_time.Empty();m_number.Empty();m_size.Empty();m_des.Empty();UpdateData(false);/添加操作UpdateData(true);char* pszFileName=ClaimingData.txt; char* pszFileNameTemp=Transition.txt; CStdioFile myFile; CStdioFile myFileTemp; CFileException fileException; CFileException fileExceptionTemp; POSITION pos = m_list.GetFirstSelectedItemPosition();/获取光标的位置if( pos = NULL )AfxMessageBox(请选择要删除的信息); /如果没有选中return;if(MessageBox(你真的要删除选择的信息吗?,删除,MB_YESNO)=IDNO)return;/弹出对话框提示用户是否真的需要删除int Row=0,k=0;int CurUser=m_list.GetNextSelectedItem(pos); /获取选择的位置CString CurUserID = m_list.GetItemText(CurUser,0);if(myFile.Open(pszFileName,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileException) CString strBuf; int i=0;while(myFile.ReadString(strBuf) +Row; /Row存储的是txt的行数int i=0;for(i=0;istrBuf.GetLength();i+)if(strBuf.GetAt(i)= )if(CurUserID=strBuf.Mid(0,i) k=Row;/第K行需要删除break;else break;/if/for/while else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); myFile.Close();if(myFileTemp.Open(pszFileNameTemp,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileExceptionTemp)&myFile.Open(pszFileName,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileException) CString strBuf; for(int i=0;iRow;i+)myFile.ReadString(strBuf);myFileTemp.WriteString(strBuf);myFileTemp.WriteString(n);else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); myFile.Close();myFileTemp.Close();if(myFileTemp.Open(pszFileNameTemp,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileExceptionTemp)&myFile.Open(pszFileName,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileException) int LenthDelete=0;CString strBuf; for(int i=0;iRow;i+)if(i=k-1) myFileTemp.ReadString(strBuf);LenthDelete=strBuf.GetLength();continue;myFileTemp.ReadString(strBuf);myFile.WriteString(strBuf);myFile.WriteString(n);int LengthTemp=myFile.GetLength();myFile.SetLength(LengthTemp-LenthDelete-2);myFileTemp.SetLength(0);else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); myFile.Close();myFileTemp.Close();m_list.DeleteItem(CurUser);/删除模块UpdateData(true);if(m_name.IsEmpty()|(m_time.IsEmpty()|(m_number.IsEmpty()|(m_size.IsEmpty()|(m_des.IsEmpty()AfxMessageBox(没有添加完整的修改信息,无法修改。先添加完整的修改信息!);elsechar* pszFileName=ClaimingData.txt; char* pszFileNameTemp=Transition.txt; CStdioFile myFile; CStdioFile myFileTemp; CFileException fileException; CFileException fileExceptionTemp; CString Temp=m_name + +m_time+ + m_number+ +m_size+ + m_des;POSITION pos = m_list.GetFirstSelectedItemPosition();/获取光标的位置if( pos = NULL )AfxMessageBox(请选中需要修改的信息条目!); /如果没有选中return;if(MessageBox(你真的要修改选择信息吗?,修改,MB_YESNO)=IDNO)return;/弹出对话框提示用户是否真的需要删除int Row=0,k=0;int CurUser=m_list.GetNextSelectedItem(pos); /获取选择的位置CString CurUserID = m_list.GetItemText(CurUser,0);if(myFile.Open(pszFileName,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileException) CString strBuf; int i=0;while(myFile.ReadString(strBuf) +Row; /Row存储的是txt的行数int i=0;for(i=0;istrBuf.GetLength();i+)if(strBuf.GetAt(i)= )if(CurUserID=strBuf.Mid(0,i) k=Row;/第K行需要修改break;else break;/if/for/while else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); myFile.Close();if(myFileTemp.Open(pszFileNameTemp,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileExceptionTemp)&myFile.Open(pszFileName,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileException) CString strBuf; for(int i=0;iRow;i+)if(i!=k-1)myFile.ReadString(strBuf);myFileTemp.WriteString(strBuf);myFileTemp.WriteString(n);elsemyFile.ReadString(strBuf);myFileTemp.WriteString(Temp);myFileTemp.WriteString(n);else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); myFile.Close();myFileTemp.Close();if(myFileTemp.Open(pszFileNameTemp,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileExceptionTemp)&myFile.Open(pszFileName,CFile:typeText|CFile:modeNoTruncate|CFile:modeCreate|CFile:modeReadWrite),&fileException) CString strBuf; for(int i=0;iRow;i+)myFileTemp.ReadString(strBuf);myFile.WriteString(strBuf);myFile.WriteString(n);else TRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); myFile.Close();myFileTemp.SetLength(0);m_list.SetItemText(k-1, 0, m_name); m_list.SetItemText(k-1, 1 ,m_time); m_list.SetItemText(k-1, 2 ,m_number); m_list.SetItemText(k-1, 3 ,m_size);m_list.SetItemText(k-1, 4 ,m_des);myFileTemp.Close();m_name.Empty();m_time.Empty();m_number.Empty();m_size.Empty();m_des.Empty();UpdateData(false);/修改模块UpdateData(true);if(m_pname.IsEmpty()|(m_lostth.IsEmpty()|(m_phone.IsEmpty()|(m_qq.IsEmpty()|(m_des2.IsEmpty()AfxMessageBox(信息不完整,请输入完整信息!);elseCString Temp=m_pname + +m_lostth+ + m_phone+ +m_qq+ + m_d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论