通讯录课程设计.docx
- 文档编号:23358840
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:8
- 大小:17.30KB
通讯录课程设计.docx
《通讯录课程设计.docx》由会员分享,可在线阅读,更多相关《通讯录课程设计.docx(8页珍藏版)》请在冰豆网上搜索。
通讯录课程设计
《通讯录》
程序设计基础课程设计报告
二OO八年六月三十日
目录
一、编程目的设计要求
二、各函数功能说明
三、流程图
四、总结
参考数目:
………………………………………………………………11
一.编程目的及其设计要求:
1.设计一个后缀式简单单步计算器类MyCalcu1(类型),具有如下一些功能:
(1)从键盘读入后缀式算式str(为一个字符串),或通过一参构造函数设置算式str。
(2)可以进行加、减、乘、除运算,运算对象为实型数据,遇等号结束计算并显示结果。
(3)运算符没有优先级,即是说,总按“后缀式简单单步”形式执行。
如:
“93-4*
=”,意味着先取运算对象9与3进行后缀的减法运算得结果6,而后再将6与后面的4进行
后缀的乘法运算得结果24,再往后遇到等号则将结果24输出而结束处理。
(4)具有一定的排错功能,当用户输入错误的算式时提示用户。
下面再例举一些输入与期望的相应输出结果的对应关系:
输入:
35+=输出:
8对应于:
3+5
输入:
184-2/=输出:
7对应于:
(18-4)/2
输入:
12.35/8.1+1.5*=输出:
15.84对应于:
((12.3/5)+8.1)*1.5
二.源程序:
#include
#defineMaxLen100//存储空间
inttransform(charstr[],charexp[])
{
intst[MaxLen];//转化过程使用的过度栈
charch;
inti=0,t=0,top=-1;//i是str下标,t是exp下标,top是exp下标
while((ch=str[i++])!
='\0')
{
if(ch>='0'&&ch<='9')//判断是数字
{
exp[t]=ch;//入栈
t++;//栈顶指针上移
while((ch=str[i++])!
='\0'&&ch>='0'&&ch<='9')//其它位依次入栈
{
exp[t]=ch;
t++;
}
i--;//str原算术表达式栈向下遍历
exp[t]='#';//以特殊字符“#”表示结束
t++;
}
elseif(ch=='(')//判断为左括号
{
top++;
st[top]=ch;
}
elseif(ch==')')//判断为右括号
{
while(st[top]!
='(')
{
exp[t]=st[top];
top--;//依次弹出
t++;
}
top--;//'('出栈
}
elseif(ch=='+'||ch=='-')//判断为加减号
{
while(top>=0&&st[top]!
='(')
{
exp[t]=st[top];
top--;
t++;
}
top++;
st[top]=ch;
}
elseif(ch=='*'||ch=='/')//判断为乘除号
{
while(st[top]=='*'||st[top]=='/')
{
exp[t]=st[top];
top--;
t++;
}
top++;
st[top]=ch;
}
}
while(top>=0)//将栈中所有运算符依次弹出存入exp栈中
{
exp[t]=st[top];
t++;
top--;
}
exp[t]='\0';
return1;
}
intcompvalue(charexp[],int*n)
{
intst[MaxLen],d;//st为数栈
charch;
intt=0,top=-1;//t是exp下标,top是st的下标
while((ch=exp[t++])!
='\0')
{
if(ch>='0'&&ch<='9')//将数字字符转换成数字
{
d=0;
do
{
d=10*d+ch-'0';
}
while((ch=exp[t++])!
='#');
top++;
st[top]=d;//数字进栈
}
else//运算符操作
{
switch(ch)
{
case'+':
st[top-1]=st[top-1]+st[top];
break;
case'-':
st[top-1]=st[top-1]-st[top];
break;
case'*':
st[top-1]=st[top-1]*st[top];
break;
case'/':
if(st[top]!
=0)
{
st[top-1]=st[top-1]/st[top];
}
else
return0;//除0错误!
break;
}
top--;
}
}
(*n)=st[top];
return1;
}
voidmain()
{
charstr[MaxLen];//存储原来算术表达式
charexp[MaxLen];//存储转换成的后缀表达式
intn;
cout<<"输入算术表达式:
"< cin>>str; if(transform(str,exp)==0) { cout<<"原算术表达式不正确! "< } else { cout<<"转换成后缀表达式输出: "< if(compvalue(exp,&n)==1) { cout<<"表达式求值: "< } else { cout<<"计算错误! "< } } } 三.流程图: 略… 四.总结: 选课题的时候我以为我选了一个比较简单的题目,《教工信息管理息统》听起来是不难,但是做的时候却发现不是那么回事,比我想象的要难的多。 首先是感觉太范,无从下手,到图书馆借了相应的书回来看了看,才发现我的想法太简单,完全处在做1+1=2的那种小程序的水平。 然后我又找来了更加专业的书,找到了一个有点相似的程序,然后修改,扩充,原程序只有3项输入内容(姓名,学号,单科成绩),2个调用函数(一个输出,一个查询)。 我在内容的扩充还可以没有遇到难题,但是在编写函数时碰到了硬钉子。 我用的是结构体和类,开始在连续建立对象时我没有想到用数组,苦思冥想就是想不到如何连续建立对象,最后还是看了一下别人的程序才想到用数组。 然后是在编写插入,查询,删除的函数时都遇到了不大不小的问题。 查询要求是要用两种复合方法,我用的是其中按工号和姓名两种方法,工号的好办,直接用if语句,但是在编用姓名查询时我却没有了思路,不知道如何去判断两个姓名一样,后来翻书看到了复制函数才反应过来。 然后是在删除函数出了问题,从删除的那一项起把后面的每一项向前移一项,理论上不难,可是函数就是不执行,不管我怎么调试都不行,最后还是找了徐严军给我修改了,原来我把参数放反了。 通过本次课程设计,我检测了自己,看来自己学的还是非常的死板,书本上的知识学的不精,还有就是书本上的东西太少,想完成一个稍大点的程序就显得知道的太有限,从找的参考书还是从网上查,总有自己看不懂的东西。 还有就是我的程序中大量运用了循环语句,尤其是,用地很是普遍,以致于我现在对while循环都有新的认识。 这次课程设计大锻练了我的动手能力和自学能力,对我是一个很好的检测,我很认真地对待了这次课程设计,有付出就有回报,我的收获就是在做课程设计的过程中我能用学到的知识去解决问题,认我感到了知识的魅力。 最后还要感谢在我做课题的过程中给予我帮助的人,还有给我提供电脑的人。 工程完成时间: 2008-6-28 张俊 电信07 参考数目 【1】谭浩强,《C++程序设计》,清华大学出版社,2006年。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 课程设计