学生信息管理系统

目录
一 设计目的 1
二 课程设计的内容 1
三 需求分析 1
四 总体设计 2
五 详细设计 2
5.1各函数的功能和实现 2
六 调试分析 4
6.1源程序 4
6.2调试与测试 11
七 实验总结 12

一 设计目的
进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。
二 课程设计的内容
对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。
三 需求分析
1、用C语言实现系统;
2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.
3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:
(1) 每一条记录包括一个学生的学号、姓名、3门课成绩
(2)成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。)
(3)成绩信息显示浏览功能:完成全部学生记录的显示。
(4)查询功能:完成按姓名查找学生记录,并显示。
(5)成绩信息的删除:按学号进行删除某学生的成绩.
(6)排序功能:按学生平均成绩进行排序。
(7)应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!

四 总体设计
根据系统需求,可将系统分为以下几个模块:
1、成绩录入功能模块
2、成绩输出功能模块
3、成绩查询功能模块
4、删除模块
5、排序功能模块
6、统计功能模块
7、退出系统
五 详细设计
5.1各函数的功能和实现
1、输入初始的学生信息:输入信息包括学生的姓名、学号以及学生的成绩等相关信息;可用函数void input(student *s)来实现此操作。
2、成绩输出模块:输出学生的信息以及成绩void output(student *s)通过学生的姓名来查看学生的相关成绩,同时也可以分别通过double avaragemath(student *s) 、double avarageenglish(student *s) 、double avarageclang(student *s) 和void Maxmath(student *s) void Maxenglish(student *s) void Maxclang(student *s) void Maxavarage(student *s)来输出成绩的平均分数、最高和最低分数。
3、成绩查询模块:可用void find(student *s) 来实现。找到就输出此学生全部信息。
4、成绩修改:用函数void alter(student *s)来实现
5、排序模块:用函数void sort(student *s)来实现
6、统计功能:用函数void count(student *s) 来实现
7、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。

                            六  调试分析   

6.1源程序
student.h

 - #ifndef _STUDENT_H_  
 - #define _STUDENT_H_  
 - typedef struct  StudentInfo  
 - {  
 -     char no[8];  
 -     char name[10];  
 -     double math;  
 -     double english;  
 -     double clang;  
 -     double score;  
 -     double avarge;  
 - }student;  
 - #endif  

``

main.cpp
``


```1.	#include<stdio.h>  
2.	#include"student.h"  
3.	#define NUM 3  
4.	extern void menu(student *s);  
5.	int main()  
6.	{  
7.	    student s[NUM];  
8.	    menu(s);  
9.	    return 0;  
10.	}  

``

menu.cpp

1.	#include<stdio.h>  
2.	#include<stdlib.h>  
3.	#include<string.h>  
4.	#include"student.h"  
5.	#define NUM 3  
6.	void select(char choice);//选择界面  
7.	void input(student *s);//成绩输入  
8.	void output(student *s);//成绩输出  
9.	void sort(student *s);//成绩排序  
10.	void find(student *s);//成绩查询  
11.	void alter(student *s);//成绩修改  
12.	void Maxmath(student *s);//高数成绩从高到低排序  
13.	void Maxenglish(student *s);//英语成绩从高到低排序  
14.	void Maxavarage(student *s);//平均分从高到低排序  
15.	void Maxclang(student *s);//C语言成绩从高到低排序  
16.	double avaragemath(student *s);//高数平均分  
17.	double avarageenglish(student *s);//英语平均分  
18.	double avarageclang(student *s);//C语言平均分  
19.	int countmath(student *s);//超过高数平均分人数  
20.	int countenglish(student *s);//超过英语平均分人数  
21.	int countclang(student *s);//超过C语言平均分人数  
22.	void count(student *s);//成绩统计
23.	void menu(student *s)  
24.	{  
25.	    while(1)  
26.	    {  
27.	    printf("\t\t------学生信息管理系统-----\n");  
28.	    printf("\t\t\ta、成绩录入\n");  
29.	    printf("\t\t\tb、成绩显示\n");  
30.	    printf("\t\t\tc、成绩排序\n");  
31.	    printf("\t\t\td、成绩修改\n");  
32.	    printf("\t\t\te、成绩查询\n");  
33.	    printf("\t\t\tf、成绩统计\n");  
34.	    printf("\t\t\t0、结束程序\n");  
35.	    printf("\t\t---------------------------\n");  
36.	    char choice;  
37.	    printf("\t\t请输入您的选择:\n");  
38.	    scanf("%c",&choice);  
39.	    getchar();   
40.	    system("cls");  
41.	    switch(choice)  
42.	    {  
43.	    case 'a':printf("\t\t\t成绩录入\n");  
44.	             input(s);  
45.	             break;  
46.	    case 'b':printf("\t\t\t成绩显示\n");  
47.	             output(s);  
48.	             break;  
49.	    case 'c':printf("\t\t\t成绩排序\n");  
50.	             sort(s);  
51.	             output(s);  
52.	             break;  
53.	    case 'd':printf("\t\t\t成绩修改\n");  
54.	             alter(s);  
55.	             break;  
56.	    case 'e':printf("\t\t\t成绩查询\n");  
57.	             find(s);  
58.	             break;  
59.	    case 'f':printf("\t\t\t成绩统计\n");  
60.	             count(s);  
61.	             break;  
62.	    case '0':printf("\t\t欢迎您再次使用,再见!!\n");  
63.	             exit(0);  
64.	             break;  
65.	    default :printf("\n对不起,您的选择有错误,请重新输入!!\n");  
66.	             menu(s);  
67.	    }//选择  
68.	    }  
69.	      
70.	}  
71.	void input(student *s)  
72.	{  
73.	    int i;  
74.	    for(i=0;i<NUM;i++)  
75.	    {  
76.	    printf("输入学号:");  
77.	    gets(s[i].no);  
78.	    printf("输入姓名:");  
79.	    gets(s[i].name);  
80.	    printf("高数成绩:");  
81.	    scanf("%lf",&s[i].math);  
82.	    getchar();  
83.	    printf("英语成绩:");  
84.	    scanf("%lf",&s[i].english);  
85.	    getchar();  
86.	    printf("C语言成绩:");  
87.	    scanf("%lf",&s[i].clang);  
88.	    getchar();  
89.	    printf("学分:");  
90.	    scanf("%lf",&s[i].score);  
91.	    getchar();  
92.	    s[i].avarge=(s[i].math+s[i].english+s[i].clang)/3.0;  
93.	    system("cls");  
94.	    }  
95.	}  
96.	void output(student *s)  
97.	{  
98.	    int i;  
99.	    printf("\t学号\t姓名\t高数\t英语\tC语言\t学分\t平均分\n");  
100.	    for(i=0;i<NUM;i++)  
101.	    {  
102.	        printf("   %8s ",s[i].no);  
103.	        printf("%8s",s[i].name);  
104.	        printf("\t%.0lf ",s[i].math);  
105.	        printf("\t%.0lf  ",s[i].english);  
106.	        printf("\t%.0lf  ",s[i].clang);  
107.	        printf("\t%.0lf  ",s[i].score);  
108.	        printf("\t%.0lf ",s[i].avarge);  
109.	        printf("\n");  
110.	    }     
111.	}  
112.	void sort(student *s)  
113.	{  
114.	    printf("\t\t1.按高数排序\n");  
115.	    printf("\t\t2.按英语排序\n");  
116.	    printf("\t\t3.按C语言排序\n");  
117.	    printf("\t\t4.按平均分排序\n");  
118.	    printf("\t请您输入您的选择\n");  
119.	    char data;  
120.	    scanf("%c",&data);  
121.	    getchar();  
122.	    system("cls");  
123.	    switch(data)  
124.	    {  
125.	    case '1':Maxmath(s);  
126.	             break;  
127.	    case '2':Maxenglish(s);  
128.	             break;  
129.	    case '3':Maxclang(s);  
130.	             break;  
131.	    case '4':Maxavarage(s);  
132.	             break;  
133.	     }  
134.	}  
135.	void alter(student *s)  
136.	{  
137.	    printf("\t\t请您输入您的密码:\n");  
138.	    int i,flag=1;  
139.	    char password[8];  
140.	    gets(password);  
141.	    getchar();  
142.	    for (i = 0; i < NUM; i++)  
143.	        {  
144.	            flag = strcmp(password, s[i].no);  
145.	            if (flag == 0)  
146.	            {  
147.	                printf("\t学号\t姓名\t高数\t英语\tC语言\t学分\t平均分\n");  
148.	                printf("   %8s %8s",  s[i].no, s[i].name);  
149.	                printf("\t%.0lf\t%.0lf", s[i].math, s[i].english);  
150.	                printf("\t%.0lf\t%.0lf", s[i].clang, s[i].score);  
151.	                printf("\t%.0lf\n", s[i].avarge);  
152.	                printf("\t请输入您想要改的课程\n");  
153.	                printf("\t\t1.高数\n");  
154.	                printf("\t\t2.英语\n");  
155.	                printf("\t\t3.C语言\n");  
156.	                char data;  
157.	                scanf("%c", &data);  
158.	                getchar();  
159.	                switch (data)  
160.	                {  
161.	                case '1':printf("请输入成绩:");  
162.	                    scanf("%lf", &s[i].math);  
163.	                    getchar();  
164.	                    system("cls");  
165.	                    break;  
166.	                case '2':printf("请输入成绩:");  
167.	                    scanf("%lf", &s[i].english);  
168.	                    getchar();  
169.	                    system("cls");  
170.	                    break;  
171.	                case '3':printf("请输入成绩:");  
172.	                    scanf("%lf", &s[i].clang);  
173.	                    getchar();  
174.	                    system("cls");  
175.	                    break;  
176.	                }  
177.	                s[i].avarge = (s[i].math + s[i].english + s[i].clang) / 3.0;  
178.	                printf("\t\t学号\t姓名\t高数\t英语\tC语言\t学分\t平均分\n");  
179.	                printf("更改后:   %8s %8s\t%.0lf", s[i].no, s[i].name, s[i].math);  
180.	                printf("\t%.0lf\t%.0lf", s[i].english, s[i].clang);  
181.	                printf("\t%.0lf\t%.0lf\n", s[i].score, s[i].avarge);  
182.	            }  
183.	        }  
184.	        if (flag == 1)  
185.	            printf("密码错误!!!");  
186.	}  
187.	void find(student *s)  
188.	{  
189.	    printf("\t\t查询方式\n");  
190.	    printf("\t1.按学号查询学生记录\n");  
191.	    printf("\t2.查询不及格学生记录\n");  
192.	    char data;  
193.	    scanf("%c",&data);  
194.	    getchar();  
195.	    int i;  
196.	    switch(data)  
197.	    {  
198.	    case '1':printf("请输入您的学号:");  
199.	             int flag;  
200.	             char password[8];  
201.	             gets(password);  
202.	             for(i=0;i<50;i++)  
203.	             {  
204.	                 flag=strcmp(password,s[i].no);  
205.	                 if (flag == 0)  
206.	                 {  
207.	                     printf("\t学号\t姓名\t高数\t英语\tC语言\t学分\t平均分\n");  
208.	                     printf("   %8s %8s", s[i].no, s[i].name);  
209.	                     printf("\t%.0lf\t%.0lf", s[i].math, s[i].english);  
210.	                     printf("\t%.0lf\t%.0lf", s[i].clang, s[i].score);  
211.	                     printf("\t%.0lf\n", s[i].avarge);  
212.	                 }  
213.	             }  
214.	             break;  
215.	    case '2':  
216.	             for(i=0;i<NUM;i++)  
217.	             {  
218.	                 if(s[i].math<60||s[i].english<60||s[i].clang<60)  
219.	                 {  
220.	                     printf("\t学号\t姓名\t高数\t英语\tC语言\t学分\t平均分\n");  
221.	                     printf("   %8s %8s", s[i].no, s[i].name);  
222.	                     printf("\t%.0lf\t%.0lf", s[i].math, s[i].english);  
223.	                     printf("\t%.0lf\t%.0lf", s[i].clang, s[i].score);  
224.	                     printf("\t%.0lf\n", s[i].avarge);  
225.	                 }  
226.	             }  
227.	             break;  
228.	    }  
229.	}  
230.	void count(student *s)  
231.	{  
232.	    printf("\t\t1.成绩最高学生信息\n");  
233.	    printf("\t\t2.每门课程平均成绩\n");  
234.	    printf("\t\t3.超过平均成绩的学生人数\n");  
235.	    char data;  
236.	    scanf("%c",&data);  
237.	    getchar();  
238.	    switch(data)  
239.	    {  
240.	    case '1':printf("\t\t学号\t姓名\t高数\t英语\tC语言\t学分\t平均分\n");  
241.	             Maxmath(s);  
242.	             printf("高数最高:   %8s %8s\t%.0lf",s[0].no,s[0].name,s[0].math);  
243.	             printf("\t%.0lf\t%.0lf", s[0].english,s[0].clang);  
244.	             printf("\t%.0lf\t%.0lf\n",s[0].score,s[0].avarge);  
245.	             Maxenglish(s);  
246.	             printf("英语最高:   %8s %8s\t%.0lf",s[0].no,s[0].name,s[0].math);  
247.	             printf("\t%.0lf\t%.0lf", s[0].english, s[0].clang);  
248.	             printf("\t%.0lf\t%.0lf\n",s[0].score,s[0].avarge);  
249.	             Maxclang(s);  
250.	             printf("c语言最高: %8s %8s\t%.0lf",s[0].no,s[0].name,s[0].math);  
251.	             printf("\t%.0lf\t%.0lf", s[0].english, s[0].clang);  
252.	             printf("\t%.0lf\t%.0lf\n",s[0].score,s[0].avarge);  
253.	             break;  
254.	    case '2':printf("高数平均分: %.0lf\n",avaragemath(s));  
255.	             printf("英语平均分: %.0lf\n",avarageenglish(s));  
256.	             printf("C语言平均分:%.0lf\n",avarageclang(s));  
257.	             break;  
258.	    case '3':printf("超过高数平均分人数:%d\n",countmath(s));  
259.	             printf("超过英语平均分人数:%d\n",countenglish(s));  
260.	             printf("超过C语言平均人数:%d\n",countclang(s));  
261.	             break;  
262.	    }  
263.	}  
264.	void Maxmath(student *s)  
265.	{  
266.	    char c[8];  
267.	    double t,r;  
268.	    int i,j;  
269.	    for(i=1;i<NUM;i++)  
270.	        for(j=0;j<NUM-i;j++)  
271.	            if(s[j].math<s[j+1].math)  
272.	            {  
273.	                strcpy(c,s[j].no);  
274.	                strcpy(s[j].no,s[j+1].no);  
275.	                strcpy(s[j+1].no,c);  
276.	                strcpy(c,s[j].name);  
277.	                strcpy(s[j].name,s[j+1].name);        
278.	                strcpy(s[j+1].name,c);  
279.	                r=s[j].math;  
280.	                s[j].math=s[j+1].math;  
281.	                s[j+1].math=r;  
282.	                r=s[j].clang;  
283.	                s[j].clang=s[j+1].clang;  
284.	                s[j+1].clang=r;  
285.	                r=s[j].english;  
286.	                s[j].english=s[j+1].english;  
287.	                s[j+1].english=r;  
288.	                t=s[j].score;  
289.	                s[j].score=s[j+1].score;  
290.	                s[j+1].score=t;  
291.	                t=s[j].avarge;  
292.	                s[j].avarge=s[j+1].avarge;  
293.	                s[j+1].avarge=t;  
294.	            }  
295.	}  
296.	void Maxenglish(student *s)  
297.	{  
298.	    char c[8];  
299.	    double t, r;  
300.	    int i, j;  
301.	    for (i = 1; i<NUM; i++)  
302.	        for (j = 0; j<NUM - i; j++)  
303.	            if (s[j].english<s[j + 1].english)  
304.	            {  
305.	                strcpy(c, s[j].no);  
306.	                strcpy(s[j].no, s[j + 1].no);  
307.	                strcpy(s[j + 1].no, c);  
308.	                strcpy(c, s[j].name);  
309.	                strcpy(s[j].name, s[j + 1].name);  
310.	                strcpy(s[j + 1].name, c);  
311.	                r = s[j].math;  
312.	                s[j].math = s[j + 1].math;  
313.	                s[j + 1].math = r;  
314.	                r = s[j].clang;  
315.	                s[j].clang = s[j + 1].clang;  
316.	                s[j + 1].clang = r;  
317.	                r = s[j].english;  
318.	                s[j].english = s[j + 1].english;  
319.	                s[j + 1].english = r;  
320.	                t = s[j].score;  
321.	                s[j].score = s[j + 1].score;  
322.	                s[j + 1].score = t;  
323.	                t = s[j].avarge;  
324.	                s[j].avarge = s[j + 1].avarge;  
325.	                s[j + 1].avarge = t;  
326.	            }  
327.	}  
328.	void Maxclang(student *s)  
329.	{  
330.	    char c[8];  
331.	    double t,r;  
332.	    int i,j;  
333.	    for(i=1;i<NUM;i++)  
334.	        for(j=0;j<NUM-i;j++)  
335.	            if(s[j].clang<s[j+1].clang)  
336.	            {  
337.	                strcpy(c,s[j].no);  
338.	                strcpy(s[j].no,s[j+1].no);  
339.	                strcpy(s[j+1].no,c);  
340.	                strcpy(c,s[j].name);  
341.	                strcpy(s[j].name,s[j+1].name);        
342.	                strcpy(s[j+1].name,c);  
343.	                r=s[j].math;  
344.	                s[j].math=s[j+1].math;  
345.	                s[j+1].math=r;  
346.	                r=s[j].clang;  
347.	                s[j].clang=s[j+1].clang;  
348.	                s[j+1].clang=r;  
349.	                r=s[j].english;  
350.	                s[j].english=s[j+1].english;  
351.	                s[j+1].english=r;  
352.	                t=s[j].score;  
353.	                s[j].score=s[j+1].score;  
354.	                s[j+1].score=t;  
355.	                t=s[j].avarge;  
356.	                s[j].avarge=s[j+1].avarge;  
357.	                s[j+1].avarge=t;  
358.	             }  
359.	}  
360.	void Maxavarage(student *s)  
361.	{  
362.	    char c[8];  
363.	    double t,r;  
364.	    int i,j;  
365.	    for(i=1;i<NUM;i++)  
366.	        for(j=0;j<NUM-i;j++)  
367.	            if(s[j].avarge<s[j+1].avarge)  
368.	            {  
369.	                 strcpy(c,s[j].no);  
370.	                strcpy(s[j].no,s[j+1].no);  
371.	                strcpy(s[j+1].no,c);  
372.	                strcpy(c,s[j].name);  
373.	                strcpy(s[j].name,s[j+1].name);        
374.	                strcpy(s[j+1].name,c);  
375.	                r=s[j].math;  
376.	                s[j].math=s[j+1].math;  
377.	                s[j+1].math=r;  
378.	                r=s[j].clang;  
379.	                s[j].clang=s[j+1].clang;  
380.	                s[j+1].clang=r;  
381.	                r=s[j].english;  
382.	                s[j].english=s[j+1].english;  
383.	                s[j+1].english=r;  
384.	                t=s[j].score;  
385.	                s[j].score=s[j+1].score;  
386.	                s[j+1].score=t;  
387.	                t=s[j].avarge;  
388.	                s[j].avarge=s[j+1].avarge;  
389.	                s[j+1].avarge=t;  
390.	            }  
391.	}  
392.	double avaragemath(student *s)  
393.	{  
394.	    int i;  
395.	    double avarage=0;  
396.	    for(i=0;i<NUM;i++)  
397.	       avarage+=s[i].math;  
398.	    return avarage/NUM;  
399.	}  
400.	double avarageenglish(student *s)  
401.	{  
402.	    int i;  
403.	    double avarage=0;  
404.	    for(i=0;i<NUM;i++)  
405.	       avarage+=s[i].english;  
406.	    return avarage/NUM;  
407.	}  
408.	double avarageclang(student *s)  
409.	{  
410.	    int i;  
411.	    double avarage=0;  
412.	    for(i=0;i<NUM;i++)  
413.	       avarage+=s[i].clang;  
414.	    return avarage/NUM;  
415.	}  
416.	int countmath(student *s)  
417.	{  
418.	    int i, count = 0;  
419.	    for(i=0;i<NUM;i++)  
420.	    if(s[i].math>avaragemath(s))   
421.	    count++;  
422.	    return count;   
423.	}  
424.	int countenglish(student *s)  
425.	{  
426.	    int i, count = 0;  
427.	    for(i=0;i<NUM;i++)  
428.	    if(s[i].english>avarageenglish(s))   
429.	    count++;  
430.	    return count;   
431.	}  
432.	int countclang(student *s)  
433.	{  
434.	    int i, count = 0;  
435.	    for(i=0;i<NUM;i++)  
436.	    if(s[i].clang>avarageclang(s))   
437.	    count++;  
438.	    return count;   
439.	}  
  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目 录 摘 要…………………………………………………………………………………………II 第一章 概述…………………………………………………………………………………1 1.1 课题背景……………………………………………………………………………1 1.2 课题任务……………………………………………………………………………1 1.3 课题要求……………………………………………………………………………1 1.4 开发工具……………………………………………………………………………2 第二章 设计简介及设计方案………………………………………………………………3 2.1 系统功能分析………………………………………………………………………3 2.2 系统功能模块设计…………………………………………………………………3 2.3 数据库功能分析……………………………………………………………………4 2.4 数据库需求分析……………………………………………………………………4 第三章 详细设计……………………………………………………………………………5 3.1 数据库设计…………………………………………………………………………5 3.2 详细编程……………………………………………………………………………6 第四章 设计结果及分析 …………………………………………………………………11 4.1 设计结果 …………………………………………………………………………11 4.2 设计结果分析 ……………………………………………………………………15 总 结 ……………………………………………………………………………………16 致 谢 ……………………………………………………………………………………17 参考文献 ……………………………………………………………………………………18
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值