Haike

火星车简单例子2(先写测试再写实现)

测试:

package MarsTest;

import marscar.MarsCar;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 * @date 2012-4-1
 * @author TONY.YE
 * @mail 771544454@qq.com
 */
public class MarsTest {

    // <editor-fold defaultstate="collapsed" desc="初始化">
    @Test
    public void testMarsSetup() {
        MarsCar car = new MarsCar(1, 1, "N");
        assertEquals(1, car.getX());
        assertEquals(1, car.getY());
        assertEquals("N", car.getDirection());
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="移动功能">
    @Test
    public void testMoveCarFromPoint() {
        MarsCar car = new MarsCar(1, 1, "N");
        car.Move();
        assertEquals(2, car.getY());
        assertEquals(1,car.getX());
        assertEquals("N",car.getDirection());
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="转向功能">
    @Test
    public void testTurnDirection() {
        MarsCar car = new MarsCar(1, 1, "N");
        car.TrunDirection("L");
        assertEquals("W", car.getDirection());
    }
    // </editor-fold>

    @Test
    public void receiveOrder(){
        MarsCar car=new MarsCar(1,1,"N");
        car.ReceiveOrder("LMRMLM");
        assertEquals("W",car.getDirection());
        assertEquals(-1,car.getX());
        assertEquals(2,car.getY());
    }
//。。。。。。。。。。。。。。。。
}
-------------------------------------------------------------------------------------------
类:
package marscar;

/**
 * @date 2012-4-1
 * @author TONY.YE
 * @mail $771544454@qq.com
 */
public class MarsCar {

    // <editor-fold defaultstate="collapsed" desc="字段属性">
    private int x;//坐标X单位长度1
    private int y;//坐标Y单位长度1
    private int direction;//0东、1南、2西、3北

    //获得当前方向
    public String getDirection() {
        return IntTOStr(direction);
    }

    //获得当前X坐标
    public int getX() {
        return x;
    }

    //获得当前Y坐标
    public int getY() {
        return y;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="构造函数">
    public MarsCar(int x, int y, String direction) {
        this.x = x;
        this.y = y;
        this.direction = StrTOInt(direction);
        System.out.println("一辆火星车在坐标("+x+","+y+","+direction+")登陆");
        System.out.println("----------------------------------------------");
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="私有方法">
    //数字转方向
    private String IntTOStr(int direction) {
        switch (direction) {
            case 0:
                return "E";
            case 1:
                return "S";
            case 2:
                return "W";
            case 3:
                return "N";
            default:
                return null;
        }
    }

    //方向转数字
    private int StrTOInt(String direction) {
        if (direction == null ? "N" == null : direction.equals("N")) {
            return 3;
        } else if (direction == null ? "W" == null : direction.equals("W")) {
            return 2;
        } else if (direction == null ? "S" == null : direction.equals("S")) {
            return 1;
        } else if (direction == null ? "E" == null : direction.equals("E")) {
            return 0;
        } else {
            return -1;
        }
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="公共方法">
    //移动一个单位
    public void Move() {
        switch (direction) {
            case 0:
                this.x++;
                break;
            case 1:
                this.y--;
                break;
            case 2:
                this.x--;
                break;
            case 3:
                this.y++;
                break;
            default:
                break;
        }
        System.out.println("车子向" + IntTOStr(direction) + "移了一下。当前坐标是:(" + x + "," + y + "," + IntTOStr(direction)+")");
    }

    //改变方向(向左或向右转)
    //当输入不是转向命令时,自动忽略
    public void TrunDirection(String trunDirection) {
        if (trunDirection == null ? "L" == null : trunDirection.equals("L")) {
            this.direction--;

            //如果方向代号小于0,刚直接把方向定为3(北)
            if (direction < 0) {
                this.direction = 3;
            }
            System.out.println("车子左转,转向了" + IntTOStr(direction));
        } else if (trunDirection == null ? "R" == null : trunDirection.equals("R")) {
            this.direction++;

            //如果方向代号大于3,刚直接把方向定为0(东)
            if (direction > 3) {
                this.direction = 0;
            }
            System.out.println("车子右转,转向了" + IntTOStr(direction));
        }

    }

    public void ReceiveOrder(String orders) {
        String order;
        for (int i = 0; i < orders.length(); i++) {
            order = orders.substring(i, i + 1);
            if (order == null ? "M" == null : order.equals("M")) {
                Move();
            } else {
                TrunDirection(order);
            }
        }
    }
    // </editor-fold>
}
-------------------------------------------------------------------------------------
主函数:
package marscar;

/**
 * @date 2012-4-1
 * @author TONY.YE
 * @mail $771544454@qq.com
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        //命令字串
        String str= "LMLRLMDKJF:E_WMIOWRLWRFSKFJL:SDKJFGLSJDFLSJDFLJSJSFLKJDLSLL";

        //初始化
        MarsCar car=new MarsCar(1,1,"N");

        //收到命令
        car.ReceiveOrder(str);
    }

}



				

火星车模拟小程序

题目:

设计一个控制火星车的java程序. 现在计划将一辆火星车投放到火星上的一片区域中, 这片区域将被划分为大小一定的坐标系, 该区域的中心为坐标系的原点坐标为(0,0), 该火星车将被投放到该区域内的其中一点。例如,被投放到坐标 (1,2,’N’) 表示该火星车被投放到了位置(1,2) 并且面向北方(North)。火星车能接受 L, R, M 三种指令。 其中 L, R 代表火星车原地向左或者向右转 90 度, M将使火星车前进一格的距离。

 

以下是一组数据实例:

 

1 2 N // 代表降落在 1, 2 坐标, 面向北面

LMLMLMLMM // 代表接收的一串子令

1 3 N // 代表指令接收完成后 火星车所处位置以及面对的方向

LRMLRMLMM // 一串新的指令

-1 5 W //指令执行后的状态


//car类,以下是我写的,但还有很多不足的地方,找个时间发个完善点的
package Car;

public class Car {

private int CX;//X轴坐标
private int CY;//Y轴坐标
private int Direction;//当前火星车方向0代表东(E);1代表南(S);2代表西(W);3代表北(N)

//构造函数
public Car(int x,int y,String direction){
	Direction = getDirectionStr(direction);
	CX = x;
	CY = y;
};

//转方向1代表顺时针转;-1代表逆时针转
private void TurnDirection(int order){
	Direction += order;
	if(Direction > 3)
	{
		Direction = 0;
	}
	else if(Direction < 0)
	{
		Direction = 3;
	}
}

//数字转方向
private String getDirectionStr(int direction)
{
	switch(direction){
	case 0:
		return "E";
	case 1:
		return "S";
	case 2:
		return "W";
	case 3:
		return "N";
	default :
		return "系统出错";
	}
	}

//方向转数字
private int getDirectionStr(String direction)
{
	if(direction=="N"){
		return 3;
	}
	else if(direction=="W"){
		return 2;
	}
	else if(direction=="S"){
		return 1;
	}
	else if(direction=="E"){
		return 0;
	}
	else{
		return -1;
	}
	}

//当前火星车方向0代表东;1代表南;2代表西;3代表北
//向指定方向移动一个单位
private void MoveTo(){
	switch(Direction){
	case 0:
		CX++;
		break;
	case 1:
		CY--;
		break;
	case 2:
		CX--;
		break;
	case 3:
		CY++;
		break;
	default :
		break;
	}

	}

//语言转换执行(命令转机器语言)
public void Execution(String order)
{
	if(order=="L")
	{
		TurnDirection(-1);
		System.out.println("火星车向左转动了90度;"+"当前位置:"+CX+" "+CY+" "+getDirectionStr(Direction));
	}
	else if(order=="R"){
		TurnDirection(1);
		System.out.println("火星车向右转动了90度;"+"当前位置:"+CX+" "+CY+" "+getDirectionStr(Direction));
	}
	else if(order=="M"){
		int tempX=CX;
		int tempY=CY;
		int tempDir=Direction;
		MoveTo();
		System.out.println("火星车从"+tempX+" "+tempY+" "+getDirectionStr(tempDir)+"移动到"+CX+" "+CY+" "+getDirectionStr(Direction));
		}
	else{
		return;
	}
	}

//语言转换执行(机器语言转命令)

}

//-----------------实现
package Car;

public class Client {

	public static void main(String arg[])
	{
		Car car = new Car(1,2,"N");
		System.out.println();
		String str1[] = {"L","M","L","M","L","M","L","M","M","L","M","L"};
		for(int i=0; i < str1.length; i++)
		{
			car.Execution(str1[i]);
		}
		}
}

关于一部小说

这是我很久之前就想写的又一篇小说,怕是写不成啦,自己老找借口说空不出时间,然后一拖再拖,毕竟写文字也不能当饭吃的,我也不是什么专业写手,文学造诣极其有限啊,哈~

以前总喜欢写些关于自己的东西,但那样太不现实了,写出来就没味道了,或者是根本就写不出来,一个人怎么样要看别人的评价,而不是自己的,所以,从现在开始多写写别人的,哈~

这是我构想的一篇小说,一般人看来,这样的开始像是在抄别人的作品,因为已经有无数的电影电视小说都写过这样的题材啦。怎么说呢,个人写文字也只是兴趣罢了,想这样写就这样写吧,但题材绝没有参考过其它文学作品什么的,自己想到哪就是哪吧!如果你有更好的想法,也可以留下评论,有时间的话,还可以参与其中,和我一起写啊!写作的乐趣不在作品完成之后好与不好,当然,这还是挺重要的,嘻~但更注重的是过程吧,像我这样的写作速度,估计再花几年的时间也写不来,到时,剧情什么的又全忘了,之前那两部也差不多这样,但我是会坚持写下去的,现在是什么想法就写什么想法吧,让手指不要停下来就可以…

故事是从女主角身患绝症开始,因为只有一个月的生命了…伤心过害怕过哭过,泪干了,就不知道怎么哭了,对于一个定时死亡的人来说,眼前所能看到的一切又会是怎样的呢?我们现在的生活或许有许多的无奈,但至少还可以走很长的路…而她呢?

因为知道自己的死亡时间,不想让身边的朋友为自己难过,于是一个人离校出去,漫无目的地游走在城市的角落,无意上了一辆旅游大巴,然后去了一个自己从来都没听说过的旅游景点,还遇到好心的一农家,从当地人那里听到了关于星湖的一些传说,感觉比自己知道的很多世界未解之迷还离奇…后来才知道自己进到了一个很玄幻的世界里,有上进追求,有奇幻仙境,有悲欢离合…过中曲曲折折,却耐人寻味,无风岛是个传说,是一种精神希望也是…每个人心中都有一首音乐,每个人心中都有一座无风岛…

这故事原来不叫无风岛的,因为一首音乐,还有自己过去的一段回忆,还有无意中在一个早晨看到“无风岛”这三个字,于是就把书名改了。

其实写下去的原因还有一个,那是答应过某人说要写一两部小说的。

主要为了积极性吧,我把小说放在了起点网上http://2206293.qdmm.com

喜欢的,就说两句,故事可能就因为这两句话而有更好的剧情。

 

 


半年眨眼就过去咯…

发现,一直以来以前想一直坚持的事情都是一时脑子发热啊,好像能坚持下来的就没几件事!

其实好想自己写一个好的博客,但这PHP平台真的不太熟悉,每一次在自己电脑上配置环境那个真叫想死!以后可能会写一下.Net的平台的博客吧!那样相对熟悉些,改起来也很方便,但什么时候呢,什么时候呢!

我知道,如同我摆脱不了你一样,我也摆脱不了文字的世界,喜欢就喜欢了。

以后要写些什么呢?

自己计划写的那些小说估计是永远也写不完的啦!唉,又是一件尽在憾事!


【飞信接口】

飞信发送接口调用说明

1)此飞信接口核心文件只有FetionObj.dll及FetionSer.dll,其它文件都为飞信客户端文件,只把你的应用程序及上面的两个文件放到与飞信客户端同一目录就可以了,调试时,你要把那此文件都复制一份到你的运行目录,包括Theme目录.

2)开发使用接口时,你只要添加FetionObj.dll文件到引用中,并在源码引用里加“using Fetion;”语句,此引用两个对象:FetionUser结构为好友信息结构,FetionObj类为飞信操作接口类。

3)FetionUser结构说明如下:
   public struct FetionUser
   {
public string FetionNo; // 飞信账号
public string MobileNo; // 飞信手机号
public string UName; // 用户姓名或昵称
public bool EnableIM; // 飞信在线
public bool EnableSMS; // 短信在线
public bool EnableInvite //是否活动(登录或退出)
   }

4)FetionObj类说明
(调用可参考我给的”调用测试”程序源码)

********************************************************
属性说明:
/// <summary>
/// 确定是否已经登录,等于true为已经登录
/// </summary>
public bool isLogin

/// <summary>
/// 返回用于登录的手机号或飞信号
/// </summary>
public string GetMyNo

/// <summary>
/// 返回自己的飞信号
/// </summary>
public string GetMyFetionNo

/// <summary>
/// 返回自己的手机号
/// </summary>
public string GetMyMobileNo

/// <summary>
/// 返回自己的昵称
/// </summary>
public string GetMyName

*****************************************************
函数说明:
/// <summary>
/// 飞信类构造函数
/// </summary>
public FetionObj()

/// <summary>
/// 登录飞信
/// </summary>
/// <param name=”myMNo”>string,手机号或飞信号</param>
/// <param name=”myMPass”>string飞信密码</param>
/// <returns>true操作成功(注:发生OnLogin事件后才知道登录是否成功),false操作失败</returns>
public bool LoginFetion(string myMNo, string myMPass)

/// <summary>
/// 注销飞信
/// </summary>
public void LogoutFetion()

/// <summary>
/// 发送短信(注:你可以多次调用,在SendOk事件返回成功结果)
/// </summary>
/// <param name=”toMNoArr”>发送目标手机号或飞信号数组</param>
/// <param name=”SmsMsg”>发送的信息内容</param>
/// <param name=”isSms”>true全部发手机短信,false根据用户在线情况自动处理</param>
public bool SendSms(string[] toMNoArr, string SmsMsg)

/// <summary>
/// 发送定时短信
/// </summary>
/// <param name=”toMNoArr”>发送目标手机号或飞信号数组</param>
/// <param name=”SmsMsg”>发送的信息内容</param>
/// <param name=”toTime”>定时发送时间,注意:要大于10分钟后的时间</param>
public bool SendTimeSms(string[] toMNoArr, string SmsMsg, DateTime toTime)

/// <summary>
/// 添加好友
/// </summary>
/// <param name=”addMNo”>要添加的目标手机号或飞信号</param>
/// <param name=”Msg”>给对方的信息,限制不大于10个字符(即5个汉字)</param>
/// <param name=”FriendName”>自定义的好友姓名或昵称</param>
public bool AddFriend(string addMNo, string Msg, string FriendName)

/// <summary>
/// 删除好友
/// </summary>
/// <param name=”addMNo”>要删除的目标手机号或飞信号</param>
public bool DelFriend(string delMNo)

/// <summary>
/// 直接获取好友列表
/// </summary>
public FetionUser[] GetMList()

/// <summary>
/// 确定好友列表是否准备好
/// </summary>
public bool isMListOk()

**************************************************************************
事件说明:

/// <summary>
/// 有新短信时触发事件代理
/// </summary>
/// <param name=”FObj”>发生事件的飞信运用类对象</param>
/// <param name=”ReU”>发送方用户信息</param>
/// <param name=”Msg”>收到的信息内容</param>
public delegate void ReFindMsg(FetionObj FObj, FetionUser ReU, string Msg);

/// <summary>
/// 有新短信时触发事件
/// </summary>
public event ReFindMsg OnReFindMsg; //接收到短信

/// <summary>
/// 接收短信出错时触发事件代理
/// </summary>
/// <param name=”FObj”>发生事件的飞信运用类对象</param>
/// <param name=”ErrTxt”>错误信息</param>
public delegate void ReErr(FetionObj FObj, string ErrTxt);

/// <summary>
/// 接收短信出错时触发事件
/// </summary>
public event ReErr OnReErr;

/// <summary>
/// 被添加为好友时触发事件代理
/// </summary>
/// <param name=”FObj”>发生事件的飞信运用类对象</param>
/// <param name=”ReU”>对方用户信息</param>
/// <returns>true同意,并添加他为好友,false不同意</returns>
public delegate bool ReAdd(FetionObj FObj, FetionUser ReU);

/// <summary>
/// 被添加为好友时触发事件
/// </summary>
public event ReAdd OnReAdd;

/// <summary>
/// 好友状态改变时触发事件代理
/// </summary>
/// <param name=”FObj”>发生事件的飞信运用类对象</param>
/// <param name=”ReU”>好友对方信息</param>
public delegate bool PChanged(FetionObj FObj, FetionUser ReU);

/// <summary>
/// 好友状态改变时触发事件
/// </summary>
public event PChanged OnPChanged;

/// <summary>
/// 每发送成功一条短信时触发事件代理
/// </summary>
/// <param name=”FObj”>发生事件的飞信运用类对象</param>
/// <param name=”ToFNo”>目标飞信号</param>
/// <param name=”Msg”>发送的信息内容</param>
public delegate void SendOk(FetionObj FObj, string ToFNo, string Msg);

/// <summary>
/// 每发送成功一条短信时触发事件
/// </summary>
public event SendOk OnSendOk;

/// <summary>
/// 全部发送完成后触发事件代理
/// </summary>
/// <param name=”FObj”>发生事件的飞信运用类对象</param>
public delegate void SendAllOk(FetionObj FObj);

/// <summary>
/// 全部发送完成后触发事件
/// </summary>
public event SendAllOk OnSendAllOk; //全部发送完后

/// <summary>
/// 每发送出错时时触发事件代理
/// </summary>
/// <param name=”FObj”>发生事件的飞信运用类对象</param>
/// <param name=”ToFNo”>目标飞信号</param>
/// <param name=”Msg”>发送的信息内容</param>
/// <param name=”ErrTxt”>错误信息</param>
public delegate void SendErr(FetionObj FObj, string ToFNo, string Msg, string ErrTxt);

/// <summary>
/// 每发送出现错误时时触发事件
/// </summary>
public event SendErr OnSendErr; //发送出错

/// <summary>
/// 飞信登录结束后触发事件代理
/// </summary>
/// <param name=”FObj”>发生事件的飞信运用类对象</param>
/// <param name=”oklogin”>登录是否成功,true为成功</param>
public delegate void Login(FetionObj FObj, bool oklogin);

/// <summary>
/// 飞信登录结束后触发事件
/// </summary>
public event Login OnLogin;

/// <summary>
/// 好友列表完成时触发事件代理
/// </summary>
/// <param name=”FObj”>发生事件的飞信类对象</param>
/// <param name=”uList”>好友列表</param>
public delegate void MList(FetionObj FObj, FetionUser[] uList);

/// <summary>
/// 好友列表完成时触发事件
/// </summary>
public event MList OnMList;

/// <summary>
/// 飞信被注销时触发事件代理
/// </summary>
/// <param name=”FObj”>发生事件的飞信类对象</param>
public delegate void Logout(FetionObj FObj);

/// <summary>
/// 飞信被注销时触发事件
/// </summary>
public event Logout OnLogout;


关于爱情….

王坤上了四次舞台就把慧慧牵走了,确实,他们的故事感人肺腑,但现实也让我用理性去思考荧屏之上的真实性..从未相处过了解过的两个人就真的能携手走下去吗?

他们所说的那些话真的触动了我,她也自卑,也不是一个普通的女孩子…我也是不知道有没有结果,也是一如既往地坚持…

在这里,我找到了我们的影子,甚至相比之已经曲折好几倍了.甚至连牵手的机会都没…于是我把他们说的话一个个字地打出来了,看着这些文字,像是一份早已经准备好的稿纸,因为真的太过完美了,让我站在舞台上,我满脑子只会是空白…我表述不出那样动人的话,我只会..用心写写文字~

——————————————

你是沉默的天使,我只想保护你…

我知道你从北京到上海来,我非常感谢你选择了我,但我不需要你的同情..

中意你多情的执着,那是不曾拥有的心动,只在此该,为你沉沦…

我想对你说,上一次,你拒绝了我,我很难过,然后今天我看到你来了,我欣喜,真的是让我欢喜让我忧..

我想告诉你,小慧不是一个普通的女孩子,你可能追其它女生只要花二十分的力气,但是你追她可能要双倍甚至更多..

你和正常的女孩子交往,可能沟通很简单,万一有了什么事情,伤害不会特别的大,但是对于她来说不同,她受到一点点的伤要比我们扩大了十倍,你有这样的心理准备吗?

我站在这里对你说,我仍然会坚持,我仍然会选择你,我希望你能改变,我希望你能回心转意,或者是慎重地考虑一下我做的决定

我身为一个男人,更应该坚持自己的选择,如果说,我上次她没有选择我我就放弃,我觉得连我自己都无法原谅我自己

我小时候因为发高烧,后来就听不见声音了,但我一直坚持自己,希望将来能独立生活,我之前谈过一个男朋友,本来一直感情很好,他也是聋哑人,我们开了一家做彩绘的网店,他帮了我很多,但是后来我的父母不同意,最终,我们分手了。他们希望我找个健全的人,我其实很自卑的,不太敢去接受另一个世界的人,鼓足勇气来到《百里挑一》,我希望能找到一个一起分享快乐和悲伤的人,我很感谢你的到来,对你真诚我也很感动,你的手语很漂亮,但是我很害怕,因为你的条件实在太好,年轻帅气的你,身边一定会有很多优秀的女孩,所以我没有那种自信面对你,对不起。

你这样一直的坚持,得到的就是对的吗?

我不知道这样一直地坚持,得到是不是对的。如果我不坚持,就什么都得不到。。

王坤,你第一次来《百里挑一》给我惊喜,我选择了你,第二次你来到了这里,让我欢喜让我忧,因为我再次见到了你,被你拒绝了之后,过了一个星期我原本平复了的心又激起了涟漪,这是第三次了,刘备当初三顾茅庐请出了诸葛亮,我不知道你今天是不是也有这样的运气,我在这个舞台,被同一个男人拒绝过两次,除了你我没有为其它的男嘉宾站出来过,你为什么一点都没有同情过我,你说你会为了慧慧去学手语,你究竟是真的喜欢她还是只是一种征服的冲动抑或是同情。慧慧她不是一个普通的女孩,在她总是以微笑面对着这个世界的外表下,包裹着一颗脆弱而敏感的心,你一旦牵了她,必须对她负责,你伤不起,你也不能伤

慧慧对我来说,没有跟任何女孩子不一样,虽然说,她听不见,她也开不了口,但是她依然用她的眼睛去看待这个世界,其实我觉得她内心很多东西,反而是很多别的女孩子没有的,那份美好,可能只有我看得见,所以我感谢你的厚爱,真的谢谢你,这么一二三的选择了我,但是我觉得我还是要坚持自己的选择..

这是第三次站在这个舞台,我不知道我还有多少勇气可以依旧地过来,如果我这次我依然看不见你的眼神的坚定,我可能下次会选择默默地等待,此时此刻我只想对你说,你愿意跟我走吗?

你今天让我很感动,我也已经心动了,但是你的条件这么好,人也长得很帅,一定会有很多女孩子都喜欢你的,我来这个《百里挑一》的节目,是想找一个能够接受我的普通人,但是你真的是太好太好了,我想都不敢想,我不是不喜欢你而拒绝你,我是觉得自己真的配不上你,这里有很多很美好的女孩子,请你选择一个喜欢自己的吧!我也衷心地希望你可以幸福

其实我就是一个平凡的男孩,我的感情我的所有的一切,都是那么地平凡,反而我觉得你在我心中是那么地不平凡,虽然每一次我跟你只能眼神的交流,但是,我能从你的瞳孔里看到很多,这个世界上别的女孩子所没有拥有的东西,这个杯子上是你拿着风筝的样子,特别阳光,你的笑容就像这个太阳一样,照耀着我,我也希望我们的所有忘记,一点一滴然后盛满这个杯子,我送给你..

不要强迫她,我从她的眼神里看到了希望,可是她是有些害怕,我只想告诉你,我每次来都是带着百分百的全心,所以我希望你再慎重地考虑一下,我其实就是一个平凡的男孩,你是一个沉默的天使,我希望有一天你的眼神告诉我,肯定地告诉我你真正地接受了我,谢谢!

今天,你这样的执着,真的太突然了,我希望你给我一个星期的时间再考虑一下,我原来心里想就算了,你的条件这样好,我好像真的配不上你,我真希望你可以找到一个自己喜欢的人。

我的手机会永远看着的,等着你的召唤,再见

爱情应该是件幸福的事,但此时此刻又让人觉得,有点辛酸有点痛苦,昱煜在痛苦,小慧在纠结..

拉环恋上了拉罐,拉罐心中却永远恋着可乐…

我希望你能肯定我,虽然我不知道这个时间到底有多久,可能这是我最后一次站在这个舞台给你唱歌,希望你能真正明白这首歌的意义,这首歌是《唯一》

那几句歌唱得我心都碎了

这个星期,每天,慧慧都拉着我的手让我教她这首歌,你知道慧慧她不能发出声音,她就一遍又一遍的跟我对口型,为了让口型对得更准确,她就把手放在我的喉咙上,去寻找发音的音节在哪里,就是为了让每个字你能看得懂,能懂她的心,慧慧她放下所有的戒备,去接受,去爱。我希望你能让她幸福

这一个月,我每天晚上都睡不着觉,我心目中总是想着她何时可以点头,当这一刻来的这么突然的时候,我觉得,真的一切都值了..我只想保护你

 


【数字操作】生成100个数字,并分类,计数..实现多维数组

    public class LuckyNumber
    {
        //所有数字
        public struct NumItem
        {
            public NumSort Num0_9;
            public NumSort Num10_19;
            public NumSort Num20_29;
            public NumSort Num30_39;
            public NumSort Num40_49;
            public NumSort Num50_59;
            public NumSort Num60_69;
            public NumSort Num70_79;
            public NumSort Num80_89;
            public NumSort Num90_99;
            public int MaxNum;//所有数字中最大值
            public int MinNum;//所有数字中最小值
        }
        //数字分类
        public struct NumSort
        {
            public ArrayList NumElement;
            public int NumCount;
            public int MinNum;
            public int MaxNum;
            public NumSort(ArrayList arry, int num, int min, int max)
            {
                NumElement = arry;
                NumCount = num;
                MinNum = min;
                MaxNum = max;
            }
        }
        /// <summary>
        /// 生成随机数,并对数字进行分类汇总处理
        /// </summary>
        /// <param name="number">要生成的数字个数</param>
        /// <param name="startNum">生成数字的范围之开始点</param>
        /// <param name="endNum">生成数字的范围之结束点</param>
        /// <returns>数字分类结构体</returns>
        public NumItem NumHandle(int number, int startNum, int endNum)
        {
            Random ran = new Random();
            NumItem numItem = new NumItem();
            List<ArrayList> al = new List<ArrayList>();
            int[] maxNum = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
            int[] minNum = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, };
            int[] countNum = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            int numItemMax = -1;//默认值最大值取比所有值都要小
            int numItemMin = 101;//默认最小值取比所有值都要大
            //创建10个arraylist存储十组数
            for (int i = 0; i < 10; i++)
                al.Add(new ArrayList());
            //生成随机数将数字存储到arraylist数组中并对其进行排序
            int index = 0;
            for (int i = 0; i < 100; i++)
            {
                int num = ran.Next(0,99);
                index = num / 10;
                al[index].Add(num);
                al[index].Sort();
            }
            //判断分组最大最小值和所有数字的最大最小值并计算分组
            for (int i = 0; i < 10; i++)
            {
                if (al[i].Count != 0)
                {
                    al[i].Sort();
                    maxNum[i] = Convert.ToInt32(al[i][al[i].Count - 1]);
                    minNum[i] = Convert.ToInt32(al[i][0]);
                    numItemMin = (numItemMin < Convert.ToInt32(minNum[i])) ? numItemMin : Convert.ToInt32(minNum[i]);
                    numItemMax = (numItemMax > Convert.ToInt32(maxNum[i])) ? numItemMax : Convert.ToInt32(maxNum[i]);
                    countNum[i] = al[i].Count;
                }
            }
            numItem.MaxNum = numItemMax;
            numItem.MinNum = numItemMin;
            numItem.Num0_9 = new NumSort(al[0], countNum[0], minNum[0], maxNum[0]);
            numItem.Num10_19 = new NumSort(al[1], countNum[1], minNum[1], maxNum[1]);
            numItem.Num20_29 = new NumSort(al[2], countNum[2], minNum[2], maxNum[2]);
            numItem.Num30_39 = new NumSort(al[3], countNum[3], minNum[3], maxNum[3]);
            numItem.Num40_49 = new NumSort(al[4], countNum[4], minNum[4], maxNum[4]);
            numItem.Num50_59 = new NumSort(al[5], countNum[5], minNum[5], maxNum[5]);
            numItem.Num60_69 = new NumSort(al[6], countNum[6], minNum[6], maxNum[6]);
            numItem.Num70_79 = new NumSort(al[7], countNum[7], minNum[7], maxNum[7]);
            numItem.Num80_89 = new NumSort(al[8], countNum[8], minNum[8], maxNum[8]);
            numItem.Num90_99 = new NumSort(al[9], countNum[9], minNum[9], maxNum[9]);
            return numItem;
        }
    }

[ASP.NET MVC]MVC3.0 JQuery异步加载分页数据

 那么我这里简单实现了这个功能,跟大家分享下。

  ①:首先数据库准备好分页的存储过程,例如:P_FindByPage @page;

  ②:看页面源码    

@model System.Data.DataTable
@section head{

}


@foreach (System.Data.DataRow dr in Model.Rows)
{

}

……………….
……………..

  

  ③:Controller内容

  

//查看第一页,我这里数据存在脏读,所以分为两个方法,第一页,和其他页面,其实完全可以写成一个方法的
[OutputCache(Duration = 300)]
public ActionResult AllSKCOrder()
{
if (HttpContext.Session["currentUser"] == null)
{
return RedirectToAction(“Index/”);
}
return View(DbHelperSQL.ALLSKCOrder(“P_AllSKCOrder”, 0));//执行过程
}
//查看其他页面,这里你返回JSON还是String,还是Partview自己控制了,我这里直接组合好tr,前台直接追加了,这个操作亦可以在前台操作
[OutputCache(Duration = 300)]
public string AllSKCOrderByPage(int page)
{
page = page * 50;
if (Request.IsAjaxRequest())
{
DataTable dt = DbHelperSQL.ALLSKCOrder(“P_AllSKCOrder”, page);
StringBuilder sb = new StringBuilder();
foreach (DataRow dr in dt.Rows)
{
sb.Append(string.Format(“
{0}

“,dr["id"].ToString()));
}
return sb.ToString();
}
else return null;
}

本站部分内容转自网络,如果侵害到您的权利,请及时联系我


[ASP.NET MVC]ASP.NET页面间数据传递的方法

本文我们将讨论的是asp.net页面间数据传递的几种方法,对此希望能帮助大家正确的理解ASP.NET页面间数据传递的用处以及便利性。

引言
Web页面是无状态的, 服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留。在用ASP.NET 设计开发一个Web系统时,遇到一个重要的问题是如何保证数据在页面间进行正确、安全和高效地传送,Asp.net 提供了状态管理等多种技术来解决保存和传递数据问题,以下来探讨。NET 下的解决此问题的各种方法和各自的适用场合。

ASP.NET页面间数据传递的各种方法和分析
1.使用Querystring 方法
QueryString 也叫查询字符串,这种方法将要传递的数据附加在网页地址(URL)后面进行传递。如页面A.aspx 跳转到页面B.aspx,可以用Request.Redirect(”B.aspx?参数名称=参数值”)方法,也可以用超链接,页面跳转后,在目标页面中可用Ruquest["参数名称"]来接收参数。使用QuerySting 方法的优点是实现简单, 不使用服务器资源;缺点是传递的值会显示在浏览器的地址栏上,有被篡改的风险,不能传递对象,只有在通过URL 请求页时查询字符串才是可行的。
2.利用隐藏域
隐藏域不会显示在用户的浏览器中, 一般是在页面中加入一个隐藏控件, 与服务器进行交互时把值赋给隐藏控件并提交给下一页面。隐藏域可以是任何存储在网页中的与网页有关的信息的存储库。使用隐藏域存入数值时用:hidden 控件。value=数值,取出接收数值时用:变量=hidden 控件。value。使用隐藏域的优点是实现简单, 隐藏域是标准的HTML 控件,不需要复杂的编程逻辑。隐藏域在页上存储和读取,不需要任何服务器资源,几乎所有浏览器和客户端设备都支持具有隐藏域的窗体。缺点是存储结构少,仅仅支持简单的数据结构,存储量少,因为它被存储在页面本身,所以无法存储较大的值,而且大的数据量会受到防火墙和代理的阻止。
3.ViewState
ViewState 是由ASP.NET 页面框架管理的一个隐藏的窗体字段。当ASP.NET 执行某个页面时,该页面上的ViewState 值和所有控件将被收集并格式化成一个编码字符串, 然后被分配给隐藏窗体字段的值属性。使用ViewState 传递数据时可用:ViewState [" 变量名"]=数值,在取出数据时用:变量=ViewState["变量名"]。使用ViewState 的优点是:在对同一页的多个请求间自动保留值,不用服务器端资源,实现简单,视图状态中的值经过哈希计算和压缩,并且针对Unicode 实现进行编码,其安全性要高于使用隐藏域;缺点是因为ViewState 存储在页面本身,因此如果
存储较大的值,用户显示页和发送页时的速度可能会减慢。虽然视图状态以哈希格式存储数据,但它仍可以被篡改。
4.使用Cookie
Cookie 可以在页面之间传递少量信息, 可以存储在客户端的文本文件中,也可存储在客户端的内存中。Cookie 方法适用于存储少量页面中经常改动的信息, 如为登陆过的网站保存登陆用户名,为用户输入提供方便,还有在一些用户自定义项目上保存用户的个性化设置。使用Cookie传递数据时可用:Response.Cookies["键名"]=键值;取出数据用:变量名=Request.Cookies["键名"]。使用Cookie 优点是:Cookie 存储在客户端, 不使用服务器资源,实现简单,可配置到期时间。缺点是:可以存储的数据量比较少,由于Cookie 并不被所有的浏览器支持,而且还可能被用户禁止或删除,所以不能用于保存关键数据。另外,Cookie 保存的形式是简单的明文文本,在它里面不宜保存敏感的、未加密的 数据。
5.使用application 变量
使用Application 变量也可以实现页面间的传值,Application变量是全局性的,所有用户共享一个Application 变量,一旦定义,它将影响到程序的所有部分。如果想在整个应用程序范围使用某个变量值Application 对象将是最佳的选择。存入数据时, 把值添加到Application 变量里:Application["变量名"]=数值;取出数据用:变量=Application["变量名"];在不需要使用该Application 时,要显式清除它:Application["量名"]=null。
Application 优点:易于使用,全局范围。可供应用程序中的所有页来访问。缺点:若保存数据的服务器端进程被损坏(如因服务器崩溃、升级或关闭而损坏),那么数据就会丢失,所以利用Application 一定要有保底的策略;占用服务器端的内存,这可能会影响服务器的性能以及应用程序的可伸缩性。
6.使用session 变量
Session 对象可以用来存储需要维护的指定对话的信息,不同的客户端生成不同的Session 对象。Session 用于存储特定于单独会话的短期信息。Session 的使用方法和格式与Application 相同。
优点:易于实现,并且提供较高的安全性和持久性,可以应对IIS 重启和辅助进程重启,可在多进程中使用。缺点是耗用服务器端的内存。所以不要存储大量的信息。Session 最常见的用途是与Cookie 一起向Web 应用程序提供用户标识功能,Session也可用于不支持Cookie 的浏览器。但是,使用无Cookie 的Session 需要将会话标识符放置在查询字符串中,同样会遇到本文在查询字符串一节中陈述的安全问题。
7.使用类的静态属性
这种方法是利用类的静态属性实现两个页面间的值传。定义一个包含静态属性的类;将要传送的值赋给静态属性;目标页面中可以通过静态属性获得源页面中要传的值。
优点是可以方便传送多个数据,缺点是需要额外编程,增加程序设计的工作量,占用服务器内存。
8.使用Server.Transfer
通过Server.Transfer 方法把执行流程从当前的ASPX 文件转到同一服务器上的另一个ASPX 页面的同时,可保留表单数据或查询字符串,做法是把该方法的第二个参数设置成True,在第一个页面用Server.Transfer(”目标页面名。 aspx”,true);目标页面取出数据用:Ruquest.Form["控件名称"]或Ruquest.QueryString["控件名称"]。Asp.net2.0 中还可以这样来用,代码如下:
PReviousPage pg1;
pg1=(PreviousPage)Context.Handler;
Response.Write(pg1.Name);
说明: 此段代码用在目标页面中取出传递的值,Previous- Page 是原页面的类名,Name 是在原页面定义的属性,需要传递的数据存入到此属性中。
使用这种方法, 需要写一些代码以创建一些属性以便可以 在另一个页面访问它, 可以在另一个页面以对象属性的方式来 存取数值,这个方法在页面间值传递中是特别有用的,这种方法 不但简洁,同时又是面向对象的。
9.Cache
Cache 具有强大的数据操作功能, 以键值对集合的形式存 储数据,可以通过指定关键字来插入和检索数据项。它的基于依 赖性的终止功能, 使它能够精确控制如何并及时更新和消除缓 存中的数据。它可以内部进行锁定管理,不需要象Application 对象那样使用Lock()和Unlock()方法进行串行化管理。缺点是使用 方法较复杂,使用不当反而降低性能。
不同页面跳转情况下可采用的传值方法
1.情况一:源页面可以跳转到目标页面,源页面传递数据给目标页面
使用查询字符串, 将少量信息从一页传输到另一页以及不 存在安全性问题时,是一个简单常用的方法;使用Server.Transfer方法,可传递表单数据或查询字符串到另一个页面,还可以 保存初始页的HttpContext, 当目标页和源页面在同一个服务器 时,可以用此方法。
2.情况二:页面传递数值给自身页面
即在对同一页的多个请求间保留值, ViewState 属性可提供具有基本安全性的功能。也可用隐藏域,存储少量回发到自身或另一页的页信息时使用,不考虑安全性问题时使用。
3.情况三:源页面传递数值给目标页面,而源页面不能直接连接到目标页面。
有多个方法,具体用哪个要看具体情况。
Application: 存储由多个用户使用且更改不频繁的全局信息,此时安全性不成为问题。不要存储大量的信息。Session:存储特定于单独会话的短期信息,并且需要较高的安全性。不要在会话状态中存储大量的信息。需要注意,将为应用程序中每一会话的生存期创建并维护会话状态对象。在支持许多用户的应用程序中, 这可能会占用大量服务器资源并影响可缩放性。
Cookie:当您需要在客户端存储少量信息以及不存在安全性问题时使用。类的静态属性,方便传送多个数据。
Cache :对象用于单个用户、一组用户或所有的用户。可以为多个请求长时间、高效率的保存数据。上述几个方法, 不仅用于情况三, 前面两种情况都可以使用,只是没有必要时尽量少用,否则会造成资源浪费或增加程序的复杂性。
来源 :华军资讯