17号作业

发布于:2022-12-14 ⋅ 阅读:(11383) ⋅ 点赞:(11)

学生管理系统

#ifndef __XUE_H__
#define __XUE_H__
typedef struct stu
{
    int num;
    char name[20];
    double score;
    struct stu * next;

}Node, *list;

//添加学生信息
list list_add(int a,char* s,double f);

//尾插
list list_insert_tail(list p, int a,char* s,double f);

//遍历
void list_show(list L);
//按位置查找返回节点
list list_search_pos(list F,int pos);
//按位置删除
int list_delete_pos(list F, int pos);
//按位置修改
int list_change_pos(list F, int a,char* s,double f,int pos);

void list_find_name(list L, char c);
#endif
 

#include <stdio.h>
#include <string.h>
#include "xue.h"
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int num;
    char name[20];
    double score;
    printf("请输入学生的学号\n");
    scanf("%d",&num);
    printf("请输入学生的的姓名\n");
    scanf("%s",name);
    printf("请输入学生的成绩\n");
    scanf("%lf",&score);
    list F=list_add(num,name,score);
    list p = F;
    char c;
    for(;;)
    {
        printf("是否继续输入学生信息Y/N\n");
        getchar();
        scanf("%c",&c);
        if('N'==c ||'n'==c)
        {
            break;
        }
    printf("请输入学生的学号\n");
    scanf("%d",&num);
    printf("请输入学生的的姓名\n");
    scanf("%s",name);
    printf("请输入学生的成绩\n");
    scanf("%lf",&score);
    p=list_insert_tail(p,num,name,score);

    }
    list_show(F);
    printf("请输入第几位学生后添加学生\n");
    int pos;
    scanf("%d",&pos);
    p=list_search_pos(F,pos);
    printf("请输入学生的学号\n");
    scanf("%d",&num);
    printf("请输入学生的的姓名\n");
    scanf("%s",name);
    printf("请输入学生的成绩\n");
    scanf("%lf",&score);
    p=list_insert_tail(p,num,name,score);
    printf("请输入要删的学生的位置\n");
    scanf("%d",&pos);
    list_delete_pos(F,pos); 
    printf("请输入要改的学生位置\n");
    scanf("%d",&pos);
    
    printf("请输入学生的学号\n");
    scanf("%d",&num);
    printf("请输入学生的的姓名\n");
    scanf("%s",name);
    printf("请输入学生的成绩\n");
    scanf("%lf",&score);
  list_change_pos(F,num,name,score,pos);

    list_show(F);
    scanf("%s",name);
    list_find_name(F,name);
     
    return 0;
}
 

#include <stdio.h>
#include <string.h>
#include "xue.h"
#include <stdlib.h>
list list_add(int a,char* s,double f)
{
    list p =(list)malloc(sizeof(Node));
    if(NULL==p)
    {
        printf("创建失败\n");
        return NULL;
    }
    p->num=a;
    strcpy(p->name,s);
    p->score=f;
    p->next=NULL;
    return p;
}
list list_insert_tail(list p,int a,char* s,double f)
{
    if(NULL==p)
    {
        printf("所给链表不合法\n");
        return NULL;
    }
    list q=list_add(a,s,f);
    if(NULL==p)
    {
        return NULL;
    }
    p->next=q;
    return q;

}
void list_show(list L)
{
    if(NULL==L)
    {
        printf("遍历失败\n");
        return;
    }
    while(L !=NULL)
    {
        printf("该同学的学号为%d 姓名为%s 分数是%lf\n",L->num,L->name,L->score);
        L=L->next;
    }
    printf("\n");
}
list list_search_pos(list F,int pos)
{
    if(NULL==F || pos<=0 )
    {
      printf("查找失败\n");
          return NULL;
    }
    if(pos==1)
    {
        return F;
    }
    list q= F;
    for(int i=2; i<=pos;i++)
    {
        q=q->next;
    }
    return q;
}
int list_delete_pos(list F,int pos)
{
    if(NULL==F||pos<2)
    {
        printf("删除失败\n");
        return -1;
    }
     list p =list_search_pos(F,pos-1);   
     list q= p->next;
     p->next=q->next;
     free(q);
     q=NULL;
     printf("删除成功\n");
     return 0;
}

int list_change_pos(list F, int a,char* s,double f,int pos)
{
    if(NULL==F||pos<=0)
    {
        printf("删除失败\n");
        return -1;
    }
    list p = list_search_pos(F,pos-1);
    p->num=a;
    strcpy(p->name,s);
    p->score = f;
    printf("更改成功\n");
    return 1;
    
}
void list_find_name(list F, char c)
{
    if(NULL==F)
    {
        printf("查找失败\n");
        return ;
    }
    while(F !=NULL)
    {
        if(strcmp(F->name,c)==0)
        {
           printf("查找成功\n") ;
           return ;
        }
        F=F->next;

    }
    printf("查找失败\n");
    return ;
    
}