注:此项目来源于吕鑫老师的教程

#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语言动态链表数据结构实现的学生信息项目相关推荐

  1. C语言动态链表数据结构

    链表的操作增删改查 typedef int DATA;struct SNode {DATA data;SNode* pNext; };SNode* g_head=NULL;//全局变量//从头部添加 ...

  2. 数据结构课程设计---学生信息管理系统

    1. 建立一个动态链表,链表中每一结点包括:学号.姓名.性别.年龄.成绩.程序能实现以下功能:      建立链表      显示链表      查找链表中是否存在某个元素,并显示这个元素的所有信息, ...

  3. 数据结构课程设计--学生信息管理系统

    stu.h /********************************************************************** *版权所有:2017,zhangcuipin ...

  4. 动态生成表格之新增学生信息

    动态生成表格之新增学生信息: 功能需求: 当点击新增按钮时弹出模态框 不允许其中一项为空 点击"保存"时,数据保存并添加成功后关闭模态框 前期准备工作: 1.引入bootstrap ...

  5. 学生管理系统 C语言 动态链表 结构体 文件操作 设置密码 输入密码回显星号

    C语言 学生管理系统代码 实现功能 功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名.学号.专业.  性别.年龄.   电话.家庭住址.还可以继续拓展 系统要求实现以下功能: 1.输入功能: ...

  6. c语言动态链表creat函数,用create建立动态链表

    写一个函数create,用了建立一个动态链表 #include using namespace std; struct LINK { int num; char a[20]; char b[20]; ...

  7. C语言 int y=10 do,删除学生信息算法执行完case10输入y 之后do whil

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 太多了贴一部分,主要是删除算法,主方法的上一个 #include #include #include typedef struct Student/*结构 ...

  8. 【C语言】之实现简易的学生信息管理系统

    学生管理系统的文件总共有 5 个: main.c.stuSystem.h.stuSystem.c.ArrayLib.h 和 ArrayLib.c 其中 ArrayLib.h 和 ArrayLib.c ...

  9. 【数据结构实习】学生信息管理系统2.0

    Student.h 1 #include<iostream> 2 #include<string> 3 #include<fstream> 4 using name ...

  10. 双链表嵌套的简单学生信息管理系统

    参考:实现双链表嵌套的简单学生信息管理 作者:三速何时sub20 发布时间: 2020-07-20 10:44:40 网址:https://blog.csdn.net/weixin_44234294/ ...

最新文章

  1. linux ssh 登录后 空闲断开 解决方法
  2. git 撤销刚才的rebase_git rebase 的使用 (用于撤销某次commit)
  3. Ubuntu Linux 提出新的发布模式——测试周
  4. linux关机时循环输出脚本,Linux关机时执行指定脚本功能实现
  5. 亿佰特物联网dtu无线数传电台:新一代Lora无线模块通信技术
  6. vue 上传图片限制大小和格式
  7. java 输出流_Java中输入输出流方法总结
  8. python处理字典的方法_python字典的常用操作方法小结
  9. n皇后问的三种解答方式
  10. 《贝叶斯思维:统计建模的Python学习法》——2.5 封装框架
  11. 二叉树学习之二叉树的构建及操作
  12. mysql innodb_large_prefix_那些从MySQL5.6升级到5.7的坑--innodb_large_prefix-阿里云开发者社区...
  13. 流程图伪代码计算机语言,论文中伪代码怎么写
  14. css苹果手机字号变大,css – 智能手机字体大小不一致
  15. ATTINY85 和 ATTINY84 与arduino的对应引脚
  16. 校园 计算机网络设置路由器,Drcom校园网连接路由器怎么设置
  17. 上线长辈模式,饿了么能拿下银发市场吗?
  18. Linux 安装 Intel 网卡驱动
  19. 【视频制作】PR如何制作追踪马赛克
  20. 金融day03 —— 银行支付结算、银行资产业务

热门文章

  1. Spring之FactoryBean .
  2. IIS7配置Gzip压缩
  3. SharePoint开发中上传Excel问题 无法更新Microsoft Office文档
  4. 借助Sigar API获取操作系统信息
  5. Centos 7安装Docker可视化管理面板安装中文Portainer
  6. linux各路径(目录)的解释(转载)
  7. c语言整数转浮点数_浮点数的秘密
  8. php文章上一篇,thinkphp5实现文章上一篇,下一篇
  9. (day 29 - 二叉树的先序遍历 )剑指 Offer 34. 二叉树中和为某一值的路径
  10. openwrt运行linux软件,使用OpenWrt开发嵌入式Linux(二):先让系统跑起来(使用initramfs)...