#include #include struct work_info { int num; int work; int ranking; struct work_info *next; }; int length; typedef struct work_info worker; worker *create_w_Doc(); void print_w_Doc(worker *head); void input_w_Doc(worker *head); void delect_w_Doc(worker *head); void fun1_w_Doc(worker *head); void stor_w_Doc(worker *head); void fun_w_Doc(worker *head); int main() { worker *head; head=create_w_Doc(); input_w_Doc(head); delect_w_Doc(head); fun1_w_Doc(head); fun_w_Doc(head); stor_w_Doc(head); print_w_Doc(head); return 0; } worker *create_w_Doc() { printf(" *************************** \n "); printf(" * 职工工作量统计 * \n "); worker *head,*p1,*p2; length=0; int num,work; head=p1=(worker*)malloc(sizeof(worker)); printf("请输入工号、工作量:\n\n"); scanf("%d%d",&num,&work); while(num!=0) { p2=(worker*)malloc(sizeof(worker)); p2->num=num; p2->work=work; p1->next=p2; p1=p2; length++; scanf("%d%d",&num,&work); } printf("输入成功!\n\n"); return head; } void input_w_Doc(worker *head) { worker *p1,*p2; int n,i; p1=head; printf("请输入你需要加入的位置:"); scanf("%d",&n); if(n>length) { printf("输入错误!\n"); return; } else { printf("输入职工工号、工作量:\n"); p2=(worker*)malloc(sizeof(worker)); scanf("%d%d",&p2->num,&p2->work); p1=head; while(p1!=NULL) { if(p1->num==p2->num) { printf("输入不正确,请重新输入:"); scanf("%d%d",&p2->num,&p2->work); } p1=p1->next; } p1=head; for(i=0;inext; } p2->next=p1->next; p1->next=p2; length++; printf("插入成功!\n\n"); return; } } void delect_w_Doc(worker *head) { worker *p1,*p2; int num; p1=head->next; p2=head; printf("请输入需要删除的工号:"); scanf("%d",&num); while(p1!=NULL) { if(p1->num==num) { p2->next=p1->next; free(p1); length--; printf("删除成功!\n\n"); return; } p1=p1->next; p2=p2->next; } printf("输入错误!\n\n"); } void fun1_w_Doc(worker *head) { worker *p1; int num, work; p1=head; printf("请输入你需要累加的工号:"); scanf("%d",&num); p1=head; do { if(p1->num==num) { printf("请输入你需要累加的工作量:"); scanf("%d",&work); p1->work+=work; return; } p1=p1->next; }while(p1!=NULL); } void fun_w_Doc(worker *head) { worker *p1,*p2; p1=head; p2=head->next; for(p1=head;p1!=NULL;p1=p1->next) { for(p2=p1->next;p2!=NULL;p2=p2->next) { if(p1->workwork) { p1->next=p2->next; p2->next=p1; p2=p1; } } } return; } void stor_w_Doc(worker *head) { worker *p1,*p2; int n; p1=head->next; int i; i=1; while(p1!=NULL) { p1->ranking=i; p1=p1->next; i++; } return; } void print_w_Doc(worker *head) { worker *p; if(p=NULL) { printf("无记录!"); return; } printf("记录为:\n\n"); printf("工号 工作量 名次\n"); p=head->next; do { printf("%d %d %d\n",p->num,p->work,p->ranking); p=p->next; }while(p!=NULL); }