C语言学生信息管理系统(简洁版)

暂时只设立了增删查改四个功能,以后可能会继续完善,下面放代码


#include<stdio.h>
#include<string.h>
#include<stdlib.h>


//学生结构体建立
struct Student {
    char number[20];
    char name[20];
    int age;
    float score[3];//score分别为语数英
    Student* next;
};
typedef Student* linklist;
typedef Student node;


void create(linklist temp);//创建链表
void menu(linklist temp, linklist head);//菜单函数
void insert(linklist temp);//插入学生信息函数
void dele(linklist head);//删除学生信息函数
void seek(linklist head);//查找学生信息函数
void alter(linklist head);//修改学生信息函数


//主函数
int main()
{
    linklist head = (linklist)malloc(sizeof(node));//创建头节点
    linklist temp = (linklist)malloc(sizeof(node));//创建尾节点,随着链表增长,始终指向尾节点.
    temp = head;
    printf("请输入初始数据,格式为:学号 姓名 年龄 语文成绩 数学成绩 英语成绩(当输入NULL时,结束输入)\n");
    create(temp);
    while (1)
    {

        menu(temp, head);
    }
    return 0;
}


//菜单函数
void menu(linklist temp, linklist head)
{
    int choose;
    printf(" \n\n                    \n\n");
    printf("\t******************************\n");
    printf("\t*******学生信息管理系统*******\n");
    printf("\t******************************\n");
    printf("\t1.增加学生信息\t");
    printf("2.删除学生信息\n");
    printf("\t3.查询学生信息\t");
    printf("4.修改学生信息\n");
    scanf_s("%d", &choose);
    switch (choose)
    {
    case 1:insert(temp); system("pause"); system("cls"); break;
    case 2:dele(head); system("pause"); system("cls"); break;
    case 3:seek(head); system("pause"); system("cls"); break;
    case 4:alter(head); system("pause"); system("cls"); break;
    }
}

//创建链表,传入的temp此时指向尾节点
void create(linklist temp)
{


    while (1)
    {
        linklist p = (linklist)malloc(sizeof(node));
        scanf("%s", p->number);
        if (!strcmp(p->number, "NULL"))
        {
            break;
        }
        scanf("%s %d %f %f %f", p->name, &p->age, &(p->score[0]), &(p->score[1]), &(p->score[2]));
        temp->next = p;
        temp = p;
    }
    temp->next = NULL;

}


//增加学生信息函数,传入的temp指向尾节点
void insert(linklist temp)
{
    linklist p = (linklist)malloc(sizeof(node));//新建节点,用于插入
    scanf("%s %s %d %f %f %f", p->number, p->name, &p->age, &p->score[0], &p->score[1], &p->score[2]);//输入新节点的信息
    temp->next = p;
    temp = p;
    temp->next = NULL;
}


//删除函数,传入的head为头节点
void dele(linklist head)
{
    linklist p = (linklist)malloc(sizeof(node));//用于遍历的指针
    linklist above = (linklist)malloc(sizeof(node));//始终处于p上一节点的指针
    p = head->next;
    above = head;
    char number1[20];
    printf("\n请输入要删除学生的学号:");
    scanf("%s", number1);
    while (p != NULL)
    {
        if (!strcmp(p->number, number1))
        {
            above->next = p->next;
            break;
        }
        else {
            p = p->next;
            above = above->next;
        }

    }
    printf("无此学生的信息!");
}

//查找函数,传入的head为头节点
void seek(linklist head)
{
    char number1[20];
    linklist p = (linklist)malloc(sizeof(node));//用于遍历的指针
    p = head->next;
    printf("\n请输入该学生的学号:");
    scanf("%s", number1);
    while (p != NULL)
    {
        if (!strcmp(p->number, number1))
        {
            printf("这位学生的信息:学号为:%s 姓名为:%s 年龄为:%d 语文成绩为:%f 数学成绩为:%f 英语成绩为:%f", p->number, p->name, p->age, p->score[0], p->score[1], p->score[2]);
            return;
        }
        else {
            p = p->next;
        }
    }
    printf("无此学生的信息!");
}

//修改函数,传入的head为头节点
void alter(linklist head)
{
    char number1[20];
    linklist p = (linklist)malloc(sizeof(node));//用于遍历的指针
    p = head->next;
    printf("\n请输入该学生的学号:");
    scanf("%s", number1);
    while (p != NULL)
    {
        if (!strcmp(p->number, number1))
        {
            printf("这位学生的信息:%s %s %d %f %f %f\n", p->number, p->name, p->age, p->score[0], p->score[1], p->score[2]);
            printf("请选择要修改的信息:\n");
            printf("1.修改学号\n2.修改姓名\n3.修改年龄\n4.修改语文成绩\n5.修改数学成绩\n6.修改英语成绩\n");
            int choose;

            scanf("%d", &choose);
            switch (choose)
            {
            case 1:printf("请输入修改结果:"); scanf("%s", p->number); printf("\n修改完成!"); break;
            case 2:printf("请输入修改结果:"); scanf("%s", p->name); printf("\n修改完成!"); break;
            case 3:printf("请输入修改结果:"); scanf("%d", &p->age); printf("\n修改完成!"); break;
            case 4:printf("请输入修改结果:"); scanf("%f", &p->score[0]); printf("\n修改完成!"); break;
            case 5:printf("请输入修改结果:"); scanf("%f", &p->score[1]); printf("\n修改完成!"); break;
            case 6:printf("请输入修改结果:"); scanf("%f", &p->score[2]); printf("\n修改完成!"); break;

            }
            return;
        }
        else {
            p = p->next;
        }
    }
    printf("无此学生的信息!");
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值