C++课程设计报告文档格式.docx

上传人:b****3 文档编号:7774279 上传时间:2023-05-09 格式:DOCX 页数:12 大小:20.31KB
下载 相关 举报
C++课程设计报告文档格式.docx_第1页
第1页 / 共12页
C++课程设计报告文档格式.docx_第2页
第2页 / 共12页
C++课程设计报告文档格式.docx_第3页
第3页 / 共12页
C++课程设计报告文档格式.docx_第4页
第4页 / 共12页
C++课程设计报告文档格式.docx_第5页
第5页 / 共12页
C++课程设计报告文档格式.docx_第6页
第6页 / 共12页
C++课程设计报告文档格式.docx_第7页
第7页 / 共12页
C++课程设计报告文档格式.docx_第8页
第8页 / 共12页
C++课程设计报告文档格式.docx_第9页
第9页 / 共12页
C++课程设计报告文档格式.docx_第10页
第10页 / 共12页
C++课程设计报告文档格式.docx_第11页
第11页 / 共12页
C++课程设计报告文档格式.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C++课程设计报告文档格式.docx

《C++课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告文档格式.docx(12页珍藏版)》请在冰点文库上搜索。

C++课程设计报告文档格式.docx

l对于用户要求输入相应的帐号和密码,如果三次出错则将卡吃掉并打印出相应凭条。

l若输入的取款金额超出账户余额,则提示用户输入有误并提供更正功能

2、1封装一个完善的字符串,实现字符串的基本操作

2、1、1总体设计(总的任务画出总体设计图,总体设计方案及主要设计原理;

(算法的设计))CMyString-string:

char*-length:

int+CMyString():

+CMyString(s:

char*):

CMyString&

):

+getlength():

int+getcontents():

void+setcontents(s:

char*):

void+friendvoidstrpare(str1:

CMyString,str2:

CMyString):

+strjudge():

void+operator[](n:

int)

:

char&

+friendCMyStringoperator+(CMyString&

st1,CMyString&

st2):

+voidoperator=(constCMyString&

s):

图1-1-1字符串类的类图通过类来实现字符串的封装,用成员函数和友元函数、运算符的重载来实现字符串的基本操作。

2、1、2详细设计(要求详细写出每个模块的功能实现,关键技术,关键代码解释等。

)操作模式:

功能实现:

用一个主函数,把许多功能融入集中关键代码:

voidmain(){charstr[2][100];

for(inti=0;

i<

2;

i++){cout<

<

"

第"

i+1<

个字符串:

;

cin>

>

str[i];

}CMyStringstr1(str[0]),str2(str[1]);

cout<

第一个字符串的长度:

str

1、getlength()<

endl;

第二个字符串的长度:

2、getlength()<

两个字符串的比较:

strpare(str1,str2);

判断字符串是否为空,并置空:

第一个字符串"

1、strjudge();

第二个字符串"

2、strjudge();

1、setcontents("

liyushan"

);

2、setcontents("

studieshard、"

CMyStringstr3("

chengjingui"

//字符串的赋值(调用带一个参数的构造函数)cout<

第三个对象的内容:

3、getcontents();

输入一个小于等于"

3、getlength()<

的正整数:

intj;

j;

输出第"

j<

个字符是:

str3[j-1]<

str3=str1+str2;

第三个字符串的长度为:

第三个字符串的内容是:

str

3、、getaddress();

}字符串类:

功能:

实现字符串的封装,安全关键代码:

classCMyString//类的定义{char*string;

//字符串的内容intlength;

//字符串的长度public:

CMyString()//不带参数的构造函数{length=0;

string=NULL;

}CMyString(char*s)//带一个参数的构造函数{length=strlen(s);

string=newchar[length+1];

strcpy(string,s);

}CMyString(CMyString&

s)//拷贝构造函数:

来实现对象之间的拷贝{length=s、length;

string=s、string;

}…………};

字符串的比较:

实现字符串的比较代码:

voidstrpare(CMyStrings1,CMyStrings2)//字符串的比较的实现(友元函数){ints;

s=strcmp(s

1、string,s

2、string);

if(s>

0)

s

1、string<

大于"

2、string<

elseif(s<

小于"

elsecout<

等于"

}注意:

1、运用到类的成员函数的类外定义

2、运用到string、h头文件中的strcmp()字符串的长度:

代码:

voidgetcontents()//求字符串的内容{cout<

string<

}判断字符串是否为空:

关键代码:

friendvoidstrpare(CMyStringstr1,CMyStringstr2);

//友元函数实现两个字符串对象的比较的声明voidstrpare(CMyStrings1,CMyStrings2)//字符串的比较的实现(友元函数){ints;

1、运用友元函数并类外定义:

先声明再定义(不要加限定符)

2、要加关键字:

friend函数参数为对象

3、运用函数:

strcmp()置空且赋值:

功能的实现:

是先用delete来置空,再分配内存进行赋值代码:

voidsetcontents(char*s)//先置空,再重置字符串的内容{length=strlen(s);

被置空"

deletestring;

重置后:

1、参数为指针

2、指针要先分配内存再运用

3、运用newdelede来分配动态内存

4、要注意内存长度的选择(内存的空间)求字符串中的一个字符:

要用运算符的重载[]关键代码:

char&

operator[](intn)//求字符串中的字符用运算符重载[]{staticcharch=0;

if(n>

length-1){cout<

整数下标越界"

returnch;

}elsereturn*(string+n);

下标[]运算符的重载:

返回类型是char&

完成串的赋值与合并:

实现:

重载+关键代码:

CMyStringoperator+(CMyString&

st2)//运算符+重载的实现(友元函数):

实现两个字符串的连接{CMyStringt;

t、length=st

1、length+st

2、length;

//连接时:

先计算长度,t、string=newchar[t、length+1];

//再重新分配内存strcpy(t、string,st

1、string);

//先拷贝再连接strcat(t、string,st

returnt;

//返回类型是对象t}注意:

先分配再拷贝链接voidoperator=(constCMyString&

s)//运算符=的重载{deletestring;

string=newchar[strlen(s、string+1)];

strcpy(string,s、string);

参数为类的引用得到表示字符串的指针地址:

voidgetaddress()//得到字符串的指针地址{cout<

字符串的指针地址:

&

}

2、1、3调试及问题解决问题1:

出现乱码,内存为空解决:

析构与置空同时运用,使内存出现2次删除,出现错误运用默认构造函数问题2:

拷贝构造函数的深浅拷贝问题解决:

定义拷贝构造函数问题3:

运算符的重载问题解决:

要对=进行重载解决问题

2、2利用C++中的类实现线性链表的常见操作

2、2、1总体设计NodeintData;

Node*next;

图2-2-1链表结构体list-Node*head;

2-2链表类

2、2、2详细设计登录模式:

用主函数:

开始出现功能代码

1、创建一个链表

2、在第i个结点处插入值为x的结点

3、求链表的长度

4、删除值为x的结点

5、删除第i个结点

6、搜索结点

7、显示所有的结点

8、置空结点

9、退出函数分别在其中调用各自的函数关键代码:

voidmain(){inta;

listb;

*******需要先创建一个链表再操作*****"

while

(1){cout<

选择你所需要的服务"

1、创建一个链表"

2、在第i个结点后插入值为x的结点"

3、求链表长度"

4、删除值为x结点"

5、删除第i个结点"

6、搜索结点"

7、显示所有结点"

8、置空结点"

9、退出程序"

请输入功能代码:

a;

if(a==1){b、create();

b、Display();

}elseif(a==2)

{intx,i;

分别输入要插入的数、位置i"

x>

i;

b、Insert(x,i);

}elseif(a==3)cout<

为链表长度:

b、Length()<

elseif(a==4){cout<

请键入你所要删除的数字"

intc;

c;

b、Delete(c);

}elseif(a==5){cout<

请键入你所要删除的位置"

inti;

b、ReMove(i);

}elseif(a==6){cout<

请键入要查询的数"

inte;

e;

b、Find(e);

}elseif(a==7)b、Display();

elseif(a==8){b、MakeEmpty();

}elseif(a==9){cout<

BYEBYE!

谢谢使用!

exit

(1);

}else{cout<

你输入有误、"

continue;

//结束本次循环,进行下一次的循环(continue只能用于循环语句中的)}}cout<

循环结束了。

循环的运用Breakcontinuereturnexit()的不同和运用创建一个链表:

运用类的成员函数关键代码:

voidlist:

create(){Node*p,*tail;

intdata,i;

输入链表的数据和长度"

data>

if(i==0){head=NULL;

创建一个空的链表。

重新创造个链表"

create();

//递归调用}else{while(length<

i){length++;

if(length==1){head=newNode;

tail=head;

head->

Data=data;

}else{p=newNode;

p->

tail->

next=p;

tail=p;

}cout<

输入下一个结点的值"

data;

}tail->

next=NULL;

length--;

}}注意:

先确定插入的链表数当是0时:

我运用了递归让其建立一个不为空的链表当不为0时,我先建立一个头文件,再在尾部加入新的结点,从而建立一个链表在第i个结点处插入值为x的结点:

功能的实现:

需要找到第i个节点再插入x,不过要注意i的值llength:

提示错误,用循环重写li<

=length:

插入头文件后或插入中间结尾关键代码:

Insert(intx,inti)//将x插入到第i个结点(不含头结点)的之后{Node*p,*q,*s,*t=head;

s=newNode;

//创建新结点:

ss->

Data=x;

while

(1){s->

//新结点的数据是:

xif(i>

length){cout<

输入有误,请重新输入:

输入插入的数据和结点数:

}else{for(intj=1;

t=t->

next)//查找第i个结点j++;

p=t;

//p指向第i个结点,q指向第i+1个结点q=p->

next;

if(p==NULL){head=s;

s->

}else{if(p->

next!

=NULL){s->

next=q;

next=s;

}else{p->

}}break;

}}}求链表的长度:

通过遍历链表来得到链表的长度关键代码:

intlist:

Length()//求链表的长度(结点数){Node*p=head;

if(p==NULL){cout<

该链表是空的。

returnlength;

}else{for(length=1;

=NULL;

p=p->

next){length++;

//长度}returnlength;

}}注意:

函数类型为int删除值为x的结点功能的实现:

从头往后找值为x的结点,找到后将其删除关键代码:

Delete(intx)//删除链表中值为x的结点,成功返回1,否则返回0{Node*p=head,*q;

//p用于指向结点x,q指向结点x的前一个结点(删除值为x的结点p)if(p==NULL)

//若是空表{cout<

这是个空的链表,删除失败!

return0;

}if(p->

Data==x)//若是第一个结点{head=p->

deletep;

删除第一个结点,值为"

x<

return1;

}else{while(p->

Data!

=x&

=NULL)//查找值为x的结点p;

{q=p;

Data==x)//如果有值为x的结点,返回1{q->

next=p->

删除了值为"

的结点,删除成功。

}else{cout<

没有该结点,删除失败!

//没有,返回0}}}删除第i个结点功能的实现:

找到结点将其删除关键代码:

ReMove(inti)

//删除链表中第i个结点,成功返回1,否则返回0{Node*p,*q,*t=head;

for(intj=1;

//p指向第i个结点,q指向第i+1个结点q=p->

if(i==1){head=p->

删除第"

个结点,删除成功!

}elseif(i>

1&

=length){q->

链表中无该结点,删除失败!

}}搜索结点:

有循环的方法找到结点关键代码:

Find(intx)//在链表中查找数值为x的结点,成功返回1,否则返回0{Node*p=head;

length=1;

while(p!

=NULL&

=x){length++;

Data==x){cout<

找到第"

length<

个结点是:

没有找到数据是:

的结点"

}}显示所有的结点功能的实现:

考虑空链表与非空的两种情况关键代码:

Display()//显示整个链表各结点的数值并输出链表的长度{Node*p=head;

length=0;

if(head==NULL)cout<

这是一个空的链表"

else{cout<

该链表是:

=NULL){cout<

Data<

"

length++;

}cout<

该链表的长度为:

}置空结点:

从头往后删除,循环时p=p->

head=p->

deletep;

p=head;

MakeEmpty()//置空函数{Node*p=head;

if(p==NULL)cout<

这个链表是空的。

else{for(;

next){head=p->

}deletep;

head=NULL;

return;

}}退出函数功能的实现:

用exit()函数关键代码:

elseif(a==9){cout<

本操作要退出程序:

就需要退出循环,退出主函数,则用exit()或break或return注意他们的区别!

exit()重要

2、2、3调试及问题解决问题1:

链表的设计怎么吧?

答:

需要先创建一个非空链表再进行其他的操作。

问题2:

缺少头函数?

在用exit()时缺少头文件。

需要加上头文件#include<

stdlib、h>

,从而解决问题。

问题3:

创建一个链表时,当为空时不能继续进行?

采用直接递归调用,实现创建一个非空的链表。

2、3编写一个银行ATM自动取款机模拟程序

2、2、1总体设计开始登陆界面输入选择代码i判断i的值i=ii=2i=3i=4i=5i=6i=7i为其他

2、2、2详细设计登陆模块:

通过7个代码实现功能之间的选择

1、开户

2、存款

3、取款

4、查询余额

5、转账

6、更改密码

7、退出关键代码:

voidmain(){inti;

\t\t*************************************************\n"

\t\t*欢迎使用自动取款机*\n"

\t\t-------------------------------------------------\n"

cout<

\t\t请选择您要办理的手续:

\n"

\t\t\t\t

1、开户\n"

2、存款\n"

3、取款\n"

4、查询余额\n"

5、转账\n"

6、

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2