C语言程序设计课程设计报告-学生成绩管理系统.doc_第1页
C语言程序设计课程设计报告-学生成绩管理系统.doc_第2页
C语言程序设计课程设计报告-学生成绩管理系统.doc_第3页
C语言程序设计课程设计报告-学生成绩管理系统.doc_第4页
C语言程序设计课程设计报告-学生成绩管理系统.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

c语言程序设计课程设计报告设计题目:学生成绩管理系统学 号 班 级 姓 名 完成方式:(单选)自我评分:(单选)独立完成 优秀参考他人工作的基础上完成 良好在他人的帮助下完成 中等完整拷贝他人成果 及格 不及格2011年 5月 11日c语言课程设计任务书3题目:学生成绩管理系统功能:学生成绩管理系统,每个学生是一个记录,包括学号,姓名,性别,3门课程成绩。系统要求实现以下功能:1、信息录入:录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等);2、信息查询:输入学号,查询学生各门课程的成绩,并显示。3、排序:按各门课程的成绩平均分进行排序,并显示。4、信息删除与修改输入学号,删除该学生的成绩信息。分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、建立一个文件,将每位学生的信息写入文件中并能显示于屏幕上。3、完成上述信息查询(学生学号、姓名等)、排序、信息删除与修改功能。要求:1、用c语言实现程序设计;2、利用结构体数组实现学生信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。课程设计实验报告要求:一、总体设计1程序的总体设计数据导入模块操作面板显示查找排序添加条目删除条目编辑条目数据分析统计数据导出模块程序总框架不及格名单基本功能分析功能条目操作2. 数据结构结构体数组struct student /*定义结构体变量student*/ int num; char name10; int gen; int ch,en,math,tot;struct student stu100;3. 函数原型声明的说明(功能,参数,返回值)1).输出不及格名单:void failsbj(int n,struct student stu) /*输出不及格的名单,只要有一科不及格即进入名单*/2).计算平均分void sumup(int *n,struct student (*stu) /*计算每个人各科平均分的函数*/3).打印所有数据void display(int n,struct student stu) /*输出所有数据*/4).检索void search(int n,struct student stu) /*依照名字或者数字搜索条目*/5).排序void assort(int n,struct student (*stu) /*排序模块*/6).增加条目void add(int *n,struct student (*stu) /*加入条目模块*/7).删除条目void del(int *n,struct student (*stu) /*删除条目模块*/8).编辑条目void edit(int *n,struct student (*stu) /*编辑条目模块*/9).导出列表void save(int *n,struct student (*stu) /*将结果另存为*/10).统计分析void anlz(int *n,struct student (*stu) /*统计全班成绩,包括求出各分数段人数,各科班平均分*/4. 流程图计算平均分数据导入显示所有数据根据读入的指令com进行选择显示操作面板退出系统显示所有数据不及格名单查找信息对数据排序添加条目删除条目编辑条目导出文件统计分析结束开始二、详细设计1.主程序如上图。2.功能之“输出不及格名单”:用for循环扫描每个同学的信息,如果某同学的语文、英语或数学成绩不及格(60分),即输出该同学的条目。3.功能之“排序”:本系统提供六种排序,分别如下: 0.according to the student number 1.according to the average scores. 2.according to the scores of chinese. 3.according to the scores of english. 4.according to the scores of mathematics. 5.by gender *性别以1和0代替*6.by name 即根据学号、平均分、单科成绩、性别、姓名排序。根据用户要求的排序方法,用冒泡排序法排序。4.功能之“删除条目”:先列出所有学生的条目,要求用户输入欲删除的学号,搜索该学号,确定该学号对应条目的编号。删 除方式为,将该条目之后的所有条目逐个复制到前一个位置,以 覆盖欲删除的条目,最后将条目总数减一。5、功能之“编辑条目”:先要求用户输入欲更改条目的学号,通过查找得到该学号对应的编号,要求用户输入欲更改的条目属性以及目标值。然后直接修改该属性。6.功能之“增加条目”:要求用户键入欲增条目的详细信息,包括学号、姓名、性别、语文成绩、英语成绩、数学成绩。然后新增条目。7.功能之“检索”:要求用户输入欲检索的是姓名还是数字信息。若是姓名,则检索条目中是否有该姓名的学生,若有,则把条目输出;若是数字信息,则检索条目中是否有包含该数字的条目(包括学号、性别、成绩),把检索结果输出。8.功能之“打印数据”:把所有数据逐条输出,每个条目占一行。9.功能之“统计分析”:定义整形变量作为计数器,遍历所有条目,统计每种情况的学生人数。其中包括语文、英语、数学的各分数段人数,分数区间为(0,60)、(60,70)、(70,80)、(80,90)、(90,100)。并统计各科平均分。将统计结果打印在屏幕上。10.功能之“导出”:导出文件为output.txt,放在默认目录下。三、测试及调试(程序运行截图,测试方案、存在的问题及解决方法)程序调试时主要运用了单步执行、设置breakpoint、跟踪变量等方法。具体测试方案为:1.通过编译检错,将检测出来的bug逐个更正。2.运行程序,逐个功能模块测试。若出现死循环则按ctrl+f2强制退出。3.单步执行并跟踪变量。确定死循环的位置,分析其原因。4.若有bug出现在某函数中,则应在函数中添加breakpoint,执行程序,跳到该breakpoint后,单步执行并跟踪变量。调试过程中遇到的问题:1.在编写“添加新条目”模块时,最早的做法是用scanf命令一次性读入学号、姓名、性别、成绩等属性。遇到的问题是,因为姓名为字符串格式,性别为整形格式,因此,读取字符串时并不以空格为结束,执行结果会将姓名后面的性别等属性也当作姓名输入。提出的解决办法是:逐个读取属性,每读取一个属性之前有文本提示。因此,每读取一个属性必须以回车结束。此时,在读取字符串的时候,遇到回车即结束读取,于是不再出现原来的问题了。2.遇到的问题:在打印所有数据时,往往窗口不足以显示所有数据。解决方案:此时,在打印的循环语句中加入一句if (i%10=0) getchar()。此时每显示十个数据,需要读入一个回车符才能继续显示。3.遇到的问题:使用scanf命令不能把输入的数据保存到变量中,甚至于蓝屏重启。问题原因:变量前漏了加&。解决办法:在变量前加上&。测试数据为:input.txt1345 koo 1 93 68 881933 jay 1 69 73 781534 kate 0 85 84 690432 william 1 98 86 890538 mary 0 79 99 951370 xiaopeng 1 45 86 56532 babe 0 54 65 451934 alai 1 89 90 67538 lich 1 98 88 78 90显示所有数据:主面板:输出成绩不及格的同学:按照个人平均分排序后:各科各分数段人数统计:四、小结(收获和建议)这次本次课程设计,提供了一次绝好的机会让我重新复习了大一学过的c程序设计课程。为此,我利用了一个下午的时间把大一学过的知识重新梳理了一遍。通过自主设计一个系统,我把原来学到的理论知识提升到了运用的层次。我在编写这个系统的时候,遇到了很多的错误,更正程序的bug耗费了很多的时间,但这是值得的,因为bug对于每一个程序员来说都是难以避免的。在不断修正bug的过程中,我提升了自己调试程序、排查错误的能力。并且让我对c语言的认识进一步加深,特别是在指针的使用方面。这也是我第一次设计一个实用的程序。此过程让我掌握了编写设计一个软件的基本方法。附件:主要源程序代码#include#include#includestruct student /*定义结构体变量student*/ int num; char name10; int gen; int ch,en,math,av; /*语文、英语、数学、平均分 */;void sumup(int *n,struct student (*stu) /*计算每个人各科平均分的函数*/ int i; for (i=1;i=*n;i+) (*stu)i.av=(*stu)i.ch+(*stu)i.en+(*stu)i.math; (*stu)i.av=(*stu)i.av/3; ;void failsbj(int n,struct student stu) /*输出不及格的名单,只要有一科不及格即进入名单*/ int i,c,e,m; printf(nthe students listed below fail in at least one subjects:n); printf(-n); for (i=1;i=n;i+) if (stui.ch)=60)|(stui.en)=60)|(stui.math)=60) printf(n%d|,i); printf( num=%d,stui.num); printf( name=%s,); printf( gen=%d,stui.gen); printf( ch=%d,stui.ch); printf( en=%d,stui.en); printf( math=%d,stui.math); printf( average=%dn,stui.av); ; ; printf(-n);void display(int n,struct student stu) /*输出所有数据*/int i; printf(nnitems are as shown below:n); printf(-n); for (i=1;i ); scanf(%d,&j); switch (j) case 1: /*寻找与某数字匹配的条目*/ printf(please type in the information you want to search: ); scanf(%d,&info); printf(-n); for (i=1;i=n;i+) if (stui.num=info)|(stui.gen=info)|(stui.ch=info)|(stui.en=info)|(stui.math=info)|(stui.av=info) printf(num=%d,stui.num); printf( name=%s,); printf( gen=%d,stui.gen); printf( ch=%d,stui.ch); printf( en=%d,stui.en); printf( math=%d,stui.math); printf( average=%dn,stui.av); printf(-n); break; case 2: /*寻找与某姓名匹配的条目*/ printf(please type in the name you want to search:); scanf(%s,s); printf(-n); for (i=1;i ); scanf(%d,&g); printf(-n); for (i=1;i ); scanf(%d,&num); switch (num) case 0: /*根据学号排序*/ for (i=1;i=n;i+) for (j=i+1;j(*stu)j.num) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case 1: /*根据个人各科总分排序*/ for (i=1;i=n;i+) for (j=i+1;j(*stu)j.av) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case 2: /*根据语文成绩排序*/ for (i=1;i=n;i+) for (j=i+1;j(*stu)j.ch) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case 3: /*根据英语成绩排序*/ for (i=1;i=n;i+) for (j=i+1;j(*stu)j.en) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case 4: /*根据数学成绩排序*/for (i=1;i=n;i+) for (j=i+1;j(*stu)j.math) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case 5: /*根据性别排序*/ for (i=1;i=n;i+) for (j=i+1;j(*stu)j.gen) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; case 6: /*根据姓名排序*/ for (i=1;i=n;i+) for (j=i+1;j0) stt=(*stu)i; (*stu)i=(*stu)j; (*stu)j=stt;break; default:; ; display(n,*stu);void add(int *n,struct student (*stu) /*加入条目模块*/ struct student stn; printf(nplease type the new item here:); printf(nthe student number is ); scanf(%d,&stn.num); printf(nwhat is the name?); scanf(%s,&); printf(nwhat is the gender?); scanf(%d,&stn.gen); printf(nthe marks of chinese is:); scanf(%d,&stn.ch); printf(nthe marks of english is:); scanf(%d,&stn.en); printf(nthe marks of mathematics is:); scanf(%d,&stn.math); (*n)+; (*stu)*n=stn; sumup(n,stu); /*修改后重新计算平均分*/ display(*n,*stu);void del(int *n,struct student (*stu) /*删除条目模块*/ int i,j,k,b,m; struct student stnul=0; b=0; printf(nwhich student number do you want to delete?); scanf(%d,&m); for (i=1;i=*n;i+) if (*stu)i.num=m) b=1;break; if (b=1) for (j=i;j=*n-1;j+) (*stu)j=(*stu)j+1; (*stu)*n=stnul; (*n)-; else printf(ncant not find %dn,m); sumup(n,stu); /*修改后重新计算平均分*/ display(*n,*stu);void edit(int *n,struct student (*stu) /*编辑条目模块*/ int i,j,num1; printf(which one do you want to edit? please type in the student numbern); scanf(%d,&num1); for (i=1;i ); scanf(%d,&j); switch (j) /*修改哪一项*/ case 1:scanf(%d,&(*stu)i.num); break; case 2:scanf(%s,&(*stu));break; case 3:scanf(%d,&(*stu)i.gen);break; case 4:scanf(%d,&(*stu)i.ch);break; case 5:scanf(%d,&(*stu)i.en);break; case 6:scanf(%d,&(*stu)i.math);break; default:; ; sumup(n,stu); display(*n,*stu);void save(int *n,struct student (*stu) /*将结果另存为*/int i,j; file *fp1; if (fp1=fopen(output.txt,w+)=null) printf(can not open the output file!); else for (i=1;i=*n;i+) fprintf(fp1,%d ,(*stu)i.num); fprintf(fp1,%s ,(*stu)); fprintf(fp1,%d ,(*stu)i.gen); fprintf(fp1,%d ,(*stu)i.ch); fprintf(fp1,%d ,(*stu)i.en); fprintf(fp1,%dn,(*stu)i.math); ; fclose(fp1); void anlz(int *n,struct student (*stu) /*统计全班成绩,包括求出各分数段人数,各科班平均分*/ int i; int avch=0; int aven=0; int avma=0; int avtot=0; int ch90=0; int ch80=0; int ch70=0; int ch60h=0; int ch60l=0; int en90=0; int en80=0; int en70=0; int en60=0; int en60h=0; int en60l=0; int ma90=0; int ma80=0; int ma70=0; int ma60h=0; int ma60l=0; for (i=1;i=90) ch90+; if (*stu)i.ch=80) ch80+; if (*stu)i.ch=70) ch70+; if (*stu)i.ch=60) ch60h+; if (*stu)i.ch=90) en90+; if (*stu)i.en=80) en80+; if (*stu)i.en=70) en70+; if (*stu)i.en=60) en60h+; if (*stu)i.en=90) ma90+; if (*stu)i.math=80) ma80+; if (*stu)i.math=70) ma70+; if (*stu)i.math=60) ma60h+; if (*stu)i.math60) ma60l+; ; ch60h-=ch70; ch70-=ch80; ch80-=ch90; en60h-=en70; en70-=en80; en80-=en90; ma60h-=ma70; ma70-=ma80; ma80-=ma90; avch=avch/(*n); aven=aven/(*n); avma=avma/(*n); avtot=avtot/(*n); printf(-n); /*输出统计结果*/ printf(subject: chinese|); printf( (0,60):%2d,ch60l); printf( (60,70):%2d,ch60h); printf( (70,80):%2d,ch70); printf( (80,90):%2d,ch80); printf( (90,100):%2dn,ch90); printf(average= %2dn,avch); printf(subject: english|); printf( (0,60):%2d,en60l); printf( (60,70):%2d,en60h); printf( (70,80):%2d,en70); printf( (80,90):%2d,en80); printf( (90,100):%2dn,en90); printf(average= %2dn,aven); printf(subject: math |); printf( (0,60):%2d,ma60l); printf( (60,70):%2d,ma60h); printf( (70,80):%2d,ma70); printf( (80,90):%2d,ma80); p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论