第一篇:UML课程设计报告+网络教学系统的分析和设
统一建模语言UML 课程设计报告
指导老师: 姓名: 学号: 班级:
【设计名称】 网络教学系统-使用UML进行系统的分析和设计 【设计目的】1.掌握UML建模的基础知识和其应用;
2.熟悉Rational Rose环境及功能,能够设计出完整系统。
【设计要求】1.对系统功能进行必要的描述;
2.绘制系统的主要模型图;
3.模型图要有说明性文字解释。【设计内容】1.网络教学系统的需求分析;
2.网络教学系统UML建模。
【设计步骤】
一: 网络教学系统的需求分析
1、系统功能需求
(1)学生可以登陆网站浏览和查找各种信息以及下载文件。
(2)教师可以登陆网站给出课程见解、发布、修改和更新消息以及上传课件。(3)系统管理员可以对页面进行维护和批准用户的注册申请。满足上述需求的系统主要包括下面几个模块
(1)数据库管理模块:提供使用者录入、修改并维护数据的途径。
(2)基本业务模块:教师可以上传文件、发布消息、修改和更新消息;学生可以下载文件;管理员可以维护页面,批准注册等。
(3)信息浏览、查询模块:主要用于对网站的信息进行浏览、搜索查询。
图 1.1系统功能需求
2、数据库管理模块
图 1.2数据库管理模块
(1)教师信息管理:负责教师信息的管理。
(2)课程简介信息管理:负责课程简介信息的管理。(3)文件上传信息管理:负责文件上传信息的管理。
3、基本业务模块
图 1.3基本业务模块
(1)文件上传:教师可以使用此模块将课程的数据上传到网站服务器。(2)文件下载:学生可以使用此模块从网站上下载课件及其他资料。
(3)消息发布:教师可以通过此模块发布学习方法、课程重点等和教学相关的文章,以及和课程相关的通知等。
(4)消息修改和更新:教师可以通过此模块对自己发布的信息进行修改和更新。(5)页面维护:网站管理员可以使用此模块对网站的页面进行维护。(6)用户注册批准:网站管理员可以使用此模块批准用户注册。
4、信息浏览、查询模块
图 1.4信息查询模块功能
(1)网页信息浏览:用户浏览网站信息。
(2)文章信息搜索:用户根据关键字搜索文章。
二: 系统的UML建模
1、系统的用例图
创建用例图之前首先需要确定参与者。① 在网络教学系统中,需要学生和教师的参与。学生可以浏览课程简介,教学计划,学习方法等教师发布的文章,并可以根据关键字查询文章。此外,学生可以从网站上下载课件。教师作为教学的主导者,使用此网站可以发布学习方法,课程重点等和教学相关的文章,以及和课程相关的通知等,还可以将某一门课程的课件上传。② 网站需要一个专门的管理者进行日常维护与管理,所以需要有系统管理员的参与。(1)系统用户参与的总的用例图
教师和学生都可以从“网站用户”这个参与者泛化而来,网站用户是指网站的注册用户,注册用户可以登录系统完成相应的操作。
系统用户参与的总的用例图如图所示。从图中可以清楚地看到泛化关系与各个参与者所参与的用例。
图 2.1系统用户参与的总的用例图
抽象参与者注册用户的用例只有登录系统(System Login)一个,学生和老师用户除了包含这个用例以外,还各自有相对应的用例。(2)学生参与者的用例图
学生参与者的用例图如下图所示。
图 2.2学生参与的用例图
① 文章浏览用例:学生可以浏览诸如课程简介,教学计划,学习方法等教师发布的文章。② 文章搜索用例:学生可以使用搜索功能根据关键字查询相应的文章。
③ 文章下载用例:学生可以使用下载功能将网站上的课件以及资料信息下载到本地机器上。〖用例图说明〗
① Download:文件下载用例。② Look through info:文章浏览用例。③ Article search:文章搜索用例。
④ Identify:权限认证用例。此用例用来认证文件下载是否具有下载文件的权限。
(3)教师参与者的用例图
教师参与者的用例图如下所示。
图 2.3教师参与的用例图 ① 添加课程简介用例:教师可以为自己所教授的课程添加课程简介。② 上传课件用例:教师可以将课程的课件上传到网站上供学生下载。③ 文章或消息发布用例:教师可以发布介绍学习方法,课程重点等和教学相关的文章,以及和课程相关的通知等。④ 文章或消息修改用例:教师可以修改自己发布的文章和通知。〖用例图说明〗
① Course Intro:添加课程简介用例。② Upload CAI:上传课件用例。③ Message Issue:文章或消息发布用例。④ Message Update:文章或消息修改用例。
(4)系统管理员参与者的用例图
系统管理员的用例图如下所示。
图 2.4系统管理员参与的用例图
① 页面维护。系统管理员可以对网站进行日常维护与管理。② 处理注册申请。系统管理员可以处理学生或教师用户的注册申请。〖用例图说明〗
① Page Maintenance:页面维护。
② CAI Process:教师上传的课件经过系统管理员的审批和处理。
③ Information Update:页面更新。系统管理员负责网站的页面更新,除了文章,消息,图片等的更新,还包括页面的美化和板块的调整。
④ Process Registration:处理注册申请。
2、系统的时序图
网络教学系统中的用例很多,所能画出的时序图也很多,在此不一一介绍。(1)系统管理人员管理网站的时序图
图 3.1 系统管理人员管理网站的时序图 〖时序图说明〗
① Login:登录系统的函数。
② Add_or_delete_Article:添加或删除的文章。③ UpdateCAI():更新CAI课件的函数。④ Add_or_delete_User:添加或删除用户。⑤ Show():刷新页面的函数。⑥ Notify():通知用户的函数。
系统管理人员通过与管理窗口的交互可以添加或删除文章,更新CAI课件,添加或删除用户。具体的操作由管理窗口与数据库交互完成,管理员操作后的结果会在页面上显示。(2)用户登录系统的时序图
图 3.2 用户登录系统的时序图
〖时序图说明〗
① Input(String,String):输入用户名和密码的函数。
② Send(String,String):将用户名和密码发送给服务器的函数。
③ Query_and_Validate():查询数据库并验证用户名和密码正确性的函数。
④ feedBack():发送反馈消息的函数,如果验证通过,发送OK;如果验证出错,发送Error.⑤ ShowInformation():将反馈信息显示给用户的函数。
用户要登录系统,首先要和登录窗口交互,输入用户名和密码。登录窗口负责和服务器交互,将用户输入的用户名和密码发送到服务器,服务器再与数据库交互,以验证用户名和密码的有效性,如果验证成功,则返回OK,验证失败返回Error。服务器将通过登录窗口将信息显示给用户。
(3)学生下载文件时序图
图 3.3 学生下载文件的时序图
〖时序图说明〗 ①Request:学生发送下载请求。
②Send(String,String):传递下载参数的函数。③Identity():验证用户权限的函。④authorize:返回认证信息的函数。
学生要下载文件,首先要向下载窗口发送请求,然后下载窗口的参数传递个服务器,服务器与数据库交互以获得用户的权限认证,认证信息再通过服务器及下载窗口传递给学生。
3、系统的协作图:、用户登录系统的协作图
图 4.1 用户登录系统的协作图
〖协作图说明〗
①Input(String,String):输入用户名和密码的函数。
②Send(String,String):将用户名和密码发送给服务器的函数。
③Query_and_Validate():查询数据库并验证用户名和密码正确性的函数。
④feedback():发送反馈消息的函数,如果验证通过,发送OK,否则,发送Error。⑤ShowInformation():将反馈信息显示给用户的函数。
2、学生下载文件的协作图
图 4.2 学生下载文件的协作图
〖协作图说明〗
①Request:学生发送下载请求。
②Request(String,String):传递下载参数的函数。③Identity():验证用户权限的函数。
④showStatus():返回下载状态的函数。如果认证成功,开始下载,不成功则报错。
4、系统的状态图:
图 5.1 系统的状态图
〖状态图说明〗
① HomePage:处于网站主页。② Certify:登录验证状态。③ SuccessPage:登录成功页面。④ UploadApplyPage:文件上传页面。⑤ Storing File:文件存储状态。⑥ OldPage: 页面未更新状态。⑦ NewPage:页面更新状态。
教师要上传文件,首先要登录网站,通过网站认证后转入文件上传页面,上传文件后处于文件存储状态。文件存储后,要经过管理员的认证才可以在页面上显示,如果通过认证,则刷新页面,如果未通过,页面维持不变。
5、系统的活动图:
(1)用户登录系统的活动图
图 6.1 用户登录系统的活动图
〖活动图说明〗 ①InputURL:输入网站的URL。②Show HomePage:显示网站主页。③Input Login Information:输入登录信息。④Press ”OK” Button:单击 “OK”按钮。
⑤Certify UserInfo:用户信息认证。⑥Show Success Page:显示登录成功界面。
用户登录系统时,首先要输入登录网站的URL,然后从首页的登录窗口中输入信息登录信息,如用户名和密码,点击页面上的登录按钮。用户输入的信息会与数据库中的信息对比验证,如果验证成功返回登录成功页面,如果失败,返回登录失败页面。(2)教师上传课件的活动图
图 6.2 教师上传课件的活动图
〖活动图说明〗
①Apply File Upload:申请文件上传。
②Certify Size And Other Aspact:验证文件的大小和其他信息。③Store:文件存储。
④Administrator Authorize:系统管理员认证。⑤Update Page:更新页面。⑥Delete File:删除文件。
教师要上传文件,先要进入文件上传页面,然后验证上传文件的大小和其他信息是否符合要求。验证成功后将文件存储,当系统管理员认证通过,更新页面;认证不通过删除文件。(3)系统管理员维护网站的活动图
图 6.3 系统管理员维护网站的活动图
〖活动图说明〗
①Login:登录系统。
②Process CAI:处理上传的课件。③Update Information:更新页面信息。④Modify Page:修改页面。
6、系统中的类
(1)参与者相关的类
系统中和参与者相关的类的类图如下:
图 7.1 参与者相关的类
〖类图说明〗 ①User类是所有类的父类,包括属性有Account(登录名)、Password(密码)、email(用户邮箱)等。方法有getEmail(获取邮箱)、getAccount(获取登录账户名)以及changePass(修改密码)。
②Student类是学生类,除了继承父类的属性和方法,还包括number(学号)、name(姓名)、sex(性别)、age(年龄)、class(班级)、和grade(年级)等属性。
③Teacher类是教师类,除了继承父类的属性和方法,还包括name(姓名)、sex(性别)、Identity Card(身份证号)、course(教授的课程)、以及TelephoneNum(电话号码)。
④Adminstrator是管理类,管理员有自己的属性,TelephoneNum(电话号码)。还有自己的方法:CertifyUpload(文件的上传认证)、UpdatePageInformation(更新页面信息)、AddUser(添加用户)和DeleteUser(删除用户)等。
(2)各类之间的关系
类不是单独一个模块,各个类之间是存在联系。网络教学系统各个类之间的联系如下图:
图 7.2 各类之间的关系
〖类图说明〗
①CourseIntro类表示课程介绍类。此类的属性有:courseName(课程名)、college(开课院校)、teacher(授课教师)、scorePoint(课程学分)、time(开课时间)、Place(上课地点)和teachingPlan(教学计划)等,它有一个修改课程信息的方法Modify()。
②Article类表示发表的文章类,包括articleNum(文章序号)、articleTitle(文章标题)、teacherToIssue(发布教师)、create Time(创建时间)以及文章内容。方法有Issue(文章发布)、Delete(文章删除)和Modify(修改)。③FileUploadOrDownload类表示上传的文件信息类,属性包括fileName(文件名)、fileType(文件类型)、fileSize(文件大小)、shortIntro(文件的简短介绍)、fileURL(文件地址)、create(文件的创建者)以及createTime(文件的创建时间)等。操作包括checkSize(检查文件大小)、Modify(修改文件信息)、Store(文件存储)以及Cancle(取消上传)等。
教师可以教授几门课程,所以有几门课程的课程简介;教师可以发布多条信息,也可以不发布;教师可以不上传文件,也可以上传多个文件。一个学生可以下载一个文件,也可以不下载文件。
7、系统的组件图
网络教学系统的组件图如下图,组成Web应用程序的页面包括:维护页面(Maintenance Page)、文件下载页面(File Download Page)、文件上传页面(FileUpload Page)、信息发布页面(Message Issue Page)和登录页面(Login Page)。
图 8.1 系统的组件图
8、系统的配置图
配置图主要是用来说明如何配置系统的软件和硬件。网络教学系统的应用服务器负责保存整个Web应用程序,数据库是负责数据库管理。此外还有很多终端可以作为系统的客户端。由于客户端很多,在此只画出3个客户端,系统配置图如下图:
图 9.1 系统的配置图
【小结】
在建模过程中,遇到一些问题,诸如某些操作界面无法看到,一些修改影响了其他模图的建立,通过询问辅导老师和上网查找资料,得到了比较满意的解决;在这次实验中,关于UML的概念以前比较模糊的地方,我在实际操作中,变得更加清楚了,对Rational Rose的UML功能运用的更加系统,更加熟练;但是更让我明白,UML的知识是十分丰富的,我现在的认识还不够,我将会在以后的学习中,不断提高自己的UML知识。
第二篇:uml课设心得
六月23号至六月27号,是我们班进行UML专用周课程设计的时间,虽然时间并不是很长,只有短短的一个星期而已,但是让我受益匪浅,通过这次的UML课程设计,使我所学的书本知识得到了全面的检验,也让我对这门课程有了更加深厚的体会。
这次课程设计我们没有另外选题,而是在我们之前做过的系统之上加以完善和改进。现在看看之前提交的作品,确实不近人意;但经过在网上的不断查找资料,终于还是将它完成。之前我做的系统状态图和活动图,为了锻炼自己这次选择了交互图(也就是时序图和协作图)。虽然说自己没有这方面的经验,也不是特别熟悉其工作流程,但是有了在网上 查找资料得来的一些基础和课本里的讲解,自己对它也有了一定初步的认识,虽然不是很全面,但还是跌跌撞撞的完成。其中还因为和组员没有沟通好导致用的类不同,费了好大劲才改回来。
最后,这次课设使我们发现考试真的并不是最重要,最重要的是能运用所学的知识。在整个UML课程的学习过程中,我们突破了传统学习模式,把被动接受转变为主动学习。不再是用学到的知识解题,而是在实际运用时遇到什么学什么,重在把知识应用于实际。立体的运用比死板的模仿更有效也更容易接受。下学期就大四了,也就是大学校园里的最后一年,而课设里学到的动手能力和分析问题解决问题的能力也将是我们毕业找工作的一大筹码。
第三篇:UML JSP课程设计心得体会
在这次课程设计过程中,在这与代码为伴的一个月里,我真的收获了很多。这次软件工程大型课程设计,既巩固了这学期学的UML知识,又复习了关于数据库和java的知识,更是学会了如何将所学知识运用到实际,真正的应用到软件开发、网站开发中来。
这次课程设计还有一个额外收获,就是初步学会了用JSP开发网页。虽然做出来的网页不是特别美观,有些地方还存在一些瑕疵,但是从对网页编程一窍不通到能做出一个功能基本完善的简单的毕业设计选题系统,一步步走来,其中收获的不仅仅是全新的知识,对于自学能力、动手能力、合作能力甚至接受挑战的勇气方面的影响,也都是巨大的。对于我来说,以前只接触过用C语言在DOS界面下编程,用java编写简单的桌面应用程序,最多只是简单的连接数据库,所以一开始听说要编网页的时候,实在是缺乏信心,在编程过程中遇到一些棘手的问题的时候,甚至一度想要逃避,可最终还是坚持下来了。虽然这点小程序对于熟练掌握网页编程语言的人来说不算什么,但对于我来说,没有接触过的东西,就是一个新挑战,任何语言的学习,在入门的时候都是最困难的。现在对于网页编程已经有了一个初步的了解,对于有些概念的理解还不是很准确,不过会努力在以后的学习过程中慢慢理解,在以后的编程过程中慢慢熟悉这些概念。
除了学习新语言的收获外,在编程过程中对于功能的实现、一些异常的处理还有界面的设计,也有着很深的感触。既然要做毕业设计选题系统,那么就要先考虑到用户的功能需求,分析不同的用户都是要通过网站做什么,每个用户都有哪些权限;对于数据库的操作来说,是要向数据库中插入数据,还是更新还是删除。而且要考虑到各个方面异常的处理,比如用户名、密码错误怎么办,输入的信息错误怎么处理,成功更新数据库信息后要弹出什么提示框,要转入那个页面等等。对于异常处理,我做的还不够好,由于时间精力有限,有一些异常情况没有考虑到,功能实现的还不够完美,在以后的编程过程中我会在力所能及的范围内尽量考虑周全,既然要做程序,那就要尽量做的完善。对于界面的设计,由于时间关系,没有采用流行的Dreamweaver,感觉有点遗憾,网页的背景图片都是自己手工合成的,略显简陋了些,唯一值得欣慰的就是实现了我一直想要的布局效果,以后在美工方面也会努力的提高自己的能力。
另外对于实际应用中课程之间的融合也是有了一个初步的概念。一开始总觉得UML没有什么实际的用处,但通过这次课程设计我发现,每门课程都是有它独特的意义的,UML中画出的类图、顺序图、活动图等等都对自己编程过程有着极佳的指导意义,这些图能使编程思路变得更加清晰。
总而言之,这一个月的感受可谓五味杂陈,是三言两语难以说清的,最明显的还是感觉到自己知识的不足,对于一些东西还是缺乏一个系统的准确的理解。java是门很有用的语言,考试范围之外的东西还有很多很多;JSP让我接触到了全新的网页编程,也让我知道,学无止境,想要全面深入的掌握一门语言,还是要付出很大的努力的。
第四篇:网络课程设计报告
《计算机网络课程设计报告》
学院:计算机科学学院 专业:计算机科学与技术 班级: 姓名: 学号:
小组成员:
2011-7-13
项目内容:基于Socket的文件传输服务设计与实现
实验目的:基于Socket套接口,实现文件数据传输服务。目的使学生掌握网络文件传输服务的设计方法。
实验环境:操作系统:windowsXP或windows7;
内存:256M以上; Microsoft Visual C++ 6.0
设计方案:文件传送是各种计算机网络实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。文件传输协议的简单设计与实现建立在计算机网络实验环境TCP/IP 网络体系结构之上,使用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c)首先,我们知道此应用软件需实现网络中多台主机的信息互通,实现文件传输,因此涉及到主机网络互联的问题,所以必须会应用到网络协议,可以用UDP或TCP。利用IP地址接受文件内容。
实现流程: 启动电脑,打开能运行该程序的环境,必须保证代码的正确性;
进行窗体框架的设计,实现网络连接,并达到文件传输的功能;
在以上步骤的成功进行下达到设计要求的基于Sockets的局域网内文件传输的函数实现的目的。
源程序;
程序清单: 服务器:
#include “stdafx.h” #include “Server.h”
#include “ServerDlg.h”
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__;#endif
///////////////////////////////////////////////////////////////////////////// // CServerDlg dialog
CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/): CDialog(CServerDlg::IDD, pParent){ //{{AFX_DATA_INIT(CServerDlg)
// NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}
void CServerDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CServerDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP }
BEGIN_MESSAGE_MAP(CServerDlg, CDialog)//{{AFX_MSG_MAP(CServerDlg)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_LICSEN, OnButtonLicsen)ON_BN_CLICKED(IDC_BUTTON1, OnButtonOK)//}}AFX_MSG_MAP END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////// // CServerDlg message handlers
BOOL CServerDlg::OnInitDialog(){ CDialog::OnInitDialog();3
// Set the icon for this dialog.The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE);// Set big icon SetIcon(m_hIcon, FALSE);// Set small icon
// TODO: Add extra initialization here
return TRUE;// return TRUE unless you set the focus to a control }
// If you add a minimize button to your dialog, you will need the code below // to draw the icon.For MFC applications using the document/view model, // this is automatically done for you by the framework.void CServerDlg::OnPaint(){ if(IsIconic()){
CPaintDC dc(this);// device context for painting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x =(rect.Width()cyIcon + 1)/ 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);} else {
CDialog::OnPaint();} }
// The system calls this to obtain the cursor to display while the user drags // the minimized window.HCURSOR CServerDlg::OnQueryDragIcon(){ 4
return(HCURSOR)m_hIcon;}
void CServerDlg::OnButtonLicsen(){ // TODO: Add your control notification handler code here CFileDialog Dlg(TRUE);if(Dlg.DoModal()!=IDOK)
return;
CFile myFile;if(!myFile.Open(Dlg.GetPathName(), CFile::modeRead | CFile::typeBinary)){
AfxMessageBox(“文件不存在!”,MB_OK|MB_ICONERROR);
return;}
CSocket sockSrvr;sockSrvr.Create(800);
sockSrvr.Listen();CSocket sockRecv;sockSrvr.Accept(sockRecv);
SOCKET_STREAM_FILE_INFO StreamFileInfo;WIN32_FIND_DATA FindFileData;
FindClose(FindFirstFile(Dlg.GetPathName(),&FindFileData));memset(&StreamFileInfo,0,sizeof(SOCKET_STREAM_FILE_INFO));strcpy(StreamFileInfo.szFileTitle,myFile.GetFileTitle());
StreamFileInfo.dwFileAttributes = FindFileData.dwFileAttributes;StreamFileInfo.ftCreationTime = FindFileData.ftCreationTime;StreamFileInfo.ftLastAccessTime = FindFileData.ftLastAccessTime;StreamFileInfo.ftLastWriteTime = FindFileData.ftLastWriteTime;StreamFileInfo.nFileSizeHigh = FindFileData.nFileSizeHigh;StreamFileInfo.nFileSizeLow = FindFileData.nFileSizeLow;
sockRecv.Send(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));
UINT dwRead=0;while(dwRead byte* data = new byte[1024];5 UINT dw=myFile.Read(data, 1024); sockRecv.Send(data, dw); dwRead+=dw;} myFile.Close(); sockRecv.Close();AfxMessageBox(“发送完毕!”);} void CServerDlg::OnButtonOK(){ // TODO: Add your control notification handler code here OnOK(); } 客户机: // ClientDlg.cpp : implementation file // Download by http://www.codefans.net #include “stdafx.h” #include “Client.h” #include “ClientDlg.h” #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__;#endif ///////////////////////////////////////////////////////////////////////////// // CClientDlg dialog CClientDlg::CClientDlg(CWnd* pParent /*=NULL*/)6 : CDialog(CClientDlg::IDD, pParent){ //{{AFX_DATA_INIT(CClientDlg)// NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);} void CClientDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CClientDlg)// NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CClientDlg, CDialog)//{{AFX_MSG_MAP(CClientDlg)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)ON_EN_CHANGE(IDC_EDIT_IPADDRESS, OnChangeEditIpaddress)ON_BN_CLICKED(IDC_BUTTON1, OnButtonOK)//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CClientDlg message handlers BOOL CClientDlg::OnInitDialog(){ CDialog::OnInitDialog(); // Set the icon for this dialog.The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE); // TODO: Add extra initialization here return TRUE;// return TRUE unless you set the focus to a control } // If you add a minimize button to your dialog, you will need the code below // to draw the icon.For MFC applications using the document/view model, // this is automatically done for you by the framework.void CClientDlg::OnPaint(){ if(IsIconic()){ // Set big icon // Set small icon CPaintDC dc(this);// device context for painting SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(), 0);// Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON); } CRect rect;GetClientRect(&rect);int x =(rect.Width()cyIcon + 1)/ 2;// Draw the icon dc.DrawIcon(x, y, m_hIcon);else { } } // The system calls this to obtain the cursor to display while the user drags // the minimized window.HCURSOR CClientDlg::OnQueryDragIcon(){ return(HCURSOR)m_hIcon;} void CClientDlg::OnButtonSend(){ // TODO: Add your control notification handler code here AfxSocketInit(NULL);CSocket sockClient;sockClient.Create(); CString szIP;GetDlgItemText(IDC_EDIT_IPADDRESS,szIP);CDialog::OnPaint(); if(!sockClient.Connect((LPCTSTR)szIP, 800)){ AfxMessageBox(“连接到对方机器失败!”); return;} SOCKET_STREAM_FILE_INFO StreamFileInfo;sockClient.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO)); CFile destFile(StreamFileInfo.szFileTitle,CFile::modeCreate CFile::modeWrite | CFile::typeBinary); UINT dwRead = 0;while(dwRead byte* data = new byte[1024]; memset(data,0,1024); UINT dw=sockClient.Receive(data, 1024); destFile.Write(data, dw); dwRead+=dw;} SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,&StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime);destFile.Close(); | SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes);sockClient.Close();AfxMessageBox(“接收完毕!”);} void CClientDlg::OnChangeEditIpaddress(){ // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CDialog::OnInitDialog()// function and call CRichEditCtrl().SetEventMask()// with the ENM_CHANGE flag ORed into the mask.// TODO: Add your control notification handler code here CString szIpAddress; GetDlgItemText(IDC_EDIT_IPADDRESS,szIpAddress);if(szIpAddress.IsEmpty())GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(FALSE);else } void CClientDlg::OnButtonOK(){ // TODO: Add your control notification handler code here OnOK();} 安装演示说明详细步骤: GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(TRUE);11 服务器向客户机发送文件:效果如图 客户器输入服务器的IP地址并选择接受来自服务器发送的文件,选择接受。效果如下图: 输入IP地址 如果地址有误则显示 : 实验总结: 通过本次计算机网络课程设计,我更加充分的理解了课本上的知识,并能够加以扩展,从而应用于实践当中,这几天的课程设计令我受益匪浅,很多平时模棱两可的知识点都认真复习并实践了。我意识到我们所学的东西将来都是要付诸实践的,所以一切要 12 从实际情况出发,理论联系实际,这样才能真正发挥我们所具备的能力。经过此次课程设计,我向我成功的目标又迈进了一步 《电力系统分析》 课 程 设 计 指 导 书 适用专业:适用层次: 长春工程学院电气与信息学院 电力教研室 一、方案的初选 分析原始资料,考虑可能的网络连接方式,淘汰显然不合理的方案。首先根据电力 系统的供电可靠性;其次可通过满足备用情况的线路长度、高压断路器的数量及调度灵活性等指标来取舍,最后经过比较选出2个方案。 二、确定电力网的最佳接线方案 针对网络方案初选结果的2个方案,分别计算它们的一次性总投资和年运行费,采用偿还年限法进行经济比较,最后确定其中之一为最佳接线方案。 1. 方案的总投资 ⑴线路的总投资: ① 确定线路的电压等级 ②按经济电流密度法确定导线的型号 ③计算投资 ⑵变压器的总投资: ①选变压器的台数和型号 ②计算投资 2. 方案的总年运行费 (1)系统设备的运行维护管理费、小修费、折旧费 ① 线路取7% ② 变压器取13% (2)系统的电能损耗费 ① 按最大负荷损耗时间法计算电能损耗 ② 计算费用(电价取为0.5元/度) 3. 确定最佳方案 偿还年限法公式: T =(Z1 — Z2)/(F2 — F1) 式中:T —— 偿还年限(年); Z1—— 方案1的投资(万元); Z2—— 方案2的投资(万元); F1—— 方案1的年运行费(万元/年); F2—— 方案2的年运行费(万元/年)。 如T≤10年,取投资大的方案;如T>10年,取投资小的方案。 三、最佳方案的潮流计算 1、要求计算:各节点运行电压;各支路功率分布。 2、应考虑的运行方式: 1 ① 丰水期最大负荷、最小负荷; ② 枯水期最大负荷、最小负荷。 3、计算方式: 选择一种运行方式计算。 四、电力系统无功平衡及调压计算 1)无功平衡计算 ① 运行时应满足: ∑QG =∑QD +∑ΔQL 式中:∑QG ——系统中所有无功电源发出的无功功率; ∑QD ——系统中所有负荷所需要的无功功率; ∑ΔQL —网络元件中的无功功率损耗。 ② 全系统应有一定的无功功率储备: QR =∑QN —∑QG 式中:∑QR ——系统的无功储备; ∑QN ——系统无功电源设备容量。 说明:必须保证QR /∑QD max>(7~8)%,否则说明无功电源不足,将不能保证 系统运行中的电压水平,甚至会危及到系统的电压稳定性,造成极为严重的后果,此时就必须进行无功补偿。 2)调压计算 ① 可采用的调压措施 i改变发电机端电压调压————调整发电机的励磁电流; ii改变变压器变比调压—————选择变压器绕组的分接头; iii改变系统无功功率分布调压——并联无功补偿; iiii改变电网参数调压——————线路中串入电容器或电抗器。 ② 调压措施的应用 改变发电机端电压调压不需增加额外设备,简便可行又经济,既可保证机压负 荷和近区负荷的电压质量,又可作为系统的辅助性调压措施,减轻其它调压措施的负担,应充分利用。 在系统无功储备充足的前提下,因改变变压器变比调压不需增加额外设备且灵活有效,故应优先采用。如普通变压器难以满足要求,则可采用有励磁调压变压器调压。 在系统无功储备不足或当有励磁调压变压器也不能满足调压要求时,即应采用并联无功补偿调压。补偿设备可采用静电电容器、同步调相机、静止无功补偿器,亦或采用最新的SVG装置。 改变电网参数调压的方法由于设计、运行等方面的原因,工程实际中很少有应用,故本次设计不拟采用。 参考资料:《电力系统分析》教材及《电力系统设计手册》。 2第五篇:《电力系统分析》课程设计指导书