95分C++毕业课程设计报告.docx
《95分C++毕业课程设计报告.docx》由会员分享,可在线阅读,更多相关《95分C++毕业课程设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
![95分C++毕业课程设计报告.docx](https://file1.bdocx.com/fileroot1/2022-12/29/e0aa1bc4-0f83-4383-9700-158c20de7ba0/e0aa1bc4-0f83-4383-9700-158c20de7ba01.gif)
95分C++毕业课程设计报告
(此文档为word格式,下载后您可任意编辑修改!
)
《C++程序设计》课程设计报告
题目:
个人必备三大件
院(系)理学院
专业数学与信息类
学生姓名
学号
班级序号
任课教师
提交日期
三大件之一
股票交易管理系统
目录
第一章课程设计目的和实现功能………………………………4
1.1课程设计的目的
1.2课程设计实现功能简介
第二章详细设计说明
2.1新增函数…………………………………………………5
2.2分模块函数说明与流程图
2.2.1类的使用………………………………………6
2.2.2新用户注册……………………………………7
2.2.3用户登录
添加删除股票………………………………8
挂起挂出股票……………………………8
买卖股票…………………………………8
2.2.4查看股票情况……………………………………9
2.2.5退出系统………………………………………10
第三章演示示例………………………………………………10
第4章调试错误与改正反思……………………………………14
第六章心得体会……………………………………………………14
第一章课程设计目的和实现功能
1.1课程设计的目的
进一步巩固《C++程序设计》所学的知识,加强对数组、指针、结构体、文件数据类型的应用,熟悉面向过程的结构化和面向对象的可视化程序设计方法,加深对高级语言C++的理解,锻炼程序设计、程序调试、以及用C++语言解决实际问题的能力,为后续课程打好基础,进行此次课程设计。
在调试、编译过程中,遇到error和warming,自主寻找错误根源,改正后再继续调试的过程,无疑是巩固C++基础的最好途径。
1.2课程设计实现功能简介
设计一个小型的股票交易管理系统,实现:
(1)系统以菜单方式工作:
打开.exe可执行文件后,进入选择页面,用户
输入相应数字进入“股票交易市场”“用户登录”
“新用户注册”“退出”功能;
(2)股票交易市场:
从系统菜单进入,显示5个股票的代码、流通、发行、
挂出情况;
(3)用户登录:
从系统菜单进入,输入用户名和密码以登录,登录后再进
入选择菜单,进行如下选择:
买入和卖出:
用户输入股票代码和交易股数;
添加新股票:
输入股票名、代码、流通数和发行价;
挂出新股票:
显示所有股票,提示用户输入要挂出的股票代码;
删除已有股:
显示所有股票,提示用户输入要删除的股票代码;
挂起股票:
显示所有股票,提示用户输入要挂起的股票代码;
修改代码和名称:
输入原代码进行修改;
查看:
显示股市信息和用户资金信息;
退出:
回到原菜单;
(4)新用户注册:
显示欢迎界面,请用户输入姓名和密码(小于8位数),
设置“是否成为管理员”(对股票的挂起和删除有作用)
显示开户成功。
(5)系统退出功能:
在菜单中选择0直接退出。
第二章详细设计说明
2.1新增函数
根据课程设计要求,新增以下函数:
新增加的函数
完成的情况
Input_For_New_Stock()——添加新股票
先对股票数据进行读取,显示股票信息,提示输入股票代码,考虑到输入流读取时会出现的一些错误,如输入回车,输入错误代码等,我对程序加入了一些代码,从而解决这些异常。
然后调用Input_For_New_Stock(),提示输入股票的名称、代码、流通股数量、发行价,同时随机生成股票上市价。
最后,在Stock_File.dat的空位置插入存储新股票信息。
Delete_Stock()——删除旧股票
先对股票数据进行读取,显示股票信息。
然后调用Delete_Stock(),提示输入要删除的股票代码,同样考虑到输入流读取时会出现的一些错误,如输入回车,输入错误代码等,我加入了一些代码,从而解决这些异常。
最后,存储修改后的信息。
Hang_Up_Stock()——挂起股票,停止交易
先对股票数据进行读取,显示股票信息。
然后调用Hang_Up_Stock(),提示输入要挂起的股票代码,同样考虑到输入流读取时会出现的一些错误,如输入回车,输入错误代码等,我加入了一些代码,从而解决这些异常。
最后,存储修改后的信息。
Modify_Stock()——修改股票的名称、代码
先对股票数据进行读取,显示股票信息。
然后调用Modify_Stock(),提示输入要修改的股票代码,同样考虑到输入流读取时会出现的一些错误,如输入回车,输入错误代码等,我加入了一些代码,从而解决这些异常。
最后,存储修改后的信息。
2.2分模块函数说明与流程图
2.2.1类的使用
此程序中共定义了两个类,类内声明类外定义。
Stock类
(存放股票数据,类中方
法对股票进行各项操作)
Customer类
(存放用户信息,类中方
法对用户进行各项操作)
原程序缺陷:
程序反复声明了Stock和Customer类的同一对象,浪费了系统资源;在一些函数调用中也存在缺陷,比如存在Input_For_New_Stock()方法,但是只有在第一次使用是才会调用,Customer类中原有Switch_function()也没有调用。
在用户选择登录时,无法辨别用户名,只根据密码进行登录,当遇到密码相同的用户时,就分不清楚用户。
密码是显示输入的不能有效的受到保护。
2.2.2新用户注册
voidCustomer:
:
Register(Customer*cust)
{charch;
system("cls");执行系统命令:
清屏=cls
cin.get();
cout<<"欢迎进入*************股票交易系统***********"<cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<cout<<"输入用户名:
";
cin.getline(customer_name,30);
cout<<"输入您的密码(少于8字):
"<{charch;inti=0;cout.flush();ch=getch();开始
while(ch!
=13)
{password[i++]=ch;cout<<'*';
cout.flush();ch=getch();欢迎界面
}
password[i]=0;
}输入用户名
cout<";
cin>>zzch;shzh=0;money=zzch;
cout<<"是否设为管理员?
(yn)"<cin>>ch;
if(ch=='y'||ch=='Y')
{gly=1;cout<<"已设置...";是否设为管理员
}
elseif(ch=='n'||ch=='N')gly=0;
elsecout<<"默认为非管理员...";
getch();
system("cls");
cout<cout<<"注册成功..."<cout<<"按任意键返回..."<getch();
}
此部分主要使用if~else条件判断句对“是否设为管理员”进行选择。
2.2.3用户登录
1、登录:
输入用户名和密码,使用if(strcmp(pass_word,password)==0)语句进行核对。
进入选择页面:
Switch
2、添加删除股票(以删除为例)
否您无权删除股票!
case'5是否为管理员
是voidStock:
:
Delete_Stock()
3、挂出挂起股票(以挂起为例)
代码错误
代码正确不能挂起
4、买卖股票(以买入为例)
2.2.4查看股票情况
在最初的选择菜单中选择“1”进入股票交易市场,显示代码、流通数、发行价、是否挂起的信息。
case'1':
{进入股票交易市场
system("cls");
cout<<"\n\n\t\t********************股票交易市场********************"<cout<<"\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<cout<<"公司\t\t代码\t流通股\t可动股\t发行价上市价状态"<cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<for(intx=0;x<5;++x)
{
share[x].Stock_Exchange_Market();
}
getch();
temp.Interface();
break;
}
2.2.5退出系统
case'0':
{退出
system("cls");
cout<<"感谢您使用********************股票交易市场******************"<cout<<"\t再见!
"<exit(0);
第三章演示示例
第四章调试错误与改正反思
1、c:
\users\dell\desktop\c++课程设计\c++源程序\3_4_4股票交易管理.cpp(8):
error
C2008:
'=':
unexpectedinmacrodefinition
错误原因及改正:
#defineMAX=5#defineMAX5
将等于号去掉
2、在连接中出现错误:
3_4_4股票交易管理.obj:
errorLNK2001:
unresolvedexternal
symbol"public:
void__thiscallStock:
:
Save(classStock*
const)"(?
@@QAEXQAV1@@Z)
经查找,错误原因为voidStock:
:
Save(Stockt[])仅声明未定义。
3、多层括号混乱问题。
4、个别词汇拼写错误出现“undeclare”的错误
5、在其他错误中,还出现了“;”的疏漏
第五章心得体会
经过他人的帮助,终于完成了此次课程设计,收获颇丰。
通过请教、编辑、调试,毋庸置疑使我在理论、操作方面都有所提高,学会了如何将所学知识应用到实际,体会到C语言的强大。
但由于所学知识有限、编程经验不足,课程设计进行中遭遇错误、卡壳、无从下手等困难,但正由此可见,实践对于学习C语言的重要性。
因此,为了在今后必要时能熟练使用C++语言,还需时常的学习和长久的应用训练,使之成为自己的一项本领。
参考文献:
C++程序设计实践指导谭浩强主编清华大学出版社2005年
三大件之二
电话簿管理系统
目录
第一章课程设计目的和实现功能………………………………17
1.1课程设计的目的
1.2课程设计实现功能简介
第2章详细设计说明
2.1主函数…………………………………………………18
2.2分模块函数说明与流程图
2.2.1类的使用………………………………………19
2.2.2添加电话簿记录………………………………20
2.2.3显示电话簿内容………………………………20
2.2.4根据姓名查询电话簿数据……………………21
2.2.5根据姓名删除电话簿数据……………………22
2.2.6退出系统………………………………………23
第三章演示示例………………………………………………24
第5章调试错误与改正反思…………………………………26
第五章心得体会………………………………………………26
第一章课程设计目的和实现功能
1.1课程设计的目的
进一步巩固《C++程序设计》所学的知识,加强对数组、指针、结构体、文件数据类型的应用,熟悉面向过程的结构化和面向对象的可视化程序设计方法,加深对高级语言C++的理解,锻炼程序设计、程序调试、以及用C++语言解决实际问题的能力,为后续课程打好基础,进行此次课程设计。
在调试、编译过程中,遇到error和warming,自主寻找错误根源,改正后再继续调试的过程,无疑是巩固C++基础的最好途径。
1.2课程设计实现功能简介
设计一个小型的电话薄程序,实现:
(1)系统以菜单方式工作:
打开.exe可执行文件后,进入选择页面,用户
输入相应数字进入“添加”“显示”“查询”
“删除”“退出”功能;
(2)信息录入功能:
系统提示输入姓名(最多20位,以0结束);回车后系
统提示输入电话号码(最多20位,回车结束);
(3)信息浏览功能:
同一联系人姓名与号码同行以15个字节隔开;
(4)信息查询功能:
输入需要查找的姓名(以0结束),若找到,输出相应
信息,若未找到,显示错误信息并提示重新输入;
(5)信息删除功能:
输入需要查找的姓名(以0结束),若找到,先输出此
联系人信息,再进行删除,并提示“***的资料已删除”
(6)系统退出功能:
将链表中的数据保存,屏幕输出“欢迎再次使用”。
程序中综合、大量运用了类(类内定义类外生命)、数组、指针、引用if~else条件语句,while和do~while循环语句。
第二章详细设计说明
2.1主函数
2.2分模块函数说明与流程图
2.2.1类的使用
在此电话簿程序中,共定义了四个类,其中一个为派生类,如下:
classCData定义数据基类
classCNode定义节点基类
classCList
classCTelRecord:
publicCData电话薄记录,为数据基类的共有派生类
在类内定义后,类外声明如下:
CNode*CList:
:
GetListNextNode(CNode*pnode)返回链表指定节点的下一个结点
voidCList:
:
AddNode(CNode*pnode)在首部添加节点
CNode*CList:
:
DeleteNode(CNode*pnode)删除一个指定的节点,返回该节点的指针
CNode*CList:
:
LookUp(CData&data)查找一个指定的数据,返回该数据所在节点在链表
中的指针,若未找到返回0
voidCList:
:
ShowList()打印整个链表数据
voidCList:
:
DeleteList()删除整个链表结点
intCTelRecord:
:
Compare(CData&data)比较姓名,供查找用,比较结果为1、0、-1
voidCTelRecord:
:
Show()打印一个结点的数据
2.2.2添加电话簿记录
voidAddRecord(CList&TelList)将记录添加到链表中
{
CNode*pNode;
CTelRecord*pTel;
charszName[20],szNumber[20];
cout<<"输入姓名(输入0结束):
";
cin.ignore();
cin.getline(szName,20);
while(strcmp(szName,"0"))
{
cout<<"输入电话号码:
";
cin.getline(szNumber,20);
pTel=newCTelRecord;生成新的数据类对象
pTel->SetRecord(szName,szNumber);数据类对象赋值
pNode=newCNode;生成新的节点
pNode->InputData(pTel);结点赋值
TelList.AddNode(pNode);结点加入链表
cout<<"输入姓名(输入0结束):
";
cin.getline(szName,20);
}
cout<}
在此模块中调用了SetRecordInputDataTelList.AddNode函数,使用了if条件判断句。
2.2.3显示电话簿内容
voidDisplayRecord(CList&TelList)显示全部链表数据
{
cout<TelList.ShowList();
cout<}
先输出文字“姓名”、“电话号码”换行调用TelList.ShowList函数
2.2.4根据姓名查询电话簿数据
voidLookUpRecord(CList&TelList)按照姓名查找电话簿数据
{
CNode*pLook;
charszName[20];
cout<<"输入您需要查找的姓名(输入0结束)";
cin.getline(szName,20);
while(strcmp(szName,"0"))
{
CTelRecordtele(szName,"0");生成结点
pLook=TelList.LookUp(tele);查找指定节点的数据
if(pLook)
{
cout<<"在电话簿中找到"<"<pLook->ShowNode();
}
else
cout<<"在电话簿中查找不到"<cout<<"输入您需要查找的姓名(输入0结束)";
cin.getline(szName,20);
}
cout<system("pause");
}
在此模块中调用了CTelRecordtelTelList.LookUpShowNode函数,使用了if条件判断句和while循环句。
2.2.5根据姓名删除电话簿数据
voidDeleteRecord(CList&TelList)在链表中删除指定结点的数据
{
CNode*pLook;
charszName[20];
cout<<"输入您需要删除的姓名(输入0结束)";
cin.getline(szName,20);
while(strcmp(szName,"0"))
{
CTelRecordtele(szName,"0");
pLook=TelList.LookUp(tele);
if(pLook)删除时应先查找出结点
{
cout<<"在电话簿中找到"<"<pLook->ShowNode();
TelList.DeleteNode(pLook);
cout<deletepLook;
}
else
cout<<"在电话簿中查找不到"<cout<<"输入您需要删除的姓名(输入0结束)";
cin.getline(szName,20);
}
cout<}
在此模块中调用了CTelRecordteleShowNodeTelList.DeleteNode函数,使用了if条件判断句和while循环句,使用了指针和delete指针功能
2.2.6退出系统
voidStoreFile(CList&TelList)将链表中的数据保存在文件中
{
ofstreamoutfile("TELEPHONE.DAT",ios:
:
binary);
if(!
outfile)
{
cout<<"数据文件打开错误,没有将数据讯如文件!
\n";
return;
}
CNode*pnode;
CTelRecord*pTel;
stringstrName,strNumber;
pnode=TelList.GetListHead();取出链表首节点的指针
while(pnode)
{
pTel=(CTelRecord*)pnode->GetData();返回节点指向的数据域指针
outfile.write((char*)pTel,sizeof(CTelRecord));将数据域写入文件
pnode=TelList.GetListNextNode(pnode);取下一结点的指针
}
outfile.close();
}
使用了指针、if条件判断句,while循环句,调用了GetData函数,TelList.GetListNextNode函数。
第三章演示示例
1.添加电话簿内容
2.输入0结束,再进入选择菜单
3.显示电话簿内容,显示后自动回到选择菜单
4.根据姓名查询电话簿数据,输入“李四”
5.根据姓名删除电话簿数据,输入“李四”
6.退出系统
第四章调试错误与改正反思
1、C:
\Users\DELL\Desktop\C++课程设计\C++源程序\3_4_1电话簿.cpp(239):
errorC2059:
syntaxerror:
'sizeof'
错误出现在“outfile.write((char*)pTel,sizeof(CTelRecord));将数据域写入文件”语句中,错误原因为把“,”误打成“.”。
(char*)pTel和sizeof(CTelRecord)为两个实参,应用逗号分开。
2.C:
\Users\DELL\Desktop\C++课程设计\C++源程序\3_4_1电话簿.cpp(255):
errorC2065:
'StoreFlie':
undeclaredidentifier
出现undeclared错误,即知为“未定义”,出现了漏打或误打的问题,经检查,原因为file拼写错误。
3.在其他错误中,还出现了“;”的疏漏,多重括号的疏漏的问题。
通过调试,基本看到错误提示可以自行认识到错误根源,认知并一条一条改正错误的过程使得对错误的识别能力得到提高
第五章心得体会
本次课程设计涵盖了大一C++学习的重要知识点,课程设计题目不仅要求对课本知识有较为深刻的理解,而且还具有实际性。
把散的知识紧凑的运用到一起,把调试的过程一点一点