思路:
使用結構體保存職工信息,設計單獨的函數,實現錄入,按職工工資排序,分解單雙數職工,讀取和寫入文件,顯示數據等功能。
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