这段函数是用来计算总费用的,通过入院登记文件中的住院号匹配费用表中相同的住院号,然后读取记录,将同一住院号的不同缴费金额相加,得到的结果再写入入院登记表中相应的位置。但实际操作时,好像是循环控制出现了问题,是不是代码有问题?/* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */void AutoComp(void) { // 自动计算每一个病人住一次院所缴费用 long pos; float totalcost; FILE *fp1, *fp2; InTab it; // 定义住院登记表的结构体变量it BillTab bt; // 定义费用表的结构体变量bt if ((fp1=fopen(".\\4810IN.dat", "r+b"))==0) { printf("\n\n无法打开住院登记信息文件!\n"); return; } if ((fp2=fopen(".\\4810BILL.dat", "rb"))==0) { printf("\n\n无法打开费用信息文件!\n"); fclose(fp1); return; } system("cls"); printf("\n\n\t\tAuto computing, Please waiting......"); pos=ftell(fp1); // 保留要读取的住院记录在住院登记文件中的位移量,以便重新定位该记录进行更新 fread(&it, sizeof(InTab), 1, fp1); // 从住院登记文件中读取一个住院记录 while (!feof(fp1)) { // 计算每一个住院记录对应的费用总额 totalcost=0; rewind(fp2); // 复位到费用文件头 fread(&bt, sizeof(BillTab), 1, fp2); // 从费用文件中读取一个费用记录 while (!feof(fp2)) { // 在费用文件中查找住院号微it.num病人的所有缴费记录 if (strcmp(bt.num, it.num)==0) { // 如果在费用文件中找到了住院号为it.num病人的缴费记录,则进行汇总计算 totalcost+=bt.amount; // 缴费记录相加求和 break; //结束在费用文件中的查找 } fread(&bt, sizeof(BillTab), 1, fp2); // 从费用文件中读取一个费用记录 } it.cost=totalcost; // 用计算得到的汇总值更新住院登记结构体变量it的对应成员值 fseek(fp1, pos, SEEK_SET); // 在住院登记文件中定位正在进行汇总计算的住院记录 fwrite(&it, sizeof(InTab), 1, fp1); // 用住院登记结构体变量it更新住院登记文件中已定位的住院记录内容 pos=pos+sizeof(InTab); // 计算下一个待处理住院记录的位移量(即当前记录的下一个记录的位移量) fseek(fp1, pos, SEEK_SET); // 在住院登记文件中定位下一个待处理的住院记录 fread(&bt, sizeof(InTab), 1, fp1); // 从住院登记文件中读取一个住院记录 } fclose(fp1); fclose(fp2); system("cls"); printf("\n\n\t\t完成自动计算. "); system("pause");}
1 回答
惊回头
TA贡献12条经验 获得超4个赞
1>c:\users\administrator\desktop\bia\空\空\空.cpp(42): error C3861: “system”: 找不到标识符
- 1 回答
- 0 关注
- 1092 浏览
添加回答
举报
0/150
提交
取消