《C语言程度设计》

2024-09-20

《C语言程度设计》(共6篇)

《C语言程度设计》 篇1

一、引言

枚举算法常常称之为穷举法, 是计算机高级语言中很重要的一种算法, 从可能出现的集合中一一列举所有元素, 用给定的已知条件来判断是“有效的”还是“无效的”。所谓有效的就是条件成立, 也就是问题的一个解法。

二、常见枚举算法

枚举算法在使用计算机编程求解数学问题时, 很常见, 比如:“百钱百鸡”、“求水仙花数”、“求质子数”、“求素数”。这些都是根据已知条件, 在一个范围域里, 求符合条件的集合;可以表示为:a∈b。

以“求素数”为例, 以多种方式求解, 并比较其算法的优缺点和学生理解的难易程度;使学生得以全面理解掌控其算法的特点。大家知道素数的含义:除自然数1以外只能被1和它自己本身整除的数即的素数。从理解的角度, 从“素数”的定义, 直接编程求100以内的素数。列举从2开始的数, 分别用2至100的数去除, 如果余数为0则说明当前的数不是素数, 反之则是。程序核心代码如下:

显而易见, 这种方法是对最原始的枚举法的诠释。对于学生来说很容易理解, 也是对枚举算法的定义的解释表现;但是, 其算法效率低、无效循环多。很明显, 如果在枚举域大的时候, 其弊端就会使程序运行困难。

三、优化枚举域后的算法

从上面的算法大家会发现, 虽然最终可以得出结果, 但其改进的空间很大。大家可以从其枚举域过大入手来优化, 上述程序深入研究后会发现:变量i在外层循环控制变量, 其作用是列举2以后所有的数;变量j在内层循环, 其作用是判断其是否是素数和判断的范围。由此, 可得出:例如i值等于78, 本来判断最大范围应该是2至77就足够了。

所以, 上述程序第二行可以优化为:“{flag=1;for (j=2;j

四、进一步优化枚举算法

4.1时间复杂度缩小优化

前面我提出的算法, 如果用时间复杂度来表示的话, 应该是:O (i) 。但是我们知道, 除了2是素数以外;只要是2的整数倍是数它就不是素数, 如果我们把它扣除在外那么速度就会提高一倍。表示为:O (i/2) , 可以在程序中加入以下语句来实现:

在原有的基础之上, 此程序在开始执行前加上了判断其是否是偶数的语句;看似程序加长并变复杂。学生的第一感觉都是这样, 上述例子就是以函数的形式来展现, 就是要学生理解;它其实就是完成一个小的功能而已, 把这个理解了, 就不难理解程序时间复杂度减小了一半。

4.2数学上的值域优化

数学上有定理:如果i不是素数, 则i有满足1

在4.1节例子中程序第3行应该改成:“for (int k=2;k<=sqrt (i) ;k+=2) ”。这种方式, 可以认为是初学C语言者的一个教学难点和重点;其综合性很强, 除了要掌握前面所述的算法外, 还要对数学方面的知识能够学懂。但只要大家比较其时间复杂度, 就会得出很明显的算法优化, 就知道其重要性。

五、结束语

枚举算法在生活中经常使用, 在计算机编程中由为重要。虽然根据其原理, 学者提出了许多的方法, 诸如:筛法求素数, 二分法求素数, 利用数组等方式;但对于初学者来说又太难, 本文是提高专科学生学习能力的有效路径。

参考文献

[1]梁潘.基于枚举算法的优化方法研究.阿坝师范高等专科学校电子信息工程系.重庆三峡学院学报.2010.3

《C语言程度设计》 篇2

一、课程设计目的

1.复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握。

2. 提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。3.培养学生在项目开发中团队合作精神,创新意识及能力。

4.本课程设计主要以学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,作出设计报告。

二、课程设计内容

第一题:背单词软件开发(学号为单号的必须作)

1.录入单词

China 中国 Japan 日本

…….使用文件存放。

2.随机测试

系统随机显示单词(用户可以选择中译英,或英译中),对回答错误的单词应该可再回答一次。能够统计回答的正确单词的个数。3.顺序测验

4.查找单词的汉语或英语意思(输入中文查对应的英语意思,输入英文查对应汉语意思)

第二题:小学数学四则运算(学号为双号的必须作)12+56=?

1.要求系统随机生成0~100之内的整数。2.对回答错误的题目应该可重新回答一次。3.能够统计回答的正确题目的个数。

4.回答错误的题目写入“error_record.txt”文件中。

第三题:学生成绩管理系统

要求:1.学生的信息用结构体来表示。

struct stu{ int

sno;

//学号

char name[8];

//姓名

char sex[3];

//性别

char inclass[8];

//班级

float math;

//数学成绩

float English;

//英语成绩

float computer;

//计算机成绩 }

2.能够按学号、按性别、按班级查询。查询方式可以自己补充。3.能够统计每个学生的平均成绩、总成绩、并可以按平均成绩和总成绩进行排序,并在屏幕上打印排序结果。

4.能够修改、删除、添加学生的信息。

5.系统的各个功能模块要求用函数的形式实现。6.在主函数里通过菜单来调用各个函数。

7.用链表或数组来存储班级学生(思考用数组和链表的异同)。

8.学生的信息能够保存在文件里(思考用二进制文件和文本文件的异同)。如果用文本文件存储,则文件格式如下: 学号 姓名

性别

班级

数学

英语

计算机 1001 王鹏

一班

68.5 58

1002 李云

一班

68.5 88

1003

王海

一班

78.5 98

…….2001 赵亚男

二班

58.5 48

2002 刘飞

二班

68.5 78

提示:

文本文件读写------fscanf,fprint 二进制文件读写----fread,fwrite 9.能够对文件进行读写、修改、删除。

第四题:中文分词器软件(选做题—加分)

与英文的以空格作为分界符不同,在中文中词与词之间没有明显的区分标记,中文信息处理中的一个重要的基础就是词的切分,也称中文分词。本题目是开发一个简单的中文分词器软件。

提示算法:

基于字符串匹配的分词方法这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,字符串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配。

建议采用最大正向匹配算法。

例如:对一个字符串S,从前到后扫描,对扫描的每个字,从词库中寻找最长匹配.比如假设S=“我是中华人民共和国公民”,词库中有“中华人民共和国”,“中华”,“公民”,“人民”,“共和国”......等词.当扫描到“中”字,那么从中字开始,向后分别取1,2,3,......个字(“中”,“中华”,“中华人”,“中华人民”,“中华人民共”,“中华人民共和”,“中华人民共和国”,“中华人民共和国公”),词库中的最长匹配字符串是“中华人民共和国”,那么就此切分开,扫描器推进到“公”字。

S的分词结果为:我/是/中华人民共和国/公民

提供的词典是7个文件:chivoc2.txt,chivoc3.txt,„„,chivoc8.txt,分别存储2字词,3字词,„„,8字词。

三、课程设计要求: 1.对系统进行功能模块分析,控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善,合理。2.系统设计要实用,编程简练、可用、功能全面。3.说明书、流程图要清楚。

4.记录设计情况(备查,也为编写设计说明书作好准备)。

5.设计成果:设计说明书一份(包含源代码的详细注释说明)。

四、补充

1.程序=算法+数据结构

一个好的程序应该有好的算法和好的数据结构。

指导教师:潘惠勇

李国伟

《C语言程序设计》教学探究 篇3

关键词:教学方法案例教学启发教学教学效果

0 引言

《C语言程序设计》作为计算机专业的基础课,已经成为一门必修的语言课程,在整个语言课程体系中占有非常重要的地位。在C语言教学过程中,从客观上讲,教师的教法和学生的学法的差异,对教学效果都会产生很大的影响。针对教师的教法和学生学习语言类课程的学法,结合近几年来的教学经验和教学体会,把一些经验和方法总结出来,希望能对C语言课程的教学和学习有所帮助。

1 分析教学中存在的问题

《C语言程序设计》是一个逻辑性很强的课程。有些问题是将数学知识转化用c语言来实现,这就要求学生首先要能够理解和掌握数学知识,才能将其转化用c语言来实现。在调试程序时,提示的信息都是用英语给定,那么也就要求学生掌握最基本的英语单词,有些甚至是计算机专业英语,能将英语句子翻译为汉语,才能够对程序加以修改。学生在心里认为c语言难学,没有积极学习的主动性,导致上课时没兴趣,不能专心听讲,布置的作业无从下手,在实践课中,看到要编写的程序题目,理不出头绪。

2 涉及新的知识要有导入

在教学的過程中,要将新的知识点,要有很自然的导入语,引导学生思考问题和解决问题的方法。例如:scanf(“%d”,&a);只能从键盘接受 一个整型数,现在要输入40名学生的成绩,如何通过一个scanf函数来实现,难道是要定义40个变量,那如果要接受100个数呢?更多的呢?为了解决诸如此类的问题我们采用数组来实现。这样也就引导学生思路跟着教师,给他们提出问题,在给出解决问题的办法。

3 举一反三

给定一个例子时,将涉及到的所有内容都要讲到。各种形式,可能出现的错误都要指定。例如:现在要求n!我们可以给定一下几种形式:

(1)main()(2)main()

{ int i=1,n;{inti=1,n;

doubles=1; doubles=1;

scanf("%d",&n); scanf("%d",&n);

while(i<=n) do{ s*=i;

{s*=i;i++;

i++;} }while(i<=n);

printf("%lf",s); printf("%lf",s):

} }

(3)main()(4)main()

{inti,n ; {int i,n;

double s=1;doubles=1;

scanf("%d",&n); scanf("%d",&n);

for(i=1;i<=n;i++)i=n;

s*=i;while(i>=1)

printf("%lf",s); {s*=i;

} i--;}

printf("%lf",s);}

(5)main() (6)main()

{intI,n; { inti=0,n;

doubles=1; doubles=1;

scanf("%d",&n); scanf("%d",&n);

i=n; while(i<=n)

for(i=n;i>0,i--) {i++;

s*=I;s*=i;}

printf("%lf",s);}printf("%lf",s);}

一个例子可以给出多种方法来实现,在这只给出6中形式,从这6种中,就可以看到初值不同,语句的书写顺序不同。通过一个例子,让学生能理解各种形式,遇到诸如此类问题时,就可以迎刃而解。

4 与实践教学相结合

程序设计课程具有很强的实践性,对于计算机语言课程的教授不应仅仅是传授知识,应该以培训能力为主。C语言的内容繁多,在有限的课时内不可能也不必要面面俱到,所以必须突出重点,突出实用性,关键在于教会学生正确运用C语言编写程序。应始终坚持以应用为中心,以算法为基础,以培养学生的实践能力为核心,突出技术实用性和再学习能力的培养。

参考文献:

[1]朱健,庞倩超.C语言程序设计案例教程.全国高职高专教育精品规划教材:北京:交通大学出版社.

[2]郭芹.对高职高专计算机专业程序设计教学的思考.中国科技信息.2008(1).

[3]谭浩强.C语言程序设计教程.北京:高等教育出版社.

c语言课程设计总结 篇4

一周的计算机C语言课程设计很快就结束了,回想这一周,几分欣喜,几分紧张,欣喜的是学了C语言能得到应用,紧张的是怕自己不能更好的设计自己的程序,生怕自己设计的程序不能顺利的完成。但是在老师的帮忙下,在我们组员的共同的努力下,我们能很好而顺利的将程序设计并且运行出来,虽然有几处不足但在老师的改正下我们的程序也得到了完善。

透过这一周的C语言课程设计,我懂得了很多,它让我明白做事情需要认真与细心,需要耐心与恒心。就拿我们的程序来说把,起初做完运行后有很多错误,当时我们组每个人都十分焦虑,的确,看着长长的程序想要去一一把问题解决也并非是件简单的事,但如果你静下心来细心的去找就会把错误一个一个的找出来。还有一点是十分重要的,那就是有不懂的地方及时向老师提问,那样的话你就会对不懂的地方有个深刻的理解,以后再碰到此类问题自己也就能解决了。所以我们的程序是在老师的帮忙下,在我们组成员的耐心的查找与改正下完成的。我们的成功离不开老师的指导,离不开我们的共同努力。看着运行出来的程序我们笑了,真的,当时的情绪真的想不出用哪个词语去形容,也许笑容代表了一切。

短短的几天时间让我对C语言有了一个全新的概念,它不仅仅是一门课程,更是一门技术。也使我领会到实践的重要性,我期望在以后的学习生活中我会有更多的实践机会来提高我的思考潜力与动手潜力,培养我的细心、耐心与恒心。这是难忘的一次实训课程,它会在我的人生旅途中写上浓重的一笔。感谢老师的指导帮忙,感谢同组兄弟的支持,谢谢!未来的社会必将是科学技术全面,全面发展的社会,我们需要更就应懂得并掌握现代化的科学知识,C语言是一门全新的课程,也许当我们初次接触这门课程会感觉到新鲜,当你更加深入的学习它你会体会到它的乐趣与方便,而未来的社会也正需要全能型的人才,让我们共同努力吧,学会更多的知识技术,为了完美的未来而加油!

浅谈C语言程序设计教学方法 篇5

【关键词】C语言程序设计 教学方法 资源整合

C语言是一门结构化程序设计语言,对于学生来说,C语言程序设计的思维方式和概念都是全新的,学生接受起来很困难。那么,在C语言程序设计教学过程中,怎样开展这种构造性的又具有创造力活动的教学呢?笔者经过这几年的自我学习以及实际教学中的不断摸索,对C语言程序设计教学方法有了一些认识,与大家共同探讨。

一、注重网络环境下的资源整合

互联网技术的飞速发展彻底引发了阅读、计算等方式的变革,巨大的信息量、便捷的信息传

递、极强的交互性,使得网络成为最有效的资源获取工具。因此,在教学过程中建立或利用一个以C语言为专题的编程学习网站,整合与C语言编程相关的丰富的学习资源,为学生提供动态的、协作性的学习环境和学习工具,让学习者自己选择信息资料,自己收集、分析并应用知识,去解决实际问题。通过网络学习环境开展C语言教学,提高了C语言教学活动的有效性。

二、以合作学习为导向,改革课堂教学环节

合作学习是备受国际教育界推崇的学习模式,因为它有助于培养学习者的合作精神和协同解决问题能力。

教学中,以几名学生为小组组成学习的基本单位,学生在学习小组内相互协作、相互帮助、群策群力,共同完成相应的教学任务。实际教学中,教师向各小组布置项目任务,给以必要的说明,提供必要的资料和网络资源,然后各学习小组研究问题,制定解决方案,最后将结果展示出来。例如,在C语言中的函数调用这一个问题,将程序分解为数个模块,每个小组各自承担其中一个模块的程序编写,C语言模块化程序设计的思想在这时得到充分地展现,让学生深刻理解了模块化程序设计理念,同时也使学生感受到了团队合作的重要性,培养了学生协作互助精神。

三、抓住重点,分散难点,注重循序渐进

学习程序设计是一个逐步积累的过程。教材在整体设计上,要注意分散难点、合理选材,为学生建立科学的学习顺序,并注意适时、适量,学以致用地逐步渗透相关的知识、思想和方法。对于有难度的知识点,采用先用一个简单的例子让学生有所了解,经过一段时间的反复练习以及相关知识的积累后,再引入一个复杂一些的例子,深入理解和掌握,然后再加以概括和总结。让学生对知识的认识、理解、运用有一个逐步深入的“螺旋式”上升过程。帮助学生把已学到的内容不断纳入新的内容体系中去,使学生认知结构中原有的概念和新的知识建立起实质性的联系。例如,双循环结构知识点中的打印规则图案的程序设计方法,就可依据问题的难易程度,先找出直角三角形图案形成的规律,再探究等腰三角形图案的形成特点,最后解决构成菱形图案的程序设计,让学生有一个全面、系统的理解和掌握解决该问题的思想方法。

四、立足任务驱动,渗透基本概念

概念的形成过程常常是学生进行逻辑思维的过程,如果遵循逻辑思维过程去组织教学,必将使学生容易掌握概念。因此,要想让学生领会C语言中抽象的概念,教学中以实例任务作为知识的载体,在每个实例中适时、适量渗透一些相关的概念和知识,由实例去驱动学生主动发现、分析和处理问题,让学生在做中学,在学中做,使学生在完成任务的过程中,逐渐地、很自然地去体会C语言的语法规则及相关概念,并且在这一过程中,学生还能体会到相似概念之间的差别,以及解决这一问题的不同程序设计步骤。比如,当型循环while与直到型循环do-while语句的区别,如果只通过教师讲述,多数同学一般只能在表面上知其然,实则不知其所以然,但如果给出一个具体的任务实例,让同学们在实践后的结果中自己去体

验两者之间的不同,留在学生脑海中的记忆将犹为深刻。

五、引导学生建构自己的知识体系

基于网络环境下的学习过程具有开放性、广域性和易交流性。因此,网络环境下的创新教育能真正达到因材施教、发展个性的目的,能够使学生主动参与学习过程,并按照自己的认知水平有序地进行学习和提高,并使其创造性学习成为一种习惯。建构主义的教学活动中,教师的教学形式并不固定,学生则作为一个主体,积极会同其他的小组成员一起,通过已经整合的学习资源在网络下讨论和学习,教师给予学生引导和帮助,解决学生建立知识体系过程中所出现的问题。这样,学生既掌握了教材上的内容,同时又通过网络资源学习了相关的知识点,完成了对自己知识体系的建构,形成了自己的学习方式,而教师不但完成了教学任务,也教会了学生学习的方法,为学生以后的自我学习打下基础,正所谓“教”与“学”相得益彰。

六、做好归纳总结,提高学生学习效率

C语言程序设计的学习,很重要的一点在于归纳总结。一个章节的结束,学生则难以形成完整、清晰的框架,因此,教师在教学中要及时归纳、做好小结。教学归纳可以是一个知识点的归纳(如if条件语句的归纳),也可以是对一种知识结构的归纳(如分支结构中包含if语句、while语句、循环语句等的归纳)。总结可以是一个小节的总结,也可以是一个单元内容的总结。归纳总结的形式也可以多种多样,可以使用文字概括,也可以使用图表总结,重点难点要着重强调。做好归纳总结,有利于学生对知识的理解、做到融会贯通,顺利实现知识迁移,提高学生的学习效率。

教学方法在程序设计教学中的重要性是不言而喻的,它制约着程序设计教学的效率。面对的教学对象不同,教学方法各异,但使每位学生都能得到充分的发展,培养创新人才,是我们的同一目的,教学绝不能脱离学生的知识背景和认知规律。

参考文献:

[1]扈中平.现代教育理论.高等教育出版社,2004.

[2]余胜泉.网络课程的设计与开发.教育技术通讯,2000,(10).

《C语言程度设计》 篇6

关键词:数据同步;客户端;C语言

中图分类号:TP311.52文献标识码:A文章编号:1007-9599 (2010) 16-0000-02

The C-language Design Research of Data Synchronization System Client

Dai Xiuhong

(Liaoning Petrochemical College,Jinzhou121000,China)

Abstract:The research data synchronization system of the client's C language design,data synchronization system proposed by the client data synchronization process and data management and monitoring,this paper addresses generated in the process of enterprise information system database of multiple inter-related business data synchronization,data synchronization process in particular,face three major issues:how to accurately access the source system data,howto keep the data is safe,timely and correct sent to the target system and how to synchronize data and processes on a unified monitoring and management.

Keywords:Data synchronization;Client;C language

對于业务系统来说数据的正确性将直接影响到企业的正常工作和发展,因此对数据同步的过程和数据进行监控和管理就显得尤为重要。同步系统使用了独立的数据库来存放所有同步的数据,同步系统的客户端可以对同步的数据和过程进行管理。客户端登陆时需要设置同步系统服务器端的IP地址并输入正确的用户名、密码才能进入客户端系统进行操作。本文研究数据同步系统客户端的功能设计和异常信息日志表等数据表的设计。数据同步系统包括数据同步系统服务器端、数据同步系统客户端和数据同步系统转发器端。同步系统服务器端对源数据发送方进行身份验证并接收源系统发送的数据后保存在数据同步系统数据库的待发送表中,数据同步系统转发器端将数据从待发送表中取出发送给数据接收方,而通过数据同步系统客户端可以实现对数据同步过程中的同步数据和同步过程的监督和管理。

一、同步数据的查询、新增和修改模块

在成功登录同步系统客户端后可以对待发送数据表、已发送数据表和异常信息日志表的数据进行管理。其主要功能包括:

(一)待发送表数据的查询、修改功能。待发送表中保存了所有未发送到目标系统的正常状态消息和发送失败的异常状态消息,通过数据同步客户端可以查询到这些数据并进行修改操作,考虑为了保护数据的完整性和一致性,数据同步系统的客户端没有开放数据删除的功能。

(二)已发送表数据的查询。己发送表中保存了所有正确发送到目标系统的所有数据,可以通过数据同步系统客户端查询这些数据,但不允许修改和删除操作。

(三)异常信息日志表数据的查询。异常信息日志表记录了数据同步系统服务器本身在运行过程中发生的异常信息、源数据发送方调用同步系统服务器端接口时发生的异常信息和数据同步系统转发器端向数据接收系统发送数据时发生异常的信息,通过数据同步系统客户端可以查询所有的异常信息,为相关系统负责人进行故障排查提供了依据。

二、异常状态数据管理

在数据同步的过程中可能会出现各种的异常情况如:源系统组织的数据问题、数据接收系统服务器问题、身份验证问题等各种情况,在异常发生时需要将发生异常的数据暂停发送,并将待发送数据表中的一些相关数据的状态进行修改防止造成数据错误。若在数据同步系统转发器将正常状态的数据发送给某个数据接收方时发生了异常,则该条数据的状态将变为异常状态,所有待发送数据表中与该条数据相同转发类型和数据接收系统的所有数据的状态将同时更新为异常状态,此时数据同步系统转发器端将停止向该数据接收方发送数据,但不会对其它的数据接收方产生影响。通过数据同步客户端可以查询到异常发生时的时间和异常信息等,系统负责人可以根据异常信息快速的判断异常发生的可能原因并及时的进行处理,若是由于源系统方发送的数据问题产生异常,则可以在待发送查询页面中查询到该数据并进行修改保存操作。在系统负责人确认异常情况已经解决后可以查询待发送表中的异常状态数据并修改其状态为正常状态,此后数据同步系统转发器将自动将这些暂停发送的数据发送给数据接收方。通过数据同步系统客户端的异常状态数据管理可以有效的提高数据同步系统的可靠性和安全性。

三、转发类型管理

在同步系统服务器端发布以后将会有多个业务系统调用同步系统的服务器端接口,随着业务的发展可能会改变原先制定的数据同步对象,如原来A系统的数据需要同步给B系统,而现在则需要同时同步给C系统或者将B系统换成D系统。如果每次改变业务需求时都需要修改同步系统的代码并重新分布的话将会对其余的业务也产生影响,这应该是尽量避免的。

在同步系统服务器端接收源系统发送的数据时会根据传入的转发类型参数字段查找数据同步系统数据库转发类型表中相同转发类型的所有数据记录,然后根据每条记录中的目标系统字段生成相应的数据插入待发送数据表,例:在转发类型表中存在两条数据A和B,数据A的转发类型字段、目标系统字段、目标系统接口字段和是否可用字段分别为ES_CS_001,CA,GetDataFromA和True,数据B的转发类型字段、目标系统字段、目标系统接口字段和是否可用字段分别为ES_CS_001,CB,GetDataFromB和True,若源数据发送方传入的转发类型参数字段的值为ES_CS_001,则数据同步系统服务器端将根据A和B的值向待发送表中插入两条待发送数据,数据同步系统转发器在进行数据转发时将分别取出这两条记录并分别调用CA系统的GetDataFromA方法和CB系统的GetDataFromB方法发送数据。可以通过数据同步系统客户端将数据B记录的是否可用字段设置为false,此后在数据同步系统服务器端接收ES_CS_001转发类型的数据时将只会在待发送表中插入一条记录。因此在数据同步业务需求发生改变时只需修改转发类型表中的数据字段内容即可实现相应的数据同步业务功能的增、改而无需修改任何的代码,实现了代码的重用。

四、数据同步系统客户端实现

(一)服务器端初始化。数据同步系统主要为源数据发送系统提供了数据接收的接口,在对源数据发送方进行身份验证后将接收到的数据存储到数据库中等待转发器进行转发。本文首先数据同步的整个过程进行介绍,然后详细描述了数据同步系统客户端从初始化到运行以及接收源数据发送方的数据并存储到数据库的整个过程。在.NET中可以通过二步来实现Remoting服务器端初始化:

第一步:指定通道。在Remoting中通过通道(channel)来实现两个应用程序域之间对象的通信。为了实现跨越应用程序域进行通信,同步系统客户端必须先指定通信的通道。Remoting的通道主要有两种:Tcp类型通道和Http类型通道。在.Net的System.Runtime.Remoting.Channel命名空间里定义了IChannel接口,其中就包括了这两种通道类型。HttpChannel类型存在于命名空间System.Runtime.Remoting.Channel.Http中。通过使用Http协议,使其能在Internet上穿越防火墙传输序列化消息流。TcpChannel类型存在于命名空间System.Runtime.Remoting.Channel.Tcp中。Tcp类型通道使用了基于Socket的传输方式并通过Tcp协议来跨越Remoting边界传输序列化的消息流。TcpChannel类型默认使用二进制格式序列化消息对象,因此它具有更高的传输性能。指定通道代码如下:

public class Server

[STAThread]

static void Mai。(stringy[]args)

{

try{

//设置端口

IDictionary htPort=new Hashtable();

htPort[""port""]=9996;

//设置名称

htPort[""name""]=""channel";

//指定通道类型

BinaryServerFormatterSinkProvider serverProv=new

BinaryServerFormatterSinkProvider();

serverProv.TypeFilterLevel=

System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

BinaryClientFormatterSinkProvider clientProv=new

BinaryClientFormatterSinkProvider();

TcpChannel channel=new TcpChannel(htPort,clientProv,serverProv);

//注册通道

ChannelServices.RegisterChannel(channel);

}

第二步:设置远程对象的激活方式。在访问远程的一个对象实例时,必须在服务器端创建通道并对该对象进行初始化。这种客户端通过通道来创建远程对象的方式,称为对象的激活。在Remoting中,远程对象的激活分为两种:服务器端激活和客户端激活。服务器端激活,即WellKnow方式激活:在激活对象实例之前会在一个URI上来发布这个类型,并为此类型配置一个WellKnown对象,然后根据指定的地址或端口来发布对象.Net Remoting把服务器端激活又分为两种模式:SingleTon和SingleCall模式。SingleCall模式是一种无状态模式,客户端调用远程对象方法时,会为每一个客户端建立一个远程对象实例,而远程对象实例的销毁和资源回收则由.NET提供的垃圾回收机制自动管理。考虑到会有多个业务系统调用数据同步系统服务器端,需要为每个访问同步系统服务器端的对象建立一个远程对象实例,所以本系统采用了WellKnown模式中的SingleCall模式。

(二)接口實现。数据同步系统必须提供数据接收接口用于获得源数据发送方的数据,数据同步系统服务器端将接口函数封装在可串行化的类中并生成.dll文件然后发给源数据发送方,源数据发送方引用该dll文件并通过设置远程对象的工P地址、端口和激活方式来获取远程对象。远程处理框架需要提供必要的基础结构,以便隐藏远程对象调用方法和返回结果的复杂性。所有需要跨越应用程序域的本地对象都必须按数值来传递并且用Serializable属性标记,否则需要继承并实现ISerializable接口。在应用程序域内部,数据类型按数值传递,而所有的对象按引用传递。MarshalByRefObject是通过使用代理进行消息通讯从而跨越应用程序域边界的对象的基类。没有从MarshalByRefObject继承的对象会以隐式方式按值封送。在Remoting中能够传递的远程对象可以是各种类型,包括复杂的DataSet对象。通过继承MarshalByRefObject可以使任意对象变为远程对象。当客户端激活远程对象时,将接收到该远程对象的代理。对该代理的所有操作都将重新定向,使远程处理基础结构能够正确截取和转发调用。远程对象定义如下:

//允许运行库串行化一个对象

[Serializable]

//远程对象必须继承MarshalByRefObject

public class Message:MarshalByRefObject

{//为源系统提供的接口

public bool GetMsgFromOrigin(byte[]identify,string oriSystem,string operatorName,string transType,string xmlStr)

{

//实例化业务逻辑层对象

MSDS.BizFacade.Message message=new MSDS.BizFacade.Message();

//调用业务逻辑层函数

return message.GetMsgFromOrigin(identify,oriSystem,operatorName,transType,xmlStr);

catch(Exception ex)

//向接口调用方抛出异常信息

throw new Except.ion(ex.Message);

finally

//释放资源

ServicedComponent.Dispose0bject (message);}}

五、结论

在企业信息化发展过程中,建立了大量的信息管理系统,这些系统之间存在一定的关联关系,部分数据在多个系统内都需要被使用。但由于缺乏有关企业信息管理模型方面的标准和规范,造成这些信息系统之间存在兼容性差、数据信息资源难以交流共享等问题,当一个业务系统对其数据库中的某些信息进行更新时,将导致该系统与其它多个系统内数据的不一致性,从而对公司业务的正常运作造成了阻碍。通过对本人所在企业的需求调研,本文设计并实现了用于解决企业数据同步问题的数据同步系统。系统采用Visual Studio 2003的开发环境,使用C语言实现系统开发。实现了在企业范围内多个业务数据库之间的数据交换与同步。系统投入正式运行,并取得了较好的应用效果。

参考文献:

[1]杨柳,蔡英蔚.基于XML格式异构数据同步模型的研究[J].中国电力教育,2008,22

[2]沈敏,许华虎.基于XML的分布式异构数据库数据同步系统的研究[J].计算机工程与应用,2005,41,5:184-186

[3]梁利妓,吴国平.一种基于XML的异构数据源集成方案[J].现代计算机,2004,3:27-29

上一篇:协议工程下一篇:农业物联网平台构建