学生信息管理系统课程设计.doc_第1页
学生信息管理系统课程设计.doc_第2页
学生信息管理系统课程设计.doc_第3页
学生信息管理系统课程设计.doc_第4页
学生信息管理系统课程设计.doc_第5页
免费预览已结束,剩余42页可下载查看

下载本文档

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

文档简介

课 程 设 计(2005-2006第1学期)课程设计类型:应用软件综合设计题目:学生信息管理系统学号:姓名:专业: 指导教师: 制填写说明:1、一、二、三项由指导教师在课程设计开始前填写并交由学生保管;2、四项由学生在完成课程设计后填写,并将此表与课程设计一同装订成册交给指导教师;3、成绩评定由指导教师、评阅人按评定标准评分。4、此表格填写好后与课程设计正文一同装订成册。一、 课程设计的基本要求应用软件综合设计是计算机专业及相关专业学生的一门实践课程。本课程对于检验学生阶段性(前三个学期)学习成果,对于软件开发主流方法和思想面向对象程序设计方法和思想的牢固掌握和熟练应用是一个非常重要的检测,是后续课程得以顺利进行的必要保证,对学生的程序设计能力培养和软件工程能力的培养具有重要的作用和意义。本实践课程要求学生综合应用已学的计算机相关知识,例如程序设计基本思想和方法、C语言、C+语言、面向对象程序设计思想和方法,通过对真实世界的模拟和抽象来解决一些比较简单的实际问题。课程要求学生针对一个比较系统的题目进行编码、测试,并进行设计说明书的撰写,从而培养和锻炼学生初步的工程意识和做法。二、 进度安排时间任务17周发题:学生自由选择课程设计题目;18周预作:对自己选择的题目要有大致的思路和程序框架,并完成部分代码;19周设计、指导:学生集中时间完成程序设计和设计说明书的编写;最后一个单元时间优秀答辩、检查、验收、递交设计报告三、 应收集资料及主要参考文献应收集的资料:面向对象程序设计思想和方法C/C+语言参考手册主要参考文献:1刘斌,王忠。面向对象程序设计Visual C+。清华大学出版社2钱能主编,C+程序设计教程,清华大学出版社3郑莉.C+语言程序设计.北京:清华大学出版社,1999年 四、 课程设计摘要(中文)我做的学生信息管理系统,运用了继承、I/O流的输入输出、链表、运算符重载等基本功能,利用封装把多个类和函数放在一起,使主程序看起来很明了。在程序的界面里面可以选择添加、删除、查询、更新和输出学生信息,负有学生成绩排序、分析以及把链表保存到文件、从文件输出链表的功能。在添加学生信处息时有四种方式进行插入,从链表首、尾、指定位置或者按顺序进行插入。在删除与查询学生信息时有多种选择,可从链表首、尾或已知其在链中位置,还可以从其成绩的好坏进行选择操作。此程序还能够将所有的学生信息按照使用者的需要按成绩由低到高或者由高到低排序,学生成绩分析器能统计出学生总人数、最高分、最低分、平均分。功能8能将输入的信息以文本的形式导出保存,功能9可将键入的文本信息输出链表。本程序能基本满足简单学生信息管理系统的使用需要,但功能还不够齐全,程序不够简洁、完善,我会继续努力学习,改正程序中存在的不足。五、 指导教师评语与成绩评定51指导教师评语 指导教师签字: 200 年 月 日52成绩评定项目评价项目评价实践能力(20)工作量(20)分析、解决问题能力(10)工作态度(10)回答问题(10)报告质量(20)创新(10)得分(100分)六、 答辩记录答辩教师签字:200 年 月 日目 录第一章 问题分析91.问题描述92.需求分析9第二章 总体设计101.功能分析102.数据抽象103.结构关系10第三章 详细设计121.studentinfo类122.LinkedList类123.ListNode类134.Application1类13第四章 功能测试141.要实现的功能目标142.具体测试过程14第五章 总结16附录:源代码清单20第一章 问题分析1.问题描述1. 完成字符串类、学生信息类、结点类、链表类、应用程序类等的定义,用链表实现学生信息的管理;2. 实现学生信息的添加、查询、修改以及结点的插入和输出等功能;3. 把学生信息封装成一个结构体或者类,把最终的主程序也封装成一个类,只调用少数几个接口实现功能;4. 重载输入输出流,完成所有数据从文本文件的读入和写入,在必要时重载部分其它运算符。2.需求分析运用链表实现学生信息的添加、查询、修改以及结点的插入和输出等功能。 运用I/O流完成所有数据从文本文件的读入和写入。在其中要用到友元函数实现运算符的重载,使得输出的时候和输入的时候减轻编程的工作量,并且使程序看起来简洁明了。第二章 总体设计1.功能分析(1)添加、删除、查询、更新和输出学生信息.(保证学生信息能全部正确输入) 。(2)够将所有的学生信息按照使用者的需要按成绩由低到高或者由高到低排序 (便于排名)。(3)能够统计出学生总人数、最高分、最低分、平均分。(便于统计,以及直观了解整体与个人的情况)。(4)能将输入的信息以文本的形式导出保存(便于文件的保存防止丢失)。(5)可将键入的文本信息输出链表。(便于输出链表)。2.数据抽象首先是类Linkedlist,它里面包含了所有的要使用的函数,然后是类ListNode,它是声明了类Linkedlist,并把它声明为友元类,然后定义了重载的运算符,接着是Studentinfo类,它里面定义了学生的基本信息和重载运算符的定义。接着是Application1类,它里面定义了要使用的类,并且这些类连接到Linkedlist类里面定义的相对应的类。Application1.cpp是定义了main.cpp中使用到的两个函数。3.结构关系ListNode类Linkedlist友员类Main主程序StudentInfo学生类Application1界面类Application1.cppStudentInfo.cpp第三章 详细设计1.studentinfo类概述类的主要功能:定义了学号,姓名,性别,年龄,成绩等基本成员。还定义了运算符的重载,主要数据成员和主要成员函数说明:ULInt number; /学号 成员函数,用来保存学号。char name80; /姓名 成员函数,用来保存姓名。char gender; /性别 成员函数,用来保存性别。UInt age; /年龄 成员函数,用来保存年龄。double score; /成绩 成员函数,用来保存成绩。InputInfo() :返回信息。是输入函数。当函数执行后把使用者所输入的信息输送到内存去。bool operator (const Student& s); /重载运算符。bool operator = (const Student& s); /重载运算符。bool operator != (const Student& s); /重载运算符。friend ostream& operator (istream& is,Student& p); /重载运算符。2.LinkedList类概述类的主要功能:许多数据操作的函数都在这个类里面定义。主要数据成员和主要成员函数说明Insert(); /插入 是输入函数。当函数执行后把使用者所输入的信息插入到你想插入的地方。Delete(); /删除 是输入函数。当函数执行后把使用者所输入的信息在链表中查找然后删除最后把删除后的信息返回给使用者。Find(); /查寻 是输入函数。当函数执行后把使用者所输入的信息在链表中查找后,把使用者想查找的信息返回给使用者。Update(); /修改 是输入函数。当函数执行后把使用者所输入的信息在链表中查找后,把使用者当前输入的信息替换掉以有的信息。然后返回的是新的信息。Sort(); /排序 是输出函数。当函数执行后把使用者所输入的信息在链表中查找后,把所有信息根据相应的选择进行排序输出到界面。Print(); /输出 是输出函数。把使用者想知道的数据完全输出到界面上。Analyze(); /比较,统计,求平均分 是输出函数。把使用者输入的相应的选择进行比较,统计。求平均分后输出到界面。Save(); /把链表保存到文件 是输入函数,把链表中的信息保存到相应的文件中。Load(); /从文件输出链表 是输出函数,把文件中的信息输入到内存,然后打印到界面。3.ListNode类概述类的主要功能:声明一些类。主要数据成员和主要成员函数说明class LinkedList;/ 前视声明。friend class LinkedList;/ 友元类声明。4.Application1类概述类的主要功能主要数据成员和主要成员函数说明Process() /输入选择界面的函数。PrintTip() /程序主界面的函数。Insert() /在Application1中调用linkedlist中以有的函数/插入。Delete()/在Application1中调用linkedlist中以有的函数/删除。Find() /在Application1中调用linkedlist中以有的函数/查寻。Update() /在Application1中调用linkedlist中以有的函数/更新。Sort() /在Application1中调用linkedlist中以有的函数/排序。Print() /在Application1中调用linkedlist中以有的函数/输出。Analyze() /在Application1中调用linkedlist中以有的函数/比较,统计,求平均分 。Save() /在Application1中调用linkedlist中以有的函数/把链表保存到文件。Load() /在Application1中调用linkedlist中以有的函数/从文件输出链表。第四章 功能测试1.要实现的功能目标(1)添加、删除、查询、更新和输出学生信息。(2)能够将所有的学生信息按照使用者的需要按成绩由低到高或者由高到低排序。(3)能够统计出学生总人数、最高分、最低分、平均分。(4)能将输入的信息以文本的形式导出保存。(5)可将键入的文本信息输出链表。2.具体测试过程1主界面 2。添加学生信息3然后按e退出添加学生信息的功能。再按回车返回到主界面4再查找学生信息,在这里我们选择查找链尾的学生信息:5按e退出查询系统,然后返回主界面,接着来选择4来修改学生信息:5我们再来看看更新后的信息:接着返回主界面,按6输出学生信息:第五章 总结课程设计引导我们尽可能多地运用所学知识点,灵活完成编码通过问题分析和任务定义体现我们的分析问题的能力;通过逻辑设计体现我们的抽象能力;通过详细设计和程序编码体现我们解决问题的能力;通过程序调试与测试体现我们动手能力;通过结果分析体现我们认识问题的能力;通过编写课程设计报告体现我们书写程序文档的能力。在编程过程中我运用了以下知识:1 运用友元,友元提供了在不同类的成员函数之间,类的成员函数与一般函数之间进行数据共享的机制。通过友元关系,一个普通函数或另一个类中的成员函数可以访问其他类中的私有和保护成员,友元的正确使用对于提高程序的运行效率是非常有益处的。2 运用了运算符重载,函数重载的意义在于他能用同一个名字访问一组相关的函数,在类中普通成员函数和构造函数都可以重载,特别是构造函数的重载(他提供了多种初使化方式)给用户更大的灵活性。在基类和派生类的函数重载有两种情况:一种是参数有所差别的重载。另一种是参数没有差别的重载,只是他们属于不同的类。3 运用了链表。建议与意见:对于课程设计这门课的开设我觉得很有必要,但是这门课程开设的时间我觉得有必要调整一下,例如在开始学习面向对象程序设计这门课时就可以把要做的课程设计的内容告诉我们,我们边学习学边做,在学完时刚好把课程设计完成,这样的话既不会占用考试前几周复习的时候,也能让我们写的程序更加完善。本设计题目要求我综合应用面向对象的方法编制一个比较简单的应用系统,能够较好的检验我对课程和知识技能的掌握程度。同时,通过课程设计我对面向对象程序设计方法和思想的牢固掌握和熟练应用可以比较顺利的进行应用,对我的程序设计能力培养和软件工程能力的培养具有重要的作用和意义。引导我按照面向对象的思想,发挥自己的创造力来分析问题、解决问题。 致谢谨此对在设计过程中给我提供帮助和指导的张俊、吕品老师刘阳、李敏等同学表示最衷心的感谢。参考文献1 刘斌,王忠面向对象程序设计Visual C+北京:清华大学出版社,2003年2 钱能主编,C程序设计教程,清华大学出版社,1999 年3 郑莉.C+语言程序设计.北京:清华大学出版社,1999年 附录:源代码清单StudentInfo类中的源代码:#ifndef Student_H#define Student_Htypedef unsigned long int ULInt;typedef unsigned int UInt;#includeclass Studentprivate:ULInt number; /学号char name80; /姓名char gender; /性别UInt age; /年龄double score; /成绩public:Student();void InputInfo(); ULInt Get_Student_number() return number; char GetGender() return gender; char* Getname()return name;double Get_Score()return score;bool operator (const Student& s);bool operator = (const Student& s);bool operator != (const Student& s);friend ostream& operator (istream& is,Student& p);Student();#endifApplication1类中主要源代码:#ifndef Application_H#define Application_H#include StudentInfo.h#include ListNode.h#include LinkedList.hclass Application private:LinkedList list;void Insert();void Delete();void Find();void Update();void Sort();void Print(); void Analyze(); void Save();void Load();public:Application(); Application(); void PrintTip(); void Process(); char GetResponse() const;#endifApplication1.cppApplication:Application() list.ClearList();Application:Application() list.ClearList();void Application:Process()coutchoice;switch(choice)case 1:(*this).Insert();break;case 2:(*this).Delete();break;case 3:(*this).Find();break;case 4:(*this).Update();break;case 5:(*this).Sort();break;case 6:(*this).Print();break;case 7:(*this).Analyze();break;case 8:(*this).Save();break;case 9:(*this).Load();break;default:cout您输入的序号有误,请重新输入!endl;void Application:PrintTip()cout.setf(ios:right);cout*学生信息管理系统*endl;coutsetw(35) t 制作者: 潘方果 endl; coutsetw(40) 1 添加学生信息 endl;coutsetw(40) 2 删除学生信息 endl;coutsetw(40) 3 查询学生信息 endl;coutsetw(40) 4 修改学生信息 endl;coutsetw(40) 5 按成绩排序 endl;coutsetw(40) 6 输出学生信息 endl;coutsetw(40) 7 成绩分析器 endl;coutsetw(40) 8 把链表保存到文件 endl;coutsetw(40) 9 从文件输出链表 endl;coutsetw(40) e 退出系统 endl; cout*endl;char Application:GetResponse() constchar ch;cout按e退出学生信息系统,回车键继续输入功能选项!;cin.get(ch);coutendl;return ch;void Application:Insert()char ch1,ch2;int x=0,y=0; Student e;docout您选择的是添加学生信息endl;e.InputInfo(); cout*请选择插入的方式*endl; cout.setf(ios:right);coutsetw(30) 1 在链头插入 endl;coutsetw(30) 2 在指定位置插入endl;coutsetw(30) 3 在链尾插入 endl;coutsetw(30) 4 按顺序插入 endl; cout*endl;coutendl; cout请输入要插入的位置:x;if(x=1)list.InsertFront(e);coutendl;if(x=2) cout请输入要插入的位置(基于0):y;list.InsertAt(e,y);coutendl;if(x=3)list.InsertRear(e);coutendl;if(x=4)list.InsertOrder(e);coutendl;cout按回车键继续添加,e退出添加学生信息功能!endl;cin.get(ch2);cin.get(ch1);while(ch1=n);void Application:Delete()char ch1,ch2;Student e;int x,y;do cout您选择的是删除学生信息:endl; cout*请选择删除方式: *endl; coutsetw(40) 1 删除链首的学生信息 endl; coutsetw(40) 2 删除链尾的学生信息 endl; coutsetw(40) 3 删除成绩最好的学生 endl; coutsetw(40) 4 删除成绩最坏的学生 endl; coutsetw(40) 5 已知该生在链表中的位置endl; coutsetw(40) 6 删除链表中所有信息 endl; cout*x;if(x=1)if(list.DeleteFront(e)cout您已经删除该生的信息!endl;else cout空链表!请先添加学生信息!endl;coutendl; if(x=2)if(list.DeleteNode(list.DataOfNode(list.Length()-1)cout您已经删除该生的信息!endl;else cout空链表!请先添加学生信息!endl;coutendl;if(x=3)if(list.DeleteMax(e) cout您已经删除该生的信息!endl;else cout空链表!请先添加学生信息!endl;coutendl;if(x=4)if(list.DeleteMin(e) cout您已经删除该生的信息!endl;else cout空链表!请先添加学生信息!endl;coutendl;if(x=5)cout请输入其位置:y;while(y(list.Length()-1)cout您输入的位置太大,请重新输入正确的位置!y;if(list.DeleteAt(y,e)cout您已经删除该生的信息!endl;elsecout链表为空!endl;coutendl;if(x=6)list.ClearList();cout您已经删除链表的全部信息!endl; cout按回车键继续删除,e退出删除学生信息功能!endl; cin.get(ch1);cin.get(ch2);while(ch2=n);void Application:Find() char ch1,ch2; int n,y,i=0,k=0;ULInt xuehao;double score;Student s;doif(list.IsEmpty()cout链表为空!请先添加学生信息!endl;elsecout您选择的是查询学生信息endl;cout*请选择查找方式*endl;coutsetw(40) 1 查找链首的学生信息 endl; coutsetw(40) 2 查找链尾的学生信息 endl;coutsetw(40) 3 查找成绩最好的学生信息endl; coutsetw(40) 4 查找成绩最差的学生信息endl;coutsetw(40) 5 以知在链表中的位置 endl;coutsetw(40) 6 已知该生学号 endl;coutsetw(40) 7 已知该生学习成绩 endl;cout*endl;cout请选择您要查找的方式n;if(n=1)cout您所查询的学生信息为:endl; coutlist0endl;if(n=2)cout您所查询的成绩最好的学生信息为:endl;coutlistlist.Length()-1endl;if(n=3)cout您所查询的成绩最好的学生信息为:endl;coutdataendl;if(n=4)cout您所查询的成绩最差的学生信息为:endl;coutdataendl;if(n=5)cout请输入在链表中的位置(基于0):y;coutlist.DataOfNode(y)endl;if(n=6)cout请输入要查询学生的学号xuehao:xuehao;cout您所查询的学生信息为:endl;for( i=0;ilist.Length();i+) k=(list.DataOfNode(i). Get_Student_xuehao()=xuehao); if(k=1) s=list.DataOfNode(i); break; if(k=1) couts;elsecout链表中无此人!endl;if(n=7)cout请输入要查询学生的学习成绩score:score;cout您所查询的学生信息为:endl;for( i=0;ilist.Length();i+) k=(list.DataOfNode(i). Get_Score()=score); if(k=1) s=list.DataOfNode(i); break; if(k=1) couts;elsecout链表中无此人!endl;cout按回车键继续查找,e退出查询学生信息功能!endl;cin.get(ch1);cin.get(ch2);while(ch2=n);coutendl;void Application:Update()char ch1,ch2;Student e;int y;doif(list.IsEmpty()cout链表为空!请先添加学生信息!endl;else cout您选择的是修改学生信息:endl;cout*请选择修改方式: *endl;coutsetw(40)1 已知该生在链表中的位置endl;cout*endl;cout请输入其位置:y;list.DeleteAt(y,e);e.InputInfo();list.InsertAt(e,y);cout您已经将其信息修改!endl;coutendl;cout按回车键继续修改,e退出修改学生信息功能!endl;cin.get(ch1);cin.get(ch2);while(ch2=n);void Application:Sort()char ch1,ch2;int x;doif(list.IsEmpty()cout链表为空!请先添加学生信息!endl;elsecout您选择的是按成绩排序!endl;cout*请选择排序方式*endl;coutsetw(40) 0 成绩从低到高endl;coutsetw(40) 1 成绩从高到低endl;cout*:x;if(x=0)list.Sort(0);if(x=1)list.Sort(1);cout下面是排序的结果:endl;coutlist;cout按回车键继续排序,e退出学生成绩排序功能!endl;cin.get(ch1);cin.get(ch2);while(ch2=n);coutendl;void Application:Print()char ch1,ch2;docout您选择的是打印学生信息:endl;if(list.IsEmpty()cout链表为空!请先添加学生信息!endl;else coutlist; cout按回车键继续打印,e退出打印学生信息功能!endl; cin.get(ch1); cin.get(ch2);while(ch2=n);coutendl;void Application:Analyze()char ch1,ch2;int i;double sum=0;docout您选择的是分析学生成绩信息:endl; if(list.IsEmpty() cout链表为空!请先添加学生信息!endl; else cout您选择的是成绩分析器!endl;for( i=0;ilist.Length();i+)sum+=(list.DataOfNode(i).Get_Score();coutsetw(20)总人数 :tlist.Length()endl;coutsetw(20)最高分 :tdata).Get_Score()endl;coutsetw(20)最低分 :tdata).Get_Score()endl;coutsetw(20)平均成绩:tsum/list.Length()endl;coutendl;cout按回车键继续添加,q退出学生成绩分析器!endl; cin.get(ch1); cin.get(ch2);while(ch2=n);void Application:Save()int i=0;ofstream fout;ifstream fin;cout您选择的是保存链表!endl;if(list.IsEmpty() cout链表为空!请先添加学生信息!endl;elsefout.open(record.txt,ios:out);if(!fout) coutError:Cant open record.txt!; exit(1);while(fout&ilist.Length()foutlist.DataOfNode(i)endl;i+;fout.close();void Application:Load()cout您选择的是从文件输出链表!endl;ifstream fin(record.txt,ios:in);char temp50;while(!fin.eof()fin.getline(temp,50);couttempendl;fin.close ();#ifndef LINKED_LIST_CLASS#define LINKED_LIST_CLASS#include #include #include #include ListNode.henum SortOrderAscending, Descending;template class LinkedListprivate:ListNode *header, *t

温馨提示

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

评论

0/150

提交评论