C语言实现学生信息管理系统

本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下

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

//数据的设计------->学生信息抽象出
struct student
{
    char name[20];
    int age;
    char sex[5];
    char tel[20];
};

//结构分结构去写
//某一种数据结构去实现什么东西的时候,单独去写一种数据结构
//先把数据结构写对了再说
struct Node
{
    //int data;
    struct student data;
    struct Node* next;
};

//创建表
struct Node* createList()
{
    //用结构体变量表示表头
    //指针-->变量   动态内存申请
    struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
    //表头:做差异化处理 数据data不做初始化
    headNode->next = NULL;
    return headNode;
}

struct Node* createNode(struct student data)
{
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

//插入结点
void insertNodeByHead(struct Node* headNode, struct student data)
{
    struct Node* newNode = createNode(data);
    //表头法
    newNode->next = headNode->next;
    headNode->next = newNode;
}

//指定位置删除
//data为struct student型,结构体,不能直接比较
void deleteAPPoinNode(struct Node* headNode, char* name)//指定姓名进行删除
{
    struct Node* posNode = headNode->next;
    struct Node* posFrontNode = headNode;
    if (posNode == NULL)
    {
        printf("数据为空,无法删除!\n");
        return;
    }
    //姓名为字符串,不能直接比较,字符串的比较为strcmp
    while (strcmp(posNode->data.name,name))
    {
        posFrontNode = posNode;
        posNode = posFrontNode->next;
        if (posNode == NULL)
        {
            printf("未找到指定位置,无法删除!\n");
            return;
        }
    }
    //找到了
    posFrontNode->next = posNode->next;
    free(posNode);
}

//查找功能
struct Node* searchInfoByData(struct Node* headNode,char* name)//指定姓名查找
{
    struct Node* pMove = headNode->next;
    while (pMove != NULL && strcmp(pMove->data.name, name))
    {
        pMove = pMove->next;
    }
    return pMove;
}

//文件读操作(链表的存储)
void readInfoFromFile(struct Node* headNode,const char *fileName)
{
    //1.打开
    FILE *fp;//文件指针
    struct student data;
    fp = fopen(fileName, "r");//以读取方式打开
    if (fp == NULL)
    {
        fopen(fileName, "w+");//以创建方式打开

    }
    //2.读文件
    while (fscanf(fp, "%s\t%d\t%s\t%s\n"/*格式化形式*/, data.name, &data.age, data.sex, data.tel) != EOF/*文件结束符*/)//将文件作为输入设备,格式化读到data中
    {
        insertNodeByHead(headNode, data);//读过程中存放到链表
    }
    //3.关闭文件
    fclose(fp);
}

//文件写操作(链表的读取)
void writeInfoToFile(struct Node* headNode,const char *fileName)
{
    FILE *fp;
    fp = fopen(fileName, "w");//以追加方式打开
    if (fp == NULL)
    {
        printf("文件打开失败!");
        return;
    }
    struct Node* pMove = headNode->next;
    while (pMove)
    {
        fprintf(fp, "%s\t%d\t%s\t%s\n"/*格式化形式*/, pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel);
        pMove = pMove->next;
    }

    fclose(fp);
}

//打印链表
void printfList(struct Node* headNode)
{
    struct Node* pMove = headNode->next;
    //涉及到数据的处理
    printf("姓名\t年龄\t性别\t电话\n");
    while (pMove)
    {
        printf("%s\t%d\t%s\t%s\n", pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel);
        pMove = pMove->next;
    }
    printf("\n");
}

/*
    1.界面
    2.数据结构的设计
        //需要和数据结构设计糅合在一起
    3.交互
*/
#include "myList.h"
//菜单设计
void menu()
{
    //所有操作都同步到文件
    printf("-----------【学生信息管理系统】-----------\n");
    printf("\t\t0.退出系统\n");
    printf("\t\t1.录入信息\n");
    printf("\t\t2.浏览信息\n");
    printf("\t\t3.修改信息\n");
    printf("\t\t4.删除信息\n");
    printf("\t\t5.查找信息\n");
    printf("------------------------------------------\n");
} 
struct Node* list = createList();
//用户的交互
//根据所选菜单项,做相应的事情
void keyDown()
{
    int choice = 0;
    struct student data;
    struct Node* pMove = NULL;
    scanf("%d", &choice);
    switch (choice)
    {
    case 0:
        printf("正常退出!\n");
        system("pause");
        exit(0);
        break;
    case 1:
        printf("---------------【录入信息】---------------\n");//插入链表
        printf("请输入学生姓名年龄性别电话:");
            fflush(stdin);//清空缓冲区
            scanf("%s%d%s%s", data.name, &data.age, data.sex, data.tel);
        insertNodeByHead(list, data);
        break;
    case 2:
        printf("---------------【浏览信息】--------------\n");//打印链表
        printfList(list);
        break;
    case 3:
        printf("---------------【修改信息】---------------\n");
        printf("需要修改信息的学生姓名:");
        scanf("%s", data.name);
        deleteAPPoinNode(list, data.name);
        printf("请重新输入学生信息:");
        fflush(stdin);
        scanf("%s%d%s%s", data.name, &data.age, data.sex, data.tel);
        insertNodeByHead(list, data);
        break;
    case 4:
        printf("---------------【删除信息】---------------\n");
        printf("请输入删除的学生姓名:");
        scanf("%s", data.name);
        deleteAPPoinNode(list,data.name);
        break;
    case 5:
        printf("---------------【查找信息】---------------\n");
        printf("请输入要查找学生姓名:");
        scanf("%s", data.name);
        pMove = searchInfoByData(list, data.name);
        if (pMove == NULL)
        {
            printf("未找到相关信息,无法删除!\n");
            system("pause");
        }
        else
        {
            printf("姓名\t年龄\t性别\t电话\n");
            printf("%s\t%d\t%s\t%s\n", pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel);
        }
        break;
    default:
        printf("选择错误,重新输入\n");
        system("pause");
        break;
    }
    writeInfoToFile(list, "1.txt");//保存,调用文件写函数
}

int main()
{
    readInfoFromFile(list, "1.txt");//程序运行前,调用文件读函数
    while (1)
    {
        menu();
        keyDown();
        system("pause");
        system("cls");
    }
    /*测试链表代码
    struct Node* list = createList();
    insertNodeByHead(list, 1);
    insertNodeByHead(list, 3);
    insertNodeByHead(list, 2);
    insertNodeByHead(list, 5);
    printfList(list);
    printf("删除指定位置!\n");
    deleteAPPoinNode(list, 3);
    printfList(list);
    printf("链表的查找:\n");
    printf("%d\n",searchInfoByData(list, 5)->data);*/

    system("pause");
    return 0;
}

运行截图

1.录入信息

2.浏览信息

3.修改信息

4.查找信息

5.删除信息

6.退出系统

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言单链表版学生信息管理系统

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 代码: //以单链表作为存储结构,设计和实现课程成绩管理的完整程序. //程序包括如下功能. //1.建立学生成绩表,包含学生的学号.姓名和成绩. //2.可以显示所有学生成绩. //3.可以计算学生的总数. //4.可以按学号和序号查找学生. //5.可以在指定位置插入学生成绩数据. //6.可以删除指定位置的学生数据. //7.可以把学生成绩按从高到低的顺序排序. //作者: yinlinqvan //操作系统:

  • C语言版学生信息管理系统

    本文实例为大家分享了C语言版学生信息管理系统的具体代码,供大家参考,具体内容如下 一.题目分析 1.功能概述 1)查询学生信息 2)添加学生信息 3)修改学生信息 4)删除学生信息 5)刷新学生信息 6)保存学生信息 7)输出当前学生信息 2.题目要求: 1)使用结构体建立学生信息体制 2)实现七大基本功能 3)采用文件存储学生信息 二.算法构造 1.难点解析----对文件的操作 1.1文件读取 FILE * fp; if ((fp = fopen(filename, "r")) ==

  • C语言实现学生信息管理系统(文件版)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 下面是我自己用写的学生信息管理系统,为了增加数据的利用率,分为学生端和教师端,同时实现账号密码登录,以文件的形式将其存入. 代码如下 #include <stdio.h> #include <string.h> #include <string> #include<Windows.h> #define USER "TOM" // 事先定义用户名,用于登录页

  • C语言学生信息管理系统小项目

    本文为大家分享了C语言学生信息管理系统小项目,供大家参考,具体内容如下 /* 运行环境:我是在linux里面用gcc编译的,在windows里应该也能运行,用的一些文件库函数都是c标准库,没有用linux的系统调用(纠正一下:system("clear")这个系统调用是linux的,windows里面用system("cls") ) (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等.试设计一学生信息管理系统,使之能提供以下功

  • C语言使用链表实现学生信息管理系统

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 代码实现的功能: 1.插入学生信息 2.显示学生信息 3.删除学生信息 4.在指定位置插入学生信息 5.查找学生信息 代码内容: #include <stdio.h> #include <stdlib.h> #include <string.h> #define Max_Student_Num 10 #define Max_Str_len 20 typedef struct T_stud

  • C语言数组实现学生信息管理系统设计

    概述 单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生信息进行排序,借助了临时数组来标记排好序的下标. 运行结果如下: 输入数据: 打印数据: 根据学号对信息进行排序: 根据总成绩对信息进行排序: 根据学号删除某一信息: 代码如下: #include <stdio.h> #include <stdlib.h> //exit函数头文件 #include <string.h> //字符串相关操作头文件 #define MAX_STU

  • C语言数据结构之学生信息管理系统课程设计

    本文实例为大家分享了学生信息管理系统设计的具体代码,供大家参考,具体内容如下 建立一个动态链表,链表中每一结点包括:学号.姓名.性别.年龄.成绩.程序能实现以下功能: 建立链表      显示链表      查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示"无此记录!"的信息.      删除链表中指定学号的结点.      在链表中指定的位置插入一个新结点(学号不能和其他结点重复). 要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序

  • C语言学生信息管理系统设计与实现

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 #include"stdio.h" //标准的输入输出函数文件头部说明 #include"math.h" // 数学函数头部说明 #include"string.h" #include"stdlib.h" //通过该函数头部里的函数,改变控制台的背景和颜色 #include"windows.h" //头文件声明,下文用到了改变控

  • 学生信息管理系统C语言版

    C语言学生信息管理系统包括以下功能: 1.学生信息的整体注册 2.学生信息的修改 3.学生成绩信息的录入 4.学生信息的添加 5.恢复误删的学生信息 6.学生信息的删除 7.密码修改保存函数 8.学生信息的查询 9.密码修改函数 10.学生信息管理系统的菜单函数 #include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #inc

  • C语言实现学生信息管理系统(单链表)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016年7月1日 * 版本号:codeblock * * 问题描述: 学生信息管理系统 * 输入描述: * 程序输出: 输出结果 */ #include <stdio.h> #include <stdlib.h> #include

随机推荐