




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实 习 报 告(20 12 -20 13 学年第 2 学期)课程名称: 生产实习 学生姓名: 专业班级: 学 院: 学 号: 学生成绩: 实习(设计)项目指导教师杨勇、栗庆吉参与指导教师杨勇、栗庆吉实习类型生产实习目的与要求:目的:理论与实践相结合,把所学的知识应用于实践,进一步来掌握知识。要求:1 严格遵守所在实习单位的各项制度要求,虚心学习,认真工作,树立良好形象;2 按照指导教师的布署,结合所在实习单位的生产实际,认真完成实习任务,及时填写实习周记表;3 对实习中发现的问题,充分发挥主观能动性,并积极与学校或所在实习单位的指导教师沟通,培养独立分析问题、解决问题的能力和团队合作的精神;4 认真完成实习报告,按时返校。实习内容:一需求规约1. 简介 随着IT技术的高速发展,面对新的经济形势,国内大、中、小型企事业单位已加快了信息化建设的步伐。处于快速成长中的中国企业,企业信息化工程需要能立竿见影,以实现其投资效益最大化。因此,信息化解决方案必须是功能贴切、易学易用、快速实施、稳定安全,能确保其关键业务和关键管理需求的率先解决,并提供充分的扩展性以适应企业成长的需要,才能将企业实施信息化的风险最小化。 企业的传统业务支撑系统是以满足生产为目的,各组织架构系统相对独立。如果完全按照这一方式进行信息化,往往会形成信息孤岛。这显然与希望信息资源的集成共享、零距离沟通交流从而促使企业内部高度智能化、透明化、自动化的建设初衷相去甚远。“即时通讯”正是专门针对企业应用量身订做的统一商务协作平台。自问世以来,就以其稳定的安全性、人性化的监管性、通讯的便捷性及友好的操作界面在广大企业中迅速普及。 随着分公司、办事处等分支机构的相继成立,各职能部门的完善与公司人员的增多,企业信息化建设变的尤为重要。1.1 目的 我们导入企业即时通讯的目的,主要是促进公司内部沟通、节省大量电话费用和差旅费、防止企业的商业秘密和客户资料外泄、提高员工工作率、营造一种新的企业沟通文化。 1.2 参考资料书名出版日期出版社编者Visual C+网络与数据库编程百例2003.3中国电力出版社肖佳放、顾松东Visual C+教程2011.2清华大学出版社郑阿奇Visual C+编程案例精解2005.1电子工业出版社张宏军、党留群、赵天巨软件运行平台: 支持Visual C+应用的系统平台数据库:Access 1.2 概述 一家IT公司随着规模的扩大,公司内部员工之间的及时沟通与交流也愈发困难和重要。虽然市面上有很多即时通讯工具(如MSN、QQ、人人),但是现在众多网络公司提供的免费聊天工具通常只是客户端程序,而不是服务器端程序,这样就无法灵活地应用在公司、企业的内部网络中去。于是公司决定自行开发一套仅限公司内部使用的即时通讯工具。2. 整体说明 什么是IM:IM是Instant Messager(即时通信)的缩写。我们常用的QQ、网易泡泡、MSN和人人都属于IM软件。 即时通信工具自1998年面世以来,以实时交互、资费低廉等优点,受到了广大个人用户的喜爱,成为网络生活中不可或缺的一部分。尤其是近几年来,随着互联网的飞速发展,为适应越来越强烈的企业沟通需求,ICQ、MSN、Yahoo Messenger、RTX等即时通信软件不断出现并被广泛应用于企业即时通信之中。借助于这些即时通信工具的运用,企业的生产效率得到大幅度提升,业务协同性以及反馈的敏感度和快捷度都得到大幅度提高。这些针对企业用户的企业级即时通信系统,其易于管理的特性和相对严肃的风格更能适合于企业信息化的要求,这不仅为企业架起了实时沟通的桥梁,也有力推动了企业迈入实时信息化的进程,提升了企业的核心竞争力。对企业来说,即时消息、语音、视频通信和即时文件传输的利用率非常高。企业级即时通信系统作为未来的主流办公工具,集成了多种先进的信息沟通方式。它是一种比邮件更快捷、更具亲和力和交互性的沟通方式,相比手机,具有可记录性、费用低、数据形式的多样性特点,支持文本、语音、图画、视频。特别是它能与电子邮件、手机(电话)以及其它企业应用办公程序结合使用,成功打造现代办公的新平台。 企业即时通信系统的特点: 1.与现有主流即时通讯系统之间的互联互通。用户不仅可以与使用同类产品的用户相互通信也可以与使用其他即时通讯系统的用户相互通信。 2.具备企业内部、企业之间、对外商务交流三位一体的畅通、便捷、同平台交流功能。 3. 数据传递私密、可管理,确保商务交流信息的安全性。 4. 简单易用的用户配置。企业可以根据实际情况采用不同的方式满足分布于不同地点的人员接入。 5.电信级的安全标准,消息传输、文件传输采用多位加密,保证个人信息的安全与个人隐私。 6.完善的管理功能,企业自行进行用户管理,可对部门、分组、个人进行严密的权限控制,保证企业的商业信息安全。 7.多样化的沟通方式,企业内部用户可进行多种方式的快速沟通,包括文本会话、群发消息、文件传输、文件共享、网络传真及语音视频传输等远程协同方式。企业即时通信系统和个人即时通讯系统有很大差别,它是面向企业用户,为企业打造的一个方便、快捷、可管理、功能强大的内、外部实时统一通信平台。方便员工内部沟通和对外商务交流,提高工作效率,有效减少企业的边际成本,同时营造出一种新型高效的企业沟通文化氛围。 2.1 用例模型 模型的内容包括管理员和用户两个部分。每个部分拥有不同的应用,具体如下: 服务器端用例客户端用例3. 模块需求:企业即时通信系统客户端程序服务器程序服务控制多人文字传输系统管理私人文字传输文件传输用户管理视频传输音频传输服务控制:系统管理:用户管理:私人、多人对话:文件、视频、音频传输: 具体需求: 1、为了加强对用户的管理,本工具不提供用户注册功能,只提供用户信息维护功能(公司自行分配账号); 2、公司信息、部门信息和用户信息由管理员统一维护; 3、管理员能够查看当前在线用户的详细信息(公司可以通过在线数量统计员工的考勤情况); 4、用户可以同时和多个在线好友聊天(支持一对一及多对一); 5、用户能够查看好友信息,维护聊天记录; 6、用户的聊天信息必须由服务器进行转发(设想); 7、在线、离线语音功能(当被需求者离线是语音可以保存到服务器,等待被需求者接收);8、文件及视频的传输功能(同上);9、类似“QQ”界面。二详细设计规约1.模块设计服务端EIM01启动服务EIM01-1停止服务EIM01-2查看服务器配置信息EIM01-3查看在线人员详细信息EIM01-4公司基本信息维护EIM01-5查看公司基本信息EIM01-5-01更新公司基本信息EIM01-5-02部门信息维护EIM01-6查看部门信息EIM01-6-01增加部门信息EIM01-6-02删除部门信息EIM01-6-03更新部门信息EIM01-6-04用户基本信息维护EIM01-7查看用户基本信息EIM01-7-01增加用户基本信息EIM01-7-02删除用户基本信息EIM01-7-03更新用户基本信息EIM01-7-04初始化用户密码EIM01-7-05客户端EIM02用户登录EIM02-1用户聊天EIM02-32.系统功能模块详细设计: a)启动服务: 模块编号:EIM01-1 模块名称:启动服务输入: 无处理: 自动设置服务器端套接字,启动服务后监听客户端的请求,同时显示连接状态和接收请求的信息算法实现:/设置服务器套接字:BOOL InitSocket()加载套接字库 WSAStartup( wVersionRequested, &wsaData );检查是否加载成功BOOL CreateSocket (SOCKET &sock)创建套接字 socket (.);/确认类型SOCK_STREAM 检查套接字创建是否成功 BOOL BindSocket(SOCKET &sock)/绑定套接字 Bind();/IP和端口号BOOL ListenSocket(SOCKET &sock)/监听Listen ();确认是否成功监听/对以上函数进行封装成一个函数/启动服务器:BOOL StartSrv()调用以上封装的函数/显示已连接的信息:显示连接状态,禁用启动服务创建线程处理接收客户端的连接 m_ServerSocket.accept(m_ClientSocket)如果接受连接成功 创建线程对接收的内容处理根据不同的消息类型做出不同的处理函数Switch(消息类型) 登录 , 从数据库中读取用户名和密码进行比对,返回给客户端是否成功登录 成功登录后 将该用户信息添加至在线用户列表中 将在线用户信息发送给刚登录的用户,使客户端能刷新用户列表判断当前在线用户是否只有一人,不是一人就多播发送刚登录的用户信息是以前在线的用户能够更新在线用户列表 退出 更新在线用户列表 判断是否还有用户在线 ,如果还有在线的就多播发送刚下线的用户信息到在线用户 使在线用户的在线用户列表刷新 聊天 获取接收到的用户要聊天的对象的ip 根据该IP创建套接字以及绑定地址 转发消息 修改用户信息 打开数据库找到要修改的用户编号,对用户发送过来的修改内容进行修改 发送是否修改成功到客户端 浏览用户信息 打开数据库找到要修改的用户编号,对用户发送过来的修改内容进行修改 发送要查看内容的信息到要查看内容的客户端输出: 显示连接状态备注: 创建成员变量 例如CSocket(类型) m_ServerSocket , m_ClientSocket创建的成员变量类型视编程时创建的socket类而定, 对开启服务的函数作封装,使函数代码简洁 停止服务 模块编号:EIM01-2 模块名称:终止服务输入: 无处理: 向客户端发送消息,关闭服务器端的套接字,断开与客户端的连接,显示服务器状态。算法实现:/收到客户端发来的消息后BOOL Server_Stop ()关闭套接字清空在线用户(是一个调用函数)设置服务器为禁用状态输出: 显示连接状态备注: 无查看服务器配置模块编号:EIM01-3 模块名称:显示服务器配置输入: 无处理: 显示服务器端的IP地址和端口号算法实现:BOOL OnServerinfo () 创建一个非模态对话框;显示端口号和主机IP输出: 显示服务器的IP,xx.xx.xx.xx,端口号,xxxx备注: 无三源代码(1) 公共消息结构体typedef structint type;/0(登录成功),1(重复登录),2(回复IP)char buffer1025;CString userIP;UINT port;Msg;(2) 服务器程序:1. 主窗口类(CServerDlg):数据成员:CListenSocket m_sListenSocket;/侦听套接字CPtrList m_listConnectSocket;成员函数:BOOL CServerDlg:OnInitDialog()CServerPort dlg;if(IDOK = dlg.DoModal()this-m_nPort = dlg.m_nPort;this-m_nNumber = 0;UpdateData(false);this-m_sListenSocket.SetParentDlg(this);/创建侦听套接字if(!this-m_sListenSocket.Create(this-m_nPort)/创建用于设置端口绑定的套接字MessageBox(server create failure!);return false;if(!this-m_sListenSocket.Listen()/开始侦听连接MessageBox(server listen failure!);return false;return TRUE; / return TRUE unless you set the focus to a controloid CServerDlg:OnAccept()CConnectSocket* pSocket = new CConnectSocket(this);if(!this-m_sListenSocket.Accept(*pSocket)MessageBox(server accept failure!);return ;void CServerDlg:OnReceive(CConnectSocket* pSocket)Msg msg;int nReceive = pSocket-Receive(&msg,sizeof(Msg);if(nReceive != SOCKET_ERROR)if(msg.type = 0)/登录信息pSocket-m_userID = atoi(msg.buffer);POSITION pos = m_listConnectSocket.GetHeadPosition();if(0 != m_listConnectSocket.GetCount() & (CConnectSocket*)m_listConnectSocket.GetHead()-m_userID != pSocket-m_userID)for(; pos != NULL; )if(pSocket-m_userID = (CConnectSocket*)m_listConnectSocket.GetNext(pos)-m_userID)break;if(pos = NULL)pSocket-GetPeerName(pSocket-m_userIP, pSocket-m_userPort);pSocket-m_userPort = msg.port;m_listConnectSocket.AddTail(pSocket);m_nNumber+;CString str;str.Format(%s上线了,msg.buffer);this-m_listMessage.AddString(str);UpdateData(false); msg.type = 0;/回复登录成功while(SOCKET_ERROR = pSocket-Send(&msg,sizeof(Msg);else if(msg.type = 1)UINT userID = atoi(msg.buffer);POSITION pos = m_listConnectSocket.GetHeadPosition();Msg msgSend ;CConnectSocket* sock = (CConnectSocket*)m_listConnectSocket.GetHead();if(sock-m_userID != userID)/ & 0 != m_listConnectSocket.GetCount()for(; pos != NULL; )sock = (CConnectSocket*)m_listConnectSocket.GetNext(pos);if(userID = sock-m_userID)break;msgSend.type = 2;msgSend.port = sock-m_userPort;sprintf(msgSend.buffer,%s,sock-m_userIP); while(SOCKET_ERROR = pSocket-Send(&msgSend,sizeof(Msg)Sleep(20);elseMessageBox(receive failure!);return ;2. 侦听套接字类(CListenSocket):数据成员:CServerDlg* m_pDlg;成员函数:void CListenSocket:OnAccept(int nErrorCode) if(0 = nErrorCode)this-m_pDlg-OnAccept();CSocket:OnAccept(nErrorCode);void CListenSocket:SetParentDlg(CServerDlg *pDlg)this-m_pDlg = pDlg;3. 连接套接字类(CConnectSocket):数据成员:UINT m_userID;CString m_userIP;UINT m_userPort;CServerDlg* m_pDlg;成员函数:CConnectSocket:CConnectSocket(CServerDlg* pDlg)this-m_pDlg = pDlg;this-m_userID = 0;this-m_userIP = 127.0.0.1;this-m_userPort = 0;void CConnectSocket:OnReceive(int nErrorCode) if(0 = nErrorCode & NULL != m_pDlg)m_pDlg-OnReceive(this);CSocket:OnReceive(nErrorCode);void CConnectSocket:SetParent(CServerDlg *pDlg)this-m_pDlg = pDlg;(3) 客户端程序:1. 主窗口类(CClientSocket):数据成员:CString strID;CChatSocket m_sServerConnect;CListenSocket m_sListen;成员函数:BOOL CClientDlg:OnInitDialog()this-m_nChat = 0;m_sServerConnect.SetParent(this);CLoginDlg dlg;int nReceive = 0;while(true)if(IDOK = dlg.DoModal()if(!m_sServerConnect.Create()MessageBox(create socket failure!);continue;if(!m_sServerConnect.Connect(dlg.m_strServerIP,dlg.m_nServerPort)MessageBox(please login again!);m_sServerConnect.Close();continue;Msg msg;msg.type = 0;/登录信息/初始化侦听套接字m_sListen.SetParent(this);int port = 6000;for(; !m_sListen.Create(port); port+)Sleep(20);if(!m_sListen.Listen()MessageBox(client listen failure!);return false;msg.port = port;sprintf(msg.buffer,%d,dlg.m_nUserID);/初始化对话框名strID = msg.buffer;this-SetWindowText(msg.buffer); int nSend = m_sServerConnect.Send(&msg, sizeof(Msg);if(nSend = SOCKET_ERROR)MessageBox(please login again!);m_sServerConnect.Close();continue;nReceive = m_sServerConnect.Receive(&msg,sizeof(Msg);if(nReceive = SOCKET_ERROR | msg.type != 0)MessageBox(please login again!);m_sServerConnect.Close();continue;else break;/登录成功else:ExitProcess(0);/初始化树形控件DWORD dwStyles=GetWindowLong(m_listFriend.m_hWnd,GWL_STYLE);/获取树控制原风格dwStyles |= TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT;SetWindowLong(m_listFriend.m_hWnd,GWL_STYLE, dwStyles);/设置风格HTREEITEM hRoot,hCur;/树控制项目句柄TV_INSERTSTRUCT TCItem;/插入数据项数据结构TCItem.hParent=TVI_ROOT;/增加根项TCItem.hInsertAfter=TVI_LAST;/在最后项之后TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;/设屏蔽TCItem.item.pszText=好友列表;TCItem.item.lParam=0;/序号TCItem.item.iImage=0;/正常图标TCItem.item.iSelectedImage=1;/选中时图标hRoot=m_listFriend.InsertItem(&TCItem);/返回根项句柄for(int i = 13514001; i TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);*pResult = 0;void CClientDlg:OnDblclkTreeFriendlist(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code hereCPoint point;GetCursorPos(&point);m_listFriend.ScreenToClient(&point);UINT uFlags;HTREEITEM hItem = m_listFriend.HitTest(point,&uFlags);if(hItem != NULL) & (TVHT_ONITEM & uFlags)CString strUserID = m_listFriend.GetItemText(hItem);long userID = atol(strUserID);if(userID != 0)/创建非模态聊天对话框Msg msg;msg.type = 1;/请求好友IPsprintf(msg.buffer, %s, strUserID);this-m_sServerConnect.Send(&msg, sizeof(Msg);CChatDlg* dlg = new CChatDlg(this);dlg-Create(IDD_DIALOG_CHAT, this);dlg-SetParent(this);dlg-SetDlgItemText(IDC_STATIC_USERNAME, strUserID);dlg-ShowWindow(SW_SHOW);int receive = m_sServerConnect.Receive(&msg,sizeof(Msg);if(receive != SOCKET_ERROR & msg.type = 2)while(!dlg-m_sClientConnect.Create()Sleep(20);CString strIP;strIP.Format(%s,msg.buffer);if(!dlg-m_sClientConnect.Connect(strIP,msg.port)MessageBox(connect client failure!);elseChatMsg chatMsg;chatMsg.type = 1;sprintf(chatMsg.buffer, %s, strID);if(SOCKET_ERROR =dlg-m_sClientConnect.Send(&chatMsg, sizeof(ChatMsg)MessageBox(send ID failure!);*pResult = 0;void CClientDlg:OnAccept()CChatDlg* dlg = new CChatDlg(this);if(this-m_sListen.Accept(dlg-m_sClientConnect)dlg-Create(IDD_DIALOG_CHAT, this);dlg-SetParent(this);dlg-SetDlgItemText(IDC_STATIC_USERNAME, );/这里先欠个名dlg-ShowWindow(SW_SHOW);elseMessageBox(accept failure!);return ;2. 和服务器交换数据的套接字类(CChatSocket):数据成员:CClientDlg* m_pDlg;成员函数:CChatSocket:SetParent(CClientDlg* pD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科技素养考试题及答案
- 铸管退火工技能操作考核试卷及答案
- 军事护理考试题及答案
- 救援常识考试题及答案
- 野生植物采集工协作考核试卷及答案
- 有机宝石检验员理念考核试卷及答案
- 铸管退火工设备维护与保养考核试卷及答案
- 课件文案打磨
- 课件文案句子摘抄
- 印花版修复工职业考核试卷及答案
- 提升教师教学能力的在线学习平台
- 2025新高考数学核心母题400道(教师版)
- 金融标准化知识培训课件
- 大学物理教案设计方案
- 国际经济合作课件
- LED光波治疗仪讲课
- 2020-2024年五年高考政治真题分类汇编专题19 世界多极化(原卷版)
- 旅游新媒体营销与运营 课件全套 张建庆 模块1-8 旅游新媒体营销与运营的认知-旅游企业新媒体运营
- 胃食管反流-讲稿
- 急诊急救流程大全
- 2024年提前解除终止服务合同协议书
评论
0/150
提交评论