当时写这个程序的时候是一个通信学院的同学让我帮忙做课程设计,要求用C语言编写.所以本程序全部是用C语言写的.
主界面:
1.成绩录入
2.成绩查询
3.成绩统计
4.退 出
a.结构体的建立:
1 //定义一个学生成绩的结构体,解决多个变量问题
2 struct Student
3 {
4 int num; //学号
5 char name[50];//姓名
6 float chinese;//语文
7 float math;//数学
8 float english;//英语
9 float ave;//平均成绩
10 float all;//总成绩
11 }stu[50];
b.单科排名的实现:就是用了一个冒泡排序法.
当然这里面的 count 是用来统计学生的个数的,我声明了一个全局的静态变量 static count;
1 //对语文单科成绩统计
2 for (i = 0; i < count - 1; i++)
3 {
4 for (j = 0; j < count - i; j++)
5 {
6 if (stu[j].chinese < stu[j+1].chinese)
7 {
8 temp = stu[j].chinese;
9 stu[j].chinese = stu[j+1].chinese;
10 stu[j+1].chinese = temp;
11 }
12 }
13 }
c.成绩查询:
其中查询方式有两种:
1.学号查询
2.姓名查询
这里主要讲一下姓名查询:
姓名查询:if (0 == strcmp(nam,stu[i].name)) 用这行代码来判断输入的汉字姓名是否一样.
1 printf(" 请输入姓名:");
2 scanf("%s",nam);
3
4 system("cls");
5 printf("\n\n\n");
6 for (i = 0; i < count; i++)
7 {
8 if (0 == strcmp(nam,stu[i].name))
9 {
10 flag = 1;//这个用来标记存在这个学号的学生么? 用于下面的if()判断
11 printf(" 姓 名: %s\n",stu[i].name);
12 printf(" 学 号: %d\n",stu[i].num);
13 printf(" 语 文: %.2f\n",stu[i].chinese);
14 printf(" 数 学: %.2f\n",stu[i].math);
15 printf(" 英 语: %.2f\n\n\n",stu[i].english);
16 }
17 }
下面就是程序的所有源代码:
1 //学生管理系统1.0版.cpp
2
3 #include <stdio.h>
4 #include <string.h>
5 #include <stdlib.h>//exit(1);的头文件
6
7 //定义一个学生成绩的结构体,解决多个变量问题
8 struct Student
9 {
10 int num; //学号
11 char name[50];//姓名
12 float chinese;//语文
13 float math;//数学
14 float english;//英语
15 float ave;//平均成绩
16 float all;//总成绩
17 }stu[50];
18
19 static count;//定义一个静态变量,记录录入成绩的学生个数。
20
21 void input()
22 {
23 system("cls");//清屏
24
25 int i = 0;
26
27 printf("\n※当前目录:成绩录入\n");
28 printf("\n注:当前版本只支持一次录入,第二次录入时直接覆盖上次录入的学生成绩.\n");
29 printf("学生成绩录入中......(提示:学号为0,表示录入成绩结束.)\n\n");
30
31 //学生成绩的录入
32 while(1)
33 {
34 printf("\n你正在录入第%d个学生的成绩:\n",i+1);
35 printf(" 学号:");
36 scanf("%d",&stu[i].num);
37
38 if (0 != stu[i].num)
39 {
40 printf(" 姓名:");
41 scanf("%s",stu[i].name);
42 printf(" 语文:");
43 scanf("%f",&stu[i].chinese);
44 printf(" 数学:");
45 scanf("%f",&stu[i].math);
46 printf(" 英语:");
47 scanf("%f",&stu[i].english);
48
49 ++i;
50 }
51 else
52 {
53 if (0 == stu[0].num)
54 {
55 system("cls");
56 printf("提示:你没有录入学生成绩.\n");
57 }
58 else
59 {
60 system("cls");
61 printf("提示:学生成绩录入成功.\n");
62 }
63
64 count = i;
65
66 printf("\n 按'enter'进入导航页面...");
67
68 getchar();//吸收前面的回车键
69 getchar();//暂停效果(表示从键盘接受一个字符)
70 system("cls");
71
72 break;
73 }
74 }
75 }
76
77 void tongji()
78 {
79 system("cls");
80
81 int pai;
82 int i;
83 int j;
84 float temp;
85
86 printf("\n※当前目录:成绩统计\n");
87 printf("\n学生单科成绩排名:\n\n\n");
88
89 //判断是否录入了学生成绩
90 if (0 == count)
91 {
92 printf("\n\n\n\n 提示:当前没有学生成绩记录,先去录入学生成绩\n\n\n");
93 }
94 else
95 {
96 printf(" 选择要排序的单科:\n\n\n");
97 printf(" 1.语 文\n\n");
98 printf(" 2.数 学\n\n");
99 printf(" 3.英 语\n\n");
100 printf(" 4.平均成绩\n\n");
101 printf(" 5.总体成绩\n\n");
102 printf(" 我选择:[_]\b\b");
103
104 //对总成绩和平均成绩进行统计
105 for (i = 0; i < count; i++)
106 {
107 stu[i].all = stu[i].chinese + stu[i].math + stu[i].english;
108 stu[i].ave = stu[i].all / 3;
109 }
110
111 do
112 {
113 scanf("%d",&pai);
114
115 switch(pai)
116 {
117 case 1:
118 {
119 //对语文单科成绩统计
120 for (i = 0; i < count - 1; i++)
121 {
122 for (j = 0; j < count - i; j++)
123 {
124 if (stu[j].chinese < stu[j+1].chinese)
125 {
126 temp = stu[j].chinese;
127 stu[j].chinese = stu[j+1].chinese;
128 stu[j+1].chinese = temp;
129 }
130 }
131 }
132
133 system("cls");
134 printf("\n\n语文成绩单科排名:\n\n");
135 //排序后输出成绩
136 for (i = 0; i < count; i++)
137 {
138 printf("\n第%d名: 姓名:%s , 语文成绩: %.2f\t\n",i+1,stu[i].name,stu[i].chinese);
139 }
140 };
141 break;
142
143 case 2:
144 {
145 //对数学单科成绩统计
146 for (i = 0; i < count - 1; i++)
147 {
148 for (j = 0; j < count - i; j++)
149 {
150 if (stu[j].math < stu[j+1].math)
151 {
152 temp = stu[j].math;
153 stu[j].math = stu[j+1].math;
154 stu[j+1].math = temp;
155 }
156 }
157 }
158
159 system("cls");
160 printf("\n\n数学成绩单科排名:\n\n");
161 //排序后输出成绩
162 for (i = 0; i < count; i++)
163 {
164 printf("\n第%d名: 姓名:%s , 数学成绩: %.2f\t\n",i+1,stu[i].name,stu[i].math);
165 }
166 };
167 break;
168
169 case 3:
170 {
171 //对英语单科成绩统计
172 for (i = 0; i < count - 1; i++)
173 {
174 for (j = 0; j < count - i; j++)
175 {
176 if (stu[j].english < stu[j+1].english)
177 {
178 temp = stu[j].english;
179 stu[j].english = stu[j+1].english;
180 stu[j+1].english = temp;
181 }
182 }
183 }
184
185 system("cls");
186 printf("\n\n英语成绩单科排名:\n\n");
187 //排序后输出成绩
188 for (i = 0; i < count; i++)
189 {
190 printf("\n第%d名: 姓名:%s , 英语成绩: %.2f\t\n",i+1,stu[i].name,stu[i].english);
191 }
192 };
193 break;
194 case 4:
195 {
196 //对平均成绩统计
197 for (i = 0; i < count - 1; i++)
198 {
199 for (j = 0; j < count - i; j++)
200 {
201 if (stu[j].ave < stu[j+1].ave)
202 {
203 temp = stu[j].ave;
204 stu[j].ave = stu[j+1].ave;
205 stu[j+1].ave = temp;
206 }
207 }
208 }
209
210 system("cls");
211 printf("\n\n平均成绩排名:\n\n");
212 //排序后输出成绩
213 for (i = 0; i < count; i++)
214 {
215 printf("\n第%d名: 姓名:%s , 平均成绩: %.2f\t\n",i+1,stu[i].name,stu[i].ave);
216 }
217 };
218 break;
219 case 5:
220 {
221 //对总成绩统计
222 for (i = 0; i < count - 1; i++)
223 {
224 for (j = 0; j < count - i; j++)
225 {
226 if (stu[j].all < stu[j+1].all)
227 {
228 temp = stu[j].all;
229 stu[j].all = stu[j+1].all;
230 stu[j+1].all = temp;
231 }
232 }
233 }
234
235 system("cls");
236 printf("\n\n总成绩排名:\n\n");
237 //排序后输出成绩
238 for (i = 0; i < count; i++)
239 {
240 printf("\n第%d名: 姓名:%s , 总成绩: %.2f\t\n",i+1,stu[i].name,stu[i].all);
241 }
242 };
243 break;
244 default : printf("输入有误!请重新输入:");
245 break;
246 }
247 }while((1 != pai) && (2 != pai) && (3 != pai) && (4 != pai) && (5 != pai));
248 }
249
250 printf("\n 按'enter'进入导航页面...");
251
252 getchar();
253 getchar();
254 system("cls");
255 }
256
257 void display()
258 {
259 system("cls");
260
261 char nam[50];
262 int xuan;
263 int i;
264 int m;
265 int flag = 0;
266
267 printf("\n※当前目录:成绩查询\n\n");
268 printf("注:当前版本支持学号,姓名两种查询方式,先选择查询方式:\n");
269 printf("\n 1.学号查询\n");
270 printf("\n 2.姓名查询\n");
271 printf(" 我选择:[_]\b\b");
272
273 do
274 {
275 scanf("%d",&xuan);
276
277 if ((1 != xuan) && (2 != xuan))
278 {
279 printf("输入错误!请重新输入:");
280 }
281 }while((1 != xuan) && (2 != xuan));
282
283 printf("\n\n");
284 if (1 == xuan)
285 {
286 printf(" 请输入学号:");
287 scanf("%d",&m);
288
289 system("cls");
290 printf("\n\n\n");
291 for (i = 0; i < count; i++)
292 {
293 if (m == stu[i].num)
294 {
295 flag = 1;//这个用来标记存在这个学号的学生么? 用于下面的if()判断
296 printf(" 姓 名: %s\n",stu[i].name);
297 printf(" 学 号: %d\n",stu[i].num);
298 printf(" 语 文: %.2f\n",stu[i].chinese);
299 printf(" 数 学: %.2f\n",stu[i].math);
300 printf(" 英 语: %.2f\n\n\n",stu[i].english);
301 }
302 }
303
304 if (0 == flag)
305 {
306 printf("\n\n\n\n 提示:很遗憾,没找到你要找的学生.\n\n\n\n");
307 }
308 }
309 else
310 {
311 printf(" 请输入姓名:");
312 scanf("%s",nam);
313
314 system("cls");
315 printf("\n\n\n");
316 for (i = 0; i < count; i++)
317 {
318 if (0 == strcmp(nam,stu[i].name))
319 {
320 flag = 1;//这个用来标记存在这个学号的学生么? 用于下面的if()判断
321 printf(" 姓 名: %s\n",stu[i].name);
322 printf(" 学 号: %d\n",stu[i].num);
323 printf(" 语 文: %.2f\n",stu[i].chinese);
324 printf(" 数 学: %.2f\n",stu[i].math);
325 printf(" 英 语: %.2f\n\n\n",stu[i].english);
326 }
327 }
328
329 if (0 == flag)
330 {
331 printf("\n\n\n\n 提示:很遗憾,没找到你要找的学生.\n\n\n\n");
332 }
333 }
334
335 printf("\n 按'enter'进入导航页面...");
336
337 getchar();
338 getchar();
339 system("cls");
340 }
341
342 int main()
343 {
344 int n;
345
346 loop:
347 printf("\n※欢迎进入学生成绩管理系统1.0版.\n\n\n\n\n");
348 printf(" 1.成绩录入\n\n");
349 printf(" 2.成绩查询\n\n");
350 printf(" 3.成绩统计\n\n");
351 printf(" 4.退 出\n\n");
352 printf("\n 我选择:[_]\b\b");
353
354 //循环判断选择是是否正确
355 do
356 {
357 scanf("%d",&n);
358
359 switch(n)
360 {
361 case 1: input(); goto loop; break; //成绩录入
362 case 2: display(); goto loop; break; //成绩查询.
363 case 3: tongji(); goto loop; break; //成绩统计
364 case 4: printf("\n\n 已安全退出系统,感谢你的使用^@^...\n\n\n\n\n"); exit(1); break; //退出系统.
365 default: printf("输入有误!请重新输入:"); break;
366 }
367 }while((n != 1) && (n != 2) && (n != 3));
368
369 return 0;
370 }