《c语言课程设计——学生成绩系统.doc》由会员分享,可在线阅读,更多相关《c语言课程设计——学生成绩系统.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-作者xxxx-日期xxxxC语言课程设计 学生成绩管理系统【精品文档】内蒙古科技大学本科生课程设计说明书题 目:C语言课程设计 学生成绩管理系统学生姓名:郭*学 号:1567111215专 业:计算机科学与技术班 级:计科-2指导教师:刘立新日 期:2015年 12月25日【精品文档】内蒙古科技大学课程设计任务书课程名称C语言课程设计设计题目学生成绩管理系统指导教师刘立新时间一、教学要求1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力二、设
2、计资料及参数每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。某班学生成绩管理,包括以下功能:v 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里v 打开文件后,计算每个人的总分和平均分,排序并保存v 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录)v 具有插入、删除和修改功能v 具有输出文件数据信息的功能三、设计要求及成果1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)2. 写出详细设计说明(至少包括功能实现分析和模块流程图)3. 编写程序代码,调试程序使其能正确运
3、行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少500行代码,不包括注释和花括号)4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告(请严格按照模板进行排版)四、进度安排第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。六、建议参考资料1C语言程序设计,谭浩强,清华大学出版社2C语言程序设计课程
4、设计,刘振安,机械工业出版社目 录内蒙古科技大学课程设计任务书I第一章 需求分析3引言3任务概述3数据描述3功能需求3性能需求3运行需求4任务计划4第二章概要设计4总体设计4数据类型设计(或数据结构设计)5接口设计 /函数声明5运行界面设计6第三章详细设计7输入模块设计7输出模块设计7查找模块设计8排序模块设计8保存及读取模块设计9第四章测试分析10测试程序执行情况10第五章课程设计总结14附录:程序代码15参考文献32致谢32第一章 需求分析1.1 引言因学校中学生信息庞大,复杂,为了方便教师们管理学生信息,特编写了一个学生成绩管理系统。1.2 任务概述1. 目标本学生成绩管理系统主要是为学
5、校里的老师提供一个管理学生信息的平台。根据系统界面的提示信息对学生信息进行添加、浏览、修改、保存等操作。Windows系统3. 用户特点懂得一些基本的电脑操作即可。4. 条件限制计算机一台1.3 数据描述系统的数据类型有:整型int,实型float,字符型char,结构体struct;自己定义的数据类型有:STU;1.4 功能需求v 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里v 打开文件后,计算每个人的总分和平均分,排序并保存v 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录)v 具有插入、删除和修改功能具有输出文件数据信息的功能1
6、.5 性能需求无1.6 运行需求1. 硬件环境普通的计算机2. 软件环境支持的操作系统包括windows98/xp及及以上版本1.7 任务计划本系统共分为一个主页面模块(主函数部分),五个功能模块(功能函数)分别为增加学生成绩信息、查看学生成绩信息、修改学生成绩信息、对学生信息进行排序、退出。设计时要先写好主函数、定义好全局变量和功能函数,再对五个功能函数进行设计。在每个功能函数和主函数应加入控制条件使用户可以随时退出系统,并在用户输入指令错误的时候给予提醒和退出选项。第二章 概要设计2.1 总体设计 程序运行 退出 排序 修改 浏览 添加2.2 数据类型设计(或数据结构设计)typedef
7、struct student/定义结构体 long ID;/学生学号 char nameMAX_LEN;/学生姓名 float scoreCOURSE_NUM;/学生成绩 float sum;/总分 float aver;/平均分STU;对学生信息采用一个结构体变量,使学生信息的管理更加灵活方便2.3 接口设计 函数名函数格式 /即函数首部函数功能menuint主菜单sum_stuint求和return_IDint通过学号返回数组下标return_nameint通过姓名返回数组下标Search_Namevoid按姓名查找Search_IDvoid按学号查找scorefencevoid信息栏wr
8、itefilevoid写入文件readfromfilevoid读出文件modifymenuvoid修改菜单modifyscorevoid修改成绩delete_stuvoid删除学生sortmenuvoid排序菜单sort_IDvoid按学号排序sort_scorevoid按成绩排序sort_avervoid按平均分排序sort_sumvoid按总分排序readscorevoid读取信息printscorevoid输出信息searchmenuvoid搜索菜单2.4 运行界面设计 首页 查询界面第三章 详细设计3.1 输入模块设计 开始输入学生个数输入学生信息 成功 返回菜单3.2 输出模块设计
9、开始 输出信息 返回菜单3.3 查找模块设计 开始 选择查找方式 按姓名查找 按学号查找 学生信息返回菜单排序模块设计 开始 选择排序方式按总分数排序按成绩排序按学号排序 学生信息3.5 保存及读取模块设计开始程序使用、修改信息保存创建或读取文件退出程序第四章 测试分析4.1 测试程序执行情况 主菜单 添加信息 查看学生信息 修改学生信息 查询出错 查询结果 排序结果第五章 课程设计总结通过此次课程设计,使我更加扎实的掌握了有关C语言方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,
10、通过亲自动手编写,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获龋最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!附录:程序代码1. #include 2.
11、#include 3. #include 4. #include 5. #define MAX_LEN 106. #define STU_NUM 307. #define COURSE_NUM 58. int num=0;9. typedef struct student/定义结构体10. 11. long ID;12. char nameMAX_LEN;13. float scoreCOURSE_NUM;14. float sum;15. float aver;16. STU;17. int menu(void);/主菜单18. int sum_stu(STU stu);/ 求和19. in
12、t return_ID(STU stu,long ID);/通过学号返回数组下标20. int return_name(STU stu,char name);/通过姓名返回数组下标21. void Search_Name(STU stu);/按姓名查找22. void Search_ID(STU stu);/按学号查找23. void scorefence();/信息栏24. void writefile(STU stu);/写入文件25. void readfromfile(STU stu);/读出文件26. void modifymenu(STU stu,int i);/修改菜单27. v
13、oid modifyscore(STU stu,int i);/修改成绩28. void delete_stu(STU stu,int i);/删除学生29. void sortmenu(STU stu);/排序菜单30. void sort_ID(STU stu);/按学号排序31. void sort_score(STU stu,int m);/按成绩排序32. void sort_aver(STU stu);/按平均分排序33. void sort_sum(STU stu);/按总分排序34. void readscore(STU stu,int n);/ 读取信息35. void pr
14、intscore(STU stu,int n);/ 输出信息36. void searchmenu(STU stu);/ 搜索菜单37. int main()38. 39. int n;40. char ch;41. STU stuSTU_NUM;42. readfromfile(stu);43. while (1)44. 45. ch = menu();46. switch(ch)47. 48. case 1:49. system(cls);50. printf(n -添加学生信息-n);51. printf(输入学生的个数:n);52. scanf(%d,&n);53. readscore
15、(stu,n);54. break;55. case 2:56. system(cls);57. printf(n -查看学生信息-nn);58. printscore(stu,num);59. break;60. case 3:61. system(cls);62. printf(n-修改学生信息-n);63. searchmenu(stu);64. break;65. case 4:66. system(cls);67. printf(n-排序-n);68. sortmenu(stu);69. break;70. case 5:71. printf(程序结束!n);72. exit(0);
16、73. default:74. printf(输入错误!请重新输入n);75. Sleep(1000);76. system(cls);77. 78. writefile(stu);79. 80. return 0;81. 82. int menu()/主菜单83. 84. int ch;85. printf(n - 学生成绩管理系统-n);86. printf( 1. 增加学生成绩信息n);87. printf( 2. 查看学生成绩信息n);88. printf( 3. 修改学生成绩信息n);89. printf( 4. 对学生信息进行排序n);90. printf( 5. 退出n);91.
17、 printf(n -n);92. printf(请选择(1-5):);93. scanf(%d,&ch);94. return ch;95. 96. void readscore(STU stu,int n)/ 读取信息97. 98. int j,a;99. a=num;100. printf(n);101. printf(输入学生的学号、姓名、成绩n);102. printf(例如:1567111111 王小明 99 88 77 44 100n);103. printf(n);104. while(numa+n)105. 106. scanf(%ld %s,&stunum.ID,stunu
18、m.name);107. for(j=0;jCOURSE_NUM;j+)108. 109. scanf( %f,&stunum.scorej);110. 111. stunum.sum=sum_stu(stu);112. stunum.aver=stunum.sum/COURSE_NUM;113. num+;114. 115. getchar();116. if(num!=0)117. 118. printf(n添加完成!n);119. 120. else121. 122. printf(n添加失败!n);123. 124. printf(回车返回主菜单n);125. getchar();12
19、6. system(cls);127. 128. void printscore(STU stu,int num)/ 输出信息129. 130. int i,j;131. scorefence();132. for(i=0;inum;i+)133. 134. printf(%5d ,i+1);135. printf(%10ld%10s,stui.ID,stui.name);136. for(j=0;jCOURSE_NUM;j+)137. 138. printf(%9.2f,stui.scorej);139. 140. printf(%8.2f%8.2fn,stui.aver,stui.sum)
20、;141. 142. getchar();143. printf(n回车返回主菜单n);144. getchar();145. system(cls);146. 147. int sum_stu(STU stu)/ 求和148. 149. int i,sum;150. for(i=0;iCOURSE_NUM;i+)151. 152. sum=sum+stunum.scorei;153. 154. return sum;155. 156. void searchmenu(STU stu)/ 搜索菜单157. 158. int ch;159. printf( 1.按学号查找n);160. prin
21、tf( 2.按姓名查找n);161. printf(请选择n);162. scanf(%d,&ch);163. if(ch=1)164. 165. Search_ID(stu);166. 167. else if(ch=2)168. 169. Search_Name(stu);170. 171. getchar();172. system(cls);173. 174. void Search_Name(STU stu)/按姓名查找175. 176. char search_nameMAX_LEN,ch;177. int i,j,a;178. while(1)179. 180. printf(输
22、入你要查找的姓名:n);181. scanf(%s,search_name);182. system(cls);183. i=return_name(stu,search_name);184. if(i=-1)185. 186. printf(学生不存在!n);187. 188. else189. 190. a=i;191. printf(你要查询的学生信息为:n);192. scorefence();193. printf(%5d %10ld%10s,i,stui.ID,stui.name);194. for(j=0;jCOURSE_NUM;j+)195. 196. printf(%9.2f
23、,stui.scorej);197. 198. printf(%8.2f%8.2fn,stui.aver,stui.sum);199. modifymenu(stu,a);200. 201. printf(是否继续?(y/n);202. scanf( %c,&ch);203. if(ch=n|ch=N)204. 205. break;206. 207. 208. 209. void Search_ID(STU stu)/按学号查找210. 211. long search_ID;212. int i,j,a;213. char ch;214. while(1)215. 216. printf(
24、输入你要查找的学号:n);217. scanf(%ld,&search_ID);218. system(cls);219. i=return_ID(stu,search_ID);220. if(i=-1)221. 222. printf(学生不存在!n);223. 224. else225. 226. a=i;227. printf(你要查询的学生信息为:n);228. scorefence();229. printf(%5d %10ld%10s,i,stui.ID,stui.name);230. for(j=0;jCOURSE_NUM;j+)231. 232. printf(%9.2f,st
25、ui.scorej);233. 234. printf(%8.2f%8.2fn,stui.aver,stui.sum);235. modifymenu(stu,a);236. 237. printf(是否继续?(y/n);238. scanf( %c,&ch);239. if(ch=n|ch=N)240. 241. break;242. 243. 244. 245. void scorefence()/信息栏246. 247. int i;248. printf(%6s%10s%10s,序号,学号,姓名);249. for(i=1;i=COURSE_NUM;i+)250. 251. print
26、f(%8s,成绩);252. printf(%d,i);253. 254. printf(%8s%8sn,均分,总分);255. printf(-n);256. 257. void writefile(STU stu)/写入文件258. 259. FILE *fp;260. int i;261. if(fp=fopen(student.txt,wb)=NULL)262. 263. printf(不能打开文件!n);264. return ;265. 266. if (fwrite(&num,sizeof(int),1,fp)!=1)267. 268. printf(写入文件错误!n);269.
27、 270. for(i=0;inum;i+)271. 272. if(fwrite(&stui,sizeof(STU),1,fp)!=1)273. 274. printf(写入文件错误!n);275. 276. 277. fclose(fp);278. 279. void readfromfile(STU stu)/读出文件280. 281. FILE *fp;282. int i;283. if (fp=fopen(student.txt,rb)=NULL)284. 285. printf(不能打开文件!n);286. return;287. 288. if (fread(&num,size
28、of(int),1,fp)!=1)289. 290. num=-1;291. 292. else293. 294. for(i=0;inum;i+)295. 296. fread(&stui,sizeof(STU),1,fp);297. 298. 299. fclose(fp);300. 301. void modifymenu(STU stu,int i)/修改菜单302. 303. int ch;304. printf(n);305. printf(1.修改学号n);306. printf(2.修改姓名n);307. printf(3.修改成绩n);308. printf(4.删除n);3
29、09. scanf(%d,&ch);310. switch(ch)311. 312. case 1:313. printf(输入新学号n);314. scanf(%ld,&stui.ID);315. break;316. case 2:317. printf(输入新姓名n);318. scanf(%s,stui.name);319. break;320. case 3:321. printf(输入新成绩n);322. modifyscore(stu,i);323. break;324. case 4:325. delete_stu(stu,i);326. break;327. default:
30、328. printf(输入错误!请重新输入n);329. Sleep(1000);330. system(cls);331. 332. 333. void modifyscore(STU stu,int i)/修改成绩334. 335. int j;336. for(j=0;jCOURSE_NUM;j+)337. 338. scanf( %f,&stui.scorej);339. 340. for(j=0,stui.sum=0;jCOURSE_NUM;j+)341. 342. stui.sum=stui.sum+stui.scorej;343. 344. stui.aver=stui.sum
31、/COURSE_NUM;345. 346. void delete_stu(STU stu,int i)/删除学生347. 348. for (i;inum-1;i+)349. 350. stui=stui+1;351. 352. num-;353. 354. void sortmenu(STU stu)/排序菜单355. 356. int ch;357. printf(选择排序的方式n);358. printf(1.按学号排序n);359. printf(2.按科目1排序n);360. printf(3.按科目2排序n);361. printf(4.按科目3排序n);362. printf(
32、5.按科目4排序n);363. printf(6.按科目5排序n);364. printf(7.按均分排序n);365. printf(8.按总分排序n);366. printf(请选择:n);367. scanf(%d,&ch);368. switch(ch)369. 370. case 1:371. sort_ID(stu);372. system(cls);373. printscore(stu,num);374. break;375. case 2:376. sort_score(stu,0);377. system(cls);378. printscore(stu,num);379. break;380. case 3:381. sort_score(stu,1);382. system(cls);383. printscore(stu,num);384. break;385. case 4:386. sort_score(stu,2);387. system(