




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河南工程学院高级程序设计语言课程设计成果报告学生成绩管理系统设计与实现学生学号: 学生姓名: 学 院: 计算机学院 专业班级: 软件工程1341 专业课程: 高级程序设计语言指导教师: 2014 年 6 月 27 日题 目学生成绩管理系统设计与实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代码的排版总 评 成 绩指导教师评语: 日期: 年 月 日目 录第1章 课程设计的目的与任务11.1 课程设计目的11.2 课程设计主要任务1第2章 系统实现思路22.1 学生成绩管理系统设计思路22.2 课程设计所用设施22.3 课程设计思路的核心2第3章 系统详细设计33.1 需求分析33.2 系统功能模块33.3 模块框架图以及重要数据的设计53.4 程序实现功能6第4章 系统调试运行134.1 调试分析134.2 调试结果14第5章 系统的使用说明与数据测试175.1 使用说明175.2 数据测试17课程设计体会19参考文献20附录 源程序21第1章 课程设计的目的与任务1.1 课程设计目的通过高级程序设计语言课程设计,使学生能将学到的面向对象的程序设计思想用到具体的工作和学习中,加深对类与对象的理解,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提高学生分析问题、解决问题,从而运用所学知识解决实际问题的能力。1.2 课程设计主要任务通过本课程设计,使学生进一步深化掌握C+语言的基本知识;掌握结构化程序设计的基本方法和设计技巧,初步了解算法分析与设计概念;理解面向对象程序设计思想,初步具备运用面向对象程序设计方法进行程序设计的能力。能熟练应用VC+集成环境进行C+语言程序的编写、编译与调试,提高学生对本课程知识综合运用能力。为了实现对学生的成绩便于统计与查找,特制作学生成绩管理系统。设计内容如下:设计四个类,包括学生类(描述学生基本信息);成绩类:班级类;课程类(描述课程信息:课程编号,科目名称,如高等数学,大学英语等);学生成绩及课程信息用文件保存,程序执行时从文件读入;能按学期,按班级完成对学生成绩的录入、修改,能按班级统计学生的成绩;求学生的总分及平均分,并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单。 设置学生的成绩信息:学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所占百分比 。 计算学生总评成绩:总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比)。 显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息。分单人显示和以班输出(班成绩单格式输出到文件)。 注意,至少应包含一个班、30人、三门课。第2章 系统实现思路做题时,首先,应该先读懂题意,了解其核心。设想思路,然后将编译代码写到纸上。最后再输入编译器中编译调试。得出最终的结果。2.1 学生成绩管理系统设计思路为了方便老师和学生的使用,我们运用我们所学的知识,设计思路,明确其重点与核心。首先,看到题目的要求后,应该有个大致的轮廓。调用什么函数,有个做题方向与思路。我看到这道题,先想到用到的知识点与分了几种情况。其次,是利用自己的课本以及网络去了解用到的知识点。这个系统有以下几种模块:(1) 设计录入模块,将学生的信息录入系统;(2)将所有的学生信息显示出来,于是就有了显示模块;(3)输入成绩后要对成绩排序,于是就有了排序模块;(4)而且以免出错,便有删除和修改模块;(5)安全退出模块。2.2 课程设计所用设施PC机、VC6.0语言编辑、编译运行工具、文档编辑软件等。2.3 课程设计思路的核心这道题的设计核心是实现老师方便输入和统计学生的各科成绩,并且便于学生查找。其思路的核心,首先,我想到的就是运用类和文件流的输入输出,运用类使程序更加简洁、清晰。运用文件流的输入输出可以保护文件不被破坏。将数据储存在文件当中。明确了其运用的知识,其次,更深入的构思其数据和运用的函数。最后,从其核心开始入手,然后,渐渐地扩展其相关内容。第3章 系统详细设计明确的分析了其思路和核心,我们也就应该详细的去设计其思路,分析其所需要设计的内容和参数以及了解所要设计函数的功能。更进一步的将思路深入化,将其分析的通彻透底。3.1 需求分析在设计过程中,我们应该根据2.1课程设计任务的思路的笼统的思考思路,在来系统的进行分析与讨论,最后得出想要的需求分析。 需求分析有如下几点:(1)能对学生各科成绩进行录入;(2)能对学生的成绩进行增加;(3)能对学生的成绩进行删除;(4)能对学生的成绩进行修改;(5)能对学生的成绩按总成绩,姓名,进行查询;(6)能输出学生的所有数据;(7)能进行成绩统计;(8)能进行总分查询排名。3.2 系统功能模块1.函数模块学生成绩管理系统程序采用了结构化程序设计的思想,由两个源文件和两个.h头文件组成,程序中除了主函数还包括多个函数,分别包含在四个头文件当中。以下是这些函数的函数原型及功能设计。(1)void Input() 函数功能:输入学生的信息。(2)void ReadFile(istream & in) 函数功能:读取文件中的信息。 (3)void Show()函数功能:将学生信息展现到显示屏。(4)void Display()函数功能:进入主菜单页面。(5)void AddItem()函数功能:进入下一个操作的页面。(6)getch()函数功能:数是从控制台获取一个输入字符。(7)void ShowMenu()函数功能:目录的函数。(8)void Find()函数功能:查找学生信息的函数。(9) void ModifyItem() void RemoveItem() 函数功能:删除和修改学生信息。(10)void Swap(Student *,Student *)函数功能:交换两个combox变量的数据域。(11)void Sort()函数功能:对当前链表进行排序。(12)void save()函数功能:保存函数。2.主菜单模块 了解了其使用的函数以及其功能后,然后我们就应该明确其主菜单所含有的模块。学生成绩查询系统有:成绩录入、增加、删除、修改,数据查询,排序显示构成。3.3 模块框架图以及重要数据的设计1.根据期末课程设计要求,本组统划分成七个主功能模块:录入学生信息及成绩模块、修改学生信息模块、删除学生信息模块、查询信息模块、输出模块和系统退出和保存模块,系统功能结构图如图3-1。学生成绩管理系统主函数及主菜单添加学生退除系统保存信息显示学生成绩查询学生成绩修改学生信息删除学生信息按照姓名查找按照学号查找图3-1 模块框架图2.重要数据的数据结构的设计。学生成绩管理的记录项用结构体student 表示,包括7个属性name、Id、Cnum、Enum、Mnum、sum、average分别代表学生的姓名、学号、语文、数学、英语三门课程以及总分和平均分。内容如下:class studentchar name20; char Id20; double Cnum; double Mnum; double Enum; double sum; double average;3.4 程序实现功能用户运行程序后进入系统主界面,在主界面用户可以输入所有学生的数据并保存到文件中,也可以读取文件中已有的学生数据。用户在保存数据的时候,如果保存位置没有文件则自动新建一个文件进行保存。本系统同时只能对一个数据文件进行相关操作,不能同时打开多个数据文件,其类似于单用户操作系统。 当用户读取学生数据后可对其进行显示,插入,删除,修改,排序,总分,计算平均分等相关操作。用户在操作过程中可随时对当前文件进行保存到文件操作,以防止修改的数据丢失。保存通过以下函数实现的:void Studentmassage:Save() out.open(sort.txt); for(Student *p=Head-Next;p!=End;p=p-Next) outnametIdtCnumt MnumtEnumtsumnameIdCnumMnumEnumsumaverage; 对系统进行操作,首先的录入学生的成绩。所以其录入函数如下:void AddItem() End-Input(); End-Next=new Student; End=End-Next; cout添加成功!endl; cout输入任意字符!继续; getch(); 录入之后可以进行显示所有学生信息.其包括:姓名,学号,各科成绩以及总成绩和平均分。显示函数如下: void Show() cout姓名:nameendl学号:IdendlC+:Cnumendl 数学:Mnumendl英语:Enumendl总成绩:sum平均分averageendlendlname,p1-name); strcpy(temp-Id,p1-Id); temp-Cnum=p1-Cnum; temp-Mnum=p1-Mnum; temp-Enum=p1-Enum; temp-sum=p1-sum; strcpy(p1-name,p2-name); strcpy(p1-Id,p2-Id); p1-Cnum=p2-Cnum; p1-Mnum=p2-Mnum; p1-Enum=p2-Enum; p1-sum=p2-sum; strcpy(p2-name,temp-name); strcpy(p2-Id,temp-Id); p2-Cnum=temp-Cnum; p2-Mnum=temp-Mnum; p2-Enum=temp-Enum; p2-sum=temp-sum; 然后再通过对链表的排序来完成对学生成绩的排序。其函数如下:void Studentmassage:Sort()/对当前链表进行排序 cout Sorting.endl; Student *p=NULL,*p1=NULL,*k=NULL; int n=Studentmassage:ListCount(); if(nNext;p!=End;p=p-Next) for(k=p-Next;k!=End;k=k-Next) if(p-sumk-sum) Studentmassage:Swap(p,k); cout 排序完成!endl; getch(); return; 使用用户也可以通过姓名和学号利用系统的提示,查找某个学生的信息,以及个人资料和成绩。其查找函数如下:void Studentmassage:Find() char name20 ,Id10; int x; Student * p=NULL; coutntt*n; couttt 1.按学生的姓名查找ntt 2.按学生学号查找; coutx; switch(x) case 1:coutname; if(p=FindItem(name) p-Next-Show(); cout输入任意字符!继续; getch(); else couttt没有找到该姓名的学生!nendl; cout输入任意字符!继续; getch(); break; case 2: coutId; if(p=FindID(Id) p-Next-Show(); cout输入任意字符!继续; getch(); else couttt没有找到该学好的学生!nendl; cout输入任意字符!继续; getch(); break; 有时学生成绩录入出错时,也可以修改,严重时,可以删除。修改程序如下:void Studentmassage:ModifyItem() /修改信息 char name20; Student * p=NULL; coutname; if(p=FindItem(name) couttt已找到学生的信息,请输入新的信息!Next-Input(); cout修改成功!endl; cout输入任意字符!继续; getch(); else couttt没有找到!endl; cout输入任意字符!继续; getch(); 如若删除,其删除程序如下:void Studentmassage:RemoveItem() / 删除信息 char name20; Student * p=NULL,*temp=NULL; couttt请输入要删除的学生的姓名:name; if(p=FindItem(name) temp=p-Next; p-Next=p-Next-Next; delete temp; couttt删除成功!endl; cout输入任意字符!继续; getch(); else couttt没有找到!endl; cout输入任意字符!继续; getch(); 通过这些程序可以进行对学生的个人信息进行统计、查找、修改、删除以及显示等操作。 第4章 系统调试运行有了明确的核心以及将思路分析的清清楚楚,并且也初步的编译的程序写到了纸上,我们下一步就应该将代码输入编译器调试运行。4.1 调试分析 调试是整个程序编写过程中十分重要也是很困难的一部分,在这个过程中用了不少的时间进行程序的调试,在调试过程中遇到的相关问题如下: 1.语法错误 (1)语句的最后忘记了加上“;”,使程序发生错误。 (2)把“”写反,以及字符与字符串的操作问题,这些是比较简单的错误,很容易分辨出来,并改正之。 (3)函数的返回值问题,也是比较容易找出并解决的问题。 2.逻辑错误 (1)文件的写入与读出,刚开始对文件的操作不太明白,一致不能很好的操作文件,其中最大的问题是对已存在的文件读取问题,通过“显示全部学生成绩” 将数据从文件中读取,可是在使用过程中总是出现读出错误,出现乱码。 (2)内存的分配问题,这也是困惑了我好久的问题。对于我们初学者来说对内存的分配和释放问题是比较抽象和模糊的难题,本来使用链表的方式存储数据,然而待到排序时出现了交换数据困难的问题,以及分配空间繁琐释放空间不及时的问题,造成空间浪费使得程序运行效率低的问题。因此最后采用了顺序存储记录的方式,这样就能改变前述问题。 整个调试过程中主要是这么几个问题,其余的是一些小问题,很容易的就调试出来了。所以,以后在输入代码时,我们应该用心仔细的去输入,避免一些小的错误的发生。4.2 调试结果经过多次的运行失败,然后把错误改正。然后再出错,然后再改。反复的修改,让我们发扬了爱迪生发明灯泡的对追求成功锲而不舍的精神,终于成功的将程序运行了出来。调试的步骤有如下几步: (1)进入界面:在此界面按任意键进入主菜单,如图4-1。图4-1 进入主界面(2)主菜单:在此界面用户可以选择要操作的选项,回车之后即可进入相关页面进行操作(例如选择1 回车,即可进入输入学生数据页面),如图4-2。图4-2 主菜单(3)在下面的界面按照系统提示完成操作,如图4-3。图4-3 录入操作(4)其输出成绩图,如下图4-4。图4-4 录入结果第5章 系统的使用说明与数据测试调试运行后,并且所设计的程序运行成功后。为了方便用户使用,我们就应该将使用的方法和说明以及数据的测试公布给使用用户。5.1 使用说明用户运行程序后进入系统主界面,在主界面用户可以打开或者新建数据文件。用户新建或者打开文件要符合操作系统的要求,如果用户打开不存在的文件,那么系统将输出操作错误,并对其进行相关操作。本系统同时只能对一个数据文件进行相关操作,不能同时打开多个数据文件,其类似于单用户操作系统。 当用户指定当前文件后可对其进行显示,插入,删除,修改,计算平均分等相关功能。用户在操作过程中可随时对当前文件进行保存到文件操作,以防止修改的数据丢失。操作完当前文件后,用户可以关闭该文件,在不退出本系统的前提下另行打开或者新建数据文件对其进行相关操作。5.2 数据测试 经过多次测试程序运行稳定,无致命错误。根据本次课程设计的要求对数据进行输入并分析数据输出结果。通过测试发现当用户正确输入时系统能够正确显示用户的输入,当用户输入错误时,系统并不会出现致命错误但其将显示非用户期望的数据。例如:当用户查询学生记录时,系统将提示选择查找方式。如图5-1。图5-1 查询然后按照自己所了解的信息,输入数字,选择查找方法。例如:我知道姓名就选1。如图5-2。图5-2 输入信息然后输入学生姓名,便可得到学生的个人信息。如图5-3。图5-3 查找结果课程设计体会通过这次实训的学习,我深刻的意识到自己的不足,在实训的过程中我才发现我平时学到的只是皮毛。这次实训给了我不少打击,我只有参考资料,问问同学问问老师来不断完善,最后在黄老师的指导下我完成了这次实验报告,这次作业的完成真可谓艰难,这我才意识到自己知识的严重不足,今后我会更加努力完善自己!参考文献1 谭浩强.C+面向对象程序设计(第二版).清华大学出版社2 谭浩强.C+面向对象程序设计题解与上机指导.清华大学出版社3 LippmanBarbara.C+ Primer.人民邮电出版社4 Bjarne Stroustrup.The C+ Programming Language.机械工业出版社5C+语言的设计和演化.机械工业出版社6C+语言的设计和演化(英文版).机械工业出版社7C+程序设计语言(特别版).机械工业出版社附录 源程序# include # include # include #include /用getch(); using namespace std; /Student类 class Student public: char name20; /学生姓名 char Id20; /学生号 double Cnum; /C+课程得分 double Mnum; /数学课程得分 double Enum; /英语课程得分 double sum; /总分 double average; /平均分 Student * Next; /下一个学生的指针 void Input() /输入学生信息 coutname; coutId; coutCnum; coutMnum; coutEnum; sum=Cnum+Mnum+Enum; average=sum/3; void ReadFile(istream & in) /读取学生信息的文件 innameIdCnumMnumEnumsumaverage; void Show() /显示学生的个人信息 cout姓名:nameendl学号:IdendlC+:Cnumendl 数学:Mnumendl英语:Enumendl总成绩:sum平均分averageendlendlNext;p!=End;p=p-Next) p-Show(); coutInput(); End-Next=new Student; End=End-Next; cout添加成功!endl; coutNext!=End;p=p-Next)/匹配成功则返回上一个指针,不成功就返回空 if(!strcmp(p-Next-name,name)return p; return NULL; Student *FindID(char * Id) for(Student * p=Head;p-Next!=End;p=p-Next)/匹配成功则返回上一个指针,不成功就返回空 if(!strcmp(p-Next-Id,Id)return p; return NULL; ; /构造函数 Studentmassage:Studentmassage() Head=new Student; Head-Next=new Student; End=Head-Next; in.open(sort.txt); if(!in) cout这是一个新系统,无学生信息。请先输入。ReadFile(in); if(End-name0=0)break; End-Next=new Student; End=End-Next; in.close(); couttt读取学生信息成功!Next!=End;) temp=Head-Next; Head-Next=Head-Next-Next; delete temp; delete Head,End; /菜单 void Studentmassage:ShowMenu() / 主菜单函数 cout*endl; cout 学 生 成 绩 管 理 系 统 endl; cout endl; cout 1.增加学生成绩 endl; cout 2.显示学生成绩 endl; cout 3.排序统计成绩 endl; cout 4.查找学生成绩 endl; cout 5.删除学生成绩 endl; cout 6.修改学生信息 endl; cout 0.安全退出系统 endl; coutnttntt请选择:; /查找函数 void Studentmassage:Find() /查找学生的信息 char name20 ,Id10; int x; Student * p=NULL; coutntt*n; couttt 1.按学生的姓名查找ntt 2.按学生学号查找; coutx; switch(x) case 1: /根据姓名查找coutname; if(p=FindItem(name) p-Next-Show(); cout输入任意字符!继续; getch(); else couttt没有找到该姓名的学生!nendl; cout输入任意字符!继续; getch(); break; case 2: /根据学号查找 coutId; if(p=FindID(Id) p-Next-Show(); cout输入任意字符!继续; getch(); else couttt没有找到该学好的学生!nendl; cout输入任意字符!继续; getch(); break; /修改信息 void Studentmassage:ModifyItem() /修改学生信息 char name20; Student * p=NULL; coutname; if(p=FindItem(name) couttt已找到学生的信息,请输入新的信息!Next-Input(); cout修改成功!endl; cout输入任意字符!继续; getch(); else couttt没有找到!endl; cout输入任意字符!继续; getch(); /删除信息 void Studentmassage:RemoveItem() / 删除学生信息 char name20; Student * p=NULL,*temp=NULL; couttt请输入要删除的学生的姓名:name; if(p=FindItem(name) temp=p-Next; p-Next=p-Next-Next; delete temp; couttt删除成功!endl; cout输入任意字符!继续; getch(); else couttt没有找到!endl; coutname,p1-name); strcpy(temp-Id,p1-Id); temp-Cnum=p1-Cnum; temp-Mnum=p1-Mnum; temp-Enum=p1-Enum; temp-sum=p1-sum; strcpy(p1-name,p2-name); strcpy(p1-Id,p2-Id); p1-Cnum=p2-Cnum; p1-Mnum=p2-Mnum; p1-Enum=p2-Enum; p1-sum=p2-sum; strcpy(p2-name,temp-name); strcpy(p2-Id,temp-Id); p2-Cnum=temp-Cnum; p2-Mnum=temp-Mnum; p2-Enum=temp-Enum; p2-sum=temp-sum; / int Studentmassage:ListCount()/统计当前链表的记录总数,返回一个整数 if(! Head) return 0; int n=0; for(Student * p=Head-Next;p!=End;p=p-Next) n+; return n; / void Studentmassage:Sort()/对当前链表进行排序 cout Sorting.endl; Student *p=NULL,*p1=NULL,*k=NULL; int n=Studentmassage:ListCount(); if(nNext;p!=End;p=p-Next) for(k=p-Next;k!=End;k=k-Next) if(p-sumk-sum) Studentmassage:Swap(p,k); cout 排序完成!Next;p!=End;p=p-Next) outnametIdtCnumt MnumtEnumtsumn; out.close(); /主函数 int main() int x,i=0; bool quit=false; coutttendl; for(i=0;i3;i+) couttttttttt endl; couttt【 欢迎进入学生成绩管理系统 】endl; for(i=0;i3;i+) couttttttttt endl; coutttnendl; Studentmassage Grade; coutx; switch(x) case 0:quit=true
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抵押期间保证合同(标准版)
- 公司加工合同(标准版)
- 电梯广告位合同(标准版)
- 一年级下册数学练习设计与教学指导
- 施工组织设计范本及评审要点
- 对外宣讲与绩效管理协议
- 物态变化教学设计与复习资料
- 幼儿园出兑合同(标准版)
- 电商平台用户体验优化实战案例
- 医院感染控制工作方案与执行
- 2025年河南郑州航空港发展投资集团有限公司招聘笔试参考题库含答案解析
- 钢结构车棚建设服务方案投标文件(技术方案)
- 中国极地海洋装备的发展探索与技术需求
- GB 9706.283-2022医用电气设备第2-83部分:家用光治疗设备的基本安全和基本性能专用要求
- 2025市政排水管道非开挖修复工程计价定额
- UML2面向对象分析与设计(第2版)谭火彬全套教案课件
- 《血液肿瘤免疫及靶向药物治疗相关性感染预防及诊治中国专家共识(2025年版)》解读
- 药品不良反应培训课件
- 苏豪控股集团招聘笔试题库2025
- 2025年干部休养所服务项目合作计划书
- 山西省太原市某校2024-2025学年高一下学期3月月考数学试题
评论
0/150
提交评论