正文

教师管理程序2005-04-23 07:33:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/goal00001111/692.html

分享到:

/*输入一组数据,包括某人的学号,姓名,性别,年龄和收入,
可以由用户决定按某种顺序排序 */
/*2005-4-22 梁见斌*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OK 1
#define OVERFLOW 1
typedef struct l{
   char name[15];
   char sex[8];
   int number;
   int age;
   float income;
   struct l *next;
}Lk;

Lk *creat(Lk stu[]);
void print(Lk *stu);
int sort_menu(void);
void sort(Lk **stu, int n) ;
void insert(Lk **stu);
void del_menu(Lk *stu);
void del_1 (Lk **stu);
void del_2 (Lk **stu);
void del_3 (Lk **stu);
void del_4 (Lk **stu);
void del_5 (Lk **stu);
void find_menu(Lk *stu);
void find_1 (Lk **stu);
void find_2 (Lk **stu);
void find_3 (Lk **stu);
void find_4 (Lk **stu);
void find_5 (Lk **stu);

int main(void)
{
   Lk *student;
   int flag, n;
   
   student = creat(student);
a: do{
      puts("您需要什么服务?");
      puts("排序请按1;查找请按2;插入新名单请按3;");
      puts("删除名单请按4;显示当前结果请按5;离开请按0");
      printf("请输入一个选择: ");
      scanf("%d", &flag);
      fflush(stdin);
   } while(flag < 0 || flag > 5) ;  
    
   switch(flag)
   {
      case 1:    n=sort_menu();
                  sort(&student, n);
                  break;
      case 2:    find_menu(student);
                  break;
      case 3:    insert(&student);
                  break;    
      case 4:    del_menu(student);
                  break;
      case 5:    print(student);
                  break;            
      default :    puts("谢谢使用,再见!");
                  break;               
   }   
   do{
      puts("您还需要其他服务吗?");
      puts("继续请按1;离开请按0");
      printf("请输入一个选择: ");
      scanf("%d", &flag);
      fflush(stdin);
   } while(flag < 0 || flag > 1) ;  
   if(flag == 1)
       goto a;
      else
          puts("谢谢使用,再见!");
   system("pause");
   return 0;
}  

Lk *creat(Lk *stu)
{
   int i=0, num;
   Lk *head, *p, *s;
   head = (Lk *)malloc(sizeof(Lk));
   if(!head)
      {
         puts("出错了!");
         getchar();
         exit(OVERFLOW);
      }   
   p = head;
      printf("\n请输入第%d个人的序号,输入0表示输入结束\t", i+1);
   scanf("%d", &num);
   fflush(stdin);
   while (num > 0)
   {
      s = (Lk *)malloc(sizeof(Lk));
      if(!s)
         {
            puts("出错了!!");
            getchar();
            exit(OVERFLOW);
         }   
         s->next = NULL;
      p->next = s;
      p = s;
      s->number = num;
      printf("姓名\t");
      scanf("%s", &s->name);
      fflush(stdin);
      printf("性别\t");
      scanf("%s", &s->sex);
      fflush(stdin);
      printf("年龄\t");
      scanf("%d", &s->age);
      fflush(stdin);
      printf("薪水\t");
      scanf("%f", &s->income);
      fflush(stdin);
      i++;
         printf("\n请输入第%d个人的序号,输入0表示输入结束\t", i+1);
      scanf("%d", &num);
      fflush(stdin);
   }  
   return head;
}
void print(Lk *stu)
{
   Lk *p;
   printf("%5s%10s%12s%10s%20s\n", "序号", "姓名", "性别", "年龄", "薪水");
   for( p = stu->next; p; p=p->next)
       printf("%3d%12s%12s%10d%20f\n",
                p->number, p->name, p->sex, p->age, p->income);                  
}

int sort_menu(void)
{
   int n;
   do{
      printf("您希望按照哪种顺序排列---按序号排列请按1\n");
      printf("\t---按姓氏排列请按2\n");
      printf("\t---按性别排列请按3\n");
      printf("\t---按年龄排列请按4\n");
      printf("\t---按薪水排列请按5\n");
      scanf("%d", &n);
      fflush(stdin);
   } while(n < 1 || n > 5);   
   return n;
}

void sort(Lk **stu, int n)
{
   Lk *head, *p, *q, *s, *min;
   
   p = head = *stu;
   while(p != NULL)
   {
      min = s = p;
      switch(n)
      {
         case 1:
         {
             while(s->next != NULL)
             {
                if( s->next->number < min->next->number)
                          min = s;
                      s = s->next;
                 }          
                break;
         }            
         case 2:
         {
            while(s->next != NULL)
             {
                if( strcmp(s->next->name , min->next->name) < 0)
                          min = s;
                      s = s->next;
                 }          
                break;
         }    
        case 3:
         {
            while(s->next != NULL)
             {
                if( strcmp(s->next->sex , min->next->sex) < 0)
                          min = s;
                      s = s->next;
                 }          
                break;
         }    
         case 4:
         {
            while(s->next != NULL)
             {
                if( s->next->age < min->next->age)
                          min = s;
                      s = s->next;
                 }          
                break;
         }    
         case 5:
         {
            while(s->next != NULL)
             {
                if( s->next->income < min->next->income)
                          min = s;
                      s = s->next;
                 }          
                break;
         }      
         default:
         {
            printf("出错了!");
            getchar();
            exit(1);
         }               
      }   
      if(p != min)
      {
         q = min->next;
         min->next = q->next;
         q->next = p->next;
         p->next = q;
      }   
      p = p->next;    
   }
      *stu = head;
}

void insert(Lk **stu)
{
   Lk *p, *s;
   int num, i=0;
   
      printf("\n请输入第%d个人的序号,输入0表示输入结束\t", i+1);
   scanf("%d", &num);
   fflush(stdin);
   while (num > 0)
   {
      s = (Lk *)malloc(sizeof(Lk));
      if(!s)
         {
            puts("出错了!");
            getchar();
            exit(OVERFLOW);
         }
      p = *stu;  
         s->next = p->next;
      p->next = s;
      s->number = num;
      printf("姓名\t");
      scanf("%s", &s->name);
      fflush(stdin);
      printf("性别\t");
      scanf("%s", &s->sex);
      fflush(stdin);
      printf("年龄\t");
      scanf("%d", &s->age);
      fflush(stdin);
      printf("薪水\t");
      scanf("%f", &s->income);
      fflush(stdin);
      i++;
         printf("\n请输入第%d个人的序号,输入0表示输入结束\t", i+1);
      scanf("%d", &num);
      fflush(stdin);
   }  
}  

void del_menu(Lk *stu)
{
   int n;
   do{
      printf("请提供被删除对象的有关信息---提供序号请按1\n");
      printf("\t---提供姓名请按 2\n");
      printf("\t---提供性别请按 3\n");
      printf("\t---提供年龄请按 4\n");
      printf("\t---提供薪水请按 5\n");
      scanf("%d", &n);
      fflush(stdin);
   } while(n < 1 || n > 5);   
   switch(n)
   {
      case 1: del_1 (&stu);
                  break;
      case 2: del_2 (&stu);
                  break;
      case 3: del_3 (&stu);
                  break;
      case 4: del_4 (&stu);
                  break;
      case 5: del_5 (&stu);
                  break;   
      default:
         {
            printf("出错了!");
            getchar();
            exit(1);
         }                      
   }   
}
void del_1 (Lk **stu)
{
   Lk *p, *s;
   int num;
      printf("\n请输入所对应的序号:   ");
   scanf("%d", &num);
   fflush(stdin);
   p = *stu;
   s = p->next;
   while(s != NULL)
   {
      if( s->number == num)
      {
         p->next = s->next;
         free(s);
         s = p->next;
      }
      else
      {   
         p = s;
         s = s->next;
      }   
   }   
}
  
void del_2 (Lk **stu)
{
   Lk *p, *s;
   char ch[15];
      printf("\n请输入所对应的姓名:   ");
   scanf("%s", ch);
   fflush(stdin);
   p = *stu;
   s = p->next;
   while(s != NULL)
   {
      if( strcmp(s->name , ch) == 0)
      {
         p->next = s->next;
         free(s);
         s = p->next;
      }
      else
      {   
         p = s;
         s = s->next;
      }   
   }   
}   

void del_3 (Lk **stu)
{
   Lk *p, *s;
   char ch[8];
      printf("\n请输入所对应的性别:   ");
   scanf("%s", ch);
   fflush(stdin);
   p = *stu;
   s = p->next;
   while(s != NULL)
   {
      if(strcmp(s->sex , ch) == 0)
      {
         p->next = s->next;
         free(s);
         s = p->next;
      }
      else
      {   
         p = s;
         s = s->next;
      }   
   }   
}   
void del_4 (Lk **stu)
{
   Lk *p, *s;
   int num;
      printf("\n请输入所对应的年龄:   ");
   scanf("%d", &num);
   fflush(stdin);
   p = *stu;
   s = p->next;
   while(s != NULL)
   {
      if( s->age == num)
      {
      p->next = s->next;
      free(s);
      s = p->next;
      }
      else
      {   
      p = s;
      s = s->next;
      }   
   }   
}   
void del_5 (Lk **stu)
{
   Lk *p, *s;
   float num;
      printf("\n请输入所对应的薪水:  ");
   scanf("%f", &num);
   fflush(stdin);
   p = *stu;
   s = p->next;
   while(s != NULL)
   {
      if( s->income == num)
      {
      p->next = s->next;
      free(s);
      s = p->next;
      }
      else
      {   
      p = s;
      s = s->next;
      }   
   }   
}   

void find_menu(Lk *stu)
{
    int n;
   do{
      printf("请提供被删除对象的有关信息---提供序号请按1\n");
      printf("\t---提供姓名请按 2\n");
      printf("\t---提供性别请按 3\n");
      printf("\t---提供年龄请按 4\n");
      printf("\t---提供薪水请按 5\n");
      scanf("%d", &n);
      fflush(stdin);
   } while(n < 1 || n > 5);   
   switch(n)
   {
      case 1: find_1 (&stu);
                  break;
      case 2: find_2 (&stu);
                  break;
      case 3: find_3 (&stu);
                  break;
      case 4: find_4 (&stu);
                  break;
      case 5: find_5 (&stu);
                  break;   
      default:
         {
            printf("出错了!");
            getchar();
            exit(1);
         }                      
   }   
}  

void find_1 (Lk **stu)
{
   Lk *s;
   int num;
      printf("\n请输入所对应的序号:   ");
   scanf("%d", &num);
   fflush(stdin);
   printf("%5s%10s%12s%10s%20s\n", "序号", "姓名", "性别", "年龄", "薪水");
   s = (*stu)->next;
   while(s != NULL)
   {
      if( s->number == num)
            printf("%3d%12s%12s%10d%20f\n",s->number, s->name, s->sex, s->age, s->income);
      s = s->next;  
   }   
}

void find_2 (Lk **stu)
{
   Lk *s;
   char ch[15];
      printf("\n请输入所对应的姓名:   ");
   scanf("%s", ch);
   fflush(stdin);
   printf("%5s%10s%12s%10s%20s\n", "序号", "姓名", "性别", "年龄", "薪水");
   s = (*stu)->next;
   while(s != NULL)
   {
      if( strcmp(s->name , ch) == 0)
            printf("%3d%12s%12s%10d%20f\n",s->number, s->name, s->sex, s->age, s->income);
      s = s->next;  
   }   
}

void find_3 (Lk **stu)
{
   Lk *s;
   char ch[8];
      printf("\n请输入所对应的性别:   ");
   scanf("%s", ch);
   fflush(stdin);
   printf("%5s%10s%12s%10s%20s\n", "序号", "姓名", "性别", "年龄", "薪水");
   s = (*stu)->next;
   while(s != NULL)
   {
      if( strcmp(s->sex , ch) == 0)
            printf("%3d%12s%12s%10d%20f\n",s->number, s->name, s->sex, s->age, s->income);
      s = s->next;  
   }   
}

void find_4 (Lk **stu)
{
   Lk *s;
   int num;
      printf("\n请输入所对应的年龄:   ");
   scanf("%d", &num);
   fflush(stdin);
   printf("%5s%10s%12s%10s%20s\n", "序号", "姓名", "性别", "年龄", "薪水");
   s = (*stu)->next;
   while(s != NULL)
   {
      if( s->age == num)
            printf("%3d%12s%12s%10d%20f\n",s->number, s->name, s->sex, s->age, s->income);
      s = s->next;  
   }   
}

void find_5 (Lk **stu)
{
   Lk *s;
   int num;
      printf("\n请输入所对应的薪水:   ");
   scanf("%d", &num);
   fflush(stdin);
   printf("%5s%10s%12s%10s%20s\n", "序号", "姓名", "性别", "年龄", "薪水");
   s = (*stu)->next;
   while(s != NULL)
   {
      if( s->income == num)
            printf("%3d%12s%12s%10d%20f\n",s->number, s->name, s->sex, s->age, s->income);
      s = s->next;  
   }   
}

阅读(3111) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册