失物招领课设报告哈工大.docx
- 文档编号:8022171
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:31
- 大小:662.40KB
失物招领课设报告哈工大.docx
《失物招领课设报告哈工大.docx》由会员分享,可在线阅读,更多相关《失物招领课设报告哈工大.docx(31页珍藏版)》请在冰豆网上搜索。
失物招领课设报告哈工大
HarbinInstituteofTechnologyatWeihai
数据结构课程设计报告
设计题目失物招领助手
院系:
计算机科学与技术学院
班级:
学号:
设计者:
需要程序的留下联系方式
哈尔滨工业大学(威海)
二零壹壹年六月
1.项目计划
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需要解决的问题
算法是程序组成的主要部分,而算法的主要原则就是高效性与低存储性。
现在需要的解决的主要问题是如何能在实现功能的基础上设计算法。
如何利用数据结构中的查找与排序结构实现按姓名查找与按时间排序这一浏览功能。
掌握listcontrol控件的用法。
当然界面的优化也是一个重要的问题。
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";
CStdioFilemyFile;
CFileExceptionfileException;
if(myFile.Open(pszFileName,CFile:
:
typeText|CFile:
:
modeReadWrite),&fileException)
{
CStringstrBuf;
intRow=0;
while(myFile.ReadString(strBuf))
++Row;
myFile.SeekToBegin();//函数SeekToBegin将文件指针指向文件开始处
inti=0;
while(i { CStringstr; myFile.ReadString(str); intm1=0,m2=0,m3=0,m4=0; for(intj=0;j for(intj=m1+1;j for(intj=m2+1;j for(intj=m3+1;j CStringTemp1=str.Mid(0,m1); CStringTemp2=str.Mid(m1+1,m2-m1-1); CStringTemp3=str.Mid(m2+1,m3-m2-1); CStringTemp4=str.Mid(m3+1,m4-m3-1); CStringTemp5=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("Can'topenfile%s,error=%u\n",pszFileName,fileException.m_cause); UpdateData(true); if((m_pname.IsEmpty())||(m_lostth.IsEmpty())||(m_phone.IsEmpty())||(m_qq.IsEmpty())||(m_des2.IsEmpty())) AfxMessageBox("信息不完整,请输入完整信息! "); else { CStringTemp=m_pname+''+m_lostth+''+m_phone+''+m_qq+''+m_des2; char*pszFileName="LostPropertydata.txt"; CStdioFilemyFile; CFileExceptionfileException; if(myFile.Open(pszFileName,CFile: : typeText|CFile: : modeNoTruncate|CFile: : modeCreate|CFile: : modeReadWrite),&fileException) { CStringstrBuf; intRow=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("Can'topenfile%s,error=%u\n",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使用说明 双击下图中的LostPropertyPelper.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"; CStdioFilemyFile; CFileExceptionfileException; if(myFile.Open(pszFileName,CFile: : typeText|CFile: : modeReadWrite),&fileException) { CStringstrBuf; intRow=0; while(myFile.ReadString(strBuf)) ++Row; myFile.SeekToBegin();//函数SeekToBegin将文件指针指向文件开始处 inti=0; while(i { CStringstr; myFile.ReadString(str); intm1=0,m2=0,m3=0,m4=0; for(intj=0;j for(intj=m1+1;j for(intj=m2+1;j for(intj=m3+1;j CStringTemp1=str.Mid(0,m1); CStringTemp2=str.Mid(m1+1,m2-m1-1); CStringTemp3=str.Mid(m2+1,m3-m2-1); CStringTemp4=str.Mid(m3+1,m4-m3-1); CStringTemp5=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("Can'topenfile%s,error=%u\n",pszFileName,fileException.m_cause); //文件列表初始化 UpdateData(true); if((m_xmima.IsEmpty())) AfxMessageBox("请输入新密码! "); else{ char*pszFileName="ForLogin.txt"; char*pszFileNameTemp="Transition.txt"; CStdioFilemyFile; CStdioFilemyFileTemp; CFileExceptionfileException; CFileExceptionfileExceptionTemp; CStringm_yonghu; m_yonghu+="user"; CStringTemp=m_yonghu+''+m_xmima; POSITIONpos=m_change_list.GetFirstSelectedItemPosition();//获取光标的位置 if(pos==NULL){ AfxMessageBox("请选中需要修改的信息条目! ");//如果没有选中 return; } if(MessageBox("你真的要修改选择信息吗? ","修改",MB_YESNO)==IDNO) return;//弹出对话框提示用户是否真的需要删除 intRow=0,k=0; intCurUser=m_change_list.GetNextSelectedItem(pos);//获取选择的位置 CStringCurUserID=m_change_list.GetItemText(CurUser,0); if(myFile.Open(pszFileName,CFile: : typeText|CFile: : modeNoTruncate|CFile: : modeCreate|CFile: : modeReadWrite),&fileException) { CStringstrBuf; inti=0; while(myFile.ReadString(strBuf)) { ++Row;//Row存储的是txt的行数 inti=0; for(i=0;i { if(strBuf.GetAt(i)=='') { if(CurUserID==strBuf.Mid(0,i)) { k=Row;//第K行需要修改 break; } elsebreak; }//if }//for }//while } else TRACE("Can'topenfile%s,error=%u\n",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) { CStringstrBuf; for(inti=0;i { if(i! =k-1) { myFile.ReadString(strBuf); myFileTemp.WriteString(strBuf); myFileTemp.WriteString("\n"); } else { myFile.ReadString(strBuf); myFileTemp.WriteString(Temp); myFileTemp.WriteString("\n"); } } } else TRACE("Can'topenfile%s,error=%u\n",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) { CStringstrBuf; for(inti=0;i { myFileTemp.ReadString(strBuf); myFile.WriteString(strBuf); myFile.WriteString("\n"); } } else TRACE("Can'topenfile%s,error=%u\n",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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 失物招领 报告 哈工大