当前位置:   article > 正文

C语言——学生信息管理系统(数组)_c语言学生信息管理系统

c语言学生信息管理系统

一、前言

因为最近是在赶进度总结,数组和指针的笔记已经更新,但是数组、指针的习题还未总结,数组的题已经开始总结,但是还没总结完,所以还没发出来,目前学习进度已经到了学生管理系统,趁热打铁将学生管理系统的数组篇更新,因为之后还有指针篇,怕到时候代码搞混了,由于代码注释都比较清晰,所以不在一一赘述代码含义,有疑问可以给老王留言~

二、目的

C语言数组写一个学生信息管理系统,并实现以下功能
1.对学生信息实现增、删、改、查;
2.对于增加学生信息可以判定内存是否已满、是否重复录入(学号唯一性);
3.对于删除学生信息判定是否有该生信息;
4.对于修改学生信息判定是否有该生信息;
5.对于查询学生信息判定是否有该生信息、仅打印查询信息;
6.排序功能——按照学号排序/按照成绩排序
7.以管理员身份打印所有学生信息;
8.退出系统

三、框架

1.菜单

1.1主菜单

****** -学生管理系统******
1.添加学生信息
2.删除学生信息
3.修改学生信息
4.查询学生信息
5.学生信息排序
0.退出管理系统

1.2子菜单

**排序方式
1-按照学号排序
2-按照成绩排序

2.流程图

2.1总流程图

在这里插入图片描述
由于不太清楚,我把详细的各部分列出来如下:

2.2开始流程图

在这里插入图片描述

2.3增加学生信息流程图

在这里插入图片描述

2.4.删除学生信息流程图

在这里插入图片描述

2.5修改学生信息流程图

在这里插入图片描述

2.6查询学生信息流程图

在这里插入图片描述

2.7对学生信息排序流程图

在这里插入图片描述

3.思路

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);
        }
    }
    
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340

五、演示视频

由于之前我不知道数字时钟上传后友友们下载是要vip的,所以为了方便友友们,我将实现视频放在文章中如下:

数组学生管理系统

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/39435
推荐阅读
相关标签
  

闽ICP备14008679号