C++课程设计设计菜单选择程序.docx
- 文档编号:11423679
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:24
- 大小:93.59KB
C++课程设计设计菜单选择程序.docx
《C++课程设计设计菜单选择程序.docx》由会员分享,可在线阅读,更多相关《C++课程设计设计菜单选择程序.docx(24页珍藏版)》请在冰豆网上搜索。
C++课程设计设计菜单选择程序
一、实习题目:
设计菜单选择程序
二、设计思想:
1、实现循环和功能选择:
编写一个菜单函数menu(),用whlie循环控制菜单的重复选择,用switch语句对应用户的选择,并且实现相应的功能。
2、设计各个选择的功能:
对于选择1,运用克莱姆法则求解线性方程组,用了多个循环和if判断语句,其中两个函数调用,其主要功能是求解行列式的数值;选择二,统计一篇英语文章的单词数,使用了函数getchar()和gets(str),用于输入英文文章。
三、程序代码:
#include
#include
usingnamespacestd;
#defineN10000
voidmenu();//菜单选项函数
voidequation();//求线性方程组
voidenglish();//统计英文文章的单词数
///////////////主函数的执行///////////////
intmain()
{
inta,t=1;
while(t)
{
menu();
cout<<"请选择1-3:
";
cin>>a;
cout< switch(a) { case1: equation(); break; case2: english(); break; case3: t=0; break; } } } /////////////////菜单选项函数////////////////// voidmenu() { cout<<"\n\t\t\t-----------菜单选择------------"< cout<<"\t\t\t1.利用克莱姆法则求解线性方程组"< cout<<"\t\t\t2.统计一篇英文文章的单词数"< cout<<"\t\t\t3.退出程序"< cout<<"\t\t\t-------------------------------"< } ////////////利用克莱姆法则求解线性方程组///////////// staticinta[N][N],b[N]; intdi[N],c[N]; doublex[N]; intterm(intn,intk[]) { intp,q,t=1; for(p=1;p for(q=0;q if(k[q]>k[p]) t=-t; for(p=0;p t*=a[p][k[p]]; return(t); } intdet(intn) { intj0,j1,j2,j3,j4,j5,d=0,k[N]; for(j0=0;j0 { if(a[0][j0]==0)continue; k[0]=j0; for(j1=0;j1 { if(j1==j0)continue; if(a[1][j1]==0)continue; k[1]=j1; if(n==2) d+=term(n,k); for(j2=0;j2 { if(j2==j0)continue; if(j2==j1)continue; if(a[2][j2]==0)continue; k[2]=j2; if(n==3) d+=term(n,k); for(j3=0;j3 { if(j3==j0)continue; if(j3==j1)continue; if(j3==j2)continue; if(a[3][j3]==0)continue; k[3]=j3; if(n==4) d+=term(n,k); for(j4=0;j4 { if(j4==j0)continue; if(j4==j1)continue; if(j4==j2)continue; if(j4==j3)continue; if(a[4][j4]==0)continue; k[4]=j4; if(n==5) d+=term(n,k); for(j5=0;j5 { if(j5==j0)continue; if(j5==j1)continue; if(j5==j2)continue; if(j5==j3)continue; if(j5==j4)continue; if(a[5][j5]==0)continue; k[5]=j5; } } } } } } return(d); } voidequation() { inti,j,n,d; charch; A: cout<<"请输入线性方程组的未知数个数(n<=6)n="; cin>>n; cout<<"请输入线性方程组的增广矩阵(即未知数的系数与常数项组合成的矩阵,为n*(n+1)阶矩阵): "< for(i=0;i { for(j=0;j { cin>>a[i][j]; } cin>>b[i]; } d=det(n); for(j=0;j { for(i=0;i { c[i]=a[i][j]; a[i][j]=b[i]; } di[j]=det(n); for(i=0;i a[i][j]=c[i]; } cout<<"最后求得线性方程组的解为: "< for(i=0;i { x[i]=(di[i])/d; cout<<"x("< } B: cout<<"您是否要继续(Y/N)? "< cin>>ch; if(ch=='y'||ch=='Y') gotoA; elseif(ch=='n'||ch=='N') gotoC; else gotoB; C: system("pause"); } /////////统计英文文章的单词数//////////////// voidenglish() { charstr[N],c; inti,word=0,num=0; cout<<"\n请输入需要统计单词数的英文文章: "< getchar();/*输入英文文章*/ gets(str); for(i=0;(c=str[i])! ='\0';i++) { if((c>0&&c<65)||(c>90&&c<97)||c>122&&c<255)word=0;/*用空格区分新单词的产生*/ else { if(word==0) { word=1;/*新单词产生*/ num++; } } } cout<<"这篇文章共有"< } 四、测试用例及测试结果 1.解线性方程组: 2.统计英文文章的单词数: 五、程序不足及升级方向 这个程序只能解未知数的个数n<=6时的恰定方程组,实用性受到限制,还需要以后再完善。 六、参考文献 [1]姚全珠.C++面向对象程序设计[M].北京: 电子工业出版社,2010. [2]郑莉.C++语言程序设计[M].北京: 清华大学出版社,2007. 职工信息表设计 报告2 一、实习题目: 职工信息表设计 二、设计思想: 1、类的结构: 这里把worker作为基类,由它派生类list和simplelist。 2、多态性: 将worker的display()成员函数设计为虚函数,printer()函数使用基类worker对象的引用作为参数,即可实现多态性。 3、设计主函数: 要求编写最多输入10000个职工的信息表,并且可以随时停止。 运用循环,增强程序的灵活性。 三、程序代码: #include #include #defineMAX10000 usingnamespacestd; classworker//信息表基类 { public: stringnum; stringname; charsex;//性别用F(女)和M(男)表示。 intage; virtualvoiddisplay(){} }; classlist: publicworker//完整信息表类 { public: virtualvoiddisplay(); }; classsimplelist: publicworker//信息简表类 { public: virtualvoiddisplay(); }; intnemu();//菜单选择函数 voidadd(lista[],int&n);//增加职工记录 floatcreat(listy[],simplelistx[],int&n);//生成信息简表 floatprinter(worker*p,int&n);//显示完整信息简表 /////////////////主函数的执行////////////////// intmain() { simplelistc[MAX];//定义简表数组 listd[MAX];//定义信息表数组 intlastnum=0,t=1; boolexit=false; do { switch(nemu()) { case1: //1.增加职工记录 add(d,lastnum); break; case2: //2.显示原始记录 printer(d,lastnum); cout< "< break; case3: //3.显示简表记录 creat(d,c,lastnum); printer(c,lastnum); cout< "< break; case4: //4.结束程序运行 exit=true; break; } } while(exit==false); cout<<"\n程序结束! \n"< return0; } /////////////菜单选择函数///////////// intnemu() { intcn=5; do { cout<<"\t\t\t-----------------------------"< cout<<"\t\t\t-----------------------------"< cout<<"\t\t\t1.增加职工信息\n"; cout<<"\t\t\t2.显示完整信息\n"; cout<<"\t\t\t3.显示信息简表\n"; cout<<"\t\t\t4.结束程序运行\n"; cout<<"\t\t\t-----------------------------"< cout<<"\t\t\t-----------------------------"< cout<<"\n选择1-4: "; cin>>cn; } while(cn<1||cn>4); returncn; } //////////////显示职工信息的完整记录/////////////// voidlist: : display() { cout<<"编号: "< cout<<"姓名: "< cout<<"性别: "< cout<<"年龄: "< } //////////////显示信息简表//////////////// voidsimplelist: : display() { cout<<"姓名: "< cout<<"年龄: "< } ///////////////1.增加职工信息////////////// voidadd(lista[],int&n) { cout<<"您选择的是: 1.增加职工记录\n"< cout<<"注意: 当编号为0时,返回主菜单: \n"< for(n=0;n { cout<<"输入编号: "; cin>>a[n].num; if(a[n].num=="0") break;//结束输入 for(intk=0;k { if(a[n].num==a[k].num) cout<<"输入编号重复! "< } cout<<"输入姓名: "; cin>>a[n].name; for(k=0;k { if(a[n].name==a[k].name) cout<<"输入姓名重复! "< } cout<<"请输入性别(f为女,m为男): "; cin>>a[n].sex; if(a[n].sex! ='f'&&a[n].sex! ='m') { cout<<"性别输入错误"; cout<<"请输入性别(f为女,m为男): "; cin>>a[n].sex; } cout<<"请输入年龄: "; cin>>a[n].age; } } /////////////////2.生成信息简表////////////////// floatcreat(listy[],simplelistx[],int&n) { if(n { for(inti=0;i<=n;i++) { x[i].name=y[i].name; x[i].age=y[i].age; } return1; } else return0; } ////////////////3.信息输出函数////////////////// floatprinter(worker*p,int&n) { for(inti=0;i { cout<<"********************"< (p+i)->display(); } cout<<"********************"< return0; } 四、测试用例及测试结果 1.增加职工信息 2.显示完整信息: 3.显示信息简表: 4.结束程序运行: 五、程序不足及升级方向 虽然这个程序的运行结果比较理想,但不是很美观,故有待完善。 六、参考文献 [1]姚全珠.C++面向对象程序设计[M].北京: 电子工业出版社,2010. [2]郑莉.C++语言程序设计[M].北京: 清华大学出版社,2007. 有理数的四则运算 报告3 一、实习题目: 有理数的四则运算 二、设计思想: 本程序中主要用到了一下这几个函数: 1、构造函数: Rational(intx1=0,inty1=1){x=x1;y=y1;} 2、重载”+”、”-”、”*”、”/”四个运算符: Rationaloperator+(Rationalr);//重载加法运算符 Rationaloperator-(Rationalr);//重载减法运算符 Rationaloperator*(Rationalr);//重载乘法运算符 Rationaloperator/(Rationalr);//重载除法运算符 3、重载流运算符: friendistream&operator>>(istream&in,Rational&r); friendostream&operator<<(ostream&out,Rational&r); 输入输出就是按格式构造输出,输入流需要保证正确的格式,要保证分母不等于零。 三、程序代码: #include usingnamespacestd; classRational//有理数类 { public: intx; inty; Rational(intx1=0,inty1=1){x=x1;y=y1;} Rationaloperator+(Rationalr);//重载加法运算符 Rationaloperator-(Rationalr);//重载减法运算符 Rationaloperator*(Rationalr);//重载乘法运算符 Rationaloperator/(Rationalr);//重载除法运算符 friendistream&operator>>(istream&in,Rational&r);//重载输入运算符 friendostream&operator<<(ostream&out,Rational&r);//重载输出运算符 }; ///////////主函数的执行///////////// intmain() { charch; RationalA,B,C; A: cout<<"请输入A的值"< cin>>A; cout<<"请输入B的值"< cin>>B; cout< cout<<"--------------------\n"< C=A+B; cout<<"两数之和为A+B="< C=A-B; cout<<"两数之差为A-B="< C=A*B; cout<<"两数之积为A*B="< C=A/B; cout<<"两数之商为A/B="< cout<<"--------------------"< B: cout<<"您是否要继续(Y/N)? "< cin>>ch; cout< if(ch=='y'||ch=='Y') gotoA; elseif(ch=='n'||ch=='N') gotoC; else gotoB; C: system("pause"); return0; } ////////////////////////////////////////////// istream&operator>>(istream&in,Rational&r) { in>>r.x>>r.y; if(r.y==0) { cout<<"分母不能为0\n"; } returnin; } ostream&operator<<(ostream&out,Rational&r) { inti; floatm,n; if(r.x { for(i=r.x;i>1;i--) { if(r.x%i==0&&r.y%i==0) { m=r.x/i; n=r.y/i; r.x=m; r.y=n; } } } else//当x>=y,且x,y有公约数时,进行约分 { for(i=r.y;i>1;i--) { if(r.x%i==0&&r.y%i==0) { m=r.x/i; n=r.y/i; r.x=m; r.y=n; } } } out< returnout; } RationalRational: : operator+(Rationalr) { returnRational(x*r.y+y*r.x,y*r.y); } RationalRational: : operator-(Rationalr) { returnRational(x*r.y-y*r.x,y*r.y); } RationalRational: : operator*(Rationalr) { returnRational(x*r.x,y*r.y); } RationalRational: : operator/(Rationalr) { returnRational(x*r.y,y*r.x); } 四、测试用例及测试结果 五、程序不足及升级方向 本程序中还有一些不足的地方,比如,在分式与小数的转换方面,暂时还不能实现,所以,还需以后再加考虑,完善。 六、参考文献 [1]姚全珠.C++面向对象程序设计[M].北京: 电子工业出版社,2010. [2]郑莉.C++语言程序设计[M].北京: 清华大学出版社,2007.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 设计 菜单 选择 程序