33
// Chuong trinh mo phong Excel bang C++ // Chuong trinh co thuc hien xu ly mot so bieu thuc tuong tu trong Excel // Bai nay la mot bai tap lon cua sinh vien Khoa Cong nghe DHQG HN thuc hien // Sinh vien Ha Anh Tu suu tam #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h> #include <mem.h> #include <io.h> #include <math.h> struct cell{ //Dinh nghia o du lieu char st[128]; float so; }; struct Box{ //Dinh nghia o hien thi tren man hinh int x,y,dx,dy; char bkcolor,color; char *st; }; cell data[7][17]; //Bang tinh hien thoi tren man hinh char X_=1,Y_=0,X=0,Y=0,Xo=1,Yo=0; char ghi=0; int Xmn=1,Ymn=20; float myval(char *st); //Ham cho ket qua tinh toan cua mot bieu thuc, err loi void Boxnoi(Box dt); //Dinh nghia hop noi (button) void sv(); void trangthai(char ok); void op(); void Boxchim(Box dt); void trinhbay(); //Trinh bay man hinh

Chuong Trinh Mo Phong Excel Bang C

Embed Size (px)

Citation preview

Page 1: Chuong Trinh Mo Phong Excel Bang C

// Chuong trinh mo phong Excel bang C++// Chuong trinh co thuc hien xu ly mot so bieu thuc tuong tu trong Excel// Bai nay la mot bai tap lon cua sinh vien Khoa Cong nghe DHQG HN thuc hien// Sinh vien Ha Anh Tu suu tam 

#include <graphics.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include <string.h>#include <mem.h>#include <io.h>#include <math.h>struct cell{ //Dinh nghia o du lieuchar st[128];float so;};struct Box{ //Dinh nghia o hien thi tren man hinhint x,y,dx,dy;char bkcolor,color;char *st;};cell data[7][17]; //Bang tinh hien thoi tren man hinhchar X_=1,Y_=0,X=0,Y=0,Xo=1,Yo=0;char ghi=0;int Xmn=1,Ymn=20;float myval(char *st); //Ham cho ket qua tinh toan cua mot bieu thuc, err loivoid Boxnoi(Box dt); //Dinh nghia hop noi (button)void sv();void trangthai(char ok);void op();void Boxchim(Box dt);void trinhbay(); //Trinh bay man hinhvoid KTDH();void help(); //Khoi tao do hoavoid open_(char *st,char ok); //Mo tepvoid tentep(char *td,char *tentep);void new_();void view();void onhap(int x,int y,int dx,int dy); //O nhap du lieuvoid control(); //Cac dieu khien tu ban phimvoid printtext(Box dt,int vtd); //In chuoi ky tu tren man hinh can traivoid printnum(Box dt,float kq); //In so tren man hinh can phai

Page 2: Chuong Trinh Mo Phong Excel Bang C

void printcell(int x,int y); //In gia tri trong mot ovoid messbox(int x,int y,int dx,int dy,char *td,char *nd); //Cua so thong baovoid menu(int x,int y,int dx,char tt,char *st); //Dinh nghia thuc doncell getdt(int x,int y); //Lay du lieu tai o co toa do (x,y) vi du: (A,3)char *subst(char *st,int vt,int sl); //Lay mot chuoi con trong chuoi stvoid putdt(int x,int y,cell temp); //Ket xuat du lieu ra o co toa do (x,y)void read(); //Doc du lieu tu tep ra bang tinhvoid hst(int x,int y,int sv);char hoi(int x,int y,int dx,int dy,char *st); //Hop cac cau hoi

int posst(char *st1,char *st2); //Vi tri dau tien cua chuoi st1 trong chuoi st2float val(char *st); //Ham tinh gia tri cur chuoi st voi bieu thuc don gian (co goi de quy ham val_())

//Cac ham trong chuong trinhfloat sin_(char *st);float cos_(char *st);float atan_(char *st);float max_(char *st);float smm(char *st,char k);

//*float val_(char *st); //Ham tinh gia tri cua chuoi st tong quat (co cac ham, dia chi...) co goi de quy ham val()float cvr_d(float gt);float cvd_r(float gt);

void cuondoc(char ok); //Dieu khien thanh cuon docvoid cuonngang(char ok); //Dieu khien thanh cuon ngangvoid readstring(int x,int y,int sv,char *st,char c);void delst(char *sttemp,int vt,int sl); //Xoa cac gia tri trong chuoivoid dc(char *st,char *x,char *y);float diachi(char *st,char k); //Lay gia tri trong dia chi o xac dinh boi chuoi stvoid indiachi(); //Hien dia chi hien thoi tren hop dia chichar err; //Xac dinh loi cua cong thuc, gom cac gia tri// 0: Khong co loi// 1: Loi thieu ngoac// 2: Loi ham khong co// 3: Cong thuc co kha nang bi de quy

//Dinh nghia cac ham su dung trong chuong trinhconst soham=7; //Co luong cac hamtypedef char* string;

string tenham[soham]={"(","SIN(","COS(","ATAN(","SUM(","MA ","MIN("};

Page 3: Chuong Trinh Mo Phong Excel Bang C

FILE *filetemp; //Tep temp su dung lam bo demFILE *filemo; //Tep su dung de luu bang tinhchar filename[256];

//Chuong trinh chinhmain(){filetemp= fopen("C:\FileTemp.tmp", "w+b");if(filetemp==NULL)printf("Loi ghi tep! Khong co dia C: de lam dem... De nghi tao them o ao C:");KTDH();trinhbay();view();cuondoc(1);cuonngang(1);control();closegraph();fclose(filetemp);return 0;}

void KTDH(){int gdriver = DETECT, gmode, errorcode;initgraph(&gdriver, &gmode, "d:\tc\bgi");errorcode = graphresult();if (errorcode != grOk){printf("Loi do hoa! Can xac dinh lai duong dan cac tep *.BGI: %s", grapherrormsg(errorcode));printf("Chuong trinh ket thuc...Goodbye");getch();exit(1);}settextjustify(1,1);}void Boxnoi(Box dt){setfillstyle(1,dt.bkcolor);bar(dt.x,dt.y,dt.x+dt.dx,dt.y+dt.dy);setcolor(15);line(dt.x,dt.y,dt.x+dt.dx,dt.y);line(dt.x,dt.y,dt.x,dt.y+dt.dy);

Page 4: Chuong Trinh Mo Phong Excel Bang C

setcolor(8);line(dt.x+dt.dx,dt.y,dt.x+dt.dx,dt.y+dt.dy);line(dt.x,dt.y+dt.dy,dt.x+dt.dx,dt.y+dt.dy);setcolor(dt.color);if(dt.st!=NULL)outtextxy(dt.x+dt.dx/2,dt.y+dt.dy/2,dt.st);}void Boxchim(Box dt){setfillstyle(1,dt.bkcolor);bar(dt.x,dt.y,dt.x+dt.dx,dt.y+dt.dy);setcolor(8);line(dt.x,dt.y,dt.x+dt.dx,dt.y);line(dt.x,dt.y,dt.x,dt.y+dt.dy);setcolor(15);line(dt.x+dt.dx,dt.y,dt.x+dt.dx,dt.y+dt.dy);line(dt.x,dt.y+dt.dy,dt.x+dt.dx,dt.y+dt.dy);setcolor(dt.color);if(dt.st!=NULL)outtextxy(dt.x+dt.dx/2,dt.y+dt.dy/2,dt.st);}void trinhbay(){setfillstyle(1,7);bar(0,0,640,480);Box dt1={4,79,630,385,7,0,NULL};Boxchim(dt1);setfillstyle(1,15);bar(40,100,620,439);setcolor(8);int i,j;new_();for(j=100;j<440;j=j+20)for(i=50;i<540;i=i+80)rectangle(i,j,i+80,j+20);onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);menu(Xmn,Ymn,105,0,"~New");menu(Xmn+106,Ymn,105,0,"~Open");menu(Xmn+106*2,Ymn,105,0,"~Save");menu(Xmn+106*3,Ymn,105,0,"Save ~As");menu(Xmn+106*4,Ymn,105,0,"~Help");menu(Xmn+106*5,Ymn,106,0,"~Quit");Box dt={1,1,636,18,1,15,"Chuong trinh mo phong EXCEL viet bang C++"};Boxnoi(dt);

Page 5: Chuong Trinh Mo Phong Excel Bang C

char st[]="Copyright (C) 1999-2000 by Nguyen Long Chinh - K41C * CNTT";setcolor(8);outtextxy(319,472,st);setcolor(15);outtextxy(321,474,st);setcolor(1);outtextxy(320,473,st);indiachi();dt.x=175;dt.y=50;dt.dx=32;dt.dy=20;dt.bkcolor=7;dt.color=0;dt.st="Ÿ(x)";Boxnoi(dt);dt.x=154;dt.dx=20;dt.st="X";Boxnoi(dt);dt.x=154-21;dt.dx=20;dt.st="û";Boxnoi(dt);

}void view(){if((Xo!=X)||(Yo!=Y)){int i,j;onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);if(((Xo-X_==0)&&(Xo>X))||((Xo-X_==6)&&(Xo<X))||((Yo-Y_==0)&&(Yo>Y))||((Yo-Y_==16)&&(Yo<Y))){

for(j=Y_;j<Y_+17;j++)for(i=X_;i<X_+7;i++){fseek(filetemp,long(i*50+j)*long(sizeof(cell)),SEE K_SET);fwrite(&data[i-X_][j-Y_],sizeof(cell),1,filetemp);}if((Xo-X_==0)&&(Xo>X))X_--;else

Page 6: Chuong Trinh Mo Phong Excel Bang C

if((Xo-X_==6)&&(Xo<X))X_++;if((Yo-Y_==0)&&(Yo>Y))Y_--;elseif((Yo-Y_==16)&&(Yo<Y))Y_++;for(j=Y_;j<Y_+17;j++)for(i=X_;i<X_+7;i++){fseek(filetemp,long(i*50+j)*long(sizeof(cell)),SEE K_SET);fread(&data[i-X_][j-Y_],sizeof(cell),1,filetemp);}cuondoc(0);cuonngang(0);Box dt;dt.x=5;dt.y=80;dt.dx=44;dt.dy=19;dt.st=NULL;dt.bkcolor=7;dt.color=0;Boxnoi(dt);dt.dx=45;dt.y=100;dt.st=(char *) malloc(3);strcpy(dt.st," 1");dt.st[0]='0'+(Y_+1)/10;if(dt.st[0]=='0')dt.st[0]=' ';dt.st[1]='0'+(Y_+1)%10;for(j=100;j<440;j=j+20){Boxnoi(dt);dt.y=dt.y+20;dt.st[1]++;if(dt.st[1]==58){if(dt.st[0]==' ')dt.st[0]='1';else dt.st[0]++;dt.st[1]='0';}}dt.x=50;dt.y=80;dt.dx=79;

Page 7: Chuong Trinh Mo Phong Excel Bang C

strcpy(dt.st,"A");dt.st[0]='A'+X_;for(i=50;i<540;i=i+80){Boxnoi(dt);dt.x=dt.x+80;dt.st[0]++;}free(dt.st);for(j=Y_;j<Y_+17;j++)for(i=X_;i<X_+7;i++){printcell(i,j);}}onhap(50+(X-X_)*80,100+(Y-Y_)*20,80,20);Xo=X;Yo=Y;}}void onhap(int x,int y,int dx,int dy){setwritemode(1);setlinestyle(0,0,3);setcolor(8);line(x,y+2,x,y+dy-2);line(x-1,y,x+dx+1,y);line(x+dx,y+2,x+dx,y+dy-2);line(x-1,y+dy,x+dx+1,y+dy);setwritemode(0);setlinestyle(0,0,1);}void control(){int ch,cho;char c;do{trangthai(0);read();trangthai(1);hst(210,50,50);do{

Page 8: Chuong Trinh Mo Phong Excel Bang C

indiachi();ch=getch();cho=ch;if(ch==0){ch=getch();cho=ch;switch(ch){case 75:if(X>0)X--;break;case 77:if(X<25)X++;break;case 72:if(Y>0)Y--;break;case 80:if(Y<49)Y++;break;case 49://Nmenu(Xmn,Ymn,105,1,"~New");if((ghi==1)||(ghi==3)){c=hoi(150,200,300,70,"Ban co muon ghi lai hay khong ?(C/K)");if((c=='C')||(c=='c')){if(ghi==1)open_("Ten Tep Can Ghi",1);sv();}};new_();menu(Xmn,Ymn,105,0,"~New");break;case 24://Omenu(Xmn+106,Ymn,105,1,"~Open");if((ghi==1)||(ghi==3)){c=hoi(150,200,300,70,"Ban co muon ghi lai hay khong ?(C/K)");if((c=='C')||(c=='c')){if(ghi==1)open_("Ten Tep Can Ghi",1);sv();}};open_("Ten Tep Can Mo",0);op();menu(Xmn+106,Ymn,105,0,"~Open");break;case 31://Smenu(Xmn+106*2,Ymn,105,1,"~Save");

Page 9: Chuong Trinh Mo Phong Excel Bang C

if(ghi==1)open_("Tep Can Ghi",1);sv();menu(Xmn+106*2,Ymn,105,0,"~Save");break;case 30://Amenu(Xmn+106*3,Ymn,105,1,"Save ~As");open_("Ten Tep Can Ghi",1);sv();menu(Xmn+106*3,Ymn,105,0,"Save ~As");break;case 35:help();break;case 16:menu(Xmn+106*5,Ymn,106,1,"~Quit");c=hoi(150,200,300,70,"Ban co muon thoat khong ?(C/K)");if((c=='C')||(c=='c'))ch=256;menu(Xmn+106*5,Ymn,106,0,"~Quit");break;}}else switch(ch){case 13:case 27:break;default:ch=0;}view();hst(210,50,50);}while((ch!=13)&&(ch!=0)&&(ch!=256));if(ch==0)ungetch(cho);}while(ch!=256);}cell getdt(int x,int y){cell temp;if((x>=X_)&&(x<=X_+6)&&(y>=Y_)&&(y<=Y_+16))temp=data[x-X_][y-Y_];else{fseek(filetemp,long((x*50+y)*sizeof(cell)),SEEK_SE T);fread(&temp,sizeof(cell), 1,filetemp);}return(temp);}

Page 10: Chuong Trinh Mo Phong Excel Bang C

void putdt(int x,int y,cell temp){if((x>=X_)&&(x<=X_+6)&&(y>=Y_)&&(y<=Y_+16))data[x-X_][y-Y_]=temp;else{fseek(filetemp,long((x*50+y)*sizeof(cell)),SEEK_SE T);fwrite(&temp,sizeof(cell), 1,filetemp);}}char *subst(char *st,int vt,int sl){char *sttemp;sttemp=(char*)malloc(strlen(st)+1);movmem(&st[vt],sttemp,sl);sttemp[sl]='';return sttemp;}void hst(int x,int y,int sv){cell temp;Box dt;dt.x=x;dt.y=y;dt.dx=sv*8;dt.dy=20;dt.bkcolor=15;dt.color=0;temp=getdt(X,Y);dt.st=temp.st;printtext(dt,0);}void readstring(int x,int y,int sv,char *st,char c){Box dt;dt.x=x;dt.y=y;dt.dx=sv*8;dt.dy=20;dt.bkcolor=15;dt.color=0;dt.st=NULL;Boxchim(dt);dt.st=st;

Page 11: Chuong Trinh Mo Phong Excel Bang C

char ok=0;int vtd=0;int i=0,l=0;int ch;l=strlen(st);printtext(dt,vtd);outtextxy(dt.x+(i-vtd)*8+4,dt.y+dt.dy/2+2,"_");do{ch=getch();if(ch==0){ch=getch();switch(ch){case 75:if(i>0)i--;if(i<vtd){if(vtd>=5)vtd=vtd-5;else vtd=0;ok=1;};break;case 77:if(i<l)i++;if(i>vtd+sv-1){vtd=vtd+5;ok=1;};break;case 83:if(i<l){movmem(&st[i+1],&st[i],l-i);ok=1;l--;if((c==0)&&(ghi==0))ghi=1;if((c==0)&&(ghi==2))ghi=3;}break;}}elseswitch(ch){case 8:if((l>=i)&&(i>0)){i--;if(i<vtd)if(vtd>=5)vtd=vtd-5;else vtd=0;movmem(&st[i+1],&st[i],l-i);l--;ok=1;if((c==0)&&(ghi==0))ghi=1;if((c==0)&&(ghi==2))ghi=3;}break;case 27:case 13:case 9:break;default:if(l<127){l++;movmem(&st[i],&st[i+1],l-i);st[i]=ch;i++;if(i>vtd+sv-1)vtd=vtd+5;ok=1;

Page 12: Chuong Trinh Mo Phong Excel Bang C

if((c==0)&&(ghi==0))ghi=1;if((c==0)&&(ghi==2))ghi=3;}}if(ok==1)printtext(dt,vtd);else{ setcolor(dt.bkcolor);line(dt.x+1,dt.y+15,dt.x+dt.dx-1,dt.y+15);}ok=0;setcolor(dt.color);outtextxy(dt.x+(i-vtd)*8+4,dt.y+dt.dy/2+2,"_");}while(ch!=13);}void read(){cell temp;temp=getdt(X,Y);readstring(210,50,50,temp.st,0);int i=0,l=0;putdt(X,Y,temp);printcell(X,Y);if(err!=0){messbox(220,200,200,70,"Thong bao","Loi bieu thuc");getch();}for(l=0;l<50;l++)for(i=0;i<26;i++)printcell(i,l);for(l=49;l>=0;l--)for(i=25;i>=0;i--)printcell(i,l);if(Y<49)Y++;else{Y=0;if(X<25)X++;else X=0;};view();}void printtext(Box dt,int vtd){setfillstyle(1,dt.bkcolor);bar(dt.x+1,dt.y+1,dt.x+dt.dx-1,dt.y+dt.dy-1);setcolor(dt.color);char *temp;temp=subst(dt.st,vtd,(dt.dx-4)/8);settextjustify(0,1);outtextxy(dt.x+2,dt.y+dt.dy/2,temp);

Page 13: Chuong Trinh Mo Phong Excel Bang C

settextjustify(1,1);free(temp);}void printnum(Box dt,float kq){char *st;gcvt(kq,100,st);if(strlen(st)>8)gcvt(kq,4,st);setfillstyle(1,dt.bkcolor);bar(dt.x+1,dt.y+1,dt.x+dt.dx-1,dt.y+dt.dy-1);setcolor(dt.color);char *temp;temp=subst(st,0,dt.dx/8);settextjustify(2,1);outtextxy(dt.x+dt.dx,dt.y+dt.dy/2,temp);settextjustify(1,1);free(temp);}void printcell(int x,int y){cell temp;char *t;Box dt;temp=getdt(x,y);dt.x=52+(x-X_)*80;dt.y=102+(y-Y_)*20;dt.dx=76;dt.dy=16;dt.bkcolor=15;dt.color=0;dt.st=temp.st;temp.so=val_(temp.st);

//Chuan chuoiif((err!=0)&&(temp.st[0]=='=')){ strcpy(t,temp.st);strupr(t);delst(t,0,1);temp.so=myval(t);}if((x>=X_)&&(x<=X_+6)&&(y>=Y_)&&(y<=Y_+16))if((err==0)&&(temp.st[0]!=0))printnum(dt,temp.so);else printtext(dt,0);putdt(x,y,temp);if(err!=0)temp.so=0;if(temp.st[0]!='=')err=0;

Page 14: Chuong Trinh Mo Phong Excel Bang C

}float myval(char *st){int i;int j;int m=0,vt1=0,vt2;float gt[50];char dau[50];char dem=0;char *stxl;for(i=0;i<=strlen(st);i++)switch(st[i]){case '(':m=m+1;break;case ')':m=m-1;break;case '*':case '+':case '-':case '/':case '':if(m==0){if (((st[i]=='+')||(st[i]=='-'))&&(st[i-1]=='E'));else{vt2=i;stxl=subst(st,vt1,vt2-vt1);gt[dem]=val(stxl);dau[dem]=st[i];dem+=1;vt1=i+1;if(stxl!=NULL)free(stxl);if(err!=0){return(0);}}}}if(m!=0){err=2;return(0);}dem--;

Page 15: Chuong Trinh Mo Phong Excel Bang C

for(i=0;i<dem;i++)switch(dau[i]){case '*':gt[i]=gt[i]*gt[i+1];for(j=i+1;j<dem;j++){gt[j]=gt[j+1];dau[j-1]=dau[j];}dem--;i--;break;case '/':if(gt[i+1]!=0){gt[i]=gt[i]/gt[i+1];for(j=i+1;j<dem;j++){gt[j]=gt[j+1];dau[j-1]=dau[j];}dem--;i--;}else{err=3;return(0);}break;}while(dem!=0)switch(dau[0]){case '+':gt[0]=gt[0]+gt[1];for(j=1;j<dem;j++){gt[j]=gt[j+1];dau[j-1]=dau[j];}dem--;break;case '-':gt[0]=gt[0]-gt[1];for(j=1;j<dem;j++){

Page 16: Chuong Trinh Mo Phong Excel Bang C

gt[j]=gt[j+1];dau[j-1]=dau[j];}dem--;break;}

return gt[0];}

void delst(char *sttemp,int vt,int sl){movmem(&sttemp[vt+sl],&sttemp[vt],strlen(sttemp));}

//Dinh nghia ham posstint posst(char *st1,char *st2){if(strstr(st2,st1)==NULL)return(255);elsereturn strstr(st2,st1)-st2;}float val_(char *st){char i,d=0;err=0;for(i=0;i<strlen(st);i++){if(((st[i]=='+')||(st[i]=='-'))&&(st[i-1]!='E')){err=1;return 0;}elseif(st[i-1]!='E')if(st[i]=='E'){d++;if(d>1){err=1;return 0;}}

Page 17: Chuong Trinh Mo Phong Excel Bang C

elseif(((st[i]<'0')||(st[i]>'9'))&&(st[i]!='.')){err=1;return 0;}}return atof(st);}

float val(char *st){// float kq;cell kq;char i;char *tg;char x;char y;kq.so=val_(st);char ok=0;if(err==1){for(i=0;i<soham;i++)if(posst(tenham[i],st)==0){ err=0;tg=subst(st,strlen(tenham[i]),strlen(st)-strlen(tenham[i])-1);switch(i){case 0:kq.so=myval(tg);ok=1;break;case 1:kq.so=sin_(tg);ok=1;break;case 2:kq.so=cos_(tg);ok=1;break;case 3:kq.so=atan_(tg);ok=1;break;case 4:kq.so=smm(tg,0);ok=1;break;case 5:kq.so=smm(tg,1);ok=1;break;case 6:kq.so=smm(tg,2);ok=1;break;// default: dc(st,&x,&y);// kq=getdt(x,y);}free(tg);}if(ok==0){dc(st,&x,&y);kq=getdt(x,y);}

Page 18: Chuong Trinh Mo Phong Excel Bang C

}return(kq.so);}float cvr_d(float gt){return(gt*3.141592654/180);}float cvd_r(float gt){return(gt*180/3.141592654);}

float sin_(char *st){float kq;kq=myval(st);kq=cvr_d(kq);kq=sin(kq);return(kq);}float cos_(char *st){float kq;kq=myval(st);kq=cvr_d(kq);kq=cos(kq);return(kq);}float atan_(char *st){float kq;kq=myval(st);kq=atan(kq);kq=cvd_r(kq);return(kq);}float smm(char *st,char k){char i;char j=0;char m=0;char kt=0;float kq_=0;float kq=0;

Page 19: Chuong Trinh Mo Phong Excel Bang C

char *tg;for(i=0;i<=strlen(st);i++){switch(st[i]){case'(':m++;break;case')':m--;break;case'':case',':if(m==0){tg=subst(st,j,i-j);j=i+1;if(posst(":",tg)!=255){kq_=diachi(tg,k);}else kq_=myval(tg);switch(k){case 0:kq=kq+kq_;break;case 1:if(kt==0)kq=kq_;else if(kq<kq_)kq=kq_;break;case 2:if(kt==0)kq=kq_;else if(kq>kq_)kq=kq_;break;}kt=1;if(tg!=NULL)free(tg);}}}return(kq);}void dc(char *st,char *x,char *y){char *tg;if((st[0]>='A')||(st[0]<='Z')){*x=st[0]-'A';tg=subst(st,1,strlen(st)-1);*y=val_(tg)-1;free(tg);}else err=5;}float diachi(char *st,char k)

Page 20: Chuong Trinh Mo Phong Excel Bang C

{char vt;char i;cell kq;cell tg;char x1;char y1;char x2;char y2;char *lt;lt=subst(st,0,vt);vt=posst(":",st);dc(lt,&x1,&y1);if(lt!=NULL)free(lt);lt=subst(st,vt+1,strlen(st)-vt);dc(lt,&x2,&y2);if(lt!=NULL)free(lt);if(k==0)kq.so=0;else kq=getdt(x1,y1);//data[x1][y1];for(i=x1;i<=x2;i++)for(vt=y1;vt<=y2;vt++){tg=getdt(i,vt);switch(k){case 0:/*SUM*/kq.so=kq.so+tg.so;break;case 1:/*MAX*/if(kq.so<tg.so)kq.so=tg.so;break;case 2:/*MIN*/if(kq.so>tg.so)kq.so=tg.so;break;}}return(kq.so);}void messbox(int x,int y,int dx,int dy,char *td,char *nd){Box dt;dt.x=x;dt.y=y+20;dt.dx=dx;dt.dy=dy-20;dt.bkcolor=7;dt.color=0;dt.st=nd;int size = imagesize(x, y,x+dx,y+dy);

Page 21: Chuong Trinh Mo Phong Excel Bang C

void *arrow;arrow = malloc(size);getimage(x,y,x+dx,y+dy,arrow);Boxnoi(dt);dt.bkcolor=1;dt.color=15;dt.y=y;dt.dy=20;dt.st=td;Boxnoi(dt);size=getch();putimage(x, y, arrow,0);free(arrow);ungetch(size);}void cuondoc(char ok){int x=612,y=100,dy=340;Box dt;if(ok==1){dt.x=x;dt.y=y;dt.dy=dy;dt.dx=20;dt.bkcolor=7;dt.st=NULL;Boxnoi(dt);dt.x=x+2;dt.y=y+2;dt.dy=16;dt.dx=17;dt.color=0;dt.st="-";Boxnoi(dt);dt.y=y+dy-18;dt.dy=16;dt.dx=17;dt.color=0;dt.st="-";Boxnoi(dt);}dt.x=x+2;dt.y=y+20;

Page 22: Chuong Trinh Mo Phong Excel Bang C

dt.dy=dy-40;dt.dx=17;dt.bkcolor=7;dt.st=NULL;Boxchim(dt);dt.x=x+3;dt.dy=17*dt.dy/50;dt.y=y+20+(dy-40)*Y_/50;dt.dx=15;dt.bkcolor=7;dt.st=NULL;Boxnoi(dt);}void cuonngang(char ok){int x=210,y=442,dx=400;Box dt;if(ok==1){dt.x=x;dt.y=y;dt.dx=dx;dt.dy=20;dt.bkcolor=7;dt.st=NULL;Boxnoi(dt);dt.x=x+2;dt.y=y+2;dt.dx=16;dt.dy=17;dt.color=0;dt.st=" ";dt.st[0]=17;Boxnoi(dt);dt.x=x+dx-18;dt.dx=16;dt.dy=17;dt.color=0;dt.st=" ";Boxnoi(dt);}dt.y=y+2;dt.x=x+20;dt.dx=dx-40;

Page 23: Chuong Trinh Mo Phong Excel Bang C

dt.dy=17;dt.bkcolor=7;dt.st=NULL;Boxchim(dt);dt.y=y+3;dt.dx=7*dt.dx/26;dt.x=x+20+(dx-40)*X_/26;dt.dy=15;dt.st=NULL;Boxnoi(dt);}void menu(int x,int y,int dx,char tt,char *st){char st1[20];strcpy(st1,st);int vth=posst("~",st1);if(vth!=255)delst(st1,vth,1);Box dt;dt.x=x;dt.y=y;dt.dx=dx;dt.dy=20;dt.bkcolor=7;dt.color=0;dt.st=st1;int i;if(tt==0)Boxnoi(dt);else Boxchim(dt);for(i=0;i<strlen(st1);i++)if(i!=vth)st1[i]=' ';setcolor(4);outtextxy(dt.x+dt.dx/2,dt.y+dt.dy/2,st1);}char hoi(int x,int y,int dx,int dy,char *st){messbox(x,y,dx,dy,"Thong Bao",st);return getch();}void new_(){int i,j;cell temp;for(i=0;i<128;i++)temp.st[i]=0;temp.so=0;fseek(filetemp,0L,SEEK_SET);for(i=0;i<50*26;i++)

Page 24: Chuong Trinh Mo Phong Excel Bang C

fwrite(&temp,sizeof(cell),1,filetemp);for (i=0;i<7;i++)for (j=0;j<17;j++){strcpy(data[i][j].st,"");data[i][j].so=0;}onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);X_=1;Y_=0;X=0;Y=0;Xo=1;Yo=0;onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);view();}void tentep(char *td,char *tentep){Box dt;int x=150,y=200,dx=300,dy=70;dt.x=x;dt.y=y+20;dt.dx=dx;dt.dy=dy-20;dt.bkcolor=7;dt.color=0;dt.st=NULL;int size = imagesize(x, y,x+dx,y+dy);void *arrow;arrow = malloc(size);getimage(x,y,x+dx,y+dy,arrow);Boxnoi(dt);dt.bkcolor=1;dt.color=15;dt.y=y;dt.dy=20;dt.st=td;Boxnoi(dt);readstring(x+20,y+30,32,tentep,1);putimage(x, y, arrow,0);free(arrow);}void open_(char *st,char ok){char loi=0;FILE *temp;char filentemp[256];tentep(st,filentemp);

Page 25: Chuong Trinh Mo Phong Excel Bang C

if ((temp = fopen(filentemp,"r"))== NULL){if(ok==0){ messbox(150,200,300,70,"Thong Bao","Tep chua ton tai");getch();loi=1;}}elseif (ok==1){ messbox(120,200,350,70,"Thong Bao","Tep da ton tai!Ban co muon ghi de ? (C/K)");if(getch()=='K')loi=1;}fclose(temp);if(loi==0){strcpy(filename,filentemp);}}void sv(){int i;cell dt;size_t size;filemo=fopen(filename,"w+b");fseek(filetemp,0L,SEEK_SET);fseek(filemo,0L,SEEK_SET);for(i=0;i<26*50;i++){fread(&dt,sizeof(cell),1,filetemp);fwrite(&dt,sizeof(cell),1,filemo);}fclose(filemo);ghi=2;}void op(){int i;cell data;size_t size;filemo=fopen(filename,"r+b");fseek(filetemp,0L,SEEK_SET);fseek(filemo,0L,SEEK_SET);for(i=0;i<26*50;i++){

Page 26: Chuong Trinh Mo Phong Excel Bang C

fread(&data,sizeof(cell),1,filemo);fwrite(&data,sizeof(cell),1,filetemp);}onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);X_=1;Y_=0;X=0;Y=0;Xo=1;Yo=0;fclose(filemo);onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);view();}void indiachi(){Box dt;char st[4];dt.x=6;dt.y=50;dt.dx=122;dt.dy=20;dt.color=0;dt.bkcolor=15;st[3]=0;st[0]=X+'A';st[1]=(Y+1)/10+'0';st[2]=(Y+1)%10+'0';if(st[1]=='0'){st[1]=st[2];st[2]=0;}dt.st=st;Boxchim(dt);}void trangthai(char ok){char st[]="Nhap du lieu",st1[]="Dieu khien";Box dt={5,442,203,20,7,0,NULL};if(ok==0)dt.st=st;else dt.st=st1;Boxnoi(dt);}void help(){int x=180;int y=110;int dx=280;int dy=200;Box dt;dt.x=x;dt.y=y+20;dt.dx=dx;

Page 27: Chuong Trinh Mo Phong Excel Bang C

dt.dy=dy-20;dt.bkcolor=7;dt.color=0;dt.st=NULL;int size = imagesize(x, y,x+dx,y+dy);void *arrow;arrow = malloc(size);getimage(x,y,x+dx,y+dy,arrow);Boxnoi(dt);dt.bkcolor=1;dt.color=15;dt.y=y;dt.dy=20;dt.st="Help";Boxnoi(dt);setcolor(0);outtextxy(320,140,"* Cac ham su dung: ");outtextxy(320,150," SUM: Tinh tong ");outtextxy(320,160," MAX: Tinh gia tri lon nhat");outtextxy(320,170," MIN: Tinh gia tri nho nhat");outtextxy(320,180," SIN: Tinh sin() ");outtextxy(320,190," COS: Tinh cos() ");outtextxy(320,200," ATAN: Tinh Arctan ");outtextxy(320,210,"* Cong thuc bat dau boi dau = ");outtextxy(320,220," + Chuoi ky tu: Hien ben trai");outtextxy(320,230," + So: Hien ben phai ");outtextxy(320,240,"* Ket thuc nhap du lieu: Enter");outtextxy(320,250,"* Alt+Hotkey: Chon Menu ");outtextxy(320,260,"-----o0o-----");setcolor(4);outtextxy(320,270,"Copyright (C) 1999-2000 by");outtextxy(320,280,"Nguyen Long Chinh");outtextxy(320,290,"K41C * Cong nghe - DHQG Ha Noi");getch();putimage(x, y, arrow,0);free(arrow);}//Ket thuc chuong trinh