服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言实现简易学生管理系统

C语言实现简易学生管理系统

2022-12-25 15:57Hubert★ C/C++

这篇文章主要为大家详细介绍了C语言实现简易学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下

首先我们在做一个管理系统之前要了解这个学生管理系统需要哪些功能,如:简单的增,删,改,查,即:录入成绩,查询成绩,删除成绩,修改成绩,插入成绩,这几个是基本要包括的,当然我们也可以加上排序,统计学生人数,这些功能。

当清楚需要哪些功能之后我们就可以写系统的界面了。

效果图如下:

C语言实现简易学生管理系统

?
1
2
3
4
5
6
7
8
9
10
11
 printf("\t\t\t---------------STUDENT---------------\t\t\t\n");
      printf("\t\t\t0.退出\t\t\t\n");
      printf("\t\t\t1.录入成绩\t\t\t\n");
      printf("\t\t\t2.查询成绩\t\t\t\n"); 
      printf("\t\t\t3.删除成绩\t\t\t\n");
      printf("\t\t\t4.修改成绩\t\t\t\n");
      printf("\t\t\t5.插入成绩\t\t\t\n");
      printf("\t\t\t6.排序\t\t\t\n");
      printf("\t\t\t7.统计学生人数\t\t\t\n");
      printf("\t\t\t-------------------------------------\t\t\t\n"); 
      printf("\t\t\t选择(0---7)\t\t\t"); 

接着我们就可以加入switch函数进行功能选择

定义整型变量choice 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int  choice ;
       scanf("%d",&choice );
     switch(choice )
     {
         case 0:exit(0); break;
         case 1: in();save();system("pause");system("cls");break;//录入 
         case 2: show();system("pause");system("cls");break;//查询 
         case 3: del();save();system("pause");system("cls");break;//删除 
         case 4: modify();system("pause");system("cls");break;//修改 
         case 5: insert();save();system("pause");system("cls");break;//插入 
         case 6: order();system("pause");system("cls");break;//排序 
         case 7: total();system("pause");system("cls");break;//统计 
         default:printf("\n输入错误,请输入0---7\n\n");system("pause");system("cls");break;
    
     }

定义一个Menu函数把上面两个结合起来,我们加一个while循环让这个这个菜单一直循环出现,而不是用一次就没了。

?
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
void Menu()//菜单
 
{   while(1)
    {
      printf("\t\t\t---------------STUDENT---------------\t\t\t\n");
      printf("\t\t\t0.退出\t\t\t\n");
      printf("\t\t\t1.录入成绩\t\t\t\n");
      printf("\t\t\t2.查询成绩\t\t\t\n"); 
      printf("\t\t\t3.删除成绩\t\t\t\n");
      printf("\t\t\t4.修改成绩\t\t\t\n");
      printf("\t\t\t5.插入成绩\t\t\t\n");
      printf("\t\t\t6.排序\t\t\t\n");
      printf("\t\t\t7.统计学生人数\t\t\t\n");
      printf("\t\t\t-------------------------------------\t\t\t\n"); 
      printf("\t\t\t选择(0---7)\t\t\t"); 
       int  chioce;
       scanf("%d",&chioce);
     switch(chioce)
     {
         case 0:exit(0); break;
         case 1: in();save();system("pause");system("cls");break;//录入 
         case 2: show();system("pause");system("cls");break;//查询 
         case 3: del();save();system("pause");system("cls");break;//删除 
         case 4: modify();system("pause");system("cls");break;//修改 
         case 5: insert();save();system("pause");system("cls");break;//插入 
         case 6: order();system("pause");system("cls");break;//排序 
         case 7: total();system("pause");system("cls");break;//统计 
         default:printf("\n输入错误,请输入0---7\n\n");system("pause");system("cls");break;
    
     }
  }
}

写完菜单之后我们就要对“学生”这个数据进行分析

在这个系统中学生的信息要包含那些东西,举个例子:学号,姓名,选修课成绩,实验课成绩,必修课成绩,总成绩,平均成绩。然后根据这些写一个结构体(我写的是数组类型的结构体)

?
1
2
3
4
5
6
7
8
9
10
struct student
{
   char num[20];//学号 
   char name[20];//姓名 
   float elec;//选修课 
   float expe;//实验课 
  float requ;//必修课 
   float sum;//总成绩 '
   float ave;//平均成绩 
}student[N];

接着我们开始写实现这个系统功能的函数

第一个就是成绩的录入

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void in()//录入信息 
    {
    void save() ;
        int i,n;
        printf("输入录取学生的数量\n");
        scanf("%d", &n);
        for (i=1 ; i<=n; i++)
        {   printf("请输入第%d位学生学号:\n",i);
            scanf("%s",student[i].num);
            printf("请输入第%d位学生姓名:\n", i );
            scanf("%s",student[i].name);
            printf("请输入第%d位学生选修课成绩:\n", i );
            scanf("%f",&student[i].elec);
            printf("请输入第%d位学生实验成绩:\n", i );
            scanf("%f", &student[i].expe);
            printf("请输入第%d位学生必修课成绩:\n", i );
            scanf("%f", &student[i].requ);
            student[i].sum=student[i].elec+student[i].expe+student[i].requ;
             student[i].ave=student[i].sum /3;
          count++;
        
        printf("录入成功\n");
    
    }

第二个就是成绩的查询

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 void show() //查询 
    {
        
        int i;
        char xh[20]; 
        printf("请输入要查询的学生学号:\n");
        getchar();
        gets(xh);
        for (i=0;i<N;i++) 
        {
            if(strcmp(student[i].num,xh)==0)//对比两个字符串如果两者一样则进行if下面的的语句否则继续循环
            printf("\n学号:%-5s  姓名:%-5s  选修课成绩:%-5.1f  实验课成绩:%-5.1f  必修课成绩:%-5.1f  总分:%-5.1f  平均分:%-5.1f\n",
            student[i].num,student[i].name,student[i].elec,student[i].expe,student[i].requ,student[i].sum,student[i].ave);
        }
    }

第三个就是成绩的删除

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void del()//删除 
{
    void save()   ;
    int j,a=0,k=count;
    char xh[25];
    printf("所要删除的学生学号为:\n");
    scanf("%s",xh);
    flush(stdin);//缓冲区
    for (j=0;j<count;j++)
    {
        if (strcmp(student[j].num,xh)==0)
        {
            for (j=a;j<count;j++)
            student[j]=student[j+1];
            count--;
            if (count<k)
            printf("删除成功\n");
        }
        a++;
    }
        if (j==count-1)
        printf("没有你所要删除的学生的信息\n");
 
}

第四项,成绩的修改

步骤 1.先找到要修改的学生

        2.选择修改的项目

        3.更改总成绩和平均分

        4.显示修改后的学生数据

?
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
void modify()//修改 
    {   void save()   ;
        int i,j,h;
        float score;
        char xh[20];     
        printf ("01.输入修改的学生的学号:\n") ;
       scanf("%s",xh);
        for(i=1;i<N;i++)
        if (strcmp(student[i].num,xh)==0)
           j=i;
        printf("请选择修改内容\n");
        printf("1.修改该学生的选修课成绩\n");
        printf("2.修改该学生的实验课成绩\n");
        printf("3.修改该学生的必修课成绩\n");
        scanf("%d",&h);
        switch (h) 
        {
            case 1:printf("请输入该学生的选修课成绩\n");scanf("%f",&score);student[j].elec=score; break;
            case 2:printf("请输入该学生的实验课成绩\n");scanf("%f",&score);student[j].expe=score;break;
            case 3:printf("请输入该学生的必修课成绩\n");scanf("%f",&score);student[j].requ=score;break;
            default :printf("\n输入错误,请输入1---3\n\n"); break;
       
        student[j].sum = student[j].elec+student[j].expe + student[j].requ;
        printf("修改后为:\n");
        printf("\n学号:%-5s  姓名:%-5s  选修课成绩:%-5.1f  实验课成绩:%-5.1f  必修课成绩:%-5.1f  总分:%-5.1f  平均分:%-5.1f\n",
            student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave);
   printf("\n");
        printf("修改成功\n") ;
    
   }

第五项,成绩的插入

?
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
 void insert ()//插入 
{void save();
    int m, flag, i = count, j,k;
    printf("请输入待添加的学生人数:\n");
    scanf("%d", &m);
    if (m > 0)
    {
        k=count+1;
    for(i=k;i<=count+m;i++)    
        {
            flag = 1;
            while (flag!= 0)
            {
                flag = 0;
                printf("请输入第%d位学生的学号:\n", i);
                getchar();
                gets(student[i].num);
                for (j = 0; j < i; j++)
                {
                    if (strcmp(student[i].num, student[j].num) == 0)
                    {
                        printf("该学号已存在,请重新输入!\n");
                        flag = 1;
                        break;
                    }
                }
            }
            printf("请输入第%d位学生姓名:\n", i );
            gets(student[i].name);
            printf("请输入第%d位学生选修课成绩:\n", i );
            scanf("%f",&student[i].elec);
            printf("请输入第%d位学生实验成绩:\n", i );
            scanf("%f", &student[i].expe);
            printf("请输入第%d位学生必修课成绩:\n", i );
            scanf("%f", &student[i].requ);
            student[i].sum=student[i].elec+student[i].expe+student[i].requ;
            student[i].ave=student[i].sum /3;
      }
        count+= m;
        printf("添加完成!\n");
        system("pause");
  
    }
}

第六项,排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 void order()//排序 
     {    
        int i,j,m;
        for(j=1;j<=count-1;j++)
    {    m=j;
        for(i=j+1;i<=count;i++)
        {
        if(student[i].sum < student[m].sum)
        {
         student[0]=student[i];
          student[i]=student[m];
         student[m]=student[0];
       }
       }
    }
    for(j=1;j<=count;j++)
    {
          printf("\n学号:%-5s  姓名:%-5s  选修课成绩:%-5.1f  实验课成绩:%-5.1f  必修课成绩:%-5.1f  总分:%-5.1f  平均分:%-5.1f\n",
            student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave);
  }                 
 

第七项,统计学生人数

?
1
2
3
4
void total ()//统计 
{
    printf("学生人数%d\n",count);
}

完整的代码

?
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
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
struct student
{
   char num[20];//学号 
   char name[20];//姓名 
   float elec;//选修课 
   float expe;//实验课 
  float requ;//必修课 
   float sum;//总成绩 '
   float ave;//平均成绩 
}student[N];
 
void Menu(); // 菜单 
void in();//录入 
void show() ;//查找 
void order();//排序 
void del(); //删除 
void modify();//修改 
void total ();//统计 
void insert ();//插入 
int count=0;//人数 
void save();//保存 
int main() 
{
    Menu();
    
    return 0; 
}
 
void Menu()//菜单
 
{   while(1)
    {
      printf("\t\t\t---------------STUDENT---------------\t\t\t\n");
      printf("\t\t\t0.退出\t\t\t\n");
      printf("\t\t\t1.录入成绩\t\t\t\n");
      printf("\t\t\t2.查询成绩\t\t\t\n"); 
      printf("\t\t\t3.删除成绩\t\t\t\n");
      printf("\t\t\t4.修改成绩\t\t\t\n");
      printf("\t\t\t5.插入成绩\t\t\t\n");
      printf("\t\t\t6.排序\t\t\t\n");
      printf("\t\t\t7.统计学生人数\t\t\t\n");
      printf("\t\t\t-------------------------------------\t\t\t\n"); 
      printf("\t\t\t选择(0---7)\t\t\t"); 
       int  chioce;
       scanf("%d",&chioce);
     switch(chioce)
     {
         case 0:exit(0); break;
         case 1: in();save();system("pause");system("cls");break;//录入 
         case 2: show();system("pause");system("cls");break;//查询 
         case 3: del();save();system("pause");system("cls");break;//删除 
         case 4: modify();system("pause");system("cls");break;//修改 
         case 5: insert();save();system("pause");system("cls");break;//插入 
         case 6: order();system("pause");system("cls");break;//排序 
         case 7: total();system("pause");system("cls");break;//统计 
         default:printf("\n输入错误,请输入0---7\n\n");system("pause");system("cls");break;
    
     }
  }
}
 
void save()  //保存 
{
    FILE* fp;
    char filename[100];
    int i;
    printf("请输入要保存的文件名:\n");
    scanf("%s", filename);
    if ((fp = fopen(filename, "w")) == NULL)
    {
        printf("打开文件失败!\n");
        exit(0);
    }
    for (i = 1; i<=count; i++)
    {
        if (fwrite(&student[i], sizeof(struct student), 1, fp) != 1)
            printf("保存失败!\n");
    }
    printf("保存成功!\n");
    fclose(fp);
}
 
     void in()//录入信息 
    {
    void save() ;
        int i,n;
        printf("输入录取学生的数量\n");
        scanf("%d", &n);
        for (i=1 ; i<=n; i++)
        {   printf("请输入第%d位学生学号:\n",i);
            scanf("%s",student[i].num);
            printf("请输入第%d位学生姓名:\n", i );
            scanf("%s",student[i].name);
            printf("请输入第%d位学生选修课成绩:\n", i );
            scanf("%f",&student[i].elec);
            printf("请输入第%d位学生实验成绩:\n", i );
            scanf("%f", &student[i].expe);
            printf("请输入第%d位学生必修课成绩:\n", i );
            scanf("%f", &student[i].requ);
            student[i].sum=student[i].elec+student[i].expe+student[i].requ;
             student[i].ave=student[i].sum /3;
          count++;
        
        printf("录入成功\n");
    
    }
 
void modify()//修改 
    {   void save()   ;
        int i,j,h;
        float score;
        char xh[20];     
        printf ("01.输入修改的学生的学号:\n") ;
       scanf("%s",xh);
        for(i=1;i<N;i++)
        if (strcmp(student[i].num,xh)==0)
           j=i;
        printf("请选择修改内容\n");
        printf("1.修改该学生的选修课成绩\n");
        printf("2.修改该学生的实验课成绩\n");
        printf("3.修改该学生的必修课成绩\n");
        scanf("%d",&h);
        switch (h) 
        {
            case 1:printf("请输入该学生的选修课成绩\n");scanf("%f",&score);student[j].elec=score; break;
            case 2:printf("请输入该学生的实验课成绩\n");scanf("%f",&score);student[j].expe=score;break;
            case 3:printf("请输入该学生的必修课成绩\n");scanf("%f",&score);student[j].requ=score;break;
            default :printf("\n输入错误,请输入1---3\n\n"); break;
       
        student[j].sum = student[j].elec+student[j].expe + student[j].requ;
        printf("修改后为:\n");
        printf("\n学号:%-5s  姓名:%-5s  选修课成绩:%-5.1f  实验课成绩:%-5.1f  必修课成绩:%-5.1f  总分:%-5.1f  平均分:%-5.1f\n",
            student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave);
   printf("\n");
        printf("修改成功\n") ;
    
   }
 
      void show() //查询 
    {
        
        int i;
        char xh[20]; 
        printf("请输入要查询的学生学号:\n");
        getchar();
        gets(xh);
        for (i=0;i<N;i++) 
        {
            if(strcmp(student[i].num,xh)==0)
            printf("\n学号:%-5s  姓名:%-5s  选修课成绩:%-5.1f  实验课成绩:%-5.1f  必修课成绩:%-5.1f  总分:%-5.1f  平均分:%-5.1f\n",
            student[i].num,student[i].name,student[i].elec,student[i].expe,student[i].requ,student[i].sum,student[i].ave);
        }
    }
     
 void order()//排序 
     {    
        int i,j,m;
        for(j=1;j<=count-1;j++)
    {    m=j;
        for(i=j+1;i<=count;i++)
        {
        if(student[i].sum < student[m].sum)
        {
         student[0]=student[i];
          student[i]=student[m];
         student[m]=student[0];
       }
       }
    }
    for(j=1;j<=count;j++)
    {
          printf("\n学号:%-5s  姓名:%-5s  选修课成绩:%-5.1f  实验课成绩:%-5.1f  必修课成绩:%-5.1f  总分:%-5.1f  平均分:%-5.1f\n",
            student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave);
  }                 
 
 
void del()//删除 
{
    void save()   ;
    int j,a=0,k=count;
    char xh[25];
    printf("所要删除的学生学号为:\n");
    scanf("%s",xh);
    flush(stdin);
    for (j=0;j<count;j++)
    {
        if (strcmp(student[j].num,xh)==0)
        {
            for (j=a;j<count;j++)
            student[j]=student[j+1];
            count--;
            if (count<k)
            printf("删除成功\n");
        }
        a++;
    }
        if (j==count-1)
        printf("没有你所要删除的学生的信息\n");
 
}
 
   void insert ()//插入 
{void save();
    int m, flag, i = count, j,k;
    printf("请输入待添加的学生人数:\n");
    scanf("%d", &m);
    if (m > 0)
    {
        k=count+1;
    for(i=k;i<=count+m;i++)    
        {
            flag = 1;
            while (flag!= 0)
            {
                flag = 0;
                printf("请输入第%d位学生的学号:\n", i);
                getchar();
                gets(student[i].num);
                for (j = 0; j < i; j++)
                {
                    if (strcmp(student[i].num, student[j].num) == 0)
                    {
                        printf("该学号已存在,请重新输入!\n");
                        flag = 1;
                        break;
                    }
                }
            }
            printf("请输入第%d位学生姓名:\n", i );
            gets(student[i].name);
            printf("请输入第%d位学生选修课成绩:\n", i );
            scanf("%f",&student[i].elec);
            printf("请输入第%d位学生实验成绩:\n", i );
            scanf("%f", &student[i].expe);
            printf("请输入第%d位学生必修课成绩:\n", i );
            scanf("%f", &student[i].requ);
            student[i].sum=student[i].elec+student[i].expe+student[i].requ;
            student[i].ave=student[i].sum /3;
      }
        count+= m;
        printf("添加完成!\n");
        system("pause");
  
    }
}
void total ()//统计 
{
    printf("学生人数%d\n",count);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/m0_56078449/article/details/122372150

延伸 · 阅读

精彩推荐
  • C/C++linux系统中c++写日志文件功能分享

    linux系统中c++写日志文件功能分享

    这篇文章主要介绍了linux系统中c++写日志文件功能,简化了glog,只保留了写日志文件的功能,只是改写了linux版本,需要的朋友可以参考下...

    C++教程网6372021-01-16
  • C/C++C语言实现校园导游系统

    C语言实现校园导游系统

    这篇文章主要为大家详细介绍了C语言实现校园导游系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    for_s7342022-10-24
  • C/C++浅析C++中模板的那点事

    浅析C++中模板的那点事

    C++中的模板可分为函数模板和类模板,而把函数模板的具体化称为模板函数,把类模板的具体化成为模板类。下面让我们分别看看什么是函数模板和类模板...

    C++教程网8282020-12-31
  • C/C++对C语言中递归算法的深入解析

    对C语言中递归算法的深入解析

    C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数...

    C语言教程网3592020-12-17
  • C/C++C语言全面细致精讲操作符的使用

    C语言全面细致精讲操作符的使用

    C 语言提供了丰富的操作符,有:算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符等。接下了让我...

    拾至灬名瑰4352022-11-25
  • C/C++浅析C语言中的sizeof

    浅析C语言中的sizeof

    sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义...

    C语言教程网2152020-12-17
  • C/C++C++实现LeetCode(201.数字范围位相与)

    C++实现LeetCode(201.数字范围位相与)

    这篇文章主要介绍了C++实现LeetCode(201.数字范围位相与),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Grandyang4892021-12-13
  • C/C++C语言超详细讲解栈与队列实现实例

    C语言超详细讲解栈与队列实现实例

    栈和队列,严格意义上来说,也属于线性表,因为它们也都用于存储逻辑关系为 "一对一" 的数据,但由于它们比较特殊,因此将其单独作为一章,做重点讲...

    许同学。。9092022-11-01