关于作者

用户名:韩中元
笔名:韩中元
地区: 黑龙江-哈尔滨
行业:工学

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



留言

推荐网站

统计

学生博客

访问统计:
文章个数:163
评论个数:334
留言条数:141




Powered by BlogDriver 2.1

逆水行舟

 

欢迎大家批评指正, 公共信箱email4nsxz@163.com, 密码nishuixingzhou。 请同学们留言时留下学年、班级、真实姓名,方便联络。以往资料请查看2005,2006年索引.

文章

值得每个来这里的朋友仔细阅读铭记在心的文章  (作者置顶)

                   完整的教育包括什么

小表弟在本地一所响当当的大学毕业后,在县城高中找了份教育人的工作。我想,这下好了,姑父姑母可以解放了。多年来,为了供两个表弟读书,姑父姑母包种了20亩农田,每天最多能睡5个小时。大多时间在菜田间、家里、集头三点一线过来的。

  可如今,姑父姑母的操劳并没有停止,说是为了给表弟读书,还欠下3万多块钱。我问,那大表弟已经工作7年多了,怎么还会有这么多债?姑母说,他工作第二年,刚攒了点钱,就谈了对象,然后就结婚,生孩子,哪有闲钱给我们?姑母说着,一脸的幸福,丝毫不觉得有什么不妥。我想问她,您已经60岁了,他们什么时候能让你们过几天不用忙碌的日子?我们自己可以照顾自己,他们生活得好就行了……听了姑母的话,我想,在父母眼里,为儿女忙也是幸福的。可是,作为儿女,于心何忍?

  我不由得想到我的家庭。

  我和哥哥初中毕业后相继回家,哥哥是因为复读两年没有考上高中;而我,是因为偏科厉害没有考上。后来,哥哥参军到部队,我南下深圳成了流水线上的打工仔。现在,我们兄弟俩一个在部队当了军官,一个做了打工编辑,但在父母眼里,我和哥哥比起两个表弟还是差一大截。虽然,我和哥哥都不觉得自己失败,可我们的父母一直觉得自己很失败,没有教育好子女。

  今年暑假,小表弟到广州来玩。我到火车站接他。等地铁的时候,我让小表弟给姑父姑母打个电话,报声平安。表弟说家里还没有装电话。我说现在装个电话才300块钱,怎么连个电话都不装?小表弟说以前大表弟工作第二年的时候,提了一下,后来觉得800元太贵了没有装。现在想装又觉得不如用小灵通方便划算。那小灵通买了吗?我又问。小表弟说没有。我不再问为什么,只是问,那你们平时怎么跟家里联系?大表弟在离家70里远的一个政府部门工作,家也成在了那里;小表弟工作的学校也离家50里之多。表弟说很少联系,偶尔有事就打电话到邻居家,让他们喊姑父姑母接电话。小表弟还说很方便,就一墙之隔,喊一声就行了。可是姑父姑母接个电话却要跑进跑出两个大院子才行,而且下雨、天黑了都不安全,毕竟他们都是60岁的人了。小表弟不再说什么,我也意识到自己一见面就给人家上课,沉默了下来。坐在地铁上,我心里却不由自主地想起,自己刚参加工作不久,就和哥哥一起凑了1300块钱给家里装了电话,为的是能经常打个电话回家,问问父母的身体好不好,汇报一下自己的工作和生活。那时电话费很贵,但不在父母身边的我和哥哥却时刻能知道父母的消息,知道母亲的肩周炎还痛不痛,家中的膏药还有没有;知道父亲的胃病又患了几次,知道他最近又喝醉了没有………

  表弟到广州的第二天,正是广州39摄氏度的高温天气,不便出门,我和表弟聊天。表弟给我谈起这次来广州的畅想:买双NIKE鞋、买个好一点的乒乓球拍……看着他兴致昂扬的样子,我想起那次回家拜访姑父姑母时,他们蹲在大棚下吃着馒头就咸菜的情景。我问,你给过父母钱吗?小表弟摇摇头,说,我一个月才900元钱。我说,你不知道吧?姑父姑母在街上卖一天菜才赚10块20块钱,有时候更少。小表弟说,我哥工作快8年了,没有给过家中一分钱,结婚时,还花去了一大笔。我来之前,妈又给我400块钱,让我买自行车。我打算这几年攒点钱,好好地游玩一下,结了婚就没有机会了。

  我听了,心里很不是滋味,我16岁离开家就没有花过父母的钱,不是没有机会,是我觉得他们已经够苦了,作为他们的儿子,应该让他们活得轻松一点。前些日子,我和哥哥刚刚给父母策划了一次旅行。我想告诉他的是,外出游玩的机会并不受结婚的影响,而报亲恩才是要趁早的,因为,父母只能陪我们走一段,晚了,可是真的没有机会了。

  那天下班后回到住处,表弟坐在那里看电视,木几上的方便袋里放着一堆荔枝。表弟说,表哥,你也吃几个吧,这是我在路边买的,比家里便宜多了。我说,我不能吃这个,前几天吃了几颗,上火了,到现在还没有好呢。

  表弟一边看电视,一边剥荔枝,一会儿就吃了个精光。他说,在县城时,我花8块钱买了一斤,只是想吃个新鲜,没想到,还没有尝出味来,就剥完了。我问,你有没有买过这些东西让父母尝个鲜呢?表弟摇摇头。我去做饭了,心里却想起以前在内地工作时的情景,那时,我每次回家,都要买一些乡下很难买的水果回家和父母一起吃,在回家的路上,我连尝一个都舍不得。而哥哥有战友从家里带土特产回来,哥哥也总是千方百计带回家和家人一起品尝。我想,我的父母是成功的,也是幸福的,他们在不知不觉中教会了我们懂得分享懂得报恩。

  表弟在广州玩了七天,每天下班后,我都赶往超市买菜,回家做饭,每一餐都要忙上一个多小时,而表弟坐在那儿上网,或者看电视,悠然自得的样子让我想起自己曾经寄人篱下的一段日子。那时,我刚到南方,住在一个老乡的宿舍。老乡每天上班后,我都会把他换下来的衣服给洗了,等他下班回到家里的时候,饭菜常常刚刚做好……我没有别的意思,我只是觉得我打搅了老乡,而他的工作又很忙,我只是力所能及地帮他做点事。那时,我22岁,而现在,25岁的表弟只会在吃饭的时候问,这里的鱼不贵吧?这里的鸡不贵吧?

  表弟还要求我帮他借一部好一点的数码相机,我想了想,拒绝了。借个相机并不难,我对面的同事就有,但我有个原则,不向别人借钱,不向别人借心爱之物。而数码相机,往往都是别人的至爱。感谢父母,他们教会我如何与人相处。

  那天晚上临睡前,表弟接了一个电话,说是有同学结婚。他对打电话来的同学说,你帮我封个200块钱的红包吧。挂了电话,他问我,200块少不少?我说不知道。

  最终表弟没有买NIKE,他说这里的NIKE和家中的一个价;他说看中了一副球拍,摸摸袋子里的钱,又舍不得买了……他说,买了那个800多块的球拍之后,怕没有了回家的路费……我听了,什么话也没有说,我本来想给他买点什么,但不知为什么,和他交流了几次之后,我就放弃了给他买东西买车票的打算。本来,对他的付出,我是不需要回报的,但我不能容忍,他对自己的父母连一点点的报恩之心都没有!养育了他二十多年的父母他都不放在心上,别人对他的付出又岂能让他铭记在心?

  终于,小表弟要离开广州了。在送他去车站的路上,他对我说,他这个暑假还可以领到1800块钱,准备到青岛或者黄山去玩一次……我想问一问他,什么时候给家里装个电话,但一想又咽回了肚里。父母是幸福的父母,儿子是成功的儿子,我怎么了我?在进站口,我看着表弟背着他来时的背包,提着我给他买的在车上吃的东西,走在人流中的背影,和来时一样的轻松。而在广州,却给我留下了一个新的发现,我想告诉我的父母,不必自责,你们是成功的。姑父姑母培养了两个只拥有文化的儿子,连最基本的传统美德都忽略了。随着教育的普及,大学生已经不是奇迹,而我所拥有的知识,却日益显得珍贵,你们给了我最好的教育,是最成功的父母。

      希望阅读完这篇文章的朋友可以在此留言.此文转载自读者

- 作者: 韩中元 2006年06月16日, 星期五 00:37  回复(13) |  引用(1) 加入博采

广告贴

- 作者: 韩中元 2011年01月12日, 星期三 23:18  回复(0) |  引用(0) 加入博采

凸多边形最优三角剖分
import java.lang.Math.*;
import java.io.*;
class a
{
    public double duobianxing[][]=new double[5][5];//存贮多边形
    public double t[][]=new double[5][5];
    public int s[][]=new int[5][5];
    public static void main(String args[])
    {
        a a1=new a();
        a1.setdoubianxing();
        a1.printduobianxing();
        a1.minWeightTrangulatian(5,a1.t,a1.s);
        a1.prints();
    }
    public void setdoubianxing()//设置多边形值,测试形状为梯形,左边为直角,右边为45度角,上边1,高1,底边为2
    {
        for (int i=0;i<5;i++)
        {
          //  doubianxiang[i][]=new double [5];
            for (int j=0;j<5;j++)
            {
                 duobianxing[i][j]=0;
            }
        }
        duobianxing[1][2]=1;
        duobianxing[2][1]=1;
        duobianxing[1][3]=Math.sqrt(3);
        duobianxing[3][1]=Math.sqrt(3);
        duobianxing[1][4]=1;
        duobianxing[4][1]=1;
        duobianxing[2][3]=Math.sqrt(2);
        duobianxing[3][2]=Math.sqrt(2);
        duobianxing[2][4]=Math.sqrt(2);
        duobianxing[4][2]=Math.sqrt(2);
        duobianxing[3][4]=2;
        duobianxing[4][3]=2;    
    }
    public double w(int i,int j,int k)//权重为三边之和
    {
        // System.out.println(duobianxing[i][j]+"        "+duobianxing[i][k]+"          "+duobianxing[j][k]);
        return duobianxing[i][j]+duobianxing[i][k]+duobianxing[j][k];
    }
    public  void minWeightTrangulatian(int n,double [][]t,int [][]s)//求最优三角剖分
   {
        for (int i=1;i<5;i++) t[i][i]=0;
        for (int r=2;r<=n;r++)
            for (int i=1;i<n-r+1;i++)
            {
                int j=i+r-1;  
                t[i][j]=t[i+1][j]+w(i-1,i,j);
                System.out.println("第一种可能:t("+(i+1)+"  ,"+j+")    + w("+(i-1)+","+i+","+j+")");
                 //   System.out.println(t[i+1][j]+"   "+w(i-1,i,j));
                s[i][j]=i;
                for (int k=i+1;k<i+r-1;k++)
                {
                    double u=t[i][k]+t[k+1][j]+w(i-1,k,j);
                    System.out.println("寻找其他可能"+i+","+k+"="+t[i][k]+"    "+(k+1)+","+k+"="+t[k+1][j]+"     "+(i-1)+"   "+k+"   "+j);
                    if (u<t[i][j])
                    {
                         System.out.println("                             "+t[i][j]+">    "+u);
                         t[i][j]=u;s[i][j]=k;
                    }
                 }
                 System.out.println(i+"  "+j);
                 printresult();
                 System.out.println("****************************************************************************");
              }
    }
    public void printresult()
    {
        System.out.println("--------------------");
        System.out.println("    1      2    3    4     ");
        System.out.println("");
        for (int i=1;i<5;i++)
        {
          //  doubianxiang[i][]=new double [5];
            System.out.print(i+"   ");
            for (int j=1;j<5;j++)
            {
                System.out.print(Math. floor(t[i][j]*10)/10+"   ");
            }
            System.out.println();
        }        
        System.out.println("--------------------");
    }
    public void printduobianxing()
    {
        System.out.println("--------------------");
        System.out.println("    1      2    3    4     ");
        System.out.println("");
        for (int i=1;i<5;i++)
        {
          //  doubianxiang[i][]=new double [5];
            System.out.print(i+"   ");
            for (int j=1;j<5;j++)
            {
                 System.out.print(Math. floor(duobianxing[i][j]*10)/10+"   ");
            }
            System.out.println();
         }        
         System.out.println("--------------------");
    }
   
    public void prints()
    {
        System.out.println("--------------------");
        System.out.println("    1      2    3    4     ");
        System.out.println("");
        for (int i=1;i<5;i++)
        {
          //  doubianxiang[i][]=new double [5];
            System.out.print(i+"   ");
            for (int j=1;j<5;j++)
            {
                 System.out.print(Math. floor(s[i][j]*10)/10+"   ");
            }
            System.out.println();
         }        
         System.out.println("--------------------");
    }
}

- 作者: 韩中元 2008年10月5日, 星期日 15:41  回复(0) |  引用(0) 加入博采

操作系统第七章选择题第十题的解释
最近这个博客无法发表文章,晚了很多日子,请同学们见谅。

假定盘块的大小为1KB,硬盘的大小为100MB,采用显示链接分配方式时,其FAT需要占用多少存储空间.

FAT的每个表项对应于磁盘的一个盘块,其中用来存放分配给文件的下一个盘块的块号,故FAT的表项数目由物理盘块数决定,而表项的长度则由磁盘系统的最 大盘块号决定(即它必须能存放最大的盘块号).为了地址转换的方便,FAT表项的长度通常取半个字节的整数倍,所以必要时还必须由最大盘块号获得的FAT 表项长度作一些调整.由题意可知,该硬盘共有100K个盘块,故FAT中共有100K个表项;如果盘块从1开始编号,为了能保存最大的盘块号100K,该 FAT表项最少需要17位,将它扩展为半个字节的整数倍后,可知每个FAT表项需20位,即2.5个字节.因此,FAT需占用的存储空间的大小为:
2.5×100K=250KB

- 作者: 韩中元 2008年07月8日, 星期二 18:32  回复(0) |  引用(0) 加入博采

操作系统第七章选择题第十题的解释
最近这个博客无法发表文章,晚了很多日子,请同学们见谅。

假定盘块的大小为1KB,硬盘的大小为100MB,采用显示链接分配方式时,其FAT需要占用多少存储空间.

FAT的每个表项对应于磁盘的一个盘块,其中用来存放分配给文件的下一个盘块的块号,故FAT的表项数目由物理盘块数决定,而表项的长度则由磁盘系统的最 大盘块号决定(即它必须能存放最大的盘块号).为了地址转换的方便,FAT表项的长度通常取半个字节的整数倍,所以必要时还必须由最大盘块号获得的FAT 表项长度作一些调整.由题意可知,该硬盘共有100K个盘块,故FAT中共有100K个表项;如果盘块从1开始编号,为了能保存最大的盘块号100K,该 FAT表项最少需要17位,将它扩展为半个字节的整数倍后,可知每个FAT表项需20位,即2.5个字节.因此,FAT需占用的存储空间的大小为:
2.5×100K=250KB

- 作者: 韩中元 2008年07月8日, 星期二 18:30  回复(1) |  引用(0) 加入博采

毕业论文进度安排
按照这个时间更新任务书和开题报告的进度安排:
2008.3.1 -2008.3.15 查找资料,撰写开题报告。
2008.3.16-2008.4.1  系统分析。
2008.4.2-2008.4.20 系统设计、建立数据库。
2008.4.21-2008.6.1  系统实现、完成相应功能,进行系统测试、完善系统。
2008.6.1-2008.6.20 撰写毕业设计说明书,准备答辩。

- 作者: 韩中元 2008年06月20日, 星期五 13:19  回复(0) |  引用(0) 加入博采

数据库学习笔记3-存储过程简单语法
http://bbs.database.ccidnet.com/simple/index.php?t558051.html
创建存储过程,存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。 [8:~o9lR  
可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 @)! 5&5r*H  
也可以创建在 Microsoft® SQL Server™ 启动时自动运行的存储过程。 BXZsl3p0iX  
语法CREATE PROC [ EDURE ] procedure_name [ ; number ] R(k'8:$!t  
    [ { @parameter data_type }[ VARYING ] [ = default ] [ OUTPUT ]] [ ,...n ] Wt./a:]:2  
N td]K}  
[ WITH jn$!F@}  
    { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] m^+5n{UB;  
yR[ p41p  
[ FOR REPLICATION ] }VS|~.x-O  
w$@:Ss[d  
AS sql_statement [ ...n ] |Em0k&&B[k  
参数procedure_name _H7)fJ=  
新存储过程的名称。过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。 r*TY|`oh  
要创建局部临时过程,可以在 procedure_name 前面加一个编号符 (#procedure_name),要创建全局临时过程,可以在 procedure_name 前面加两个编号符 (##procedure_name)。完整的名称(包括 # 或 ##)不能超过 128 个字符。指定过程所有者的名称是可选的。 fIy] Ie21  
;number \Y7`jq2me  
是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应在 procedure_name 前后使用适当的定界符。 sK}m}Cb  
@parameter tlCu)?8E  
过程中的参数。在 CREATE PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2.100 个参数。 yjMX #c  
使用 @ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。 mUIM?In=8  
data_type Rtt/aZo"  
参数的数据类型。所有数据类型(包括 textntextimage)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。 p0zT 7'  
说明  对于可以是 cursor 数据类型的输出参数,没有最大数目的限制。 NwI]?3^Hx  
VARYING zV,4 {  
指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。 |2"BtuZ_  
default }7DEOr$  
参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。 $Z I=nh*aY  
OUTPUT a8YC^[  
表明参数是返回参数。该选项的值可以返回给 EXEC[UTE]。使用 OUTPUT 参数可将信息返回给调用过程。Textntextimage 参数可用作 OUTPUT 参数。使用 OUTPUT 关键字的输出参数可以是游标占位符。 X*?em{J/E4  
n RZk\T e)K  
表示最多可以指定 2.100 个参数的占位符。 :pt2D`  
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION} = )?qu  
RECOMPILE 表明 SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。在使用非典型值或临时值而不希望覆盖缓存在内存中的执行计划时,请使用 RECOMPILE 选项。 99;5bQh  
ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 语句文本的条目。使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布。 OT_x7F  
V:q|ik.Z  
说明  在升级过程中,SQL Server 利用存储在 syscomments 中的加密注释来重新创建加密过程。 QEYnn8U  
FOR REPLICATION !=y*VI>f  
指定不能在订阅服务器上执行为复制创建的存储过程。.使用 FOR REPLICATION 选项创建的存储过程可用作存储过程筛选,且只能在复制过程中执行。本选项不能和 WITH RECOMPILE 选项一起使用。 z8M:VbI  
AS fF]v1,U  
指定过程要执行的操作。 ~rfEhn4  
sql_statement F5vcss%P  
过程中要包含的任意数目和类型的 Transact-SQL 语句。但有一些限制。 H"O>1ig$  
n z{ B'Q`(,  
是表示此过程可以包含多条 Transact-SQL 语句的占位符。 Q0f[<]1oN  
注释存储过程的最大大小为 128 MB。 {|Wt<u  
用户定义的存储过程只能在当前数据库中创建(临时过程除外,临时过程总是在 tempdb 中创建)。在单个批处理中,CREATE PROCEDURE 语句不能与其它 Transact-SQL 语句组合使用。 ] P 3#y  
默认情况下,参数可为空。如果传递 NULL 参数值并且该参数在 CREATE 或 ALTER TABLE 语句中使用,而该语句中引用的列又不允许使用 NULL,则 SQL Server 会产生一条错误信息。为了防止向不允许使用 NULL 的列传递 NULL 参数值,应向过程中添加编程逻辑或为该列使用默认值(使用 CREATE 或 ALTER TABLE 的 DEFAULT 关键字)。 Qr?}/o!  
建议在存储过程的任何 CREATE TABLE 或 ALTER TABLE 语句中都为每列显式指定 NULL 或 NOT NULL,例如在创建临时表时。ANSI_DFLT_ON 和 ANSI_DFLT_OFF 选项控制 SQL Server 为列指派 NULL 或 NOT NULL 特性的 方式(如果在 CREATE TABLE 或 ALTER TABLE 语句中没有指定的话)。如果某个连接执行的存储过程对这些选项的设置与创建该过程的连接的设置不同,则为第二个连接创建的表列可能会有不同的为空性,并且 表现出不同的行为方式。如果为每个列显式声明了 NULL 或 NOT NULL,那么将对所有执行该存储过程的连接使用相同的为空性创建临时表。 2wQ1_m`J  
在创建或更改存储过程时,SQL Server 将保存 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 的设置。执行存储过程时,将使用这些原始设置。因此,所有客户端会话的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置在执行存储过程时都将被忽略。在存储过程中出现的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 语句不影响存储过程的功能。 [20?CZ  
其它 SET 选项(例如 SET ARITHABORT、SET ANSI_WARNINGS 或 SET ANSI_PADDINGS)在创建或更改存储过程时不保存。如果存储过程的逻辑取决于特定的设置,应在过程开头添加一条 SET 语句,以确保设置正确。存储过程中执行 SET 语句时,该设置只在存储过程完成之前有效。之后,设置将恢复为调用存储过程时的值。这使个别的客户端可以设置所需的选项,而不会影响存储过程的逻辑

- 作者: 韩中元 2008年05月28日, 星期三 16:42  回复(0) |  引用(0) 加入博采

数据库学习笔记2-存储过程默认参数解释
http://hi.baidu.com/mallva/blog/item/1c86ec6012864347eaf8f838.html

在一些存储或新建一个存储过程,我们会看到如下形式的文本:

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

...
...
...


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


下面来对它们做做解释:

SET QUOTED_IDENTIFIER
使 Microsoft® SQL Server™ 遵从关于引号分隔标识符和文字字符串的 SQL-92 规则。由双引号分隔的标识符可以是 Transact-SQL 保留关键字,或者可以包含 Transact-SQL 标识符语法规则通常不允许的字符。

语法
SET QUOTED_IDENTIFIER { ON | OFF }

注释
当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须遵守所有 Transact-SQL 标识符规则。有关更多信息,请参见使用标识符。文字可以由单引号或双引号分隔。

当 SET QUOTED_IDENTIFIER 为 ON 时,由双引号分隔的所有字符串都被解释为对象标识符。因此,加引号的标识符不必遵守 Transact-SQL 标识符规则。它们可以是保留关键字,并且可以包含 Transact-SQL 标识符中通常不允许的字符。不能使用双引号分隔文字字符串表达式,而必须用单引号括住文字字符串。如果单引号 (') 是文字字符串的一部分,则可以由两个单引号 ('') 表示。当对数据库中的对象名使用保留关键字时,SET QUOTED_IDENTIFIER 必须为 ON。

当 SET QUOTED_IDENTIFIER 为 OFF(默认值)时,表达式中的文字字符串可以由单引号或双引号分隔。如果文字字符串由双引号分隔,则可以在字符串中包含嵌入式单引号,如省略号。

当在计算列或索引视图上创建或操作索引时,SET QUOTED_IDENTIFIER 必须为 ON。如果 SET QUOTED_IDENTIFIER 为 OFF,则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息,请参见 SET 中的"使用 SET 语句时的注意事项"。

在进行连接时,SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序自动将 QUOTED_IDENTIFIER 设置为 ON。这可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性中进行配置。对来自 DB-Library 应用程序的连接,SET QUOTED_IDENTIFIER 设置默认为 OFF。

当创建存储过程时,将捕获 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置,用于该存储过程的后续调用。

当在存储过程内执行 SET QUOTED_IDENTIFIER 时,其设置不更改。

当 SET ANSI_DEFAULTS 为 ON时,将启用 SET QUOTED_IDENTIFIER。

SET QUOTED_IDENTIFIER 还与 sp_dboption 的 quoted identifier 设置相对应。如果 SET QUOTED_IDENTIFIER 为 OFF,则 SQL Server 使用 sp_dboption 的 quoted identifier 设置。有关数据库设置的更多信息,请参见 sp_dboption 和设置数据库选项。

SET QUOTED_IDENTIFIER 是在分析时进行设置的。在分析时进行设置意味着:SET 语句只要出现在批处理或存储过程中即生效,与代码执行实际上是否到达该点无关;并且 SET 语句在任何语句执行之前生效。


比较空值时必须小心。比较行为取决于选项 SET ANSI_NULLS 的设置。

当 SET ANSI_NULLS 为 ON 时,如果比较中有一个或多个表达式为 NULL,则既不输出 TRUE 也不输出 FALSE,而是输出 UNKNOWN。这是因为,未知值不能与其它任何值进行逻辑比较。这种情况发生在一个表达式与 NULL 单词进行比较,或者两个表达式相比,而其中一个表达式取值为 NULL 时。例如,当 ANSI_NULLS 为 ON 时,以下比较总是输出 UNKNOWN:

ytd_sales > NULL

只要变量包含 NULL 值,下列比较也输出 UNKNOWN:

ytd_sales > @MyVariable

使用 IS NULL 或 IS NOT NULL 子句测试 NULL 值。这将增加 WHERE 子句的复杂性。例如,表 Northwind Customers 中的 Region 列允许空值。如果使用 SELECT 语句不仅测试其它值还测试空值,则必须包括 IS NULL 子句:

SELECT CustomerID, CompanyName, Region
FROM Northwind.dbo.Customers
WHERE Region IN ('WA', 'SP', 'BC')
OR Region IS NULL

Transact-SQL 支持在与空值进行比较时,允许比较运算符返回 TRUE 或 FALSE。通过设置 ANSI_NULLS OFF 可将该选项激活。当 ANSI_NULLS 为 OFF 时,如果 ColumnA 包含空值,则比较操作 ColumnA = NULL 返回 TRUE;如果 ColumnA 除包含 NULL 外还包含某些值,则比较操作返回 FALSE。此外,两个都取空值的表达式的比较也输出 TRUE。当 ANSI_NULLS 设置为 OFF 时,SELECT 语句将返回 Customer 表中所有 Region 为空值的行:

SELECT CustomerID, CompanyName, Region
FROM Northwind.dbo.Customers
WHERE Region = NULL

不论 ANSI_NULLS 如何设置,对于 ORDER BY、GROUP BY 和 DISTINCT 关键字空值总被视为是相等的。此外,允许 NULL 的唯一索引或 UNIQUE 约束只能包含一个带有 NULL 键值的行。后面带有 NULL 的行将被拒绝。属于主键的任何列中都不能含有 NULL。

涉及 NULL 的计算均取值为 NULL,这是因为只要有一个因子为未知,结果肯定是 UNKNOWN。例如,如果 column1 为 NULL,则 column1 + 1 取值为 NULL。

当搜索的列中包括定义为允许空值的列时,可以通过下列模式查找数据库中的空值或非空值:

WHERE column_name IS [NOT] NULL

- 作者: 韩中元 2008年05月28日, 星期三 16:40  回复(0) |  引用(0) 加入博采

数据库学习笔记1-无法修改表结构

新装的SQL SERVER 2008,打开原来SQL SERVER 2008中建立的表,现在想增加一些字段,在保存时提示错误,无法保存。

刚开始以为是SQL SERVER 2008与2005的不兼容,后来发现在SQL SERVER 2008中新建的表也存在无法修改表结构,也就是无法修改字段名和增加字段名。

提示是:不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改”选项。


启动MSSQL SERVER 2008,选择菜单 工具-〉选项-〉左侧有个 设计器-〉表设计器和数据库设计器。然后去掉“ 阻止保存要求重新创建表的更改”前面的勾。重新启动MSSQL SERVER 2008即可。

- 作者: 韩中元 2008年05月28日, 星期三 16:38  回复(0) |  引用(0) 加入博采

java下使用usb设备

转载至http://blog.csdn.net/djsl6071/category/296859.aspx

Java libusb / libusb-win32 封装包

概要

Java libusb 封装包是对libsub和libusb-win32 USB library的Jave封装.

  • libusb 旨在创建一个平台无关性的、面向应用程序级别的、访问USB设备的类库,基于C/C++的实现,方便地通过第三方接口扩展到不同的操作系统上,作为开源的类库,可从http://libusb.sourceforge.net/获取相关的信息,目前包括Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X等。

  • libusb-win32 是libusb在Windows操作系统上的实现。 该版本的类库允许WIndows环境中的用户无需在内核模式下(需要借助DDK和SDK,并可通过第三方开发工具DriverStudio等生成框架开发,核心代码在Visual C++ 6.0中开发)编写驱动即可以让应用程序访问USB设备的通用解决方案,可从http://libusb-win32.sourceforge.net/上获取相关的信息。

     

    已知的Java libusb 封装包可以在Linux和Windows上使用, 而由于libusb和Java(这两个方面都在跨平台上具备优势)的支持必然可以推广到任意的操作系统上。

     

实现

Java libusb 封装包基于Java Native Interface(Java本地接口,即JNI)技术通过调用共享库(Windows下Dynamic Link Library,dll)及Java类文件访问libusb/libusb-win32。类ch.ntb.usb.LibusbJava 装载了共享库并提供了访问libusb的本地接口。

在libusb中, 总线结构(包含设备(device),设置(configuration),接口(interface),和端点(endpoints))是以C语言的struct组织的. 对每个struct实例化一个Java对象(命名为Usb_xxx),同时把相应的信息保存到Java对象中. 这一过程通过调用LibusbJava.usb_get_busses()来完成。此后,总线和附属设备的信息可以从一个树型结构的Java对象中得到。

一个简单的类对象Device即可展示一个USB设备并相当容易地进行读写操作,错误(Errors)和超时(Timeouts)将会抛出异常。

注意当前该类库是BETA版本! 它已经在我们的两个程序中得到了应用:编程与调试接口(Programming and Debugging Interface (Cypress FX2)) 、实验板(Experimental Board (AVR AT90USB1287)) ,这两个应用都使用了批传输(bulk transfers) 和中断传输(Interrupt transfers)并能正常地在测试外设上工作。

演示

UsbView

UsbView 为现有的USB总线提供了一个树型结构视图。它展现了包括字符描述符在内的不同的描述符参数。 UsbView基于Swing实现因而只依赖于Java基本类库(standard java libraries)。

当你右键一个接口描述符(interface descriptor )时,你可以打开另一个应用程序„USB TestApp“ ,它将显示设备描述符的属性值。

USB TestApp

这个简单的USB测试程序允许块读写和中断读写数据到设备中。它可以通过„UsbView“或自身的main方法调用。

实例

第一个例子(LogBus) 使用USB共享库直接初始化libusb, 获得表示相关设备和描述符的对象树并把它打印到标准输出上去。

第二个例子 (ReadWrite) 示范了如何获得设备实例,使用ch.ntb.usb.Device 类读写设备。这个类隐藏了libusb 的方法并实现了出错时的异常处理。

API

在线的Java API 文档可以在此处获得here.

安装

Windows

手动安装

安装libusb-win32 并使用包含在libusb-win32\bin中的testlibusb-win.exe 测试你的安装. 你必须安装一个定制的设备驱动文件(inf-file)以使得libusb-win32能够检测到你的设备(参看 „Device Installation“ ).

„Binaries and Source“中下载jar和 Dll 文件 。

Inf USB Library 安装程序(自动安装)

另一种安装方法是执行提供的安装程序为用户自己的设备安装USB library (查看„Download and Installation“ ) 。它已经包含了libusb-win32文件,以及Java封装包中的dll文件和三个我们将会使用到的设备驱动程序。

安装过程大体上执行了以下步骤: 

  • 安装libusb-win32 (CVS build 20060920)

    • 复制libusb0.dll 到windows\system32\

    • 复制libusb0.sys 到windows\system32\drivers\

  • 安装the Java wrapper dll

    • 复制LibusbJava.dll 到windows\system32\

  • 为我们的USB设备安装三个驱动程序(.inf-files)

  • 创建一个卸载程序及一个包含inf和dll文件的驱动文件夹。 

安装程序将在开始时询问你是否希望更改安装目录。

Device Installation(设备安装)

如上所述,要使用libusb-win32你必须先为你的设备安装设备驱动(inf文件)。以下两种方法(对应于上面的手动安装和自动安装)可以创建这样一个文件。

手动安装时,名为inf-wizard.exe 的程序可以在libusb-win32\bin文件夹下找到。它将使用你提供的设备信息产生设备驱动文件(inf和cat文件)。当Windows 询问你插入的设备的驱动时,定位到相应的inf和cat文件上。它将安装使设备能在libusb上正常工作所需要的所有文件。然而,LibusbJava.dll 就需要你自己复制到windows\system32\(见下一部分).

自动安装时也可以使用另一种方式,修改/driver/ 文件夹下已有的inf文件,它是由Inf USB Library 安装程序生成的。你需要在 [Devices] 部分中修改厂商和产品序号。例如"My Devicename"=LIBUSB_DEV, USB\VID_1234&PID_6789 表示厂商序号为0x1234,产品序号为0x6789。自动安装同时将libusb的所以文件和LibusbJava.dll 安装到了Windows\System32 目录下。

要验证安装已成功可以运行libusb-win32\bin文件夹下的testlibusb-win.exe 或运行 UsbView 程序,你也可以在Windows的设备管理器中找到已安装的设备。

 

Linux

libusb需要被安装并能运行,确保你拥有足够的权限以访问设备(查看this post). 要执行原文件中包含的build.xml 的编译等任务,你就需要先安装Ant

从这里获得libusb的Linux下版本源代码并运行 (查看„Binaries and Source“ )

# ant linux
在LibusbJava 目录下运行,这将创建名为libusbJava.so.x.x.x 的共享库,其中x.x.x为当前版本好,并创建一个标识链接到该库:
# ln -s libusbJava.so.x.x.x libusbJava.so
注意该库文件须在java.library.path 的路径下 (查看 JNI-Howto 以获取更多信息).

 

Binaries and Source(二进制及源代码文件)

你可以在此获得 Java jar文件here。共享库(Windows Dll)可以在此处下载here

Java和C++的源文件可以在Subversion repository 中匿名获取https://svn.ntb.ch/svninf/ch.ntb.usb/.

License(许可证)

Java libusb-win32封装包是基于GNU Lesser General Public License (LGPL)的。你可以在他们的页面上查看libusb-win32相关的许可证信息their page.

Feedback and Support(反馈和支持)

任何的反馈和支持请mail 给Simon Pertschy .

Links(链接)

  • libusb-win32, 支持的平台: Win98SE, WinME, Win2k, WinXP

  • libusb, 支持的平台: Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X

Refence: http://inf.ntb.ch/infoportal/help/index.jsp?topic=/ch.ntb.infoportal/projects_usbInterface.html

http://libusbjava.sourceforge.net/wp

  以及之前发过的本文的原文,另外同一系列的还有两篇未读,也一并发了。

 

译者注:在网上搜了很久,一直想找WIndows下的Java的USB通用设备驱动API,之前找过jUSB和JSR80(javax.usb)然而这两个的可用版本还只提供了Linux下的实现,困惑了,难道要回归DDK,回归win32 API,本人对设备驱动编程和win32可谓一窍不通,也只能用OOP编几个简单的小程序,于是盯上了C#,原想都是M$的东西,你总该会照顾一点吧,然而总还只有一个开源的实现#libusb(Sharplibusb)。其实无论哪种方法,本质都是调用dll以实现动态调用方法。于是,Visual Studio 2005都下好了,也准备暂时把Java搁下的时候,想多了解下这个libusb,不知它提供了怎么样的解决方案,结果,就想去搜搜看libusb在Java上的扩展,说来也气人,之前用baidu,google怎么也搜不到,一输libusb java,就冒出了一篇文章用java实现在Windows下的USB API,看了它才恍然大悟,原来还有这个东东啊。慨叹不得法,无以入其门!

原来的是英文版本的,一时心血来潮,便翻译了一下,第一次作翻译工作,心情那个激动啊,所以难免有生硬和不当之处,又对这方面的了解浅显,有不懂装懂的地方,就请大家看它的原文吧,出错的地方也请指出,我会不断修改的。

至于Java libusb-win32,原文的安装方法多半让人看了头疼,我简单复述一下,其实都已经做成独立的安装程序了,下那个来装了就行,之后的步骤也容易。我自己为了能懂得原理以便开发,舍近求远,自己手动安装了下,受益匪浅啊。

首先,下载ch.ntb.usb.jar文件和LibusbJava.dll文件,还有就是libusb-win32-device-bin-0.1.12.1.tar.gz,这三个就是所需的全部了,解压最后者,安装用到的只是bin文件夹里的东西,复制其中的libusb0.dll 到windows\system32\ ,复制libusb0.sys 到windows\system32\drivers\,x64的用这两个文件的x64版本,inf-wizard.exe文件之后还有用处,留意一下。这样libusb-win32就已安装完毕,使用testlibusb-win.exe测试安装成功,可以显示一些信息;

接下来安装Java对libusb-win32的封装包,其实要安装的只是一个dll文件,让jni调用的功能而已,复制LibusbJava.dll 到windows\system32\,这样就好了。

那么,接下来如何使用呢?插入你要使用的USB设备,先不管Windows提示你安装硬件驱动程序的信息(放一边,我们后面再填),运行之前提到的inf-wizard.exe文件,如果它无法帮你识别得到的话才要自己输入厂商序号和产品序号,一步步操作下去就得到了inf和cat文件,这就是你这个设备的驱动了,保管好,在通过刚才Windows提示的安装硬件驱动指向这些文件,或者自己从设备管理器中安装设备的驱动为这些文件,这样,你自己的USB设备的驱动就安装好了,可以在设备管理器中查看到。这就是手动安装的过程,自动安装的话有它更简单的步骤,也有它另外生成dll和cat的方法,暂时没有考虑研究。

接着,用java运行jar中的ch.ntb.usb.usbView.usbView,它使用main方法,就可以得到如图示中的显示信息,再右键描述符启动usbTestApp,接下来的操作就要读者自己研究了,建议下它提供的svn源代码以及看它的在线API doc。

后面讲一些开发中的心得,本人目前尝试开发Java桌面应用程序,便学边用相关的api,包括打印,串口通信,USB通信,波形绘图,国际化和IO读写等,感觉受益很多,同时也很吃力,Java在桌面开发中并非强项,尽管6.0多了一些简单的东西,如任务栏图标,启动加载图片等,Java要想在桌面上分一杯羹,如一篇文章中说的,要努力实现核心类库的充实,使开发者尽量少用到jni实现,而对开源社区的吸纳和导向作用,也正依赖于标准APIs的制定。桌面开发中用到的IDE主要是Netbeans,本人同时用5.5和6的M10,感觉6改进很大,隐隐已有与Eclipse并驾齐驱之势,集成化和组件化是两个不同的趋势,撇开基本编译调试中使用到的智能化不讲(Netbeans 6 提供不少神奇的功能),两种趋势走到极端都无法成功,相互的借鉴和寻找恰如其分的平衡点才是一个IDE需要努力的地方。

尽管libusb API已经找到,但是否能成功地运用到项目中,针对特殊的硬件芯片所要调整的参数和所要适应的读写速率仍然很没底,本人不放弃可能使用WDM自行开发USB驱动的可能性(尽管就本人的实力会是impossible mission),同样的,未纳入标准类库的javax.comm是否适应于实际的串口通信产品(最近找到了rxtx),也仍是未知数,即便是java,在与.Net等其他技术的混战能否脱颖而出,得到广泛的使用和确立其OOP Language  No.1的地位,仍然是很不明确的:)学软件很累啊,前几天有空还看了点ruby入门,不知什么时候才有空看ajax,你说学C++的好点吧,可是我偏偏就喜欢java啊...

libusb-win32临时卸载方法(为了能用其他旧版本的驱动,需要先卸载,后来发现其实在任务管理器中卸载然后马上安装就足够了,下面的方法也不一定总是有效。)

以系统管理员身份进去系统

在设备管理器中卸载设备驱动

删除
C:\WINDOWS\system32\libusb0.dll
C:\WINDOWS\system32\drivers\libusb0.sys

删除注册表中项
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{EB781AAF-9C70-4523-A5DF-642A87ECA567}
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\libusb0
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Class\{EB781AAF-9C70-4523-A5DF-642A87ECA567}
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\USB\Vid_5345&Pid_1234
上一项可能不太好删,改一下权限再试试
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\libusb0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{EB781AAF-9C70-4523-A5DF-642A87ECA567}
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\libusb0

马上装新软件的设备驱动

重启,即可识别新设备驱动



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1554815

- 作者: 韩中元 2008年04月17日, 星期四 19:14  回复(2) |  引用(0) 加入博采

页面算法最近最久未使用c语言实现

    main ()
    {
        int cunchufangwenyemian[4];/*存储访问的页面*/
        int cunchujisuanguocheng[3][4];/*存储计算过程;*/
        int cunchushifoumingzhong[4];/*存储是否被命中*/
        int lie,hang;/*循环变量列,行*/
        int shifoumingzhong;/*在前一列的位置,没有则为0;*/
        int wenmenyemiangeshu=4;/*访问页面的个数*/
        int shuzi;/*某个数字*/
        int tongjigeshu[3]; /*计算统计每个位置的个数*/
        int queyecishu[3]; /*计算统计缺页次数*/
       /*第一步,初始化*/
      /*输入访问的页面,存到存储访问的页面的数组中*/

        for (lie=0;lie<4;lie++)   
        {
            printf("\n请输入第%d个页面:",lie);
            scanf("%d",&cunchufangwenyemian[lie]);
        }

       /*初始化计算过程数组*/
       for (lie=0;lie<4;lie++)
       {
            for(hang=0;hang<3;hang++)
            {
                 cunchujisuanguocheng[hang][lie]=-1;
            }
      }

      /*初始化是否没有命中的数组*/    
       for (lie=0;lie<4;lie++)
       {
            cunchushifoumingzhong[lie]=0;
       }
       /*初始化统计个数*/
       for (shuzi=0;shuzi<4;shuzi++)
         {
              tongjigeshu[shuzi]=0;
       /*初始化缺页次数*/    
        }
        for (shuzi=0;shuzi<4;shuzi++)
         {
              queyecishu[shuzi]=0;
           
        }
        /*第二步,计算*/

     /*察看是否命中*/     
     for     (wenmenyemiangeshu=0;wenmenyemiangeshu<4;wenmenyemiangeshu++)
     {
     /*对于某一列进行处理*/
          lie=wenmenyemiangeshu;
          if (lie==0) /*如果为第一列*/
          {
                cunchujisuanguocheng[0][lie]= cunchufangwenyemian[lie];  /*将页面落下来*/
               cunchushifoumingzhong[0]=0;                              /*是否命中为0,不命中*/
          } else
          {/*如果不为第一列*/
                shifoumingzhong=0;   /*假设没命中*/
                for(hang=0;hang<3;hang++)
                {
                    if (     cunchujisuanguocheng[hang][lie-1]== cunchufangwenyemian[lie])
                    {
                        shifoumingzhong=hang+1;/*如果相同,则是否命中为命中的位置*/
                    }
                }
                 cunchushifoumingzhong[lie]=shifoumingzhong;/*存储命中位置*/
          }
          if (lie!=0)
          {
               if ((shifoumingzhong!=0))/*是否命中 */
               {/*如果命中,则不变*/
                     for(hang=shifoumingzhong;hang<3;hang++)
                     {
                        cunchujisuanguocheng[hang][lie]=cunchujisuanguocheng[hang][lie-1];/*将上一列复制过来*/
                     }
                     for(hang=shifoumingzhong;hang>1;hang--)
                     {
                       cunchujisuanguocheng[hang][lie]= cunchujisuanguocheng[hang-1][lie-1];/*将上一列逐个下移复制过来*/
                    }
                    cunchujisuanguocheng[0][lie]=cunchufangwenyemian[lie];/*最上面的等于新进来的*/
             
              } else
              {/*如果没有命中,则向下移一位,新的进来*/
                    for(hang=2;hang>0;hang--)
                     {
                       cunchujisuanguocheng[hang][lie]= cunchujisuanguocheng[hang-1][lie-1];/*将上一列逐个下移复制过来*/
                    }
                    cunchujisuanguocheng[0][lie]=cunchufangwenyemian[lie];/*最上面的等于新进来的*/
              }
         }
     }
     /*计算统计个数C*/
      for (lie=0;lie<4;lie++)
     {
         for (shuzi=0;shuzi<4;shuzi++)
         {
             if (cunchushifoumingzhong[lie]==shuzi)
             {
            tongjigeshu[shuzi]++;
             }
        }
     }
     /*计算缺页次数F*/
    queyecishu[3]=tongjigeshu[0];
    for (shuzi=2;shuzi>0;shuzi--)
    {
       queyecishu[shuzi]=tongjigeshu[shuzi+1]+queyecishu[shuzi+1];
    }  
   
   
   
     /*第三步,输出*/ /*输出访问序列*/
     for (lie=0;lie<4;lie++)
     {
        printf("%d  ",cunchufangwenyemian[lie]);
     }
         printf("\n");
    
     /*输出计算过程*/
     for (hang=0;hang<3;hang++)
     {
        for(lie=0;lie<4;lie++)
        {
            printf("%d   ",cunchujisuanguocheng[hang][lie]);
        }
            printf("\n");
     } /*输出是否命中*/
     for (lie=0;lie<4;lie++)
     {
        printf("%d   ",cunchushifoumingzhong[lie]);
     }

     /*输出统计个数C*/
     for (shuzi=0;shuzi<4;shuzi++)
     {
 printf("\n C%d=  %d   \n",shuzi,tongjigeshu[shuzi]);
     }
     /*输出缺页统计*/
     for (shuzi=1;shuzi<4;shuzi++)
     {
        printf("F%d=  %d   \n",shuzi,queyecishu[shuzi]);
     }
    }
 

- 作者: 韩中元 2007年11月14日, 星期三 01:43  回复(0) |  引用(0) 加入博采

先进先出页面调度算法的c语言实现

    main ()
    {
        int cunchufangwenyemian[4];/*存储访问的页面*/
        int cunchujisuanguocheng[3][4];/*存储计算过程;*/
        int cunchushifoumingzhong[4];/*存储是否被命中*/
        int lie,hang;/*循环变量列,行*/
        int shifoumingzhong;/*在前一列的位置,没有则为0;*/
        int wenmenyemiangeshu=4;/*访问页面的个数*/

       /*第一步,初始化*/
      /*输入访问的页面,存到存储访问的页面的数组中*/

        for (lie=0;lie<4;lie++)   
        {
            printf("\n请输入第%d个页面:",lie);
            scanf("%d",&cunchufangwenyemian[lie]);
        }

       /*初始化计算过程数组*/
       for (lie=0;lie<4;lie++)
       {
            for(hang=0;hang<3;hang++)
            {
                 cunchujisuanguocheng[hang][lie]=-1;
            }
      }

      /*初始化是否没有命中的数组*/    
       for (lie=0;lie<4;lie++)
       {
            cunchushifoumingzhong[lie]=0;
       }

        /*第二步,计算*/

     /*察看是否命中*/     
     for     (wenmenyemiangeshu=0;wenmenyemiangeshu<4;wenmenyemiangeshu++)
     {
     /*对于某一列进行处理*/
          lie=wenmenyemiangeshu;
          if (lie==0) /*如果为第一列*/
          {
                cunchujisuanguocheng[0][lie]= cunchufangwenyemian[lie];  /*将页面落下来*/
               cunchushifoumingzhong[0]=0;                        /*是否命中为0,不命中*/
          } else
          {/*如果不为第一列*/
                shifoumingzhong=0;   /*假设没命中*/
                for(hang=0;hang<3;hang++)
                {
                    if (     cunchujisuanguocheng[hang][lie-1]== cunchufangwenyemian[lie])
                    {
                        shifoumingzhong=hang+1;/*如果相同,则是否命中为命中的位置*/
                    }
                }
                 cunchushifoumingzhong[lie]=shifoumingzhong;/*存储命中位置*/
          }
          if (lie!=0)
          {
               if ((shifoumingzhong!=0))/*是否命中 */
               {/*如果命中,则不变*/
                     for(hang=0;hang<3;hang++)
                     {
                        cunchujisuanguocheng[hang][lie]=cunchujisuanguocheng[hang][lie-1];/*将上一列复制过来*/
                     }
              } else
              {/*如果没有命中,则向下移一位,新的进来*/
                    for(hang=2;hang>0;hang--)
                     {
                       cunchujisuanguocheng[hang][lie]= cunchujisuanguocheng[hang-1][lie-1];/*将上一列逐个下移复制过来*/
                    }
                    cunchujisuanguocheng[0][lie]=cunchufangwenyemian[lie];/*最上面的等于新进来的*/
              }
         }
     }

   
     /*第三步,输出*/ /*输出访问序列*/
     for (lie=0;lie<4;lie++)
     {
        printf("%d  ",cunchufangwenyemian[lie]);
     }
         printf("\n"); /*输出计算过程*/
     for (hang=0;hang<3;hang++)
     {
        for(lie=0;lie<4;lie++)
        {
            printf("%d   ",cunchujisuanguocheng[hang][lie]);
        }
            printf("\n");
     } /*输出是否命中*/
     for (lie=0;lie<4;lie++)
     {
        printf("%d   ",cunchushifoumingzhong[lie]);
     }

    }

- 作者: 韩中元 2007年11月12日, 星期一 09:51  回复(1) |  引用(0) 加入博采

linux和unix以及网络相关的电子书
新手入门
Linux新手管理员手册RedHat Linux安装及使用指南RedHat安装指南
全程指导Linux下JAVA环境配置Linux 安装与使用红帽企业 Linux 3(安全、安装、系统)指南
Linux完全安装DIY--进阶安装与设置Sendmail安装和操作向导SCO5企业版安装手册
Red Hat Linux 5.1安装指南RedHat9.0 Xwindows安装指南Linux安装与配置简明手册
Linux网站建设技术指南Linux 24学时教程最新Linux命令大全
Linux命令集合Linux命令参考大全(英)Linux命令参考手册
Linux命令整理:磁盘管理Linux9从入门到精通Red Hat Linux入门指南
Linux编程入门之 C 语言环境Unix操作入门Linux初学者入门优秀教程
Redhat 9.0 安装,入门,定制指南Solaris GNOME 2.0 桌面系统管理Solaris GNOME2.0桌面用户指南
  Linux/Unix 编程
Shell编程和Unix命令Solaris Shell 编程实践大师:Unix Shell编程篇
实践大师:Unix Shell编程篇SSH:Unix SECURE SHELL工具Solaris Shell 编程
Linux与Unix SHELL编程指南读书笔记Linux系统分析与高级编程技术轻松学用Linux编程
Linux Shells by ExampleSolaris Shell编程Linux编程白皮书
Linux and Unix ShellLinux与Unix SHELL编程指南Freebsd 设备驱动编程手册
Linux应用程序开发指南Linux下设备驱动程序编程Unix高级环境编程
Unix平台下C语言高级编程指南Unix网络编程技术与分析Unix编程艺术
Linux上的C编程  
  系统/网络服务管理
Linux逻辑卷管理(LVM) Unix网络编程--进程间通讯Unix进程间通信(第二版)
Unix网络编程:进程间通信Linux系统管理白皮书 Linux高级配置详解
Linux内核以及驱动程序设计Linux内核研究与探索Linux内核图解
Linux0.11内核完全注释Linux内核分析与实例应用Linux设备驱动程序(内核2.2)
Linux 内核分析Linux内核完全注释Linux内核情景分析
Linux内核源代码分析Linux内核编程深入理解Linux内核
嵌入式Linux设计与应用使用UML开发嵌入式系统嵌入式ucLinux及应用开发
构建嵌入式Linux系统AVR高速嵌入式单片机原理与应用嵌入式设备上的Linux系统开发
基于IIS 和apache配置虚拟web服务器Linux Web服务器配置架设私人E-Mail服务器
Linux下打造安全的匿名FTP服务器使用Vsftpd架设FTP服务器VSFTP配置大全
bind9 管理员手册(官方英文版)DNS&bind9+中文指导SAMBA工具使用指南
samba工具使用指南SAMBA 24学时教程Apache服务器实用大全
Apache2 中文使用手册Apache HTTP服务器文档Apache服务器配置全攻略
Apache Server系统管理员手册Unix技术--系统管理篇Unix技术--基础篇
自由Unix之路Unix操作系统设计与实例Unix精通教程
Unix系统管理和维护大全SCO Unix系统应用500问Unix操作系统培训教材
Unix系统下的网络安全服务Apache HTTP服务器 2.0Sendmail安装和操作向导
qmail完全攻略qmail实用技术指南Lotus Notes R5中文操作和使用
Unix操作系统使用手册Unix及Oracle主机和网络安全Unix&Linux网管通鉴
Unix与Windows_NT网络互连Unix环境下的磁盘分配新编Unix系统管理实用教程
Unix技术-系统管理Unix系统概述 
  Unix/BSD
FreeBSD 5.x 架设管理与应用利用FreeBSD组建安全的网关FreeBSD手册集合
Freebsd 网络编程向导FreeBSD使用大全FreeBSD使用手册中文版
FreeBSD软件结构手册FreeBSD4.4操作系统设计与实现FREEBSD安装与优化全攻略
FreeBSD大全FreeBSD教程(CHM)FreeBSD实用大全
Solaris配置Solaris性能管理Solaris9安装指南
SOLARIS高级系统管理员指南简体中文 Solaris 9用户指南Solaris操作环境安全
Solaris GNOME 2.0 桌面系统管理Solaris GNOME2.0桌面用户指南Solaris 9 12/03 安装指南
Solaris管理员指南Solaris安全性专题指导HP-UX系统基础
Solaris公用桌面环境:用户转换指南AS400 DSD莲花宝箱技术手册Unix学习指南
构建在AS400上的高可用系统MIMIXUnix轻松入门实践大师:Unix awk和sed编程篇
Caldera OpenLinux安装与配置手册SCO Unix学习宝典Unix参考大全(上、下册)
Linux & Unix命令与常用术语辞典Unix提高Unix进程间通信(第二版)
Unix初级教程Unix资源大全Unix学习宝典
Unix常用命令Unix和Linux权威教程Unix傻瓜书
Linux Unix揭密Unix操作手册英文版 

- 作者: 韩中元 2007年11月9日, 星期五 20:40  回复(1) |  引用(0) 加入博采

论文结构

最近比较忙,总忘事情,同学们有问题一个是参加每周一下午1:30和每周四上午10:00的辅导,一个是给我打电话。有些材料我说给没有给的,记得打电话提醒我。

论文大致结构如下:

第1章  绪论

1.1、开发的意义和目的

1.2、开发现状

1.3、开发环境

5页以内

第2章 系统分析

2.1、功能分析

2.2、数据分析

2.3、本章小结

5页以内

第3章 系统设计

3.1、功能设计

3.2、模块设计

3.3、数据库设计

3.4、本章小结

10页左右

第4章 系统实现

4.1 主界面实现

4.2 什么什么功能的实现

4.2.1什么什么模块的实现

4.2.2什么什么模块的实现

。。。。。。。。。

4.3 什么什么功能的实现

。。。。。。。。。。。

4.N-1 系统测试

4.N本章小结

20页左右

结论

参考文献

致谢

以及其他一些材料

- 作者: 韩中元 2007年05月26日, 星期六 17:41  回复(3) |  引用(1) 加入博采

中国今年求职的大学毕业生总量将超过600万人
摘要:核心提示:据了解,去年全国有120多万大学毕业生在离校后还没有就业,再加上今年的495万毕业大学生,今年求职的大学毕业生总量将超过600万人。面对就业难的问题,有关专家提醒,惟有求真务实和保持平和心态才是最理想的选择。 查看全文

- 作者: 韩中元 2007年03月17日, 星期六 16:38  回复(0) |  引用(1) 加入博采

ZoneAlarm Security Suite v7.0.302.000 正式版

ZoneAlarm Security Suite v7.0.302    key 注册码

ZoneAlarm Security Suite v7.0.302    key 注册码

ZoneAlarm Security Suite v7.0.302    key 注册码

软件简介:

ZoneAlarm的设计是为了保护你的ADSL联机避免被黑客攻击。这个程序包含了四个连锁的安全服务;防火墙、应用程控、一个因特网保护锁、和防护区。ZoneAlarm Security Suite 版本增加了 IM Security 及 Web Filtering 的功能。。

Code: 73xwq-mpajh-r978q-hdduhg-e3akk0

转载自http://maomaobbs.com.cn/soft/7001.htm

- 作者: 韩中元 2007年03月7日, 星期三 20:03  回复(1) |  引用(1) 加入博采

An Introduction to 隐马尔科夫模型(viterbi算法)
2005/5/31

An Introduction to 隐马尔科夫模型(viterbi算法)

我要推荐给大家这个网站http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html

这是一个介绍HMM的网页,里面的内容言简意赅,而且深入浅出,特别介绍了在一阶HMM模型下的两个常用算法:Viterbi algorithmForward-Backward Algorithm。给我留下深刻印象的就是那个小实验程序:http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/viterbi_algorithm/s3_pg3.html

给人一目了然的感觉。

说了很多,Viterbi算法在模式识别领域有很广的应用空间,这个网站对于入门级的研究人员有很大帮助。

- 作者: 韩中元 2007年02月9日, 星期五 00:44  回复(1) |  引用(1) 加入博采

隐马尔科夫模型HMM自学 (6)尾声

HMM的第三个应用就是learning,这个算法就不再这里详述了,并不是因为他难于理解,而是它比前两个算法要复杂很多。这个方向在语音处理数据库上有重要的地位。因为它可以帮助我们在状态空间很大,观察序列很长的环境下找到合适HMM模型参数:初始状态、转移概率、混淆矩阵等。

好了,我们终于可以对HMM做一个阶段性的总结了。通过这个系列的自学过程,我相信各位已经和我一样对HMM的概念和应用有了一个初步的了解。这里我们考虑的都是一阶马尔科夫过程。HMM在语音识别和NLP方面都有很深入的应用。

简单说说我学习HMM的初衷,在科研过程中遇到了reranking的问题,候选一直都是别人为我生成的,处于好奇,终于决定自己也研究一下,大家都知道,reranking是需要产生N-best的候选,既然是N-best,那么viterbi算法就只能生成一条最好的路径,其他的该怎么办呢?原来在实际应用过程中,通常是把viterbi decoding与另一种称为stack decoding的算法联合使用(当然A*算法也可以)产生多个候选。前面我们已经对A*算法作了介绍,在今后的日子里,如果我有时间也会把stack decoding向大家介绍

- 作者: 韩中元 2007年02月9日, 星期五 00:10  回复(4) |  引用(1) 加入博采

隐马尔科夫模型HMM自学 (5-2)Viterbi Algorithm

崔晓源 翻译

一般化上一篇最后得到的公式我们可以把概率的求解写成:

[Formula]

2d. 反向指针, f's

考虑下面trellis

[Trellis]

现在我们可以得到到达每一个中间或者终点状态的概率最大的路径。但是我们需要采取一些方法来记录这条路径。这就需要在每个状态记录得到该状态最优路径的前一状态。记为:

[Formula]

这样argmax操作符就会选择使得括号中式子最大的索引j。

如果有人问,为什么没有乘以混淆矩阵中的观察概率因子。这是因为我们关心的是在到达当前状态的最优路径中,前一状态的信息,而与他对应的观察状态无关。

2e. viterbi算法的两个优点

1)与Forward算法一样,它极大的降低了计算复杂度

2)viterbi会根据输入的观察序列,“自左向右”的根据上下文给出最优的理解。由于viterbi会在给出最终选择前考虑所有的观察序列因素,这样就避免了由于突然的噪声使得决策原理正确答案。这种情况在真实的数据中经常出现。

==================================================

下面给出viterbi算法完整的定义1. Formal definition of algorithm

The algorithm may be summarised formally as:

For each i,, i = 1, ... , n, let :

[Formula]

- this intialises the probability calculations by taking the product of the intitial hidden state probabilities with the associated observation probabilities.

For t = 2, ..., T, and i = 1, ... , n let :

[Formula]

- thus determining the most probable route to the next state, and remembering how to get there. This is done by considering all products of transition probabilities with the maximal probabilities already derived for the preceding step. The largest such is remembered, together with what provoked it.

Let :

[Formula]

- thus determining which state at system completion (t=T) is the most probable.

For t = T - 1, ..., 1

Let :

[Formula]

- thus backtracking through the trellis, following the most probable route. On completion, the sequence i1 ... iT will hold the most probable sequence of hidden states for the observation sequence in hand.

==================================================

我们还用天气的例子来说明如何计算状态CLOUDY的部分概率,注意它与Forward算法的区别[Picture]

还是那句话:
怎么样?看到这里豁然开朗了吧。要是还不明白,我就.....................还有办法,看个动画效果:
参数定义:
别忘了,viterbi算法的目的是根据给定的观察状态序列找出最有可能的隐含状态序列,别忘了viterbi算法不会被中间的噪音所干扰。

- 作者: 韩中元 2007年02月9日, 星期五 00:09  回复(0) |  引用(1) 加入博采

隐马尔科夫模型HMM自学 (5-1)Viterbi Algorithm

找到可能性最大的隐含状态序列

崔晓源 翻译

多数情况下,我们都希望能够根据一个给定的HMM模型,根据观察状态序列找到产生这一序列的潜在的隐含状态序列。

1、穷举搜索方法

 

我们可以通过穷举的方式列出所有可能隐含状态序列,并算出每一种隐状态序列组合对应的观察状态序列的概率。概率最大的那个组合对应的就是最可能的隐状态序列组合。

Pr(observed sequence | hidden state combination).

比如说上图中的trellis中,最有可能的隐状态序列是使得概率:

Pr(dry,damp,soggy | sunny,sunny,sunny), Pr(dry,damp,soggy | sunny,sunny,cloudy), Pr(dry,damp,soggy | sunny,sunny,rainy), . . . . Pr(dry,damp,soggy | rainy,rainy,rainy)

得到最大值的序列。

同样这种穷举法的计算量太大了。为了解决这个问题,我们可以利用和Forward algorithm一样的原理--概率的时间不变性来减少计算量。

2.用递归方式减少复杂度

在给定的观察序列和HMM模型下,我们用一种递归的方式找到最有可能的隐状态序列。同样我们滴定部分概率,即在trellis中到达某一中间状态的概率。然后介绍如何在初始时刻t=1和t>1的时刻分别求解这个部分概率。但要注意,这里的部分概率是到达某一中间状态的概率最大的路径而不是所有概率之和。

2.1部分概率和部分最优路径

看如下trellis

[Picture of trellis] 

对于trellis中的每个中间状态和结束状态,都存在一条到达它的最优路径。他可能是下图这样:

[Picture] 

我们这些路径为部分最优路径,每一条 部分最优路径都对应一个关联概率--部分概率d。与Forward algorithm不同d是最有可能到达该状态的一条路径的概率。

 d (i,t)是所有序列中在t时刻以状态i终止的最大概率。当然它所对应那条路径就是部分最优路径。  d (i,t)对于每个i,t都是存在的。这样我们就可以在时间T(序列的最后一个状态)找到整个序列的最优路径。

2b. 计算 d 's 在t = 1的初始值

由于在t=1不存在任何部分最优路径,因此可以用初始状态P 向量协助计算。

[Formula]

这一点与Forward Algorithm相同

2c. 计算 d 's 在t > 1 的部分概率

同样我们只用t-1时刻的信息来得到t时刻的部分概率。

[Picture]

由此图可以看出到达X的最优路径是下面中的一条:

(sequence of states), . . ., A, X                                (sequence of states), . . ., B, X or (sequence of states), . . ., C, X

我们希望找到一条概率最大的。回想马尔科夫一阶模型的假设,一个状态之和它前一时刻的状态有关。

Pr (most probable path to A) . Pr (X | A) . Pr (observation | X)

因此到达X的最大概率就是:

[Formula] 

其中第一部分由t-1时刻的部分概率得到,第二部分是状态转移概率,第三部分是混淆矩阵中对应的概率。

- 作者: 韩中元 2007年02月9日, 星期五 00:07  回复(0) |  引用(1) 加入博采

隐马尔科夫模型HMM自学 (4-2)Forward Algorithm

书接上文,前一话我们讲到了Forward Algorithm中初始状态的部分概率的计算方法。这次我们继续介绍。

2c.如何计算t>1时刻的部分概率

回忆一下我们如何计算部分概率:

at ( j )= Pr( observation | hidden state is j ) * Pr(all paths to state j at time t)

我们可知(通过递归)乘积中第一项是可用的。那么如何得到Pr(all paths to state j at time t) 呢?

为了计算到达一个状态的所有路径的概率,就等于每一个到达这个状态的路径之和:

随着序列数的增长,所要计算的路径数呈指数增长。但是在t时刻我们已经计算出所有到达某一状态的部分概率,因此在计算t+1时刻的某一状态的部分概率时只和t时刻有关。
[Formula]
这个式子的含义就是恰当的观察概率(状态j下,时刻t+1所真正看到的观察状态的概率)乘以此时所有到达该状态的概率和(前一时刻所有状态的概率与相应的转移概率的积)。因此,我们说在计算t+1时刻的概率时,只用到了t时刻的概率。这样我们就可以计算出整个观察序列的概率。
 
2d.复杂度比较
对于观察序列长度T,穷举法的复杂度为T的指数级;而Forward Algorithm的复杂度为T的线性。
=======================================================
最后我们给出Forward Algorithm的完整定义
We use the forward algorithm to calculate the probability of a T long observation sequence;

[Formula]

where each of the y is one of the observable set. Intermediate probabilities (a's) are calculated recursively by first calculating a for all states at t=1.

[Formula]

Then for each time step, t = 2, ..., T, the partial probability a is calculated for each state;   [Formula]

that is, the product of the appropriate observation probability and the sum over all possible routes to that state, exploiting recursion by knowing these values already for the previous time step. Finally the sum of all partial probabilities gives the probability of the observation, given the HMM, l.   [Formula] =======================================================

我们还用天气的例子来说明如何计算t=2时刻,状态CLOUDY的部分概率
怎么样?看到这里豁然开朗了吧。要是还不明白,我就.....................还有办法,看个动画效果:
参数定义:
最后记住我们使用这个算法的目的(没有应用任何算法都是垃圾),从若干个HMM模型中选出一个最能够体现给定的观察状态序列的模型(概率最大的那个)。

- 作者: 韩中元 2007年02月9日, 星期五 00:04  回复(0) |  引用(1) 加入博采

隐马尔科夫模型HMM自学 (4-1)Forward Algorithm

找到观察序列的概率

崔晓源 翻译

Finding the probability of an observed sequence

1、穷举搜索方法

对于水藻和天气的关系,我们可以用穷举搜索方法的到下面的状态转移图(trellis):

图中,每一列于相邻列的连线由状态转移概率决定,而观察状态和每一列的隐状态则由混淆矩阵决定。如果用穷举的方法的到某一观察状态序列的概率,就要求所有可能的天气状态序列下的概率之和,这个trellis中共有3*3=27个可能的序列。

Pr(dry,damp,soggy | HMM) = Pr(dry,damp,soggy | sunny,sunny,sunny) + Pr(dry,damp,soggy | sunny,sunny ,cloudy) + Pr(dry,damp,soggy | sunny,sunny ,rainy) + . . . . Pr(dry,damp,soggy | rainy,rainy ,rainy)

可见计算复杂度是很大,特别是当状态空间很大,观察序列很长时。我们可以利用概率的时间不变性解决复杂度。
 
2、采用递归方法降低复杂度
我们采用递归的方式计算观察序列的概率,首先定义部分概率为到达trellis中某一中间状态的概率。在后面的文章里,我们把长度为T的观察状态序列表示为:
Y{k{1}}, Y{k{2}}, .... , Y{k{T}}
 
2a. Partial probabilities, (a's)
在计算trellis中某一中间状态的概率时,用所有可能到达该状态的路径之和表示。
比如在t=2时间,状态为cloudy的概率可以用下面的路径计算:
at ( j ) 表示在时间t时 状态j的部分概率。计算方法如下:
at ( j )= Pr( observation | hidden state is j ) * Pr(all paths to state j at time t)
最后的观察状态的部分概率表示,这些状态所经过的所有可能路径的概率。比如:
这表示最后的部分概率的和即为trellis中所有可能路径的和,也就是当前HMM下观察序列的概率。
Section 3  会给出一个动态效果介绍如何计算概率。
 
2b.计算初始状态的部分概率
我们计算部分概率的公式为:
a t ( j )= Pr( observation | hidden state is j ) x Pr(all paths to state j at time t)
但是在初始状态,没有路径到达这些状态。那么我们就用probability乘以associated observation probability计算:
formula
这样初始时刻的状态的部分概率就只与其自身的概率和该时刻观察状态的概率有关。

- 作者: 韩中元 2007年02月9日, 星期五 00:02  回复(0) |  引用(1) 加入博采

金山词霸2007破解补丁下载(绝对能用,已经通过验证)
今天苗涛的专栏提供了一个金山词霸2007 特别版的下载,我看了看

是迅雷下载链接,源头是绿色下载园,就去看了看,本来不太相信的拉,金山词霸出来也不久,

就然被破解了  不过我还是从这个网站下载了这个破解补丁,我本来就从天空下载基地下载了

金山词霸2007正式版,然后吧这个补丁应用上,竟然有用,真的有用,感谢苗涛专栏

打开金山词霸,没有出现一个对话框,直接使用,没有什么功能限制,(下载地址在文章末尾)

看看金山词霸2007软件首页界面,打开时已经没有了那个登录框了

然后输入一个单词,里面本来只有一本字典给我们使用的,现在经过破解后,全部都能正常使用了
太高兴了啊,今天
好了,我已经把这个破解补丁传到我的空间了,如果各位想使用这个软件话,那么去下载吧,
至于正式的版本,大家可以到华军或者天空去下载,然后应用这个破解补丁就可以了
注意  大家下载好这个补丁后,麻烦一下在文件名后面添加一个.rar,下载的这个文件名字是
金山词霸2007破解补丁,然后大家在这个文件名字改成  金山词霸2007破解补丁.rar就可以了
由于这个空间下载要帐号,所以没有帐号的人,可以使用下面的帐号进行登录下载
用户名是  ruanjianyinsu   密码是 123456

- 作者: 韩中元 2007年01月6日, 星期六 02:14  回复(8) |  引用(1) 加入博采

毕业设计群号码
32986939

- 作者: 韩中元 2007年01月4日, 星期四 11:36  回复(0) |  引用(1) 加入博采

软件方向实习封面

 

 

 

 

 

 

 

 

软件方向实习报告

 

XXXX系统

 

 

 

 

 

班级学号姓名

班级学号姓名

班级学号姓名

 

 

 

 

第二页

 

人员1:(班级学号)

负责的主要内容包括。。。。。。。。

人员2:(班级学号)

    负责的主要内容包括。。。。。。。。

人员3:(班级学号)

    负责的主要内容包括。。。。。。。。

 

- 作者: 韩中元 2006年12月26日, 星期二 20:02  回复(0) |  引用(1) 加入博采

新建立的那个毕业设计的群有问题

上次建立的那个群,不知道为什么无法查找到。你们谁能建群的,建立一个吧。然后在这里通知一下大家。

毕业设计相关文件在这个页面可以下载

http://www.hljit.edu.cn/jw/info/download/list.asp?id=58

共五个文件。

- 作者: 韩中元 2006年12月26日, 星期二 19:38  回复(1) |  引用(1) 加入博采

软件方向实习报告格式要求(测量delphi论文同样格式)

一、系统开发的目的和意义

二、所使用的数据库和语言

三、系统分析

      所完成的主要功能和要存储的数据。

四、系统设计

      系统功能结构图

      数据流程图

      数据库设计具体内容

五、系统实现

     最主要的界面截图,以及关键代码说明

除去图形部分文字不少于4000字。   

- 作者: 韩中元 2006年12月22日, 星期五 10:11  回复(0) |  引用(1) 加入博采

毕业设计同学近期工作安排
      目前大家首要的工作是选定语言,学习语言,语言自选,如果选择delphi,我可以进行详细的指导,如果其他语言,我只能在功能上加以指导。
      毕业设计是开发一个项目的全过程,所谓工作经验就是指这种经验,这也是你们毕业之前,最后的一次机会,能够补充自己的不足。
      学习语言是为了写程序,学习究竟是为了什么?我说不清楚,不过至少,应该为了你们的父母吧。博客上第一篇文章希望大家能好好看看。
      短时间内要学好一门语言,我认为应该每天不付出8个小时以上,很难在毕业后让人满意。

      全部十个同学均已和我联系。qq交流群号:12869848。加入的同学请在群名片中修改自己的姓名题目email和联系方式。
      毕业设计相关材料将在近期上传到群空间.

- 作者: 韩中元 2006年12月21日, 星期四 20:41  回复(0) |  引用(1) 加入博采