皮皮网

【用电脑制作相册源码】【小爱源码分享】【android源码仓库下载】手机 科学计算器 源码_手机 科学计算器 源码怎么用

来源:开源lrp源码java 时间:2024-11-23 12:18:37

1.如何用C语言编写一个科学计算器
2.用JAVA编写的手机算器科学计算器源代码
3.如何使用JoikuSpotPremium?

手机 科学计算器 源码_手机 科学计算器 源码怎么用

如何用C语言编写一个科学计算器

       ç”¨æ ˆ 就可以办到了。。。这个很详细的, lz 随便输入一个表达式,中间的计算过程全部输出了,lz试两个 就知道怎么回事了。 #include <stdio.h>

       #include <stdlib.h>

       #include <string.h>

       #define MAXSIZE ;

       typedef struct

       {

        char data[];

        int top;//头地址

        int base;//基地址

        int length;//长度

       }Stack;

       void init(Stack *st)//初始化栈

       {

        st->base=0;

        st->top=0;

        st->length=0;

       }

       int isEmpty(Stack *st)

       {

        int n=0,top,base;

        top =st->top;

        base =st->base;

        if(top==base)

        {

        return 1;

        }

        return n;

       }

       int isFull(Stack *st)

       {

        int n=0,top,base;

        top =st->top;

        if(top>=)

        {

        return 1;

        }

        return n;

       }

       char getTop(Stack *st)// 返回top值,不改变栈的结构

       {

        char n;

        if(isEmpty(st))

        {

        printf("栈为空\n");

        return 0;

        }

        int positon= st->top-1;

        n= st->data[positon];//取出数据;

        return n;

       }

       char pop(Stack *st)// 出栈,返回

       {

        char n;

        if(isEmpty(st))

        {

        printf("栈为空\n");

        return 0;

        }

        int positon= st->top-1;

        n= st->data[positon];//取出数据;

       st->top--;

        st->length--;

        st->data[positon]='\0';//消除数据

        return n;

       }

       void push(char n,Stack *st)//入栈

       {

        int positon ;

        if(isFull(st))

        {

        printf("栈满\n");

        }

        else

        {

        positon= st->top;//获取位置

       st->data[positon]=n;//存入数据

       st->top++;//改变位置

        }

       }

       void show(Stack *m1)//输出栈中的数据

       {

        int top,base;

        top=m1->top;

        base=m1->base;

        while(top>base)

        {

        printf("%c,",m1->data[--top]);

        }

        printf("\n");

       }

       int isOperate(char temp)//是否是操作符

       {

        if(temp=='+'||temp=='-'||temp=='*'||temp=='/'||temp=='('||temp==')'||temp=='#')

        {

        return 1;

        }

        return 0;

       }

       int isValue(char temp)//是否是数值

       {

        if(temp>='0'&&temp<='9')//

        {

        return 1;

        }

        else

        {

        return 0;

        }

       }

       int isAvail(char temp)//是否有效字符

       {

        if(isOperate(temp)||isValue(temp))//如果temp既不是操作符和数值的话,则它是非法的

        {

        return 1;

        }

        return 0;

       }

       int detect(char temp)//搜索矩阵位置

       {

        int i=0;

        char oper[7]={ '+','-','*','/','(',')','#'};

        for(i=0;i<7;i++)

        {

        if(temp==oper[i])

        {

        return i;

        }

        }

       }

       char Priority(char temp,char optr)//判断优先级

       {

        /**//

*

        + - * / ( ) #

        1 2 3 4 5 6 7

        + 1 < < < < > > >

        - 2 < < < < > > >

        * 3 > > < < > > >

        / 4 > > < < > > >

        ( 5 > > > > > = 0

        ) 6 < < < < = 0 >

        # 7 < < < < > 0 =

        */

        int row ,col;

        char priority[7][7]={ /**//* + - * / ( ) # */

        { '<','<','<','<','>','>','>'},

        { '<','<','<','<','>','>','>'},

        { '>','>','<','<','>','>','>'},

        { '>','>','<','<','>','>','>'},

        { '>','>','>','>','>','=','>'},

        { '<','<','<','<','=','0','>'},

        { '<','<','<','<','>','<','='},

        };

       row = detect(temp);//找出对应的矩阵下标;

        col = detect(optr);

       // printf("%d,%d",row,col);

       //优先级存储在一个7x7的矩阵中,对应关系上图;

       return priority[row][col];

       }

       char evaluate(int a,int b,char oper)

       {

        switch(oper)

        {

        case '+': return a+b+'0';

        case '-': return a-b+'0';

        case '*': return a*b+'0';

        case '/': return a/b+'0';

        default : return 0+'0';

        }

       }

       int calculateExpress(char *express)//计算表达式

       {

        int result=0;

        int a,b;

        // char oper,result;

       Stack OPTR,OPND;//OPTR存储操作符,OPND操作数值

        init(&OPTR);

        init(&OPND);

        push('#',&OPTR);//默认第一个位'#'

       ////////////////////-算法-////////////////////////////

        while(*express!='\0')

        {

        char temp;

        temp= *(express);

        printf("---------------------------------\n");

        printf("当前的符号为%c\n",temp);

        if(isAvail(temp))//是否是有效字符

        {

        if(isOperate(temp) )//输入的是操作符

        {

        char oper,result;

        char optr = getTop(&OPTR);//栈中top位的操作符

        printf("栈顶操作符位:%c\n",optr);

        char prior = Priority(temp,optr);//判断优先级

        switch(prior)

        {

        case '>':

        push(temp,&OPTR);

        printf("将符号位%c入栈\n",temp);

        express++;

        break;

        case '<':

        //int a,b;

       //char oper,result;

       a=pop(&OPND)-'0';//存在栈中的都是char字符

        b=pop(&OPND)-'0';

        oper=pop(&OPTR);

        result=evaluate(b,a,oper);//出栈一个操作符,计算结果

        //printf("%d",result-'0');

        push(result,&OPND);//结果入OPND

        printf("%d%c%d结果为:%d\n",b,oper,a,result-'0');

        break;

        case '=':

        //消除括号

        pop(&OPTR);

        printf("消除括号\n");

        express++;

        break;

        }

        }

        if(isValue(temp))//输入的是数值

        {

        push(temp,&OPND);//将数值位入栈;

        express++;

        printf("将数值%c压入栈\n",temp);

        //show(&OPND);

        }

        }

        else //表达式中有非法字符

        {

        printf("表达式中有非法字符\n");

        exit(-1);//退出程序

        }

       }

       // show(&OPND);

       // show(&OPTR);

        return getTop(&OPND)-'0';

       }

       void inputExpress(char *express)//输入表达式

       {

        int length=0;

        printf("请输入一个表达式:");

        scanf("%s",express);

        int len =strlen(express);

        express[len]='#';//表达式最后一位默认为'#';

        express[len+1]='\0';

       }

       void output(char *express,int result)//输出表达式

       {

        int i=0;

        printf("----------------------------------------\n表达式:");

        while(express[i]!='#')

        {

        printf("%c",express[i]);

        i++;

        }

        printf("=%d\n",result);

       }

       int main()

       {

        char express[];//表达式

        int result =0;

        inputExpress(express);//输入表达式

       result = calculateExpress(express);//计算表达式;

       output(express,result); //输出表达式

       //、、、、、、、、、、、、、测试优先级。

        /**//

*

        char m='7' ;

        m=Priority('+','*');

        printf("优先级为%c",m);

        int m=evaluate(5,6,'m');

        printf("%d",m);

        */

        return 0;

       }

用JAVA编写的科学计算器源代码

       这个你参考一下。

       import javax.swing.*;

       //import javax.swing.event.*;

       import java.awt.*;

       import java.awt.event.*;

       //计算器显示结果的科学窗体

       class Result extends JPanel

       {

        JTextField text = new JTextField("0"); //text先是输入和结果

        Result()

        {

        text.setHorizontalAlignment(SwingConstants.RIGHT); //讲输入的数字或得到的结果在text的右边显示

        text.setEnabled(false); //文本框不能编辑

        setLayout(new BorderLayout()); //设定布局管理器边框布局

        add(text, BorderLayout.CENTER); //text放置在窗体的中间

        }

       }

       //计算器数字按钮定义面板

       class Number_Key extends JPanel

       {

        JButton zero = new JButton("0");//数字键0

        JButton one = new JButton("1");//数字键1

        JButton two = new JButton("2");//数字键2

        JButton three = new JButton("3");//数字键3

        JButton four = new JButton("4");//数字键4

        JButton five = new JButton("5");//数字键5

        JButton six = new JButton("6");//数字键6

        JButton seven = new JButton("7");//数字键7

        JButton eight = new JButton("8");//数字键8

        JButton nine = new JButton("9");//数字键9

        JButton plus = new JButton("+");

        JButton sub = new JButton("-");

        JButton mul = new JButton("*");

        JButton div = new JButton("/");

        JButton equal = new JButton("=");

        JButton ce = new JButton("ce");//置零键

        JButton point = new JButton(".");

        JButton tzero = new JButton("");

        Number_Key()

        {

        setLayout(new GridLayout(6, 3, , ));//定义布局管理器为网格布局

        //添加各个按钮键

        add(seven);

        add(eight);

        add(nine);

        add(four);

        add(five);

        add(six);

        add(one);

        add(two);

        add(three);

        add(zero);

        add(tzero);

        add(plus);

        add(sub);

        add(mul);

        add(div);

        add(point);

        add(equal);

        add(ce);

        }

       }

       //计算器主类

       class sakura extends JFrame implements ActionListener

       {

        Result result = new Result();//定义text的面板

        Number_Key number_key = new Number_Key();//定义按钮面板

        //当点击按钮+、-、计算机科*、器源用电脑制作相册源码/时,码手com = true

        boolean com = false;

        //当i=0时说明是学计小爱源码分享我们第一次输入,字符串sum不会累加

        int i = 0;

        //存放text的源码用内容

        String sum = "";

        //存放点击按钮+、-、手机算器*、科学/之前的计算机科数值

        double total = 0;

        //+、-、器源*、码手/的学计android源码仓库下载代号分别为1,2,源码用3,手机算器4

        int symbol = 0;

        sakura()

        {

        super("Calculator");//设定标题

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设定关闭窗体时退出程序

        JPanel pane = new JPanel();//定义主面板

        pane.setLayout(new BorderLayout());

        pane.add(result,多人赛车游戏源码 BorderLayout.NORTH);

        pane.add(number_key, BorderLayout.SOUTH);

        number_key.one.addActionListener(this);//对1按钮添加监听事件

        number_key.two.addActionListener(this);//对2按钮添加监听事件

        number_key.three.addActionListener(this);//对3按钮添加监听事件

        number_key.four.addActionListener(this);//对4按钮添加监听事件

        number_key.five.addActionListener(this);//对5按钮添加监听事件

        number_key.six.addActionListener(this);//对6按钮添加监听事件

        number_key.seven.addActionListener(this);//对7按钮添加监听事件

        number_key.eight.addActionListener(this);//对8按钮添加监听事件

        number_key.nine.addActionListener(this);//对9按钮添加监听事件

        number_key.zero.addActionListener(this);//对0按钮添加监听事件

        number_key.ce.addActionListener(this);//对置零按钮添加监听事件

        number_key.plus.addActionListener(this);//对+按钮添加监听事件

        number_key.equal.addActionListener(this);//对=按钮添加监听事件

        number_key.sub.addActionListener(this);//对-按钮添加监听事件

        number_key.mul.addActionListener(this);//对*按钮添加监听事件

        number_key.div.addActionListener(this);//对/按钮添加监听事件

        number_key.tzero.addActionListener(this);//对按钮添加监听事件

        number_key.point.addActionListener(this);//对.按钮添加监听事件

        setContentPane(pane);

        pack();//初始化窗体大小为正好盛放所有按钮

        }

        //各个按钮触发的事件

        public void actionPerformed(ActionEvent e) {

        /*如果是点击数字按钮那么先要判断是否在此之前点击了+、-、*、/、银行存钱源码大全=,如果是那么com=true

        * 如果没有com= false;或者是否点击数字键,如果是i = 1,如果没有 i = 0;

        **/

        if (e.getSource() == number_key.one)

        {

        if (com || i == 0)

        {

        result.text.setText("1");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        result.text.setText(sum + "1");

        }

        }

        else if (e.getSource() == number_key.two)

        {

        if (com || i == 0)

        {

        result.text.setText("2");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        result.text.setText(sum + "2");

        }

        }

        else if (e.getSource() == number_key.three)

        {

        if (com || i == 0)

        {

        result.text.setText("3");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        result.text.setText(sum + "3");

        }

        }

        else if (e.getSource() == number_key.four)

        {

        if (com || i == 0)

        {

        result.text.setText("4");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        result.text.setText(sum + "4");

        }

        }

        else if (e.getSource() == number_key.five)

        {

        if (com || i == 0)

        {

        result.text.setText("5");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        result.text.setText(sum + "5");

        }

        }

        else if (e.getSource() == number_key.six)

        {

        if (com || i == 0)

        {

        result.text.setText("6");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        result.text.setText(sum + "6");

        }

        }

        else if (e.getSource() == number_key.seven)

        {

        if (com || i == 0)

        {

        result.text.setText("7");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        result.text.setText(sum + "7");

        }

        }

        else if (e.getSource() == number_key.eight)

        {

        if (com || i == 0)

        {

        result.text.setText("8");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        result.text.setText(sum + "8");

        }

        }

        else if (e.getSource() == number_key.nine)

        {

        if (com || i == 0)

        {

        result.text.setText("9");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        result.text.setText(sum + "9");

        }

        }

        /*对于0这个按钮有一定的说法,在我的程序里不会出现如这样的情况,我加了判断条件就是

        * 如果text中的数值=0就要判断在这个数值中是否有.存在?如果有那么就在原来数值基础之上添

        * 加0;否则保持原来的数值不变

        */

        else if (e.getSource() == number_key.zero)

        {

        if (com || i == 0)

        {

        result.text.setText("0");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        if (Float.parseFloat(sum) > 0 || Float.parseFloat(sum) < 0)

        {

        result.text.setText(sum + "0");

        }

        else

        {

        if (sum.trim().indexOf(".") == -1)

        {

        result.text.setText(sum);

        }

        else

        {

        result.text.setText(sum + "0");

        }

        }

        }

        }

        else if (e.getSource() == number_key.ce)

        {

        result.text.setText("0");

        i = 0;

        com = true;

        }

        else if (e.getSource() == number_key.tzero)

        {

        if (com || i == 0)

        {

        result.text.setText("0");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        if (Float.parseFloat(sum) > 0 || Float.parseFloat(sum) < 0)

        {

        result.text.setText(sum + "");

        }

        else

        {

        if (sum.trim().indexOf(".") == -1)

        {

        result.text.setText(sum);

        }

        else

        {

        result.text.setText(sum + "");

        }

        }

        }

        }

        /*本程序不会让一个数值中出现2个以上的小数点.具体做法是:判断是否已经存在.存在就不添加,

        * 不存在就添加.

        */

        else if (e.getSource() == number_key.point)

        {

        if (com || i == 0)

        {

        result.text.setText("0.");

        com = false;

        i = 1;

        }

        else

        {

        sum = result.text.getText();

        if (sum.trim().indexOf(".") == -1)

        {

        result.text.setText(sum + ".");

        }

        else

        {

        result.text.setText(sum);

        }

        }

        }

        //获得点击+之前的数值

        else if (e.getSource() == number_key.plus)

        {

        com = true;

        i = 0;

        total = Double.parseDouble(result.text.getText());

        symbol = 1;

        }//获得点击-之前的数值

        else if (e.getSource() == number_key.sub)

        {

        com = true;

        i = 0;

        total = Double.parseDouble(result.text.getText());

        symbol = 2;

        }//获得点击*之前的数值

        else if (e.getSource() == number_key.mul)

        {

        com = true;

        i = 0;

        total = Double.parseDouble(result.text.getText());

        System.out.println(total);

        symbol = 3;

        }//获得点击/之前的数值

        else if (e.getSource() == number_key.div)

        {

        com = true;

        i = 0;

        total = Double.parseDouble(result.text.getText());

        symbol = 4;

        }

        else if (e.getSource() == number_key.equal)

        {

        switch (symbol)

        {

        case 1 ://计算加法

        {

        double ad =

        total + Double.parseDouble(result.text.getText());

        result.text.setText(ad + "");

        i = 0;

        sum = "";

        break;

        }

        case 2 ://计算减法

        {

        double ad =

        total - Double.parseDouble(result.text.getText());

        result.text.setText(String.valueOf(ad));

        i = 0;

        sum = "";

        break;

        }

        case 3 ://计算乘法

        {

        double ad =

        total * Double.parseDouble(result.text.getText());

        result.text.setText(ad + "");

        i = 0;

        sum = "";

        break;

        }

        case 4 ://计算除法

        {

        double ad =

        total / Double.parseDouble(result.text.getText());

        result.text.setText(ad + "");

        i = 0;

        sum = "";

        break;

        }

        }

        System.out.println(com);

        }

        }

        public static void main(String[] args)

        {

        sakura ww = new sakura();

        ww.setVisible(true) ;

        }

       }

如何使用JoikuSpotPremium?

       ä¸‰ã€å¡žç­ç³»ç»Ÿè½¯ä»¶å®‰è£…指南

       â€œæ‰‹æœºæ¢çš„再快,不如软件装的快。” 这是使用智能手机最有价值的地方。现在通讯产品迅速发展,经常换手机是不可能的,但是智能手机可以用软件来扩充其功能,延长使用寿命。如果你使用塞班智能手机,那么学会安装软件就是玩机最重要的基本功。

       å¡žç­æ‰‹æœºå¯å®‰è£…的软件分为两大类,Symbian应用程序,后缀名为SIS;和Kjava程序,后缀名JAR。安装软件前,我们一定要为机器配置一张存储卡,容量当然越大越好。最少应在M以上吧。安装软件,主要有两种方法,一是通过数据线、蓝牙、读卡器等方式,将安装文件(SIS或JAR)传送到手机内存(C盘)或存储卡(E盘)上,然后用资源管理器选中直接安装。安装过程中会几次提示,我们依次确定即可,要注意安装过程中程序会问是选择手机存储还是存储卡存储,建议除了一些必备程序如SELEQ之外,其它的应用程序全部安装在存储卡上,这样可以省手机存储空间。用这种方法安装的软件如果不再使用,可以在“程序管理”中删除,找到这个软件后按C键即可删除。第二种安装软件的方法就是“直接拷贝”法,这是一种“绿色”的安装方式,本讲座后面会具体谈到这一方法。有些软件安装后可能还需要注册、破解或汉化后才能正常使用。具体方法这里不便详述。

       å››ã€å¡žç­ç³»ç»Ÿè½¯ä»¶å®‰è£…注意事项

       åœ¨å®‰è£…SIS文件时,系统往往会在C:\NOKIA\INSTALL目录下保存一个安装副本,以备安装时遇到不可预见的错误(如突然没电)或者用户中断时能够恢复系统安全,这也就是很多情况下,安装大软件时容易出现“存储空间已满”的原因,因此我们一定要保持C盘有1M以上的空余空间。另外使用SeleQ等第三方软件进行SIS安装也可以避免产生这个副本。还要注意安装在E盘的软件除了在E:\System\Apps\目录下保存软件主体之外,往往会在C:\System\Apps\同名目录下创建一些配置文件。

       åœ¨Symbian 9.0(S 第三版)中,某个软件的不同文件会存放在不同目录中。可执行文件(.exe,过去的.app)被统统放在\sys\bin下,资源文件被统统放在\resource下,每个软件的所有私有数据被放在\private\<软件安全号>目录下,其他目录是供所有软件共享的目录。其中\sys\bin和\resource用户不能更改,可执行文件只能由安装程序复制进去。\private\<软件安全号>只能由软件安全号所对应的软件访问。

       æœ€åŽå»ºè®®å¤§å®¶å®‰è£…在塞班S上安装第一款软件应选择一款第三方的资源管理器,比如SeleQ 或fileman,只要用这类软件你才能查看到S的所有盘符及文件夹。

       å°çŸ¥è¯†ï¼šS手机常见服务命令揭密

       å¾ˆå¤šæ‰‹æœºéƒ½æœ‰ä¸€äº›ç§˜å¯†çš„服务命令,服务命令就是在待机状态下输入某个代码就会激活某个隐藏的功能。比如大家熟悉的*##,可查看手机IMEI号和其他信息。其他还有:

       *## 查看手机软件版本或者选择默认语言。

       *## 查看蓝牙的MAC地址

       *## 重设手机,相当于格式化手机

       *## 返回电话原厂状态,会保留所有资料

       å°çŸ¥è¯†ï¼šå¡žç­ç³»ç»Ÿçš„文件关联问题

       å°†C:\System\Recogs\ :这个活页夹中

       çš„.mdl文件是关联文件,文件中说明了相应后缀名的文件应该用什么程序打开,比如

       recmp3go.mdl就是mp3go在文件管理软件或者收件箱中直接打开mp3的说明文件,如果

       è¿™ä¸ªæ–‡ä»¶è¢«åˆ é™¤é‡æ–°å¯åŠ¨åŽï¼Œmp3将不能直接打开,只能在mp3go界面中打开。因为

       .mdl文件在手机启时会自动加载,如果你不希望在文件管理软件或者收件箱中直接打开相关文件,请把相关的.mdl文件删除或者移动到其它目录以节约运行内存。也有一些程序通过.mdl文件来运行自动运行,比如eLoader就是World Clock Pro和Extended 。

       ç¬¬ä¸‰è®² ROM的升级(刷机)实例

       å¦‚果你对手机DIY有着浓厚的兴趣,那么单纯通过安装软件来增强手机功能就不能满足你的需要了。好在大多数塞班智能手机都能对存放操作系统的ROM空间进行修改和升级(刷机、打补钉等)。刷机有着许多独特的用途,比如改变手机及语言版本、增减系统功能、增加系统可用空间等,是体味智能手机乐趣的重要途径。下面以西门子SX1为例具体谈谈刷机的几种用途,其他品牌的手机也大同小异。

       ä¸€ã€ 升级系统或改变语言版本

       å¡žç­æ‰‹æœºåŸºæœ¬ä¸Šåªèƒ½é€šè¿‡æ•°æ®çº¿è¿žæŽ¥ç”µè„‘后进行升级,升级前有一些基本的注意事项,比如确定ROM版本的匹配;保证可靠供电;真正弄清楚升级的具体要求和步骤;用来升级的电脑要运行稳定等。刷机是有一定危险的,刷坏了可能就要返修了。但按正常方法操作的话,一般也没什么问题,大家在操作时要“胆大心细”。刷机所用的电脑推荐用装有电池的笔记本电脑,操作系统推荐使用win2k/xp,可杜绝大多数意外中断,另外要保证升级前将手机电池充满。并注意拔下电脑上其他USB设备。整个过程通常需要分钟左右。

       ä½œå¥½å‡†å¤‡åŽï¼Œæˆ‘们就需要将手机关机并用数据线连接电脑了。按住中央操纵杆(向下按),同时按开机按钮。机器亮起来,进入升级模式后就可以松开手了,这时windows会显示找

       åˆ° usb drive,并要求你安装驱动程序,点击浏览后定位到Siemens_Sx1swup.inf和Siemens_SX1swup.sys所在的目录,完成驱动程序的安装,注意这时安装的驱动程序是特殊的“刷机驱动”,与普通用来进行数据同步的驱动是不一样的。安装完刷机驱动后,我们就可以运行版本升级程序进行升级操作了。通常需要先进行简单的设置,比如选择 USB 0端口,然后点击“START”按钮,再按提示一步步按下确认按钮即可。完成后拔下数据线,再重新启动手机,你会发现版本已经成功升级了。上面的升级步骤对升级手机系统版本和改变手机的语言版本都是适用的。比如通过上面的升级步骤我们可以将水货英文版的SX1 升级为简体中文版。如果升级失败,也不用太者急,通常是版本匹配有问题,我们可以重新用其他版本的升级程序进行升级。比如使用所谓的“强刷版”,通常都能升级成功的。

       äºŒã€ 增强系统功能(打补钉)实例

       è¥¿é—¨å­SX1这款数年前推出的塞班智能手机,之所以至今还有强大的生命力,一个重

       è¦åŽŸå› å°±æ˜¯å¯èƒ½é€šè¿‡â€œæ‰“补钉”来增强系统的功能。我们可以使用Apatcher等专门的软件工具来合成补丁文件,然后进行刷机。

       é¦–先我们要准备好以下工具软件:Apathcer、Winswup刷机驱动和版刷机程序。

       æŽ¥ç€è¿è¡ŒApathcer,第一个标签页就是编写代码的窗口,从网上获取所需要的补丁代码,复制相关代码到apatcher的窗口中,如果需要把多个补丁放在一起,可以继续复制其他补丁到这个窗口。代码编写的语法规则是,代码以replace开始,每个代码一行,如果代码太长会自动换行可以插入任意个空白行. 可以添加任意注释,注释以英文的引号 ";" 开始,可以使用中文。选好补丁后,就可以保存补丁了。在file菜单中选择save就可以保存了,通过这种方式,我们可以把多个补丁合到一个补丁文件中。

       æŽ¥ç€è¿è¡ŒWinswup刷机程序,需要注意的是,刷之前要把刷机程序改名为Siemens Sx1 SVN (Admin Mod).exe,否则apatcher无法识别刷机程序从而无法正确的打上补丁,第一次使用需要设置一下,serial config中Switch USB Serial改为USB only,USB中设置为USB0

       æœ€å·¦è¾¹çš„窗口可以选择刷哪些模块,具体后面再谈。

       å†æ‰“å¼€apathcer ,打开刚才做好的补丁文件,选择 apply patch for ram,完成后apatcher 会提示 all done。然后切换到Winswup,点start 看到提示,关闭手机,连上数据线,进入升级模式(注意要事先装好刷机驱动程序)。

       åœ¨ä¸Šé¢çš„刷机程序中,我们可以选择刷哪些模块。这里对各模块功能进行简单说明:

       Core: 核心模块,包括系统启动的最基本的程序,升级模式就在这个模块中。

       å¯¹äºŽè¿™ä¸ªæ¨¡å—,只需要在改变系统版本的时候选择。如版升版,英文版升中文版,其它情况下刷机就别选了,没有任何作用还平白增加了风险。

       Core-img(Z1) Var(Z2):对应系统的Z盘,绝大部分的系统文件都在这一部分。基本上这是每次刷机的必刷部分,因为目前的补丁基本上都是通过修改Z盘的文件来实现的。

       IBoot:包含了一些诊断程序。可以在升级模式下,通过特殊的软件对系统进行诊断。这一部分与Core同样处理。

       ROLF:对应于系统的A盘,这一部分在刷A盘时要选上,对于平时打补丁不需要选择这一部分。

       Liff:对应系统C盘,选中这一部分刷机,效果相当于格式化C盘。我们平时刷机,一般是不需要格C盘的,这样可以保留所有的设置而又能应用补丁。所以这个部分没有必要的话就不选了。如果在刷机时要格机,或刷机后要格机,可以选择这个部分。刷完后就相当于格机了。也不需要再手动来格机了。另外单独选择这个部分刷机可以实现格机的目的,可以解决开机后自动格机的问题。

       ä»¥ä¸Šå‡ ä¸ªå‡çº§æ¨¡å—,大家可根据具体情况来组合选择。另外我们还有主要所谓“集成版”和“纯净版”的选择,一般而言,“集成版”就是已经集成了常用补丁的刷机程序,而“纯净版”可以理解未加任何修改的官方升级程序,我们可以自行添加补丁。

       ä¸‰ã€è¥¿é—¨å­SX1运行LINUX系统

       åœ¨å¡žç­æ‰‹æœºä¸Šå±…然可以运行Linux系统?这种近似疯狂的想法可以在西门子SX1上得以部分实现。我们知道,Linux是一个优秀的跨平台操作系统,以“开源”和“免费”为特色。使用Linux可以让你真正掌控SX1,而不被S限制住手脚。用Linux意味着这款手机的每一部分硬件都是可以被控制的。不过在SX1上使用Linux驱动是最大的困难,因此直到现在,在SX1上使用LINUX也没有太大的实际意义,仅仅只能运行而已。不过这种大跨幅改变手机操作系统的想法是很有意义的,我们可以想象一下,如果今后有一天某个厂家推出一款可以同时运行 Windows Mobile\PALM\Linux\ Symbian这四大操作系统的手机,该会引起多大的震撼。好,闲话少说,下面让我们具体看看如何在SX1上运行LINUX系统。

       é¦–先下载所需软件,一共有四个,分别是ghost 8.3版,gho格式root.tar.bz2镜像,ubootloader.zip,Paragon Partition Manager Pro 8.0。

       ç„¶åŽå¤‡ä»½MMC卡,再用Partition Manager Pro 8.0对MMC卡进行分区,步骤如下:首先进入插上读卡器,进入Partition Manager Pro 8.0,按顺序创建三个分区:FAT.EXT2、Linux Swap(M比较合适),顺序必须如此,否则windows系统下不能用MMC卡。分好区后右键装载FAT分区。

       æŽ¥ç€ç”¨ghost 8.3把gho格式root.tar.bz2镜像直接还原到EXT2分区。备份回MMC卡,再把ubootloader.zip解压缩后的文件拷贝到MMC卡的FAT分区中,路径分别为:E:\load-uboot.exe、E:\u-boot.bin、E:\System\libs\uboot.ldd、E:\uImage.bin。最后运行E:\load-uboot.exe来引导Linux系统启动。

       å¦‚果不能成功进入可尝试把load_uboot.exe改名为starter.exe放到e:\system\programs目录下再试试。从上面提到的内容中我们可以看到,用塞班手机运行LINUX并不是很复杂的事,并没有涉及到ROM的刷新,安全性还是很高的,大家尽可一试。

       ç¬¬å››è®²å¡žç­æ‰‹æœºå•†åŠ¡åŠŸèƒ½åº”用点滴

       ä½œä¸ºä¸“注为手机本身提供服务的操作系统,塞班手机的商务功能是十分强大的。我们要善于。让塞班手机成为我们日常工作和学习的好帮手。

       ä¸€ã€OFFICE软件

       ä¸Žè„±èƒŽä¸Žæ¡Œé¢Windows系统的Windows Mobile相比,在对OFFICE文件的支持上,无疑是塞班系统的一个软肋。好在有一款Quickoffice可以用,这是从PalmOS上移植过来的一款著名办公软件。包含了Quicksheet 、Quickword和QuickPoint 三个部分。其中Quicksheet是一款功能强大的电子表格制作软件,完全兼容Microsoft Excel文件,可以编辑和保存原始Excel文件。与Microsoft Excel平滑连接,能以插件的形式在Microsoft Excel里调用,直接在Microsoft Excel里将文件保存为Quicksheet格式。Quickword是—款功能强大的文字处理软件,完全兼容Microsoft Word文件,可以编辑和保存原始Word文件。还可以使用Show Tags选项来查看/编辑HTML文件的源代码,同样可与Microsoft Word平滑连接。另外还有QuickPoint,不过只能阅读部分较简单的PPT文件,而且不能在手机上进行编辑。除了Quickoffice大家还可以使用能够编辑WORD和EXCEL文件的:OfficeSuite。

       å›¾5 PDF阅读软件

       å¦å¤–使用PDF+这款软件,可以让我们塞班手机上查看目前最主流的电子文档格式:PDF文件。进一步增强了塞班手机的商务功能。

       â€œè¶…级计算器” NiceCalc这款软件的功能比塞班系统自带计算器就要强大多了,可以让你的手机变成一个科学计算器,推荐安装。

       äºŒã€ç”µå­ä¹¦é˜…读工具

       å°½ç®¡å¡žç­æ‰‹æœºæ”¯æŒç›´æŽ¥æµè§ˆtxt格式的文档,但集成的软件功能并不算强大。我们最好使用其他实用的看电子书工具比如SmartViewer,其“书签”功能给我们欣赏长篇大作带来了无与伦比的方便。除此外,还有下面几款软件值得推荐。

       (1)ReadM

       ReadM这个软件是基于symbian系统最好的阅读软件之一,支持支持PDB、TXT、DOC、GZ、GZIP、ZIP、WAV、MP3、PRC、TCR等,它支持的编码模式也很全,基本上电脑上有的txt编码,这个软件全都包括了,不需要再去一个一个的转换,支持横屏,支持自动翻页,打开文件速度也是相当的快,并且支持wav格式音频的播放。

       (2)RepliGo

       RepliGo是一个真正“全能”的电子书软件。具体说,RepliGo可以将所有可打印的文档转换成可在手机上识别的阅读文档,可以转换的类型包括HTML,TXT,PDF,WORD,EXCEL,ACCESS,POWERPOINT,以及任何可用打印机输出的文档。本软件包括PC端与手机端两个软件,用PC端软件进行转换,用手机端软件进行阅读。阅读时屏幕能翻转,能缩放,能全屏,还能自动记录上次看到的地方。

       (3)掌上书院

       è¿™ä¸ªè½¯ä»¶æ”¯æŒç›®å‰å¾ˆæµè¡ŒUMD电子书格式。 UMD电子书在各大智能手机论坛都有下载。而且这个软件包括了PC端转换软件,可以自己制作UMD格式的电子书。

       å¦å¤–值得推荐的还有QReader、百阅视听等:支持BRM格式图书,而且集成了多种其他功能。BRM格式可包括影音文件,效果出众,而且还可以通过加入第三方补丁兼容UMD电子书。

       ä¸‰ã€å¢žå¼ºæ—¶é’ŸåŠŸèƒ½

       å¡žç­ç³»ç»Ÿæœ¬èº«çš„闹钟、计时等功能并不强大。这里推荐你使用“全能闹钟”这款功能超强的时间工具,软件有倒计时、计划事件、实时语音报时、秒表的功能,您可以通过设置在不同的场景、不同的时间来播放不同的音乐,软件同时可以重复提醒您有新的信息在收件箱,软件也可以设置不同的时间段:每天、工作日、周末来进行重复提醒。唯一遗憾的是该软件不支持开机自动运行;不过可以通过第三方软件(autoexec)来实现。

       å¯åŠ¨è½¯ä»¶åŽï¼Œé¦–先选择左软键进入主界面,然后您就可以根据自己的需要来设置不同的项目,倒计时功能适用于一次倒计时提醒,你可以设置他的详细项目以重复周期和播放的音乐;计划事件是用来制定周期性的提醒已经计划,你可以在这里设置软件在制定时间自动改变情景模式、短消息提醒次数、代办事项等,同时还可以把这里设置的信息和系统日历进行同步;语音提醒是用来实时的报时和短消息提醒,软件所有的功能都可以自定义文本信息来备忘;秒表功能是一个较为高级的秒表,可以分段计时、分段计时列表。

       å¦å¤–我们还可以使用其他闹钟增强软件,如System Tools 、handremind、alarmmannager以及系统闹钟增强插件(almalert)等。可以实现定义多种闹铃,选择每天闹、每周闹、工作日闹,整点报时等多种功能。

       å››ã€ä¸­æ–‡è¾“入法

       å¡žç­ç³»ç»Ÿé€šå¸¸éƒ½è‡ªå¸¦ç¬”画和T9拼音输入法,一般应用就算不错了。不过如果你对输入效率有较高要求,则建议你安装第三方的输入法。比如A4,可连续输入, Inline(直接在线)显示,候选区跟随光标移动,支持超长文本输入。其他还支持拼音自由编辑,自动记忆,深度联想, 自动调频, 模糊音设置, 全拼、简拼混合输入等。我用了这个输入法一段时间,感觉反映速度非常快,联想功能很全,但也有不足之处,在待机状态下,无法使用*和#功能键,长按会出现一串*和#,而无法实现情景模式转换和锁键盘功能。另外A4只能安装在手机内存中,不能安装在存储卡上。另外值得推荐的还有国笔输入法,安装该输入法后还实现了IP拨号功能。

       ä¸‹é¢å†ä¸ºå¤§å®¶è°ˆä¸€ä¸‹ä½¿ç”¨æ‹¼éŸ³è¾“入法快速查字的技巧。我们在使用拼音输入法,有时会有遇到同一个音节会有很多个字出现,多的时候可能要翻好几页,如果打上音标的话,就会减少很多字,具体就是先用拼音打出你要的字,再按一下“*”键,在拼音后面就会出现声调,按一次换一个声调,这样找起来就简单多了。

       äº”、英汉词典

       å¡žç­S系统上的英汉词典还是很多的,这里给大家推荐两款:

       â€œæŽŒä¸Šè¯éœ¸II”是一款手机上的英汉、汉英双向电子字典,具有超大词库,使用方便快捷,是目前市面上唯一可以和文曲星相媲美的手机辞典。功能特色:英汉双向查找,无需切换词典,输入中文即给英文解释,输入英文即给中文解释,全部在一个输入框内完成,无需切换词典语言。系统剪贴板监视功能,如果系统剪贴板中有文字内容,在查找单词窗口出现之时程序会自动解释剪贴板中的文字内容,用户无需输入单词,也可以复制释义,这时单词的全部解释内容就被复制到了系统剪贴板中,在其他程序中使用粘贴即可。

       å¦å¤–推荐一款国产的“移动英汉通”词典,其词库是开放的,而且还具备将单词释义通过短信发送等特殊功能。在塞班手机上我们还能安装“背单词”软件,就更加方便我们“随

       æ—¶éšåœ°å­¦è‹±è¯­â€äº†ã€‚