西安邮电大学课外生产实习报告.docx

上传人:b****7 文档编号:10023988 上传时间:2023-02-08 格式:DOCX 页数:28 大小:719.74KB
下载 相关 举报
西安邮电大学课外生产实习报告.docx_第1页
第1页 / 共28页
西安邮电大学课外生产实习报告.docx_第2页
第2页 / 共28页
西安邮电大学课外生产实习报告.docx_第3页
第3页 / 共28页
西安邮电大学课外生产实习报告.docx_第4页
第4页 / 共28页
西安邮电大学课外生产实习报告.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

西安邮电大学课外生产实习报告.docx

《西安邮电大学课外生产实习报告.docx》由会员分享,可在线阅读,更多相关《西安邮电大学课外生产实习报告.docx(28页珍藏版)》请在冰豆网上搜索。

西安邮电大学课外生产实习报告.docx

西安邮电大学课外生产实习报告

 

西安邮电大学

课外生产实习报告

 

1实习目的

这次实习的目的是用C++语言模拟实现现实中的电信计费系统,假设电信计费标准:

固定电话长途话费0.02元/秒,固定电话本地话费0.06元/分,无线电话长途话费1.00元/分,无线电话本地话费0.60元/分,无线电话接听话费0.50元/分。

在源数据文件中存放:

电话号码,电信服务类别,通话时间(秒)。

根据源数据文件生成如下列表:

固定长途电话:

长途电话号码和通话时间。

固定本地电话:

本地电话号码和通话时间。

无线长途电话:

长途电话号码和通话时间。

无线本地电话:

本地电话号码和通话时间。

无线接听电话:

接听电话号码和通话时间。

统计电信费用:

电话号码、累计电信费用。

(1)要求在设计的过程中建立清晰的类层次,并画出类图;

(2)设计功能满足要求、易于操作的友好界面;

(3)在系统的设计中,至少要用到面向对象的一种机制:

继承、多态等;

(4)在完成该题目时,小组人员进行详细的任务分工。

根据题目要求,设计模拟电信计费系统,实现课题中的要求。

可以进行每一条通话记录的查询,并且可以显示话费清单。

2实习过程

程序由4个类为基础结构,分别是fixed_phone类,telephone类,phone类,log_in类,phone类是由fixed_phone类和telephone类派生而来的,fixed_phone类主要用来实现固定电话的话费功能,telephone类主要用来实现无限电话的话费功能,phone类通过本身成员函数来实现总体功能,log_in类主要实现系统的登录,主菜单,帐号信息,退出等功能。

C++语言的运行环境有很多,是Microsoft公司推出的可视化开发环境,即MicrosoftVisualC++6.0。

也就是我们小组运用的开发环境。

C语言在VC++6.0环境下运行如下图

 

C++语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。

C++以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。

面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C++完美地体现了面向对象的各种特性。

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-3VC6.0的集成开发环境窗口

 

2.编制并运行C++语言程序的四步曲

⑴编辑(把程序代码输入,交给计算机)。

⑵编译(成目标程序文件.obj)。

编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。

编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:

词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。

主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。

⑶链接(成可执行程序文件.exe)。

链接是将编译产生的.obj文件和系统库连接装配成一个可以执行的程序。

由于在实际操作中可以直接点击Build从源程序产生可执行程序,可能有人就会置疑:

为何要将源程序翻译成可执行文件的过程分为编译和链接两个独立的步骤,不是多此一举吗?

之所以这样做,主要是因为:

在一个较大的复杂项目中,有很多人共同完成一个项目(每个人可能承担其中一部分模块),其中有的模块可能是用汇编语言写的,有的模块可能是用VC写的,有的模块可能是用VB写的,有的模块可能是购买(不是源程序模块而是目标代码)或已有的标准库模块,因此,各类源程序都需要先编译成目标程序文件(2进制机器指令代码),再通过链接程序将这些目标程序文件连接装配成可执行文件。

⑷运行(可执行程序文件)。

上述四个步骤中,其中第一步的编辑工作是最繁杂而又必须细致地由人工在计算机上来完成,其余几个步骤则相对简单,基本上由计算机来自动完成。

在VC6.0下编译后的窗口界面如图2-4所示。

图2-4在VC6.0下编译后的窗口界面

本程序主要完成的是模拟电信计费的功能,整个程序由4个类结构为基础。

类UML图如图3-1所示。

图3-1类UML图

功能设计(登陆设置)

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()成员函数

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()成员函数

.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<<"电话号码:

"<

"<<"固定长途电话"<<"通话时间(秒):

"<

"<

}

if(t==1)

{

//cout<<"您本次通话的详细信息:

"<

cout<<"电话号码:

"<

"<<"固定本地电话"<<"通话时间(秒):

"<

"<

}

}

设计流程如图3-9所示。

图3-9show_detail(intt)成员函数

3.2.3telephone类的设计

1.get_fee(intt)成员函数

floattelephone:

:

get_fee(intt)

{

if(t==2)

fee=(time/60+1)*1;

if(t==3)

fee=(time/60+1)*0.6;

if(t==4)

fee=(time/60+1)*0.5;

returnfee;

}

设计流程如图3-10所示。

2.show_detail(intt)成员函数

voidtelephone:

:

show_detail(intt)

{

if(type==2)

{

//cout<<"您本次通话的详细信息:

"<

cout<<"电话号码:

"<

"<<"无线长途电话"<<"通话时间(秒):

"<

"<

}

if(type==3)

{

//cout<<"您本次通话的详细信息:

"<

cout<<"电话号码:

"<

"<<"无线本地电话"<<"通话时间(秒):

"<

"<

}

if(type==4)

{

//cout<<"您本次通话的详细信息:

"<

cout<<"电话号码:

"<

"<<"无线电话接听"<<"通话时间(秒):

"<

"<

}

}

设计流程如图3-11所示。

 

图3-10get_fee(intt)成员函数图3-11show_detail(intt)成员函数

3.2.4phone类的设计

1.find()成员函数

voidphone:

:

find()

{

ifstreaminfile("data.txt",ios:

:

in);

inti;

intt;

intnum;

infile>>num;

fixed_phone*fph=newfixed_phone[num];

telephone*tlh=newtelephone[num];

stringtemp_num;

cout<<"请输入要查询的电话号码:

\n";

cin>>temp_num;

for(i=0;i

{

infile>>t;

if((t=0)||(t=1))

{

fph[i].type=t;

infile>>fph[i].number>>fph[i].time;

fph[i].fee=fph[i].get_fee(t);

if(fph[i].number==temp_num)

{

cout<<"您本次通话记录为:

\n";

fph[i].show_detail(fph[i].type);

}

}

else

{

tlh[i].type=t;

infile>>tlh[i].number>>tlh[i].time;

tlh[i].fee=tlh[i].get_fee(t);

if(tlh[i].number==temp_num)

{

cout<<"您本次通话记录为:

\n";

tlh[i].show_detail(tlh[i].type);

}

}

}

}

设计流程如图3-13所示。

图3-13read_show_all()成员函数

3.2.5主函数的设计

主函数

voidmain()

{

log_inloging;

loging.log();

phonephe;

intchoose;

loop:

cout<<"请输入功能选项:

\n";

cin>>choose;

if(choose==1)

{

system("cls");

loging.log();

}

elseif(choose==2)

{

loop2:

system("cls");

phe.find();

cout<<"**********1返回主菜单***********\n";

cout<<"**********2继续查询***********\n";

intchoose_2;

cin>>choose_2;

if(choose_2==1)

{loging.menu();

gotoloop;

}

if(choose_2==2)

gotoloop2;

}

elseif(choose==3)

{system("cls");

phe.read_show_all();

cout<<"按任意键返回主菜单";

system("pause");

loging.menu();

gotoloop;}

elseif(choose==4)

{system("cls");

loging.quit();

gotoloop;

}}

设计流程如图3-14所示。

图3-14主函数

3实习结果

1.主菜单界面如图4-3所示。

图4-3主菜单界面

2.选项1会进入其实界面,并且要求重新登录。

选项2话费查询界面如图4-4所示。

图4-4话费查询界面

3.选项3话费清单界面如图4-5所示。

图4-5话费清单界面

4.选项4退出界面如图4-7所示。

图4-7退出界面

 

4实习心得

时间是短暂的,收获是丰厚的。

经过这样两周的校外生产实习,把我对C++知识从新巩固了一遍,对类和继承进一步理解,特别对程序的面向对象的封装性进一步的理解和体会,为今后的程序编写奠定了一定的基础。

而这次的课程设计也给了我们一次机会,一次把学习到的知识付诸实践的机会。

知识宝贵,团队精神同样可贵,我想任务分组完成就是出于这样的考虑吧,团队合作不是把任务简单分开就能实现的。

每个人学习知识的侧重点不尽相同,每人解决问题的思路也不一样,几个人相互讨论,相互辩论的过程中往往会产生出人意料的好想法,也许这就叫做灵感。

分歧过后达成共识,团结协作,最终才造就了一个完整的可使用的程序。

实习的过程中出现了无法解决的问题,所以我们也查阅了大量相关资料和书籍,请教导师各方面的知识,吸取前人的经验也是解决问题的很好途径,但是绝不能照抄代码,先继承后发展才能算是我的收获的。

“书到用时方恨少!

”应用时的捉襟见肘才让我认识到了自己高级语言基础上的不足,每一门专业基础课都是我们手中不可替代的武器,只有把他们有机联系起来才有可能实现一个完整的功能,本次课程设计是我体会到只有付出才会有收获,只有平日认真学习关键时刻才会不捉襟见肘,只有团结一致才会成功,只有互助才会顺利

生产实习要亲手做过,不管它是否有结果。

你要学的是知识,是解决问题的方法和思想,要端正学习态度,每一次突破都是一种收获,就是在这样的过程中我们才能不断提高。

在从开始接到课程设计,再到报告的完成,每走一步都渗透着努力和汗水。

在收获知识的同时收获快乐。

随着时间的流失我会用今天所学到的用到今后的学习和工作中,我会为了今后编写出更好

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电子电路

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1