Автор работы: Пользователь скрыл имя, 14 Марта 2012 в 19:55, курсовая работа
Цель курсовой работы – систематизация, углубление и активное применение знаний по системному программированию, закрепление знаний, полученных в лекционном курсе, а также на практических и лабораторных занятиях.
Метод исследования – изучение литературы, составление и отладка программ на компьютере.
1.Введение
2.Разработка программы
3.Руководство программиста
4.Руководство пользователя
5.Заключение
6. Список использованной литературы
7. Листинг программы
s++;}
return pop(&val);}
Файл "MOUSE.CPP".
В этом файле происходит описание класса mouse, обеспечивающее работу мыши в графическом интерфейсе программы.
class Mouse
{
public:
int but;
int x,y;
Mouse();
~Mouse();
int IsIn(int x1,int y1,int x2,int y2);
void show();
void hide();
void getstate();
void setVrange(int MYMax,int MYMin);
};
Файл "CALCULAT.CPP".
В этом файле происходит подключение всех вышеперечисленных файлов, выполняется инициализация графического режима, мыши. Также осуществляется описание интерфейса программы: выполняется прорисовка кнопок, окон ввода\вывода.
В данной курсовой работе представлена реализация стекового калькулятора. В нем используются те же вычисления, что и в обычном калькуляторе: сложение, вычитание, умножение, деление и др. Кроме арифметических операций, пользователь может ввести название одной из стандартных функций: sin, cos, exp, tan. В программе используется метод обратной польской записи, поэтому можно рассчитывать сложные выражения с использованием скобок. Такая программа весьма полезна, поскольку позволяет проводить вычисления, не прибегая к записи промежуточных результатов на бумаге.
Для запуска программы необходимо запустить файл “Calc.exe”. После этого на экране появиться основной экран:
На нем можно увидеть те же клавиши, что и на обычном калькуляторе. Для ввода значений необходимо нажать на цифровые клавиши и произвести вычисления при помощи клавиш с арифметическими вычислениями(справа от цифрового набора) или функциональными вычислениями(слева от цифрового набора). Результат выводится в окно, которое находится чуть выше цифровых клавиш. Чтобы очистить окно с произведенными вычислениями необходимо нажать клавишу “CLEAR”. Или использовать функцию посимвольного стирания, которое осуществляется при нажатии клавиши “<<”. Эта функция необходима для того, чтобы заменить цифру, если произошла ошибка при вводе данных.
Выход из программы происходит при нажатии клавиши “X”, расположенной в правом верхнем углу.
Список функций использованных в данной программе:
Sqrt – возвращает значение квадратного корня.
Abs – возвращает абсолютное значение.
Exp – возвращает экспоненциальное значение.
Sin – возвращает синус.
Cos – возвращает косинус.
Tan – возвращает тангенс.
В ходе выполнения данного курсового проекта была разработана программа на языке Borland C. А также изучены возможности данного языка.
Систематизированы и закреплены практические навыки использования ЭВМ, программного обеспечения, существующих средств обслуживания системных программистов, а также теоретические знания по основным разделам курса "Язык программирования Си".
При выполнении курсового проекта произведено знакомство с реферативными журналами и другими информационными источниками по объектно-ориентированному и системному программированию с целью анализа состояния решаемой задачи. Получены практические навыки работы в среде Borland C.
1. Язык программирования Си.\Пер. с англ., 3-е изд., испр. - СПб.: "Невский Диалект", 2001. - 352 с.: ил.
Файл "CALCULAT.CPP"
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <graphics.h>
#include <ctype.h>
#include <dos.h>
#include <bios.h>
#include "mouse.h"
#include "calc.h"
#define LB 16
#define UB 35
#define RB 616
#define DB 105
Mouse *mouse=new Mouse();
struct TButton
{
int x,y,w,h;
int state;
char caption[20];
void Show();
int Pressed();
};
void TButton::Show()
{
int c1,c2;
c1=state?15:0;
c2=state?0:15;
settextjustify(1,1);
setcolor(WHITE);
outtextxy(x+w/2,y+h/2,caption)
setcolor(c1);
line(x,y,x+w,y);
line(x,y,x,y+h);
setcolor(c2);
line(x,y+h,x+w,y+h);
line(x+w,y,x+w,y+h);
}
int TButton::Pressed()
{
mouse->getstate();
if(x)
if((mouse->but==1)&&mouse->
{
state=0;
Show();
return 1;
}
else if(!mouse->but)
{
state=1;
Show();
}
return 0;
}
TButton digits[10];
TButton fbuts[12];
TButton obuts[6];
TButton BackSpace;
TButton ClearAll;
char opr[6][2]={"/","*","-","+","="
char funs[13][5]={ ")","(",
"sqrt","abs","exp",
"sin","cos","tan"
};
int getbutstr(char *ch)
{
for(int i=0;i<12;i++)
{
if(fbuts[i].Pressed())
{
strcpy(ch,fbuts[i].caption);
return 1;
}
if(i<11)
if(digits[i].Pressed())
{
strcpy(ch,digits[i].caption);
return 1;
}
if((i<6)&&(i!=4))
if(obuts[i].Pressed())
{
strcpy(ch,obuts[i].caption);
return 1;
}
}
return 0;
}
void igraph()
{
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode,"");
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n",grapherrormsg(errorcode)
printf("Press any key to halt:");
getch();
exit(1); /* return with error code */
}
}
void ButInit()
{
int x,y,dx=75,dy=60;
char c[20];
int i;
BackSpace.x=470;
BackSpace.y=170;
BackSpace.w=120;
BackSpace.h=30;
BackSpace.state=1;
strcpy(BackSpace.caption,"<<")
BackSpace.Show();
ClearAll.x=340;
ClearAll.y=170;
ClearAll.w=120;
ClearAll.h=30;
ClearAll.state=1;
strcpy(ClearAll.caption,"
ClearAll.Show();
for(x=170,y=220,i=0;i<9;i++)
{
fbuts[i].x=0;
fbuts[i].w=70;
fbuts[i].h=40;
fbuts[i].x=x;
fbuts[i].y=y;
fbuts[i].state=1;
if(i)
strcpy(fbuts[i].caption,funs[
x-=dx;
if(x==-55)
{
y+=dy;
x=170;
}
}
// жЁдал
for(x=430,y=220,i=10;i>0;i--)
{
if(i==1)
x-=2*dx;
digits[i].w=70;
digits[i].h=40;
digits[i].x=x;
digits[i].y=y;
digits[i].state=1;
sprintf(c,"%d",i-1);
strcpy(digits[i].caption,c);
x-=dx;
if(!((i-2)%3))
{
y+=dy;
x=430;
}
}
// +,-,*,/
dx+=5;
for(x=520,y=220,i=0;i<6;i++)
{
obuts[i].w=70;
obuts[i].h=40;
obuts[i].x=x;
obuts[i].y=y;
obuts[i].state=1;
if(i>2)
x-=dx;
else
y+=dy;
strcpy(obuts[i].caption,opr[i]
}
}
TButton CloseBut;
void ClearExpField()
{
setcolor(WHITE);
line(LB,DB+1,RB+1,DB+1);
line(RB+2,UB,RB+2,DB);
setfillstyle(1,BLACK);
bar(LB-1,UB,RB+1,DB);
}
void iface()
{
setfillstyle(1,7);
bar(0,0,640,480);
setfillstyle(1,BLUE);
bar(5,5,getmaxx()-5,20);
CloseBut.x=getmaxx()-20;
CloseBut.y=7;
CloseBut.w=10;
CloseBut.h=11;
CloseBut.state=1;
strcpy(CloseBut.caption,"x");
setfillstyle(1,DARKGRAY);
bar(CloseBut.x,CloseBut.y,
CloseBut.Show();
ClearExpField();
line(LB,DB+39,RB,DB+39);
line(RB+1,DB+20,RB+1,DB+38);
setfillstyle(1,BLACK);
bar(LB,DB+20,RB,DB+38);
for(int i=0;i<12;i++)
{
fbuts[i].Show();
digits[i].Show();
obuts[i].Show();
}
}
void carriage(int x,int y,int color)
{
setcolor(color);
setlinestyle(0,1,2);
line(x+4,y+9,x+12,y+9);
setlinestyle(0,1,1);
}
int getstring(char *str)
{
const int freq=450,deltime=40;
const int dx=8,dy=12;
int x=LB,y=UB;
int len=0;
char *p=str,let[10];
ClearExpField();
carriage(x,y,WHITE);
while(1)
{
if(getbutstr(let))
{
if(x>RB-2*(dx*len))
{
if(y<DB-2*dx)
{
carriage(x,y,BLACK);
x=LB;
y+=dy;