/**
* 实验题目
* 链表综合算法设计
* 实验内容
* 设有一个职工文件,其结构为职工号no、姓名name、部门号depno、
* 工资数salary、职工号指针pno、部门号指针pdepno和工资数指针psalary。
* 设计一个程序,从该文件中读取记录到一个单链表中,并完成如下功能:
* 1、输入:添加一个职工记录
* 2、输出:输出全部职工记录
* 3、按职工号no排序:通过pno指针将职工记录按照no从小到大的顺序链接起来
* 4、按职工号no输出:沿pno链输出全部职工记录
* 5、按部门号depno排序:通过pdepno指针将职工记录按照depno从小到大的
* 顺序链接起来
* 6、按部门号depno输出:沿pdepno链输出全部职工记录
* 7、按工资数salary排序:通过psalary指针将职工记录按salary从小到大的
* 顺序链接起来
* 8、按salary输出:沿psalary链输出全部职工记录
* 9、全清:删除职工文件中的全部记录
* 10、存储退出:将单链表中的全部结点存储到职工文件中,然后退出程序的
* 运行过程
*
*/
#include <stdio.h>
#define MaxSize 100
/*-------------------职工文件数据结构体----------------------*/
typedef struct node {
int no; // 职工号
char name[10]; // 姓名
int depno; // 部门号
float salary; // 工资数
int pno; // 职工号指针
int pdepno; // 部门号指针
int psalary; // 工资数指针
}EmpType;// 职工类型结构
// 清除职工文件的全部记录
static void DelAll(EmpType emp[], int &n)
{
FILE *fp;
fp = fopen("emp.dat", "wb");
if(fp == NULL){
printf("不能打开职工文件\n");
return;
}
emp[0].pno = emp[0].pdepno = emp[0].psalary = -1; // 初始化
n = 0;
fclose(fp);
}
// 读数据文件并存入emp数组中
static void ReadFile(EmpType emp[], int &n)
{
FILE *fp; // 文件指针
long length; // 文件长度
int i; // 循环变量
fp = fopen("emp.dat", "rb"); // 以只读模式打开二进制文件
if(fp ==