2024-10-14 07:42:36
思路:
使用结构体保存职工信息,设计单独的函数,实现录入,按职工工资排序,分解单双数职工,读取和写入文件,显示数据等功能。
1 - 从键盘录入信息到数组结构并保存至文件,录入+写入文件。
2 - 从磁盘文件中读出这些数据,依次打印出来, 读取文件+显示数据。
3 - 对职工数据按工资高低排序,将排好序的各记录存放在文件worker2.dat中, 排序+写入文件。
4 - 将职工号为单数和偶数的职工信息分别存放另两个磁盘文件worker3.dat和worker4.dat中, 分解单双数职工+写入文件。
5 - 并从这两个文件中读出职工信息在显示器上显示出来, 读取文件+显示数据。
代码片段如下:
int main(int argc, char* argv[])
{
worker arr[WORKER_NUMBER];
int cnt = WORKER_NUMBER;
worker odd[WORKER_NUMBER];
int oddnum = 0;
worker even[WORKER_NUMBER];
int evennum = 0;
clear_worker_array(arr, cnt);
clear_worker_array(odd, cnt);
clear_worker_array(even, cnt);
//1.录入并保存至worker1.dat
entering_data(arr, cnt);
if( save_file(arr, cnt, filename[0]) == 0 )
{
printf("原始记录已成功保存至文件 - %s\n", filename[0]);
}
//2.读取worker1.dat并显示
clear_worker_array(arr, cnt);
if( load_file(arr, &cnt, filename[0]) == 0 )
{
printf("载入文件 - %s\n", filename[0]);
}
show_data(arr, cnt);
//3.排序并保存至worker2.dat
sort_by_salary(arr, cnt);
if( save_file(arr, cnt, filename[1]) ==0 )
{
printf("按工资排序后的记录已成功保存至文件 - %s\n", filename[1]);
}
//4.保存单数和双数职工号信息至worker3.dat和worker4.dat
filter_workers(arr, cnt, odd, &oddnum, even, &evennum);
if( save_file(odd, oddnum, filename[2]) == 0 )
{
printf("职工号为单数的记录已成功保存至文件 - %s\n", filename[2]);
}
if( save_file(even, evennum, filename[3]) == 0 )
{
printf("职工号为双数的记录已成功保存至文件 - %s\n", filename[3]);
}
//5.读取worker3.dat和worker4.dat并显示
clear_worker_array(odd, oddnum);
oddnum = 0;
if( load_file(odd, &oddnum, filename[2]) == 0 )
{
printf("载入文件 - %s\n", filename[2]);
}
show_data(odd, oddnum);
clear_worker_array(even, oddnum);
evennum = 0;
if( load_file(even, &evennum, filename[3]) == 0 )
{
printf("载入文件 - %s\n", filename[3]);
}
show_data(even, evennum);
return 0;
}
为了测试方便,此处的宏只指定了5个职工的信息,若要达到你要求的,直接改成10即可。运行结果如下:
完整代码请参考附件 - worker_manager.c
:by never715
2024-10-14 07:59:10
2024-10-14 07:47:40