小题目【链表1】

  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
");
 34 
 35         exit(0);
 36     }
 37 
 38     head->data.num = 0;
 39     head->data.name[0]='';//表头结点的 数据区域置空
 40     head->data.sex[0]='';//表头结点的 数据区域置空
 41     head->data.partment[0]='';//表头结点的 数据区域置空
 42     head->data.position[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("      ------------------------------------
");
 86     printf("     |---------------添加职工信息---------|
");
 87     printf("      请输入职工编号[整数]:");
 88     scanf("%d",&num);
 89     printf("      请输入职工姓名[字符串]:");
 90     scanf("%s",&name);
 91     printf("      请输入职工性别[字符串]:
");
 92        printf("      --------0:男
");
 93     printf("      --------1:女
");
 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]!='';i++)
123     {
124          data.name[i] = name[i];
125     }
126     data.name[i] ='';//结束
127 
128     for(i=0;partment[i]!='';i++)
129     {
130          data.partment[i] = partment[i];
131     }
132     data.partment[i] ='';//结束
133 
134     for(i=0;position[i]!='';i++)
135     {
136          data.position[i] = position[i];
137     }
138     data.position[i] ='';//结束
139 
140 
141     data.num=  num ;
142 //    printf("num:%d
",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("     |-----------职工信息插入成功---------|
");
150     printf("      ------------------------------------
");
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("                         <全部职工信息如下>                             
");
170     printf("-----------------------------------------------------------------------------
");
171     printf("编号	姓名	性别	部门	职称	基本工资	奖金	出勤	总工资
");
172     printf("-----------------------------------------------------------------------------
");
173     
174     while(q!=NULL)
175     {
176        
177         printf("%d	%s	%s	%s	%s	%.2f		%.2f	%d	%.2f
",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("-------------------------<全部职工信息如上>----------------------------------
");
182 }
183 //删除职工信息(根据编号)
184 void Delete(link_list *head,int num) 
185 {
186     printf("----------------<删除编号为[%d]的信息>----------------
",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]的职工删除成功]
",num); 
202         }else  printf("----------------[编号[%d]的职工不存在]----------------
",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("      ------------------------------------
");
221     printf("     |---------------修改职工信息---------|
");
222     printf("      请输入职工编号[整数]:");
223     scanf("%d",&num);
224     printf("      请输入职工姓名[字符串]:");
225     scanf("%s",&name);
226     printf("      请输入职工性别[字符串]:
");
227        printf("      --------0:男
");
228     printf("      --------1:女
");
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]!='';i++)
258     {
259          data.name[i] = name[i];
260     }
261     data.name[i] ='';//结束
262 
263     for(i=0;partment[i]!='';i++)
264     {
265          data.partment[i] = partment[i];
266     }
267     data.partment[i] ='';//结束
268 
269     for(i=0;position[i]!='';i++)
270     {
271          data.position[i] = position[i];
272     }
273     data.position[i] ='';//结束
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("     |----------职工信息修改成功---------|
");
283     printf("      ------------------------------------
");
284 }
285 
286 void Update(link_list *p,int num)  //修改职工信息
287 {
288     link_list *q=p;
289     q = p->next;
290     printf("----------------<修改编号为[%d]的信息>----------------
",num); 
291     if(q==NULL)
292     {
293         printf("----------------[编号[%d]的职工不存在]----------------
",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("                           <职工信息如下>                             
");
310     printf("-----------------------------------------------------------------------------
");
311     printf("编号	姓名	性别	部门	职称	基本工资	奖金	出勤	总工资
");
312     printf("-----------------------------------------------------------------------------
");
313     printf("%d	%s	%s	%s	%s	%.2f		%.2f	%d	%.2f
",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
",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("----------------[查询职工信息不存在]----------------
",num); 
338     }else
339     {
340         printf("-----------------------------------------------------------------------------
");
341         printf("                 [职工信息如上]                   
"); 
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("      ----------------[菜单]--------------
");
359         printf("     |--------1:插入职工信息--------------|
");
360         printf("     |--------2:计算职工总工资------------|
");
361         printf("     |--------3:删除职工信息--------------|
");
362         printf("     |--------4:修改职工信息--------------|
");
363         printf("     |--------5:查看全部职工信息----------|
");
364         printf("     |--------6:查找[按编号|姓名]---------|
");
365         printf("     |--------0:退出----------------------|
");
366         printf("      ------------------------------------
");
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("
");
407         printf("      ------------------------------------
");
408         printf("     |--------1:继续操作------------------|
");
409         printf("     |--------0:退出----------------------|
");
410         printf("      ------------------------------------
");
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 }

 职工管理系统[无bug]

原文地址:https://www.cnblogs.com/minmsy/p/5120403.html