本文实例为大家分享了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