成绩管理系统V60.docx

上传人:b****6 文档编号:7801105 上传时间:2023-01-26 格式:DOCX 页数:25 大小:224.56KB
下载 相关 举报
成绩管理系统V60.docx_第1页
第1页 / 共25页
成绩管理系统V60.docx_第2页
第2页 / 共25页
成绩管理系统V60.docx_第3页
第3页 / 共25页
成绩管理系统V60.docx_第4页
第4页 / 共25页
成绩管理系统V60.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

成绩管理系统V60.docx

《成绩管理系统V60.docx》由会员分享,可在线阅读,更多相关《成绩管理系统V60.docx(25页珍藏版)》请在冰豆网上搜索。

成绩管理系统V60.docx

成绩管理系统V60

HarbinInstituteofTechnology

C语言实验大作业

课程名称:

C语言程序设计

报告类型:

程序设计报告

实验题目:

学生成绩管理系统v6.0

实验类型:

(综合设计型/创新研究型)

所在院系:

航天学院电子信息类

学生类别:

本科生

指导教师:

郭萍

学生姓名:

王福海

班级和学号:

电子信息五班1162100527

实验时间:

2017.5.20

成绩评定:

哈尔滨工业大学

1实验目的

将教材中所包含的内容系统化考察,考察一维、二维数组,函数的调用,排序、查找、统计分析等常用算法,指针,动态数组以及结构体的应用。

2实验内容和要求

1.实验内容

学生成绩管理系统V6.0。

某班有最多不超过30人(具体人数由键盘输入)参加最多不超过六门的考试(具体门数由键盘输入),定义结构体类型,用结构体数组作函数参数,编程实现学生成绩的管理。

2.实验要求

采用自顶向下、逐步求精的模块化设计思想设计小型数据库管理系统,对学生成绩进行管理。

要求按系统的需求分析、系统设计(总体设计、各个模块的设计)、系统实现(各个模块的实现)、系统测试等过程组织报告内容,说明采用了什么数据结构和算法,遇到哪些问题,这些问题是如何解决的,本设计的亮点和难点在哪里,实验结果如何,有哪些收获和学习体会。

3.系统功能需求分析

本系统主要实现下面的功能:

(1)录入每个学生的学号和考试成绩;

(2)计算每门课程的总分和平均分;

(3)计算每个学生的总分和平均分;

(4)按成绩由高到低排出名次表;

(5)按成绩由低到高排出名次表;

(6)按学号由小到大排出成绩表;

(7)按姓名字典的排序排出成绩表;

(8)按学号查询学生排名及其考试成绩;

(9)按姓名查询学生排名及其考试成绩;

(10)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数以及所占的百分比;

(11)输出每个学生学号姓名各科成绩及每门考试的总分平均分;

(12)将每个学生信息写入文件;

(13)从文件中读取每个学生信息并显示;

4.实验环境

采用win10操作系统,使用软件Dev-c++。

 

3系统设计

1.系统功能模块划分

 

2.主要算法

排序:

进行学生成绩的排序从而出现排名表

查找:

通过多种方式如学号,姓名查找特定学生的成绩

3.数据结构

退出

用户输入指令

 

4.各模块(函数)的功能和接口设计:

序号

函数名

函数功能

函数参数

1

Menu

显示菜单获得输入的选项

2

Readscore

录入学生信息

STUstu[],m,n

3

Aversumofeverystudent

计算每个学生总成绩平均值

STUstu[],m,n

4

Aversumofeverycourse

计算每门课程总成绩平均成绩

STUstu[],m,n

5

Sortbyscore

按成绩排序

STUstu[],m,n

6

Ascending

升序

floata,b

7

Descending

降序

floata,b

8

Assortbynum

按学号排序

STUstu[],m,n

9

Sortbyname

按姓名排序

STUstu[],m,n

10

Searchbynum

按学号查询学生信息

STUstu[],m,n

11

Searchbyname

按姓名查询学生信息

STUstu[],m,n

12

StatisticAnlysis(STUstu[],intn,intm)

分析学生成绩五个分数段所占百分比

STUstu[],m,n

13

PrintScore

打印输出学生成绩

STUstu[],m,n

14

WritetoFile

写入程序D盘student.txt

STUstu[],m,n

15

ReadfromFile

读取文件

STUstu[],m,n

4系统实现

1.系统的总流程图:

显示菜单——>输入用户的选择——>根据用户的输入选择不同的操作

case1:

Readscore(stu,n,m);

break;

case2:

Aversumofeverystudent(stu,n,m);

break;

case3:

Aversumofeverycourse(stu,n,m);

break;

case4:

Sortbyscore(stu,n,m,Descending);

printf("\n成绩降序排序\n");

Printscore(stu,n,m);

break;

case5:

Sortbyscore(stu,n,m,Ascending);

printf("\n成绩升序排序\n");

Printscore(stu,n,m);

break;

case6:

Assortbynum(stu,n,m);

printf("\n学号升序排序\n");

Printscore(stu,n,m);

break;

case7:

Sortbyname(stu,n,m);

printf("\n姓名升序排序\n");

Printscore(stu,n,m);

break;

case8:

Searchbynum(stu,n,m);

break;

case9:

Searchbyname(stu,n,m);

break;

case10:

StatisticAnlysis(stu,n,m);

break;

case11:

Printscore(stu,n,m);

break;

case12:

Writetofile(stu,n,m);

break;

case13:

Readfromfile(stu,&n,&m);

break;

case0:

printf("Endofprogram!

\n");

exit(0);

2.程序的全部源代码:

1#include

2#include

3#include

4typedefstructstudent

5{

6longnum;

7charname[10];

8floatscore[6];

9floatsum;

10floataver;

11}STU;

12intMenu(void);

13voidReadScore(STUstu[],intn,intm);

14voidAverSumofEveryStudent(STUstu[],intn,intm);

15voidAverSumofEveryCourse(STUstu[],intn,intm);

16voidSortbyScore(STUstu[],intn,intm,int(*compare)(floata,floatb));

17intAscending(floata,floatb);

18intDescending(floata,floatb);

19voidSwapFloat(float*x,float*y);

20voidSwapLong(long*x,long*y);

21voidSwapChar(charx[],chary[]);

22voidAsSortbyNum(STUstu[],intn,intm);

23voidSortbyName(STUstu[],intn,intm);

24voidSearchbyNum(STUstu[],intn,intm);

25voidSearchbyName(STUstu[],intn,intm);

26voidStatisticAnalysis(STUstu[],intn,intm);

27voidPrintScore(STUstu[],intn,intm);

28voidWritetoFile(STUstu[],intn,intm);

29voidReadfromFile(STUstu[],int*n,int*m);

30intmain()

31{

32charch;

33intn=0,m=0;

34

35STUstu[30];

36

37printf("Inputstudentnumber:

(lessthan30)\n");

38scanf("%d",&n);

39

40printf("Inputcoursenumber:

(lessthan6)\n");

41scanf("%d",&m);

42

43while

(1)

44{

45ch=Menu();

46switch(ch)

47{

48case1:

ReadScore(stu,n,m);

49break;

50case2:

AverSumofEveryCourse(stu,n,m);

51break;

52case3:

AverSumofEveryStudent(stu,n,m);

53break;

54case4:

SortbyScore(stu,n,m,Descending);

55printf("\nSortindescendingorderbyscore:

\n");

56PrintScore(stu,n,m);

57break;

58case5:

SortbyScore(stu,n,m,Ascending);

59printf("\nSortinascendingorderbyscore:

\n");

60PrintScore(stu,n,m);

61break;

62case6:

AsSortbyNum(stu,n,m);

63printf("\nSortinascendingorderbynumber:

\n");

64PrintScore(stu,n,m);

65break;

66case7:

SortbyName(stu,n,m);

67printf("\nSortindictionaryorderbyname:

\n");

68PrintScore(stu,n,m);

69break;

70case8:

SearchbyNum(stu,n,m);

71break;

72case9:

SearchbyName(stu,n,m);

73break;

74case10:

StatisticAnalysis(stu,n,m);

75break;

76case11:

PrintScore(stu,n,m);

77break;

78case12:

WritetoFile(stu,n,m);

79break;

80case13:

ReadfromFile(stu,&n,&m);

81break;

82case0:

printf("Endofprogram!

\n");

83exit(0);

84

85default:

printf("Inputerror!

\n");

86}

87}

88return0;

89}

90/*Menu:

显示菜单并获得用户键盘输入的选项*/

91intMenu(void)

92{

93inta;

94

95printf("ManagementforStudents'scores\n");

96printf("1.Inputrecord\n");

97printf("2.Caculatetotalandaveragescoreofeverycourse\n");

98printf("3.Caculatetotalandaveragescoreofeverystudent\n");

99printf("4.Sortindescendingorderbyscore\n");

100printf("5.Sortinascendingorderbyscore\n");

101printf("6.Sortinascendingorderbynumber\n");

102printf("7.Sortindictionaryorderbyname\n");

103printf("8.Searchbynumber\n");

104printf("9.Searchbyname\n");

105printf("10.Statisticanalysis\n");

106printf("11.Listrecord\n");

107printf("12.Writetoafile\n");

108printf("13.Readfromafile\n");

109printf("0.Exit\n");

110printf("PleaseInputyourchoice:

");

111

112scanf("%d",&a);

113

114returna;

115

116}

117/*input:

输入每个学生每门课的成绩*/

118voidReadScore(STUstu[],intn,intm)

119{

120inti,j,k;

121

122printf("Inputstudent'sID,nameandscore:

\n");

123

124for(i=0;i

125{

126

127scanf("%ld%s",&stu[i].num,stu[i].name);

128

129for(j=0;j

130{

131scanf("%f",&stu[i].score[j]);

132}

133

134}

135}

136/*AverSumofEveryStudent:

计算每个学生每门课的总分和平均分*/

137voidAverSumofEveryStudent(STUstu[],intn,intm)

138{

139inti,j;

140

141for(i=0;i

142{

143stu[i].sum=0;

144

145for(j=0;j

146{

147stu[i].sum=stu[i].sum+stu[i].score[j];

148}

149

150stu[i].aver=m>0?

stu[i].sum/m:

-1;

151

152printf("student%d:

sum=%.0f,aver=%.0f\n",i+1,stu[i].sum,stu[i].aver);

153}

154}

155/*AverSumofEveryCourse:

计算每门课程的总分和平均分*/

156voidAverSumofEveryCourse(STUstu[],intn,intm)

157{

158inti,j;

159floatsum[6],aver[6];

160

161for(j=0;j

162{

163sum[j]=0;

164

165for(i=0;i

166{

167sum[j]=sum[j]+stu[i].score[j];

168}

169

170aver[j]=n>0?

sum[j]/n:

-1;

171

172printf("course%d:

sum=%.0f,aver=%.0f\n",j+1,sum[j],aver[j]);

173}

174}

175/*SortbyScore:

将每个学生按总成绩排序*/

176voidSortbyScore(STUstu[],intn,intm,int(*compare)(floata,floatb))

177{

178inti,j,k,t;

179

180for(i=0;i

181{

182k=i;

183

184for(j=i+1;j

185{

186if((*compare)(stu[j].sum,stu[k].sum))

187k=j;

188}

189

190if(k!

=i)

191{

192for(t=0;t

193{

194SwapFloat(&stu[k].score[t],&stu[i].score[t]);

195}

196

197SwapFloat(&stu[k].sum,&stu[i].sum);

198SwapFloat(&stu[k].aver,&stu[i].aver);

199SwapLong(&stu[k].num,&stu[i].num);

200SwapChar(stu[k].name,stu[i].name);

201}

202}

203}

204/*Ascending:

按照升序*/

205intAscending(floata,floatb)

206{

207returna

208}

209/*Descending:

按照降序*/

210intDescending(floata,floatb)

211{

212returna>b;

213}

214/*SwapFloat:

交换单精度浮点型数据*/

215voidSwapFloat(float*x,float*y)

216{

217floattemp;

218

219temp=*x;

220*x=*y;

221*y=temp;

222}

223/*SwapLong交换长整形数据*/

224voidSwapLong(long*x,long*y)

225{

226longtemp;

227

228temp=*x;

229*x=*y;

230*y=temp;

231}

232/*SwapChar交换字符型数据*/

233voidSwapChar(charx[],chary[])

234{

235chartemp[10];

236

237strcpy(temp,x);

238strcpy(x,y);

239strcpy(y,temp);

240}

241/*AsSortbyNum:

将学生按照学号顺序排列*/

242voidAsSortbyNum(STUstu[],intn,intm)

243{

244inti,j,k,t;

245

246for(i=0;i

247{

248k=i;

249for(j=i+1;j

250{

251if(stu[j].num

252k=j;

253}

254if(k!

=i)

255{

256for(t=0;t

257{

258SwapFloat(&stu[k].sum,&stu[i].sum);

259}

260

261SwapFloat(&stu[k].sum,&stu[i].sum);

262SwapFloat(&stu[k].aver,&stu[i].aver);

263SwapLong(&stu[k].num,&stu[i].num);

264SwapChar(stu[k].name,stu[i].name);

265}

266}

267}

268/*SortbyName:

将学生按照字典顺序排列*/

269voidSortbyName(STUstu[],intn,intm)

270{

271inti,j,t;

272

273for(i=0;i

274{

275for(j=i+1;j

276{

277if(strcmp(stu[j].name,stu[i].name)<0)

278{

279for(t=0;t

280{

281SwapFloat(&stu[i].score[t],&stu[j].score[t]);

282}

283

284SwapFloat(&stu[i].sum,&stu[j].sum);

285SwapFloat(&stu[i].aver,&stu[j].aver);

286SwapLong(&stu[i].num,&stu[j].num);

287SwapChar(stu[i].name,stu[j].name);

288}

289}

290}

291}

292/*SearchbyNum:

按学号查找并打印学生成绩*/

293voidSearchbyNum(STUstu[],intn,intm)

294{

295longnumber;

296inti,j;

297

298printf("Inputthenumberyouwanttosearch");

299scanf("%ld",&number);

300

301for(i=0;i

302{

303if(stu[i].num==number)

304{

305printf("%ld\t%s\t",stu[i].num,stu[i].name);

306

307for(j=0;j

308{

3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1