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;
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
源代码打包上传到资源里面了,感兴趣的小伙伴可以点击主页去下载,下面附几张运行的效果图供参考:
![](https://img-blog.csdnimg.cn/83cc94fea81c4a06b389fa52f730c601.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY29hbCBtaW5lcg==,size_13,color_FFFFFF,t_70,g_se,x_16)
图1.登录界面
![](https://img-blog.csdnimg.cn/c21a2d7f79c4420fa017d0a95fa99f94.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY29hbCBtaW5lcg==,size_20,color_FFFFFF,t_70,g_se,x_16)
图2.按学号排序
![](https://img-blog.csdnimg.cn/e3afc32e1fe2444facb0a8ee07d46aed.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY29hbCBtaW5lcg==,size_20,color_FFFFFF,t_70,g_se,x_16)
图3.按班级查找
好了,由于功能较多就不全部列举了,感兴趣的小伙伴可以点击主页->资源->下载源代码。完成这个项目的时间不长,中间难免会存在一些不足,欢迎大家指正。
这次的分享到此结束,觉得对自己有所帮助的小伙伴可以帮忙点个赞支持一下,感谢观看!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)