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

下载本文档

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

文档简介

淮北师范大学程序设计课程设计简单学生成绩统计软件学 院 计算机科学与技术 专 业 计算机科学与技术(师范) 学 号 学 生 姓 名 指导教师姓名 2011年03月 31 日一、 程序设计的内容与目的内容:1. 学生记录应该包括学号、姓名、c 语言课设成绩等信息,是本程序的核心数据结构,定义如下:typedef structchar num11; /*学号*/char name10; /*姓名*/int cgrade; /*c 语言课设成绩*/elemtype ;使用链表实现学生记录的存储,链表中的结点结构如下:typedef struct node elemtype data;struct node * next; node,*nodeptr;int n=0;2程序应具有以下基本功能:(1)以菜单形式显示主界面,提示用户进行选择,完成相应任务,如图1-1 所示。(2)创建学生记录链表:从键盘输入一定数量的学生记录。(3)插入学生记录:从键盘输入待插入的学生记录,插入到指定位置。(4)对学生记录中的c 语言课设成绩按指定顺序(升序、降序)进行排序;(5)删除学生记录:在指定位置上删除学生记录。(6)能统计各分数段的人数,并以分布图显示,如图1-2 所示。(7)输出学生记录到屏幕目的: (1)每个学生记录中包含学号、姓名和c 语言课设成绩等信息;(2)创建学生记录链表;(3)更新学生记录(插入、排序、删除);(4)能统计各分数段的人数,并以分布图显示;(5)输出学生记录到屏幕。二、算法的基本思想这是一个简单的学生信息管理程序,包括学生信息的创建,显示,删除,插入,排序和汇总等功能。本程序使用了结构体来存放学生信息。将学生的信息以链表的形式存储在内存中。typedef structchar num11; /*学号*/char name10; /*姓名*/int cgrade; /*c 语言课设成绩*/ elemtype ; typedef struct node elemtype data;struct node * next; node,*nodeptr; 程序运行前先创建学生信息,创建完成后显示刚才创建的信息,然后根据需要进行删除学生信息,插入学生信息和对学生成绩进行汇总显示的操作。创建学生信息的函数如下:int createlink( nodeptr l,int m5)for(int i=0;inext; while (p)l-next = p-next; delete(p); p = l-next;ncount+;l-data.cgrade = 0;for(int i=0;inext)&( (r-next-data.cgrade p-data.cgrade)|(r-next-data.cgrade data.cgrade) ) r = r-next;/r向后移动p-next = r-next;r-next = p;/将p和r结点接在一起l-data.cgrade+; /链表长度加1aculatescore(x.cgrade,m); 该函数的传入参数是指向链表头结点的指针,存放学生信息的结点,和一个一维数组。在该函数中,首先申请一块新的内存用于存放学生信息,然后调用copyelem(p,x)函数将存放学生信息的结点的数据拷贝到新申请的内存中,并与链表的头结点连接起来。最后调用aculatescore(x.cgrade,m); 来汇总学生信息。void copyelem (elemtype *x,const char* num,const char* name,const int cgrade)strcpy(*x).name,name);/将姓名拷贝到结点中strcpy(*x).num,num);/将学号拷贝到结点中(*x).cgrade=cgrade;/将成绩拷贝到结点中传入参数为存放学生信息的结构体指针,两个字符型指针分别用显示放学号和姓名,一个整形用来显示成绩。int aculatescore (const int cgrade,int m5,int optcode)函数的传入参数是一个整形的参数用来表示成绩,一个一维数组用来保存汇总信息,和一个具有默认值的形参。int aculatescore (const int cgrade,int m5,int optcode)/统计分数段 if (optcode) if (60cgrade) m0+;return 1; if (90cgrade) m4+;return 5; if (cgrade80) if (cgradecgrade) m0-; return 1; if (90cgrade) m4-; return 5; if (cgrade80) if (cgrade70) m1-; return 2; else m2-; return 3; else m3-; return 4; 该函数用来计算小于60分,小于70分,小于80分,小于90分和小于100分的人的个数并将结果保存在一维数组中,然后在showgrid函数中将结果以图形的方式显示出来。void showgrad(int m5)int i,ncount=0;int tmp5,max=0;int k;/放大系数 for (i=0;i5;i+) ncount += mi;if (ncount15)k=ncount;else k=10;for (i=0;imax)max=tmpi;for (i=max+2;i0;i-) printf( %c%*c%c%*c%c%*c%c%*c%cn,(tmp0i)? :i,4, ,(tmp1i)? :i,4, ,(tmp2i)? :i,4, ,(tmp3i)? :i,4, ,(tmp4i)? :i);printf(%s %s %s %s %sn,60,70,80,90,100);for (i=0;inext;/p指向下一个结点for(j=0;jdata.num)11)?11:strlen(p-data.num);/判断输入的学号是否大于11个字符namelen = (strlen()10)?10:strlen();/判断输入的学号是否大于11个字符printf(%d%*c%s%*c%s%*c%dn,i+,consolelength/4-i/10-1, ,p-data.num,consolelength/4-numlen, ,,consolelength/4-namelen, ,p-data.cgrade);/打印学生信息p = p-next;/将指针移到下一个结点for(j=0;jconsolelength;j+)printf(*);printf(n);简单学生成绩统计软件二、 主要功能模块流程图创 建显 示删 除退 出插 入排 序条形图显示示四、系统测试程序运行实例如下:1选择1,运行界面如下:2选择2,运行界面如下: 3选择3,运行界面如下:4选择4,运行界面如下:5选择5,运行界面如下:6选择6,运行界面如下:五、结论通过这次长达两个星期的程序设计,我受益匪浅。深刻认识到自己知识的不牢固以及编程实践能力的低下。自学能力和自我认识都有一定的增强,也对编程有更深刻的认识。在做这个程序的时候,我遇到了不少问题。编译的过程:开始的时候找了这个题目,因为不会数据库那方面的东西,所以最简单的思路只能在程序本身弄。然后最容易想到的数据结构就是结构体,再用动态链表来处理,这样效率比较高,插入删除什么的比较方便。问题主要是在排序那边,结构体要排序比较复杂,所以我记得我好像是开了个数组来存放结构体的指针,然后,实际上结构体链表来操作。然后排完了按照那个数组的顺序输出,这里比较难弄。其次比较棘手的是链表的使用,由于自己在学习过程中这部分知识掌握的很差,导致了程序写的难死了。通过老师的指导、网上的搜索学习、图书馆相关资料的查阅及同学们之间的讨论,我终于理解并能简单运用这部分知识。同时由于是第一次合作编写这么大的设计程序,很多知识都需要自己主动

温馨提示

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

评论

0/150

提交评论