数据结构课程设计_职工信息管理系统_单链表实现程序源代码
Disp(l); max=min=t; while(t) {
if(t->data.gz>=max->data.gz) max=t; if(t->data.gz<=min->data.gz) min=t; t=t->next;
printf(\最高工资为:%d\\n\
printf(\a.sex,t->data.bm,t->data.zc,t->data.gz); printf(\最低工资为:%d\\n\
printf(\a.sex,t->data.bm,t->data.zc,t->data.gz); } }
void Sort(Link l) //排序 {
Link ll;
Node *p,*rr,*s; int i=0;
if(l->next==NULL) { system(\
printf(\ getchar(); return ; }
ll=(Node*)malloc(sizeof(Node)); /*用于创建新的节点*/ if(!ll) {
printf(\如没有申请到,打印提示信息*/
return ; /*返回主界面*/ }
ll->next=NULL; system(\
Disp(l); /*显示排序前的所有职工记录*/ p=l->next;
while(p) /*p!=NULL*/ {
s=(Node*)malloc(sizeof(Node)); /*新建节点用于保存从原链表中取出的节点信息*/
13 / 18
数据结构课程设计_职工信息管理系统_单链表实现程序源代码
if(!s) /*s==NULL*/ {
printf(\如没有申请到,打印提示信息*/
return ; /*返回主界面*/ }
s->data=p->data; /*填数据域*/ s->next=NULL; /*指针域为空*/ rr=ll;
/*rr链表于存储插入单个节点后保持排序的链表,ll是这个链表的头指针,每次从头开始查找插入位置*/
while(rr->next!=NULL && rr->next->data.gz>=p->data.gz)
{rr=rr->next;} /*指针移至总分比p所指的节点的总分小的节点位置*/
if(rr->next==NULL)/*若新链表ll中的所有节点的总分值都比p->data.gz大时,就将p所指节点加入链表尾部*/ rr->next=s;
else /*否则将该节点插入至第一个总分字段比它小的节点的前面*/ {
s->next=rr->next; rr->next=s; }
p=p->next; /*原链表中的指针下移一个节点*/ }
l->next=ll->next; /*ll中存储是的已排序的链表的头指针*/
Disp(l); saveflag=1;
printf(\ }
void Save(Link l) {
FILE* fp;
Node *p; //实现保存操作的临时的结构体指针变量 int flag=1,count=0;
fp=fopen(\ if(fp==NULL) {
printf(\提示:重新打开文件时发生错误!\\n\ return;
14 / 18
数据结构课程设计_职工信息管理系统_单链表实现程序源代码
}
p=l->next; //p指向第一个记录结点 while(p) {
if(fwrite(p,sizeof(Node),1,fp)==1) //将第一个记录结点值写入文件
{
p=p->next; //依次写入第二个结点的值,
count++; //文件的记录数+1 } else {
flag=0; break; }
} //while(p)
if(count>0) {
printf(\提示:文件保存成功.(有%d条记录已经保存.)\\n\
saveflag=0; } else {
system(\
printf(\保存文件失败,'0'条记录被保存!\\n\ }
fclose(fp); } // void Save结束
void main() {
Link list; /*定义链表*/ // struct node *list; FILE *fp; /* 文件指针 */
int choose; /*保存选择结果变量*/ char ch; /*保存(y,Y,n,N)*/
15 / 18
数据结构课程设计_职工信息管理系统_单链表实现程序源代码
int count=0; /*保存文件中的记录条数(或结点个数)*/ struct node *p,*r; /*定义记录指针变量*/
printf(\职工信息管理系统\\n\\t\\t\\t\\t\\n\
list=(struct node*)malloc(sizeof(struct node));
if(!list) {
printf(\如没有申请到,打印提示信息*/
return ; /*返回主界面*/ }
list->next=NULL; r=list;
fp=fopen(\ if(fp==NULL) {
printf(\提示:文件还不存在,是否创建?(y/n)\\n\ scanf(\ if(ch=='y'||ch=='Y')
fp=fopen(\ else
exit(0);
} // if(fp==NULL)
printf(\提示:文件已经打开,正在导入记录......\\n\
while(!feof(fp)) //没有到文件尾时,循环 {
p=(struct node*)malloc(sizeof(struct node)); if(!p) {
printf(\没有申请成功*/ exit(0); /*退出*/ }
if(fread(p,sizeof(struct node),1,fp)) /* 读文件的已有内容放入结点中 */ {
p->next=NULL; r->next=p;
16 / 18