《班级成绩管理系统》C语言课程设计.docx
- 文档编号:10019248
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:28
- 大小:84.95KB
《班级成绩管理系统》C语言课程设计.docx
《《班级成绩管理系统》C语言课程设计.docx》由会员分享,可在线阅读,更多相关《《班级成绩管理系统》C语言课程设计.docx(28页珍藏版)》请在冰豆网上搜索。
《班级成绩管理系统》C语言课程设计
《班级成绩管理系统》C语言课程设计
目录
一、设计要求……………………………………………………………3
二、设计目的……………………………………………………………3
三、课题分析……………………………………………………………3
四、具体设计过程………………………………………………………3
4.1、定义数据结构及相关解释……………………………………3
4.2、软件的模块划分………………………………………………4
4.3、程序流程设计…………………………………………………4
4.4、各功能模块编写内容详细情况及调试………………………6
4.5、源程序内容及调试结果………………………………………7
4.6、用到的库函数简介……………………………………………21
五、实习心得体会………………………………………………………21
六、参考文献……………………………………………………………22
一、要求
(1)收集资料,全面分析课题,分解问题,形成中体编程思路;
(2)深入分析各个小问题,编写个部分程序模块;
(3)对于设计中用到的关键函数,要联系实际问题进行具体介绍;
(4)上机调试,确保程序能正确运行;
二、设计目的
(1)熟悉c语言的编译连接和运行过程。
(2)掌握c语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给它们赋值。
(3)掌握if语句及switch语句的运用方法及嵌套应用方法。
(4)掌握实现循环结构的三种语句while、do-while.、for的使用。
(5)掌握函数的定义方法和调用方法。
(6)能够采用模块化思想调试程序。
三、课题分析:
对一个有N个学生的班级,每个学生有M门课程。
该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。
功能要求:
(1)本系统采用一个结构体数组,每个数据的结构应当包括:
学号、姓名、M门课程名称。
(2)本系统显示这样的菜单:
请选择系统功能项:
a、成绩录入
b、成绩显示
c、成绩保存
d、成绩排序
e、成绩修改(要求先输入密码)
f、成绩统计
1)显示每门课程成绩最高的学生的基本信息
2)显示每门课程的平均成绩
3)显示超过某门课程平均成绩的学生人数
g、退出系统
(3)执行一个具体的功能之后,程序将重新显示菜单。
(4)将学生成绩保存到文件中。
四、具体设计过程:
4.1、定义数据结构及相关解释
1)在《班级成绩管理系统》中,各模块功能系统之间构成的数据结构关系为非线性数据结构的树结构。
2)树结构:
每一个结点只有一个前件,称为父结点。
没有前件的结点只有一个,称为树的根结点,简称树的根。
在《班级成绩管理系统》中的数据结构图中“成绩管理程序”为根;在树结构中,每一个结点都可以有多个后件,他们都称为该结点的子结点,没有后件的结点称为叶子。
例如,在《班级成绩管理系统》中的数据结构图中“查看数据”、“通过比较学号来插入数据”、“通过姓名查找查看数据”、“通过姓名查找来更新数据”、“保留数据”以及求各学科的“平均分、最高分、最低分”为“学生成绩管理系统”的子结点,也是该树结构的叶子。
4.2、软件的模块划分
根据对《班级成绩管理系统》功能分析的情况,可将《班级成绩管理系统》做如下模块划分:
1)main()主函数---班级成绩管理系统程序主函数;
2)print() 打印函数---设置班级成绩管理系统界面;
3)cin() 数据输入函数---数据多格式输入;
4)cindata() 其他数据继续输入函数;
5)lookdata() 查看数据函数---查看已保存的数据;
6)insert()插入数据的函数---通过比较学号来插入数据;
7)find() 查看数据的函数---通过姓名查找查看数据;
8)update() 更新数据的函数---姓名查找来更新数据;
9)save()保留数据函数---储存处理后的数据;
10)caverage(); 求各学生语文平均分、最高和最低分成绩的函数;
11)maverage();求各学生数学平均分、最高和最低分成绩的函数;
12)eaverage(); 求各学生英语平均分、最高和最低分成绩的函数;
13)comaverage(); 求各学生计算机平均分、最高和最低分成绩的函数
注:
(2)—(13)为自定义功能函数,通过main()主函数调用实现其功能。
4.3、程序流程设计
根据《班级成绩管理系统》功能分析绘制流程图:
注:
其他功能的流程图可参照“其他数据输入”的流程图绘制。
4.4、各功能模块编写内容详细情况及调试
1)数据类型的定义。
在定义数据类型时,由于班级成绩管理信息需要由不同类型的数据反映出来。
如:
姓名、性别都需要用char型数据,而学号和成绩则需要用int型数据,并且每位同学的以上信息都需要一次性输入,所以采用结构体类型定义。
如:
typedefstructstudent/*定义结构体*/
{
charname[MAX]; --------------------定义char型姓名
intnum[MAX]; --------------------定义int型学号
charsex[MAX]; --------------------定义char型性别
intchinese; --------------------定义int型语文成绩
intmathematic; --------------------定义int型数学成绩
intenglish; --------------------定义int型英语成绩
intcomputer; --------------------定义int型计算机成绩
structstudent*next; --------------------结构体指针
}stu;
说明:
在定义结构体类型和变量时,可采用先定义结构体类型再定义结构提变量,也可同时定义结构体类型和变量,还可以直接定义结构提变量。
上例中的定义方式为同时定义结构体的类型和变量。
结构体定义的格式如下:
struct[结构体名]
{
类型标识符成员名;
};
2)函数的命名和库函数的使用。
A.函数命名是遵循标识符的命名规则,并且要尽量做到顾名思义的效果。
如:
lookdata()为查看数据函数。
B.库函数使用时要提前声明(#include
C.函数调用时要注意形参和实参数据类型的对应。
3)函数结构和功能实现。
A.数据输入函数“cin()”
B.查看数据函数“lookdata()”
C.插入数据的函数“insert()”
D.查看数据的函数“find()”
E.更新数据的函数“update()”
F.保留数据函数“save()”
注:
以上的六个功能函数为《班级成绩管理系统》的输入、读取、修改等主要功能函数,其中主要运用字符串比较,定义指针变量,输入输出等多种函数和操作实现其对外界输入内容进行处理功能以及防止出错的备份功能。
G.管理系统中的各个模块函数的功能实现基本都依靠与以上三中函数类似的编辑方法编写。
主要通过以下结构实现对应功能。
for循环结构——对使用者输入内容与内部资料内容进行核对。
switch选择结构——对使用者所选择的项目进行判断并调用对应的函数。
if-else选择结构——配合for循环核对内容的正确与否选择对应的操作。
while、do-while循环结构——条件判断并进行对应的操作。
H.具体功能函数源程序的编辑内容见后文的《班级成绩管理系统》源程序。
4.5、源程序内容及调试结果
1)源程序(原始密码是175844):
#include"stdio.h"
2)#include"stddef.h"
3)#include"stddef.h"
4)#include"string.h"
5)#defineMAX10
6)typedefstructstudent{/*定义结构体*/
7)charname[MAX];/*姓名*/
8)intnum[MAX];/*学号*/
9)charsex[MAX];/*性别*/
10)intchinese;/*语文*/
11)intmathematic;/*数学*/
12)intenglish;/*英语*/
13)intcomputer;/*计算机*/
14)structstudent*next;/*结构体指针*/
15)}stu;
16)stu*head;/*头指针*/
17)voidprint()/*显示或打印函数*/
18){
19)system("cls");/*运行前清屏*/
20)printf("\t\t****Students'GradeManagementSystem****\n");/*成绩管理系统*/
21)printf("\t\t\t<1>EnterRecord\t\n");/*输入数据*/
22)printf("\t\t\t<2>Display\t\n");/*显示*/
23)printf("\t\t\t<3>Insert\t\n");/*插入数据*/
24)printf("\t\t\t<4>Quest\t\n");/*访问数据*/
25)printf("\t\t\t<5>Update\t\n");/*以前数据*/
26)printf("\t\t\t<6>Save\t\n");/*保留数据*/
27)printf("\t\t\t<7>Fresh\t\n");/*更新数据*/
28)printf("\t\t\t<8>ChineseAverage\t\n");/*语文平均成绩*/
29)printf("\t\t\t<9>MathAverage\t\n");/*数学平均成绩*/
30)printf("\t\t\t<10>EnglishAverage\t\n");/*英语平均成绩*/
31)printf("\t\t\t<11>ComputerAverage\t\n");/*计算机平均成绩*/
32)printf("\t\t\t<12>BACKTOMENU\t\n");/*返回主菜单*/
33)printf("\t\t\t<13>Quit\t\n");/*退出*/
34)
35)printf("\t\t*****************************************\n");
36)printf("\t\t\tGiveyourChoice(1-13):
");
37)
38)
39)}
40)voidcin(stu*p1)/*输入相关数据的函数*/
41){printf("Entername:
\n");
42)scanf("%s",&p1->name);
43)printf("Enternum:
\n");
44)scanf("%d",&p1->num);
45)printf("Entersex:
\n");
46)scanf("%s",&p1->sex);
47)printf("Enterscore:
\n");
48)printf("Enterchinese:
\n");
49)scanf("%d",&p1->chinese);
50)printf("Entermath:
\n");
51)scanf("%d",&p1->mathematic);
52)printf("EnterEnglish:
\n");
53)scanf("%d",&p1->english);
54)printf("EnterComputer:
\n");
55)scanf("%d",&p1->computer);
56)}
57)stu*cindata()/*其他数据是否继续输入的函数*/
58){stu*p1,*p2;
59)inti=1;
60)charch;
61)p1=(stu*)malloc(sizeof(stu));
62)head=p1;
63)while(i)
64){
65)cin(p1);
66)printf("DoyouWanttoContinue?
yesorno:
");/*是否继续输入数据*/
67)ch=getchar();
68)ch=getchar();
69)if(ch=='n'||ch=='N')
70){i=0;
71)p1->next=NULL;
72)print();
73)
74)
75)}
76)else
77){p2=p1;
78)p1=(stu*)malloc(sizeof(stu));
79)p2->next=p1;
80)}
81)}
82)return(p1->next);
83)}
84)stu*lookdata(stu*p1)/*查看数据的函数*/
85){
86)while(p1!
=NULL)
87){printf("Num:
%d\t",p1->num);
88)printf("Name:
%s\t",p1->name);
89)printf("Sex:
%s\t",p1->sex);
90)printf("\n");
91)printf("Chinese:
%d\t",p1->chinese);
92)printf("Math:
%d\t",p1->mathematic);
93)printf("English:
%d\t",p1->english);
94)printf("Computer:
%d\t",p1->computer);
95)printf("\n");
96)p1=p1->next;
97)}
98)returnp1;
99)}
100)
101)voidinsert()/*通过比较学号来插入数据的函数*/
102){stu*p1,*p3,*p2;
103)charch;
104)p1=head;
105)p3=(stu*)malloc(sizeof(stu));
106)p3->next=NULL;
107)if(head==NULL){head=p3;return;}
108)cin(p3);
109)while(p1!
=NULL&&(p1->num
110){p2=p1;p1=p1->next;}
111)if(p2==head){p3->next=head;head=p3;return;}
112)p3->next=p1;
113)p2->next=p3;
114)
115)}
116)
117)find(stu*p2)/*通过姓名查找查看数据的函数*/
118){charname[20];
119)intb=0;
120)printf("Enterthenameofthestudentyouwanttofind:
");/*通过姓名查看*/
121)scanf("%s",name);
122)while(p2!
=NULL)
123){if(strcmp(name,p2->name)==0)
124){
125)printf("Thedatayouwanthasbefound\n");
126)printf("Name:
%s\t",p2->name);
127)printf("Num:
%d\t",p2->num);
128)printf("sex%s\t",p2->sex);
129)printf("\n");
130)printf("Chinese:
%d\t",p2->chinese);
131)printf("Math:
%d\t",p2->mathematic);
132)printf("English:
%d\t",p2->english);
133)printf("Computer:
%d\t",p2->computer);
134)printf("\n");
135)b=1;
136)}
137)elseif(b==0)
138)printf("sorrynotfinddata!
");
139)p2=p2->next;
140)}
141)if(b==1)
142){
143)print();
144)printf("Findone\n");}
145)else
146){print();
147)printf("Notfind\n");
148)}
149)}
150)
151)voidcaverage()/*求各学生语文平均分、最高和最低分成绩的函数*/
152){stu*p1;
153)inti;
154)floatmax=0.0,min=200.0;
155)floatsum=0.0,aver=0;
156)p1=head;
157)if(p1==NULL)
158)printf("notdata!
");
159)else
160){for(i=0;p1!
=NULL;i++,p1=p1->next)
161)sum+=p1->chinese;
162)aver=sum/i;
163)p1=head;
164)for(i=0;p1!
=NULL;i++,p1=p1->next)
165){if(max
166)max=p1->chinese;
167)}
168)p1=head;
169)for(i=0;p1!
=NULL;i++,p1=p1->next)
170)if(min>p1->chinese)
171)min=p1->chinese;
172)}
173)printf("ChineseAverage:
%f",aver);
174)printf("ChineseMax:
%f",max);
175)printf("ChineseMin:
%f",min);
176)}
177)voidmaverage()/*求各学生数学平均分、最高和最低分成绩的函数*/
178){stu*p1;
179)inti;
180)floatmax=0.0,min=200.0;
181)floatsum=0.0,aver=0;
182)p1=head;
183)if(p1==NULL)
184)printf("notdata!
");
185)else
186){for(i=0;p1!
=NULL;i++,p1=p1->next)
187)sum+=p1->mathematic;
188)aver=sum/i;
189)p1=head;
190)for(i=0;p1!
=NULL;i++,p1=p1->next)
191){if(max
192)max=p1->mathematic;
193)}
194)p1=head;
195)for(i=0;p1!
=NULL;i++,p1=p1->next)
196)if(min>p1->mathematic)
197)min=p1->mathematic;
198)}
199)printf("MatheAverage:
%f",aver);
200)printf("MatheMax:
%f",max);
201)printf("MatheMin:
%f",min);
202)}
203)
204)voideaverage()/*求各学生英语平均分、最高和最低分成绩的函数*/
205){stu*p1;
206)inti;
207)floatmax=0.0,min=200.0;
208)floatsum=0.0,aver=0;
209)p1=head;
210)if(p1==NULL)
211)printf("notdata!
");
212)else
213){for(i=0;p1!
=NULL;i++,p1=p1->next)
214)sum+=p1->english;
215)aver=sum/i;
216)p1=head;
217)for(i=0;p1!
=NULL;i++,p1=p1->next)
218){if(max
219)max=p1->english;
220)}
221)p1=head;
222)for(i=0;p1!
=NULL;i++,p1=p1->next)
223)if(min>p1->english)
224)min=p1->english;
225)}
226)printf("EnglishAverage:
%f",aver);
227)printf("EnglishMax:
%f",max);
228)printf("EnglishMin:
%f",min);
229)}
230)
231)voidcomaverage()/*求各学生计算机平均分、最高和最低分成绩的函数*/
232){stu*p1;
233)inti;
234)floatmax=0.0,min=200.0;
235)floatsum=0.0,aver=0;
236)p1=head;
237)if(p1==NULL)
238)printf("notdata!
");
239)else
240){for(i=0;p1!
=NULL;i++,p1=p1->next)
241)sum+=p1->computer;
242)aver=sum/i;
2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 班级成绩管理系统 班级 成绩管理系统 语言 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)