c语言简易学生信息管理系统

一、学生管理系统算法分析

1.插入学生信息(需要具备数据结构基础)

建立头结点、建立新结点函数、建立新结点并插入数据

void InsertStudent() {//插入函数
    int x;
    struct Student S;
    printf("请输入学生的数目:");
    scanf("%d", &x);
    for (int i = 1; i <= x; i++) {
        printf("请分别输入第%d个同学姓名:\n",i);
        scanf("%s", &S.name);
        printf("请分别输入第%d个同学年龄:\n",i);
        scanf("%d", &S.age);
        printf("请分别输入第%d个同学电话:\n",i);
        scanf("%s", &S.tel);
        printf("请分别输入第%d个同学住址:\n",i);
        scanf("%s", &S.addr);
        CreatNodeList(StudentNode, S);
    }
}
struct Node* CreatNode() //建立头节点
{
    struct Node* HeadNode = (struct Node*)malloc(sizeof(struct Node));
    HeadNode->Next = NULL;
    return HeadNode;
}
struct Node* CreatNewNode(struct Student data) 
{//建立新结点函数
    struct Node* NewNode = (struct Node*)malloc(sizeof(struct Node));
    NewNode->data = data;
    NewNode->Next = NULL;
    return NewNode;
}
void CreatNodeList(struct Node* HeadNode, struct Student data) 
{//建立新节点并插入数据
    struct Node* NewNode = CreatNewNode(data);
    NewNode->Next = HeadNode->Next;
    HeadNode->Next = NewNode;
}
2.删除学生信息

删除结点

void deletestudent() {//删除节点|
    char name[10];
    printf("请输入需要删除的学生名字:\n");
    scanf("%s", &name);
    deletenode(StudentNode, name);
}
void deletenode(struct Node* headnode, char* name) 
{//删除节点操作
    struct Node* posnode = headnode->Next;
    struct Node* posnodefront = headnode;
    if (posnode == NULL) {
        printf("数据为空,无法删除");
    }
    else
    {
        while (strcmp(posnode->data.name, name)) 
        {
            posnodefront = posnode;
            posnode = posnodefront->Next;
            if (posnode == NULL) { printf("未找到指定位置,无法删除"); return; }
        }
        posnodefront->Next = posnode->Next;
        free(posnode);
    }
}
3.查找学生信息

查找结点、打印单个结点、浏览信息

struct Node* SearchNode(struct Node* StudentNode, char* name) {
//查找节点
    struct Node* pMove = StudentNode->Next;
    if (pMove == NULL) {
        printf("未找到该学生");
        return(pMove);
    }
    else
    {
        while (strcmp(pMove->data.name, name)) 
        {
            pMove = pMove->Next;
            if (pMove == NULL)break;
        }
        return pMove;
    }
}
void PrintList(struct Node* StudentNode) 
{//打印单个节点
    printf("姓名\t年龄\t电话\t\t住址\n");
    printf("%s\t%d\t%s\t%s\n", StudentNode->data.name, StudentNode->data.age, StudentNode->data.tel, StudentNode->data.addr);
}
void PrintNode(struct Node* StudentNode) 
{//浏览信息
    struct Node* pow = StudentNode->Next;
    printf("姓名\t年龄\t电话\t\t住址\

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值