《西安邮电大学课外生产实习报告(共36页).docx》由会员分享,可在线阅读,更多相关《西安邮电大学课外生产实习报告(共36页).docx(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上西安邮电大学课 外 生 产 实 习 报 告 专心-专注-专业1 实习目的这次实习的目的是用C+语言模拟实现现实中的电信计费系统,假设电信计费标准:固定电话长途话费0.02元/秒,固定电话本地话费0.06元/分,无线电话长途话费1.00元/分,无线电话本地话费0.60元/分,无线电话接听话费0.50元/分。在源数据文件中存放:电话号码,电信服务类别,通话时间(秒)。根据源数据文件生成如下列表:固定长途电话:长途电话号码和通话时间。 固定本地电话:本地电话号码和通话时间。 无线长途电话:长途电话号码和通话时间。 无线本地电话:本地电话号码和通话时间。 无线接听电话:接听电
2、话号码和通话时间。 统计电信费用:电话号码、累计电信费用。(1) 要求在设计的过程中建立清晰的类层次,并画出类图;(2) 设计功能满足要求、易于操作的友好界面;(3) 在系统的设计中,至少要用到面向对象的一种机制:继承、多态等;(4) 在完成该题目时,小组人员进行详细的任务分工。根据题目要求,设计模拟电信计费系统,实现课题中的要求。可以进行每一条通话记录的查询,并且可以显示话费清单。2 实习过程程序由4个类为基础结构,分别是fixed_phone类,telephone类,phone类,log_in类, phone类是由fixed_phone类和telephone类派生而来的,fixed_pho
3、ne类主要用来实现固定电话的话费功能,telephone类主要用来实现无限电话的话费功能,phone类通过本身成员函数来实现总体功能,log_in类主要实现系统的登录,主菜单,帐号信息,退出等功能。C+语言的运行环境有很多,是Microsoft 公司推出的可视化开发环境,即Microsoft Visual C+6.0。也就是我们小组运用的开发环境。C语言在VC+6.0环境下运行如下图C+语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。C+以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法
4、基础上的一个质的飞跃,C+完美地体现了面向对象的各种特性。 1.运行VC6.0现在就让我们开始Visual C+ 6.0之旅吧!首先按如下两种方法之一启动并运行VC6,进入到它的集成开发环境窗口(假设在Windows系统下已经安装了VC6)其具体窗口式样如图2-1所示。方法一:若桌面上有VC6图标(“横躺着”即“倒下”的“8”字型图标,且标有Microsoft Visual Studio 6.0字样,如图2-2所示),则用鼠标双击该图标。图2-2 VC6.0在桌面上的快捷方式方法二(假设按照通常方式对VC6进行了安装的话)通过开始程序Microsoft Visual Studio 6.0Mic
5、rosoft Visual C+ 6.0,单击一下该菜单项。图2-1式样的窗口从大体上可分为四部分。上部:菜单和工具条;中左:工作区(workspace)视图显示窗口,这里将显示处理过程中与项目相关的各种文件种类等信息;中右:文档内容区,是显示和编辑程序文件的操作区;下部:输出(Output)窗口区,程序调试过程中,进行编译、链接、运行时输出的相关信息将在此处显示。注意,由于系统的初始设置或者环境的某些不同,可能你所启动的VC6初始窗口式样与图2-1有所不同,也许没出现Workspace窗口或Output窗口,这时可通过ViewWorkspace菜单选项的执行,总可使中左处的工作区窗口显现出来
6、;而通过ViewOutput菜单选项的执行,又总可使下部的输出区窗口得以显现。当然,如果不想看到这两个窗口,可以点击相应窗口的“x”按键来关闭窗口。如图: 图2-3 VC6.0的集成开发环境窗口 2. 编制并运行C+语言程序的四步曲编辑(把程序代码输入,交给计算机)。 编译(成目标程序文件.obj)。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有
7、语法错误,给出提示信息。 链接(成可执行程序文件.exe)。链接是将编译产生的.obj文件和系统库连接装配成一个可以执行的程序。由于在实际操作中可以直接点击Build从源程序产生可执行程序,可能有人就会置疑:为何要将源程序翻译成可执行文件的过程分为编译和链接两个独立的步骤,不是多此一举吗?之所以这样做,主要是因为:在一个较大的复杂项目中,有很多人共同完成一个项目(每个人可能承担其中一部分模块),其中有的模块可能是用汇编语言写的,有的模块可能是用VC写的,有的模块可能是用VB写的,有的模块可能是购买(不是源程序模块而是目标代码)或已有的标准库模块,因此,各类源程序都需要先编译成目标程序文件(2进
8、制机器指令代码),再通过链接程序将这些目标程序文件连接装配成可执行文件。 运行(可执行程序文件)。上述四个步骤中,其中第一步的编辑工作是最繁杂而又必须细致地由人工在计算机上来完成,其余几个步骤则相对简单,基本上由计算机来自动完成。在VC6.0下编译后的窗口界面如图2-4所示。 图2-4 在VC6.0下编译后的窗口界面本程序主要完成的是模拟电信计费的功能,整个程序由4个类结构为基础。类UML图如图3-1所示。 图3-1 类UML图功能设计(登陆设置)3.2.1 log_in类的设计1.load()成员函数void log_in:load()int i,count=0; char str50,st
9、r150; time_t t1,*t=&t1; printf(nnnnnn); 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=t
10、ime(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()成员函数void log_in :account_code()int b;cout*1注册新账号*n;cout*2修改密码*n;coutb;if(b=1)string temp1;string temp2;ofstream outfil
11、e ;/ 建立输出文件流对象 outfile.open( code.txt , ios:out ); / 连接文件,指定打开方式 cout请输入账号:account;cout请输入密码:temp1;cout请再次输入密码:temp2;if(temp1=temp2)code=temp1;outfile account endl ;outfile code endl ;outfile.close () ;couttemp1temp2;cout请输入您的账号:temp3;cout请输入原密码:temp4;if(temp1=temp3)&(temp2=temp4)loop:cout请输入新密码:tem
12、p5;cout请再次输入新密码:temp6;if(temp5=temp6)account=temp1;code=temp5;elsegoto loop;rwfile account endl ;rwfile code endl ;rwfile.close();cout修改成功!n;system(pause);menu();设计流程如图3-3所示。3. log()成员函数void log_in :log()int b;cout*1注册账号或修改密码*n;cout*2登陆系统*n;coutb;if(b=1)account_code();elseload();设计流程如图3-4所示。 图3-2 lo
13、ad()成员函数流程图图3-3 account_code()成员函数4. codeNum()成员函数void log_in :codeNum()char a37=abcdefghijklmnopqrstuvwxyz;/定义一个包含26个小写字母的字符串int i,j;char output5=;char code5=;srand(int)time(0);/初始化随机数发生器printf(nn t验证码: );for(i=0;itemp1temp2;loop:cout请输入您的账号:account;cout请输入您的密码:code;codeNum();if(temp1=account)&(tem
14、p2=code)menu();elsegoto loop;设计流程如图3-6所示。图3-6 logshow()成员函数6. logshow()成员函数void log_in :quit()cout确定退出系统?endl;coutYes?/Y or No?/N:c;if(c=Y|c=y)int i;char str50,str150;time_t t1,*t=&t1; i=5;dot1=time(NULL);strcpy(str,ctime(t);while(strcmp(str,str1)!=0)strcpy(str1,str);for(;i0;)system(cls);printf(%d秒后
15、退出!,i-); /break;while(1);system(pause);exit(0);elsesystem(pause);menu();设计流程如图3-7所示。图3-7 logshow()成员函数.2.2 fixed_phone类的设计1. get_fee(int t)成员函数float fixed_phone:get_fee(int t)if(t=0)fee=0.02*time;if(t=1)fee=(time/60+1)*0.06;return fee;设计流程如图3-8所示。图3-7 get_fee(int t)成员函数2. show_detail(int t) 成员函数void
16、 fixed_phone:show_detail(int t)if(t=0)/cout您本次通话的详细信息:endl;cout电话号码:number 电信服务类型: 固定长途电话 通话时间(秒):time 产生的费用:feeendl;if(t=1)/cout您本次通话的详细信息:endl;cout电话号码:number 电信服务类型: 固定本地电话 通话时间(秒):time 产生的费用:feeendl;设计流程如图3-9所示。图3-9 show_detail(int t) 成员函数3.2.3 telephone类的设计1. get_fee(int t)成员函数float telephone:g
17、et_fee(int t)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;return fee;设计流程如图3-10所示。2. show_detail(int t)成员函数void telephone:show_detail(int t)if(type=2)/cout您本次通话的详细信息:endl;cout电话号码:number 电信服务类型:无线长途电话 通话时间(秒):time 产生的费用:feeendl;if(type=3)/cout您本次通话的详细信息:endl;cout电话号
18、码:number 电信服务类型:无线本地电话 通话时间(秒):time 产生的费用:feeendl;if(type=4)/cout您本次通话的详细信息:endl;cout电话号码: number 电信服务类型:无线电话接听 通话时间(秒):time 产生的费用:feenum;fixed_phone * fph=new fixed_phonenum;telephone * tlh=new telephone num;string temp_num;couttemp_num;for(i=0;it;if(t=0)|(t=1)fphi.type=t;infilefphi.numberfphi.time
19、;fphi.fee=fphi.get_fee(t);if(fphi.number=temp_num)couttlhi.numbertlhi.time;tlhi.fee=tlhi.get_fee(t);if(tlhi.number=temp_num)cout您本次通话记录为:n;tlhi.show_detail(tlhi.type);设计流程如图3-13所示。图3-13 read_show_all()成员函数3.2.5 主函数的设计主函数void main()log_in loging;loging.log();phone phe;int choose;loop:coutchoose;if(ch
20、oose=1)system(cls);loging.log();else if(choose=2)loop2:system(cls);phe.find();cout*1返回主菜单*n;coutchoose_2;if(choose_2=1)loging.menu();goto loop;if(choose_2=2)goto loop2;else if(choose=3)system(cls);phe.read_show_all();cout按任意键返回主菜单;system(pause);loging.menu();goto loop;else if(choose=4)system(cls);lo
21、ging.quit();goto loop;设计流程如图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+知识从新巩固了一遍,对类和继承进一步理解,特别对程序的面向对象的封装性进一步的理解和体会,为今后的程序编写奠定了一定的基础。而这次的课程设计也给了我们一次机
22、会,一次把学习到的知识付诸实践的机会。知识宝贵,团队精神同样可贵,我想任务分组完成就是出于这样的考虑吧,团队合作不是把任务简单分开就能实现的。每个人学习知识的侧重点不尽相同,每人解决问题的思路也不一样,几个人相互讨论,相互辩论的过程中往往会产生出人意料的好想法,也许这就叫做灵感。分歧过后达成共识,团结协作,最终才造就了一个完整的可使用的程序。实习的过程中出现了无法解决的问题,所以我们也查阅了大量相关资料和书籍,请教导师各方面的知识,吸取前人的经验也是解决问题的很好途径,但是绝不能照抄代码,先继承后发展才能算是我的收获的。“书到用时方恨少!”应用时的捉襟见肘才让我认识到了自己高级语言基础上的不足,每一门专业基础课都是我们手中不可替代的武器,只有把他们有机联系起来才有可能实现一个完整的功能,本次课程设计是我体会到只有付出才会有收获,只有平日认真学习关键时刻才会不捉襟见肘,只有团结一致才会成功,只有互助才会顺利生产实习要亲手做过,不管它是否有结果。你要学的是知识,是解决问题的方法和思想,要端正学习态度,每一次突破都是一种收获,就是在这样的过程中我们才能不断提高。在从开始接到课程设计,再到报告的完成,每走一步都渗透着努力和汗水。在收获知识的同时收获快乐。 随着时间的流失我会用今天所学到的用到今后的学习和工作中,我会为了今后编写出更好的程序而努力学习,时刻记住只有付出才会有收获。