思路

用到的知识点:顺序表,冒泡排序。
typedef struct   //顺序表,长度为MAXSIZE
{STU students[MAXSIZE];int length;
} S;
首先确定要实用的数据结构:用链表可以提高空间的利用率,但是写代码的时候需要考虑的就会多一点,而且出错了不好检查(第一次尝试的时候就被各种指针指向搞晕了)。所以就选择了实现起来比较方便的顺序表。主要的几个函数:录入学生信息,按关键字查找学生,冒泡排序法以及没有技术含量的初始化函数。下面的代码中都有功能注释,不多哔哔了。
完整代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>#define MAXSIZE 40
/***************    结构体定义   **********************/
typedef struct
{char name[MAXSIZE];float score;
} STU;typedef struct
{STU students[MAXSIZE];int length;
} S;
/***************    函数定义        ***********************/
void Init()                //初始化
{printf ("\t\t\t***************************************************\n");printf ("\t\t\t***               学生信息管理系统              ***\n");printf ("\t\t\t***功能:                                       ***\n");printf ("\t\t\t***  1、重新录入学生信息                        ***\n");printf ("\t\t\t***  2、按从大到小的顺序对学生总成绩排序        ***\n");printf ("\t\t\t***  3、查看各分段人数                          ***\n");printf ("\t\t\t***  4、按姓名查找学生                          ***\n");printf ("\t\t\t***  其他、退出程序                             ***\n");printf ("\t\t\t***************************************************\n");printf ("\t\t\t请按照功能前的序列号选择要实现的功能:\t");
}void input ( S *L, int num)            //重新输入学生所有信息
{int i;for ( i = 0; i < num; i++){printf ("请输入第%d个学生的姓名:\n\t",i+1);scanf ("%s",L->students[i].name);printf ("请输入第%d个学生的成绩:\n\t",i+1);scanf ("%f",&L->students[i].score);}L->length = num;
}void show_all ( S n)                   //显示
{int i;for ( i = 0; i < n.length; i++){printf("第%d个学生 \n姓名: %s\t成绩: %f\n",i+1,n.students[i].name,n.students[i].score);}
}STU *search ( S *L)                    //按姓名查找,返回值为 储存目标学生的信息 的结构体的地址
{int i;char name_1[MAXSIZE];printf ("请输入目标学生的姓名:\n");scanf ("%s",name_1);for ( i = 0; i < L->length; i++){if ( strcmp( name_1, L->students[i].name) == 0)return  &L->students[i];else continue;}printf ("错误\n");return 0;
}void search_name ( S *L)
{STU *lll;lll = search ( L);                                               //lll储存查找目标的结构体地址if ( lll != NULL)                                             //判断查找是否成功printf ("\n姓名: %s\t成绩: %f\n",lll->name,lll->score);       else                                                            printf ("找不到该学生\n");
}void bubble ( S *L)                                                    //冒泡排序
{int i,j;float score_1;char name_1[MAXSIZE];for ( i = 0; i < L->length; i++){for ( j = 0; j < L->length ; j++){if ( L->students[j].score < L->students[j+1].score)      //分别交换结构体内容{score_1 = L->students[j].score;                     //成绩交换L->students[j].score = L->students[j+1].score;            L->students[j+1].score = score_1; strcpy ( name_1, L->students[j+1].name);strcpy ( L->students[j+1].name, L->students[j].name);//姓名交换strcpy ( L->students[j].name, name_1);}}}
}void show_range ( S n)                                             //显示各分段的人数
{int i;int k[5];for ( i = 0; i < 5; i++){k[i] = 0;}for ( i = 0; i < n.length; i++){if ( n.students[i].score >= 90 && n.students[i].score < 100)k[0]++;if ( n.students[i].score >= 80 && n.students[i].score < 90)k[1]++;if ( n.students[i].score >= 70 && n.students[i].score < 80)k[2]++;if ( n.students[i].score >= 60 && n.students[i].score < 70)k[3]++;if ( n.students[i].score < 60)k[4]++;}printf ("\n90 ~ 100:%d人\n\t",k[0]);printf ("\n80 ~ 90:%d人\n\t",k[1]);printf ("\n70 ~ 80:%d人\n\t",k[2]);printf ("\n60 ~ 70:%d人\n\t",k[3]);printf ("\nunder 60:%d人\n",k[4]);
}/***************   main函数  **********************/
int main()                                                          //main()函数
{S nnn;int i,j;while (1)    {Init();scanf ("%d",&i);if ( i == 1)                                                //选择功能{printf ("学生总人数:\n");scanf ("%d",&j);input ( &nnn, j);            printf ("\n\nend\n");system ("pause");system ("cls");}if ( i == 2){bubble ( &nnn);printf ("排序后的结果为:");show_all ( nnn);system ("pause");system ("cls");}if ( i == 3){ show_range ( nnn);system ("pause");system ("cls");}if ( i == 4){ search_name ( &nnn);system ("pause");system ("cls");}elsebreak;}return 0;
}

扩展:

  • 添加另外的学生信息
  • 按照其他的方式把学生信息排列组织起来
  • 把学生的信息输入到txt文件中保存
  • 添加图形界面(QT)

之后会尝试更新的。

2022年3月24日:当时不写注释还又臭又长,懒得加功能了就这样吧,权当记录了

数据结构大作-学生信息管理系统相关推荐

  1. 数据结构:学生信息管理系统(顺序存储结构)

    一.实验目的 ​​​​​​​ 1.了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构. 2.掌握线性表的顺序存储结构的定义及C语言实现. 3.掌握线性表的链式存储结构--单链表的定义及C语 ...

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

    数据结构课程设计论文--学生信息管理系统 1.学生成绩分析问题 (1)问题描述.录入并保存一个班级学生多门课程的成绩,并对成绩进行分析. (2)基本要求.a)通过键盘输入各学生的多门课程的成绩,建立相 ...

  3. 学生信息管理系统实习报告(java版数据结构)

    一. 问题分析 1.1 什么是学生信息管理系统以及研究意义 学生信息管理系统是校园网络中一个重要的应用系统,它大大改善了学校教学.科研与管理的基础环境,在一定程度上反映出学校管理现代化的水平.信息管理 ...

  4. 数据结构与算法 课程设计报告——学生信息管理系统

    一.概述 1.开发背景 使用计算机对学生信息进行管理,拥有手工管理所无法比拟的优点.例如:检索迅速.查找方便.可靠性高.存储量大.成本低等.这些优点能够极大地提高学生信息的效率,也是管理科学化.正规化 ...

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

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

  6. 数据结构实验报告(一)学生信息管理系统

    大二计算机学生报告的汇总 进入计算机专业以来每天的必要工作就是写报告,按照老师的话来说,我们计算机专业的学生经过长时间的训练,以后出去写代码就跟喝水一样简单.在这里我将发表部分我写的报告,仅以此怀念我 ...

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

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

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

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

  9. c语言文件读写_学生信息管理系统(C语言\单向链表\文件读写)

    最近在复习数据结构,早上刚复习完链表,就想到了学生信息管理系统这个经典的大作业,然后呢,花了一早上加一中午的功夫给重新实现了一遍,里面可能会有写的不好的地方,但也代表了我实现的一些想法,在这里我将分享 ...

  10. 基于java的学生信息管理系统(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 内容摘要    - 2 - 引言    - 4 - 学生信息管理系统开发的意义和目的    - ...

最新文章

  1. JAVA swing初级教程(四)
  2. 彩色MT9V034摄像头 Bayer转rgb FPGA实现(转载)
  3. android-学习1 配置环境
  4. 智能合约重构社会契约 (1)李嘉图合约
  5. 写在SDOI2016Round1前的To Do List
  6. solidworks小金球_如何在没有电缆的情况下传送第77届年度金球奖
  7. poj3190 Stall Reservations(贪心+STL)
  8. 射频测试系统软件,新的~~蓝牙5.0射频测试系统
  9. 关于CocosStudioV3.10的场景导入Cocos2d-xV3.17.2场景未发生变化的解决方案
  10. TCP为什么避免测量重传报文段SampleRTT;TCP为什么等到三个重复的ack后才快速重传
  11. 手机型号大全_《华为手机型号大全》值得收藏
  12. 使用socket模块写一个飞秋炸弹
  13. 测试theano有无使用GPU
  14. 计算机电子表格减法公式,excel表格公式怎么操作
  15. Web服务器及性能优化
  16. 某资讯App signature签名分析 (一)
  17. Unity HDRP中解决抗锯齿问题
  18. 谷歌2022学术指标出炉!Nature继续霸榜,CVPR第4,计算机5顶会入Top20
  19. flex+php ria应用开发实战详解,《Flex+PHP RIA应用开发实战详解-梁文新版》学习日记2...
  20. Java实现线性回归模型算法

热门文章

  1. JavaScript编程入门
  2. Unity关节的使用和举例,布娃娃系统
  3. 【Android Studio使用教程2】Android Studio创建项目
  4. Php7.5,phpwind7.5灵活的业务支持体系
  5. python猜字游戏算法设计_Python 制作一个猜字游戏
  6. 阿里云云原生数据湖体系全解读——数据湖构建 数据导入
  7. 关于STM32中的引脚重映射
  8. Java 中获取Exception的详细信息
  9. 【转】写给自学者的入门指南
  10. 服务器操作系统有哪些?