使用c语言单向链表实现简单学生成绩管理系统(1)

使用c语言单向链表实现简单学生成绩管理系统

链表是一种基本的数据结构类型,可以实现对信息的管理,实现此系统,需要定义一个管理信息的数据类型结构体,然后
对数据信息进行增删改查即可。

本文定义一个个人成绩结构体,用于存储个人信息。

struct grade_msg
{	
	char name[16];
	char sex;
	int chinese;
	int math;
	int english;
	.... 
}

struct student_msg
{
	struct grade_msg msg;
	struct student_msg * next_node;
}

最终只需要实现一个单向链表实现对上述结构体的增删改查即可。
今天先实现数据的插入,与轮询打印查看(查看全部信息),代码如下,后续继续实现对个人信息的修改,查询和删除等。

#include
#include
#include

//个人信息结构体,各科成绩可自定义添加
typedef struct grade_msg
{
        char name[16];
        char sex;
        int chinese;
        int math;
        int english;

}grade_msg_t;

//链表结构体
typedef struct student_msg
{
        grade_msg_t msg;
        struct student_msg * next;
}student_msg_t;

//创建链表头
student_msg_t * create_slist_head()
{
        student_msg_t * head;
        //申请空间
        head = (student_msg_t *)malloc(sizeof(student_msg_t));
        if(head == NULL)
        {
                printf("create slist head fail\n");
                return NULL;
        }
        //初始化
        head->next = NULL;

        return head;
}

//判断链表中有无数据
//返回1为空,0为非空
int isnull(student_msg_t *  head)
{
        if(head->next == NULL)
                return 1;
        else
                return 0;
}

//链表头添加数据
int insert_data(student_msg_t * head,grade_msg_t * msg)
{
        printf("enter insert msg\n");

        student_msg_t * new_node;

        new_node = (student_msg_t * )malloc(sizeof(student_msg_t));
        if(new_node == NULL)
        {
                printf("insert,create space fail\n");
                return -1;
        }

        strcpy(new_node->msg.name,msg->name);
        new_node->msg.sex = msg->sex;
        new_node->msg.chinese = msg->chinese;
        new_node->msg.math = msg->math;
        new_node->msg.english = msg->english;

        new_node->next = head->next;

        head->next = new_node;
        return 0;
}

//链表尾部删除数据
int delete_data(student_msg_t * head,grade_msg_t * msg)
{

        return 0;
}

//打印所有信息
int printf_list(student_msg_t *  head)
{
        if(isnull(head))
        {
                printf("no student msg\n");
                return -1;
        }
        while(head->next != NULL)
        {
                head = head->next;
                printf("name:%s,sex:%c,chinese:%d,math:%d,english:%d\n",head->msg.name,head->msg.sex,head->msg.chinese,head->msg.math,head->msg.english);
        }

        return 0;

}

//修改数据
int modify_data(student_msg_t * head,char * data,int index)
{

        return 0;
}

int main(int argc, const char *argv[])
{
        student_msg_t * msg_head;

        msg_head = create_slist_head();
        if(msg_head == NULL)
        {
                printf("create student msg head fail\n ");
                return -1;
        }

        while(1)
        {
                //姓名 字符串, 性别 字符类型, 语数英 整型
                printf("please input 姓名[enter] 性别[enter] 语文[enter] 数学[enter] 英语[enter]\n");
                grade_msg_t insert_msg;
                printf("------------input start------------\n");
                scanf("%s",insert_msg.name);
                getchar();

                scanf("%c",&insert_msg.sex);
                getchar();

                scanf("%d",&insert_msg.chinese);
                getchar();

                scanf("%d",&insert_msg.math);
                getchar();

                scanf("%d",&insert_msg.english);
                getchar();
                printf("------------input end------------\n");

                insert_data(msg_head,&insert_msg);

                printf("==========printf start==========\n");
                if(msg_head -> next != NULL)
                        printf_list(msg_head);
                printf("==========printf end=========\n");

        }

        return 0;
}

编译运行
在这里插入图片描述
运行结果如下
使用c语言单向链表实现简单学生成绩管理系统(1)_第1张图片

你可能感兴趣的:(c基础,数据结构)