数据结构课程设计职工信息管理系统单链表实现程序源代码 下载本文

数据结构课程设计_职工信息管理系统_单链表实现程序源代码

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