C语言动态链表数据结构实现的学生信息项目
注:此项目来源于吕鑫老师的教程
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <conio.h> using namespace std;struct SUser {int nNum;char sName[20];float fMath; };typedef SUser DATA;struct SNode {DATA data;//28个字节SNode* pNext;//指针变量,4个字节 };SNode* g_Head = NULL; //头部添加 void AddHeand(DATA data) {SNode* pNew = (SNode*)malloc(sizeof(SNode));pNew->data = data;pNew->pNext = g_Head;g_Head = pNew; } //尾部添加 void AddTail(DATA data) {SNode* pNew =(SNode*)malloc(sizeof(SNode));pNew->data =data;pNew->pNext = NULL;if (!g_Head)//链表为空时 {g_Head = pNew;return;}SNode* p = g_Head;while(p->pNext!=NULL){p = p->pNext;}p->pNext = pNew; }//保存到文件中 void Save() {FILE* fp = fopen("study.dat","w");if (!fp){return;}SNode* p = g_Head;while(p){//fwrite(&p->data,1,sizeof(p->data),fp);fwrite(p,1,sizeof(p->data),fp );p = p->pNext;}fclose(fp); } //从文件中读取 void Load() {FILE* fp = fopen("study.dat","r");if (!fp){return;}DATA data;while(fread(&data,1,sizeof(data),fp)==sizeof(data))AddTail(data); fclose(fp); } //打印 void PrintAll() {SNode* p = g_Head;int i =0;/*if (!p){printf("当前链表为空!\n");return;}*/puts("学号\t姓名\t数学");while (p){printf("%d\t%s\t%0.1f\n",p->data.nNum,p->data.sName,p->data.fMath);++i;p=p->pNext;}printf("总共%d条记录\n",i);system("pause"); }void Input(int nDir) {DATA data;printf("请输入学号:");scanf_s("%d",&data.nNum);printf("请输入姓名:");scanf_s("%s",data.sName,sizeof(data.sName));printf("请输入数学成绩:");scanf_s("%f",&data.fMath);if (nDir == 1){AddHeand(data);}else{AddTail(data);}Save();PrintAll();}int AddMenu() {system("cls");puts("\n\n\t\t1、向头部插入:");puts("\t\t2、向尾部插入:");puts("\t\t0、回到主菜单:");int i = 0;scanf_s("%d",&i);switch(i){case 1:case 2:Input(i);break;}return i; }int Judge(SNode* q,SNode* m,int index) {switch(index){case 1://姓名return strcmp(q->data.sName,m->data.sName)<0;case 2://学号return q->data.nNum < m->data.nNum;case 3://成绩return q->data.fMath < m->data.fMath;}return 0; } //排序 void Sort(int index) {SNode* p = g_Head;if (!p){return;}while (p->pNext){SNode* q = p->pNext;SNode* m = p;while(q){if (Judge(q,m,index)){m = q;}q = q->pNext;}if (m != p)//不等时交换 {DATA t = p->data;p->data=m->data;m->data = t;}p = p->pNext;}system("pause"); } //按学号排序 void SortByNum() {SNode* p = g_Head;if (!p){return;}while (p->pNext){SNode* q = p->pNext;SNode* m = p;while(q){if (q->data.nNum < m->data.nNum){m = q;}q = q->pNext;}if (m != p)//不等时交换 {DATA t = p->data;p->data=m->data;m->data = t;}p = p->pNext;}system("pause"); } //按姓名排序 void SortByName() {SNode* p = g_Head;if (!p){return;}while (p->pNext){SNode* q = p->pNext;SNode* m = p;while(q){if (strcmp(q->data.sName, m->data.sName)<0){m = q;}q = q->pNext;}if (m != p)//不等时交换 {DATA t = p->data;p->data=m->data;m->data = t;}p = p->pNext;}system("pause"); } //按成绩排序 void SortByMath() {SNode* p = g_Head;if (!p){return;}while (p->pNext){SNode* q = p->pNext;SNode* m = p;while(q){if (q->data.fMath > m->data.fMath){m = q;}q = q->pNext;}if (m != p)//不等时交换 {DATA t = p->data;p->data=m->data;m->data = t;}p = p->pNext;}system("pause"); }int SortMenu() {system("cls");puts("\n\n\t\t1、按姓名排序:");puts("\t\t2、按学号排序:");puts("\t\t3、按成绩排序:");puts("\t\t0、退出排序:");int i = 0;scanf_s("%d",&i);switch(i){case 1:break;SortByName();case 2:SortByNum();break;case 3:SortByMath();break;default:return i;}PrintAll();return i; } //按姓名删除节点 int DeleteByName() {PrintAll();char name[20];printf("请输入姓名:");scanf("%s",name);SNode* p = g_Head;SNode* p1 = NULL;//记录前一个节点if (!p){return 0;}//如果是头节点要特殊处理if(strcmp(p->data.sName,name)== 0){g_Head = p->pNext;delete p;return 1;}while(p){if (strcmp(p->data.sName,name)== 0){p1->pNext=p->pNext;free(p);return 1;}p1=p;p=p->pNext;}return 0; } //按学号删除节点 int DeleteByNum() {PrintAll();int iNum =0;printf("请输入学号:");scanf_s("%d",&iNum);SNode* p = g_Head;SNode* p1 = NULL;//记录前一个节点if (!p){return 0;}//如果是头节点要特殊处理if(p->data.nNum== iNum){g_Head = p->pNext;delete p;return 1;}while(p){if (p->data.nNum== iNum){p1->pNext=p->pNext;free(p);return 1;}p1=p;p=p->pNext;}return 0; }int DeleteMenu() {system("cls");puts("\n\n\t\t1、按姓名删除:");puts("\t\t2、按学号删除:");puts("\t\t0、退出回主菜单:");int i = 0,j=0;scanf_s("%d",&i);switch(i){case 1:j = DeleteByName();if(j>0){printf("删除成功!");}else{printf("删除失败!");}break;case 2:j = DeleteByNum();if(j>0){printf("删除成功!");}else{printf("删除失败!");}break;default:return i;}PrintAll();return i; } //查找 int FindByName() {char name[20];printf("请输入姓名:");scanf("%s",name);SNode* p = g_Head;while (p){if (strcmp(p->data.sName,name)==0){puts("学号\t姓名\t数学");printf("%d\t%s\t%0.1f\n",p->data.nNum,p->data.sName,p->data.fMath);return 1;}p=p->pNext;}return 0; } //按学号查找 int FindByNum() {int iNum =0;printf("请输入学号:");scanf_s("%d",&iNum);SNode* p = g_Head;while (p){if (p->data.nNum == iNum){puts("学号\t姓名\t数学");printf("%d\t%s\t%0.1f\n",p->data.nNum,p->data.sName,p->data.fMath);return 1;}p=p->pNext;}return 0; } int FindMenu() {system("cls");puts("\n\n\t\t1、按姓名查找:");puts("\t\t2、按学号查找:");puts("\t\t0、退出回主菜单:");int i = 0;scanf_s("%d",&i);switch(i){case 1:FindByName();break;case 2:FindByNum();break;default:return i;}system("pause");return i; }//按姓名修改成绩 int ModifyByName() {char name[20];float fmath =0.0;printf("请输入姓名:");scanf("%s",name);printf("请输入新成绩:");scanf("%f",&fmath);SNode* p = g_Head;while (p){if (strcmp(p->data.sName,name)==0){printf("修改前:%d\t%s\t%0.1f\n",p->data.nNum,p->data.sName,p->data.fMath);p->data.fMath=fmath;puts("学号\t姓名\t数学");printf("修改后:%d\t%s\t%0.1f\n",p->data.nNum,p->data.sName,p->data.fMath);return 1;}p=p->pNext;}return 0; } //按学号修改成绩 int ModifyByNum() {float fmath =0.0;int iNum =0;printf("请输入学号:");scanf_s("%d",&iNum);printf("请输入新成绩:");scanf("%f",&fmath);SNode* p = g_Head;while (p){if (p->data.nNum == iNum){printf("修改前:%d\t%s\t%0.1f\n",p->data.nNum,p->data.sName,p->data.fMath);p->data.fMath=fmath;puts("学号\t姓名\t数学");printf("修改后:%d\t%s\t%0.1f\n",p->data.nNum,p->data.sName,p->data.fMath);return 1;}p=p->pNext;}return 0; }//只能修改成绩 int ModifyMenu() {system("cls");puts("\n\n\t\t1、按姓名修改:");puts("\t\t2、按学号修改:");puts("\t\t0、退出回主菜单:");int i = 0;scanf_s("%d",&i);switch(i){case 1:ModifyByName();break;case 2:ModifyByNum();break;default:return i;}system("pause");return i; }int Menu() {system("cls");//clear screenputs("\n\t\t1、浏览所有信息");puts("\t\t2、添加信息");puts("\t\t3、删除信息");puts("\t\t4、修改信息");puts("\t\t5、查找信息");puts("\t\t6、颜色设置");puts("\t\t0、退出");printf("\t\t请选择:");int i = 0;scanf_s("%d",&i);switch(i){case 1://PrintAll();while(SortMenu());break;case 2:while(AddMenu());break;case 3:while(DeleteMenu());break;case 4:while(ModifyMenu());break;case 5:while(FindMenu());break;case 6:break;}return i; } int main() {system("color 1f");printf("\n\n");printf(" \t *******************************************************************\n");printf(" \t ****** ******\n");printf(" \t ****** 员工工管理信息系统 ******\n");printf(" \t ****** ******\n");printf(" \t ****** 2018-8-5 ******\n");printf(" \t ****** http://www.cnblogs.com/chechen/ ******\n");printf(" \t ****** 按任意键继续 ******\n");char c = _getch();Load();while(Menu());return 0; }
项目效果图:
主菜单:
浏览信息:
设置颜色默认的控制台前景和背景色:
转载于:https://www.cnblogs.com/chechen/p/9439722.html
C语言动态链表数据结构实现的学生信息项目相关推荐
- C语言动态链表数据结构
链表的操作增删改查 typedef int DATA;struct SNode {DATA data;SNode* pNext; };SNode* g_head=NULL;//全局变量//从头部添加 ...
- 数据结构课程设计---学生信息管理系统
1. 建立一个动态链表,链表中每一结点包括:学号.姓名.性别.年龄.成绩.程序能实现以下功能: 建立链表 显示链表 查找链表中是否存在某个元素,并显示这个元素的所有信息, ...
- 数据结构课程设计--学生信息管理系统
stu.h /********************************************************************** *版权所有:2017,zhangcuipin ...
- 动态生成表格之新增学生信息
动态生成表格之新增学生信息: 功能需求: 当点击新增按钮时弹出模态框 不允许其中一项为空 点击"保存"时,数据保存并添加成功后关闭模态框 前期准备工作: 1.引入bootstrap ...
- 学生管理系统 C语言 动态链表 结构体 文件操作 设置密码 输入密码回显星号
C语言 学生管理系统代码 实现功能 功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名.学号.专业. 性别.年龄. 电话.家庭住址.还可以继续拓展 系统要求实现以下功能: 1.输入功能: ...
- c语言动态链表creat函数,用create建立动态链表
写一个函数create,用了建立一个动态链表 #include using namespace std; struct LINK { int num; char a[20]; char b[20]; ...
- C语言 int y=10 do,删除学生信息算法执行完case10输入y 之后do whil
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 太多了贴一部分,主要是删除算法,主方法的上一个 #include #include #include typedef struct Student/*结构 ...
- 【C语言】之实现简易的学生信息管理系统
学生管理系统的文件总共有 5 个: main.c.stuSystem.h.stuSystem.c.ArrayLib.h 和 ArrayLib.c 其中 ArrayLib.h 和 ArrayLib.c ...
- 【数据结构实习】学生信息管理系统2.0
Student.h 1 #include<iostream> 2 #include<string> 3 #include<fstream> 4 using name ...
- 双链表嵌套的简单学生信息管理系统
参考:实现双链表嵌套的简单学生信息管理 作者:三速何时sub20 发布时间: 2020-07-20 10:44:40 网址:https://blog.csdn.net/weixin_44234294/ ...
最新文章
- linux ssh 登录后 空闲断开 解决方法
- git 撤销刚才的rebase_git rebase 的使用 (用于撤销某次commit)
- Ubuntu Linux 提出新的发布模式——测试周
- linux关机时循环输出脚本,Linux关机时执行指定脚本功能实现
- 亿佰特物联网dtu无线数传电台:新一代Lora无线模块通信技术
- vue 上传图片限制大小和格式
- java 输出流_Java中输入输出流方法总结
- python处理字典的方法_python字典的常用操作方法小结
- n皇后问的三种解答方式
- 《贝叶斯思维:统计建模的Python学习法》——2.5 封装框架
- 二叉树学习之二叉树的构建及操作
- mysql innodb_large_prefix_那些从MySQL5.6升级到5.7的坑--innodb_large_prefix-阿里云开发者社区...
- 流程图伪代码计算机语言,论文中伪代码怎么写
- css苹果手机字号变大,css – 智能手机字体大小不一致
- ATTINY85 和 ATTINY84 与arduino的对应引脚
- 校园 计算机网络设置路由器,Drcom校园网连接路由器怎么设置
- 上线长辈模式,饿了么能拿下银发市场吗?
- Linux 安装 Intel 网卡驱动
- 【视频制作】PR如何制作追踪马赛克
- 金融day03 —— 银行支付结算、银行资产业务
热门文章
- Spring之FactoryBean .
- IIS7配置Gzip压缩
- SharePoint开发中上传Excel问题 无法更新Microsoft Office文档
- 借助Sigar API获取操作系统信息
- Centos 7安装Docker可视化管理面板安装中文Portainer
- linux各路径(目录)的解释(转载)
- c语言整数转浮点数_浮点数的秘密
- php文章上一篇,thinkphp5实现文章上一篇,下一篇
- (day 29 - 二叉树的先序遍历 )剑指 Offer 34. 二叉树中和为某一值的路径
- openwrt运行linux软件,使用OpenWrt开发嵌入式Linux(二):先让系统跑起来(使用initramfs)...