班级成绩管理系统_第1页
班级成绩管理系统_第2页
班级成绩管理系统_第3页
班级成绩管理系统_第4页
班级成绩管理系统_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、一一、设设计计内内容容与与设设计计要要求求 1.1.课程设计目的:课程设计目的: 全面熟悉、掌握计算机系统与系统软件基本知识,增强对不同的问题 运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程 序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,增 强面向对象程序设计概念,熟悉 C+语言编程,养成提供文档资料的习惯和 规范编程的思想,为后继课程的实验以及课程设计打下较扎实的基础。 进一步提高上机动手能力,培养使用计算机解决实际问题的能力,为 后继课程(数据结构、数据库和汇编语言等课程)的实验以及课程设计, 特别是自学、毕业论文的完成打下扎实的基础。 2.2.课题题目课

2、题题目 1、学生成绩管理系统 2、职工信息管理系统 3、图书管理系统程序系统 4、教师工作量统计系统 3.3.设计要求:设计要求: 主要模块 1、学生成绩管理系统 具有功能: 1、显示统计数据 2、查找学生成绩 3、修改学生成绩 4、删除学生成 绩 5、插入学生成绩 6、按平均分降序排列 7、显示全部学生成绩 8、退出 本系统 课程设计报告规范 1、完成系统需求分析:包括系统设计目的与意义;系统功能需求;输 入输出的要求。 2、完成系统概要设计:程序由哪些模块组成以及模块之间的层次结构、 各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构; 即要存储什么数据,这些数据是什么样的结

3、构,它们之间有什么关系等。 3、完成系统详细设计:包括采用 C+语言定义相关的数据类型;写出 各模块的类 C+码算法;画出函数的调用关系图。 4、调试分析、设计体会、测试数据:准备典型的测试数据和测试方案, 包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇 到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。 5、关键源程序(带注释) 6、其他 1)设计正确,方案合理。 2)界面友好,使用方便。 3)程序精炼,结构清晰。 4)设计报告 5000 字以上,含程序设计说明、系统的功能框图、流程 图、源程序清单等。 5)实际操作过程中遇到的问题及解决方法:设计总结及心得体会.

4、 6)上机演示。 二、进度安排 第 16 周 星期一 14 时:00 分 星期二 14 时:00 分 星期四 14 时:00 分 星期五 14 时:00 分 第 17 周 星期一 14 时:00 分 星期二 14 时:00 分 目 录 1 系统需求分析.1 2 总体设计.1 2.1 总体设计图.1 2.2 各函数之间的调用关系 .1 3 详细设计.2 3.1 采用 C+语言定义的相关数据类型.2 3.2 各模块的 c+类代码.3 3.2.1 构造函数.3 3.2.2 查找函数.3 3.2.3 修改函数.4 3.2.4 删除函数.4 3.2.5 排序函数.5 4 调试分析及设计体会.6 4.1

5、程序运行的结果.6 4.2 程序调试中的问题 .9 5 使用说明.10 6 心得体会.11 7.附录.12 8 评分表.21 1 系统需求分析 利用 C+语言和相关指针的知识创建一个班级管理系统,实现学生相关信息的查 询,即实现: (1)录入学生数据 (2)查找学生成绩 (3)修改学生成绩 (4)删除学生成绩 (5)插入学生成绩 (6)按降序排列 (7)退出本系统 在实现这个程序系统需求的过程中,出了掌握 C+的基本知识之外,最主 要的还要掌握指针的熟练应用,在这个程序过程中,主要是利用查找指针,对 应匹配指针值,交换指针链表,实现删除指针的过程看来实现上面的功能,进 一步提高上机动手能力,培

6、养使用计算机解决实际问题的能力,为后继课程 (数据结构、数据库和汇编语言等课程)的实验以及课程设计,特别是自学、 毕业论文的完成打下扎实的基础。 2 总体设计 2.1 总体设计图 班级管理系统 录入 查找 修改 删除 排序 退出 2.2 各函数之间的调用关系 学生成绩管理系统 录 入 学 生 信 息 退 出 该 系 统 实现学生成绩系统的各项功能 查询 删除 排序 修改 按 照 姓 名 查 询 按 照 学 号 查 询 按 照 降 序 进 行 排 列 (1)student 类函数,定义一个学生类,包含了所有的学生信息,比如学生的 姓名,学号,以及各相关课的成绩和平均成绩。还有建立一个 stude

7、ntmessgae 类,实现学生成绩的录入,查询,修改和删除,排序等。 (2)在该课设中实现的前提是建立了一个指针,通过指针的方式实现数据的 录入,并将其存入到文件中,便于后面的查询。 (3)函数的查询过程是通过姓名和学号查询的,通过函数,巽宅相匹配的姓 名或者学号,实现其相关信息的查询,在查询的过程中,是通过指针的形式实 现的。 (4)删除函数就是在文件中删除这个学生的信息,也就是寻找该指针,吧它 的下一个指针赋值给它,而将它的指针清空。 (5)排序是通过他们的平均分进行排序,并将他们按照降序的方式进行排序。 3 详细设计 3.1 采用 C+语言定义的相关数据类型 该班级成绩管理系统主要采用

8、的是类的基本数据类型,建立相关的学生类 和学生信息类,包含学生的所有相关信息,同时在将学生定义为一个指针的类 型,为方便后面功能的实现。 class Student /学生类的创建 public: char name20; char Id20; int Cnum; /C+课程得分 int Math; /数学课程得分 int English; /英语课程得分 int chinese; int avergae; /总分 Student * Next; /将学生定义为一个指针 ; 创建的是学生信息类,主要将要实现的各类函数放在这样的一个类中,便 于后面程序的进一步实现。 class Studentm

9、assage /Studentmassage 类 public: Studentmassage(); /构造函数 Studentmassage(); /析构函数 void ShowMenu(); /菜单函数 void Find(); /查找函数 void Save(); void ModifyItem(); /修改函数 void RemoveItem(); /删除函数 void Swap(Student *,Student *);/交换函数 void Sort(); /排序函数 int ListCount(); ; 3.2 各模块的 c+类代码 3.2.1 构造函数 构造函数 ,是一种特殊的方

10、法。主要用来在创建对象时初始化对象,即为 对象成员变量赋予初值,总与 new 运算符一起使用。特别的一个类中可以有多 个构造函数。此构造函数就实现了对初始对象的创建,要注意此构造函数的函 数名与类名是相同的。由于在建立的此学生是一个指针的类型,所以在初始化 它时,要根据指针赋值的方式进行,具体的代码如下: Studentmassage:Studentmassage() Head=new Student; Head-Next=new Student; End=Head-Next; 3.2.2 查找函数 班级成绩系统中查找函数主要实现的功能是准确实现用户想要查询的学生相 关的信息。这里可以查询的方

11、式有姓名查询和学号查询。由于在初始焕姓名和 学号时使用的是数组的方式,故在此处也要结合数组和指针的方式进行查询。 首先定义一个 p 指针为空,在按照姓名查询的时候,如果用户查找的姓名所指 向的指针与文件中保存的姓名所指向的指针相匹配的,则将该学生所指向的指 针的值返回给用户,如果匹配不成功,则输入任意的值进行继续。学号查询也 是一样的原理。有关具体的实现过程如下: Student * p=NULL; /定义一个 p 指针为空 coutname; /按照姓名进行查询 if(p=FindItem(name) p-Next-Show(); cout输入任意字符!继续; getch(); else c

12、outtt 没有找到该姓名的学生!nendl; coutname; if(p=FindItem(name) couttt 已找到学生的信息,请输入新的信息!Next-Input(); cout修改成功!endl; cout输入任意字符!继续; getch(); else couttt 没有找到!endl; coutname; if(p=FindItem(name) temp=p-Next; p-Next=p-Next-Next; delete temp; couttt 删除成功!endl; cout输入任意字符!继续; getch(); else couttt 没有找到!endl; cout输

13、入任意字符!继续; getch(); 3.2.5 排序函数 本程序中的排序就比较复杂一些,它并不是按照成绩直接进行排序的,而 是按照该学生所指向的指针形成的链表进行排序的。如果当前所在的学生的成 绩比后面的学生的成绩低的话,这将它们所指向的指针的位置进行调换,而不 是将它们的值进行调换,从头到尾依次进行比较,直到所有的程序排名结束为 止。 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-

14、sumk-sum) Studentmassage:Swap(p,k); cout 排序完成!Next!=End;) temp=Head-Next; Head-Next=Head-Next-Next; delete temp; delete Head,End; 4 调试分析及设计体会 4.1 程序运行的结果 数据保存到文件前后的结果显示: 图 4.1 表示的是录入学生的相关信息 图 4.2 表示继续输入学生的信息 学生成绩查询系统的显示结果: 图 4.3 表示显示学生的相关子信息 学生成绩系统排序之后的显示结果: 图 4.4 表示按照学生的总成绩对学生进行排序 学生成绩查询前后的显示结果: 图

15、4.5 表示按照学生的姓名进行查询 图 4.6 表示按照学生的学号进行查询 学生成绩删除先后的显示结果: 图 4.7 表示删除学生的信息 学生成绩修改前后的显示结果: 图 4.8 表示对学生的相关信息进行进行修改 4.2 程序调试中的问题 (1)在程序运行之初,无法显示学生录入的信息,经过按照步骤调试后 才发现在函数的显示函数中没有写输出函数。 (2)程序在实现的过程中,最先未将学生定义成为一个指针,在实现 了函数的录入之后,无法实现它的查询过程,本是按照学号和姓名查询的, 可是当输入姓名之后,不知道怎样实现在文件中寻找相匹配的姓名,就算 寻找后,也不知道怎样实现数据信息的输出,本来相直接调用

16、输出函数, 可是系统提醒无法实现,不能为空值,必须咋调用函数之前,对其赋予相 应的值。 (3)在排序函数中,程序运行之后,结果只显示已经排序,而没有显示 排序好的名次,经过调试发现,并没有在主函数中调用显示函数。 (4)程序在查询之初,只显示最后录入的学生的信息,而前面录入的学 生信息无法显示出来,进过查询以及调式才发现,并不是程序出了问题, 而是因为没有写文件保存的函数。由于起初对这个保存文件比较陌生,所 以在写程序之初就没有写该程序,直接录入数据了。 (5)在排序函数中除了上面的问题之外,出现的问题还有就是在程序运 行的时候没有按照成绩的降序进行排序,原因是我并没有利用指针的形式 对链表进

17、行排序,而是直接对分数进行了排序。 (6)在修改函数的时候,发现修改完学生的相关信息之后的结果并没有 改变,而是出现原来的值,经过调试才发现,原来函数在实现过程中并没 有改变指针所指向的内容而只是改变了所在的值而已。 (7)可以用 getch()函数。只要用户输入一个字符,马上就会处理这个 字符。但是需要在前面在#include 中进行声明。 (8)在刚开始将 C+的课程就写成这样,结果系统不能识别这个东西, 所以出现了错误。 5 使用说明 (1)运行程序到系统界面,会提示该系统还没有任何的学生信息, 按任意键进行输入继续,进入菜单界面。 (2)进入菜单界面之后,按“1”进行学生信息的录入,淡

18、了如 一个学生信息后,它会提示输入任意键继续,在接着按“1”可以继续 进行录入学生信息,当完成后,按任意键返回菜单栏,接着执行执行 下面的内容。 (3)接着执行查询函数时,是按照姓名和学号进行查询的,提示 按照姓名查询,就输入学生的姓名,如果按照姓名查询后要又按照学 号查询,则按任意键返回到菜单栏,接着按照学号进行查询。 (4)下面的操作依次按照上面的方式进行查询,知道实现所有的 程序。 (5)按“0”退出本系统。 6 心得体会 回顾起本次课程设计,到现在我仍感慨颇多。我的课题是班级成绩管理系 统,当选到这个课题时,我有一阵兴奋感,我以为这个课题回事四个里面最简 单的,可事实令我彻底底的错了,

19、在整整一星期的日子里,可以说得是苦多于 甜。许多的地方自己还是不懂,在写到一些程序的时候,自己被卡在那里,前 后几天都在想那个程序自己怎么样才能编写出来。在实现这个课设的过程中, 我才发现课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问 题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。 但是在此次课设中我也学到很多很多的东西,不仅巩固了以前所学过的 知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我 懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所 学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,

20、从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题, 可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同 时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深 刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新 温故。 在本次实验中自己虽然很累,但是觉得还是很值得的,自己从开始想要从 哪里入手,从运用哪个函数进行编写,在这期间我们查阅了很多相关的资料, 曾盯着课本发呆过,我和别人之间也曾进行过激烈的口舌论战。经过这个星期 来的实践学习,使我对 C+语言有了更进一步的认识和了解,要想学好它,则 重在实践,要通过不断的上机操作及实

21、例运用才能更好地深入体会它,当然通 过实践,我也发现我们的好多不足之处。就比如我对 C+语言的一些标准库函 数不太了解,还有对函数调用的正确使用不够熟悉,一些经常出现的错误也不 能很好地处理。我们编写这个程序使用的是比较简单的函数及结构,由于我的 水平有限,还不能很好的使用一些效率高的方式来编写,所以也没有突出的创 新点。在做题的时候我们都是分工合作。分工完成结构体、函数设计、算法分 析等,这些过程中总是有很多错误出现,有好多的小问题都是我们粗心大意造 成的,所以设计程序一定要仔细,不容一点的马虎。当然也有大问题,关于文 件的操作,类的使用等等这些使用我们都琢磨了很久,在解决错误时我们有时 几

22、乎焦头烂额了。但是我们与队友之间都会不断的相互鼓励、支持,彼此都努 力维护着将作业写完。虽然这设计有点枯燥无味,但是当最后我们大功告成时, 回味起来还是美滋滋的。总的来说我们真的是在设计的过程中受益匪浅。在实 际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思。在具体操 作中对这学期所学的 C+语言的理论知识得到巩固,达到实训的基本目的,也 发现自己的不足之出,在以后的上机中应更加注意,同时体会到 C+语言具有 的语句简洁,使用灵活,执行效率高等特点。发现上机实训的重要作用,特别 是对数组和循环有了深刻的理解。 通过实际操作,学会 C+语言程序编程的基本步骤、基本方法,开发了自己的 逻

23、辑思维能力,培养了分析问题、解决问题的能力。 7.附录 7.1.源代码 # include # include # include #include /用 getch(); using namespace std; /Student 类 class Student public: char name20; char Id20; int Cnum; /C 课程得分 int Math; /数学课程得分 int English; /英语课程得分 int chinese; int sum; /总分 Student * Next; /将学生定义为一个指针 void Input() /输入函数 coutn

24、ame; coutId; coutCnum; coutMath; coutEnglish; coutchinese; sum=Cnum+Math+English+chinese; void ReadFile(istream void Show() /显示函数 cout姓名:nameendl学号:IdendlC+:Cnumendl 数学:Mathendl外语:Englishendl语文:chineseendl总成 绩:sumNext;p!=End;p=p-Next) p-Show(); coutInput(); End-Next=new Student; End=End-Next; cout添加

25、成功!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 Studen

26、t; 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:S

27、howMenu() 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

28、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

29、(); 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;

30、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-Math=p1-Math; temp-English=p1-English; temp-chin

31、ese=p1-chinese; temp-sum=p1-sum; strcpy(p1-name,p2-name); strcpy(p1-Id,p2-Id); p1-Cnum=p2-Cnum; p1-Math=p2-Math; p1-English=p2-English; p1-chinese=p2-chinese; p1-sum=p2-sum; strcpy(p2-name,temp-name); strcpy(p2-Id,temp-Id); p2-Cnum=temp-Cnum; p2-Math=temp-Math; p2-English=temp-English; p2-chinese=temp-chinese; p2-sum=temp-sum; /统计链表总数 int Studentmassage:ListCount()/统计当前链表的记录总数,返回一个整数 if(! Head) return 0; int n=0; for(Student * p=Head-Next;p!=End;

温馨提示

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

最新文档

评论

0/150

提交评论