C++课程设计模拟电信计费.docx
《C++课程设计模拟电信计费.docx》由会员分享,可在线阅读,更多相关《C++课程设计模拟电信计费.docx(31页珍藏版)》请在冰豆网上搜索。
C++课程设计模拟电信计费
课程设计
设计题目:
C++程序设计课程设计
模拟电信计费
课程设计任务书
课程设计题目:
模拟电信计费
一、课程设计的原始资料及依据
查阅有关资料,进一步理解面向对象程序设计的思想,并编写一个简单的管理系统。
通过本设计可以加深理解使用面向对象程序设计思想开发一个系统的方法,提高分析问题、解决问题和实际动手的能力。
二、课程设计主要内容及要求
设计内容:
假设电信计费标准:
固定电话长途话费0.02元/秒,固定电话本地话费0.06元/分,无线电话长途话费1.00元/分,无线电话本地话费0.60元/分,无线电话接听话费0.50元/分。
在源数据文件中存放:
电话号码,电信服务类别,通话时间(秒)。
根据源数据文件生成如下列表:
固定长途电话:
长途电话号码和通话时间。
固定本地电话:
本地电话号码和通话时间。
无线长途电话:
长途电话号码和通话时间。
无线本地电话:
本地电话号码和通话时间。
无线接听电话:
接听电话号码和通话时间。
统计电信费用:
电话号码、累计电信费用。
(根据自己的任务填写内容)
设计要求:
(1)要求在设计的过程中建立清晰的类层次,并画出类图;
(2)设计功能满足要求、易于操作的友好界面;
(3)在系统的设计中,至少要用到面向对象的一种机制:
继承、多态等;
(4)在完成该题目时,小组人员进行详细的任务分工,并要在报告中体现出来。
三、对课程设计说明书撰写内容、格式、字数的要求
1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:
设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。
一般不应少于3000字。
2.在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。
4.课程设计说明书手写或打印均可。
手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18磅。
文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。
5.课程设计说明书装订顺序为:
封面、任务书、成绩评定表、目录、正文、参考文献。
四、设计完成后应提交成果的种类、数量、质量等方面的要求
1.完成“任务书”中指定的功能,运行结果正确。
2.课程设计说明书。
五、时间进度安排
序号
主要内容
学时
备注
1
进行设计准备,阅读资料,分析设计任务书,明确设计要求、内容和步骤
1天
2
编写相应的程序代码
2天
3
程序调试
1天
4
整理程序,撰写课程设计报告
1天
合计
5天
六、主要参考资料(文献)
[1]郑莉董渊张瑞丰编着.《C++语言程序设计》(第4版).北京:
清华大学出版社.2010
[2]陈维兴,林小茶.《C++高级程序设计教程》.北京:
清华大学出版社
[3]谭浩强.《C++程序设计教程》.北京:
中国科学技术出版社
[4]王燕.《面向对象的理论与C++实践》.北京:
清华大学出版社
[5]马石安,魏文平.主编《VisualC++程序设计与应用教程》.北京:
清华大学出版社
[6]王育坚.主编《VisualC++面向对象编程教程》(第二版).北京:
清华大学出版
摘要
现代科学技术的飞速发展,改变了世界,也改变了人类的生活。
作为新世纪的大学生,应当站在展的前列,掌握现代科学知识,调整自己的知识结构和能力结构,以适应社会发展要求。
新需要具有丰富的现代科学知识,能够独立解决面临的任务,充满活力同,有创新意识的新型人才。
C++语言是在国内外广泛使用的一种计算机语言。
C++语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好,既具有高级语言的优点,又具有低级语言的许多特点,因此特别适合于编写系统软件。
C++程序设计是一门实践很强的课程,既要掌握概念,又要动手编程,还要上机调试。
模拟电信计费系统就是通过我们组员每一个人的努力的成果,我们用到在课堂上所学到的知识以及课下参考其它资料而编写的程序。
本次课程设计可以实现模拟电信计费的功能。
操作简便而实用。
模拟电信计费系统可以现实对手机话费的操作,例如,对本机话费每一条通话记录话费查询、话费清单显示等相关功能,可以对本机话费做一个简单管理。
此次C++语言课程设计是对我们所掌握C++语言知识的一次检测。
我们组做的是模拟电信计费系统,操作简单,使我们对C++语言知识有了质的飞跃,提高了我们的编程技术,增加了我们对计算机的兴趣,程序成功的运行,给予了我们莫大的信心,通过对程序的完善更让我们受益匪浅,锻炼了我们的实践能力,给我对进入社会提供了莫大的动力。
关键词类对象继承文件
第1章绪论
1.1题目背景
随着计算机技术的飞速发展,改变了世界,也改变了人类的生活。
作为现代科学技术的飞速发展,改变了世界,也改变了人类的生活。
新世纪的大学生,应当站在时代发展的前列,掌握现代科学技术知识,调整自己的知识结构和能力结构,以适应社会发展的要求。
C++语言成了在国内外使用的一种计算机语言。
C++语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好、既具有高级语言的优点,又具有低级语言的许多特点,因此特别适合于编写系统软件。
1.2概要设计
根据题目要求,设计模拟电信计费系统,实现课题中的要求。
可以进行每一条通话记录的查询,并且可以显示话费清单。
1.3解决问题
本程序由4个类为基础结构,分别是fixed_phone类,telephone类,phone类,log_in类,phone类是由fixed_phone类和telephone类派生而来的,fixed_phone类主要用来实现固定电话的话费功能,telephone类主要用来实现无限电话的话费功能,phone类通过本身成员函数来实现总体功能,log_in类主要实现系统的登录,主菜单,帐号信息,退出等功能。
第2章C++语言的运行环境
2.1C++语言的运行环境
C++语言的运行环境有很多,是Microsoft公司推出的可视化开发环境,即MicrosoftVisualC++6.0。
也就是我们小组运用的开发环境。
C语言在VC++6.0环境下运行如图2-1所示。
图2-1C语言运行界面
2.2C++语言的特点
C++语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。
C++以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。
面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C++完美地体现了面向对象的各种特性。
2.3C++语言的运行步骤
1.运行VC6.0
现在就让我们开始VisualC++6.0之旅吧!
首先按如下两种方法之一启动并运行VC6,进入到它的集成开发环境窗口(假设在Windows系统下已经安装了VC6)其具体窗口式样如图2-1所示。
方法一:
若桌面上有VC6图标(“横躺着”即“倒下”的“8”字型图标,且标有MicrosoftVisualStudio6.0字样,如图2-2所示),则用鼠标双击该图标。
图2-2VC6.0在桌面上的快捷方式
方法二(假设按照通常方式对VC6进行了安装的话)
通过开始→程序→MicrosoftVisualStudio6.0→MicrosoftVisualC++6.0,单击一下该菜单项。
图2-1式样的窗口从大体上可分为四部分。
上部:
菜单和工具条;中左:
工作区(workspace)视图显示窗口,这里将显示处理过程中与项目相关的各种文件种类等信息;中右:
文档内容区,是显示和编辑程序文件的操作区;下部:
输出(Output)窗口区,程序调试过程中,进行编译、链接、运行时输出的相关信息将在此处显示。
注意,由于系统的初始设置或者环境的某些不同,可能你所启动的VC6初始窗口式样与图2-1有所不同,也许没出现Workspace窗口或Output窗口,这时可通过View→Workspace菜单选项的执行,总可使中左处的工作区窗口显现出来;而通过View→Output菜单选项的执行,又总可使下部的输出区窗口得以显现。
当然,如果不想看到这两个窗口,可以点击相应窗口的“x”按键来关闭窗口。
如图2-3所示。
图2-3VC6.0的集成开发环境窗口
2.编制并运行C++语言程序的四步曲
⑴编辑(把程序代码输入,交给计算机)。
⑵编译(成目标程序文件.obj)。
编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。
编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:
词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。
主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
⑶链接(成可执行程序文件.exe)。
链接是将编译产生的.obj文件和系统库连接装配成一个可以执行的程序。
由于在实际操作中可以直接点击Build从源程序产生可执行程序,可能有人就会置疑:
为何要将源程序翻译成可执行文件的过程分为编译和链接两个独立的步骤,不是多此一举吗?
之所以这样做,主要是因为:
在一个较大的复杂项目中,有很多人共同完成一个项目(每个人可能承担其中一部分模块),其中有的模块可能是用汇编语言写的,有的模块可能是用VC写的,有的模块可能是用VB写的,有的模块可能是购买(不是源程序模块而是目标代码)或已有的标准库模块,因此,各类源程序都需要先编译成目标程序文件(2进制机器指令代码),再通过链接程序将这些目标程序文件连接装配成可执行文件。
⑷运行(可执行程序文件)。
上述四个步骤中,其中第一步的编辑工作是最繁杂而又必须细致地由人工在计算机上来完成,其余几个步骤则相对简单,基本上由计算机来自动完成。
在VC6.0下编译后的窗口界面如图2-4所示。
图2-4在VC6.0下编译后的窗口界面
第3章系统分析与详细设计
3.1程序结构基础
本程序主要完成的是模拟电信计费的功能,整个程序由4个类结构为基础。
类UML图如图3-1所示。
图3-1类UML图
3.2功能设计
3.2.1log_in类的设计
1.load()成员函数
voidlog_in:
:
load()
{
inti,count=0;
charstr[50],str1[50];
time_tt1,*t=&t1;
printf("\n\n\n\n\n\n");
printf("\t**\n");
printf("\t**\n");
printf("\t**\n");
printf("\t**\n");
printf("\t**************\n");
printf("\t*******\n");
printf("\t*******\n");
printf("\t*******\n");
printf("\t********\n");
printf("\t******************\t");
i=6;
do
{
t1=time(NULL);
strcpy(str,ctime(t));
if(count==6)break;
while(strcmp(str,str1)!
=0)
{
strcpy(str1,str);
printf(">");
count++;
break;
}
}while
(1);
system("cls");
logshow();
}
设计流程如图3-2所示。
2.account_code()成员函数
voidlog_in:
:
account_code()
{
intb;
cout<<"**********1注册新账号***********\n";
cout<<"**********2修改密码***********\n";
cout<<"请再此输入选择代号:
\n";
cin>>b;
if(b==1)
{
stringtemp1;
stringtemp2;
ofstreamoutfile;//建立输出文件流对象
outfile.open("code.txt",ios:
:
out);//连接文件,指定打开方式
cout<<"请输入账号:
"<cin>>account;
cout<<"请输入密码:
"<cin>>temp1;
cout<<"请再次输入密码:
"<cin>>temp2;
if(temp1==temp2)
code=temp1;
outfile<outfile<outfile.close();
cout<<"注册成功!
\n";
system("pause");
menu();
}
else
{
fstreamrwfile("code.txt",ios:
:
in|ios:
:
out);
stringtemp1;
stringtemp2;
stringtemp3;
stringtemp4;
stringtemp5;
stringtemp6;
rwfile>>temp1>>temp2;
cout<<"请输入您的账号:
"<cin>>temp3;
cout<<"请输入原密码:
"<cin>>temp4;
if((temp1==temp3)&&(temp2==temp4))
{
loop:
cout<<"请输入新密码:
"<cin>>temp5;
cout<<"请再次输入新密码:
"<cin>>temp6;
if(temp5==temp6)
{
account=temp1;
code=temp5;
}
else
gotoloop;
rwfile<rwfile<rwfile.close();
cout<<"修改成功!
\n";
system("pause");
menu();
}
}
}
设计流程如图3-3所示。
3.log()成员函数
voidlog_in:
:
log()
{
intb;
cout<<"**********1注册账号或修改密码***********\n";
cout<<"**********2登陆系统***********\n";
cout<<"请再此输入选择代号:
\n";
cin>>b;
if(b==1)
account_code();
else
load();
}
设计流程如图3-4所示。
图3-2load()成员函数流程图
图3-3account_code()成员函数
图3-4log()成员函数
4.codeNum()成员函数
voidlog_in:
:
codeNum()
{
chara[37]="abcdefghijklmnopqrstuvwxyz0123456789";//定义一个包含26个小写字母的字符串
inti,j;
charoutput[5]="";
charcode[5]="";
srand((int)time(0));//初始化随机数发生器
printf("\n\n\t验证码:
");
for(i=0;i<4;i++)
{
j=rand()%36;//取得0~25的随机数
printf("%c",a[j]);
output[i]=a[j];
}
a[4]='\0';
printf("请输入验证码:
");
fflush(stdin);
scanf("%s",&code);
if(strcmp(code,output)!
=0)
{
printf("\n\t\t验证码输入错误,请重新输入!
\n\n");
system("pause");
codeNum();
}
}
设计流程如图3-5所示。
图3-5codeNum()成员函数
5.logshow()成员函数
voidlog_in:
:
logshow()
{
ifstreaminfile("code.txt",ios:
:
in);
stringtemp1;
stringtemp2;
infile>>temp1>>temp2;
loop:
cout<<"请输入您的账号:
"<cin>>account;
cout<<"请输入您的密码:
"<cin>>code;
codeNum();
if((temp1==account)&&(temp2==code))
{
menu();
}
else
gotoloop;
}
设计流程如图3-6所示。
图3-6logshow()成员函数
6.logshow()成员函数
voidlog_in:
:
quit()
{
cout<<"确定退出系统?
"<cout<<"Yes?
/YorNo?
/N:
"<charc;
cin>>c;
if(c=='Y'||c=='y')
{
inti;
charstr[50],str1[50];
time_tt1,*t=&t1;
i=5;
do
{
t1=time(NULL);
strcpy(str,ctime(t));
while(strcmp(str,str1)!
=0)
{
strcpy(str1,str);
for(;i>0;)
{
system("cls");
printf("%d秒后退出!
",i--);
//
break;
}
}
}while
(1);
system("pause");
exit(0);
}
else
{
system("pause");
menu();
}
}
设计流程如图3-7所示。
图3-7logshow()成员函数
3.2.2fixed_phone类的设计
1.get_fee(intt)成员函数
floatfixed_phone:
:
get_fee(intt)
{
if(t==0)
fee=0.02*time;
if(t==1)
fee=(time/60+1)*0.06;
returnfee;
}
设计流程如图3-8所示。
图3-7get_fee(intt)成员函数
2.show_detail(intt)成员函数
voidfixed_phone:
:
show_detail(intt)
{
if(t==0)
{
//cout<<"您本次通话的详细信息:
"<cout<<"电话号码:
"<"<<"固定长途电话"<<"通话时间(秒):
"<