c语言课程设计报告++计算器的实现(内含完整报告,流程图,截屏,总结等)

时间:2024.4.13

目 录

1 前言... 2

2 需求分析... 2

2.1要求... 2

2.2任务... 2

2.3运行环境... 2

2.4开发工具... 2

3 概要设计... 2

3.1系统流程图... 3

3.2查询函数流程图... 4

4 详细设计.... 6

4.1分析和设计... 6

4.2具体代码实现.... 6

4.3程序运行结果.... 14

5 课程设计总结.... 14

参考文献.... 15

致  谢.... 15

1 前言

编写一个程序来实现算术计算器。通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、--、*、等运算符号),然后将其信息存入文件中。输入一个算术计算式,就在屏幕上显示结果。

2 需求分析

2.1要求

(1)用C语言实现程序设计;

(2)利用结构体、共用体进行相关信息处理;

(3)画出查询模块的流程图;

(4)系统的各个功能模块要求用函数的形式实现;

(5)界面友好(良好的人机互交),程序要有注释。

2.2任务

(1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中;

(2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果;

(3)画出部分模块的流程图;

(4)编写代码;

(5)程序分析与调试。

2.3运行环境

(1)WINDOWS2000/XP系统

(2)TurboC2.0编译环境

2.4开发工具

C语言

3 概要设计

3.1系统流程图

如图3.1所示。

w

图3.1   系统流程图 

3.2查询函数流程图

(1)   边界画线函数流程图

(2)图标按钮设置函数流程图

4 详细设计

4.1分析和设计

(1)在程序的开头部分定义了结构体类型,用来存放按钮信息,使数据能够从键盘上输入。  用输入函数input()来输入按键放在button[]数组中。再定义结构体栈:struct_stack() 用于数据的输入和存放。

(2)进而定义了表格窗口函数,窗口画线函数draw_win() 和边界线函数draw_border(),定义out_text_win()输出文本窗口,定义window_xy(32,3);  计算结果窗口。通过这些为形成整个界面提供了大的前提。

(3)接着通过“write_char()”,“active_button()”,“ write_top()”,“out_text_win()”, “get_key()” ,“window_xy()”等一系列的函数,使得计算器的整个外型呈现了出来。再定义了文本光标函数:text_clo()文本光标函数,通过光标移动选定数字并按空格键确定,通过mian()函数来调用各个子函数,最终得到结果。

4.2具体代码实现

 源程序代码:

#include"dos.h"

#include"conio.h"

#include"string.h"

#include"stdio.h"

#define normbut_bor 0x80

#define presbut_but 0xb8

#define normnum_but 0x8e

#define presnum_but 0xb9

#define spebut_char 0x2c

#define win_color   0xf2

#define win_char    0xfb

struct s_button   /*按键的结构体*/

{   int sx,sy,ex,ey;

    char *head;

    int press;

}button[17];   /*图表按键数*/

struct stack   /*结构体栈*/

{   char s[20];

    int tos,top;

}stack;

char tag;

{

    if(stack.tos>0)

        stack.s[--stack.tos]='\0';

}

draw_win()   /*边框画线窗口*/

{

    int i;

    char far *t;

    char *s="This is a simple calculator!";   /*顶端边框输出的字符*/

    draw_border(30,0,79,24,win_color);   /*边框的位置和颜色*/

    i=(79-30-strlen(s))/2+30;

    t=vid_mem+i*2;

    for(;*s;)

    {

        *t++=*s++;

    *t++=win_color;  /*顶端字体颜色*/

    }

}

draw_border(int sx,int sy,int ex,int ey,int attrib)   /*边界线函数*/

{

    char far *t,far *v;

    int i;

    t=vid_mem;

    for(i=sx+1;i<ex;i++)

    {

        v=t+sy*160+i*2;

    *v++=196;   /*每一行上画线确定为直线*/

        *v=attrib;

        v=t+ey*160+i*2;

    *v++=196;  /*每一行下画线确定为直线*/

        *v=attrib;

    }

    for(i=sy+1;i<ey;i++)

    {   v=t+i*160+sx*2;

        *v++=179; /*每一列左画线确定为直线*/

        *v=attrib;

        v=t+i*160+ex*2;

        *v++=179;  /*每一列由画线确定为直线*/

        *v=attrib;

    }

    write_char(sx,sy,218,attrib);

    write_char(ex,sy,191,attrib);

    write_char(sx,ey,192,attrib);

    write_char(ex,ey,217,attrib);

}

write_char(int x,int y,char ch,int attrib)   /*字符输入函数*/

{   char far *v;

    v=vid_mem;

    v+=x*2+160*y;

    *v++=ch;

    *v=attrib;

}

active_button()/*图表按钮设定函数*/

{   int i;

    make_button(0,32,9,38,11,"1");/*每个键对应的位置和数值*/

    make_button(1,42,9,48,11,"2");

    make_button(2,52,9,58,11,"3");

    make_button(3,62,9,67,11,"+");

    make_button(4,71,9,76,11,"-");

    make_button(5,32,12,38,14,"4");

    make_button(6,42,12,48,14,"5");

    make_button(7,52,12,58,14,"6");

    make_button(8,62,12,67,14,"*");

    make_button(9,71,12,76,14,"/");/*“/”的位置*/

    make_button(10,32,15,38,17,"7");

    make_button(11,42,15,48,17,"8");

    make_button(12,52,15,58,17,"9");

    make_button(13,62,15,67,17,"=");

    make_button(14,71,15,76,17,"<-");

    make_button(15,32,18,38,20,"0");/*“0”的位置*/

    make_button(16,71,18,76,20,"End");

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

    {

        draw_border(button[i].sx,button[i].sy,button[i].ex,button[i].ey,normbut_bor);

    }

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

    {

write_top(button[i].sx+1,button[i].sy+1,button[i].ex-1,button[i].head,normnum_but);

    }

}

write_top(int x1,int y,int x2,char *s,int attrib)

{

    char far *v,far *t;

    int i;

    v=vid_mem;

    for(i=x1;i<=x2;i++)

    {   t=v+y*160+i*2;

        *t++=' ';

        *t=attrib;

    }

    i=(x2-x1-strlen(s)+1)/2+x1;

    t=v+160*y+i*2;

    for(;*s;)

    {   *t++=*s++;

        *t++=attrib;

    }

}

text_clo()  /*文本光标*/

{   tx--;    /*光标向左移*/

    if(tx<32)tx++;   /*backspace时X不能小于32*/

    put_char(tx,ty,'');

}

put_string()  /*计算机运算函数*/

{   float result;

    tx=32;

    switch(tag)  /*根据运算符号计算*/

    {

    case '+': result=v1+v2;break;  /*做加法*/

    case '-':result=v1-v2;break;  /*做减法*/

    case'*':result=v1*v2;break;  /*做乘法*/

    case '/': result=v1/v2;break;  /*做除法*/

    default :result=v1;   /*若不计算输出0*/

    }

    sprintf(stack.s,"%.3f",result);   /*输出结果保留小数点后三位*/

    while(stack.s[stack.top])

    {   put_char(tx,ty,stack.s[stack.top++]);

        tx++;

    }

}

send1()  /*向服务器发送请求*/

{   sscanf(stack.s,"%f",&v1);  /*输入并储存在V1中*/

    clear_stack();  /*清除栈*/

}

send2()  /*向服务器发送信息*/

{   sscanf(stack.s,"%f",&v2);

    clear_stack();   /*清除栈*/

}

select_but(int x,int y)   /*选择按钮*/

{   int num;

    if(y>2)

        if(x<2)num=15;

        else num=x+5*y;

    draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,presbut_but);

    write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,presnum_but);

}

                write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,normnum_but);

     }

     else

     {

        draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,normbut_bor);

        write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,spebut_char);

     }

}

put_char(int x,int y,char ch)   /*计算窗口的输入确定函数*/

{

    char far *v;

    v=vid_mem;

    v+=x*2+y*160;   /*光标的位置*/

    *v++=ch;   /*输入字符随光标的推进*/

    *v=0xf0;  /*输入数字的颜色*/

    window_xy(x,y);  /*光标在窗口坐标*/

}

calculator()  /*计算器构成的函数*/

{

    int a,b;

    key_choice();  /*键选择函数*/

}

menu()   /*左边窗口函数*/

{   char *j="This is a calculator!\nConductor Teacher:\nCheng YaHui\n\nStudent:Chen ChunLin\nNumber:0841330197\nSchool:ShaoYang College” "

    char *s="Use Guide:\nInput the number from\n the keyborde"

    draw_border(0,0,29,24,win_color);  /*左边框的位置和颜色*/

    write_top(1,2,28,"Introduction",0xf9);/*INTRODCTION的位置和颜色*/

    write_text(2,5,j,0x79);  /*输入字符的位置和颜色*/

    write_text(2,17,s,0x79);  /*输入字符的位置和颜色*/

}

main()

{

    init_stack();

    vid_mem=(char far *)0xb8000000;

    if(!form_win())

    {

        printf("can't form the device,press any key to leave!...");/*如果不能显示见面窗口,按任意退出。*/

        getch();

        exit();

     }

    menu();

    calculator();

}

main()

{

    init_stack();

    vid_mem=(char far *)0xb8000000;

    if(!form_win())

    {

        printf("can't form the device,press any key to leave!...");/*如果不能显示见面窗口,按任意退出。*/

        getch();

        exit();

     } menu();

    calculator();

}

4.3程序运行结果

  

5 课程设计总结

    本次C语言课程设计我是完全按照任务书上的要求来完成的,虽然还存在比较多的瑕疵,但我都是一饱满的热情、认真的态度去对待本次课程设计的。通过这次课程设计我对C语言的神奇功能更加佩服(只是一个程序运行后却可以显示出一个计算器来,并且画面比较唯美,且能进行计算),我默默在心里发誓一定要把C语言学好,而且将来我还要想学习C++语言,熟练的掌握编程的方法。本次课程设计,我设计的是一个算术计算器,本程序若完全靠现有的知识,是很难编写出来的,幸亏有我的指导老师成娅辉老师的耐心指导,我才能顺利完成。

参考文献

[1]张福祥. C语言程序设计[M]. 辽宁大学出版社,2008.1

[2] 张福祥,王萌.C语言程序设计习题解答与实验实沈阳:辽宁大学出版社,2008.

[3] 牛莉,刘远军等.计算机等级考试辅导教程[M].北京:中国铁道出版社,2008.

                         致   谢                                

    这次C语言课程设计让我学到了很多,从编程中可以看出编写一个程序的是一件很难的事。要想成为一名优秀的程序员,需要持久的耐心和深厚的专业知识。虽然这次我这组的课程设计题目不是很难,但要做好也不是一件很容易的事情。我努力使我的设计更加完美,我也有幸得到成娅辉老师的指导,使我能够顺利完成我的课程设计,我同时也要感谢其他给予我帮助的同学,他们使我认识到团队的力量。再一次感谢所有帮助我完成这次课程设计的人。

 

更多相关推荐:
c语言课程设计总结报告

附表2C或C语言课程设计总结报告源代码学生通讯录管理系统能够实现对通讯录的内容进行创建显示查询删除以及修改等功能includeltstdiohgtincludeltstringhgtincludeltconio...

c语言程序设计实训总结

C语言程序设计实训总结为加强学生的实践动手能力,为贯彻落实教学计划的要求,培养学生的专业实践技能,计算机系05级计算机网络工程与管理、计算机信息学管理、图形图像三个专业的学生于20xx年x月x日至6月x日在校…

C语言课程设计报告格式要求与范例

C语言程序设计课程设计报告专业电子信息工程自动化班级电信0904姓名陈列慧指导教师彭琼丁雄20xx年12月30日C语言程序课程设计任务书一设计题目职工信息管理系统二设计目的1熟练掌握C语言课程中所学的理论知识2...

C语言课程设计报告范例

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

C语言课程设计报告

C语言课程设计参考例例子职工信息管理系统1用户分析11用户目的设计一个职工信息管理系统使之能提供以下功能1录入职工信息2显示职工信息3查询职工信息4修改职工信息5删除职工信息14用户需求职工信息包括职工号姓名性...

C语言课程设计报告---很全,包括流程图,课设总结

高级语言程序设计C课程设计报告书目录一设计任务2二系统设计方案3三程序主要代码分析4四程序调试中出现的问题及其解决方法17五改进意见与收获体会18六主要参考资料18附此设计经过多次修改但还存在一些不足的地方希望...

C语言课程设计报告-完整版

重庆科技学院《C语言程序设计》课程设计报告学院:_电气与信息工程学院专业班级:自动化(试点)20##-01学生姓名:xxxx学号:xxxxxxxxxx设计地点(单位)设计题目:多功能电脑时钟设计完成日期:20#…

C语言课程设计报告 学生选课系统加源代码

实践教学兰州理工大学计算机与通信学院20##年春季学期C程序设计课程设计题目:学生选课系统专业班级:通信工程1班姓名:学号:指导教师:成绩:摘要学生选课系统是一个教育单位不可缺少的重要系统组成部分,它对于学校的…

C语言课程设计报告

C程序设计实习报告题目停车场管理2学院机电学院专业机械设计制造及其自动化姓名左国勇班级学号0720xx20xx1003745指导教师薛思清20xx年7月2日目录1需求分析211题目要求212题目分析22概要设计...

计算机C语言课程设计报告

程设计课目录C语言课程设计成绩评定表1C语言课程设计任务书2程序基本框架结构图3程序设计说明书4源代码清单5课程设计总结20C语言课程设计C语言课程设计成绩评定表1C语言课程设计C语言课程设计任务书一设计目的通...

C语言课程设计报告格式

自动化与电气工程学院C语言程序课程设计报告班级自控104学号20xx08950姓名陈彦康指导教师李茂青设计时间20xx071设计目的及要求简述设计目的任务要求等2程序改错21题目要求所做题目的内容22错误分析分...

C语言课程设计报告—手机通讯录管理系统

目录摘要2第一章绪论311课程设计目的和内容概述312题目手机通讯录管理系统3第二章程序分析421总体设计422详细设计423总流程图4第三章模块介绍和总体实现731构建结构体写入文件732构造函数与模块833...

c语言课程设计报告总结(39篇)