C++课程实践报告试题及答案(范文大全)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++课程实践报告试题及答案(范文大全)
第一篇:C++课程实践报告试题及答案
任务一一、实践任务 1.试建立一个类 PP,求出下列多项式的前n 项的值。
⎪⎩⎪⎨⎧---=-n x P n x xP nx x Pnn/))()1()()1 2((1)(2 n 1 -
110>==nnn 二、详细设计1、类的描述与定义(1)私有数据成员λ int n:前若干项的项数。
λ double
x:存放 x 的值。
λ double *p:根据 n 的大小动态申请存放 P n(x)前 n 项的数组空间。
(2)公有成员函数λ PP(int num,double x1):构造函数,初始化数据成员 n 和 x,使 p 指向动态申请的数组空间。
λ~PP():析构函数,释放 p 指向的动态内存空间。
λ double fun(int n1,double x):递归函数,用于求多项式)(x P n 的第n1 项。
注意:将递归公式中的n 用作函数参数。
本函数供process 函数调用。
λ void process():完成求前 n 项的工作,并将它们存放到 p 指向的动态数组中。
λ void show():输出 n 和 x,并将前 n 项以每行 4 个数的形式输出到屏幕上。
2、主要函数设计
在主函数中完成对该类的测试。
先输入num 和x1,并定义一个PP 类的对象 items,用 num 和 x1 初始化 items 的成员 n 和 x,调用items 的成员函数,求出并输出多项式前 num 项的值。
三、源程序清单 #include class PP{ private:
int n;
double x;
double*p;public:
PP(int num,double x1)
{
n=num;
x=x1;
p=new double[n];
}
~PP()
{
if(p)delete []p;
}
double fun(int n1,double x);
void process();
void show();};double PP::fun(int n1,double x){
if(n1==0)return 1;
else if(n1==1)return x;
else if(n1>1)return((2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x))/n1;} void PP::process(){
for(int i=0;i
{
p[i]=fun(i,x);
} } void PP::show(){
cout<<“n=”<
for(int i=0;i
{
cout<
if((i+1)%4==0)cout<
} } void main(){
int num;
double x1;
cout<<“请输入 num 和x1:”;
cin>>num>>x1;
PP items(num,x1);
items.process();
items.show();}
任务二
一、实践任务 2.试建立一个类 SP,求k k k kn k n f ++++= (3)
2 1),(,另有辅助函数 power(m,n)用于求nm。
二、详细设计 1、类的描述与定义(1)私有数据成员λ int n,k:存放公式中 n 和 k 的值;(2)公有成员函数λ SP(int n1,int k1):构造函数,初始化成员数据 n 和 k。
λ int power(int m, int n):求 m n。
λ int fun():求公式的累加和。
λ void show():输出求得的结果。
2、主要函数设计在主程序中定义对象 s,对该类进行测试。
三、源程序清单 #include class SP{
private:
int n,k;public:
SP(int n1,int k1)
{
n=n1;
k=k1;
}
int power(int m,int n);
int fun();
void show();};int SP::power(int m,int n){
int s=1;
for(int i=0;i
{
s*=m;
}
return s;} int SP::fun(){
int s=0;
for(int i=1;i<=n;i++)
{
s+=power(i,k);
}
return s;}
void SP::show(){
cout<<“f(”<
int n1,k1;
cout<<“请输入 n1,k1:”;
cin>>n1>>k1;
SP s(n1,k1);
s.fun();
s.show();}
任务三
一、实践任务3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。
二、详细设计1、类的描述与定义(1)私有数据成员λfloat array[20]:一维整型数组。
λ int n:数组中元素的个数。
(2)公有成员函数λ MOVE(float b[],int m):构造函数,初始化成员数据。
λ void average():输出平均值,并将数组中的元素按要求重新放置。
λ void print():输出一维数组。
2、主要函数设计在主程序中用数据{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。
三、源程序清单 #include class MOVE{ private:
float array[20];
int n;public:
MOVE(float b[],int m) {
for(int i=0;i
{
array[i]=b[i];
}
n=m;
}
void average();
void print();
~MOVE()
{};};void MOVE::average(){ float ave=0;
int i,j;
for(i=0;i
{
ave+=array[i];
}
ave/=n;
cout<
float turn[20];
j=0;
for(i=0;i
{
if(array[i]<=ave)
{
turn[j]=array[i];
j++;
}
}
j=0;
for(i=0;i
{
if(array[i]>ave)
{
turn[n-1-j]=array[i];
j++;
}
}
for(i=0;i
{
array[i]=turn[i];
} } void MOVE::print(){ for(int i=0;i
cout<
float b1[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3};
int num;
num=sizeof(b1)/sizeof(float);
MOVE s(b1,num);
s.average();
s.print();}
任务四
一、实践任务4.建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。
二、详细设计 1、类的描述与定义(1)私有数据成员λ int *array:一维整型数组。
λ int n:数组中元素的个数。
(2)公有成员函数λ MOVE(int b[],int m):构造函数,初始化成员数据。
λvoid exchange():输出平均值,并将数组中的元素按要求重新
放置。
λ void print():输出一维数组。
λ ~MOVE():析构函数。
2、主要函数设计在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。
三、源程序清单 #include class MOVE{ private:
int *array;
int n;public:
MOVE(int b[],int m)
{
array=new int[m];
n=m;
for(int i=0;i
{
array[i]=b[i];
}
}
void exchange();
void print();
~MOVE()
{
if(array)delete array;
} };void MOVE::exchange()
{
float ave=0;
for(int i=0;i
{
ave+=array[i];
}
ave/=n;
cout<<“平均值为”<
int max,min;
max=min=array[0];
int m;
for(i=0,m=0;i
{
if(array[i]>=max)m=i,max=array[i];
}
int l;
for(i=0,l=0;i
{
if(array[i]
}
i=array[m],array[m]=array[l],array[l]=i;
} void MOVE::print()
{
for(int i=0;i
cout<
{
int text[]={21,65,43,87,12,84,44,97,32,55};
int num;
num=sizeof(text)/sizeof(int);
MOVE s(text,num);
s.print();
cout<
s.exchange();
s.print();}
任务五一、实践任务定义一个类Palindrome,实现绝对回文数。
设计一个算法实现对任意整型数字判断是否为绝对回文数。
所谓绝对回文数,是指十进制数和二进制数均对称的数。
二、详细设计 1、类的描述与定义(1)私有数据成员λ int n:整型数字。
λ int y:
标记是否为回文数。
(2)公有成员函数λ Palindrome(int x):构造函数,根据 x 参数初始化数据成员 n,y 初始化为 0。
λ void huiwen():判断数 n 是否为绝对回文数。
λ void show():若该数为回文数,则在屏幕显示。
2、主要函数设计
在主程序中定义int a,由键盘输入数字。
定义一个Palindrome 类对象 p,用 a 初始化 p,完成对该类的测试。
三、源程序清单 #include class Palindrome{ private:
int n;
int y;public:
Palindrome(int x)
{
n=x;
y=0;
}
void huiwen();
void show();};void Palindrome::huiwen(){
int i=0,j=0;
int m;
m=n;
while(m)
{
m/=10;
i++;
}
m=n;
while(m)
{
m/=2;
j++;
}
int*s10=new int[i];
int*s2=new int[j];
m=n;
for(int k=0;k
{
s10[i-1-k]=m%10;
m/=10;
}
m=n;
for(k=0;k
{
s2[j-1-k]=m%2;
m/=2;
}
int num10=0;
for(k=0;k
{
if(s10[i-1-k]==s10[k])num10++; else break;
}
int num2=0;
for(k=0;k
{
if(s2[j-1-k]==s2[k])num2++; else break;
if(num10==(i/2)&&num2==(j/2))y=1; } void Palindrome::show(){
int i=0,j=0;
int m;
m=n;
while(m)
{
m/=10;
i++;
}
m=n;
while(m)
{
m/=2;
j++;
}
int*s10=new int[i+1];
int*s2=new int[j+1];
m=n;
for(int k=0;k
{
s10[i-1-k]=m%10;
m/=10;
}
m=n;
for(k=0;k
{
s2[j-1-k]=m%2;
m/=2;
if(y)
{
cout<<“该数为绝对回文数!:”<
cout<<“十进制表示为:”;
for(k=0;k
cout<
cout<<“二进制表示为:”;
for(k=0;k
cout<
}
else
{
cout<<“该数不是绝对回文数!:”<
cout<<“十进制表示为:”;
for(k=0;k
cout<
cout<<“二进制表示为:”;
for(k=0;k
cout<
}
cout<
int a;
cout<<“请输入一个数字:”;
cin>>a;
Palindrome p(a);
p.huiwen();
p.show();}
任务六
一、实践任务6.定义一个字符串类String,实现判断该字符串
是否为回文字符串。
所谓回文字符串,是
指该字符串左右对称。
例如字符串“123321”是回文字符串。
二、详细设计 1、类的描述与定义(1)私有数据成员λ char *str;
λ int y:标记是否为回文字符串。
(2)公有成员函数λ String(char *s):构造函数,用给定的参数s 初始化数据成员 str。
y 初始化为 0。
λ void huiwen():判断 str 所指向的字符串是否为回文字符串。
λ void show():在屏幕上显示字符串。
2、主要函数设计在主程序中定义字符串char s[]=”ababcedbaba”作为原始字符串。
定义一个 String 类对象 test,用 s 初始化 test,完成对该类的测试。
三、源程序清单 #include #include class String{ private:
char*str;
int y;public:
String(char*s)
{
int n=strlen(s);
str=new char[n+1];
strcpy(str,s);
y=0;
}
void huiwen();
void show();
~String()
{ if(str)delete []str;} };void String::huiwen(){
int n,judge=0;
n=strlen(str);
for(int i=0;i<(n/2);i++)
{
if(str[i]==str[n-1-i])judge++;
}
if(judge==i)y=1;} void String::show()//输出; {
if(y==1)cout<<“y=1,¸该字符串是回文数”<
else cout<<“y=0,该字符串不是回文数”<
cha r s[]=“ababcedbaba”;
String test(s);
test.huiwen();
test.show();}
任务七
一、实践任务7.建立一个类PHALANX,生成并显示一个折叠方阵。
折叠方阵如下图所示。
折叠方阵的生成过程为:起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。
二、详细设计 1、类的描述与定义(1)私有数据成员 1
… 1 1
4
9
16
λ int(*p)[20]:指向按照折叠规律存放方阵的二维整型数组。
λ int startnum:折叠方阵的起始数。
λ int n:存放方针的层数。
(2)公有成员函数λ PHALANX(int s, int m):构造函数,初始化成员数据。
λ void process():生成起始数为 startnum 的 n 行方阵。
λ void print():输出折叠方阵。
λ ~ PHALANX():析构函数。
2、主要函数设计在主程序中对该类进行测试。
三、源程序清单 #include class phalanx {
int(*p)[20];
int startnum;
int n;
public:
phalanx(int s[20][20],int m) {
startnum=1;
p=s;
n=m;
}
void process()
{
p[0][0]=startnum;
for(int i=0;i
for(int j=0;j
{if(i>j){p[i][j]=1+i*i+i+i-j;} else{p[i][j]=1+j*j+i;}}
}
void print()
{
for(int i=0;i
{
for(int j=0;jcout<<“n”;
}
}
~ phalanx(){ }
};
void main()
{
int m;
int s[20][20];
cout<<“请输入折叠层数:”; cin>>m;
cout<<“n”;
phalanx pp(s,m);
pp.process();
pp.print();
}
第二篇:C++实践报告
中南大学
本科生课程设计(实践)任务书、设计报告
(C++程序设计)
题目学生姓名指导教师
C++程序设计实践
* *
孙岱
学院地球科学与信息物理学院专业班级信息物理工程类1106班学生学号
01451106**
计算机基础教学实验中心
2012年 7 月日
C++程序设计实践报告书
C++是一种使用非常广泛的电脑程式设计语言,在当今网络如此发达的时代能够运用C++语言进行编程显得尤为重要。
它是一种静态资料类型检查的,支援多范型的通用程式设计语言。
C++支援程序化程式设计、资料抽象化、面向对象程式设计、泛型程式设计、基于原则设计等多种程式设计风格。
在系统学习完《C++程序设计基础》课程后,我们在老师的指导下进行了这次C++程序设计实践,主要以visual C++6.0为编译环境,重点使用了visual C++ MFC编程实现实践所要求的功能。
【任务描述】
这次实践采用了上机实践与老师集体辅导结合的方式,以完成辅导老师下发的《C++语言课程设计任务书》中指定任务与要求为目的,
要求我们在已学过的《C++程序设计基础》所掌握的一些C++语言的结构和函数的基础上,以全新的角度去感知和运用C++语言进行一些具有相关目的和功能的程序设计和编译。
在这次实践中,我们统一以visual C++ 6.0为编译系统,使用visual C++ MFC编程来达到和完成辅导老师给的《C++语言课程设计任务书》中给出的题目,其中部分题目以基本对话框为应用程序的框架,另一部分则设计为单文档界面(SDI)应用程序。
这些程序都具有不同的设计目的和应用功能,运用了常用的基本控件,如静态文本框、命令按钮、编辑框、复选框、列表框、组合框、滚动条等。
本次实践可分为三部分:
一、基于对话框的Windows应用程序:
这部分以知识要点掌握与编程实例主辅结合的方式,让我们基本掌握了基于对话框的应用程序的创建过程,建立基于对话框的 MFC 应用程序框架,放置控件并设置控件属性,以及为控件连接变量(即为控件命名),添加并且编写消息处理函数。
在这部分实践中,我按照任务书中要求按照任务书所给的实例,基本掌握了基于对话框的MFC 应用程序中各常用的基本控件的使用。
在完成对MFC编程的初步了解后,我们按《C++语言课程设计任务书》所给出的题目和要求完成了相关基于对话框的 MFC 应用程序的编译。
实践完成了以下任务和要求:
1.编写一个如图所示的应用程序。
若单击“复制”按钮,则把上面的编辑框中的内容复制到下面的编辑框中;若单击“结束”按钮,则退出程序的运行。
2.输入一元二次方程 ax2 +bx+c=0 的系数 a、b、c,计算并输出两个根 x1、x2。
3.编写一个能对列表框进行项目添加、修改和删除操作的应用程序。
4.设计如图所示的对话框。
若选定了“日期”或“时间”复选框,则在对应的只读编辑框中显示系统当前日期或时间。
5.设计如图所示的对话框。
单击“确定”按钮后,在列表框中显示选择的信息。
二、文档/视图结构应用程序:
文档/视图结构的思想是将数据的管理与显示分离,其中文档用于管理应用程序的数据,而视图是用户界面,用于显示、打印文档中的数据,并管理与用户的交互。
在这部分实践过程中,通过对任务书中介绍的几种SDI结构的典型应用程序来了解其结构及设计方法,学习和实践了典型应用包括: 利用画笔、画刷等工具及位图处理的方法实现文字和图形的输出。
利用定时器控件制作动画程序。
对鼠标和键盘进行编程的基本方法。
文件、字体、颜色等几种通用对话框的使用方法及自定义对话框的设计、调用方法。
菜单的设计方法。
通过课程实践,以及与同学之间的讨论,我们完成了这一阶段的任务要求:
6.编写一个程序,绘制如图所示的-2π~2π 之间的 sin 曲线。
7.设计一个如图所示的画图程序。
要求按下鼠标右键画圆,按住鼠标左键移动画线。
(图略)
8.用定时器控制蝴蝶在窗口中飞舞,如图所示。
(图略)
9.设计一个如图所示的应用程序。
若用户单击左键,则弹出输入成绩对话框,选择OK 后平均成绩和总分在窗口的客户区输出。
(图略)
10.设计如图所示的菜单,并编写相应用的消息处理函数。
(图略)
三、完成综合题的程序设计:
将实践过程中选择3~5题(或类似的题),做成一个综合程序,要求通过菜单调用各部分功能。
可自行组织和发挥,使其安排合适。
【系统设计思想】
首先建立一个单文档结构的应用程序作为综合程序的主程序,通过对菜单的设计完成与所需调用的各个对话框功能相适应的编辑。
利用对话框类资源创建自己的对话框,然后建立成与实践中3~5题相对应的对话框,并分别按要求进行相关功能的实现。
然后建立对话框类CMyDlg,在调用的地方建立对话框类对象CMyDlg dlg;然后dlg.DoModal();从而实现主程序对各个对话框的调用。
在主程序的单文档界面的菜单中,可以对所需功能进行选择,然后调用出不同的对
话框实现所系的功能,达到设计程序通过菜单调用各部分功能的目的。
【系统功能】
设计的综合程序以一个文档类的程序界面为依托,实现其余各个部分功能的调用。
对书目管理、时间显示以及教师综合信息管理者三部分进行了整合,达到了对各个部分功能之间的调用。
在主界面中,我们可以对所需功能进行选择,从而到达不同的对话框界面进行不同功能的交互。
当我们在菜单中选择“书目管理”时,程序自动弹出书目管理对话框,然后我们能对列表框进行项目添加、修改和删除操作等。
而我们如果在主界面的菜单中选择“时间显示”,则系统会跳至另一个对话框界面,这个界面可以对当前的时间进行显示,在对话框中若选择了“日期”或者“时间”复选框,则在对应的只读编辑框中显示系统当前的日期或时间,从而实现了对系统当前时间信息的捕获。
如果我们在最初的主界面菜单选择了“教师综合信息管理”,则在弹出的对话框中我们可以实现对教师姓名、性别、爱好、工龄以及职称进行选择。
【设计过程】
首先打开VC++ 6.0编译系统,因为我设计的综合程序以一个文档类的程序界面为依托,实现其余各个部分功能的调用。
对书目管理、时间显示以及教师综合信息管理者三部分进行了整合,从而达到了对各个部分功能之间的调用。
所以创建过程如下:
按照任务书要求设定工程名为“xw1106_0145110626“,利用AppWizard 创建一个 SDI 应用程序框架。
在工作区中选定“ ResourceView ”,展开 Menu,双击其中的IDR_MAINFRAME,可以看到由AppWizard 生成的标准菜单。
首先删除原有菜单项,然后添加自己所需要的菜单,添加方式为:双击空白菜单框,弹出“ Menu Item Properties ”,输入菜单项的标题(名称)。
若菜单项有一个子菜单(单击会弹出了一子菜单),则选定“弹出”,否则不要选定“弹出”;要输入一条分割线,则选定“分隔符”。
我将菜单栏设定为三项,分别为“菜单”、“小工具”以及“QQ”,其中菜单包含三个子选项分别为“方程求解/时间显示/书目
管理”,小工具包含“复制/字符游戏”,而“QQ”则是通过进程方式实现对外部软件QQ的调用。
利用“CDialog dlg;dlg.DoModal();”来实现各个子菜单项所对应的对话框的调用,而QQ的调用是个人加进去的(不是任务要求),利用了进程方式调用外部exe程序:STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si,sizeof(si));si.cb = sizeof(si);ZeroMemory(&pi,sizeof(pi));if(!CreateProcess(NULL, ”G:Program FilesTencentQQBinQQ.exe “,NULL,NULL,FALSE,CREATE_NO_WINDOW,NULL,NULL,&si,&pi) ){ MessageBox(”出错“, ”提示",MB_OK|MB_ICONINFORMATION);}
WaitForSingleObject(pi.hProcess,INFINITE);CloseHandle(pi.hProc ess);CloseHandle(pi.hThread);【运行情况】
编译链接后程序运行正常,能实现通过菜单项调出相应的对话框的目的,以一个文档类的程序界面为依托,实现其余各个部分功能的调用。
对书目管理、时间显示以及教师综合信息管理者三部分进行了整合,达到了对各个部分功能之间的调用。
其中点击QQ也能很快的弹出QQ登陆界面。
在主程序的单文档界面的菜单中,可以对所需功能进行选择,然后调用出不同的对话框实现所系的功能,达到设计程序通过菜单调用各部分功能的目的。
【心得体会】
在为期不到两周的课程设计中,我体会颇多,学到很多东西。
我懂得了如何用MFC编写可视化界面的应用程序,我加强了对C++的认识,复习了自己以前的知识,自己的逻辑思考能力也提高不少。
从而对Microsoft Visual C++ 6.0又有了更深入的认识!在这次课程设计中,我还懂得了程序开发的一些比较重要的步骤,总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。
最重要的还是激发了我编程的兴趣和热情,让我从理论变成了能做一些小型程序,让我对编程更加热爱了。
整体地评价这次课程设计,我认为收获很大,正如上面所说的那样,通过课程设计,既复习
了以前的旧知识,又学到了一些新的知识;设计增强了我们用所学知识去解决具体问题的能力,进一步培养了我们独立思考问题和解决问题的能力。
特别是学会了在Visual C++ 集成开发环境中如何调试程序的方法。
当然,老师的悉心指导和同学的帮助也是不可忽视的,在此感谢本次课程设计中所有辅导老师对我的关心和帮助,诚心诚意感谢老师对我的鼓励与教导,是老师在我迷茫的时候给了我些许提示,激发了我编程的灵感;还有,我在此也十分感谢本次课程设计中同学们对我的帮助,尽管本次不是团队合作,但是他们也给了我不少的提示和帮助,我们相互沟通、共同进步。
【参考文献】
[1] 杨长兴、刘卫国.《C++程序设计》.中国铁道出版社
[2] 刘卫国、杨长兴.《C++程序设计实践教程》.中国铁道出版社第三篇:c++课程实践火车票管理系统
#include #include #include #include #include
using namespace std;
class Bus_infor { int No;
static int Bus_No;char start[20];char end[20];int Bus_order;
int all_tickted;int tickted;int Hour_start,Minute_start,Hour_end,Minute_end;int Hour;int Minute;
public: Bus_infor *next;Bus_infor();~Bus_infor();int Get_no();int Get_all_tickted();int Get_tickted();int Get_bus_order();
char *Get_start();char *Get_end();void addr();
void Order_tickt(int n);void Unorder_tickt(int n);void GetTime_start();void GetTime_end();void ShowTime();void GetTime();void Show_infor();
void input(){
cout<<“ttt按提示输入:”<
cout<<“tt输入车次: ”;
cin>>Bus_order;
cout<<“请输入车的额定载量: ”;
cin>>all_tickted;
GetTime_start();
GetTime_end();
addr();
char a;
cout<<“是否清空售票(y/n)?”<
cin>>a;
if(a=='y')tickted=0;}
void input(ifstream & is)
{
is>>Bus_order>>start>>end>>all_tickted>>tickted>>Hou r_start>>Minute_start>>Hour_end>>Minute_end;
is.get();
}
void output(){cout<<“客车基本信息如下:”<
<<“ 发车时间:”<
<<“ 起点站:”<
<<“ 终点站:”<
<<“行车时间”<
<<“额定载量”<
void output(ofstream & os)
{
os<
<
<
<
<
<
<
<
<
<
};
int Bus_infor::Bus_No=1;
void Bus_infor::GetTime_start(){ int NewH=0,NewM=0;cout<<“请输入发车时间:”<>NewH>>NewM;Hour_start=NewH;Minute_start=New M;}
void Bus_infor::GetTime_end(){ int NewH=0,NewM=0;cout<<“请输入行车时间:”<>NewH>>NewM;Hour_end=NewH;Minute_end=NewM;} void
Bus_infor::GetTime(){ if(Minute_end>=Minute_start){Minute=(M inute_end-Minute_start);Hour=(Hour_end-Hour_start);} else {Minute=(Minute_end-Minute_start+60);Hour=(Hour_end-Hour_start-1);} } void Bus_infor::ShowTime(){ cout<
cout<
tickted=0;} Bus_infor::~Bus_infor(){ Bus_No--;}
void Bus_infor::addr(){ cout<<“请输入起点站与终点站:”< cin>>a;cin>>b;strcpy(start,a);strcpy(end,b);}
char *Bus_infor::Get_start(){ return start;}
char *Bus_infor::Get_end(){ return end;}
int Bus_infor::Get_no(){
return No;}
int Bus_infor::Get_all_tickted(){ return all_tickted;}
int Bus_infor::Get_tickted(){ return tickted;}
int Bus_infor::Get_bus_order(){ return Bus_order;}
void Bus_infor::Order_tickt(int n){ tickted=tickted+n;}
void Bus_infor::Unorder_tickt(int n){ tickted=tickted-n;};
class Bus_link{ public: Bus_link(){head=new Bus_infor;head->next=NULL;key=0;}
void input();void mend();void del();int find(Bus_infor **p,int num,char *pn);
int find1(Bus_infor **p,int num,char *pn);
void found();void show();
void Order();
void Unorder();
void save();
void begin();
void clear();
char mainmenu();
int getkey(){ return key;}
void setkey(int k){ key=k;} private:
Bus_infor *head;
int key;};
void Bus_link::input(){ Bus_infor *p,*p2=NULL;p=head;
int n;while(p->next)
p=p->next;while(n){
p2=new Bus_infor;
p2->input();
p->next=p2;
p2->next=NULL;
p=p->next;
Bus_link::setkey(1);
cout<<“ttt按1继续,按0返回: ”;
cin>>n;} }
void Bus_link::Order(){ Bus_infor *p;cout<<“确定购票(y/n)?”<>X;if(X=='y'){
int num;
cout<<“ttt输入车次号: ”;
cin>>num;
if(!find1(&p,num,“^”))
{
cout<<“tt找不到你要定票的车辆的内容!”<
return;
}
cout<<“输入要定的票数”;
int n;cin>>n;
p=p->next;
if((p->Get_tickted()+n)<=p->Get_all_tickted())
{p->Order_tickt(n);
cout<<“谢谢使用”<
else cout<<“对不起,没有足够的票数。
”<
} else if(X=='n')cout<<“谢谢使用”<
void Bus_link::Unorder(){ Bus_infor *p;cout<<“确定退票(y/n)?”<>X;if(X=='y'){
int num;
cout<<“ttt输入车次号: ”;
cin>>num;
if(!find1(&p,num,“^”))
{
cout<<“tt找不到你要定票的车辆的内容!”<
return;
}
cout<<“输入要退的票数”;
int n;cin>>n;
p=p->next;
if((p->Get_tickted()-n)>=0)
p->Unorder_tickt(n);
else cout<<“对不起,数据出错!。
”<
} else if(X=='n')cout<<“谢谢使用”<
void Bus_link::found(){ Bus_infor *p;int num=-1,n=9;char name[20]=“^”;do {
cout<<“tt1:按车次查找,2:按终点站查找: ”;
cin>>n;}while(n<1||n>2);if(n==1){
cout<<“ttt输入车次: ”;
cin>>num;} if(n==2){
cout<<“ttt输入终点站: ”;
cin>>name;} if(!find(&p,num,name)){
cout<<“tt找不到你要查找的内容!”<
return;} }
int Bus_link::find(Bus_infor **p1,int num,char *pn){ Bus_infor *p;
p=head;
int t=0;
while(p->next){
(*p1)=p;
if((p->next)->Get_bus_order()==num||!strcmp((p->next)-> Get_end(),pn))
{
(p->next)->output();
t=1;
break;
}
p=p->next;} return t;}
int Bus_link::find1(Bus_infor **p1,int num,char *pn){ Bus_infor *p;p=head;int t=0;while(p->next){
(*p1)=p;
if((p->next)->Get_bus_order()==num||!strcmp((p->next)-> Get_end(),pn))
{return 1;}
p=p->next;}
return 0;} void Bus_link::del(){ Bus_infor *p,*p2;int num;cout<<“ttt输入车次号: ”;cin>>num;
if(!find(&p,num,“^”)){
cout<<“tt找不到你要删除的内容!”<
return;} p2=p->next;p->next=p2->next;delete p2;Bus_link::setkey(1);}
void Bus_link::show(){ Bus_infor *p;p=head;while(p->next){
(p->next)->output();
p=p->next;} } void Bus_link::mend(){ Bus_infor *p;int num=-1;char name[20]=“^”;
cout<<“ttt输入车次号: ”;cin>>num;
if(!find1(&p,num,name)){
co ut<<“tt找不到你要修改的内容!”<
return;}(p->next)->output();(p->next)->input();Bus_link::set key(1);} void Bus_link::save(){ Bus_infor *p;p=head;ofstream os(“bus.txt”,ios::out);if(Bus_link::getkey()==1){
while(p->next)
{
(p->next)->output(os);
p=p->next;
} } cout<<“tt t文件已保存!”<
Bus_infor *p,*p2;p=head;clear();long t;ifstream is(“bus.txt”,ios::in);
if(!is){
ofstream os(“bus.txt”,ios::out);
os.close();
return;} int num=-1;while(1){
num=-1;
t=is.tellg();
is>>num;
is.seekg(t);
if(num<0)
{
is.close();
return;
}
p2=new Bus_infor;
p2->input(is);
p->next=p2;
p2->next=NULL;
p=p->next;} }
void Bus_link::clear(){ Bus_infor *p,*p2;p=head->next;while(p){
p2=p;
p=p->next;
delete p2;} }
char Bus_link::mainmenu(){ char n[6];cout<<“nn
---欢迎使用车票管理系统---”<
制作人刘强
”<
<<“
物理学院
”<
<<“
”<
<<“
1.录入车票信息
2.浏览车票信息
<<”
3.查询车票信息
4.删除车票信息
<<“
5.修改车票信息
6.定购车票信息
<<”
7.退还车票信息
8.保存车票信息
<<“
0:
退出系统
<<”--------------------------“<
<<”--------------------------“<
<<”
请选择功能按钮: “;cin>>n;return n[0];} int main(){
Bus_link pp;int k=1;char n;pp.begin(); while(k==1){
n=pp.mainmenu();
switch(n)
{
case '1':pp.input();break;
case '2':pp.show();break;
case '3':pp.found();break;
”<
case '4':pp.del();break;
case '5':pp.mend();break;
case '6':pp.Order();break;
case '7':pp.Unorder();break;
case '8':pp.save();break;
case '0':
if(pp.getkey()==1)
{
cout<<“ttt是否保存? 1 : 保存 0:不保存: ”;
cin>>k;
if(k==1)
pp.save();
}
pp.clear();
k=0;
break;
} } return 0;}
第四篇:c++课程心得体会
心得体会
在这几周的面向对象的课程设计中,通过完成本次任务,我所收获到的东西颇丰。
利用设计这次学生信息管理的机会,使我熟练地掌握了上学期所学的C++面向对象程序编程,也更加深入理解了学生信息管理的操作原理和了解了文件的用法及其作用,为日后如何熟练使用文件打下坚实的基础。
此外,本次算法的实现采用了C和C++语言面向对象编程,使我对基类的构建,派生类的使用等等各类c的知识,有更深层次的认识。
在这次课程设计中,我还懂得了程序开发的一些比较重要的步骤,如总体分析,程序模块设计等。
相信通过此次课程设计会为我以后的学习和工作带来很大的好处。
最重要的还是激发我对编程的兴趣和热情,让我从一个只懂理论变成了做一些小程序,让我们对编程更加热爱。
最重要的是,在这次的编程中我们不断地从源程序中寻找错误,修改错误,通过不断地更新程序提升对编程的理解。
虽然现有的编程还不完美,但是执着认识到了追求完美的信念,相信在下一次的面向对面编程的过程中能将程序推向所能的极致。
通过在这次编程中和队友的携手合作,为以后的合作打下不错的默契,培养相互的信心,提高集体的凝聚力。
总而言之,这次的课程设计是比较成功的。
程序设计最重要的是要敢于创新,而不应该止步于旧知识的应用,唯有不安于现状,才能有更大的发展空间。
第五篇:中南大学(C++实践报告)
中南大学
本科生课程设计(实践)设计报告(程序设计基础)题目
MFC课程设计
学生学号
学生姓名
指导教师
学院
专业班级
计算机基础教学实验中心 2015年
06月 14
日
一、引言
MFC(Microsoft Foundation Class Library, 微软基础类库)是微软基Windows平台下的C++类库集合。
MFC包含了所有与系统相关的类,其中封装了大多数的API(Application Program Interface)函数,提供了应用程序框架和开发应用程序的工具,如应用程序向导、类向导、可视化资源设计等高效工具,用消息映射处理消息响应,大大简化了Windows应用程序的开发工作,使程序员可以从繁重的编程工作中解脱出来,提高了工作效率。
程序设计实践旨在课堂学习的基础上帮助学生掌握C++应用系统的开发方法和技巧。
在系统学习完《C++程序设计》这门课程后,通
过实践对几个小型C++应用程序实例设计与实现过程分析,帮助学生利用C++开发应用系统的一般方法和步骤,掌握MFC的基本知识。
这次实践采用学生上机与老师集体辅导的方式,以完成老师下发的《C++语言课程设计任务书》为要求和目的,运用课堂上学习的C++基础知识,采用Visual C++ MFC编程系统,以全新的角度和感知去认识C++语言在编程方面的优越性。
在实践过程中,基于对话框的MFC应用程序,达到了解基本控件,如静态文本框、命令按钮、编辑框、列表框、组合框等的使用的目的。
还有理解Windows应用程序采用“消息传递、事件驱动”的运行机制。
本次实践的任务主要分为两个部分:使用Visual C++ MFC编程实现以下功能:
输入一元二次方程ax2+bx+c=0 的系数a、b、c,计算并输出两个根x1、x2.编写一个能对列表框进行项目添加、修改和删除操作的应用程序。
编写一个程序,绘制-2π~2π之间的sin曲线。
用定时器控制蝴蝶在窗口中飞舞。
等共10道。
将第一部分中选择3~5题,做一个综合程序,要求有登陆界面和调用各部分的功能。
总体设计
本次实践的主要目的就是了解和掌握运用MFC编程的一般思想和具体的操作步骤。
实践主要是基于MFC的多文档对话框和单文档视图,通过实践完成第一大部分的任务之后,还要完成第二部分的综合题目。
第二部分的任务由学生自主发挥,自主找资料,询问同学和老师。
第一部分的任务比较简单,具体的就不再描述。
关于第二部分,我做了一个基于对文档对话框。
首页为一个登陆页面,需要输入用户名和密码才能登陆,登陆后的页面是把第一大部分的几个题目连接起来。
达到预览的目的。
三、详细设计
实践前首先要认识AppWizard的工作环境。
其项目工作区一共有三个选项卡分别为“ResourceView”“ClassView”“FileView”,中间是对话框设计界面,右边是控件工具栏。
实践过程中,我们是先完成第一大部分的任务。
虽然在第一次上机实践前,我仔细地阅读了老师给我们下发的资料,并且结合《C++程序设计实践教程》了解相。