标签:
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;//总工资初始为0 147 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 }else 339 { 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 }
标签:
原文地址:http://www.cnblogs.com/minmsy/p/5120403.html