欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    程序设计课程设计学生成绩管理系统.doc

    • 资源ID:2386081       资源大小:141.50KB        全文页数:16页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    程序设计课程设计学生成绩管理系统.doc

    淮北师范大学程序设计课程设计简单学生成绩统计软件学 院 计算机科学与技术 专 业 计算机科学与技术(师范) 学 号 学 生 姓 名 指导教师姓名 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;i<5;i+) Mi=0; /将M全部设置为0ClearTheLink(L,M);InsertElemToLink(L,M);return 0;在CreateLink函数中调用了ClearTheLink(L,M);函数,其函数的作用是将链表除了头结点以外的其他结点全部删除,并将存放学生汇总信息的数组置为空。函数的实现如下:int ClearTheLink(Nodeptr L,int M5)Nodeptr p;int nCount=0;p = L->next; while (p)L->next = p->next; delete(p); p = L->next;nCount+;L->data.cgrade = 0;for(int i=0;i<5;i+)Mi=0;return nCount; 该函数的传入参数为一个指向结构体指针和一个整形的一维数组。指针所指向的是链表的头结点,一维数组中所存放的是学生的汇总信息。在CreateLink函数中还调用了另外一个函数InsertElemToLink(L,M),其作用是供用户输入学生信息,并存放在结点中。函数定义如下:int InsertElemToLink(Nodeptr L,int M5)elemtype x; int flag=1;while(flag) printf("请输入学生学号(不超过11位):");scanf("%s",&x.num);printf("请输入该学生名字(不超过10位):");scanf("%s",&x.name);printf("请输入该学生成绩:");scanf("%d",&x.cgrade);InsertElemToLink(L, x,M);printf("是否继续输入(1继续,0取消)?n");scanf("%d",&flag); PrintTheLink(L);return 1; 该函数的传入参数是指向链表头结点的指针和一个存放学生汇总信息的数组。当用户输入完成后该函数又调用InsertElemToLink(L, x,M)将输入的信息存放在链表中。最后调用PrintTheLike(L)函数来显示输入的学生信息。InsertElemToLink函数的定义如下:void InsertElemToLink (Nodeptr L,const elemtype x,int M5)Node *p,*r; /p表示插入的结点,r表示插入点的上一个结点 p = new Node;/开辟一个新结点CopyElem(p,x);/调用函数将数组中的结点复制结点中r = L;/将r指向头结点while (r->next)&&( (r->next->data.cgrade > p->data.cgrade)|(r->next->data.cgrade < p->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 (60>cgrade) M0+;return 1; if (90<cgrade) M4+;return 5; if (cgrade<80) if (cgrade<70) M1+; return 2; else M2+; return 3; else M3+; return 4; else if (60>cgrade) M0-; return 1; if (90<cgrade) M4-; return 5; if (cgrade<80) if (cgrade<70) 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;i<5;i+) nCount += Mi;if (nCount<15)k=nCount;else k=10;for (i=0;i<5;i+) tmpi = Mi*k/nCount;if (tmpi>max)max=tmpi;for (i=max+2;i>0;i-) printf(" %c%*c%c%*c%c%*c%c%*c%cn",(tmp0<i)?' ':'I',4,' ',(tmp1<i)?' ':'I',4,' ',(tmp2<i)?' ':'I',4,' ',(tmp3<i)?' ':'I',4,' ',(tmp4<i)?' ':'I');printf("%s %s %s %s %sn","<60","<70","<80","<90","<100");for (i=0;i<ConsoleLength;i+) printf("*");printf("n"); 函数传入参数是一个保存学生汇总信息的一维数组。函数传入参数是一个保存学生汇总信息的一维数组。void PrintTheLink (Nodeptr L)函数定义如下,传入参数为指向链表头结点的指针。void PrintTheLink (Nodeptr L)/传入的L为储存学生信息的头结点Nodeptr p;int i = 1;int j,numlen,namelen; p = L->next;/P指向下一个结点for(j=0;j<ConsoleLength;j+)printf("*");printf("n");printf("序号%*c学号%*c姓名%*c成绩n",ConsoleLength/4-4,' ',ConsoleLength/4-4,' ',ConsoleLength/4-4,' ');/输出提示信息/利用while循环打印出学生的信息while (p)numlen = (strlen(p->data.num)>11)?11:strlen(p->data.num);/判断输入的学号是否大于11个字符namelen = (strlen(p->data.name)>10)?10:strlen(p->data.name);/判断输入的学号是否大于11个字符printf("%d%*c%s%*c%s%*c%dn",i+,ConsoleLength/4-i/10-1,' ',p->data.num,ConsoleLength/4-numlen,' ',p->data.name,ConsoleLength/4-namelen,' ',p->data.cgrade);/打印学生信息p = p->next;/将指针移到下一个结点for(j=0;j<ConsoleLength;j+)printf("*");printf("n");简单学生成绩统计软件二、 主要功能模块流程图创 建显 示删 除退 出插 入排 序条形图显示示四、系统测试程序运行实例如下:1选择1,运行界面如下:2选择2,运行界面如下: 3选择3,运行界面如下:4选择4,运行界面如下:5选择5,运行界面如下:6选择6,运行界面如下:五、结论通过这次长达两个星期的程序设计,我受益匪浅。深刻认识到自己知识的不牢固以及编程实践能力的低下。自学能力和自我认识都有一定的增强,也对编程有更深刻的认识。在做这个程序的时候,我遇到了不少问题。编译的过程:开始的时候找了这个题目,因为不会数据库那方面的东西,所以最简单的思路只能在程序本身弄。然后最容易想到的数据结构就是结构体,再用动态链表来处理,这样效率比较高,插入删除什么的比较方便。问题主要是在排序那边,结构体要排序比较复杂,所以我记得我好像是开了个数组来存放结构体的指针,然后,实际上结构体链表来操作。然后排完了按照那个数组的顺序输出,这里比较难弄。其次比较棘手的是链表的使用,由于自己在学习过程中这部分知识掌握的很差,导致了程序写的难死了。通过老师的指导、网上的搜索学习、图书馆相关资料的查阅及同学们之间的讨论,我终于理解并能简单运用这部分知识。同时由于是第一次合作编写这么大的设计程序,很多知识都需要自己主动地去汲取和探究,所以程序本身就存在相当多的缺陷。那都是因为当时的思路实在不够严谨,导致最终一些问题难以得到解决。这一切的问题都因于自己能力不足和知识的欠缺。总之,课程设计考察的是一个学生理论联系实际并真正理解知识的能力,在这次考察中,我收获了很多,也使我对C语言的理解运用有一定的提高。很期待能在下一次的设计中有更好的表现。希望老师能多多开展这样的课程。

    注意事项

    本文(程序设计课程设计学生成绩管理系统.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开