失物招领课设报告哈工大Word文档格式.docx
- 文档编号:21158442
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:31
- 大小:662.40KB
失物招领课设报告哈工大Word文档格式.docx
《失物招领课设报告哈工大Word文档格式.docx》由会员分享,可在线阅读,更多相关《失物招领课设报告哈工大Word文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
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<
Row)//如果没有运行到数据库的底部则一直执行
{
CStringstr;
myFile.ReadString(str);
intm1=0,m2=0,m3=0,m4=0;
for(intj=0;
j<
str.GetLength();
j++){if(str.GetAt(j)=='
'
){m1=j;
break;
}}
for(intj=m1+1;
j++){if(str.GetAt(j)=='
){m2=j;
for(intj=m2+1;
){m3=j;
for(intj=m3+1;
){m4=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:
modeNoTruncate|CFile:
modeCreate|CFile:
{
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("
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="
//文件列表初始化
if((m_xmima.IsEmpty()))
请输入新密码!
else{
ForLogin.txt"
char*pszFileNameTemp="
Transition.txt"
CStdioFilemyFileTemp;
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)
//弹出对话框提示用户是否真的需要删除
intRow=0,k=0;
intCurUser=m_change_list.GetNextSelectedItem(pos);
//获取选择的位置
CStringCurUserID=m_change_list.GetItemText(CurUser,0);
inti=0;
while(myFile.ReadString(strBuf))
{
inti=0;
for(i=0;
i<
strBuf.GetLength();
i++)
{
if(strBuf.GetAt(i)=='
)
{
if(CurUserID==strBuf.Mid(0,i))
{
k=Row;
//第K行需要修改
break;
}
elsebreak;
}//if
}//for
}//while
myFile.Close();
if((myFileTemp.Open(pszFileNameTemp,CFile:
fileExceptionTemp)&
&
myFile.Open(pszFileName,CFile:
for(inti=0;
Row;
{
if(i!
=k-1)
myFile.ReadString(strBuf);
myFileTemp.WriteString(strBuf);
myFileTemp.WriteString("
else
myFileTemp.WriteString(Temp);
myFileTemp.Close();
myFileTemp.ReadString(strBuf);
myFile.WriteString(strBuf);
myFile.WriteString("
myFileTemp.SetLength(0);
m_change_list.SetItemText(k-1,0,m_yonghu);
m_change_list.SetItemText(k-1,1,m_xmima);
m_xmima.Empty();
密码修改成功!
//密码修改
if((m_name.IsEmpty())||(m_time.IsEmpty())||(m_number.IsEmpty())||(m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 失物招领 报告 哈工大