《C语言课程设计——学生成绩管理系统(24页).doc》由会员分享,可在线阅读,更多相关《C语言课程设计——学生成绩管理系统(24页).doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-C语言课程设计 学生成绩管理系统-第 21 页内蒙古科技大学本科生课程设计说明书题 目: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.5 性能需求无1.6 运行需求1.
6、 硬件环境普通的计算机2. 软件环境支持的操作系统包括windows98/xp及及以上版本1.7 任务计划本系统共分为一个主页面模块(主函数部分),五个功能模块(功能函数)分别为增加学生成绩信息、查看学生成绩信息、修改学生成绩信息、对学生信息进行排序、退出。设计时要先写好主函数、定义好全局变量和功能函数,再对五个功能函数进行设计。在每个功能函数和主函数应加入控制条件使用户可以随时退出系统,并在用户输入指令错误的时候给予提醒和退出选项。第二章 概要设计2.1 总体设计 程序运行 退出 排序 修改 浏览 添加2.2 数据类型设计(或数据结构设计)typedef struct student/定义结
7、构体 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信息栏writefilevoid写入文件rea
8、dfromfilevoid读出文件modifymenuvoid修改菜单modifyscorevoid修改成绩delete_stuvoid删除学生sortmenuvoid排序菜单sort_IDvoid按学号排序sort_scorevoid按成绩排序sort_avervoid按平均分排序sort_sumvoid按总分排序readscorevoid读取信息printscorevoid输出信息searchmenuvoid搜索菜单2.4 运行界面设计 首页 查询界面第三章 详细设计3.1 输入模块设计 开始输入学生个数输入学生信息 成功 返回菜单3.2 输出模块设计 开始 输出信息 返回菜单3.3 查找
9、模块设计 开始 选择查找方式 按姓名查找 按学号查找 学生信息返回菜单排序模块设计 开始 选择排序方式按总分数排序按成绩排序按学号排序 学生信息3.5 保存及读取模块设计开始程序使用、修改信息保存创建或读取文件退出程序第四章 测试分析4.1 测试程序执行情况 主菜单 添加信息 查看学生信息 修改学生信息 查询出错 查询结果 排序结果第五章 课程设计总结通过此次课程设计,使我更加扎实的掌握了有关C语言方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手编写,使我们掌握的知识不
10、再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获龋最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!附录:程序代码1. #include 2. #include 3. #inclu
11、de 4. #include 5. #define MAX_LEN 106. #define STU_NUM 307. #define COURSE_NUM 58. int num=0;9. typedef struct student/定义结构体10. long ID;11. char nameMAX_LEN;12. float scoreCOURSE_NUM;13. float sum;14. float aver;15. STU;16. int menu(void);/主菜单17. int sum_stu(STU stu);/ 求和18. int return_ID(STU stu,lo
12、ng ID);/通过学号返回数组下标19. int return_name(STU stu,char name);/通过姓名返回数组下标20. void Search_Name(STU stu);/按姓名查找21. void Search_ID(STU stu);/按学号查找22. void scorefence();/信息栏23. void writefile(STU stu);/写入文件24. void readfromfile(STU stu);/读出文件25. void modifymenu(STU stu,int i);/修改菜单26. void modifyscore(STU st
13、u,int i);/修改成绩27. void delete_stu(STU stu,int i);/删除学生28. void sortmenu(STU stu);/排序菜单29. void sort_ID(STU stu);/按学号排序30. void sort_score(STU stu,int m);/按成绩排序31. void sort_aver(STU stu);/按平均分排序32. void sort_sum(STU stu);/按总分排序33. void readscore(STU stu,int n);/ 读取信息34. void printscore(STU stu,int n
14、);/ 输出信息35. void searchmenu(STU stu);/ 搜索菜单36. int main()37. int n;38. char ch;39. STU stuSTU_NUM;40. readfromfile(stu);41. while (1)42. ch = menu();43. switch(ch)44. case 1:45. system(cls);46. printf(n -添加学生信息-n);47. printf(输入学生的个数:n);48. scanf(%d,&n);49. readscore(stu,n);50. break;51. case 2:52. s
15、ystem(cls);53. printf(n -查看学生信息-nn);54. printscore(stu,num);55. break;56. case 3:57. system(cls);58. printf(n-修改学生信息-n);59. searchmenu(stu);60. break;61. case 4:62. system(cls);63. printf(n-排序-n);64. sortmenu(stu);65. break;66. case 5:67. printf(程序结束!n);68. exit(0);69. default:70. printf(输入错误!请重新输入n
16、);71. Sleep(1000);72. system(cls);73. writefile(stu);74. return 0;75. int menu()/主菜单76. int ch;77. printf(n - 学生成绩管理系统-n);78. printf( 1. 增加学生成绩信息n);79. printf( 2. 查看学生成绩信息n);80. printf( 3. 修改学生成绩信息n);81. printf( 4. 对学生信息进行排序n);82. printf( 5. 退出n);83. printf(n -n);84. printf(请选择(1-5):);85. scanf(%d,&
17、ch);86. return ch;87. void readscore(STU stu,int n)/ 读取信息88. int j,a;89. a=num;90. printf(n);91. printf(输入学生的学号、姓名、成绩n);92. printf(例如:1567111111 王小明 99 88 77 44 100n);93. printf(n);94. while(numa+n)95. scanf(%ld %s,&stunum.ID,stunum.name);96. for(j=0;jCOURSE_NUM;j+)97. scanf( %f,&stunum.scorej);98.
18、stunum.sum=sum_stu(stu);99. stunum.aver=stunum.sum/COURSE_NUM;100. num+;101. getchar();102. if(num!=0)103. printf(n添加完成!n);104. else105. printf(n添加失败!n);106. printf(回车返回主菜单n);107. getchar();108. system(cls);109. void printscore(STU stu,int num)/ 输出信息110. int i,j;111. scorefence();112. for(i=0;inum;i
19、+)113. printf(%5d ,i+1);114. printf(%10ld%10s,stui.ID,stui.name);115. for(j=0;jCOURSE_NUM;j+)116. printf(%9.2f,stui.scorej);117. printf(%8.2f%8.2fn,stui.aver,stui.sum);118. getchar();119. printf(n回车返回主菜单n);120. getchar();121. system(cls);122. int sum_stu(STU stu)/ 求和123. int i,sum;124. for(i=0;iCOUR
20、SE_NUM;i+)125. sum=sum+stunum.scorei;126. return sum;127. void searchmenu(STU stu)/ 搜索菜单128. int ch;129. printf( 1.按学号查找n);130. printf( 2.按姓名查找n);131. printf(请选择n);132. scanf(%d,&ch);133. if(ch=1)134. Search_ID(stu);135. else if(ch=2)136. Search_Name(stu);137. getchar();138. system(cls);139. void Se
21、arch_Name(STU stu)/按姓名查找140. char search_nameMAX_LEN,ch;141. int i,j,a;142. while(1)143. printf(输入你要查找的姓名:n);144. scanf(%s,search_name);145. system(cls);146. i=return_name(stu,search_name);147. if(i=-1)148. printf(学生不存在!n);149. else150. a=i;151. printf(你要查询的学生信息为:n);152. scorefence();153. printf(%5d
22、 %10ld%10s,i,stui.ID,stui.name);154. for(j=0;jCOURSE_NUM;j+)155. printf(%9.2f,stui.scorej);156. printf(%8.2f%8.2fn,stui.aver,stui.sum);157. modifymenu(stu,a);158. printf(是否继续?(y/n);159. scanf( %c,&ch);160. if(ch=n|ch=N)161. break;162. void Search_ID(STU stu)/按学号查找163. long search_ID;164. int i,j,a;1
23、65. char ch;166. while(1)167. printf(输入你要查找的学号:n);168. scanf(%ld,&search_ID);169. system(cls);170. i=return_ID(stu,search_ID);171. if(i=-1)172. printf(学生不存在!n);173. else174. a=i;175. printf(你要查询的学生信息为:n);176. scorefence();177. printf(%5d %10ld%10s,i,stui.ID,stui.name);178. for(j=0;jCOURSE_NUM;j+)179
24、. printf(%9.2f,stui.scorej);180. printf(%8.2f%8.2fn,stui.aver,stui.sum);181. modifymenu(stu,a);182. printf(是否继续?(y/n);183. scanf( %c,&ch);184. if(ch=n|ch=N)185. break;186. void scorefence()/信息栏187. int i;188. printf(%6s%10s%10s,序号,学号,姓名);189. for(i=1;i=COURSE_NUM;i+)190. printf(%8s,成绩);191. printf(%
25、d,i);192. printf(%8s%8sn,均分,总分);193. printf(-n);194. void writefile(STU stu)/写入文件195. FILE *fp;196. int i;197. if(fp=fopen(student.txt,wb)=NULL)198. printf(不能打开文件!n);199. return ;200. if (fwrite(&num,sizeof(int),1,fp)!=1)201. printf(写入文件错误!n);202. for(i=0;inum;i+)203. if(fwrite(&stui,sizeof(STU),1,f
26、p)!=1)204. printf(写入文件错误!n);205. fclose(fp);206. void readfromfile(STU stu)/读出文件207. FILE *fp;208. int i;209. if (fp=fopen(student.txt,rb)=NULL)210. printf(不能打开文件!n);211. return;212. if (fread(&num,sizeof(int),1,fp)!=1)213. num=-1;214. else215. for(i=0;inum;i+)216. fread(&stui,sizeof(STU),1,fp);217.
27、 fclose(fp);218. void modifymenu(STU stu,int i)/修改菜单219. int ch;220. printf(n);221. printf(1.修改学号n);222. printf(2.修改姓名n);223. printf(3.修改成绩n);224. printf(4.删除n);225. scanf(%d,&ch);226. switch(ch)227. case 1:228. printf(输入新学号n);229. scanf(%ld,&stui.ID);230. break;231. case 2:232. printf(输入新姓名n);233.
28、scanf(%s,stui.name);234. break;235. case 3:236. printf(输入新成绩n);237. modifyscore(stu,i);238. break;239. case 4:240. delete_stu(stu,i);241. break;242. default:243. printf(输入错误!请重新输入n);244. Sleep(1000);245. system(cls);246. void modifyscore(STU stu,int i)/修改成绩247. int j;248. for(j=0;jCOURSE_NUM;j+)249.
29、 scanf( %f,&stui.scorej);250. for(j=0,stui.sum=0;jCOURSE_NUM;j+)251. stui.sum=stui.sum+stui.scorej;252. stui.aver=stui.sum/COURSE_NUM;253. void delete_stu(STU stu,int i)/删除学生254. for (i;inum-1;i+)255. stui=stui+1;256. num-;257. void sortmenu(STU stu)/排序菜单258. int ch;259. printf(选择排序的方式n);260. printf
30、(1.按学号排序n);261. printf(2.按科目1排序n);262. printf(3.按科目2排序n);263. printf(4.按科目3排序n);264. printf(5.按科目4排序n);265. printf(6.按科目5排序n);266. printf(7.按均分排序n);267. printf(8.按总分排序n);268. printf(请选择:n);269. scanf(%d,&ch);270. switch(ch)271. case 1:272. sort_ID(stu);273. system(cls);274. printscore(stu,num);275.
31、break;276. case 2:277. sort_score(stu,0);278. system(cls);279. printscore(stu,num);280. break;281. case 3:282. sort_score(stu,1);283. system(cls);284. printscore(stu,num);285. break;286. case 4:287. sort_score(stu,2);288. system(cls);289. printscore(stu,num);290. break;291. case 5:292. sort_score(st
32、u,3);293. system(cls);294. printscore(stu,num);295. break;296. case 6:297. sort_score(stu,4);298. system(cls);299. printscore(stu,num);300. break;301. case 7:302. sort_aver(stu);303. system(cls);304. printscore(stu,num);305. break;306. case 8:307. sort_sum(stu);308. system(cls);309. printscore(stu,n
33、um);310. break;311. void sort_ID(STU stu)/按学号排序312. int i,j;313. STU tmp;314. for (i=0;inum;i+)315. for (j=1;jnum-i;j+)316. if (stuj-1.IDstuj.ID)317. tmp=stuj-1;318. stuj-1=stuj;319. stuj=tmp;320. void sort_score(STU stu,int m)/按成绩排序321. int i,j;322. STU tmp;323. for (i=0;inum;i+)324. for (j=1;jnum-i;j+)325. if (stuj-1.scoremstuj.scorem)326. tmp=stuj-1;327. stuj-1=stuj;328. stuj=tmp;329. void sort_aver(STU stu)/按平均分排序330. int i,j;331. STU tmp;332. for (i=0;inum;i+)333. for