• C语言基于单链表得学生成绩管理系统


    传说中讲课通俗而不庸俗,说话风流而不下流的小编又来了哦,今天的主要内容是:C语言基于单链表得学生成绩管理系统。首先给大家总结下为什么你们学习C语言会觉得难,尤其是对于单链表这块,主要原因得是因为一下两点:

    编写流程不清晰

    功能设计不清晰

    基于单链表得学生成绩管理系统分为两个模块。

    #include

    #include

    #include

    struct student

    {

    char name[20];

    charnum[20];

    int math;

    int english;

    };

    struct Node

    {

    //int data;

    struct student data;

    struct Node* next;

    };

    struct Node* createList

    {

    //指针的基础:指针变成变量:需要内存

    struct Node*headNode= (struct Node*)malloc(sizeof(struct Node));

    //那么他就可以表示变量,初始化变量里面的东西

    //由于功能限制,导致有些东西不需要初始化

    headNode->next = NULL;

    return headNode;

    }

    //2.创建结点:数据

    struct Node* createNode(struct student data)

    {

    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

    newNode->data = data;

    newNode->next = NULL;

    return newNode;

    }

    //插入 学会一种方法就可以:表头插入 组成链表就是连接过程,结构体变量连接结构体

    //函数参数是有意义的东西,插入那个链表?--》list 插入的数据是多少--》data

    void insertNodeByHead(struct Node* headNode, struct student data)

    {

    //表头法插入

    //1.创建结点

    struct Node* newNode = createNode(data);

    //插入

    newNode->next = headNode->next;

    headNode->next = newNode;

    }

    //查找

    struct Node*findByName(struct Node* headNode, char * name)

    {

    struct Node* pMove = headNode->next;

    while (pMove)

    {

    //比较,改为字符串比较

    if (!strcmp(pMove->data.name,name))

    {

    return pMove;

    }

    //没有往下走

    pMove = pMove->next;

    }

    return NULL;

    }

    //删除--》指定删除

    void deleteNodeByName(struct Node* headNode, char * name)

    {

    //找到指定位置那个结点,以及制定位置前面那个结点

    //要有两个相邻的指针

    struct Node* p = headNode;//前面那个

    struct Node* q = headNode->next;//后面那个

    if (q == NULL)

    {

    printf("么有(没有)可用信息,无法删除 ");

    }

    else

    {

    while (strcmp(q->data.name,name))

    {

    p = q;//p到达q的位置

    q = p->next;//q到达q的下一个

    if (q == NULL)

    {

    printf("未找到制定位置,无法删除 ");

    return;

    }

    }

    p->next = q->next;

    free(q);

    }

    }

    //删除--》指定删除

    void deleteNodeByNum(struct Node* headNode, char * num)

    {

    //要有两个相邻的指针

    if (q == NULL)

    {

    }

    else

    {

    while (strcmp(q->data.num, num))

    {

    p = q;//p到达q的位置

    if (q == NULL)

    {

    return;

    }

    }

    p->next = q->next;

    free(q);

    }

    }

    //打印

    void printList(struct Node*headNode)

    {

    //要从二个开始打印

    //定义一个移动的指针

    printf("姓名 编号 数学 英语 ");

    while (pMove)

    {

    printf("%s %s %d %d ", pMove->data.name, pMove->data.num, pMove->data.math, pMove->data.english);

    pMove = pMove->next;

    }

    printf(" ");

    }

    系统设计

    #define _CRT_SECURE_NO_WARNINGS

    #include

    #include

    #include "singleList.h"

    struct Node* list = createList;

    //界面

    void menu

    {

    printf(" ");

    printf(" 0.退出系统 ");

    printf(" 1.录入信息 ");

    printf(" 2.显示信息 ");

    printf(" 3.删除信息 ");

    printf(" 4.查找信息 ");

    printf(" 5.保存到文件 ");

    }

    void menuOfDelete

    {

    printf(" 1.按照姓名删除 ");

    printf(" 2.按照学号删除 ");

    }

    voidkeyDownOfDelete

    {

    intchoice;

    scanf("%d", &choice);

    char name[20];

    char num[20];

    switch (choice)

    {

    case 1://1.按照姓名删除

    printf("请输入要删除的姓名:");

    scanf("%s", name);

    deleteNodeByName(list, name);

    break;

    case 2://2.按照学号删除

    printf("请输入要删除的学号:");

    scanf("%s", num);

    deleteNodeByNum(list, num);

    break;

    default:

    printf("输入错误,无法删除 ");

    }

    }

    //保存到文件

    void saveInfoToFile(struct Node* list, char *filePath, char *mode)

    {

    struct Node* pMove = list->next;

    FILE *fp =fopen(filePath, mode);

    while (pMove)

    {

    fprintf(fp, "%s %s %d %d ", pMove->data.name, pMove->data.num, pMove->data.math, pMove->data.english);

    pMove = pMove->next;

    }

    fclose(fp);

    }

    void readInfoFromFile(struct Node* list, char *filePath, char *mode)

    {

    struct student data;

    while (fscanf(fp, "%s %s %d %d ", data.name, data.num, &data.math, &data.english) !=EOF)

    {

    insertNodeByHead(list, data);

    }

    fclose(fp);

    }

    //交互:按键操作+鼠标操作C语言:按键操作

    void keyDown

    {

    int choice;

    struct student stuInfo;

    chartemp= ' ';

    switch (choice)

    {

    case 0:

    system("pause");

    exit(0);

    break;

    case 1://1.录入信息

    while (1)

    {

    printf("请输入学生的姓名,编号,math,english:");

    fflush(stdin);

    scanf("%s%s%d%d", stuInfo.name, stuInfo.num, &stuInfo.math, &stuInfo.english);

    //链表的插入

    insertNodeByHead(list, stuInfo);

    printf("是否继续?(N)");

    fflush(stdin);

    temp = getchar;

    if (temp == 'N' ||temp== 'n')

    break;

    }

    break;

    case 2://2.显示信息

    printList(list);

    break;

    case 3://3.删除信息

    menuOfDelete;

    keyDownOfDelete;

    break;

    case 4://4.查找信息

    printf("请输入要查找的学生的姓名:");

    scanf("%s", stuInfo.name);

    if (findByName(list, stuInfo.name) != NULL)

    {

    printf("%s %s %d %d ", findByName(list, stuInfo.name)->data.name,

    findByName(list, stuInfo.name)->data.num, findByName(list, stuInfo.name)->data.math,findByName(list, stuInfo.name)->data.english);

    }

    else

    {

    printf("未找到相关信息! ");

    }

    break;

    case 5://5.保存到文件

    saveInfoToFile(list,"1.txt", "w");

    break;

    default:

    printf("输入错误,重新输入 ");

    break;

    }

    }

    int main

    {

    readInfoFromFile(list, "1.txt", "r");

    while (1)

    {

    menu;

    keyDown;

    system("pause");

    system("cls");

    }

    return 0;

    }

    和大家说了这么多,并不是告诉大家我的技术有多么多么的牛,而是想告诉大家,只要你有决心和意志,要好学C/C++并没那么难。要混口饭吃也不是这么难哦。

  • 相关阅读:
    viewport的target density
    iframe 文本编辑器
    201671010115 201620172《Java程序设计》第二周Java心得
    201671010115 201620172《Java程序设计》第四周Java心得
    201671010115 201620172《Java程序设计》对Java这门新课程的看法
    201671010115 201620172《Java程序设计》第三周Java心得
    201671010115 201620172《Java程序设计》第五周学习心得
    201671010115 201620172《Java程序设计》第六—七周Java学习心得
    《怎么样成为一个高手》观后感
    个人作业
  • 原文地址:https://www.cnblogs.com/yezibiancheng/p/9398784.html
Copyright © 2020-2023  润新知