1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "malloc.h" 4 #include "string.h" 5 6 const int maxlen=1000;//最大长度 7 typedef char type; 8 9 struct Data{ 10 int num;//职工的编号 11 char name[20];//职工的姓名 12 char sex[20];//职工的性别 13 char partment[20];//职工的部门 14 char position[20];//职工的职称 15 float basic;//职工的基本工资 16 float add;//职工的奖金 17 int days;//职工的出勤 18 float tall;//职工的总工资 19 }; 20 //-------------链表------------------ 21 struct link_list 22 { 23 Data data; 24 link_list *next; 25 }; 26 27 /*创建链表*/ 28 link_list *Create_list(link_list *head) 29 { 30 head = (link_list *)malloc(sizeof link_list);//分配存储区域 31 if(head==NULL) 32 { 33 printf("setup fail\n"); 34 35 exit(0); 36 } 37 38 head->data.num = 0; 39 head->data.name[0]='\0';//表头结点的 数据区域置空 40 head->data.sex[0]='\0';//表头结点的 数据区域置空 41 head->data.partment[0]='\0';//表头结点的 数据区域置空 42 head->data.position[0]='\0';//表头结点的 数据区域置空 43 head->data.basic =0; //初始为0基本工资 44 head->data.add = 0; //奖金0 45 head->data.days = 0; //出勤 46 head->data.tall = 0; //总工资初始为0 47 head->next=NULL; 48 return head; 49 } 50 51 /*向链表中插入一个元素(插在链表的最后面)*/ 52 void Insert_list(link_list *head,Data data) 53 { 54 link_list *q=NULL; 55 link_list *p=NULL; 56 link_list *s=NULL; 57 q=head;//头结点 58 p=q->next; 59 while(p!=NULL)//找到尾指针 60 { 61 q=p; 62 p=q->next; 63 } 64 s=(link_list *)malloc(sizeof link_list);//分配存储区域 65 s->data = data; 66 q->next=s; 67 s->next=p; 68 } 69 70 //添加信息 71 void insert(link_list *head)//链表尾部插入新的图书信息 72 { 73 int i; 74 Data data; 75 int num;//职工的编号 76 char name[20];//职工的姓名 77 char sex[20];//职工的性别 78 char partment[20];//职工的部门 79 char position[20];//职工的职称 80 float basic;//职工的基本工资 81 float add;//职工的奖金 82 int days;//职工的出勤 83 float tall;//职工的总工资 84 int select; 85 printf(" ------------------------------------\n"); 86 printf(" |---------------添加职工信息---------|\n"); 87 printf(" 请输入职工编号[整数]:"); 88 scanf("%d",&num); 89 printf(" 请输入职工姓名[字符串]:"); 90 scanf("%s",&name); 91 printf(" 请输入职工性别[字符串]:\n"); 92 printf(" --------0:男\n"); 93 printf(" --------1:女\n"); 94 printf(" 请选择:"); 95 scanf("%d",&select); 96 while(select!=0&&select!=1) 97 { 98 printf(" 输入有误,输入(0|1):"); 99 scanf("%d",&select);100 }101 switch(select)102 {103 case 0:104 strcpy(data.sex,"男");105 break;106 case 1:strcpy(data.sex,"女");107 break;108 }109 printf(" 请输入职工部门[字符串]:");110 scanf("%s",&partment);111 printf(" 请输入职工职称[字符串]:");112 scanf("%s",&position);113 114 printf(" 请输入基本工资[浮点数]:");115 scanf("%f",&basic);116 117 printf(" 请输入奖金[浮点数]:");118 scanf("%f",&add);119 printf(" 请输入出勤天数[浮点数]:");120 scanf("%d",&days);121 122 for(i=0;name[i]!='\0';i++)123 {124 data.name[i] = name[i];125 }126 data.name[i] ='\0';//结束127 128 for(i=0;partment[i]!='\0';i++)129 {130 data.partment[i] = partment[i];131 }132 data.partment[i] ='\0';//结束133 134 for(i=0;position[i]!='\0';i++)135 {136 data.position[i] = position[i];137 }138 data.position[i] ='\0';//结束139 140 141 data.num= num ;142 // printf("num:%d\n",data.num);143 data.basic = basic ;144 data.add= add ;145 data.days = days ;146 data.tall = 0;//总工资初始为0147 148 Insert_list(head,data);//插入职工基本信息149 printf(" |-----------职工信息插入成功---------|\n");150 printf(" ------------------------------------\n");151 }152 153 void compute(link_list *head)//计算每个职工的总工资154 {155 link_list *q=NULL;156 q=head->next;157 while(q!=NULL)158 {159 q->data.tall =q->data.basic + q->data.add ;160 q=q->next;161 }162 }163 164 void Look(link_list *head)//查看所有职工信息165 {166 int i;167 link_list *q=NULL;168 q=head->next;169 printf(" <全部职工信息如下> \n");170 printf("-----------------------------------------------------------------------------\n");171 printf("编号\t姓名\t性别\t部门\t职称\t基本工资\t奖金\t出勤\t总工资\n");172 printf("-----------------------------------------------------------------------------\n");173 174 while(q!=NULL)175 {176 177 printf("%d\t%s\t%s\t%s\t%s\t%.2f\t\t%.2f\t%d\t%.2f\n",q->data.num,q->data.name,q->data.sex,q->data.partment,q->data.position,178 q->data.basic,q->data.add,q->data.days,q->data.tall);179 q=q->next;180 }181 printf("------------------------- <全部职工信息如上> ----------------------------------\n");182 }183 //删除职工信息(根据编号)184 void Delete(link_list *head,int num) 185 {186 printf("---------------- <删除编号为[%d]的信息> ----------------\n",num); 187 link_list *p,*f;188 p = head;189 f = head->next;190 bool flags = true;191 if(f!=NULL)192 {193 while(p!=NULL&&f!=NULL&&f->data.num!=num)194 {195 p = p->next;196 f = f->next;197 }198 if(f!=NULL&&p!=NULL)199 {200 p->next = f->next;201 printf(" [编号[%d]的职工删除成功]\n",num); 202 }else printf("----------------[编号[%d]的职工不存在]----------------\n",num); 203 }204 }205 //修改职工信息206 void Update_single(link_list *p)//修改单个职工信息207 {208 int i;209 Data data;210 int num;//职工的编号211 char name[20];//职工的姓名212 char sex[20];//职工的性别213 char partment[20];//职工的部门214 char position[20];//职工的职称215 float basic;//职工的基本工资216 float add;//职工的奖金217 int days;//职工的出勤218 float tall;//职工的总工资219 int select;220 printf(" ------------------------------------\n");221 printf(" |---------------修改职工信息---------|\n");222 printf(" 请输入职工编号[整数]:");223 scanf("%d",&num);224 printf(" 请输入职工姓名[字符串]:");225 scanf("%s",&name);226 printf(" 请输入职工性别[字符串]:\n");227 printf(" --------0:男\n");228 printf(" --------1:女\n");229 printf(" 请选择:");230 scanf("%d",&select);231 while(select!=0&&select!=1)232 {233 printf(" 输入有误,输入(0|1):");234 scanf("%d",&select);235 }236 switch(select)237 {238 case 0:239 strcpy(data.sex,"男");240 break;241 case 1:strcpy(data.sex,"女");242 break;243 }244 printf(" 请输入职工部门[字符串]:");245 scanf("%s",&partment);246 printf(" 请输入职工职称[字符串]:");247 scanf("%s",&position);248 249 printf(" 请输入基本工资[浮点数]:");250 scanf("%f",&basic);251 252 printf(" 请输入奖金[浮点数]:");253 scanf("%f",&add);254 printf(" 请输入出勤天数[浮点数]:");255 scanf("%d",&days);256 257 for(i=0;name[i]!='\0';i++)258 {259 data.name[i] = name[i];260 }261 data.name[i] ='\0';//结束262 263 for(i=0;partment[i]!='\0';i++)264 {265 data.partment[i] = partment[i];266 }267 data.partment[i] ='\0';//结束268 269 for(i=0;position[i]!='\0';i++)270 {271 data.position[i] = position[i];272 }273 data.position[i] ='\0';//结束274 275 276 data.num= num ;277 data.basic = basic ;278 data.add= add ;279 data.days = days ;280 data.tall = data.basic+data.add;//总工资初始281 p->data = data;//修改职工基本信息282 printf(" |----------职工信息修改成功---------|\n");283 printf(" ------------------------------------\n");284 }285 286 void Update(link_list *p,int num) //修改职工信息287 {288 link_list *q=p;289 q = p->next;290 printf("---------------- <修改编号为[%d]的信息> ----------------\n",num); 291 if(q==NULL)292 {293 printf("----------------[编号[%d]的职工不存在]----------------\n",num); 294 }295 else while(q!=NULL){296 297 if(num==(q->data.num)) 298 {299 Update_single(q);300 break;301 }302 q=q->next;303 } 304 305 } 306 307 void Show_Single(link_list *q,char num[maxlen])//显示p结点的所有信息308 {309 printf(" <职工信息如下> \n");310 printf("-----------------------------------------------------------------------------\n");311 printf("编号\t姓名\t性别\t部门\t职称\t基本工资\t奖金\t出勤\t总工资\n");312 printf("-----------------------------------------------------------------------------\n");313 printf("%d\t%s\t%s\t%s\t%s\t%.2f\t\t%.2f\t%d\t%.2f\n",q->data.num,q->data.name,q->data.sex,q->data.partment,q->data.position,314 q->data.basic,q->data.add,q->data.days,q->data.tall);315 316 }317 318 void Search(link_list *p,char num[maxlen]) //按编号|姓名319 {320 //printf("%s\n",num);321 link_list *q;322 q=p->next;323 bool flags = true;324 if(q==NULL)325 {326 }else while(q!=NULL){327 if((atoi(num)==(q->data.num))||(strcmp(num,q->data.name)==0)) 328 {329 Show_Single(q,num);330 flags = false;331 break;332 }333 q=q->next;334 } 335 if(flags)336 {337 printf("----------------[查询职工信息不存在]----------------\n",num); 338 }else339 {340 printf("-----------------------------------------------------------------------------\n");341 printf(" [职工信息如上] \n"); 342 }343 344 345 } 346 347 348 int main()349 {350 link_list* we;351 link_list *head = NULL;352 link_list *s = NULL;/*接收指针 case3的指针接收*/353 head=Create_list(head);354 char sel[100];355 int select;356 do{357 system("CLS");358 printf(" ----------------[菜单]--------------\n");359 printf(" |--------1:插入职工信息--------------|\n");360 printf(" |--------2:计算职工总工资------------|\n");361 printf(" |--------3:删除职工信息--------------|\n");362 printf(" |--------4:修改职工信息--------------|\n");363 printf(" |--------5:查看全部职工信息----------|\n");364 printf(" |--------6:查找[按编号|姓名]---------|\n");365 printf(" |--------0:退出----------------------|\n");366 printf(" ------------------------------------\n");367 printf("您的选择是:");368 scanf("%d",&select);369 while(select!=1&&select!=2&&select!=3&&select!=4&&select!=5&&select!=6&&select!=0)370 {371 printf("您输入有误,请重新输入:");372 scanf("%d",&select);373 }374 switch(select)375 {376 case 1:377 insert(head);//插入信息职工信息378 break;379 case 2:380 compute(head);//计算职工总工资381 Look(head);382 break;383 case 3:384 printf("删除职工的编号:");//删除385 scanf("%d",&select);386 Delete(head,select);387 break;388 case 4:389 printf("修改的职工的编号:");390 scanf("%d",&select);391 Update(head,select);392 break;393 case 5:394 Look(head);395 break;396 case 6:397 printf("查询的职工编号或姓名:");398 getchar();399 gets(sel);400 Search(head,sel);401 break;402 default:403 exit(0);404 break;405 }406 printf("\n");407 printf(" ------------------------------------\n");408 printf(" |--------1:继续操作------------------|\n");409 printf(" |--------0:退出----------------------|\n");410 printf(" ------------------------------------\n");411 printf("您的选择是:");412 scanf("%d",&select);413 while(select!=1&&select!=0)414 {415 printf("您输入有误,请重新输入:");416 scanf("%d",&select);417 }418 }while(select==1);419 return 0;420 } 职工信息如下> 修改编号为[%d]的信息> 删除编号为[%d]的信息> 全部职工信息如上> 全部职工信息如下>
职工管理系统[无bug]