C++课程设计报告文档格式.docx
《C++课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告文档格式.docx(12页珍藏版)》请在冰点文库上搜索。
![C++课程设计报告文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/55d4de77-1e30-434e-80c4-2f5dd0296afc/55d4de77-1e30-434e-80c4-2f5dd0296afc1.gif)
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、