最近很多同学因为学校的要求,需要完成自己的那个C语言课程设计,于是就有很多人私信或者加我私聊我,问的最多的还是《学生成绩管理系统》,其实当你项目写多了你就会发现:其实各类的管理系统都离不开一个核心——链表!

是的,不管是你想要写学生成绩管理系统,宿舍管理系统、火车票管理系统亦或者还是旅游管理系统等等,都需要用的到我们的链式结构来写,那么今天呢,我们就来看看如何利用C语言链式管理系统应该如何来写!

本期分享并不是直接教大家写这个学生成绩管理系统,而是以这个为线头,引出我们的大学项目类管理系统核心——链式结构。

话不多说,我们接下来就来看看我们的本文核心——链式结构管理系统的核心源码吧!让你做到:一表在手,系统我有!

源码献上

先来看看我们的singleList.h文件的代码,这个文件实际上也就是对我们的数据进行具体的操作,当然,核心还是我们的链式结构:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct MM
{
    char name[20];
    int age;
    int num;
    char addr[20];
};
struct Node
{
    //int data;
    struct MM data;
    struct Node* next;
};
//所有涉及到数据的地方都要改
struct Node* createHead()
{
    struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
    headNode->next = NULL;
    return headNode;
}
struct Node* createNode(struct MM  data)
{
    struct Node * newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}
void insertByHead(struct Node* headNode, struct MM data)
{
    struct Node* newNode = createNode(data);
    newNode->next = headNode->next;
    headNode->next = newNode;
}
//按查找浏览
void searchAllInfo(struct Node* headNode, char *name)
{
    struct Node* pMove = headNode->next;
    while (pMove != NULL)
    {
        //!strcmp(pMove->data.name,name)条件可以改为
        //strcmp(pMove->data.name,name)==0
        //!:否定  真变假 ,假变真
        //!-1等于0
        //计算机中非零表示成立
        if (!strcmp(pMove->data.name, name))
            printf("%st%dt%dt%sn", pMove->data.name, pMove->data.age, pMove->data.num, pMove->data.addr);
        pMove = pMove->next;
    }
}
//按姓名查找
struct Node* searchInfo(struct Node* headNode, char *name)
{
    struct Node* pMove = headNode->next;
    while (pMove != NULL&&strcmp(pMove->data.name, name))
    {
        pMove = pMove->next;
    }
    return pMove;        //返回NULL没有找到
}

//改为按照姓名的方式
//删除一个方式
void deleteByAppoin(struct Node* headNode, char *name)
{
    struct Node* posNodeLeft = headNode;
    struct Node* posNode = headNode->next;
    //字符串比较+数据剥洋葱
    while (posNode != NULL&&strcmp(posNode->data.name ,name))
    {
        posNodeLeft = posNode;
        posNode = posNodeLeft->next;
    }
    if (posNode == NULL)
    {
        printf("未找到指定位置,无法删除!n");
    }
    else
    {
        posNodeLeft->next = posNode->next;
        free(posNode);
        posNode = NULL;
        printf("删除成功!n");
    }
}

//删除所有姓名相同的
void deleteAll(struct Node* headNode, char *name)
{
    while (searchInfo(headNode, name) != NULL)
    {
        deleteByAppoin(headNode, name);
    }
}

//修改所有姓名相同的
void modifyALL(struct Node* headNode, char *name,struct MM newInfo)
{
    while (searchInfo(headNode, name) != NULL)
    {
        searchInfo(headNode, name)->data = newInfo;
    }
}

//打印-->具体需求:抬头
void printList(struct Node* headNode)
{
    struct Node* pMove = headNode->next;
    //表格数据的表头
    printf("nametagetnumtaddrn");
    while (pMove != NULL)
    {
        //打印结构体的数据需要剥洋葱
        printf("%st%dt%dt%sn", pMove->data.name, pMove->data.age, pMove->data.num, pMove->data.addr);
        pMove = pMove->next;
    }
}

//链表的冒泡排序
void BubbleSortList(struct Node*headNode)
{
    //0---size
    for (struct Node* p = headNode->next; p != NULL; p = p->next)
    {
        for (struct Node* q = headNode->next; q->next != NULL; q = q->next)
        {
            if ((q->data.age > q->next->data.age))
            {
                struct MM tempData = q->data;
                q->data = q->next->data;
                q->next->data = tempData;
            }
        }
    }
    printList(headNode);
}

void BubbleSortByName(struct Node*headNode)
{
    //0---size
    for (struct Node* p = headNode->next; p != NULL; p = p->next)
    {
        for (struct Node* q = headNode->next; q->next != NULL; q = q->next)
        {
            if (strcmp(q->data.name, q->next->data.name)>0)
            {
                struct MM tempData = q->data;
                q->data = q->next->data;
                q->next->data = tempData;
            }
        }
    }
    printList(headNode);
}

 

好,接下来再来将我们的这个界面给完善一下:

#define _CRT_SECURE_NO_WARNINGS
#include "singleList.h"

struct Node* list = NULL;    //存储数据的容器
//1.菜单
void makeMenu()
{
    printf("-----------【小姐姐管理系统】--------n");
    printf("t0.退出系统n");
    printf("t1.录入信息n");
    printf("t2.浏览系统n");
    printf("t3.修改系统n");
    printf("t4.查找显示n");
    printf("t5.删除信息n");
    printf("t6.排序显示n");
    printf("-------------------------------------n");
}
//2.做按键交互
void keyDown()
{
    int userKey = 0;
    struct MM tempData;    //存储用户的数据
    struct Node* posNode = NULL;
    scanf("%d", &userKey);
    switch (userKey)
    {
    case 0:
        printf("正常退出,欢迎下次光临!n");
        system("pause");
        exit(0);
        break;
    case 1:
        //为当前函数传参
        //增加全局变量
        printf("请输入信息:(name,age,num,addr):");
        scanf("%s%d%d%s", tempData.name, &tempData.age, &tempData.num, tempData.addr);
        insertByHead(list,tempData);
        break;
    case 2:
        printList(list);
        break;
    case 3: //修改 --->修改作业
        printf("请输入要修改的姓名:");
        scanf("%s", tempData.name);
        //输入信息存储到临时变量 tempInfo
        //循环去做修改: 知道posNode==NULL 位置
        posNode = searchInfo(list, tempData.name);
        if (posNode == NULL)
        {
            printf("未找到指定位置,无法修改!");
        }
        else
        {
            printf("请输入新的信息:(name,age,num,addr):");
            scanf("%s%d%d%s", posNode->data.name, &posNode->data.age, &posNode->data.num, posNode->data.addr);
            //posNode->data=tempInfo;
            printf("修改成功!");
        }
        break;
    case 4: //查找
        printf("请输入要查找的姓名:");
        scanf("%s", tempData.name);
        searchAllInfo(list, tempData.name);
        break;
    case 5: //删除
        printf("请输入要删除的姓名:");
        scanf("%s", tempData.name);
        deleteByAppoin(list, tempData.name);
        break;
    case 6:
        BubbleSortList(list);
        break;        //
    default:
        printf("输入错误!,重新输入!n");
        break;
    }
}
int main()
{
    list = createHead();    //1.创建容器
    while (1)
    {
        makeMenu();
        keyDown();
        system("pause");
        system("cls");
    }
    system("pause");
    return 0;
}

好了,本期分享就到这里了!希望能够对大家有帮助,希望大家都能依照本文分享的东西自己完成自己的管理系统哦~

其实做为一个编程学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C语言C++交流Q群1108152000,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。

微信公众号:C语言编程学习基地,学习C/C++编程知识,欢迎关注~

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/yxy6/p/13122191.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程

4779 0元 限免
3579 0元 45元 限免