代码

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Save();struct SUser
{int nNumb;char sName[20];float fMath;
}g_user[100];void Print()
{puts("\n学号\t姓名\t数学");int i = 0;while (g_user[i].nNumb){if(g_user[i].nNumb>0)printf("%d\t%s\t%0.1f\n", g_user[i].nNumb, g_user[i].sName, g_user[i].fMath);++i;}printf("\n\t总共有%d条学生信息\n\n", i);system("pause");
}int Check(int nNumb)
{int i = 0;while (g_user[i].nNumb){if (nNumb == g_user[i].nNumb)return 1;++i;}return 0;
}void Add()
{int nNumb;printf("请输入学号:");scanf_s("%d", &nNumb);while (Check(nNumb)){printf("该学号已存在,请重新输入(0取消输入):");scanf_s("%d", &nNumb);if (nNumb == 0)return;}int i = 0;while (g_user[i].nNumb>0)++i;//scanf("%d%s%f",&g_user[i].nNumb,)g_user[i].nNumb = nNumb;printf("请输入姓名:");scanf_s("%s", g_user[i].sName,sizeof(g_user[i].sName));printf("请输入成绩:");scanf_s("%f", &g_user[i].fMath);Save();Print();
}void Delete()
{printf("请输入要删除的学号:");int nNumb;scanf_s("%d", &nNumb);int i = 0;//int flag = 0;while (g_user[i].nNumb){if (g_user[i].nNumb == nNumb){//flag = 1;g_user[i].nNumb = -1;break;}++i;}//if (flag == 0)if (g_user[i].nNumb!=-1)//if (g_user[i].nNumb==0)puts("你输入的学号不存在!");else{Save();Print();}
}void Modify()
{printf("请输入要修改的学号:");int nNumb;scanf_s("%d", &nNumb);int i = 0;while (g_user[i].nNumb){if (g_user[i].nNumb == nNumb){printf("%d\t%s\t%0.1f\n", g_user[i].nNumb, g_user[i].sName, g_user[i].fMath);printf("请输入新的姓名:");scanf_s("%s", g_user[i].sName, sizeof(g_user[i].sName));printf("请输入新的成绩:");scanf_s("%f", &g_user[i].fMath);return;}++i;}Save();Print();
}void Load()
{FILE* pf = fopen("data.lv", "r");if (!pf)return;int i = 0;while (fread(&g_user[i], 1, sizeof(SUser), pf) == sizeof(SUser))++i;fclose(pf);
}void Save()
{FILE* pf = fopen("data.lv", "w");if (!pf){puts("保存数据时失败!");return;}int i = 0;while (g_user[i].nNumb){if (-1 != g_user[i].nNumb)fwrite(&g_user[i], 1, sizeof(SUser), pf);++i;}fclose(pf);
}int Judge(int nIndex,int j)
{if (nIndex == 1)return g_user[j].nNumb > g_user[j + 1].nNumb;if (nIndex == 2)return strcmp(g_user[j].sName, g_user[j + 1].sName) > 0;if (nIndex == 3)return g_user[j].fMath < g_user[j + 1].fMath;return 0;
}//int Judge(int nIndex,SUser* p) // p是指向第j个结构体的地址
//3种基本排序:冒泡 插入 选择
//分治法排序:归并排序 快速排序
void Sort(int nIndex) // 选择排序
{int i = 0;while (g_user[i+1].nNumb){int nMin = i;int j = i + 1;while (g_user[j].nNumb){if (g_user[j].nNumb < g_user[nMin].nNumb)nMin = j;++j;}if (nMin != i){SUser t = g_user[i];g_user[i] = g_user[nMin];g_user[nMin] = t;}++i;}
}int DispMenu()
{system("cls");puts("1.按学号排序");puts("2.按姓名排序");puts("3.按成绩排序");puts("0.返回主菜单");printf("请选择:");int i = 0;scanf_s("%d", &i);switch (i){case 0:break;case 1:case 2:case 3:Sort(i);Print();break;}return i;
}void SetColor()
{printf("请输入背景色:");char s[20] = "color ";fflush(stdin);s[6] = getchar();printf("请输入前景色:");fflush(stdin);s[7] = getchar();system(s);
}int Menu()
{int i = 0;system("cls");puts("1.浏览所有信息");puts("2.添加信息");puts("3.删除信息");puts("4.修改信息");puts("5.查找信息");puts("6.颜色设置");puts("0.退出");printf("请选择:");scanf_s("%d", &i);switch (i){case 0:break;case 1:while (DispMenu());break;case 2:Add();break;case 3:Delete();break;case 4:Modify();break;case 6:SetColor();break;}return i;
}int main()
{system("color 3f");Load();while (Menu());return 0;
}

运行结果

C语言实用算法系列之学生管理系统_对整个结构体操作_选择排序_提取排序规则相关推荐

  1. C语言实用算法系列之学生管理系统_单向链表内操作_选择排序

    单向链表实现 #include <stdio.h> #include <malloc.h>typedef int DATA;struct SNode {DATA data;SN ...

  2. C语言实用算法系列之学生管理系统_单向链表内操作_提取排序规则

    代码 后续文章的排序均采用速度较快的选择排序算法. #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <strin ...

  3. C语言实用算法系列之学生管理系统_对整个结构体操作_冒泡排序_提取排序规则

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

  4. C语言实用算法系列之学生管理系统_对整个结构体操作_冒泡排序

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> void Save();str ...

  5. 【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

  6. C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针+switch

    函数指针简介 #include <stdio.h>int add(int a, int b) {return a + b; }int dec(int a, int b)

  7. C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

  8. C语言实用算法系列之学生管理系统_单向链表外排序_栈内数组存储链表节点指针

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

  9. 【总结】C语言实用算法系列之知识点梳理_附学生管理系统各模块代码

    1.内存四区特点 a)全局区变量空间缺省每个字节为00,栈空间缺省是cc,堆缺省是cd b)堆.全局区(静态区).字符串常量区,与栈区空间的位置距离很大,栈区访问速度可能最快: 2.C语言与C++编译 ...

最新文章

  1. VB.net版机房收费系统——结账功能实现(调错与优化)
  2. 财会小白的办公室自救指南
  3. 基于Bind实现的DNS正反向解析及主从DNS的配置
  4. C#委托及事件 详解(讲得比较透彻)
  5. 销售流程图_每天一个流程图制作——销售发货业务流程图-19
  6. 【原】npm 常用命令详解
  7. Js 获取当前页面的高度
  8. UITablView索引列表
  9. css模块化配置---webpack4+less
  10. 标志寄存器02 - 零基础入门学习汇编语言55
  11. 关于opencv中 tf_text_graph_ssd.py生成pbtxt报错的解决方案
  12. C#实现一个局域网文件传输工具
  13. ad模数转换采集电压程序c语言,单片机怎么通过AD转换得到电压值
  14. 密码编码学与网络安全讲的是什么
  15. 徒手攀登酋长岩,世界第一人!
  16. c语言的编写程序--最简单的算术题
  17. 单链表的基本操作-插入结点、删除结点、新建链表、查找结点位置
  18. java中extends与implements的区别
  19. 计算机主机通常包括( ) a运算器,通常我们把( )称为计算机主机. A. 运算器 B. 运算器.控制器和内存 C. 运算器和控制器 D. 运算器和内存...
  20. 技术选型实战|BFE vs Nginx

热门文章

  1. Spring MVC,Ajax和JSON第1部分–设置场景
  2. 为什么同步的StringBuffer从来都不是一个好主意
  3. Spring3 + JPA2 + Java EE6 App Server =配置混乱
  4. OSGI和Spring动态模块–简单的Hello World
  5. 到底是什么程序和功能?
  6. 三菱q系列plc连接电脑步骤_三菱Q系列PLC与三菱变频器的CC-link通讯技术(我的学习笔记)...
  7. Windows系统下,好用的录屏软件工具/屏幕录制工具
  8. MacBook/MacOS如何写入MacBook特有的符号(例如:⌘/⌥/⎋/⇪)
  9. IntelliJ IDEA 项目开发中各个目录的关系
  10. MacOS 如何安装 SVN 命令终端