仿写学生管理系统

作者在 2020-03-08 14:35:01 发布以下内容

链表排序还没有学

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

typedef struct _node
{
    char name[64];
    char id[10];
    char score[64];
    struct _node *next;
} Node;

typedef struct _list
{
    Node *head;
} List;

//--1--插入新的学生(头插法)
void AddStudentByHead(List *list);
//尾插法V1
void AddStudentByEndV1(List *list);
//尾插法V2只能单独使用
void AddStudentByEndV2(List *list);
void ChangeStudent(List *listchar *input);
void Input(Node *p);
int Search(List *listchar *input);
void Delete(List *listchar *input);
void PrintStudent(List *list);
void ClearList(List *list);
Node *PrintFlage(List *listchar *input);

int main(void)
{
    List list;
    list.head = NULL;
    char code;
    int c;
    char input1[64];
    char input2[64];
    char input3[64];
    int flag = 0;
    Node *temp;
    while (1)
    {
        printf("\n\
        ╔———————————————学生信息管理系统————————————————╗\n\
                                                        \n\
        =============== 功能菜单 ================\n\
                                            \n\
        1 录入学生信息\n\
        2 查找学生信息\n\
        4 删除学生信息\n\
        3 修改学生信息\n\
        5 显示所有学生信息\n\
        6 退出系统\n\
       ==========================================\n\
       说明:通过数字选择菜单\n\
    ╚——————————————————————————————————————————————╝\n");


        printf("请输入指令代码(1-6)\n");
        do
        {
            scanf("%c", &code);
        } while (code>54||code<49);
        
      

        switch (code)
        {

        case '1':
            printf("请选择插入学生的方法(1-头插法 2-尾插法V1):");
            scanf("%d", &c);

            switch (c)
            {
            case 1:
                AddStudentByHead(&list);
                break;
            case 2:
                AddStudentByEndV1(&list);
                break;

            default:
                printf("输入指令错误\n");
            }
            break;

        case '2':
            printf("请输入你要查找的学生:");
            scanf("%s", input1);
            flag = (Search(&list, input1));
            if (flag > 0)
            {
                temp = PrintFlage(&list, input1);
                printf("学生姓名:%s\t学号%s\t分数:%s\t"temp->nametemp->idtemp->score);
            }
            else
            {
                printf("不好意思,查无此人\n");
            }
            break;

        case '3':
            printf("请输入你要更改的学生名字:");
            scanf("%s", input2);
            flag = Search(&list, input2);
            temp = PrintFlage(&list, input2);
            if (flag > 0)
            {
                printf("当前的学生信息为:\n");
                printf("学生姓名:%s\t学号%s\t分数:%s\t"temp->nametemp->idtemp->score);
                printf("请输入您要更改的学生信息\n");
                ChangeStudent(&list, input2);
            }
            else
            {
                printf("不好意思,你要更改的学生名字尚未存在\n");
            }
            break;

        case '4':

            printf("请输入你要删除的学生名字:");
            scanf("%s", input3);
            if (Search(&list, input3) > 0)
            {
                Delete(&list, input3);
            }
            else
            {
                printf("不好意思,你要删除的学生名字尚未存在\n");
            }
            break;

        case '5':
            PrintStudent(&list);
            break;
        case '6':
            if (!list.head)
            {
                printf("还没有信息呢\n");
            }
            goto END;

        default:
            printf("输入指令错误\n");
            break;
        }
        printf("^__^\n");
        printf("\n\n");
    }
END:
    ClearList(&list), printf("删库跑路成功^__^\n");

    system("pause");
    return 0;
}
//--1--插入新的学生
void AddStudentByHead(List *list)
{
    Node *p, *temp;
    p = (Node *)malloc(sizeof(Node));
    Input(p);

    if (list->head)
    {
        temp = list->head;
        list->head = p;
        p->next = temp;
    }
    else
    {
        list->head = p;
        p->next = NULL;
    }
}
//尾插法
void AddStudentByEndV1(List *list)
{
    Node *p;
    p = (Node *)malloc(sizeof(Node ));
    Input(p);

    Node *last;
    last = list->head;

    if (last)
    {
        while (last->next)
        {
            last = last->next;
        }
        last->next = p;
        p->next=NULL;
    }
    else
    {
        list->head = p;
        p->next = NULL;
    }
}
//尾插法
/*
void AddStudentByEndV2(List *list)
{
    Node *p;
    p = (Node *)malloc(sizeof(Node ));
    Input(p);
    static Node *tail;

    if (list->head)
    {
        tail=list->head;
        tail->next = p;
        p->next = NULL;
    }
    else
    {
        list->head = p;
        p->next = NULL;
    }

    tail = p;
}
*/
void ChangeStudent(List *listchar *input)
{
    Node *p;
    for (p = list->head; p; p = p->next)
    {
        if (!strcmp(p->name, input))
        {
            Input(p);
            break;
        }
    }
}
void Input(Node *p)
{
    printf("请输入姓名:");
    scanf("%s"p->name);
    printf("请输入学号(2位数字):");
    scanf("%s"p->id);
    printf("请输入学生分数(小于1000):");
    scanf("%s"p->score);
}
int Search(List *listchar *input)
{
    int flag = -1//标志
    Node *p;
    for (p = list->head; p; p = p->next)
    {
        if (!strcmp(p->name, input))
        {
            flag = 1;
            break;
        }
    }

    return flag;
}
Node *PrintFlage(List *listchar *input)
{
    Node *p;
    for (p = list->head; p; p = p->next)
    {
        if (!strcmp(p->name, input))
        {

            break;
        }
    }
    return p;
}
void Delete(List *listchar *input)
{
    Node *p, *q = NULL;
    for (p = list->head; p; q = p, p = p->next)
    {
        if (!strcmp(p->name,input))
        {

            if (q)
            {
                q->next = p->next;
                
            }
            else
            {
                list->head = p->next;  
            }
            free(p);
            break;
        }
        
    }
}
void PrintStudent(List *list)
{
    Node *p;
    for (p = list->head; p; p = p->next)
    {
        printf("学生姓名:%s\t学号:%s\t分数:%s\t\n"p->namep->idp->score);
    }
}
//--6--删库跑路
void ClearList(List *list)
{
    Node *p, *q;
    for (p = list->head; p; p = q)
    {
        q = p->next;
        free(p);
    }
}

默认分类 | 阅读 2500 次
文章评论,共15条
yu1776151787
2020-03-08 20:49
1
哈哈^_^,--6--删库跑路功能很实用。加油
Knightl8(作者)
2020-03-08 21:26
2
以下是引用yu1776151787在2020-03-08 20:49的发言1
哈哈^_^,--6--删库跑路功能很实用。加油
老哥,你大几了呢?共同学习
yu1776151787
2020-03-09 18:54
3
我才上大二
Knightl8(作者)
2020-03-09 19:08
4
以下是引用yu1776151787在2020-03-09 18:54的发言1
我才上大二
一样嘿,你是计算机专业的吗?
神秘的Jack
2020-03-09 19:37
5
很实用,加油
展飓
2020-03-11 20:37
6
请问菜鸟用什么程序比较好
Knightl8(作者)
2020-03-11 22:04
7
以下是引用展飓在2020-03-11 20:37的发言1
请问菜鸟用什么程序比较好
请问,你是学那种语言呢?c推荐devc++ ,python推荐python就行
qq68677589
2020-03-22 15:19
8
天哪老哥,你这么长的程序怎么写的,我好奔溃啊。我也是学习c++,才大一,我感觉时间过的好快,学知识没学到多少,我好傻
Knightl8(作者)
2020-03-22 22:04
9
以下是引用qq68677589在2020-03-22 15:19的发言1
天哪老哥,你这么长的程序怎么写的,我好奔溃啊。我也是学习c++,才大一,我感觉时间过的好快,学知识没学到多少,我好傻
自学就可以了,网上视频太多的,我这个还不行啊
政图加寸(游客)
2020-03-26 20:57
10
源代码的do-while循环里面的判断条件 (code>54||code<49);  这个可以改下。
你这个是比较ascii码,建议直接用54和49对应的字符,这样程序可读性可以提高些。
qq68677589
2020-03-29 22:36
11
以下是引用qq68677589在2020-03-22 15:19的发言1
天哪老哥,你这么长的程序怎么写的,我好奔溃啊。我也是学习c++,才大一,我感觉时间过的好快,学知识没学到多少,我好傻
以下是引用Knightl8在2020-03-22 22:04的发言2
自学就可以了,网上视频太多的,我这个还不行啊
咱们交个朋友吧,我想
Knightl8(作者)
2020-04-02 17:42
12
以下是引用qq68677589在2020-03-22 15:19的发言1
天哪老哥,你这么长的程序怎么写的,我好奔溃啊。我也是学习c++,才大一,我感觉时间过的好快,学知识没学到多少,我好傻
以下是引用Knightl8在2020-03-22 22:04的发言2
自学就可以了,网上视频太多的,我这个还不行啊
以下是引用qq68677589在2020-03-29 22:36的发言3
咱们交个朋友吧,我想
我是文科专业。。。。。
母简家倒(游客)
2020-04-17 09:06
13
厉害
萌新想学编程
2020-04-26 17:36
14
老师,收徒弟吗?我想变得跟你一样。
Knightl8(作者)
2020-04-29 10:17
15
以下是引用萌新想学编程在2020-04-26 17:36的发言1
老师,收徒弟吗?我想变得跟你一样。
我就是个小白
游客请输入验证码
浏览2500次
文章分类
文章归档