C/C++編程筆記:C語言成績管理系統!鏈式結構的管理系統源碼分享

最近不少同窗由於學校的要求,須要完成本身的那個C語言課程設計,因而就有不少人私信或者加我私聊我,問的最多的仍是《學生成績管理系統》,其實當你項目寫多了你就會發現:其實各種的管理系統都離不開一個核心——鏈表!編程

是的,無論是你想要寫學生成績管理系統,宿舍管理系統、火車票管理系統亦或者仍是旅遊管理系統等等,都須要用的到咱們的鏈式結構來寫,那麼今天呢,咱們就來看看如何利用C語言鏈式管理系統應該如何來寫!微信

本期分享並非直接教你們寫這個學生成績管理系統,而是以這個爲線頭,引出咱們的大學項目類管理系統核心——鏈式結構。函數

話很少說,咱們接下來就來看看咱們的本文核心——鏈式結構管理系統的核心源碼吧!讓你作到:一表在手,系統我有!學習

源碼獻上

先來看看咱們的singleList.h文件的代碼,這個文件實際上也就是對咱們的數據進行具體的操做,固然,核心仍是咱們的鏈式結構:spa

#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("%s\t%d\t%d\t%s\n", 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("name\tage\tnum\taddr\n");
    while (pMove != NULL)
    {
        //打印結構體的數據須要剝洋蔥
        printf("%s\t%d\t%d\t%s\n", 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;
}

好了,本期分享就到這裏了!但願可以對你們有幫助,但願你們都能依照本文分享的東西本身完成本身的管理系統哦~code

其實作爲一個編程學習者,有一個學習的氛圍跟一個交流圈子特別重要這裏我推薦一個C語言C++交流Q羣1108152000,無論你是小白仍是轉行人士歡迎入駐,你們一塊兒交流成長。blog

微信公衆號:C語言編程學習基地,學習C/C++編程知識,歡迎關注~排序

相關文章
相關標籤/搜索