95分C++毕业课程设计报告.docx
《95分C++毕业课程设计报告.docx》由会员分享,可在线阅读,更多相关《95分C++毕业课程设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
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++学习的重要知识点,课程设计题目不仅要求对课本知识有较为深刻的理解,而且还具有实际性。
把散的知识紧凑的运用到一起,把调试的过程一点一点落实改正,对学习掌握