VC++库函数课程设计.doc
目 录1课程设计目的12任务要求13设计方案24设计内容24.1 层次(调用) 关系 24.2库函数源代码设计 34.3设计思想 34.4调试过程 54.5调试结果截图 64.6程序代码 95总结156 参考文献16字符串处理库函数1.课程设计目的C+程序设计是我们软件工程专业学子必学的一门基础课程。这学期我们主要学习了这本书中面向过程程序设计部分。其目的在于加深对面向过程程序设计中基础理论和基本知识的理解,培养学生的实践能力,促进理论与实践的结合。通过课程设计,让学生能够熟练运用C+进行编程,建立模型,降低软件的复杂性,改善软件的重用性和维护性,提高软件的生产效率,熟练掌握编程技术。通过课程设计,掌握程序设计语言开发工具Visual C+等;培养调查研究、查阅技术文献、资料、手册以及编写技术文献的能力;通过课程设计,要求学生在指导教师的指导下,独立完成实习课题的全部内容,包括:(1) 通过调查研究和上机实习,收集和调查有关技术资料。(2) 掌握设计课题的基本步骤和方法。(3) 根据课题的要求进行上机实验调试。(4) 有良好的程序设计习惯,程序代码简洁明了,有一定的说明。(5) 设计报告一定按老师规定的要求按时完成,页面整洁。(6) 收集相关案例进行比较,取其精华之处。(7) 学习编程高手的编程思路和技巧,并运用到自己的设计中。2.任务要求(1) 通过文献资料查阅和学习,了解当前软件设计技术和一般方法。(2) 参考和研究一些公司和高校/企业成功的软件开发案例和实现方案,结合C+程序设计(上)以及相关课程中所学知识,积极完成设计任务。(3) 认真完成需求分析,并根据需求分析完成各设计题目的总体设计、详细设计和测试等环节的设计任务。(4) 认真按时完成课程设计报告。(5) 严格按照课程设计要求独立完成。(6) 遵守课程设计课堂纪律。(7) 大胆思考,活跃思维,严密的逻辑,严谨的思路。3.设计方案字符串处理库函数总体思路如下流程图11所示:读入文件中的数据并输出菜单及提示信息输入选择选择操作 结束子程序1子程序2子程序3开始子程序4子程序5子程序6输出结果图114.设计内容4.1层次(调用)关系如图12所示:读入文件 选择操作根据源代码,编译相关程序!将相关代码编译为.exe的可执行程序!为数据处理准备!编译器编辑信息录入将所要准备处理的数据录入到内存中!所要处理得数据经过事先编译好的程序的处理,得到用户想要的结果!信息输出图12退出程序4.2库函数源代码:/"mystr.h"int mystrlen(char* p) /实现1所对应的功能 int size = 0; if(!p) return -1; while(*p)size+;p+; return size;int mystrsam(char string1,char string2) /实现2所对应的功能int count=0;for(int i=0;i<mystrlen(string1);i+)for(int j=0;j<mystrlen(string2);j+)if(string1i=string2j)count+;return count;void mystrcpy(char string1) /实现3所对应的功能int i,j;char string2200;for(i=0,j=0;i<mystrlen(string1);i+,j+)string2j=string1i;for(j=0;j<mystrlen(string1);j+)cout<<string2j;cout<<endl;void mystrcat(char string1,char string2) /实现4所对应的功能for(int i=mystrlen(string1),j=0;i<(mystrlen(string1)+mystrlen(string2);i+,j+)string1i=string2j; for(int m=0;m<mystrlen(string1);m+)cout<<string1m;cout<<endl;void mystrstr(char string) /实现5所对应的功能int n1,n2;cout<<"请输入指定位置: " cin>>n1; cout<<"请输入输出长度: " cin>>n2; for(int i=0;n1<=0|n1>mystrlen(string)|n2>mystrlen(string);i+) cout<<"输入数据错误,请重新输入 "<<endl; cin>>n1>>n2;for(int j=n1;j<=n2;j+)cout<<stringj-1;cout<<endl;void mystrrev(char string) /实现6所对应的功能cout<<"逆序数组顺序为:"<<endl;for(int j=mystrlen(string)-1;j>=0;j-)cout<<stringj;cout<<endl;4.3 设计思想(1)根据字符串处理所需要的功能,将其按模块划分。 (2)编写各各模块对应的函数,并进行调试。 (3)新建头文件,提取自编函数放入新建头文件中。 (4)再次调试程序,包含新建的头文件。 (5)调试成功,保存。4.4 调试过程:(1)通过调试找到一种数据存储到文件的方法,并且能够通过正常数据、边沿数据、非正常数据的测试。(2)界面友好,有相关的功能提示,并且布局合理!(3)成功通过编译,保存相关设置,力求达到最好的效果,给程序阅读者一目了然的感觉。4.5 调试结果截图:(1)功能1测试;(2)功能2测试;(3)功能3的测试;(4)功能4的测试;(5)功能5的测试;(6)功能6的测试;4.6程序源代源/mystr.cpp#include <iostream.h> #include <stdio.h>#include"mystr.h" /包含自编的字符串处理库函数void main() cout<<"|*|* |"<<endl;cout<<"| |字符处理函数功能| |"<<endl;cout<<"| 1.mystrlen计算字符串的长度 |"<<endl;cout<<"| 2.mystrsam两个字符串的相同字符的个数统计 |"<<endl;cout<<"| 3.mystrcpy将A字符串的所有字符复制给B |"<<endl;cout<<"| 4.mystrcat将A、B字符串合并为一个字符串 |"<<endl;cout<<"| 5.mystrstr输出字符串中所取位置所对应字符 |"<<endl;cout<<"| 6.mystrrev把字符串的所有字符的逆序输出 |"<<endl; cout<<"|* |"<<endl; char selection; do char option;cout<<endl;cout<<" ->>请选择你要的功能: " cin>>option; for(int i=0;option!='1'&&option!='2'&&option!='3'&&option!='4'&&option!='5'&&option!='6'i+) cout<<" ->>错误的输入,请重新输入"<<endl; cin>>option; char a200,b200; if(option='1') cout<<" ->>请输入字符串,限制为200个字符"<<endl; gets(a); cout<<"该字符串的长度为: "<<mystrlen(a)<<endl; else if(option='2') cout<<" ->>请输入字符串A,限制为200个字符"<<endl; gets(a); cout<<" ->>请输入字符串B,限制为200个字符"<<endl; gets(b); if(mystrsam(a,b)!=0) cout<<"字符串A与B中共有"<<mystrsam(a,b)<<"个字符相同的"<<endl; else cout<<"字符串A与B中没有相等的字符"<<endl; else if(option='3') cout<<" ->>请输入字符串A,限制为200个字符"<<endl; gets(a); cout<<" ->>将A字符串的字符复制给B字符串为:"<<endl;mystrcpy(a); else if(option='4') cout<<" ->>请输入字符串A,限制为200个字符"<<endl; gets(a); cout<<" ->>请输入字符串B,限制为200个字符"<<endl; gets(b);cout<<"输出后为:"mystrcat(a,b); else if(option='5') cout<<" ->>请输入字符串A,限制为200个字符"<<endl; gets(a); mystrstr(a);else if(option='6') cout<<" ->>请输入字符串A,限制为200个字符"<<endl; gets(a); mystrrev(a); cout<<endl;cout<<" ->>是否继续<y|Y/其他>?" cin>>selection; while(selection='y'|selection='Y'); /"mystr.h"int mystrlen(char* p) /实现1所对应的功能 int size = 0; if(!p) return -1; while(*p)size+;p+; return size;int mystrsam(char string1,char string2) /实现2所对应的功能int count=0;for(int i=0;i<mystrlen(string1);i+)for(int j=0;j<mystrlen(string2);j+)if(string1i=string2j)count+;return count;void mystrcpy(char string1) /实现3所对应的功能int i,j;char string2200;for(i=0,j=0;i<mystrlen(string1);i+,j+)string2j=string1i;for(j=0;j<mystrlen(string1);j+)cout<<string2j;cout<<endl;void mystrcat(char string1,char string2) /实现4所对应的功能for(int i=mystrlen(string1),j=0;i<(mystrlen(string1)+mystrlen(string2);i+,j+)string1i=string2j; for(int m=0;m<mystrlen(string1);m+)cout<<string1m;cout<<endl;void mystrstr(char string) /实现5所对应的功能int n1,n2;cout<<"请输入指定位置: " cin>>n1; cout<<"请输入输出长度: " cin>>n2; for(int i=0;n1<=0|n1>mystrlen(string)|n2>mystrlen(string);i+) cout<<"输入数据错误,请重新输入 "<<endl; cin>>n1>>n2;for(int j=n1;j<=n2;j+)cout<<stringj-1;cout<<endl;void mystrrev(char string) /实现6所对应的功能cout<<"逆序数组顺序为:"<<endl;for(int j=mystrlen(string)-1;j>=0;j-)cout<<stringj;cout<<endl;5.总结(1)可取之处通过这次的课程设计:字符串处理库函数,更一步加深了我对程序编写思路、技巧等等的熟练应用。尤其在自定义函数部分,通过大量的查阅资料,成功实现了字符串的相关功能。在程序的调试部分通过对各个功能模块的逐一调试,对正常数据、非正常数据、边沿数据进行测试,对有问题的部分耐心的进行修改。一步一步使程序准确无误。在界面的设计上尽量是界面让人看起来一目了然,迅速看懂程序的相关作用。在代码的书写上善用Tab键对代码进行缩进,添加相应的文字说明,是代码的结构层次清晰明了,让阅读者看起来更加易懂和简洁。在自定义的头文件部分中的自编函数也是布局合理,让人易懂!(2)不足之处 字符串处理库函数对汉字的支持不够好,例如在功能1、2、5、6中如果输入的是汉字,那么程序则无法正确处理,而显示为乱码的情况!希望今后可以对代再次修改,力求使程序对我们国家的汉字支持达到完美。程序的设计上没有使用面向对象设计方法,今后在熟练掌握了相面对象程序设计后我将会对此代码进行再次修改,利用数据封装的特性将程序更加完美!附录: 参考文献1.C+程序设计 高等院校计算机应用技术规划教材,谭浩强主编。2.C+程序设计教程 普通高等院校计算机课程规划教材,皮德常主编。3. 中国知网 (4百度文库 (