华清数据结构项目实训——学生信息管理系统

2023-05-16

  • 模块划分及主要文件

1、主程序模块

主要功能:程序的入口

主要文件:main.c

2、菜单模块

主要功能:完成菜单的显示以及登录和调用相应功能函数

主要文件:menu.h menu.c

3、学生模块

主要功能:完成学生结构定义,添加学生,删除学生,修改学生,查找学生函数以及排序的实现。

主要文件:student.h student.c

4、底层链表

主要功能:主要完成链表的增、删、改、查、排序、遍历操作

主要文件:dlist.h dlist.c

  • 各模块的主要函数

1、主程序模块-main.c

int main(); //应用程序入口

2、菜单模块menu.h menu.c

#define LOOPCOUNT 3         错误次数

#define ADMINNAME "danny"         管理员用户名
#define ADMINPASS "admin"         管理员密码
#define STUFILE "student.dat"         学生数据文件

int login_menu(node_t *stulist);    //程序主界面函数用于显示主程序界面
int administrator(node_t *stulist); //管理员界面
int display(node_t *stulist);   //排序显示界面
int query(node_t *stulist);     //查找界面
int modify(node_t *stulist);    //修改学生信息
int delMenu(node_t *stulist);   //删除学生信息

int student(node_t *stulist);   //学生界面

3、学生模块主要函数student.h student.c

void prnData(void *argv);
node_t *loadstuInfo();                  //加载信息
int savestuInfo(node_t *head);          //保存至文件
node_t *stupwdcheck(node_t *head);      //学生密码验证
int addstu(node_t *head);               //添加学生函数
int delstu(node_t *head, const int id); //删除学生函数

// 函数参数:head为已有所有学生链表,mode为查找方式 //0 全部获取,1 按学号获取,2 按姓名获取,3 按班级获取
// 函数返回值:返回所查找到的新建的学生链表
// 函数流程:
// 1、    如果mode为0,返回所有学生链表
// 2、    如果mode为1,按学号从链表中查找学生,返回单个学生
// 3、    如果mode为2,按姓名从链表中查找学生,新建链表,每查出一个学生则插入到新链表,返回新链表。
// 4、    如果mode为3,按班级从链表中查找学生,新建链表,每查出一个学生则插入到新链表,返回新链表。
node_t *getstu(node_t *head, int mode, stu_t stu);

// 参数:getnode为学生节点指针,mode为获取模式,
// 返回值:根据mode不同而返回不同结果
// 函数功能;按mode从学生节点中获取数据
// 函数流程:
// 1、switch(mode) //1.学号 2.学科总分 3.数学成绩 4.C语言成绩 5.语文成绩
int getstudata(node_t *getnode, int mode);

// 参数:学生链表头结点head,node为获取的模式
// 返回值:
// 函数功能:根据不用mode值进行排序
// 函数流程:
// 1、    如果mode为1调用blub_sort()按学生学号排序
// 2、    如果mode为2调用blub_sort()按数学成绩排序
// 3、    如果mode为3调用blub_sort()按C语言成绩排序
// 4、    如果mode为4调用blub_sort()按语文成绩排序
// 5、    如果mode为5调用blub_sort()按总分排序
int sturank(node_t *head, int mode);

void swap(node_t *node1, node_t *node2);
// 函数参数:stulist为所要显示的学生链表,id为所要查找学生的学生学号
// 函数功能:根据学号查找学生 * id - 查找学生学号 * stulist - 链表头指针 * *
// 返回值 - 成功,学号为id的数据节点指针 * - 失败,NULL
node_t *stupoint(node_t *stulist, int id);
  • 程序主要数据结构

1.学生相关结构—student.h文件中

typedef struct student    //学生结构体定义
{
    int cid;       //学生学号定义
    char name[32]; //学生姓名
    char pass[16]; //学生密码
    int age;       //学生年龄
    int gmath;     //学生数学成绩
    int glang;     // C语言成绩
    int gphil;     //语文成绩
    int gsum;      //总分
    int order;     //排序
    int classid;   //班号
} stu_t;
  • main函数流程

1、调用loadstu()函数加载学生数据文件student.dat到学生链表

2、调用login_menu()函数登陆程序主菜单

3、根据程序是否修改和用户选择判定是否将链表数据写入到文件 如果需要保存则调用savestu(stulist);函数保存数据到数据文件 

4、调用destroy_dlist(&stulist);函数销毁链表

  • 主要功能函数


int savestuInfo(node_t *head);
// 函数参数:学生链表的头结点
// 返回值:成功返回0,失败返回-1
// 函数功能;将链表数据写入文件中
// 函数流程:
// 1、打开data/student.dat文件
// 2、求出链表中节点个数,调用fprintf()将其写入文件,将最大学生编号写入到文件
// 3、遍历链表循环将链表中每个学生的数据写入到文件中

node_t *loadstuInfo();
// 函数功能:加载学生信息
// 参数:无
// 返回值:返回所建链表的头结点
// 函数流程:
// 1、创建链表create_dlist();
// 2、打开data/student.dat文件
// 3、调用fscanf()从文件中读出学生人数,最大学生编号
// 3、循环从文件中将每个学生读出并调用insert_hdlist()函数将读出的学生插入到链表

node_t *stupwdcheck(node_t *head);
// 函数参数:学生链表头结点
// 返回值:返回指向该学生的指针
// 函数功能;学生密码验证
// 函数流程:
// 1、提示输入学号,并接收
// 2、提示输入密码,并接收
// 3、循环从链表中查找学号和密码都相等的节点,如果找到则返回,
// 4、未找到返回NULL

int addstu(node_t *head);
// 参数:学生链表
// 返回值:返回指向学生结点的指针
// 函数功能;添加学生
// 函数流程:
// 1、调用getsid()函数获取学生编号
// 2、提示输入学生姓名,接收学生姓名并存入学生
// 提示输入学生密码,接收学生姓名并存入学生
// 提示输入学生年龄,接收学生姓名并存入学生
// 提示输入学生班级,接收学生姓名并存入学生
// 提示输入学生数学成绩,接收学生姓名并存入学生
// 提示输入学生C语言成绩,接收学生姓名并存入学生
// 提示输入学生语言,接收学生姓名并存入学生
// 提示输入学生姓名,接收学生姓名并存入学生

int delstu(node_t *head, const int id);
// 函数参数:head为学生链表头结点,id为学生学号
// 返回值:成功返回0,失败返回-1
// 函数功能;删除学生
// 函数流程:
// 1、调用delete_vdlist()将该学生从链表中删除

node_t *getstu(node_t *head, int mode, stu_t stu);
// 函数参数:head为已有所有学生链表,mode为查找方式 //0 全部获取,1 按学号获取,2 按姓名获取,3 按班级获取
// 函数返回值:返回所查找到的新建的学生链表
// 函数流程:
// 1、	如果mode为0,返回所有学生链表
// 2、	如果mode为1,调用find_vdlist()按学号从链表中查找学生,返回单个学生
// 3、	如果mode为2,调用find_vdlist()按姓名从链表中查找学生,调用create_dlist()新建链表,每查出一个学生则插入到新链表,返回新链表。
// 4、	如果mode为3,调用find_vdlist()按班级从链表中查找学生,调用create_dlist()新建链表,每查出一个学生则插入到新链表,返回新链表。

int getstudata(node_t *getnode, int mode);
// 参数:getnode为学生节点指针,mode为获取模式,
// 返回值:根据mode不同而返回不同结果
// 函数功能;按mode从学生节点中获取数据
// 函数流程:
// 1、switch(mode) //1.学号 2.学科总分 3.数学成绩 4.C语言成绩 5.语文成绩
// case 1: //1.获取学号 返回 getnode->data->id;
// case 2: //2.获取学科总分,计算得出,返回总分
// case 3: // 3.获取数学成绩 ,返回数学成绩
// case 4: //4.获取C语言成绩,返回C语言成绩
// case 5: //5.获取语文成绩,返回语文成绩

int sturank(node_t *head, int mode);
// 参数:学生链表头结点head,node为获取的模式
// 返回值:
// 函数功能;根据不用mode值进行排序
// 函数流程:
// 1、	如果mode为1调用blub_sort()按学生学号排序
// 2、	如果mode为2调用blub_sort()按数学成绩排序
// 3、	如果mode为3调用blub_sort()按C语言成绩排序
// 4、	如果mode为4调用blub_sort()按语文成绩排序
// 5、	如果mode为5调用blub_sort()按总分排序

node_t *stupoint(node_t *stulist, int id);
// 函数参数:stulist为所要显示的学生链表,id为所要查找学生的学生学号
// 函数功能;根据学号查找学生 * id - 查找学生学号 * stulist - 链表头指针 * *
// 返回值 - 成功,学号为id的数据节点指针 * - 失败,NULL

源代码打包上传到资源里面了,感兴趣的小伙伴可以点击主页去下载,下面附几张运行的效果图供参考:

图1.登录界面


 

图2.按学号排序


 

图3.按班级查找


 好了,由于功能较多就不全部列举了,感兴趣的小伙伴可以点击主页->资源->下载源代码。完成这个项目的时间不长,中间难免会存在一些不足,欢迎大家指正。

这次的分享到此结束,觉得对自己有所帮助的小伙伴可以帮忙点个赞支持一下,感谢观看!

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

华清数据结构项目实训——学生信息管理系统 的相关文章

随机推荐

  • 关于一阶互补滤波和卡尔曼滤波的对比

    一阶互补滤波 卡尔曼滤波 从图中滤波效果可以看出 xff0c 卡尔曼滤波的数据更加平滑 xff0c 贴近真实值
  • 配置 CentOS 静态IP

    配置 CentOS 静态IP 配置IP地址网关 vi span class token operator span etc sysconfig network scripts ifcfg ens33 span class token ope
  • 字符串的查找以及查重方法总结

    掌握要求 xff1a 1 字符串查找的朴素算法 2 字符串查找的KMP算法 3 哈希表 4 字典树 1 字符串的查找之朴素算法 朴素算法思想很简单 xff0c 就是将待查找字符串t在被查找的字符串s中一一对比 xff0c 如果遇到相同字符就
  • ROS18.04:安装gazebo,下载模型

    一 安装gazebo Ubuntu18 04安装Gazebo并与ROS连接 Jize 的博客 CSDN博客 ubuntu18安装gazebo 其中报错 xff1a 解决 xff1a sudo apt upgrade 二 下载模型 方法一 x
  • Github使用指南(持续更新中)

    一 简介 Github的网页端是www github com GitHub是一个面向开源及私有软件项目的托管平台 xff0c 因为只支持Git作为唯一的版本库格式进行托管 xff0c 故名GitHub GitHub于2008年4月10日正式
  • Linux安装离线版docker

    Linux安装离线版docker 1 docker 离线包下载地址 https download docker com linux static stable x86 64 2 创建 docker service xff0c 代码中 ins
  • Android Studio 超详细 安装SDK 教程

    一 首先安装Android SDK Tools 国内下载地址Android SDK Tools 百度云下载地址链接 xff1a https pan baidu com s 1RmXi8b lxksVS5hJuSLPIg 提取码 xff1a
  • 【Android Studio】win10安装教程 史上最详细

    一 安装Android Studio 1 首先下载Android Studio 官网下载 xff1a Androis Studio 官网 2 双击打开 点击Next 3 选择安装 xff0c 点击Next 4 选择安装路径 xff0c 点击
  • Android Studio 创建手机虚拟机教程

    小白 Android Studio创建手机虚拟机 版本 AndroidStudio 3 5 3 在APP开发中不一定每时每刻都有真机 xff0c 所以可以通过AndroidStudio 创建一个手机虚拟机 1 创建新的手机虚拟机 点击No
  • Android Studio 下载设备虚拟机镜像

    这里以下载手机虚拟机镜像为示例 需要用到的软件 Android SDK Tools 不知道如何安装Android SDK Tools 的请参考 安装Android SDK Tools SDK Manager exe打不开的请参考这里 SDK
  • 【嵌入式】交叉编译 移植 i2cTool4.1 史上最详细

    一 i2ctool 介绍 i2c tools工具是一个专门用来调试 i2c 的 并且是开源的 他可以 xff1a 1 检测有几组i2c总线在系统上 2 查看挂载在i2c上面设备寄存器的数值 3 可以读取挂载在i2c上面设备寄存器的数值 4
  • 【Ubuntu】 vim 安装与美化 史上最详细

    一 安装vim sudo apt get install vim 二 配置vim 针对单个用户配置 vim vimrc 针对全部用户配置 vim etc vim vimrc 三 配置选项 1 我的配置 34 设置编码 set fileenc
  • 【Ubuntu】Ubuntu16.04安装 搜狗输入法 史上最详细

    一 基本配置 开发环境 xff1a ubuntu16 04 二 准备工作 下载 搜狗输入法linux版 搜狗输入法官网Linux版 我这里是64位的 xff0c 所以选择64位 1 拷贝搜狗输入法到ubuntu cp media sf sh
  • 【嵌入式】---交叉编译 移植 ALSA1.2.2

    一 开发环境 开发环境 xff1a ubuntu16 04 开发平台 xff1a imx6q 交叉编译工具链 xff1a arm linux gnueabihf 二 需要的软件 1 alsa lib 下载地址 xff1a alsa lib
  • 【Android Studio 】经典常用开发设置 [最新最详细-持续更新]

    概述 一个好的配置能够帮助开发者完成更便捷 更快速的开发书山有路勤为径 xff0c 学海无涯苦作舟 我是秋知叶i 期望每一个阅读了我的文章的开发者都能够有所成长 一 当前 Android Studio 版本 Android Studio 经
  • 【MobaXterm】登录SSH服务器

    登录SSH远程服务器 一 配置用户信息1 打开Session2 打开SSH3 新建用户4 创建用户 二 配置登录SSH服务器信息三 再次登录服务器 一 配置用户信息 1 打开Session 2 打开SSH 3 新建用户 4 创建用户 输入账
  • 【adb】 win11 配置 adb环境 史上最详细

    官网下载 adb官网下载 下载下来的压缩包platform tools r33 0 3 windows zip 我们解压得到一个platform tools 二 配置adb环境 新建系统变量 点击浏览目录选择解压的文件夹 xff0c 然后点
  • 【Dev-c++】美化配置

    概述 一个好的配置能够帮助开发者完成更便捷 更快速的开发书山有路勤为径 xff0c 学海无涯苦作舟 我是秋知叶i 期望每一个阅读了我的文章的开发者都能够有所成长 一 设置语法格式 点击工具 编辑器选项 选择 语法 点击预设这里选择 Plas
  • 嵌入式Linux调试器GDB的使用

    调试一直是程序开发的重中之重 xff0c 使用GDB调试可以帮助我们快速找到程序中的错误 注意 xff1a 在进行GDB调试之前 xff0c 程序在gcc编译时要加上 g 选项 1 进入GDB xff1a gdb 可执行文件名 2 查看GD
  • 华清数据结构项目实训——学生信息管理系统

    模块划分及主要文件 1 主程序模块 主要功能 xff1a 程序的入口 主要文件 xff1a main c 2 菜单模块 主要功能 xff1a 完成菜单的显示以及登录和调用相应功能函数 主要文件 xff1a menu h menu c 3 学