赞
踩
因为最近是在赶进度总结,数组和指针的笔记已经更新,但是数组、指针的习题还未总结,数组的题已经开始总结,但是还没总结完,所以还没发出来,目前学习进度已经到了学生管理系统,趁热打铁将学生管理系统的数组篇更新,因为之后还有指针篇,怕到时候代码搞混了,由于代码注释都比较清晰,所以不在一一赘述代码含义,有疑问可以给老王留言~
用C语言数组写一个学生信息管理系统,并实现以下功能
1.对学生信息实现增、删、改、查;
2.对于增加学生信息可以判定内存是否已满、是否重复录入(学号唯一性);
3.对于删除学生信息判定是否有该生信息;
4.对于修改学生信息判定是否有该生信息;
5.对于查询学生信息判定是否有该生信息、仅打印查询信息;
6.排序功能——按照学号排序/按照成绩排序
7.以管理员身份打印所有学生信息;
8.退出系统
****** -学生管理系统******
1.添加学生信息
2.删除学生信息
3.修改学生信息
4.查询学生信息
5.学生信息排序
0.退出管理系统
**排序方式
1-按照学号排序
2-按照成绩排序
由于不太清楚,我把详细的各部分列出来如下:
1.构建一个学生结构体,里面包含学生学号、姓名、班级、成绩;
2.该结构体是一个数组型,用来存储学生呢信息;
3.先写主菜单和主菜单选项函数及四个相关函数——增删改查;
4.写方便验证的函数——打印函数;
5.写排序方式的子菜单和获取菜单选项的函数;
6.写排序方式——按照学号排序函数/按照成绩排序函数
7.排序函数用的冒泡排序法(在数组的笔记那篇文章有讲);
#include "stdio.h" #define STUDENT_NUM 30 //创建一个学生结构体,包含学号、姓名、班级、成绩 struct Student { int no; char name[64]; int class; float score; }; //初始化一个学生结构体为数组 struct Student student[STUDENT_NUM] = {0}; void Student_Init(void); int StudentMenu(void); //主菜单函数声明 void Student_ADD(); void Student_Revise(); void Student_Del(); void Student_Find(); void Student_Sort(); int SortMenu(); void SortNo(); void SortScore(); void Student_Printf(); //初始化学生信息,将开辟STUDENT_NUM这么大的空间,并全部赋-1表示未录入信息 void Student_Init(void) { for (int i = 0;i < STUDENT_NUM;i++) { student[i].no = -1; //未录入信息标志 } } int main() { Student_Init(); int num1; while (1) { num1=StudentMenu(); switch (num1) { case 1:Student_ADD();break; case 2:Student_Del();break; case 3:Student_Revise();break; case 4:Student_Find();break; case 5:Student_Sort();break; case 111:Student_Printf();break; case 0:goto over; } } over: printf("感谢使用学生管理系统!\n"); } //主菜单 int StudentMenu(void) { int num; p1: printf("****** -学生管理系统******\n"); printf("******1.添加学生信息******\n"); printf("******2.删除学生信息******\n"); printf("******3.修改学生信息******\n"); printf("******4.查询学生信息******\n"); printf("******5.学生信息排序******\n"); printf("******0.退出管理系统******\n"); printf("请输入你要执行操作的序号:\n"); scanf("%d", &num); if ((num >= 0 && num <= 5) || (num == 111)) //111打印所有数据 { return num; } else { printf("您输入的菜单选项不正确,清重新输入!\n"); goto p1; } } //学生信息排序子菜单 int SortMenu() { int num1; p1: printf("*******排序方式*****\n"); printf("***1-按照学号排序***\n"); printf("***2-按照成绩排序***\n"); printf("请输入排序方式:\n"); scanf("%d",&num1); if (num1>=1&&num1<=2) { return num1; }else{ printf("输入错误选项,请重新选择排序方式!\n"); goto p1; } } //添加学生信息 void Student_ADD() { int i; //遍历学号数组,找到放数据的空间 printf("正在执行添加学生信息操作……\n"); for (i = 0; i < STUDENT_NUM; i++) { if (student[i].no==-1)//有空间,跳出循环,输入数据 { break; } } if (i==STUDENT_NUM) { printf("空间已满,禁止继续录入!\n"); } //输入信息,由于有判定学号唯一,用tem保存从屏幕上获取的数据 struct Student temp; printf("请输入学号:\n"); scanf("%d",&temp.no); printf("请输入姓名:\n"); getchar(); scanf("%s",temp.name); printf("请输入班级:\n"); getchar(); scanf("%d",&temp.class); printf("请输入成绩:\n"); scanf("%f",&temp.score); //因为学号是唯一的,判断不能重复输入 for (int j = 0; j < STUDENT_NUM; j++) { if (student[j].no==temp.no) { printf("该学生已被录入,请不要重复录入!\n"); } } student[i]=temp; } //修改学生信息 void Student_Revise() { int num_0=0;//设置查询标志位,没找到0,找到1 printf("正在执行修改学生信息操作……\n"); p1: printf("请输入您要修改的学号:\n"); int num,i; scanf("%d",&num); for (i = 0; i < STUDENT_NUM; i++) { if (num!=student[i].no) { num_0=0; continue; }else if(student[i].no==num) { num_0=1; break; } } if (num_0==0) { printf("查无此人,请重新输入要修改的学号!\n"); goto p1; } //从屏幕获取新的数据 printf("请输入学号:\n"); scanf("%d",&student[i].no); printf("请输入姓名:\n"); getchar(); scanf("%s",student[i].name); getchar(); printf("请输入班级:\n"); scanf("%d",&student[i].class); printf("请输入成绩:\n"); scanf("%f",&student[i].score); } //删除学生信息 void Student_Del() { int num,i; int num_0=0;//设置查询标志位,没找到0,找到1 printf("正在执行删除学生信息操作……\n"); p1: printf("请输入您要删除的学号:\n"); scanf("%d",&num); for (i = 0; i < STUDENT_NUM; i++) { if (num!=student[i].no)//没找到 { continue; num_0=0; }else if (student[i].no==num) { num_0=1; student[i].no=-1; printf("删除成功!\n"); } } if (num_0==0) { printf("查无此人,请重新输入要删除的学号!\n"); goto p1; } } //查询学生信息 void Student_Find() { int i,num; int num_0=0;//设置查询标志位,没找到0,找到1 printf("正在执行查询学生信息操作……\n"); p1: printf("请输入您要查询的学号:\n"); scanf("%d",&num); for (i = 0; i < STUDENT_NUM; i++) { if (num!=student[i].no) { num_0=0; continue; }else if (student[i].no==num) { num_0=1; break; } } if (num_0==0) { printf("查无此人,请重新输入要查询的学号!\n"); goto p1; } printf("学号\t姓名\t班级\t成绩\n"); printf("%d\t",student[i].no); printf("%s\t",student[i].name); printf("%d\t",student[i].class); printf("%.2f\n",student[i].score); } //对学生信息排序 void Student_Sort() { int num2; num2=SortMenu(); int num_0; //判断是否有学生信息,有则打印, for (int i = 0; i <STUDENT_NUM; i++) { if (student[i].no==-1) { num_0=0; continue; }else{ num_0=1; break; } } if (num_0==0) { printf("没有学生信息,无法排序打印!\n"); } //选择排序方式 if (num2==1) { SortNo(); }else if (num2==2) { SortScore(); } } //学生学号排序 void SortNo() { int i,j; printf("正在按照学号排序\n"); struct Student temp; for ( i = 0; i < STUDENT_NUM; i++) { for (j = 0; j <STUDENT_NUM-i-1; j++) { if (student[j].no>student[j+1].no) { temp=student[j]; student[j]=student[j+1]; student[j+1]=temp; } } } Student_Printf(); } //学生成绩排序 void SortScore() { int i,j; printf("正在按照成绩排序\n"); struct Student temp; for ( i = 0; i < STUDENT_NUM; i++) { for (j = 0; j <STUDENT_NUM-i-1; j++) { if (student[j].score<student[j+1].score) { temp=student[j]; student[j]=student[j+1]; student[j+1]=temp; } } } Student_Printf(); } //打印所有学生信息 void Student_Printf() { printf("学号\t姓名\t班级\t成绩\n"); for (int i = 0; i < STUDENT_NUM; i++) { if (student[i].no!=-1) { printf("%d\t",student[i].no); printf("%s\t",student[i].name); printf("%d\t",student[i].class); printf("%.2f\n",student[i].score); } } }
由于之前我不知道数字时钟上传后友友们下载是要vip的,所以为了方便友友们,我将实现视频放在文章中如下:
数组学生管理系统
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。