




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计(论文)编 号: 学 号: 201040420120 课 程 设 计教 学 院计算机课程名称高级语言程序设计题 目学生成绩管理系统专 业网络工程班 级1班姓 名曹彦同组人员唐舸轩、蔡敏、黄伴、程良康、张雄峰指导教师谢晋2013年1月7日目 录一 概述21.课程设计的目22.课程设计的要求2二 总体方案设计3三 详细设计43.1 程序功能描述43.2 程序流程图4四 程序的调试与运行结果说明54.1 程序源代码54.2 调试并运行程序18五 课程设计总结23参考文献24一 概述1. 课程设计的目的1理解和掌握该课程中的有关基本概念,程序设计思想和方法。2培养综合运用所学知识独立完成课题的能力。3培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。4掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。2. 课程设计的要求1.界面友好,函数功能要划分好2.总体设计应画一流程图3.程序要加必要的注释4.要提供程序测试方案5.程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。二 总体方案设计使用面向对象的程序设计方法,程序的功能主要包括:对学生成绩信息的增、删、查、改等基本功能,并能够按照学号或姓名及成绩等进行排序和筛选,使用文件进行数据的存储和维护,能够按照班级或专业进行分类的管理。程序中使用了双向链表保存数据的底层数据结构,实现起来很简单。C+推荐使用标准库,这也是目前编程的方向,推荐此题目为本课程设计作为选做内容,可以根据实际教学情况决定,目的是使学生熟悉和了解C+的标准库。本人负责部分:1.删除一个学生的成绩记录:通过两个结点指针的使用来实现结点的删除,这两个指针分别是pNodepre,pNodeTal,其中pNodepre指针指向前一个结点,pNodeTal指针指向紧接的后一个结点,其中以pNodeTal指向的结点为基准进行比较,刚开始这两个结点分别指向第一个空结点和第一个实结点,若不满足姓名匹配,则两个指针同时向后移动一个单位,知道找到要删除的结点为止,当删除的结点是第一个实结点时,利用语句m_head-next = pNodeTal-next实现,若是最后一个结点用pNodepre-next = NULL语句实现,否则用pNodepre-next = pNodeTal-next语句实现。2.计算学生成绩总和:每输入一个同学的一科成绩时,程序将这科成绩自动加到totalmark中,直到第五科成绩。三 详细设计3.1 程序功能描述该程序完成的功能如下:输入学生信息,由addstudent()函数完成在查找学生信息时按名字查找,由searchbyname()函数完成将学生成绩信息保存到指定路径的文档中,由save()函数完成根据学生总成绩按降序排序,由sortbymark()函数完成根据学生姓名删除想要删除的学生信息,由Delete()函数完成可根据姓名更改学生信息,由Change()函数完成将文件信息保存到链表中,由readfiletolist()函数完成添加学生信息,由addstudent()函数完成从文件读取信息,由display()函数完成10、显示学生信息,由show()函数完成3.2 程序流程图程序流程图如下:保存学生信息在文件中并读取可实现的功能根据姓名查找学生信息保存文件信息到链表中根据姓名删除学生信息计算总成绩并按此排序输入学生信息根据姓名修改学生信息四 程序的调试与运行结果说明4.1 程序源代码完整的程序如下:#include stdafx.h#include Student.h#include#include#include#includeusing namespace std;enum SUBJECT=5;/一共五门功课typedef structchar subject10;/科目名称int score;/科目成绩markinfo;typedef struct studentnodemarkinfo markSUBJECT;int totalmark;char name10;/学生姓名studentnode * next;studentnode;class CStudent public:CStudent();virtual CStudent();int addstudent();int countmark();int sortbymark();int save();int show();int display();int readfiletolist();int searchbyname();int Delete();int Change();private:studentnode *m_head;CStudent:CStudent()m_head = new studentnode;m_head-next = NULL;CStudent:CStudent()studentnode *pHead,*pTail;pHead=m_head-next;while(pHead)pTail=pHead-next;delete pHead;pHead=pTail;delete m_head;/输入学生姓名,成绩等数据,并保存在链表中int CStudent:addstudent()studentnode *pStuNode;int nCount;char check;system(cls);cout*endl;cout请输入学生信息:endl;dopStuNode=new studentnode;cin.ignore(); coutname);nCount=0;pStuNode-totalmark=0;docoutmarknCount.subject);coutpStuNode-marknCount.score;while(pStuNode-marknCount.score 100 | pStuNode-marknCount.score totalmark=pStuNode-totalmark+pStuNode-marknCount.score;getchar(); while(SUBJECT != +nCount);/头插法if(m_head-next=NULL)m_head-next=pStuNode;pStuNode-next=NULL;else pStuNode-next=m_head-next;m_head-next=pStuNode;coutnext;if( pStuNode = NULL )cout没有学生,请重新输入endl;system(pause);return 0;else cout*endl;cout学生成绩汇总:endl;while(pStuNode)cout姓名:name 总成绩:totalmarknext;system(pause);return 0;/按照总成绩大小对成绩进行排序int CStudent:sortbymark()studentnode *pmove1=m_head-next;studentnode *pmove2,*pmax,*ppre1,*ppre2,*pmaxpre,*ps=pmove1;if(m_head-next=NULL)cout没有记录,请添加next; ppre1=pmove1,pmaxpre=ppre1,pmove1=pmove1-next,pmax=pmove1)ppre2=pmove1;pmove2=pmove1-next;/排序 : pmaxpre指向最大值的前一个元素 pmax总是指向总成绩最大的元素 ppre2总是指向比较的第二个元素 /pmove1总是指向插入点的第一个元素 pmove2总是指向即将成为 第二个比较元素 的元素 for( ; NULL != pmove2; )if(pmove2-totalmark pmax-totalmark)pmaxpre=ppre2;pmax=pmove2;ppre2=pmove2;pmove2=pmove2-next;if(pmove1-next = pmax) /交换max和move1。ppre1-next=pmax;pmove1-next=pmax-next;pmax-next=pmove1;pmove1=pmax; elseps=pmove1-next;pmove1-next = pmax-next;pmax-next =ps;pmaxpre-next = pmove1;ppre1-next = pmax;pmove1 = pmax;cout已经按照从大到小排序next;cout请输入保存的地址endl;cin.ignore(); gets(szaddr);FILE *fp;if(fp=fopen(szaddr,w)=NULL) /*打开文件*/ cout提示:无法打开这个文件!next;fprintf(fp,%dn,nNum);pNode=m_head-next;while(pNode)fprintf(fp,%-8s,pNode-name);nCount=0;while(SUBJECT != nCount)fprintf(fp,%-6s %-7.1d,pNode-marknCount.subject,pNode-marknCount.score);nCount+;fprintf(fp,n);pNode=pNode-next;fclose(fp);cout已经保存,请查阅next;int nCount;if(m_head-next=NULL)cout没有学生记录,请添加endl;system(pause); return 0;else while(pNode)cout姓名:name;nCount = 1;while(SUBJECT+1 != nCount)cout科目:marknCount-1.subject;cout 成绩:marknCount-1.score;nCount+;coutnext;system(pause);return 0;/从文件中读取信息,并显示int CStudent:display()ifstream fin;char buf100;char str25;cout请输入路径及文件名:endl;cin.ignore();gets(str);fin.open(str);if(!fin)cout没有此文件endl;system(pause);return 0;while(fin)fin.getline(buf,sizeof(buf);coutbufendl;system(pause);return 0;/从文件中读取数据,并保存在链表中int CStudent:readfiletolist()char str25;cout请输入路径及文件名:endl;cin.ignore();gets(str);FILE *fp;fp = fopen(str,rb);if(!fp)cout没有此文件endl;system(pause);return 0;studentnode *pNode;int nNum = 0;fscanf(fp,%d,&nNum);for(int i = 0; itotalmark=0;fscanf(fp,%s,pNode-name);int nCount=0;while(SUBJECT != nCount)fscanf(fp,%s%d,pNode-marknCount.subject,&pNode-marknCount.score);pNode-totalmark+=pNode-marknCount.score;nCount+;if(NULL = m_head-next)m_head-next=pNode;pNode-next=NULL; elsepNode-next=m_head-next;m_head-next=pNode;cout信息已经保存在链表中next=NULL)cout没有学生,请添加或者从文件中读取next;char findname10;int i;coutname,findname)cout经查找,找到该生信息如下:endlendl;cout姓名:name;i=1;while(i!=SUBJECT+1)cout科目:marki-1.subject;cout 成绩:marki-1.score;i+;coutnext;cout没有此学生,请添加或者从文件中读取next=NULL)cout没有学生,请添加或者从文件中读取endl;system(pause);return 0;char szName24;coutszName;studentnode *pNodepre = m_head;studentnode *pNodeTal = m_head-next;while(NULL != pNodeTal)if(!strcmp(pNodeTal-name,szName)if(pNodepre = m_head)m_head-next = pNodeTal-next;delete pNodeTal;cout删除成功!next)pNodepre-next = NULL;delete pNodeTal;cout删除成功!next = pNodeTal-next;delete pNodeTal;cout删除成功!next;cout没有此学生,请添加或者从文件中读取next=NULL)cout没有学生,请添加或者从文件中读取endl;system(pause);return 0;char szName24;coutszName;studentnode *pStuNode = m_head-next;int sorce;while(NULL != pStuNode)if(!strcmp(pStuNode-name,szName)int nCount = 0;nCount=0;pStuNode-totalmark=0;docoutszBuf;strcpy(pStuNode-marknCount.subject,szBuf);coutsorce;pStuNode-marknCount.score = sorce;while(sorce 100 | sorce totalmark=pStuNode-totalmark+pStuNode-marknCount.score;getchar();while(SUBJECT != +nCount);cout修改成功!next;cout没有此学生,请添加或者从文件中读取endl;system(pause);return 0;int showmenu();int main(int argc, char* argv)int menuitem,flag=1;CStudent stu;while(flag)system(cls);menuitem=showmenu();switch(menuitem)case 1:stu.addstudent();break;case 2:stu.countmark();break;case 3:stu.sortbymark();break;case 4:stu.save();break;case 5:stu.show();break;case 6:stu.display();break;case 7:stu.readfiletolist();break;case 8:stu.searchbyname();break;case 9:stu.Delete();break;case 10:stu.Change();break;case 11:flag=0;break;return 0;int showmenu()int choice;char * menu11= 1:输入学生成绩保存到链表n,2:计算每位学生总成绩n,3:按照总成绩大小对记录进行排序n,4:输出所有学生成绩到一个文件中n,5:显示新输入的学生信息n,6:从文件中读取信息n,7:将文件信息保存在链表中n,8:根据姓名查找学生记录n,9:根据姓名删除学生记录n,10:根据姓名修改学生记录n,11:结束程序n;cout *endl;cout * 学生成绩管理系统 *endl;cout *endl;for(choice=0;choice11;choice+)cout menuchoice;cout *endl;coutplease choose to continuechoice;while(choice11|choice1); /?当输入不在0与10之间return choice;4.2 调试并运行程序结果依次如下所示初始界面:输入学生信息显示学生信息计算学生总成绩按总成绩排序读入文件中从文件显示将信息保存在链表中按姓名查找学生成绩删除学生信息修改学生信息删除学生信息退出程序五 课程设计总结在这次的课程设计当中,我觉得我对C+这门课的理论知识有了更进一步的理解,加强了我们动手、思考和解决问题的能力。巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。而且做课程设计同时也是对课本知识的巩固和加强,平时看课本时,有些问题就不是很能理解,做完课程设计,那些问题就迎刃而解了。而且还可以记住很多东西。认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。所以这个期末测试之后的课程设计对我们的作用是非常大的。 这次的课程设计使我懂得了理论与实际相结合是很非常重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在整个设计过程中,构思是很花费时间的。调试时经常会遇到这样那样的错误,有的是因为粗心造成的语法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年度部门安全培训总结课件
- 婴戏纹执壶课件
- 外包劳务施工合同5篇
- 委外队伍安全培训总结课件
- 姓氏歌课件教学课件
- 妆容与形象设计课件
- 2025新五上语文课文词语专项训练
- 文库发布:妄想症课件
- 2025年孟州市事业单位考试真题
- 平语讲孝道课件
- 2024年全国统一高考英语试卷(新课标Ⅰ卷)含答案
- 综合仓储物流服务合同
- 高中英语:倒装句专项练习(附答案)
- DB1331-T 025.4-2022 雄安新区工程建设关键质量指标体系:合交通
- 土地承包经营权长期转让协议
- 浙能笔试题库
- 2023年航空公司招聘:机场安检员基础知识试题(附答案)
- 道路车辆清障施救服务 投标方案(技术方案)
- 港口机械设备的维护与故障排除考核试卷
- 糖尿病临床病例分析经典案例
- 用绝对值的几何意义来解题市公开课一等奖省赛课微课金奖课件
评论
0/150
提交评论