学生管理系统C语言

2023-10-28

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/*
    1、界面
    2、数据结构设计
    3、交互    
*/
typedef struct {
    char name[200];
    int age;
    char sex[5];
    int grade;
    char phoneNum[200];
}student;
//链表
typedef struct Node{
//    int data;
    student data;
    struct Node* next;
}Node,*LinkList;

//创建链表
LinkList createList(){
    LinkList headNode=(LinkList)malloc(sizeof(Node));
    headNode->next=NULL;
    return headNode;
}
//创建结点    
Node* createNode(student data){
    Node* p=(Node*)malloc(sizeof(Node));
    p->data=data;
    p->next=NULL;
    return p;
}
//插入结点
void insertNodeByHead(LinkList headNode,student data){
    Node* p=createNode(data);
    p->next=headNode->next;
    headNode->next=p;
}
//删除指定数据,按姓名
Node* deleteNode(LinkList headNode,char* name){
    Node* p=headNode->next;
    Node* pre=headNode;
    if(name==NULL){
        printf("数据为空,删除失败!\n");
        return NULL;
    }
    while(p){
        if(strcmp(p->data.name,name)==0){
            pre->next=p->next;
            free(p);
            return;
        }
        pre=p;
        p=pre->next;
    }
    return p;
}
//查找基于值,按姓名
Node* searchByData(LinkList headNode,char* name){
    Node* p=headNode->next;
    Node* pre=headNode;
    if(name==NULL){
        printf("数据为空,查找失败!\n");
        return NULL;
    }
    while(p){
        if(strcmp(p->data.name,name)==0){
            return p;
        }
        pre=p;
        p=pre->next;
    }
    return p;
}
 
//打印链表
void printList(LinkList headNode){
//    printf("11111111111111111");
    Node* p=headNode->next;
    printf("姓名\t年龄\t性别\t成绩\t电话\n");
    while(p!=NULL){
        printf("打印");
        printf("%s\t%d\t%s\t%d\t%s\n",p->data.name,p->data.age,p->data.sex,p->data.grade,p->data.phoneNum);
        p=p->next;
    }
    printf("\n");
}

//菜单
void menu(){
    printf("------------【学生信息管理系统】------------\n");
    printf("\t\t0.退出系统\n");
    printf("\t\tl.录入信息\n");
    printf("\t\t2.浏览信息\n");
    printf("\t\t3.修改信息\n");
    printf("\t\t4.删除信息\n");
    printf("\t\t5.查找信息\n");
    printf("--------------------------------------------\n");
}

LinkList list;

//交互
void keyDown(){
    list=createList();
    int choose=0;
    student data;
//    data.name='lili';
//    data.age=21;
//    data.sex='男';
//    data.grade=90;
//    data.phoneNum='17674749585';

//    insertNodeByHead(list,data);
//    printList(list);
    
    
a:    printf("请输入要执行的操作代码:");
    scanf("%d",&choose);
    switch(choose){
        case 0:
            printf("正常退出!\n");
            system("pause");
            exit(0);
            break;
        case 1:
            printf("------------【录入信息】------------\n");
            printf("请分别输入学生的姓名,年龄,性别,成绩,电话:");
            fflush(stdin);
            scanf("%s%d%s%d%s",&data.name,&data.age,&data.sex,&data.grade,&data.phoneNum);
//            printf("%d",data.age);
            insertNodeByHead(list,data);
            goto a;
            break;
        case 2:
            printf("------------【浏览信息】------------\n");
            printList(list);
            goto a;
            break;
        case 3:
            printf("------------【修改信息】------------\n");
            goto a;
            break;
        case 4:
            printf("------------【删除信息】------------\n");
            goto a;
            break;
        case 5:
            printf("------------【查找信息】------------\n");
            goto a;
            break;
        default:
            printf("操作代码错误,请重新输入!\n");
            system("pause");
            goto a;
            break;
    }
}


int main() {
    
    menu();
    while(1){
        keyDown();
    }
    system("pause");
    system("cls");
//链表的测试
//    LinkList L=createList();
//    insertNodeByHead(L,1);
//    insertNodeByHead(L,4);
//    insertNodeByHead(L,5);
//    insertNodeByHead(L,8);
//    insertNodeByHead(L,10);
//    printList(L);
//    printf("删除指定数据:4\n");
//    deleteNode(L,4);
//    printList(L);
//    printf("链表查找:8\n");
//    printf("%d\n",searchByData(L,8)->data);
//    system("pause");     
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学生管理系统C语言 的相关文章

随机推荐

  • 将一张图片和一个TFRecord 文件相互转化

    将一张图片转换为TFRecord 文件 usr bin env python codint utf 8 author zhenghan time 2020 7 7 import tensorflow as tf def write test
  • 【DELL Power edge R730XD安装Windows Server 2019 Hyper-V之一】

    DELL Power edge R730XD安装Windows Server 2019 安装系统的时候也可以通过iDRAC虚拟控制台 挂载镜像文件作为虚拟介质安装系统 不过本片文章介绍用U盘安装系统 一 准备工作 在开始安装Server 2
  • 常用的msvcp140.dll丢失的解决方法,msvcp140.dll丢失的原因

    自从电脑出现故障 我的生活变得一团糟 他每天都需要使用电脑处理工作 可是突然有一天 他发现许多软件和游戏都无法正常运行 错误提示显示 找不到msvcp140 dll 这让他感到非常困扰 今天想和大家分享一个在计算机使用过程中经常遇到的问题
  • Android各版本对应的SDK版本,及SDK版本对应JDK版本

    Android各版本对应的SDK版本 及SDK版本对应JDK版本 平台版本 SDK版本 版本名称 Android 11 0 30 Android 11 Android 10 0 29 Android Q Android 9 0 28 Pie
  • element-ui动态设置tabel列时,无效果,表头抖动,表格错乱,值不能正常展示等问题

    踩坑日记 最近用element ui做一个动态列 频繁隐藏显示列 的表格踩坑记录下 1 在el table column上使用v show绑定是无效果 2 el table column几次切换显示 隐藏后 发现表格的排版完全乱了 或者值不
  • 消费升级,彩屏或将成为家电行业市场新风口

    手机的发展历程估计很多小伙伴们都看在眼里 从一开始没有屏幕到黑白屏 再到彩屏按键手机 最后走到智能手机 现在已经进入全面屏手机时代 彻底从 大哥大 变身 大屏控 因为屏幕将决定手机界面 手机应用操作性等许多重要要素 手机的迭代升级 带动整个
  • 恶意代码分析实战 --- 第三章 动态分析基础技术

    Lab 3 1 1 找出恶意代码的导入函数与字符串列表 导入函数只有一个ExitProcess 可能被加壳了 字符串存在两个注册表 1个url 还有1个PE文件名 2 这个恶意代码在主机上的感染迹象特征是什么 3 这个恶意代码是否存在一些有
  • 电商平台用户消费行为分析

    CD案例分析 本文对CD案例进行了一个分析总结 主要是根据用户消费记录 分析用户消费行为 统计电商领域的一些关键性指标 项目背景 CDNOW 是一个主打线上销售的CD品牌 通过 1 5年 的用户消费记录 针对这1 5年时间里的销售数据对用户
  • python之路 第八章 python异常、模块与包——了解异常、异常的捕获方法、异常的传递性、python模块、python包

    目录 第八章 python异常 模块与包 01 了解异常 02 异常的捕获方法 为什么我们要去捕获异常 如何捕获异常 03 异常的传递性 04 Python模块 什么是模块 模块的导入 自定义模块 05 Python包 什么是Python包
  • 教女朋友如何还原数据库?

    第一步右击选择要还原的数据库如下图 第二步选择数据库备份文件 如下图 出现选择文件的对话框如下 第三步选择 强制还原 如下图 最后点击确定 就可还原数据库 注意 对一下选项菜单中的被还原的数据库的物理路径是否正确 很多还原失败就是被还原的数
  • Linux笔记,全网最详细!!!(14)

    文章目录 第一章 Linux介绍 1 1 Linux是什么 1 2 Linux主要的发行版本 第二章 Linux的安装 2 1下载软件 2 1 1 虚拟机软件下载 2 1 2 CentOS下载 2 2 安装虚拟机 2 2 1 虚拟机介绍 2
  • 网络编程入门

    网络编程 网络介绍 网络设备 互联网是什么 IP 端口 传输控制协议 TCP UDP URL 单工 半双工 全双工 综合练习即时聊天系统 网络简介 网络设备 要组成一个局域网 必须要有路由器 每一个连接到路由器上的设备必须有网卡 每一个网卡
  • 离线安装大全

    tar打包解压 离线 打包文件夹 test 命名为test tar tar cvf test tar test 离线 解包文件夹 tar xvf test tar 离线安装yum包 在线 安装yum下载工具 yum install yum
  • 面向对象类设计7大技巧(如果已具备证明已是高级水平了)

    1 一定要保证数据私有 这是最重要的 绝对不要破坏封装性 有时候需要 编写一个访问器方法或更改器 但是嘴还还是保持实例的私有性 很多经验告诉我们 数据的表示形式很可能会改变 但他们的使用方式却不会经常发生改变 当数据保持私有时 它们的表示形
  • 理解智能合约

    链客 专为开发者而生 有问必答 此文章来自区块链技术社区 未经允许拒绝转载 0x00 前言 理解智能合约对理解区块链技术至关重要 我们先来看下什么是智能合约 智能合约是 1990s 年代由尼克萨博提出的理念 几乎与互联网同龄 由于缺少可信的
  • 用Rust实现23种设计模式之 模板方法模式

    关注我 学习Rust不迷路 模板方法模式是一种行为型设计模式 它定义了一个算法的骨架 将一些步骤的实现延迟到子类中 以下是模板方法模式的优点和使用场景 优点 提高代码复用性 模板方法模式通过将算法的通用部分放在父类中 可以在子类中复用这些通
  • 测试用例的设计方法及案例

    测试用例的设计方法 一 软件测试的生命周期 软件测试的流程是什么 二 如何描述一个BUG 三 测试用例的设计方法 3 1等价类 3 2边界值法 3 3因果图法 3 4场景设计法 3 5正交排列法 3 6错误猜测法 一 软件测试的生命周期 软
  • Microsoft Dynamics产品梳理

    目录 前言 一 Dynamics 365 Sales Customer Service Field Service Finance Operations 二 Dynamics GP Great Plains 三 Dynamics NAV N
  • Python3 goto 语句的使用

    熟悉 C 语言的小伙伴一定对 goto 语句不陌生 它可以在代码之间随意的跳来跳去 但是好多老鸟都告诫大家 不要使用 goto 因为 goto 会使你的代码逻辑变的极其混乱 但是有时候我们不得不用它 因为它太高效了 比如进入循环内部深层一个
  • 学生管理系统C语言

    include