c语言课程设计分析方案学生成绩管理系统余销云 .docx
精品名师归纳总结C 语言课程设计报告题目: 同学成果治理系统设计设 计 者: 余销云专业班级:电子信息工程( 2)班学号: 202130040220指导老师:祝红琴完成日期: 6 月 21 日同学成果治理系统课程设计报 告目录一系统软件环境3二课程设计目的3三内容与要求3四程序主要功能4可编辑资料 - - - 欢迎下载精品名师归纳总结五系统功能设计4六函数实现功能说明5七调试分析6八心得与体会6九各功能模块的实现及其程序清单7十、附页源程序清单11可编辑资料 - - - 欢迎下载精品名师归纳总结一系统软件环境 :同学成果治理系统课程设计报 告可编辑资料 - - - 欢迎下载精品名师归纳总结本程序主要运行在: Visual C+ 6.0(主要)Turbo C/C+ 3.0Turbo C 2.二课程设计目的:本课程设计的系统是早已在许多领域均有应用,是一个很不错的教案治理系统,而且其功能更是相当强大、界面更加友好的应用型软件。而现在我的设计并非是重走旧路,而我的设计主要目的在于学习并深刻的把握对C语言的基础学问以及其实践体会,更好的在以后的学习中能够更好的运用学习。特别是像这种比较多运用到一些课本上没有教的学问,比如说,像清屏函数CLRSC、R 菜单函数 MENU等。许多都是一开头就没有涉及到的学问,在自已的设计中得到了提升,更加重要的一点就是增加了自已的实践操作才能。三内容与要求:(一) 设计内容:成果信息,内容如下:例:现有同学成果信息,包含姓名 学号 语文 数学 英语张明明 01 67 78 82李成友 02 78 91 88张辉灿 03 68 82 56王露 04 56 45 77陈明 05 67 38 47请用 C/C+编写一系统,实现同学信息治理,软件的入口界面应包括如下几个方面:可编辑资料 - - - 欢迎下载精品名师归纳总结(二)功能要求 : 1信息输入: 2信息查询:要求:查询时可实现按姓名查询、按学号查询3成果统计:要求: A 输入任意的一个课程名(如数学)和一个分数段(如60-70 ),统计出在此分数段的同学情形。( 4)可选功能:实现同学信息数据的爱护。可包括:增加同学信息、删除同学信息、修改同学信息(其他要求:同学信息数据以结构体数组组织。或以链表形式组织。或以文件形式储存(可加分)2、 插入记录在一个特定序号处插入一条记录3、 删除记4、 修改记关键可选增强功能:统计录修改特定记录5、 查询记录。(可对记录分)6、 排序按学号、姓名、产生年月、家庭住址、邮编、电话等进行排序7、 系统爱护退出系统时关闭全部文件四程序主要功能:本系统的主要功能有如下:( 1 )、新输入同学的详细信息(包括:学号、姓名、语文成果、数学成果、英语成果)( 2)、增加同学的信息( 3)、删除同学的信息( 4)、查询同学的信息( 5)、统计同学的成果注:由于本人才能有限,不能完全的将全部的功能模块做出来。但我信任我能够再接再厉,连续开发下去的,并向人性化进展。五系统功能设计:(一) 本系统的总体框架图:可编辑资料 - - - 欢迎下载精品名师归纳总结(二)、 本系统的总体流程图:开头编译运行有是/ 否无MAIN调用 MENUi=0i 0EXIT连接调用五个功能函数( i= ?)执行错误输入正确终止注:此图为概图、程序较多无法一一呈现。六函数实现功能说明:( 1)、 MENU 函数是定义一个菜单函数,其功能在于输出菜单界面供使用者选择。( 2)、 CREAT 函数是定义用于创建新的链表,并带回一个指向链表头的指针。其功能是输入最初的同学信息。( 3)、 ADD 函数是定义用于再次输入同学信息,并将全部的同学信息按学号排序。( 4)、 DEL 函数是定义用于删除同学信息。:( 5)、 SEARCH 函数是定义义用于查询同学信息,主要是学号的查询。可编辑资料 - - - 欢迎下载精品名师归纳总结:( 6)、 TAXIS函数是定义用于统计同学的成果信息,接受排序函数的方式对学号/数学等的排序。:七调试分析:因在不同的环境中运行是有不同的结果,以下分两种环境中说明:( 1)、在 Turbo C 2.0在这个环境下运行警告之处比较多,在调试时接受的图象处理函数在其它两个环境中不能运行。例如:在原程序中加入#include“ graphics.h” int gdtiver=DETECT,gmode。 Initgraph&gdriver,&gmode,“图象处理函数的路径” 。Cleardevice。Setbkcolor颜色值 。* 在 Turbo C/C+ 3.0中的 Error提示是: Undefined symboc _c closegraph in module 缘由在于: TC 3.0 中对图象的处理函数有不足之处。* 在 Visual C+ 6.0中的 Error提示是:BGI Error:Graghics not initialized useinitgraph Cannot open includefile:” graphics.h”No such file or diretory缘由在于: VC 6.0 中对图象处量理的函数与TC中的不一样。( 2)、在 Turbo C/C+ 3.0在这个环境中运行到输入同学姓名时就出错:Error:在用户窗口中可以看到 Scanf:floating point formats not linkedAb mormal program termination*缘由在于:连接浮点库错误。*解决方法:在主函数中加入:fioat arg,*pointer=&arg。即可运行。八心得与体会:( 1)、通过本次对 C 语言的深化学习,让我对C 语言有了更多的明白并撑握更多的学问, 成功的运用各类函数、循环变量、结构化的程序设计,以及结构体、指针的使用。( 2)、但在学习中发觉,编程的确不是很好做的,并非是你想要就能完成的,它需要的是仔细、仔细的对待每一个程序块,特别是在对指针的使用时更加困难,那些指针指来指 去,一不当心就会看错,编译不出来。( 3)、由于同学的我只是大一而已,没能够完完全全的把程序做出来,而且程序中有许多不足之处不能够正确的将它改正,但总体上是可以运行的。九各功能模块的实现及其程序清单:( 1 )、各功能模块的实现(请参照第六点:函数实现功能说明)可编辑资料 - - - 欢迎下载精品名师归纳总结( 2 )、程序清单(请见附页)参考文献:1 谭浩强编著 .C 程序设计第三版 .北京:清华高校出版社,20052 林瑞仲等编著 .C 语言实例解读精粹.北京:人民邮电出版社,2005可编辑资料 - - - 欢迎下载精品名师归纳总结附页:#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #define M 3/*定义结构体变量 */ typedef struct students char name20。char num15。float scoreM。float average。float total。MESSA。MESSA stu20。int S。/*函数声明 */ void menuvoid。 void choosevoid。void inputvoid。void savescorevoid。void loadscorevoid。void choosecvoid。void averagevoid。void totalvoid。void namevoid。void numbervoid。void showvoid。void excellentvoid。void passingvoid。void personalvoid。void Exit。同学成果治理系统源程序清单可编辑资料 - - - 欢迎下载精品名师归纳总结/*主函数调用 */ void main menu。可编辑资料 - - - 欢迎下载精品名师归纳总结choose。/*菜单系统 */void menuvoidsystem"CLS"。printf"t*n"。printf"t*n"。printf"t*。欢迎使用这个成果治理系统。*n"。printf"t*n"。printf"t*n"。printf"n"。printf"t以下这个菜单由余销云制作,详情请看:nn"。printf"t#n"。printf"t#请输入同学的分数.1#n"。printf"t#搜寻同学分数.2#n"。printf"t#搜寻同学的优秀通过率3#n"。printf"t#搜寻同学的通过状况4#n"。printf"t#搜寻个人个门成果分数5#n"。printf"t#离开.6#n"。printf"t#n"。printf"nt请选择 :n"。/*菜单选择 */ void choosevoidint x,flag=0。whileflag=0fflushstdin。scanf"%d",&x。getchar。switchx case 1:input。savescore。 loadscore。 menu 。choose。flag=1。break 。case 2:choosec。flag=1 。break 。case 3:excellent。flag=1 。break 。case 4:passing。flag=1 。break 。case 5:personal。flag=1 。break 。case 6:Exit。flag=1 。default:printf"tSorry,yourchoosedoesn'texist.pleasechoose again.n"。可编辑资料 - - - 欢迎下载精品名师归纳总结/*输入同学成果 */ void inputvoidint flag=1,j,i。char k 。float pp=0。fori=0。flag=1 。i+printf"t请输入第 N.%hd 个同学的成果信息:n",i+1。puts"姓名 :"。fflushstdin。getsstui.name。fflushstdin。puts"学号 :"。fflushstdin。getsstui.num。puts"t分数 :t语文t数学t英语" 。forj=0。j<M 。j+ scanf"%f",&stui.scorej。puts"t你想要连续么 .Y/N"。可编辑资料 - - - 欢迎下载精品名师归纳总结while1 puts"t请选择 ."。fflushstdin。scanf"%c",&k。ifk.='N'&&k.='Y'puts"t出错了,哈哈,再输一次吧."。else ifk='N'可编辑资料 - - - 欢迎下载精品名师归纳总结flag=0。 S=i 。break 。else break。fori=0。i<=S 。i+forj=0,stui.total=0.0。j<M。j+ stui.total+=stui.scorej。stui.average=stui.total/M。/*储存数据 */void savescorevoidint i,flag=1。FILE *fp。char m 。puts"t你想要储存这些数据么 .Y/N"。可编辑资料 - - - 欢迎下载精品名师归纳总结while1fflushstdin。scanf"%c",&m。ifm='Y'iffp=fopen"D:score.txt","w"=NULLprintf"t对不起哦,无法打开这个表单.n"。exit0。fori=0。 i<=S 。i+ iffwrite&stui,sizeofstruct students,1,fp.=1可编辑资料 - - - 欢迎下载精品名师归纳总结ifflag=1puts"t对不起,表单书写错误了."。flag=0。可编辑资料 - - - 欢迎下载精品名师归纳总结fori=0。 i<=S 。i+printf"t好了 , 第 N.%d 个同学的数据已经被储存了哦.n",i+1。fclosefp。break。else ifm.='N'&&m.='Y'puts"t对不起,你输入错误,请重新输入一次吧."。elsebreak。/*读取文件中储存的数据 */ void loadscorevoidFILE *fp。char n 。MESSA restu20。int i,j,flag=0。char read510="学号 "," 姓名 ","语文","数学","英语" 。puts"t你想要立刻读取这些数据么.Y/N"。while1fflushstdin。scanf"%c",&n。ifn='Y'iffp=fopen"D:score.txt","r"=NULLfprintfstderr,"tOpen %s error.n","score.txt"。可编辑资料 - - - 欢迎下载精品名师归纳总结exit0。fori=0。i<=S 。i+fread&restui,sizeofstruct students,1,fpsystem"CLS"。puts"t成果信息读取中"。printf"t好的,表单已经被读取.n"printf"n"。printf"t$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$n"。printf"t$*$*$nt"。printf"$*$"。fori=0。i<5 。i+printf"%-10s",readi。printf" $*$"。printf"n"。fori=0。i<=S 。 i+printf"t$*$"。printf"%-10s%-10s",restui.num,restui.name。forj=0。j<3 。j+printf"%-10.2f",restui.scorej。printf" $*$n"。printf"t$*$*$" 。printf"nt$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$n" 。fclosefp。break 。else ifn='N'break。elseprintf"t对不起,显现错误了,再来一次吧,信任你会成功的.n"。puts"t输入任意键回到主菜单 .n"。getchar。getchar。可编辑资料 - - - 欢迎下载精品名师归纳总结/* 选择查分的子菜单及子菜单选择*/ void choosecvoidint biao,i,flag=0。FILE *fp。iffp=fopen"D:score.txt","r"=NULLprintf"t对 不 起 , 你 无 法 输 入 任 何 成 绩 信 息 .无 法 打 开 这 个 表单.nnn"。printf"t输入任意键回到主菜单.n"。getchar。getchar。menu。choose。fori=0。i<=S 。 i+fread&stui,sizeofstruct students,1,fp。fclosefp。system"CLS"。printf"t以下是其次个菜单:n"。printf"n"。printf"t%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$。%$%$n"printf"t%$按平均分由高到低.1 %$n"。printf"t%$按总分由高到低 .2 %$n"。printf"t%$序.3 %$n"按。学号降printf"t%$按姓名降序.4 %$n"。printf"t%$回到主菜单.5 %$n"。printf"t%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$。%$%$n" printf"nt请选择输入方式 :n"。whileflag=0fflushstdin。scanf"%d",&biao。getchar。switchbiaocase 1:flag=1。average。show 。break 。case 2:flag=1。total。show 。break 。可编辑资料 - - - 欢迎下载精品名师归纳总结case 3:flag=1。number 。show 。 break 。case 4:flag=1。name 。show 。break 。case 5:flag=1。menu 。choose 。break 。default:printf"t对不起,你的操作无法进行.请重新做出正确操作 .n"。/* 显示分数 */ void showvoidint i,j,n,flag=0。char head710="学号 "," 姓名 "," 语文 "," 数学 "," 英语 "," 总分 "," 平均分 " 。system"CLS"。puts"t读取信息中 ."。printf"n"。printf"t$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$nnt"。fori=0。 i<7 。i+printf"%-10s",headi。printf"nt"。fori=0。 i<=S 。i+printf"%-10s%-10s",stui.num,stui.nameforj=0。 j<3 。j+。printf"%-10.2f",stui.scorejprintf"%-10.2f",stui.total。printf"%-10.2f",stui.average。printf"nt"。printf"nt$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$n"。printf"nYou want :1 or 2n"。puts"t1.回到其次个菜单 .n"。puts"t2.回到主菜单 .n"。whileflag=0fflushstdin。scanf"%d",&n。getchar。switchncase 1:flag=1。choosec。break 。可编辑资料 - - - 欢迎下载精品名师归纳总结case 2:flag=1。menu 。choose 。break 。default:printf"t出错了,请再次输入 .n"。/*按平均分由高到低*/ void averagevoidint i,j,k。MESSA t。fori=0。i<S 。i+k=i。forj=i+1。j<=S 。j+ifstuk.average<stuj.average k=j。ifk.=it=stuk。stuk=stui。stui=t。/* 按总分由高到低*/ void totalvoidint i,j,k。MESSA t。fori=0。i<S 。i+k=i。forj=i+1。j<=S 。j+ifstuk.total<stuj.total k=j。ifk.=it=stuk。stuk=stui。stui=t。/* 按学号降序 */ void numbervoid可编辑资料 - - - 欢迎下载精品名师归纳总结int i,j,k。MESSA t。fori=0。i<S 。i+k=i。forj=i+1。j<=S 。j+ ifstrcmpstuk.num,stuj.num<0k=j 。可编辑资料 - - - 欢迎下载精品名师归纳总结ifk.=it=stuk。stuk=stui。stui=t。可编辑资料 - - - 欢迎下载精品名师归纳总结/* 按姓名降序 */ void namevoidint i,j,k。MESSA t。fori=0。i<S 。i+k=i。forj=i+1。j<=S 。j+ ifstrcmpstuk.name,stuj.name<0k=j 。可编辑资料 - - - 欢迎下载精品名师归纳总结ifk.=it=stuk。stuk=stui。stui=t。可编辑资料 - - - 欢迎下载精品名师归纳总结/*优秀率 */void excellentvoidint i,j,k,w,flag=0。float m。FILE *fp。char head2310="数学 "," 语文 "," 英语 " 。iffp=fopen"D:score.txt","r"=NULLprintf"t对不起,你无法输入任何信息.找不到该表单 .nnn"。printf"t输入任意键回到主菜单.n"。getchar。getchar。可编辑资料 - - - 欢迎下载精品名师归纳总结menu。choose。fori=0。i<=S 。i+fread&stui,sizeofstruct students,1,fp。fclosefp。system"CLS"。fori=0。i<M。i+printf"tThe excellent students in %s is following:n",head2i。forj=0,k=0。 j<=S 。j+ ifstuj.scorei>=85.00k+。printf"t%st%s",stuj.num,stuj.name。printf"t%.2fn",stuj.scorei。 m=k*1.0/S+1*100。printf"tThe excellent rate is %.2f%n",m。printf"nn"。puts"t你想要连续操作么.n"。printf"t1.离开系统 .n"。printf"t2.回到主菜单 .n"。printf"t3.回到其次个菜单 .n"。puts"t请选择 :n"。whileflag=0fflushstdin。scanf"%d",&w。getchar。switchwcase 1:Exit。flag=1 。case 2:menu。choose 。flag=1。break 。case 3:choosec。flag=1 。break 。default:printf"t对不起,操作无法进行.请重新选择 .n"。/* 及格率 */void passingvoidint i,j,k,w,flag=0。float m。FILE *fp。char head2310="数学 ","语文","英语" 。iffp=fopen"D:score.txt","r"=NULL可编辑资料 - - - 欢迎下载精品名师归纳总结printf"t对不起,你不能输入任何信息.无法找到该表单 .nnn"。printf"t输入任意键回到主菜单.n"。getchar。getchar。menu。choose。fori=0。i<=S 。i+fread&stui,sizeofstruct students,1,fp。fclosefp。system"CLS"。fori=0。i<M 。i+printf"tThe passing students in %s is following:n",head2i。forj=0,k=0。j<=S 。j+ ifstuj.scorei>=60.0k+。printf"t%st%s",stuj.num,stuj.name。printf"t%.2fn",stuj.scorei。 m=k*1.0/S+1*100。printf"tThe passing rate is %.2f%n",m。printf"nn"。puts"t是否连续操作 .n"。printf"t1.离开系统 .n"。printf"t2.回到主菜单 .n"。printf"t3.回到其次个菜单 .n"。puts"t请选择 :n"。whileflag=0fflushstdin。scanf"%d",&w。getchar。switchwcase 1:Exit。flag=1 。case 2:menu。choose 。 flag=1 。break 。case 3:choosec。flag=1 。break 。default:printf"t对不起,你的操作无法进行.请重新选择 .n"。/*个人同学成果查询*/可编辑资料 - - - 欢迎下载精品名师归纳总结void personalvoidint i,j,f,w,flag=0。char b10,a。FILE *fp。char head3710="学号 "," 姓名 "," 语文 "," 数学 "," 英语 "," 总分 "," 平均分 " 。iffp=fopen"D:score.txt","r"=NULLprintf"t对不起,无法输入任何信息.无法找到该表单 .nnn"。printf"t输入任意键回到主菜单.n"。getchar。getchar。menu。choose。fori=0。i<=S 。i+fread&stui,sizeofstruct students,1,fp。fclosefp。puts"t请输入你想要搜寻的同学成果信息:n"。puts"t同学成果信息如下.n"。 fori=0。i<=S 。i+printf"t%s",stui.name。puts"tnYour choose is :n"。while1fflushstdin。getsb。fori=0。i<=S 。i+ ifstrcmpb,stui.name=0printf"t该生同学成果信息%s.Y/Nn",stui.name。f=i 。fflushstdin。scanf"%c",&a。ifa='Y'system