C语言课程设计(简易计算器设计)带所有代码

时间:2024.4.21

《C语言课程设计》报告

设   计   题  目:      简单计算器设计        

                                                                                                                                                

学   院  名   称:    电子与信息工程学院      

专            业:     计算机科学与技术       

班            级:         计科            

姓            名:      学  号       

指   导   教  师:                   

定稿日期: 20##-5-28

一、设计题目

简单计算器设计

二、设计要求

在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。

三、设计目的

①  通过本项课程设计,可以培养独立思考、 综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!

②  通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。

四、设计思想及过程

①  由于需要使功能尽量模仿Windows下的计算器,而很多功能要以图形界面实现,故用Borland C++ Builder编写。所以用的是面向对象程序设计。但因为这是C语言的课程设计,所以除了面向对象的使用以外,所有语法都是按照C语言的格式编写。

②  采用工程模式,文件包括calc.h(运算主函数头文件,包括各运算符的操作以及其辅助函数)、Main.h(窗体类的声明头文件)、Calc.cpp(工程初始化文件)、Main.cpp(代码主文件,包括各空间操作的函数)以及一些其它附属文件,包括dll动态链接库。

③  在参考了Windows里的计算器以后,决定在我的课程设计中实现:

⒈  0~9的数字输入功能(小数点除外)

⒉  实现加、减、乘、整除、取模、阶乘、位运算左移、x的y次方、与、异或、x立方、x平方运算功能,二进制、八进制、十进制、十六进制转换功能,正负转换功能,退格、归零等功能。

⒊  数字显示最多为40位,超过即用科学表示法表示(例如1E50)。

⒋  运算时因最高能对5000位的数字进行运算,故所有功能建立在自行编写代码的高精度运算基础上。

④  在按键操作中,先判断用户按的是数字键还是功能键。功能键分运算符键、进制转换键以及清空键。然后记录下来用户当前的按键,然后对上次按的功能键键进行运算。如按了1、+、5,再按任何功能键即对1+5进行运算。如果按的是进制转换键,就记录当前进制,则在以后每次操作中,都将显示结果转换为当前进制再显示。

如:以下是按5以及*号时的函数代码

 

⑤  对于高精度,采用结构体struct high{int num[MAXN];};的形式,数组的一个元素存一位。个位为num[1],将符号存在num[0]之中。

⒈  对于高精度加法,先判断两个数符号,如果为异号,则进行高精度减法,否则将各位逐个相加,然后逐位进位,返回答案即可。

⒉  对于高精度减法,先判断两个数符号,如果为异号,则进行高精度加法,否则用大数减小数,逐个相减,然后逐位退位,判断符号、返回答案即可。

⒊  对于高精度乘法,用第二个数的各位乘以第一个数的各位。然后错位相加,相当于小学生摆竖式。最后将各位相乘的结果相加,逐位进位,判断符号、返回答案即可。

⒋  对于高精度整除,采用各位从0~9枚举形式,如果此位与0~9相乘刚好小于等于相应数字,则为此位答案为这个数。最后返回答案即可。

⒌  对于高精度取模,则只需求出高精度整除,然后将数字减去整除的结果即可。

⒍  对于n阶乘,做n次乘法,每乘一次,乘数减一。

⒎  对于左移,虽然是建立在位运算基础上,但其效果只是乘以二,所以只需高精度乘以二即可。

⒏  对于x的平方、立方、y次方,只需将x高精度相乘2次、3次或者更多次即可。

⒐  对于与运算,先将两个数转换为二进制,然后对每位进行与运算,最后转换回十进制即可。

⒑  对于异或运算,原理同与运算。

⑥  对于进制转换,采用除n取余法。将其转换为相应进制。

⑦  对于清零键,按按键功能对actNum、ans、nowSym等变量清空或者减少一位即可。

⑧  我对于程序容错性做了很大程度上的优化。对于超出位数的运算会跳出“数字太大”提示。对于各按键混合使用会导致的程序混乱用了极大程度上的优化,也就是说对于按键的随意性有很好的兼容性。比如说可以直接按2再按*然后按=,就会算出2的平方。

⑨  对于显示函数,先判断当前进制数,然后再将需要显示的数字转换为当前进制数再显示。如果位数超过40,则取前几位,采用科学计数法显示。

⑩  未能实现部分:小数部分。由于时间关系,未能实现复制粘贴数字功能。

五、流程图

 


六、运行过程

打开Calc.exe,模拟Windows下的计算器功能。

①  基本功能为输入数字,再输入运算符,然后输入运算符对应数字,按等号。

②  输入数字,再输入运算符,输入等于号的结果为“当前输入的数字→运算符→当前输入的数字”。可以调节正负号。

③  输入“数字,运算符,数字,运算符...数字,运算符”亦可。

七、心得体会

这次“简单计算器制作”的课程设计不仅让我对C语言的熟悉程度上升到了另一个高度,而且在一定意义上对面向对象设计的理解更加深刻了。是我在编程路途上的一次质的飞跃。而且在处理非常规数据类型的运算的锻炼下,使我对编程语言有了一个新的认识。当看着一个具有图形界面的计算器的模型成品出现在自己面前时,心中有着无限感慨,原来编程也不是非常遥不可及的,原来在编程的趣味性中能让我学到更多有意思的知识。

附源程序清单:

①      Calc.h(运算函数集头文件)

#include<stdio.h>

#include<string>

#include<string.h>

#define HIGH struct high

#define MAXN 5000

#define MAXSHOW 40

#define key_num 0

#define key_sym 1

struct high{

    int num[MAXN];

};

HIGH ans, actNum, nowShow;

char nowSym = 'N', lastSym = 'N';

bool _isincMed = true, _lastKey = key_num;

int jz = 10;

bool _isbig(HIGH a, HIGH b)

{

    int i;

    for(i = MAXN - 1; i > 0; i--)

    {

        if(a.num[i] > b.num[i]) return true;

        else

        if(a.num[i] < b.num[i]) return false;

    }

    return false;

}

void copy(char *str, char *rstr, int op, int len)    //将str的从op开始的len个字符复制到rstr中

{

    int i = 0, j = op - 1;

    for(; i <= len - 1 || str[j] == '\0'; i++, j++) rstr[i] = str[j];

    rstr[i] = '\0';

}

void copyint(HIGH num, HIGH *rint, int op, int len)    //将str的从op开始的len个字符复制到rstr中

{

    int i = 1, j = op;

    for(; i <= len && j < MAXN; i++, j++) rint -> num[i] = num.num[j];

}

void initNum(HIGH *numb)    //初始化

{

    int i;

    HIGH tmp;

    memset(tmp.num, 0, sizeof(tmp.num));

    *numb = tmp;

}

int absCmp(HIGH a, HIGH b)    //比较绝对值大小

{

    int i;

    for(i = MAXN - 1; i > 0; i--)

    {

        if(a.num[i] != b.num[i]) return (a.num[i] > b.num[i]);

    }

    return -1;

}

int getMed(HIGH a)    //获取位数

{

    int i, med;

    for(i = MAXN - 1; i > 0; i--)

        if(a.num[i] != 0)

        {

            med = i;

            break;

        }

    if(i == 0) med = 1;

    return med;

}

void turnSym(HIGH *a)    //变号

{

    a -> num[0] = a -> num[0] == 0 ? -1 : 0;

}

void decMed(HIGH *a)    //减去一位

{

    int i, med = getMed(*a);

    if(med == MAXN - 1) med--;

    for(i = 1; i <= med; i++) a -> num[i] = a -> num[i + 1];

    a -> num[med] = 0;

}

void incMed(HIGH *a, int b)    //加一位

{

    int i, med = getMed(*a);

    HIGH r;

    initNum(&r);

    if(med < MAXSHOW)

    {

        for(i = 2; i <= med + 1; i++) r.num[i]  = a -> num[i - 1];

        r.num[1] = b;

        r.num[0] = a -> num[0];

    }

    else r = *a;

    *a = r;

}

HIGH mul(HIGH a, HIGH b)    //高精度乘法

{

    int i, j, k, ma, mb;

    HIGH tmpr, r, zero;

    initNum(&zero);

    initNum(&r);

    ma = getMed(a);

    mb = getMed(b);

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

    {

        initNum(&tmpr);

        for(j = 1; j <= mb; j++)

        {

            tmpr.num[j] = a.num[i] * b.num[j];

        }

        int tmpMed = getMed(tmpr);

        if(tmpMed + i > MAXN)

        {

            initNum(&r);

            Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

            nowSym = 'N';

            _lastKey = key_num;

            lastSym = 'N';

            return r;

        }

        for(k = 1; k < tmpMed; k++)

        {

            tmpr.num[k + 1] += (tmpr.num[k] / 10);

            tmpr.num[k] %= 10;

        }

        if(tmpr.num[tmpMed] > 10)

        tmpMed = getMed(tmpr);

        if(tmpMed + i > MAXN)

        {

            initNum(&r);

            Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

            nowSym = 'N';

            _lastKey = key_num;

            lastSym = 'N';

            return r;

        }

        for(j = 1; j <= tmpMed; j++) r.num[j + i - 1] += tmpr.num[j];

    }

    for(i = 1; i < MAXN - 1; i++)

    {

        r.num[i + 1] += (r.num[i] / 10);

        r.num[i] %= 10;

    }

    if(r.num[MAXN - 1] > 9)

    {

        initNum(&r);

        Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

        nowShow = zero;

        nowSym = 'N';

        _lastKey = key_num;

        lastSym = 'N';

        return r;

    }

    if((a.num[0] == -1 && b.num[0] == -1) || (a.num[0] == 0 && b.num[0] == 0))

        r.num[0] = 0;

    else r.num[0] = -1;

    return r;

}

HIGH dec(HIGH a, HIGH b)    //高精度减法

{

    int i, med;

    HIGH r;

    HIGH inc(HIGH a, HIGH b);

    bool m = false;

    initNum(&r);

    if(a.num[0] == -1 && b.num[0] == -1) m = true;

    else

    if(a.num[0] == -1)

    {

        b.num[0] = -1;

        return inc(a, b);

    }

    else

    if(b.num[0] == -1)

    {

        a.num[0] = -1;

        return inc(a, b);

    }

    if(!absCmp(a, b))

    {

        a.num[0] = (a.num[0] == 0) ? -1 : 0;

        b.num[0] = (b.num[0] == 0) ? -1 : 0;

        return dec(b, a);

    }

    med = getMed(a);

    for(i = 1; i <= med; i++) r.num[i] = a.num[i] - b.num[i];

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

    {

        if(r.num[i] < 0)

        {

            r.num[i + 1] -= 1;

            r.num[i] = 10 + r.num[i];

        }

    }

    if(m) r.num[0] = -1;

    return r;

}

HIGH inc(HIGH a, HIGH b)  //高精度加法

{

    int i;

    HIGH r, zero;

    bool m = false, err = false;

    initNum(&r);

    initNum(&zero);

    if(a.num[0] == -1 && b.num[0] == -1) m = true;

    else

    if(a.num[0] == -1)

    {

        a.num[0] = 0;

        return dec(b, a);

    }

    else

    if(b.num[0] == -1)

    {

        b.num[0] = 0;

        return dec(a, b);

    }

    for(i = 1; i < MAXN; i++) r.num[i] = a.num[i] + b.num[i];

    for(i = 1; i < MAXN - 1; i++)

    {

        r.num[i + 1] += (r.num[i] / 10);

        r.num[i] %= 10;

    }

    if(r.num[MAXN - 1] > 9)

    {

        initNum(&r);

        Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

        nowSym = 'N';

        _lastKey = key_num;

        lastSym = 'N';

        nowShow = zero;

        return r;

    }

    if(m) r.num[0] = -1;

    return r;

}

HIGH div(HIGH a, HIGH b)    //高精度整除

{

    int i, j, ma = getMed(a), mb = getMed(b);

    HIGH r, tmpHigh, cmp, someZero, theone;

    initNum(&r);

    initNum(&theone);

    if(a.num[0] == b.num[0]) ;

    else r.num[0] = -1;

    a.num[0] = 0;

    b.num[0] = 0;

    for(i = ma - mb + 1; i > 0; i--)

    {

        initNum(&tmpHigh);

        copyint(a, &tmpHigh, i, ma);

        initNum(&cmp);

        for(j = 0; !_isbig(cmp, tmpHigh); j++)

        {

            cmp = inc(cmp, b);

        }

        theone.num[1] = j;

        if(_isbig(mul(theone, b), tmpHigh)) j--;

        r.num[i] = j;

        initNum(&someZero);

        someZero.num[i] = j;

        someZero = mul(someZero, b);

        a = dec(a, someZero);

    }

    return r;

}

HIGH mod(HIGH a, HIGH b)    //高精度取模

{

    int i, j;

    HIGH tmpans;

    tmpans = div(a, b);

    return dec(a, mul(tmpans, b));

}

String getHexStr(int a)     //得到十六进制字符串

{

    if(a == 10) return "A";

    else

    if(a == 11) return "B";

    else

    if(a == 12) return "C";

    else

    if(a == 13) return "D";

    else

    if(a == 14) return "E";

    else

    if(a == 15) return "F";

}

int getHex(HIGH a)          //十六进制取余

{

    if(a.num[2] == 0) return a.num[1];

    else return a.num[2] * 10 + a.num[1];

}

HIGH hex(HIGH a)            //转化十六进制

{

    int i = 0, j;

    HIGH zero, r, sixteen;

    initNum(&zero);

    initNum(&r);

    initNum(&sixteen);

    sixteen.num[1] = 6;

    sixteen.num[2] = 1;

    if(a.num[0] == -1)

    {

        initNum(&r);

        Application -> MessageBox("不能为负数!", "错误", MB_OKCANCEL);

        nowSym = 'N';

        _lastKey = key_num;

        lastSym = 'N';

        nowShow = zero;

        return r;

    }

   

    while(_isbig(a, zero))

    {

        i++;

        r.num[i] = getHex(mod(a, sixteen));

        a = div(a, sixteen);

        if(getMed(r) > MAXSHOW)

        {

            initNum(&r);

            Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

            nowShow = zero;

            nowSym = 'N';

            _lastKey = key_num;

            lastSym = 'N';

            return r;

        }

    }

    return r;

}

HIGH bajinzhi(HIGH a)       //转化八进制

{

    int i = 0, j;

    HIGH zero, r, eight;

    initNum(&zero);

    initNum(&r);

    initNum(&eight);

    eight.num[1] = 8;

    if(a.num[0] == -1)

    {

        initNum(&r);

        Application -> MessageBox("不能为负数!", "错误", MB_OKCANCEL);

        nowSym = 'N';

        _lastKey = key_num;

        lastSym = 'N';

        nowShow = zero;

        return r;

    }

   

    while(_isbig(a, zero))

    {

        i++;

        r.num[i] = mod(a, eight).num[1];

        a = div(a, eight);

        if(getMed(r) > MAXSHOW)

        {

            initNum(&r);

            Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

            nowShow = zero;

            nowSym = 'N';

            _lastKey = key_num;

            lastSym = 'N';

            return r;

        }

    }

    return r;

}

HIGH bin(HIGH a)            //转化二进制

{

    int i = 0, j;

    HIGH zero, r, two;

    initNum(&zero);

    initNum(&r);

    initNum(&two);

    two.num[1] = 2;

    if(a.num[0] == -1)

    {

        initNum(&r);

        Application -> MessageBox("不能为负数!", "错误", MB_OKCANCEL);

        nowShow = zero;

        nowSym = 'N';

        _lastKey = key_num;

        lastSym = 'N';

        return r;

    }

   

    while(_isbig(a, zero))

    {

        i++;

        r.num[i] = a.num[1] % 2;

        a = div(a, two);

        if(getMed(r) > MAXSHOW)

        {

            initNum(&r);

            Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

            nowShow = zero;

            nowSym = 'N';

            _lastKey = key_num;

            lastSym = 'N';

            return r;

        }

    }

    return r;

}

HIGH binToshi(HIGH a)

{

    int i, med = getMed(a);

    HIGH r, tmp, the1, tmp2, two, thetwo;

    initNum(&tmp);

    initNum(&tmp2);

    initNum(&the1);

    initNum(&thetwo);

    initNum(&two);

    two.num[1] = 1;

    thetwo.num[1] = 2;

    the1.num[1] = 1;

    initNum(&r);

    for(i = 1; i <= med; i++, tmp = inc(tmp, the1))

    {

        tmp2.num[1] = a.num[i];

        r = inc(r, mul(tmp2, two));

        two = mul(two, thetwo);  

    }

    return r;

}

HIGH and(HIGH a, HIGH b)       //与

{

    HIGH tmpa, tmpb, r;

    int med, meda, medb, i;

    initNum(&r);

    tmpa = bin(a);

    tmpb = bin(b);

    meda = getMed(tmpa);

    medb = getMed(tmpb);

    med = (meda > medb) ? meda : medb;

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

        r.num[i] = tmpa.num[i] & tmpb.num[i];

    r = binToshi(r);

    return r;

}

HIGH xor(HIGH a, HIGH b)       //异或

{

    HIGH tmpa, tmpb, r;

    int med, meda, medb, i;

    initNum(&r);

    tmpa = bin(a);

    tmpb = bin(b);

    meda = getMed(tmpa);

    medb = getMed(tmpb);

    med = (meda > medb) ? meda : medb;

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

        r.num[i] = tmpa.num[i] ^ tmpb.num[i];

    r = binToshi(r);

    return r;

}

void doAns(HIGH *ans, HIGH actNum, char *nowSym, char newSym, char lastSym, bool lastKey)

{

    HIGH the1, zero, tmp;

    initNum(&the1);

    the1.num[1] = 1;

    if(lastKey == key_sym)

    {

        if(newSym == 'N')

        {

            //if(*nowSym != 'N') doAns(ans, *ans, nowSym, 'N', lastSym, key_num);

            //else

            if(*nowSym != 'N') doAns(ans, actNum, nowSym, 'N', lastSym, key_num);

            else

            if(lastSym != 'N') doAns(ans, actNum, &lastSym, 'N', lastSym, key_num);

            else

            *ans = actNum;

        }

        else

        {

            *nowSym = newSym;

        }

    }

    else

    if(lastKey == key_num)

    {

        if(*nowSym == 'N')

        {

            if(lastSym != 'N') doAns(ans, actNum, &lastSym, 'N', lastSym, lastKey);

            else *ans = actNum;

        }

        else

        if(*nowSym == '+') *ans = inc(actNum, *ans);

        else

        if(*nowSym == '-') *ans = dec(*ans, actNum);

        else

        if(*nowSym == '*') *ans = mul(*ans, actNum);

        else

        if(*nowSym == '/') *ans = div(*ans, actNum);

        else

        if(*nowSym == '2') *ans = mul(*ans, *ans);

        else

        if(*nowSym == '3')

        {

            *ans = mul(mul(*ans, *ans), *ans);

        }

        else

        if(*nowSym == 'Y')

        {

            initNum(&zero);

            if(actNum.num[0] == -1 || !_isbig(actNum, zero))

            {

                *ans = the1;

                return ;

            }

            zero.num[1] = 2;

            tmp = *ans;

            for(; !_isbig(zero, actNum); zero = inc(zero, the1))

            {

                *ans = mul(*ans, tmp);

            }

        }

        else

        if(*nowSym == 'L')

        {

            initNum(&zero);

            zero.num[1] = 2;

            if(*nowSym == '2') *ans = mul(*ans, zero);

        }

        else

        if(*nowSym == 'M') *ans = mod(*ans, actNum);

        else

        if(*nowSym == '!')

        {

            actNum = dec(*ans, the1);

            initNum(&zero);

            while(_isbig(actNum, zero))

            {

                *ans = mul(*ans, actNum);

                actNum = dec(actNum, the1);

            }

        }

        else

        if(*nowSym == 'A') *ans = and(*ans, actNum);

        else

        if(*nowSym == 'X') *ans = xor(*ans, actNum);

    }

}

②      Calc.cpp  /*由BCB生成*/

#include<vcl.h>

#pragma hdrstop

//-------------------------------------------------------------

USEFORM("Main.cpp", MainForm);

//-------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

    try

    {

        Application -> Initialize();

Application -> CreateForm(__classid(TMainForm), &MainForm);

        Application -> Run();

    }

    catch(Exception &exception)

    {

        Application -> ShowException(&exception);

    }

    catch(...)

    {

        try

        {

            throw Exception("");

        }

        catch(Exception&exception)

        {

            Application -> ShowException(&exception);

        }

    }

    return 0;

}

//-------------------------------------------------------------

③      Main.h  /*由BCB生成*/

#ifndef MainH

#define MainH

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Menus.hpp>

#include <ExtCtrls.hpp>

//---------------------------------------------------------------------------

class TMainForm : public TForm

{

__published:   // IDE-managed Components

        TMainMenu *MainMenu1;

        TMenuItem *E1;

        TMenuItem *N1;

        TMenuItem *H1;

        TEdit *Show_Editor;

        TButton *bt_bkspace;

        TButton *bt_ce;

        TButton *bt_Leftc;

        TButton *bt_0;

        TButton *bt_iAndm;

        TButton *bt_inc;

        TButton *bt_eq;

        TButton *bt_1;

        TButton *bt_2;

        TButton *bt_3;

        TButton *bt_dec;

        TButton *bt_lsh;

        TButton *bt_4;

        TButton *bt_5;

        TButton *bt_6;

        TButton *bt_mul;

        TButton *bt_xor;

        TButton *bt_7;

        TButton *bt_8;

        TButton *bt_9;

        TButton *bt_div;

        TButton *bt_mod;

        TButton *bt_and;

        TButton *bt_xpf;

        TButton *bt_xlf;

        TButton *bt_xycf;

        TButton *bt_njc;

        TButton *sljz;

        TButton *sjz;

        TButton *bjz;

        TButton *ejz;

        void __fastcall FormCreate(TObject *Sender);

        void __fastcall bt_7Click(TObject *Sender);

        void __fastcall bt_8Click(TObject *Sender);

        void __fastcall bt_0Click(TObject *Sender);

        void __fastcall bt_1Click(TObject *Sender);

        void __fastcall bt_2Click(TObject *Sender);

        void __fastcall bt_3Click(TObject *Sender);

        void __fastcall bt_4Click(TObject *Sender);

        void __fastcall bt_5Click(TObject *Sender);

        void __fastcall bt_6Click(TObject *Sender);

        void __fastcall bt_9Click(TObject *Sender);

        void __fastcall bt_iAndmClick(TObject *Sender);

        void __fastcall bt_incClick(TObject *Sender);

        void __fastcall bt_eqClick(TObject *Sender);

        void __fastcall bt_decClick(TObject *Sender);

        void __fastcall bt_mulClick(TObject *Sender);

        void __fastcall Show_EditorKeyPress(TObject *Sender, char &Key);

        void __fastcall bt_divClick(TObject *Sender);

        void __fastcall bt_LeftcClick(TObject *Sender);

        void __fastcall bt_ceClick(TObject *Sender);

        void __fastcall bt_bkspaceClick(TObject *Sender);

        void __fastcall bt_xpfClick(TObject *Sender);

        void __fastcall bt_xlfClick(TObject *Sender);

        void __fastcall bt_xycfClick(TObject *Sender);

        void __fastcall bt_lshClick(TObject *Sender);

        void __fastcall bt_modClick(TObject *Sender);

        void __fastcall bt_njcClick(TObject *Sender);

        void __fastcall sjzClick(TObject *Sender);

        void __fastcall ejzClick(TObject *Sender);

        void __fastcall sljzClick(TObject *Sender);

        void __fastcall bjzClick(TObject *Sender);

        void __fastcall bt_andClick(TObject *Sender);

        void __fastcall bt_xorClick(TObject *Sender);

private:   // User declarations

public:           // User declarations

        __fastcall TMainForm(TComponent* Owner);

        void __fastcall TMainForm::ShowText(HIGH a);

};

//---------------------------------------------------------------------------

extern PACKAGE TMainForm *MainForm;

//---------------------------------------------------------------------------

#endif

④      Main.cpp

#include<vcl.h>

#include<calc.h>

#pragma hdrstop

#include "Main.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

using namespace std ;

TMainForm*MainForm ;

//---------------------------------------------------------------------------

__fastcall TMainForm :: TMainForm(TComponent*Owner)

:

TForm(Owner)

{

   

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: ShowText(HIGH a)  /*显示函数*/

{

    nowShow=a ;

    AnsiString str ;

    int med,i,j ;

    if(jz==2)a=bin(a);

    else

    if(jz==8)a=bajinzhi(a);

    else

    if(jz==16)a=hex(a);

    med=getMed(a);

    bool m=(a.num[0]==-1)?true:false ;

    if(med<=MAXSHOW)

    {

        if(m)

        {

            i=1 ;

            str="-" ;

        }

        else i=0 ;

       

        for(j=med;(m)?(i<=med):(i<med);i++,j--)

        {

            str+=(a.num[j]>9)?getHexStr(a.num[j]):IntToStr(a.num[j]);

        }

       

        Show_Editor->Text=str ;

    }

    else

    {

        if(m)

        {

            i=1 ;

            str="-" ;

        }

        else i=0 ;

       

        int e=med-1 ;

        for(j=med;(m)?(i<=40):(i<40);i++,j--)

        {

            str+=IntToStr(a.num[j]);

            if((m)?i==1:i==0)str+='.' ;

        }

        str+="E+"+IntToStr(e);

       

        Show_Editor->Text=str ;

    }

}

void __fastcall TMainForm :: FormCreate(TObject*Sender)  /*窗体创建*/

{

    initNum(&actNum);

    initNum(&ans);

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_7Click(TObject*Sender)

{

    if(_lastKey==key_sym)initNum(&actNum);

    if(_lastKey==key_sym&&nowSym=='N')

    {

        initNum(&ans);

        lastSym='N' ;

    }

    incMed(&actNum,7);

    ShowText(actNum);

    _lastKey=key_num ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_8Click(TObject*Sender)

{

    if(_lastKey==key_sym)initNum(&actNum);

    if(_lastKey==key_sym&&nowSym=='N')

    {

        initNum(&ans);

        lastSym='N' ;

    }

    incMed(&actNum,8);

    ShowText(actNum);

    _lastKey=key_num ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_0Click(TObject*Sender)

{

    if(_lastKey==key_sym)initNum(&actNum);

    if(_lastKey==key_sym&&nowSym=='N')

    {

        initNum(&ans);

        lastSym='N' ;

    }

    incMed(&actNum,0);

    ShowText(actNum);

    _lastKey=key_num ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_1Click(TObject*Sender)

{

    if(_lastKey==key_sym)initNum(&actNum);

    if(_lastKey==key_sym&&nowSym=='N')

    {

        initNum(&ans);

        lastSym='N' ;

    }

    incMed(&actNum,1);

    ShowText(actNum);

    _lastKey=key_num ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_2Click(TObject*Sender)

{

    if(_lastKey==key_sym)initNum(&actNum);

    if(_lastKey==key_sym&&nowSym=='N')

    {

        initNum(&ans);

        lastSym='N' ;

    }

    incMed(&actNum,2);

    ShowText(actNum);

    _lastKey=key_num ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_3Click(TObject*Sender)

{

    if(_lastKey==key_sym)initNum(&actNum);

    if(_lastKey==key_sym&&nowSym=='N')

    {

        initNum(&ans);

        lastSym='N' ;

    }

    incMed(&actNum,3);

    ShowText(actNum);

    _lastKey=key_num ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_4Click(TObject*Sender)

{

    if(_lastKey==key_sym)initNum(&actNum);

    if(_lastKey==key_sym&&nowSym=='N')

    {

        initNum(&ans);

        lastSym='N' ;

    }

    incMed(&actNum,4);

    ShowText(actNum);

    _lastKey=key_num ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_5Click(TObject*Sender)

{

    if(_lastKey==key_sym)initNum(&actNum);

    if(_lastKey==key_sym&&nowSym=='N')

    {

        initNum(&ans);

        lastSym='N' ;

    }

    incMed(&actNum,5);

    ShowText(actNum);

    _lastKey=key_num ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_6Click(TObject*Sender)

{

    if(_lastKey==key_sym)initNum(&actNum);

    if(_lastKey==key_sym&&nowSym=='N')

    {

        initNum(&ans);

        lastSym='N' ;

    }

    incMed(&actNum,6);

    ShowText(actNum);

    _lastKey=key_num ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_9Click(TObject*Sender)

{

    if(_lastKey==key_sym)initNum(&actNum);

    if(_lastKey==key_sym&&nowSym=='N')

    {

        initNum(&ans);

        lastSym='N' ;

    }

    incMed(&actNum,9);

    ShowText(actNum);

    _lastKey=key_num ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_iAndmClick(TObject*Sender)

{

    turnSym(&actNum);

    ShowText(actNum);

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_incClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'+',lastSym,_lastKey);

   

    ShowText(ans);

    lastSym=nowSym ;

    nowSym='+' ;

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_eqClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'N',lastSym,_lastKey);

   

    if(nowSym!='N')lastSym=nowSym ;

    ShowText(ans);

    nowSym='N' ;

    //actNum = ans;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_decClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'-',lastSym,_lastKey);

   

    ShowText(ans);

    lastSym=nowSym ;

    nowSym='-' ;

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_mulClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'*',lastSym,_lastKey);

   

    ShowText(ans);

    lastSym=nowSym ;

    nowSym='*' ;

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_divClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'/',lastSym,_lastKey);

   

    ShowText(ans);

    lastSym=nowSym ;

    nowSym='/' ;

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: Show_EditorKeyPress(TObject*Sender,char&Key)

{

    if(Key>='0'&&Key<='9')

    {

        if(_lastKey==key_sym)initNum(&actNum);

        if(_lastKey==key_sym&&nowSym=='N')initNum(&ans);

        incMed(&actNum,Key-'0');

        ShowText(actNum);

        _lastKey=key_num ;

    }

    else

    if(Key=='+')bt_incClick(Sender);

    else

    if(Key=='-')bt_decClick(Sender);

    else

    if(Key=='*')bt_mulClick(Sender);

    else

    if(Key=='/')bt_divClick(Sender);

    else

    if(Key=='^')bt_xycfClick(Sender);

    else

    if(Key=='!')bt_njcClick(Sender);

    else

    if(Key==13)bt_eqClick(Sender);

    else

    if(Key==8)bt_bkspaceClick(Sender);

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_LeftcClick(TObject*Sender)

{

    initNum(&actNum);

    ShowText(actNum);

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_ceClick(TObject*Sender)

{

    initNum(&ans);

    initNum(&actNum);

    _lastKey=key_num ;

    nowSym='N' ;

    lastSym='N' ;

    ShowText(actNum);

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_bkspaceClick(TObject*Sender)

{

    decMed(&actNum);

    ShowText(actNum);

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_xpfClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'2',lastSym,_lastKey);

   

   

    lastSym=nowSym ;

    nowSym='2' ;

   

    doAns(&ans,actNum,&nowSym,'N',lastSym,_lastKey);

    ShowText(ans);

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_xlfClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'3',lastSym,_lastKey);

   

   

    lastSym=nowSym ;

    nowSym='3' ;

   

    doAns(&ans,actNum,&nowSym,'N',lastSym,_lastKey);

    ShowText(ans);

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_xycfClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'Y',lastSym,_lastKey);

   

    ShowText(ans);

    lastSym=nowSym ;

    nowSym='Y' ;

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_lshClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'L',lastSym,_lastKey);

   

    ShowText(ans);

    lastSym=nowSym ;

    nowSym='L' ;

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_modClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'M',lastSym,_lastKey);

   

    ShowText(ans);

    lastSym=nowSym ;

    nowSym='M' ;

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_njcClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'!',lastSym,_lastKey);

   

   

    lastSym=nowSym ;

    nowSym='!' ;

   

    doAns(&ans,actNum,&nowSym,'N',lastSym,_lastKey);

    ShowText(ans);

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: sjzClick(TObject*Sender)

{

    jz=10 ;

    ShowText(nowShow);

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: ejzClick(TObject*Sender)

{

    jz=2 ;

    ShowText(nowShow);

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: sljzClick(TObject*Sender)

{

    jz=16 ;

    ShowText(nowShow);

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bjzClick(TObject*Sender)

{

    jz=8 ;

    ShowText(nowShow);

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_andClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'A',lastSym,_lastKey);

   

    ShowText(ans);

    lastSym=nowSym ;

    nowSym='A' ;

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: bt_xorClick(TObject*Sender)

{

    doAns(&ans,actNum,&nowSym,'X',lastSym,_lastKey);

   

    ShowText(ans);

    lastSym=nowSym ;

    nowSym='X' ;

    actNum=ans ;

    //initNum(&actNum);

    _lastKey=key_sym ;

}

//---------------------------------------------------------------------------

更多相关推荐:
《C语言程序设计》课程设计报告(小组)

东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:20##班别:2班指导教师:##组长:##同组成员:##目录一、目的....................…

c语言课程设计报告

C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体设计四详细设计五运行结果六课程设计体会一实验目的1通过课程设计加深对结构化程序设...

C语言课程设计报告

河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名学号专业班级计算机07-2班指导教师20XX年9月12日目录1.设计任务书21.…

C语言课程设计报告范例

C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的难点及解决办法四小结五附录原程序2一课程设计题目及所涉及知识点一课程设计题目1基...

厦门理工学院11级C语言C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求1二方案实现与调试221掷骰子游戏222射击游戏323汽车...

C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期专业计算机科学与技术班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求3二方案实现与调试321掷骰子游戏322汽车加...

c语言程序贪吃蛇课程设计报告

山东工商学院信电学院自动111班第一组贪吃蛇课程设计报告高级语言程序设计课程设计报告ExperimentDesigningreporter课程名称高级语言程序设计英文名称CProgramExperimentDe...

C语言程序设计基础课程设计报告

程序设计基础课程设计报告课程名称课程设计题目程序设计基础课程设计学生信息管理系统姓名系专业年级学号指导教师职称计算机科学技术系计算机网络技术讲师20xx年1月1日一设计题目及要求1题目学生信息管理系统2要求1建...

《C语言程序设计》课程设计报告格式 (2)

C语言程序设计课程设计报告20xx20xx学年第1学期专业软件工程软件测试服务班级1班姓名学号陈家汀指导教师谢小竹成绩计算机与信息工程学院20xx年1月12日目录一课程设计的目的与要求页码二方案实现与调试页码2...

C语言课程设计报告---学籍信息管理系统

中国地质大学本科生课程论文封面1课程设计评语注1无评阅人签名成绩无效2必须用钢笔或圆珠笔批阅用铅笔阅卷无效3如有平时成绩必须在上面评分表中标出并计算入总成绩2目录课程设计评语2目录31课程论文题目42程序设计思...

C语言课程设计报告_运动会分数统计系统

C语言课程设计报告_运动会分数统计系统一.需求分析1问题描述运动会分数统计系统参加运动会有n个系,系编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前…

C语言课程设计报告-图书管理系统

课程设计报告图书馆管理系统目录1题目与要求22系统总体设计要给出必要的文字说明及必要的图示321功能需求分析明确选题的功能需求322系统功能模块划分要给出系统功能模块图43详细设计431重要数据的数据结构设计即...

c语言程序设计课程设计报告(34篇)