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

下载本文档

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

文档简介

课 程 设 计 说 明 书课程名称: 高级语言程序设计 设计题目: 成绩管理系统 院 系: 计算机科学与信息工程学院 学生姓名: 学 号: 专业班级: 软件工程13-1 指导教师: 2014年 6月设计题目成绩管理系统学生姓名王会芳所在院部计算机科学与信息工程学院专业、班级软件工程13-1设计要求:设计成绩管理系统,要求由菜单进行管理。(1) 从键盘输入包括学号、姓名、各门课程、成绩。(2)计算每个人的总分和平均分,并按照平均分排序。(3)具有查询功能。(4)具有学生增加和减少功能。(5)将原始数据和计算后的数据保存在磁盘文件中。 学生应完成的工作:1. 学生应认真学习参考程序,理解每个文件、每个函数以及各个变量的作用和意义。在此基础上进一步改进程序,最后正确地运行程序。2. 对程序进行测试,设计详细的测试计划,然后根据测试计划设计测试用例,对程序进行测试。测试时应注意对各种边缘情况进行测试。3. 完成课程设计报告。参考文献:1. 梁旭等 C程序设计课程设计 电子工业出版社 20112. 谭浩强 C程序设计(第四版) 清华大学出版社2010工作计划:1. 小组审题,查阅资料,进行设计前的必要资料准备(3天)。 2. 把程序完整运行出来(4天)。 3. 增加改进程序(3天)。 4. 写课程设计报告(3天)。 5. 提交课程设计报告及答辩(1天)任务下达日期:2014 年 6 月 9 日 任务完成日期:2014 年 6 月 22 日指导教师(签名): 学生(签名):王会芳 目 录一 前言1二 需求分析1三 概要设计1四 详细设计4五 改进或增加功能模块说明5六 程序测试6七 课程设计总结7八 致谢8九 参考文献9十 源程序5 成绩管理系统一 前言编写一个函数,要求由菜单进行管理,从键盘输入包括学号、姓名、各门课程、成绩,能够计算每个人的总分和平均分,并按照平均分排序,且用户能够查询学生成绩,还要有增加和减少的功能。将原始数据和计算后的数据保存在磁盘文件中。二 需求分析1要求(1)用C语言实现程序设计;(2)利用结构体进行相关信息处理;(3)画出查询模块的流程图;(4)系统的各个功能模块要求用函数的形式实现;(5)界面友好(良好的人机互交),程序要有注释。2任务(1)定义一个结构体类型数组;(2)输入必要的文字,并在屏幕上显示;(3)画出部分模块的流程图;(4)编写代码;(5)程序分析与调试。3运行环境(1)WINDOWS2000/XP系统(2)TurboC2.0编译环境4开发工具C语言三 概要设计1 功能模块图主菜单界面8退出7保存学员信息6添加学员信息5删除学员信息4更新学员信息3查询学员信息2显示学员信息1输入学员信息2 模块划分定义一个结构体类型student,变量中包括学生基本信息,如姓名、学号和性别,包括三门课程的成绩,平均成绩等。struct studentint num; 学号char name20; 名字char sex; 性别int NO; 名次float score1; 成绩1float score2; 成绩2 float score3; 成绩3float sum; 总分double ave; 平均分;struct student stumax+1; 根据功能模块划分,学生成绩管理系统需建立的以下模块1.输入函数2.整体输出函数3.查询函数4.修改函数5.删除函数6.添加函数7.保存函数8.文件读取函数9.按成绩排序函数10.按学号排序函数11.输出第n个学生信息函数3 总程序处理流程系统的执行应从系统菜单的选择开始,允许用户输入1-8之间的数值来选择要进行的操作要进行的操作,输入其他字符都是无效的。若用户输入1,则调用输入函数,进行输入学生信息操作;若输入2,则调用整体输出函数,进行显示学生信息操作,进入子菜单(按1选择名次输出调用名次输出函数,按2选择按学号输出,调用学号输出函数;)若输入3,则调用查询函数,进行查询学生信息操作。此时进入查询子菜单,查询子菜单允许用户输入13之间的数值来选择查询的方式,其中,1是按学号查询,2是按姓名查询,3是按性别查询。若输入4,则调用修改函数,进行更新学生信息操作,可修改所有基本信息。若输入5,则调用删除函数,进行删除学生信息操作;若输入6,则调用添加函数,进行学生添加操作。此时进入添加界面,其中在输完数据后可选择是否继续添加。若输入7,则调用保存函数,进行保存文件操作;若输入8,则释放表中数据,退出系统。系统的处理流程如图3-1所示。图3-1 总程序流程图3输入学生信息模块功能:用户在主菜单中选择“1”时,用来对学生的基本信息进行录入,用户根据提示输入数据。等待用户输入性别时,如果用户输入m、w之外的字符,则打印出错提示信息。提示用户再次输入,直到输入正确为止。四 详细设计#include#include#include#include#define max 1000void input();void display();void find();void change();void del();void save();void add();void sort(int n);void sortx(int n);void shuchu(int n);int now=0; /*标记位*/struct student 结构体int num;char name20;char sex;int NO;float score1;float score2;float score3;float sum;float ave;struct student stumax+1;主函数部分为主面板的设计void main()/*主函数(菜单)*/int as;doprintf(nt *成绩管理系统*nn);printf(ntttt1.输入学员信息ntttt2.显示学员信息ntttt3.查询学员信息ntttt4.更新学员信息ntttt5.删除学员信息ntttt6.添加学员信息ntttt7.保存学员信息ntttt8.退出);printf(nnntttt请选择);scanf(%d,&as);switch(as)case 1:system(cls);input();break;case 2:system(cls);display();break;case 3:system(cls);find();break;case 4:system(cls);change();break;case 5:system(cls);del();break;case 6:system(cls);add();break;case 7:system(cls);save();break;case 8:system(cls);exit(0);while(1);输入数据部分 确保数据量不会超出范围void input()/*输入函数*/int i,n,j; for(i=0;i+) printf(n请输入添加的学生数量(在%d以内):,max-now); scanf(%d,&n); if(nmax)printf(n请确保添加的数量在%d以内t!,max); if(n=max)break; now=n;for(i=0;in;i+)printf(ntttt输入第%d个学生的信息n,i+1);printf(n输入学生的学号:);scanf(%d,&stui.num);getchar();printf(n输入学生的姓名:);gets();printf(n请输入学生的性别(m/w):);for(j=0;j+)stui.sex=getchar();if(stui.sex=m|stui.sex=w)break;else printf(nttt请输入正确的性别!);getchar();printf(n请输入学生成绩1:);scanf(%f,&stui.score1);printf(n请输入学生成绩2:);scanf(%f,&stui.score2);printf(n请输入学生成绩3:);scanf(%f,&stui.score3);stui.sum=stui.score1+stui.score2+stui.score3; stui.ave=(stui.score1+stui.score2+stui.score3)/3.0;sort(n);save(); system(cls);整体输出函数void display()/*整体输出函数*/int as,i;printf(nntttt学生成绩列表nnn); printf(nntttt1.按名次输出ntttt2.按学号输出ntttt);printf(ntttt请选择);scanf(%d,&as);switch(as) case 1:sort(now);for(i=0;inow;i+)shuchu(i);break; case 2:sort(now);sortx(now);for(i=0;inow;i+)shuchu(i);break;查询信息函数void find()/*查询函数*/int num,as,i;char name20,ch;printf(nttt请选择nnn);printf(nttt1.按学号查询nttt2.按姓名查询nttt3.按性别查询nttt); scanf(%d,&as);switch(as) case 1:system(cls);printf(请输入要查询的学号:); doscanf(%d,&num); for(i=0;i=now) printf(ntt该生信息不存在!请重新输入学号:);while(i=now);break; case 2:system(cls);getchar();printf(请输入要查询的学生姓名:); do gets(name); for(i=0;i=now) printf(nnttt该生信息不存在!请重新输入姓名:); while(i=now);break;case 3:system(cls);getchar();printf(请输入要查询的学生性别:); ch=getchar(); do for(i=0;i=now) printf(nnttt该生信息不存在!请重新输入姓名:); while(i=now);break;修改信息函数void change()/*修改函数*/int num,as,j,i,m;char a; printf(nttt请输入要更新的学生的学号:);scanf(%d,&num);for(i=0;inow;i+)if(stui.num=num)for(j=0;j=now)printf(nntttt学号输入有误!nn);删除函数void del() /*删除函数*/int num,i;printf(nttt输入要删除的学员学号);scanf(%d,&num);for(i=0;i=now)printf(nnnttt学号输入有误!删除失败!nn);break;if(stui.num=num)if(i=now-1)now-=1;else stui=stunow-1; now-=1; printf(nnttt删除成功!nn); sort(now);break;save();添加数据函数 可防止数据量超标 但一般不会出现该情况。void add()/*添加函数*/char ch;int j;printf(ntttt还能添加%d个学生信息!nn,max-now);if(now=max) printf(nnntt存储空间已满无法继续添加!nn);break; printf(nttt是否继续添加?(Y/N); getchar(); ch=getchar();if(ch=N|ch=n)break; while(ch!=N|ch!=n);保存函数void save()/*文件保存函数*/FILE *fp;/*fp为文件指针*/int i;if(fp=fopen(stu_infer,wb)=NULL)printf(nnttt文件打开失败!);return;for(i=0;imax+1;i+)if(fwrite(&stui,sizeof(struct student),1,fp)!=1)printf(nnttt文件保存错误!);fclose(fp);printf(n 保存成功!n);读入函数void read()/*从磁盘读入函数*/int i;FILE *fp;/*fp为文件指针*/fp=fopen(stu_infer,rb);for(i=0;imax+1;i+)fread(&stui,sizeof(struct student),1,fp);fclose(fp);按成绩排序函数用两个嵌套实现。void sort(int n)/*按成绩排序函数(n为排序个数)*/struct student temp;int i,j;for(j=0;jn-1;j+)for(i=0;in-j-1;i+)if(stui.sumstui+1.sum)temp=stui;stui=stui+1;stui+1=temp;for(i=0;inow;i+)stui.NO=i+1;按学号排序void sortx(int n)/*按学号排序(n为排序个数)*/struct student temp;int i,j;for(j=0;jn-1;j+)for(i=0;istui+1.num)temp=stui;stui=stui+1;stui+1=temp;输出某一个学生信息void shuchu(int n)/*输出第n个学生信息的函数*/printf(nt学号t姓名t性别t成绩1t成绩2t成绩3t总成绩t平均分t名次n);printf(t%dt%st%ct%.2ft%.2ft%.2ft%.2ft%.2ft %dn,stun.num,,stun.sex,stun.score1,stun.score2,stun.score3,stun.sum,stun.ave,stun.NO);五 改进或增加功能模块说明(1)可以按照学号,姓名,性别等方式查询信息,灵活度大;(2)可以根据需要有选择性的进行数据修改,如只修改学号;(3)在修改后可以选择继续修改也可以选择终止;(4)在录入性别方面是用了防输错功能,防止输入错误信息。六 程序测试(1)测试系统能否正确显示菜单选项执行程序后,得到的界面如图6-1所示,该图显示有本系统的菜单选项。图6-1 学生成绩管理主菜单界面(2)测试系统能否正确输入学生信息输入如下数据:学号 姓名 性别 成绩1 成绩2 成绩3101 wang w 72 88 87102 li w 80 90 92103 sun m 90 70 89进入主菜单界面后,输入数字1进入输入学生信息界面,提示输入人数,然后按提示输入学生信息,输入信息界面如下所示。图6-2 输入学生信息界面(3)测试程序能否正确显示学生信息在主菜单中如果输入数字2,系统会将刚才输入的学生信息按照预定格式显示出来,分为按学号排序和按成绩排序。输入数字1,显示信息界面如下图6-3 显示学生信息界面(4)测试系统能否正确查询学生信息在主菜单界面中,输入数字3,则进入查询学生信息子菜单,允许输入数字1-3,分别按照学号、姓名、性别三种不同方式对学生信息进行查询,例如输入1按学号查询,下图是按学号查询的学号为103的信息图6-4 显示查询结果界面(5)测试系统能否正确更新学生信息在主菜单界面输入数字4,进入更新学生信息界面,按照提示输入要更新的学生的学号,并且可供单个数据修改,修改后还可以提示继续修改与否。更新学生信息界面如图所示。图6-5 更新学生信息界面(6)测试系统能否正确删除学生信息在主菜单界面输入数字5,进入删除学生信息界面,根据提示输入学生学号。删除学生信息界面如图6-6所示。图6-6 删除学生信息界面(7)测试系统能否保存文件在主菜单界面输入数字7,进入保存文件界面,界面如图所示。图6-7 保存文件界面七 课程设计总结(1)对于某一部分程序,参考C语言课程设计时,有些知识点还没有学到,不明白什么意思,后来经过查阅资料、请教老师,掌握了这些知识点。(2)刚开始发现程序中有时数据可算平均分,有时却算不成。经过大量的数据和排除可能性发现只有第一次输进去的数据能计算,而后来增加进去的不能计算,查看源程序发现原来是插入数据模块丢掉了求平均数的命令,怪自己粗心,浪费了不少时间在这个简单问题上。(3)第一次做课程设计对我来说,是一件让人痛苦的事情。即便两周的时间,对我来说仍是个困难之事。开始的时候根本不清楚课程设计是要设计什么,不知道到底怎样设计,因为平时所写的c程序都是一些简单而且基本的C程序,根本不是解决实际情况,符合客户要求的工程程序,所以觉得无从下手,觉得很困难,甚至没有一个思路。 开始编写修改和删除程序时,很头疼,去向其他人寻求帮助,在学长和其他同学的帮助和提示下,我编完了修改程序,但设计过程中仍都有错误存在,困难重重。遇到困难就开始用大量的时间进行修改以及整理,理出思路。最终将程序调试成功, 而成功的瞬间是最快乐最开心的时刻。(4)通过这次课程设计我学会了很多东西,觉得自己设计的东西更加接近实际的程序要求。更让我懂得了团队合作的重要性,知道了如何使团队一起合作构建程序的方法。总的来说,我收获很大,以后我会更努力地学习。八 致谢 由于我是第一次做课程设计,没有过经验,而且时间也不长,所以对我来说是一个非常困难的事情,但是在这种环境下,是同学和专业指导老师们细心、耐心的指导我,在他们的帮助和提示下,我才艰难的完成了这次课程设计的任务,虽然任务很艰难,我却很开心,因为成功的瞬间是我最快乐最开心的时刻。 并且通过程序设计我学会了很多东西,觉得自己设计的东西更加接近实际的程序要求。更让我懂得了团队合作的重要性,知道了如何使团队一起合作构建程序的方法。总的来说,我收获很大,以后我会更努力地学习。 参考文献1张福祥. C语言程序设计M. 辽宁大学出版社,2008.12张福祥,王萌C语言程序设计习题解答与实验实训M沈阳:辽宁大学出版社,20083牛莉,刘远军等计算机等级考试辅导教程M北京:中国铁道出版社,2008十 源程序#include#include#include#include#define max 1000void input();void display();void find();void change();void del();void save();void add();void sort(int n);void sortx(int n);void shuchu(int n);int now=0;/*标记位*/struct studentint num;char name20;char sex;int NO;float score1;float score2;float score3;float sum;double ave;struct student stumax+1;void main()/*主函数(菜单)*/int as;doprintf(nt *成绩管理系统*nn);printf(ntttt1.输入学员信息ntttt2.显示学员信息ntttt3.查询学员信息ntttt4.更新学员信息ntttt5.删除学员信息ntttt6.添加学员信息ntttt7.保存学员信息ntttt8.退出);printf(nnntttt请选择);scanf(%d,&as);switch(as)case 1:system(cls);input();break;case 2:system(cls);display();break;case 3:system(cls);find();break;case 4:system(cls);change();break;case 5:system(cls);del();break;case 6:system(cls);add();break;case 7:system(cls);save();break;case 8:system(cls);exit(0);while(1);void input()/*输入函数*/int i,n,j; for(i=0;i+) printf(n请输入添加的学生数量(在%d以内):,max-now); scanf(%d,&n); if(nmax)printf(n请确保添加的数量在%d以内t!,max); if(n=max)break; now=n;for(i=0;in;i+)printf(ntttt输入第%d个学生的信息n,i+1);printf(n输入学生的学号:);scanf(%d,&stui.num);getchar();printf(n输入学生的姓名:);gets();printf(n请输入学生的性别(m/w):);for(j=0;j+)stui.sex=getchar();if(stui.sex=m|stui.sex=w)break;else printf(nttt请输入正确的性别!);getchar();printf(n请输入学生成绩1:);scanf(%f,&stui.score1);printf(n请输入学生成绩2:);scanf(%f,&stui.score2);printf(n请输入学生成绩3:);scanf(%f,&stui.score3);stui.sum=stui.score1+stui.score2+stui.score3; stui.ave=(stui.score1+stui.score2+stui.score3)/3.0;sort(n);save(); system(cls);void display()/*整体输出函数*/int as,i;printf(nntttt学生成绩列表nnn); printf(nntttt1.按名次输出ntttt2.按学号输出ntttt);printf(ntttt请选择);scanf(%d,&as);switch(as) case 1:sort(now);for(i=0;inow;i+)shuchu(i);break; case 2:sort(now);sortx(now);for(i=0;inow;i+)shuchu(i);break;void find()/*查询函数*/int num,as,i;char name20,ch;printf(nttt请

温馨提示

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

评论

0/150

提交评论