1、 /*为头结点申请空间*/ Last=First; /*将尾指针指向头结点*/ First-prior=Last; /*设置头结点的前驱指针*/ Last-next=First; /*设置头结点的后继指针*/ p=First; /*设置当前记录指针为头结点*/*创建教师信息循环双链表*/void create() int unit,flag=0; float temp; TEACHER *info; /*新增结点*/ init(); for(;) if(flag=1)break; /*标志为1,不再输入*/ clrscr(); /*清屏*/ printf(Please enter teache
2、r infomationn);input end entern info=(TEACHER *)malloc(sizeof(TEACHER);/*为新增结点申请空间*/ if(!info) /*没有空间出错处理*/nout of memory exit(0); No: /*开始提示输入*/ scanf(%s,info-no); if(info-no0=)/*输入结束输入*/ flag=1;break;Name:name);Sex:sex);Profess:profess);Dept:dept);Class:class);Workload:%f,&temp); info-workload=tem
3、p; if(strcmp(info-profess,prof)unit=25; /*教授*/aprof)unit=20;/*副教授*/lect)unit=15;/*讲师*/ass)unit=10;/*助教*/lessonf=unit*info-workload;/*根据职称计算代课费*/next=Last-next;/*新插入结点插在表末尾*/ /*新结点的前驱为原来的尾结点*/next=info; /*原来尾结点的后继为新结点*/ Last=info; /*新的尾结点为新结点*/*头结点的前驱为尾指针*/ return;/*显示第一条记录*/void firstr() if(First=La
4、st)return; clear(); p=First- print(p);/*显示最后一条记录*/void lastr() p=Last;/*显示前一条记录*/void priorr() if(First=Last) if(p-prior!=First) p=p-prior; else/*显示下一条记录*/void nextr() if(p=Last)/*从文件读数据*/void load() TEACHER *p1; FILE *fp; if(fp=fopen(data.txt,rb)=NULL)can not open filen while(First-next!=First) /*如
5、果当前表不空,删除当前表*/ p1=First-next=p1- free(p1); free(First); First=(TEACHER*)malloc(sizeof(TEACHER); /*创建头结点*/First)out of memory!n while(!feof(fp) /*当文件不为空时读数据*/ p1=(TEACHER*)malloc(sizeof(TEACHER);p1) if(1!=fread(p1,sizeof(TEACHER),1,fp) break; /*读数据*/ p1- /*将新读出的数据链在当前表尾*/next=p1; Last=Last- fclose(fp
6、); /*关闭文件*/*保存数据到磁盘文件*/void save() /*定义指向文件的指针*/ /* 定义移动指针*/wb)=NULL) /*为输出打开一个文本文件,如没有则建立*/ /*如不能打开文件,显示提示信息,结束程序*/ /*返回*/ p1=First; /*移动指针从头指针开始*/ while(p1-=First) /*如p1不为空*/ fwrite(p1-next,sizeof(TEACHER),1,fp); /*写入一条记录*/ p1=p1- /*指针后移,处理下一条记录*/*删除记录*/void delete()/*表为空*/ if(p=First) /*p为头结点*/ i
7、f(p=Last)/*p为尾结点*/ Last=p- p1=p; /*一般情况*/prior-next-prior=p1-/*输出记录*/void print(TEACHER *p) int x1=70,y1=100; char str20; outtextxy(x1+110,y1+75, p- outtextxy(x1+360,y1+75,p- outtextxy(x1+110,y1+105,p- outtextxy(x1+360,y1+105,p- outtextxy(x1+110,y1+135,p- outtextxy(x1+360,y1+135,p- sprintf(str,p-wor
8、kload); outtextxy(x1+110,y1+165,str);lessonf); outtextxy(x1+360,y1+165,str);/*清除界面显示信息*/void clear() int x1=70,y1=100,m,n; for(m=0;m4;m+) for(n=0;nnext=First|First-next=First)return; p00=First; /*作排好序表的表头和第一个结点*/ p0=First- p1=p0-prior=p0; p0- templast=p0; while(p1!=First) /*当p1没有转回到表头时*/ p11=p1; /*将
9、p11作为待插入结点*/ /*p1指向下一个待排序结点*/ /*从头结点开始寻找插入位置*/ p0=p00- /*p0是p00的后继*/ while(p0!=First&p11-workloadp0-workload) p00=p0;/*当新插入结点比当前表结点大时,指针后移*/ p0=p0- if( p0=First)/*如果p0移到了头结点*/ p11-next=p00-prior=p00; p00-next=p11;prior=p11; templast=p11; else /*新插入结点介于p00和p0之间*/next=p0; Last=templast; /*设置尾指针*/ /*设置当前记录指针*/流程图:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1