您的位置:首页 > 其它

学生信息管理系统

2012-07-22 15:15 148 查看
实现功能:

  1. 计算总人数

  2. 显示全部学生的信息

  3 :添加学生

  4 :按名字查找

  5 :按名字删除

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define LEN sizeof(STUDENT) 

#define times_select 100

#define MAX 10

void stu_list();

void add_stu();

void display_one();

void display_all();

void select_stu();

typedef struct stu  

{

    int  cl_num; 

    char name[MAX]; 

    int score[3]; 

    int sum; 

    float average; 

    struct stu *next; 

}STUDENT; 

STUDENT *stu_msg_cre();

STUDENT *search();

STUDENT *head,*last;

STUDENT *display_ptr,*count_ptr,*del_ptr,*sech_ptr;

void init_stu()     //初始化学生链表

{

    head = (STUDENT *)malloc(LEN);

    head->cl_num = -1;

    head->next = NULL;

    last = head;

    del_ptr = head;

    sech_ptr = head;

}

void add_stu(STUDENT *new)   //添加学生节点

{

    last->next = new;

    new->next = NULL;

    last = new;

}

STUDENT *stu_msg_cre()    // 创建学生信息

{

    int i;

    int total_score = 0;

    if(head->cl_num == -1)

    {

        int num = 0;

        head = (STUDENT *)malloc(LEN);

        scanf("%d",&num);

head->cl_num = num;

        scanf("%s",head->name);

        for(i = 0; i < 3; i ++)

        { 

            do

            { 

                scanf("%d",&head->score[i]); 

                if(head->score[i] > 100)

                {

           printf(" Data error,please enter again.\n"); 

                }

            }while(head->score[i]>100); 

   head->sum += head->score[i];

        }

        total_score = head->sum ;

        head->average = (float)total_score / 3;

        return head;       

    }

    else

    {   

        int n = 0;

        STUDENT *stu = (STUDENT *)malloc(LEN);

    

        scanf("%d",&n);

stu->cl_num = n;

        scanf("%s",stu->name);

        for(i = 0; i < 3; i ++)

        { 

            do

            { 

                scanf("%d",&stu->score[i]); 

                if(stu->score[i] > 100)

                {

           printf(" Data error,please enter again.\n"); 

                }

            }while(stu->score[i]>100); 

   stu->sum += stu->score[i];

        }

        total_score = stu->sum ;

        stu->average = (float)total_score / 3;

return stu;

    }

}

void display_all()    // 打印全部信息

{

    display_ptr = (STUDENT *)malloc(LEN);

    display_ptr = head;

    while(display_ptr != NULL)

    {

        display_one(display_ptr);

display_ptr = display_ptr->next;

    }

}

void display_one(STUDENT *one)   // 打印一个学生信息

{

    if(one->cl_num == -1)

    {

        printf("还没有学生!\n");

    }

    else

    {

        int i;

        printf("%d\t",one->cl_num);

        printf("%s\t",one->name);

        for(i = 0; i < 3; i ++)

        {

            printf("%d\t",one->score[i]);

        }

        printf("M\t",one->sum);

        printf("%3.1f\n",one->average);

    }

}

STUDENT *search(char name[])  // 按名字查找

{

    while(strcmp(sech_ptr->name,name) != 0)

    {

        sech_ptr = sech_ptr->next;

    }

    if(sech_ptr == NULL)

    {

        printf("no exist");

    }

    return sech_ptr;

}

void delete(STUDENT *stu)       //按名字删除

{

    STUDENT *temp = (STUDENT *)malloc(LEN);

    while(strcmp(del_ptr->name,stu->name) != 0)

    {

        temp = del_ptr;

        del_ptr = del_ptr->next;

    }

    temp->next = del_ptr->next;

    temp = del_ptr;

    del_ptr = del_ptr->next;

    free(temp);

    temp = NULL;

}

int account_stu()  //计算学生总数

{

     int count = 0; 

     STUDENT *ptr = (STUDENT *)malloc(LEN);

     ptr = head;

     while(ptr != NULL)

     {

         count += 1;

         ptr = ptr->next;

     }

     return count;

}

int main()

{

    init_stu();

    int n = 1;

    while( n < times_select)

    {   

        printf("\n");

        printf("****************************************\n");

        printf("1 :\t打印总人数\n");

        printf("2 :\t显示全部学生的信息\n");

        printf("3 :\t添加学生\n");

        printf("4 :\t按名字查找\n");

        printf("5 :\t按名字删除\n");

        printf("6 :\t退出!\n");

        printf("**************************************\n");

        printf("\n");

    

        int memu_num;

        char search_name[20];

        char delete_name[20];

        STUDENT *new_stu = (STUDENT *)malloc(LEN);

        STUDENT *search_stu = (STUDENT *)malloc(LEN);

        if(n == 1)

        {

            printf("请输入你的选择:");

        }

        if( n  > 1)

        {

            printf("请再次输入你的选择:");

        }

        

        scanf("%d",&memu_num);

        switch(memu_num)

        {

            case 1:

          {   

              int n = 0;

              n = account_stu();

                       printf("there are M students\n",n);

          }break;

         case 2: 

          {

              printf("学号\t姓名\t三门成绩(语、数、外)\t总分\t平均分\n");

              display_all();

          }break;

   case 3:

          {

              int count;

                       int i = 0;

                       int amount ;

                       printf("请输入将要添加的学生人数\n");

                       scanf("%d",&amount);

              if(amount <= 0)

              {

                  printf("Enter error!\n");

          break;

              }

                       while( i < amount)

                       {

                           printf(" 请添加您将要添加的第%d个学生信息:\n",i + 1);

                           printf("Order: 学号  姓名  三门成绩(语、数、外)\n");

                  new_stu = stu_msg_cre();

                           add_stu(new_stu);

          i ++;

              }

                   }break;

       case 4: 

          {  

              printf("请输入你要查找的学生的名字:");

              scanf("%s",search_name);

              search_stu = search(search_name);

              printf("学号\t姓名\t三门成绩(语、数、外)\t总分\t平均分\n");

              display_one(search_stu);

              search_stu = NULL;

                   }break;

   case 5:

          {

              printf("请输入你要删除的学生的名字:");

              scanf("%s",delete_name);

              search_stu = search(delete_name);

      printf("已删除学生信息:");

              display_one(search_stu);

      delete(search_stu);

              search_stu = NULL;

                   }break;

   case 6: 

          exit(1);

  break;

        }

n += 1; 

    }

    

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息