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

  • 模块划分及主要文件

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.按班级查找


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

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

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值