C++课程设计报告精华版.docx
- 文档编号:24041205
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:60
- 大小:191.96KB
C++课程设计报告精华版.docx
《C++课程设计报告精华版.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告精华版.docx(60页珍藏版)》请在冰豆网上搜索。
C++课程设计报告精华版
一、课程设计目的及要求
1.1设计目的
1.1.1提高和加强学生的计算机应用与软件开发能力,使学生由初学者向专业的程序员过渡。
1.1.2.培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应计算机产业日新月异发展的形势。
1.1.3.学习和掌握C++程序设计方法以及上机调试技巧,为今后学习其它专业课程打好基础。
1.2设计要求
1.2.1.ATM自动取款机(分别运用类类型和结构体类型)
实现ATM取款机的基本功能,如给用户提供查询余额、取款、修改密码、吃卡、退出系统等服务,可根据实际情况添加(如缴费、转账等服务)。
●对于用户要求输入相应的帐号和密码,如果三次出错则将卡吃掉并打印出相应凭条。
●若输入的取款金额超出账户余额,则提示用户输入有误并提供更正功能
1.2.2.封装字符串
●定义一个串类CMyString,建立适当的构造函数
●字符串使用指针保存字符串
●必须实现如下操作,字符串比较、求串的长度、判断串是否为空、将串置空、字符串赋值(包括两个字符串类复制,一个字符串赋值到CmyString对象)、求字符串中的一个字符或改变字符串中的一个字符(采用重载[]),完成串的赋值与合并(重载+),得到表示字符串的指针地址
●在字符串类的基础上封装彩色字符串类。
(学会使用继承和多态)可选
1.2.3.利用C++中的类实现线性链表的常见操作
●带表头结点(存放的是该线性链表的长度),结点存放的是整型数值;
●实现以下操作:
⏹置空MakeEmpty()
⏹求长度Length()
⏹插入Insert(intx,inti):
将x插入到第i个结点(不含头结点)的之后;
⏹删除Delete(intx):
删除链表中值为x的结点,成功返回1,否则返回0;
⏹删除ReMove(inti):
删除链表中第i个结点,成功返回1,否则返回0;
⏹搜索Find(intx):
在链表中查找数值为x的结点,成功返回1,否则返回0;
⏹显示Display():
显示整个链表各结点的数值。
●写出类的构造函数、复制构造函数及析构函数
●编写一个函数,使用户通过选择进行相关链表操作。
二、课程设计具体实现
2.1.ATM自动取款机(类类型)
2.1.1总体设计
转账
根据C++类的基本知识和类的基本性质去实现ATM自动取款机基本功能;
2.1.2详细设计
登陆模块
主要完成功能为:
当用户开始使用本系统,进入登陆模块。
屏幕显示菜单提示,用户可根据需要选择相应功能。
具体如下:
开户、存款、取款、查询余额、修改密码、转账
主要适用技术:
登陆函数主要是使用了循环函数和dowhile函数,还有许多的成员函k.OpenAccount()、k.SaveMoney()、k.TakeMoney()、k.Inquiry()、k.Changepsw()、k.Transfer();
关键代码如下:
voidmain();主函数;
do{}while
(1);//循环结构语句
switch(i);case1:
default:
bankk;//默认构造函数
k.OpenAccount();break;//开户
k.SaveMoney();break;//存款
k.TakeMoney();break;//取款
k.Inquiry();break;//查询余额
k.Changepsw();break;//修改密码
k.Transfer();break;//转账
开户模块
主要完成功能为:
进入开户模块。
屏幕显示菜单提示,可根据要求依次输入姓名、卡号、密码和预存款金额,完成以上操作之后,屏幕上显示恭喜您,开户成功。
主要适用技术:
开户函数使用了基本函数;
主要代码如下:
voidOpenAccount()//开户函数
存款模块
主要完成功能为:
当开始使用本系统,进入存款模块。
屏幕显示菜单提示,根据要求依次输卡号和密码,如果卡号和密码正确,然后输入存款金额,存款成功后显示卡上余额,(当密码不正确的时候,可以有三次机会输入自己的正确密码,如果三次都没有输入正确,卡将会被吃掉,以下同);
主要使用技术:
存款函数使用了循环语句函数、判断函数和选择函数
主要代码如下:
voidSaveMoney()//存款函数
for(inti=1;i<=N;i++)else//循环函数语句
exit
(1);//结束函数
取款模块
主要完成功能为:
进入取款模块。
屏幕显示菜单提示,根据要求依次输卡号和密码,如果卡号和密码正确,然后输入取款金额,如果全款金额小于或者等于卡上余额,则取款进行,否则重新输入取款金额。
取款成功后显示卡上余额
主要适用技术:
存款函数使用了循环语句函数、判断函数和选择函数
主要代码如下:
voidTakeMoney()//取款函数
for(inti=1;i<=N;i++)else//循环函数语句
exit
(1);//结束函数
查询余额
主要完成功能为:
进入查询余额模块。
屏幕显示菜单提示,根据要求依次输卡号和密码,如果卡号和密码正确,屏幕上将显示你的余额,然后进入修改密码模块;
主要适用技术:
存款函数使用了循环语句函数、判断函数和选择函数
主要代码如下:
voidInquiry()//查询余额函数
for(inti=1;i<=N;i++)else//循环结果语句
exit
(1);//结束函数
修改密码
主要完成功能为:
进入修改密码模块。
屏幕显示菜单提示,根据要求依次输卡号和密码,如果卡号和原始密码正确,则将进行修改密码的步骤,先输入原始密码,然后再输入新密码,之后确认新密码,确认正确之后,密码修改成功,接下来进入转账模块;
主要适用技术:
存款函数使用了循环语句函数、判断函数和选择函数
主要代码如下:
voidChangepsw()//修改密码函数
for(inti=1;i<=N;i++)else//循环结果语句
exit
(1);//结束函数
转账模块
主要完成功能为:
进入转账模块。
屏幕显示菜单提示,根据要求依次输卡号和密码,如果卡号和原始密码正确,输入所要转账的账号并输入转账金额,如果转账金额小于余额,转账成功输出卡上余额,
主要适用技术:
存款函数使用了循环语句函数、判断函数和选择函数
主要代码如下:
voidTransfer()//转账函数
for(inti=1;i<=N;i++)else//循环结果语句
exit
(1);//结束函数
2.1.3调试及问题解决
主要问题:
错误较多,由于修改了好多次,程序中的血多代码都出现了不同程度上的错误,尤其是bank和bank[i]之间经常出现问题,我通过调试,发现了好多这样的问题,通过帮助和自己的经验,解决了这个问题;还有就是程序后面那个是否继续,例如:
cout<<"是否继续操作1是2否"< 对于用户要求输入相应的帐号和密码,如果三次出错则将卡吃掉并打印出相应凭条,没有实现,后来通过增加代码,实现了这个功能。 2.2、ATM自动取款机(结构体类型) 卡号、密码、转账卡号和金额 2.3.封装字符串 2.3.1总体设计 输出函数 主要根据字符串的基本函数和类的基本知识,成员函数的基本性质,实现字符串的功能。 2.3.2详细设计 登陆模块: 字符串程序是一次性输出的程序,登陆之后直接输出整个程序要输出的结果,其中有成员函数: 构造函数、字符串赋值函数、判断是否为函数、比较字符串函数、字符串重载函数、重载[]函数、求长度函数、置空函数,得到地址函数、输出函数; 主要使用技术: 使用了字符串的基本函数: strcpy、strmpy、strcat和strlen函数,调用了许多成员函数: Print()、Compare()、Judgement()、GetLength()、SetContents()、GetID()和SetEmpty()函数; 主要代码如下: voidmain()//主函数 cmystring_1.Print();//调用Print()函数 Compare(cmystring_1,cmystring_2);//调用Compare() cmystring_2.GetLength()< Judgement(cmystring_1);//调用Judgement()函数 SetContents(cmystring_1,cmystring_2);//调用SetContents()函数 cmystring_1.GetID();//调用GetID()函数 cmystring_1.SetEmpty();//调用SetEmpty(函数 构造函数模块: 主要完成功能为: 进入构造函数模块,主要功能是实现私有成员的初始化; 主要使用技术: 使用了字符函数的基本函数strcpy和strlen函数; 主要代码如下: CMyString(char*cont=NULL,intlen=0)//构造函数 strcpy(contents,cont);//字符串复制 字符串赋值函数模块: 主要完成功能为: 进入字符串赋值函数模块,主要功能是实现字符串的赋值; 主要使用技术: 使用了字符串的基本函数strcpy,,还使用了堆栈函数, 主要代码如下: voidSetContents(CMyStringc,CMyStringd)//字符串赋值头函数 if(c.contents! =NULL)//判断语句 delete[]c.contents;//释放空间 c.contents=newchar[strlen(d.contents)+1];//重新申请内存 strcpy(c.contents,d.contents);//字符串复制 判断是否为空函数模块: 主要完成功能为: 进入构造函数模块,主要功能是实现判断字符串是否为空,如果为空,则字符串为NULL,否则,字符串不为空; 主要使用技术: 使用了if函数; 主要代码如下: voidJudgement(CMyStringe)//判断是否为空头函数 if(e.contents==NULL)//判断函数 比较字符串函数模块 主要完成功能为: 进入构造函数模块,主要功能是实现字符串的比较,当两个字符串相比等于零时,输出相等;当前面与后面的比较,输出一个整数,前面的字符串长;当前面与后面的比较,输出一个负数,后面的字符串长; 主要使用技术: 使用了strcpy函数,比较函数; 主要代码如下: voidCompare(CMyStringa,CMyStringb)//比较函数头函数 if(strcmp(a.contents,b.contents)==0)//字符串比较函数 字符串重载函数模块 主要完成功能为: 进入构造函数模块,主要功能是实现字符串的连接,该函数采用了字符串函数中的strcat函数模型,实现字符串的连接完成串的赋值与合并(重载+)得到表示字符串的指针地址; 主要使用技术: 运用了strcat函数,连接两个字符串。 主要代码如下: CMyStringoperator+(CMyString&a,CMyString&b)//重载+连接两个字符串 strcat(a.contents,b.contents);//字符串连接函数 重载[]函数模块: 主要功能: 进入重载[]函数模块,主要功能是实现字符串中的一个字符或改变字符串中的一个字符(采用重载[])。 主要使用技术: 使用了strcat函数,判断函数的长度; 主要代码如下: char&operator[](intn)//重载[]头文件 staticcharch=0;//静态static函数 intlen=strlen(contents);//字符串长度函数 求长度函数模块 主要功能: 进入求长度函数模块,主要实现求出字符串的长度 主要代码如下: strlen函数 置空函数模块 主要功能: 进入置空函数模块,主要实现先字符串的置空 主要代码如下: SetEmpty()函数。 得到地址函数模块 主要功能: 进入得到地址函数模块,主要实现输出字符串的地址 主要代码如下: GetID()函数; 输出函数模块 主要功能: 进入输出函数模块,主要更能就是输出 主要代码如下: Print()函数; 2.3.3调试及问题解决 出现的问题: voidmain()函数里面的几个SetContents()、Judgement()、Compare()和CMyStringoperator+()函数,运行的时候经常出现说是他们的私有成员不能运行,也不知道什么原因,后来通过老师和同学的帮助,把这些函数定义为friend函数,然后程序运行了,呵呵,这是调试程序里最难的,终于克服了,含有就是CMyStringoperator+()函数,不知道怎么用,也不知道怎么连接两个字符串,后来运用了strcat函数连接两个字符串,实现了CMyStringoperator+()函数的作用。 2.4、.利用C++中的类实现线性链表的常见操作 2.4.1总体设计 显示 主要运用了链表的基本知识和类的基本知识去实现链表的基本功能。 2.4.2详细设计 登陆模块 主要完成功能为: 当用户开始使用本系统,进入登陆模块。 屏幕显示菜单提示,用户可根据需要选择相应功能。 具体如下: 构造函数、析构函数、置空、求长度、插入、删除、删除、搜索、显示 主要使用技术: 使用了成员函数: list()、~list()、voidMakeEmpty()、intLength()、voidInsert(intx,inti)、intDelete(intx)、intRemove(inti)、intFind(intx)、voidDisplay(),还有选择循环函数、逻辑循环函数; 关键代码如下: list()、~list()、MakeEmpty()、Length()、Insert()、intDelete()、tRemove(i)、Find()Display(), 构造函数模块 主要完成功能为: 提供一个默认构造函数,并确定头函数为空 析构函数模块 主要完成功能为: 提供一个默认析构函数,并析构头函数为空 置空函数模块 主要完成功能为: 置空函数 求长度函数模块 主要功能: 求函数的长度 插入链表函数模块 主要功能: 将x插入到第i个结点(不含头结点)的之后; 删除链表模块 主要功能: 删除链表中值为x的结点, 删除链表模块2 主要功能: 删除链表中第i个结点, 搜索结点函数模块 主要功能: 搜索相应的结点。 显示节点模块 主要功能: : 显示整个链表各结点的数值。 2.4.3调试及问题解决 出现的问题: 在调试过程中经常出现一个对话框,说不能为内存,然后就会出现调试错误,还有就是基础知识不是很熟悉,要经常查查书,看看书上的源程序,借鉴一下,然后再请教老师和同学解决了。 三、结束语 在为期三周的课程设计中,我体会颇多,学到很多东西,通过完成C++程序设计的任务,使我熟练和掌握了这学期所学的有关visualc++6.0中的一些主要知识点和应用点,比如面向对象中的类的定义、类的实现、对象的定义、类的继承、类的多态性等等;还有面向过程的许多基础知识,结构体的基本类型,基本应用、结构体的堆栈基础知识等等。 应用程序的设计和创建,经历了平时在课堂中和考试中,决不会有的重重难题和问题,这些问题,并不是我们平时只靠课本,就可以轻易解决的。 所以,锻炼了我们面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。 时间总是过得很快,转眼间C++课程设计就要结束了,通过这次课程设计,我们学会了很多,也懂得了很多,知道自己的C++只是哈有很大的提高空间。 感谢老师,是您让我们知道了这些,是您一次次的帮助我们那些被我们收拾的面目全非的程序,让我们的程序起死回生;感谢老师,是您让我们看到自己的差距,看到了自己的基础知识还很薄弱,还有许多的只是我们还不懂,我们需要再接再厉去提高自己;感谢老师,是您让我们懂得了原来C++的许多程序原来是很深奥很深奥的,原来C++的许多程序是可以那样完成的,还有调试还可以是以那种形式去调试的;总之感谢您老师,是我们的C++有了进一步的提高,谢谢您老师,你们辛苦了。 “实践是检验真理的唯一标准”。 没有实践,就不会发现和深刻体会它的真实所在。 只有通过检验的真理,在自己的心里,才会认可它的真实性。 C++程序设计的完成,使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。 理论的拥有并不能代表我们的实力和能力,一切的事件和其成功都是理论和实践的结合。 总之,我们学习和掌握的知识,只有通过实际应用,才能真正的理解和掌握,才能更好的去应用理论的拥有并不能代表我们的实力和能力,一切的事件和其成功都是理论和实践的结合。 我们学习和掌握的知识,只有通过实际应用,才能真正的理解和掌握,才能更好的去应用。 四、源代码(代码要加注释) 4.1.ATM自动取款机(类类型) #include #include #include classBank { public: Bank(){};//默认构造函数 voidOpenAccount()//开户 { cout<<"欢迎开户: "< cout<<"请输入您的姓名: "< cin>>name; cout<<"请输入您的卡号: "< cin>>cardID; cout<<"请输入您的密码: "< cin>>psw; cout<<"请输入您的预存金额: "< cin>>money; cout<<"恭喜您,开户成功! "< } voidSaveMoney()//存款 { longID; longpsw1; intmoney1; cout<<"欢迎使用取款业务: \n"; cout<<"请输入您的卡号: "< cin>>ID; cout<<"请输入您的密码: "< cin>>psw1; if(ID==cardID&&psw1==psw) { cout<<"请输入您的存款金额: "< cin>>money1; money=money+money1; cout<<"存款成功,卡上余额为: "< } else { cout<<"您的卡号或者密码错误,请重新输入! "< cout<<"请重新输入您的密码: "< cin>>psw1; if(psw1==psw) { cout<<"请输入您的存款金额: "< cin>>money1; money=money+money1; cout<<"存款成功,卡上余额为: "< } else { cout<<"温馨提示: 密码错误,卡已被吃掉(打印出凭条,您的卡已经暂停一切业务): "< exit (1); } } } voidTakeMoney()//取款 { longID; longpsw1; intmoney1; cout<<"欢迎您使用取款业务\n"; cout<<"请输入您的卡号: "< cin>>ID; cout<<"请输入您的密码: "< cin>>psw1; if(ID==cardID&&psw1==psw) { cout<<"请输入您取款的金额: "< cin>>money1; if(money>=money1) { money=money-money1; cout<<"取款成功,您卡上余额为: "< } else { cout<<"取款金额超出账户余额,请重新输入取款金额: "; cin>>money1; money=money-money1; cout<<"取款成功,您卡上余额为: "< } } else { cout<<"温馨提示: 您的卡号或密码错误,请重新输入! "< cout<<"请重新输入您的密码: "< cin>>psw1; if(psw1==psw) { cout<<"请输入您的取款金额: "< cin>>money1; if(money>=money1) { money=money-money1; cout<<"取款成功,您卡上余额为: "< } else { cout<<"取款金额超出账户余额,请重新输入取款金额: "; cin>>money1; money=money-money1; cout<<"取款成功,您卡上余额为: "< } } cout<<"温馨提示: 密码错误,卡已被吃掉(打印出凭条,您的卡已经暂停一切业务): "< exit (1); } } voidInquiry()//查询余额 { longID; longpsw1; cout<<"欢迎进行查询余额业务\n"; cout<<"请输入您的卡号: "< cin>>ID; cout<<"请输入您的密码"< cin>>psw1; if(ID==cardID&&psw1==psw) { cout<<"卡上余额为: "< } else { cout<<"您的卡号或者密码错误,请重新输入! "< cout<<"请重新输入您的密码: "< cin>>psw1; if(psw1==psw) { cout<<"卡上余额为: "< } else cout<<"温馨提示: 密码错误,卡已被吃掉(打印出凭条,您的卡已经暂停一切业务): "< exit (1); } } voidChangepsw()//修改密码 { longID; longpsw1; longpsw2; cout<<"欢迎使用修改密码业务\n"< cout<<"请输入您的卡号: "< cin>>ID; cout<<"请输入您的密码: "<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 报告 精华版