




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件体系结构实验报告书 周新:2008082207软件体系结构实验报告书 周新:2008082207#软件体系结构上机实验报告书中国石油大学(北京)信息学院计算机科学与技术系制订人:周新学号:2008082207指导教师:朱雪峰博士2011年10月27日1、课程实验目的通过I )检索系统,对软件体系结构有更加深入的了解和认识。通过运用几种体系结构,熟悉常见的软件体系结构,并对这几种结构有进一步了解。2、任务概述用管道过滤器,主程序、子程序,抽象数据类型,隐式调用这四种结构来分别实现KWIC检索系统。3、实现方法用C++主要实现了两种结构:主程序、子程序结构,抽象数据类型。(1)KWIC1工程的入口函数int_tmain(intargc,_TCHAR*argv[]){//界面,结构选择cout<<"Inputaabsolutefilename:";charfilename[30];cin>>filename;cout<<"ChooseKWICfunction"<<endl<<"1isMainProgram/SubroutinewithSharedData"<<endl<<"2isAbstractDataTypes"<<endl;intchoose=0;cin>>choose;if(1==choose)//主程序和子程序{MainSubroutinemainSub;vector<vector<string>>lines=mainSub.readLines(filename);vector<LINE>lineIndex=mainSub.shiftString(lines);lineIndex=mainSub.firstAlphaSort(lineIndex,lines);mainSub.outPut(lineIndex,lines);}else//抽象收据类型{Lines*lines=newLines;Inputinput;Shift*shift=newShift;FirstAlphaSortalphaSort;Outputoutput;input.readLines(filename,*lines);shift->circularShift(*lines);alphaSort.alphaSort(*shift);output.print(alphaSort);deleteshift;deletelines;}return0;}(2)主程序、子程序结构实现类/从/文件中按行读取存储从文件中读取的行的临时变量/按行读取存0储]从=行"中"取;字/符/串的临时变量每/个单词的截取条件为下一个字符为空格或者为行的末尾将从文件中中读出的行加入到/循环左移获取每一行的字符串个数对/第行循环(字符串个数)次,生成循环移位后的对/第行循环(字符串个数)次,生成循环移位后的声明存放一行的行标以及各列的列表的结构体给行标赋值循/环生成一行的列标取(模运算/字母排序逐/行提取各个字符串的首字母外面的两层 循环是控制循环次数的内部的两层 循环是遍历所有的字符串首字母,寻找最小的字母在原行矩阵中的位置按照 中的字符串的行标和列标输出所有字符串(3)抽象数据类型结构实现行存储类增/加行参数: 字符串向量列表/从存储结构中获取某一行为获取的行的序号,从开始参数:为获取的行的序号,从开始参返回获取的行参增加字符串参数: 为所添加字符串,为字符串所在行的序号(从开始)参获取字符串为字符串在行中的序号参数: 为行序号为字符串在行中的序号返参回获取的字符串增/加字符参数: 为增加的字符, 为增加的字符所在的字符串的序号为增加的字符所在的行的序号/获/取字符参数: 为行序号, 为字符串的序号, 为字符的序号参参返回获取的字符获参取总的行数获/取特定行的字符串个数输入类voidInput::readLines(char*filename,Lines&readLines){//vector<vector<string>>dst;ifstreaminfile(filename,ios::in);if(!infile){cout<<"openerror!"<<endl;exit(0);}chartemp[100]="";//存储从文件中读取的行的临时变量int1m61口46*=0;//行序号//按行读取while(infile.getline(temp,100)){intk=0,j=0;vector<string>line;line.swap(vector<string>());readLines.addLine(line);chars[20]="";//存储从行中取字符串的临时变量intstringIndex=0;//字符串序号readLines.addString(s,lineIndex);while(temp[k]!=0){if(temp[k]!=''){readLines.addChar(temp[k],stringIndex,lineIndex);}//每个单词的截取条件为下一个字符为空格或者为行的末尾if(temp[k]==''&&temp[k+1]!=''){// readLines.addChar(temp[k],stringIndex,lineIndex);//将该字符串加入到指定行的指定字符串中//readLines.addChar('\0',stringIndex,lineIndex);s[0]='\0';〃清空字符串readLines.addString(s,lineIndex);5杠近81口46X++;//字符串序号力口1}k++;}lineIndex++;// dst.push_back(line);〃将从文件中中读出的行加入到dst中}infile.close();for(inti=0;i<readLines.getLineNum();i++)for(intj=0;j<readLines.getStringNum(i);j++){cout<<readLines.getString(i,j)<<"";}cout<<endl;}cout<<endl<<endl;循环左移类//实现所有行的循环移位voidShift::circularShift(LinessrcLines)intlineIndex=0;for(introw=0;row<srcLines.getLineNum();row++)intcols=srcLines.getStringNum(row);for(intcol=0;col<cols;col++){vector<string>newLine;lineShift.addLine(newLine);for(intnewcol=0;newcol<cols;newcol++){lineShift.addString(srcLines.getString(row,(col+newcol)%cols),lineIndex);}lineIndex++;}}}//获取所有行LinesShift::getLines(void){returnlineShift;}//获取某一行vector<string>Shift::getLine(intlineIndex){returnlineShift.getLine(lineIndex);}}排序类//获取某一行中某一位置的字符串stringShift::getString(intlineIndex,intstringIndex){returnlineShift.getString(lineIndex,stringIndex);}//获取某一行中某一个字符串中的某一位置的字符charShift::getChar(intlineIndex,intstringIndex,intcharIndex){returnlineShift.getChar(lineIndex,stringIndex,charIndex);}//获取行数intShift::getLineNum(void){returnlineShift.getLineNum();}//获取某一行的字符串个数intShift::getStringNum(intlineIndex){returnlineShift.getStringNum(lineIndex);//实现按首字母排序voidFirstAlphaSort::alphaSort(ShiftsrcShiftLines){shiftLines=srcShiftLines;//将传进得Shift对象赋值给成员变量vector<char>firstChar;for(introw=0;row<shiftLines.getLineNum();row++){firstChar.push_back(shiftLines.getChar(row,0,0));//获取首字母}//首字母排序for(intloop=0;loop<firstChar.size();loop++){charmin='z';introwIndex=0;for(introw=0;row<firstChar.size();row++){if(min>=firstChar[row]&&''!=firstChar[row]){min=firstChar[row];rowIndex=row;}}charSort.push_back(rowIndex);firstChar[rowIndex]='';//将找到的最小的字母置为‘’,以便在下一次查找时不再保留}}//首字母排序vector<int>FirstAlphaSort::getCharSort(){returncharSort;}//获取行数intFirstAlphaSort::getLineNum(void){returnshiftLines.getLineNum();}//按行的序号,将各字符串合并成一个字符串,然后获取一行//lineindex为行序号stringFirstAlphaSort::getLineAsString(intlineIndex){stringlineString;for(intstrCount=0;strCount<shiftLines.getStringNum(lineIndex);strCount++){lineString+=shiftLines.getString(lineIndex,strCount)+"";}lineString+="\0";returnlineString;}输出类//按字母表顺序输出voidOutput::print(FirstAlphaSortsortLines){for(introw=0;row<sortLines.getLineNum();row++){cout<<sortLines.getLineAsString(sortLines.getCharSort()[row])<<endl;}cout<<endl;}4、实验的例程(1)主程序、子程序运行结果^nputaabsf^lutefilfinanetxtChoaseKUICfunction.isMainPregram/SubrcutinewithSharedData1选择的实现结构为主程序、子程序1选择的实现结构为主程序、子程序招ynameisshouxinjthisismycomputerTakecarethebabyi^elloHorldHells)WorldTakecareofthebabyWorldHellohahyTakecareofthe心axecfthehahyTakecomputerthisismyisismymymycomputerthiszhouxinmynamecomputerthisisnameiszhouxinisismymynameiszhouxinmy。£thebahyTakecaretliebabyTakecareofthisismycomputer^houxinmynameis请按任意键继续.(2)抽象收据类型
2选择的2选择的0实现结构/‘为抽象数据类型InputaabsolutefilenameChooseKUICfunction1isMainProgran/SubroutinewithSharedData2isAbstractDataTypes2需ynameiszhouxinthisismyccjmpiiterTakecareofthebabyHelloWorldHelloWorldVakecareofthebabyyorldHelloLabyTakecareofthe::areofthebabvTakecomputerthisismyismycotiputerthisiszhouxinnynanemycomputerthisismynameiszhouxin;ianeiszhouxinmy□fthebabyTa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能家电产品研发及应用合作协议
- 关于合同事务往来的文书范例
- 智慧校园建设及运营合作协议
- 职工爱岗敬业责任协议书
- 股权投资合作协议书
- 建房承包施工合同
- 特殊教育机构教育服务安全免责协议书
- 田径体育场馆租赁合同书
- 股份制组织架构优化方案
- 全国滇人版初中信息技术七年级上册第三单元第14课《数据的计算-用函数计算数据》教学设计
- 第九单元跨学科实践活动8海洋资源的综合利用与制盐教学设计-2024-2025学年九年级化学人教版(2024)下册
- 河南省郑州市外国语学校2025届高考压轴卷英语试卷含解析
- 2024年教育创新:五年级下册美术教案新解读
- 储能电池模组PACK和系统集成项目可行性研究报告
- DB12T990-2020建筑类建设工程规划许可证设计方案规范
- 2023-2024学年九年级三调语文试卷(含答案)
- 交通运输概论课件:综合交通运输体系
- 医学教材 矮身材儿童诊治指南
- 医学教程 常见急腹症的超声诊断课件
- ppr管材合同模板
- 航空器维修工程师考试考核试卷
评论
0/150
提交评论