学生信息管理系统

实现功能:
  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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值