c语言编程系统,如何换页显示?
case '4': {int n=0, flag; char ch[30]; FILE *fp, *fpIdx;
SellTab t; // 定义课程表的结构体变量t
SellIdxTab tIdx; // 定义课程索引表的结构体变量tIdx
if ((fp=fopen(".\\4806SPXX.dat", "rb"))==0) {
printf("\n\nCannot open COURSE data file!\n");
break;
}
if ((fpIdx=fopen(".\\4806SPXX.idx", "rb"))!=0) flag=1; // 判断课程文件是否存在索引文件
else flag=0;
if (flag) { // 选择是否利用索引文件进行逻辑排序显示
do {
printf("\n\n\n\t\t 逻辑使用索引文件?(y/n): ");
gets(ch);
} while (!(ch[0]=='y' || ch[0]=='n' || ch[0]=='Y' || ch[0]=='N'));
if (ch[0]=='n' || ch[0]=='N') { fclose(fpIdx); flag=0; }
}
system("cls");
// 在屏幕上列表显示课程信息,首先显示表头信息
printf("\n电影票编号 排片编号 退票标记 应付/应退金额 座位排 座位号\n");
printf("\n===============================================================================\n\n");
if (flag) { // 存在课程索引文件时,则按课程索引文件中索引项的顺序进行显示——索引可实现逻辑排序
fread(&tIdx, sizeof(SellIdxTab), 1, fpIdx); // 从课程索引文件中读取一个课程索引项
while (!feof(fpIdx)) { // 列表方式按课程索引文件中索引项的顺序逐行显示课程记录
fseek(fp, tIdx.offset, SEEK_SET); // 根据索引项中的位移量在课程文件中定位课程记录
fread(&t, sizeof(SellTab), 1, fp); // 从课程文件中读取一个课程记录
printf("%-11s ", t.dypnum);
printf("%-7s ", t.ppnum);
printf(" %1d ", t.refund);
printf("\t%-2d ", t.money);
printf("\t\t%-2s ", t.seatrow);
printf("\t%-2s ", t.seatnum); printf("\n");
n++;
fread(&tIdx, sizeof(SellIdxTab), 1, fpIdx); // 从课程索引文件中读取一个课程索引项
if (n%8==0 || feof(fpIdx)) { // 换页或列表显示完毕的处理,每页显示20个课程记录
gotoxy(0,21);
printf("\n===============================================================================\n\n");
printf("\t\t 按任意键继续. ");
system("pause"); // 停下来,按任意键继续,让用户看清屏幕上的显示内容
system("cls"); // 清屏后重新显示表头信息
printf("\n电影票编号 排片编号 退票标记 应付/应退金额 座位排 座位号\n");
printf("\n===============================================================================\n\n");
}
} // 如果显示一屏之后不想继续往下查香,该如何处理?请同学们思考!
} else { // 不存在课程索引文件时,则按课程文件中课程记录的顺序进行显示
fread(&t, sizeof(SellTab), 1, fp); // 从课程文件中读取一个课程记录
while (!feof(fp)) { // 列表方式逐行显示从课程文件中读取的每一个课程记录
printf("%-11s ", t.dypnum);
printf("%-7s ", t.ppnum);
printf(" %1d ", t.refund);
printf("\t%-2d ", t.money);
printf("\t\t%-2s ", t.seatrow);
printf("\t%-2s ", t.seatnum); printf("\n");
n++;
fread(&t, sizeof(SellTab), 1, fp); // 从课程文件中读取下一个课程记录
if (n%8==0 || feof(fp)) { // 换页或列表显示完毕的处理,每页显示20个课程记录
gotoxy(0,21);
printf("\n===============================================================================\n\n");
printf("\t\t 按任意键继续. ");
system("pause"); // 停下来,按任意键继续,让用户看清屏幕上的显示内容
system("cls"); // 清屏后重新显示表头信息
printf("\n电影票编号 排片编号 退票标记 应付/应退金额 座位排 座位号\n");
printf("\n===============================================================================\n\n");
}
} // 如果显示一屏之后不想继续往下查香,该如何处理?请同学们思考!
}
if (n==0) { printf("\n\n\t\t 没有相关记录."); system("pause"); }
fclose(fp);
if (flag) fclose(fpIdx);
break; // 跳出switch语句
}