C语言职工信息管理系统课程设计(6)

2019-06-17 19:13

else

Nofind(); //if(p)结束

} //void Modify(Link l) //修改功能结束

//插入记录:按工号查询到要插入的节点的位置,然后在该工号之后插入一个新节点。 void Insert(Link l) {

Node *s,*r,*p; /*p指向插入位置,p指新插入记录节点*/ char ch,new_num[10],old_num[10];

//old_num[]保存插入点位置之前的工号,new_num[]保存输入的新记录的工号 int flag=0; s=l->next; system(\Disp(l);

while(1) {

//stringinput(s,10,\ after the Number:\

printf(\请你输入已存在的工号(以'0'返回上一级菜单:)\scanf(\

if(strcmp(old_num,\ //输入'0',跳出while(1),即跳出Insert()函数 return;

s=l->next; //作用? 每次从第一个节点开始找 flag=0;

while(s) /*查询该工号是否存在,flag=1表示该工号存在*/ {

if(strcmp(s->data.num,old_num)==0) {

flag=1; break; }

s=s->next; }

if(flag==1)

break; /*若工号存在,则进行插入之前的新记录的输入操作*/ else {

getchar();

printf(\scanf(\if(ch=='y'||ch=='Y') {continue;} else

{return;} //回主菜单 }

}//while(1)

/*以下新记录的插入新节点,工号不能跟已存在的工号相同,操作与Add()相同*/

printf(\请你输入待插入的工号(以'0'返回上一级菜单:)\scanf(\

if(strcmp(new_num,\ //输入'0',跳出while(1),即跳出add()函数 return;

s=l->next; //作用? 每次从第一个节点开始找,看num是否重复。

while(s) //工号重复时,返回主菜单 {

if(strcmp(s->data.num,new_num)==0) {

printf(\提示:工号为'%s'的已经职工存在'!\\n\flag=1; return ; }

s=s->next; } //while(s)

p=(Node *)malloc(sizeof(Node)); if(!p) {

printf(\如没有申请到,打印提示信息*/ return ; /*返回主界面*/ }

strcpy(p->data.num,new_num); printf(\请你输入姓名:\scanf(\getchar();

printf(\请你输入性别:\scanf(\getchar();

printf(\请你输入部门:\scanf(\getchar();

printf(\请你输入职称:\scanf(\getchar();

printf(\请你输入工资:\scanf(\getchar();

// 信息输入已经完成

p->next=NULL; /*表明这是链表的尾部结点*/

saveflag=1; /*在main()有对该全局变量的判断,若为1,则进行存盘操作*/ /*将指针赋值给r,因为l中的头节点的下一个节点才实际保存着学生的记录*/

r=l->next; while(1) {

if(strcmp(r->data.num,old_num)==0) /*在链表中插入一个节点*/ {

p->next=r->next; r->next=p; break; }

r=r->next; }// while(1) , r作为查询指针,依次从第一个节点找起,找到后 跳出 while(1)循环

Disp(l);

printf(\// getchar(); }

/*统计该公司工资最高和最低的人数及平均工资*/ void Tongji(Link l) {

Node *pm,*pn; /*用于指向工资最高和最低节点*/ Node *r=l->next;

int countm=0,countn=0; /*保存工资最高,最低*/ if(!r)

{ system(\

printf(\getchar(); return ; }

system(\Disp(l); pm=pn=r; while(r) {

if(r->data.gz<1900) countm++; if(r->data.gz<4000) countn++;

if(r->data.gz>=pm->data.gz) pm=r; if(r->data.gz>=pn->data.gz) pn=r; r=r->next; }

printf(\printf(\printf(\

printf(\

printf(\printf(\ gz:%d\\n\printf(\getchar(); }

/*利用插入排序法实现单链表的按总分字段的降序排序,从高到低*/ 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)); /*新建节点用于保存从原链表中取出的节点信息*/ 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中存储是的已排序的链表的头指针*/

p=l->next; /*已排好序的头指针赋给p,准备填写名次*/ while(p!=NULL) /*当p不为空时,进行下列操作*/ {

i++; /*结点序号*/

p->data.mingci=i; /*将名次赋值*/ p=p->next; /*指针后移*/ }

Disp(l); saveflag=1;

printf(\ =====>sort complete!\\n\ }


C语言职工信息管理系统课程设计(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:超霸气的20页军事理论题库

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: