财务管理系统1.2 For SGWINDOW 2.0虽然提供了多帐单操作,但是不能打印帐单报表,因此在财务管理系统1.2 For SGWINDOW2.0版本上做帐单数据的导出功能,帐单数据导出之后可以当作报表打印,暂定版本为1.3。在商用系统当中,有专门的报表管理器。这里的帐单导出,只做HTML表格的生成。导出文件为HTML格式,用浏览器打开。 下面是帐单导出的实现代码 void On_Export() { finaitem instance = {0L,"",""}; FILE *fdatabas; int flag; int oamt =0,iamt = 0; char outstr[128] = ""; ChangeReckName(); if (access(User.DatabaseName, 4) == -1) { Messagebox(GetAppVersion(false), "帐单文件不存在,导出失败", SGMSGBOX_OKONLY,SGMSGBOXICON_critical); WndhndGetFocus(GetMessageSource(window),ID_TXTRECKNAME); return; } else { amount = 0; if (!openHTML()) { return; } HTML(); TABLE(); TR(); TH("日期"); _TH(); TH("资金数额");_TH(); TH("备注"); _TH(); _TR(); fdatabas = fopen(User.DatabaseName,"rb"); while (!feof(fdatabas)) { if (fread(&instance,sizeof(finaitem),1,fdatabas)!=1) { break; } amount += instance.sum; (instance.sum> 0 )? (iamt+=instance.sum) : (oamt += instance.sum); TR(); sprintf(outstr,"%-12s",instance.date); TD(outstr); _TD(); sprintf(outstr,"%-10d",instance.sum); TD(outstr); _TD(); sprintf(outstr,"%-10s",instance.comment); TD(outstr); _TD(); _TR(); } _TABLE(); TABLE(); TR(); TH("帐单名称");_TH(); TH("资金余额");_TH(); TH("出帐总额");_TH(); TH("入帐总额");_TH(); _TR(); TR(); sprintf(outstr, "%11s",User.DatabaseName); TD(outstr);_TD(); sprintf(outstr, "%11d",amount); TD(outstr);_TD(); sprintf(outstr, "%11d",-oamt); TD(outstr);_TD(); sprintf(outstr, "%11d",iamt); TD(outstr);_TD(); _TR(); _TABLE(); _HTML(); closeHTML(); } sprintf(outstr,"帐单:%s导出成功", User.DatabaseName); Messagebox(GetAppVersion(false),outstr,SGMSGBOX_OKONLY,SGMSGBOXICON_information); fclose(fdatabas); } void HTML() { fprintf(fexp, "<HTML>\n<HEAD>\n<TITLE>"); fprintf(fexp, "%s生成帐单",APPNAME); fprintf(fexp, "</TITLE>\n<BODY>\n"); fprintf(fexp, "<BR><BR><CENTER><H3>%s</H3>", GetAppVersion(true)); } void TABLE() { fprintf(fexp, "<TABLE border=1 >\n"); } void _TABLE() { fprintf(fexp, "</TABLE>\n"); } void TR() { fprintf(fexp, "<TR>\n"); } void _TR() { fprintf(fexp, "</TR>\n"); } void TH(char *caption) { fprintf(fexp, "<TH BGCOLOR=YELLOW>%s\n", caption); } void _TH() { fprintf(fexp, "</TH>\n"); } void TD(char *caption) { fprintf(fexp, "<TD>%s\n", caption); } void _TD() { fprintf(fexp, "</TD>\n"); } void _HTML() { fprintf(fexp, "</CENTER></BDOY>\n</THML>"); closeHTML(); } bool openHTML() { char expname[96] = ""; memccpy(expname, User.DatabaseName, '.', 8); if (expname[strlen(expname)-1] == '.') { expname[strlen(expname)-1] = '\0'; } strcat(expname, ".htm"); if ( access(expname, 0) != -1) { if (Messagebox(GetAppVersion(false), "该帐单已导出,是否覆盖?", SGMSGBOX_YESNO, SGMSGBOXICON_question) == SGMSGBOX_NO) { return false; } } fexp = fopen(expname, "w"); if (fexp == NULL) { Messagebox(GetAppVersion(false),strcat(expname, "生成失败! 文件名非法或文件具有写保护"), SGMSGBOX_OKONLY, SGMSGBOXICON_exclamation); WndhndGetFocus(GetMessageSource(window),ID_TXTRECKNAME); fclose(fexp); return false; } return true; } void closeHTML() { fclose(fexp); } v1.5 运行界面 下面是用帐单导出功能将一个演示帐单数据导出的演示报表: 财务管理系统 1.3 For SGWINDOW 2.0 Copyright (C) 2005-8 - 2006-10 SGPRO 日期 资金数额 备注 2006-10-14 5000 初额 2006-10-14 -120 通讯支出 2006-10-14 -70 交通支出 2006-10-14 -160 体检 帐单名称 资金余额 出帐总额 入帐总额 演示帐单.DB 4650 350 5000 Copyright (C) 2006-10-14 SGPRO

评论