数据结构与算法 课程设计报告书
题目: 学生成绩管理 班级: 学号: 姓名: 指导教师:
周期: 2013-12-9至2013-12-13 成绩:
2013年 12月 13日
计算机应用技术系课程设计报告书
一、课程设计的目的与要求
(一)课程设计目的与任务
目的:通过本课程设计的实践,全面总结c++课程学习中的数据类型、结构类型、数组、函数、指针、结构体等基本概念,掌握其使用方法。掌握面向对象程序设计中有关类、对象、继承、重载、多态性、输入输出流类体系、文件操作的基本概念,初步学会用类与对象这种面向对象的程序设计方法编写用用程序。培养使用面向对象的程序设计方法编写与计算机程序的功能。数据结构是一门实践性很强的课,必须重视实践环节。要通过实践积累自己的知识。
要求:通过设计一个《学生成绩管理系统》要求以学生成绩管理业务为背景,设计一个“学生成绩管理系统”程序。对于学校来讲,学生成绩管理系统是不可缺少的组成部分,主要是对学生成绩资料的录入、浏览、插入、查询和删除等基本功能的实现
(二)题目要求
用链表数据结构完成一个学生管理系统。设学生成绩以一个学生一条记录的形式存储,每个学生记录包含的信息有学号和各门功课的成绩。设每位学生学习数学、英语、语文、物理和化学5门课程。具体功能要求如下:
1、学生信息录入功能:输入每个学生的信息:学号、姓名、性别、数学、语文、英语、物理、化学五门课的成绩。可插入一个或多个学生信息到当前编辑的班级数据中。可删除一个或多个学生信心。
2、文件保存功能:学生信息每一个班存为一个数据文件,数据文件可在程序中打开、编辑和重新保存。
3、查询功能:浏览所有学生信息。按学号查询信息。按姓名查询信息。查询一个班的总成绩和平均成绩。查询某一门课的总成绩和平均成绩。查询某一门课分数段学生数。
4、输出功能:按学号输出一个班学生信息:学号、姓名、性别、和各科成绩到文件。按总成绩输出从高到低输出学号、姓名信息。 二、设计正文 1、系统分析
(1)自定义数据结构体,用于存储学生的基本信息,然后定义一个单链表结构,并为该链表定义结构变量和指针变量。
(2)运用指针进行下一条记录的地址查找。
(3)运用了链表的插入排序法对学生成绩的总分进行了排序。 2、功能详细描述及框图
功能:(1)、成绩的录入:包括学生学号、姓名、性别和各门课程成绩的录入。 (2)、成绩的查询:可以根据学号或姓名查询某个学生的成绩。
(3)、 成绩的修改:可以根据学号或姓名来修改相应的学生的成绩。 (4)、 数据的删除:可以根据学号或姓名指定删除某个学生的数据。
(5)、成绩的统计分析:包括总人数、最高成绩、最低成绩、平均成绩、各个分段
计算机应用技术系课程设计报告书
的人数(100-90、89-80、79、69-60、59、50以下)、及格率。 (6)、总成绩和平均成绩的查询:可以根据学号或姓名查询。 (7)、浏览所有学生信息。
(8)、将所有学生信息保存成文件。 (9)、打开指定的数据文件。
(10)、按总成绩排序输出学生信息。
(11)、按学号顺序输出学生信息,并可保存成文件。 框
输 入 学生 成 绩 查询学生 信 息 修改学生信息 删除学生 信息
插入学生成绩 学生基本信息 学生成绩管理系统 成绩管理 按 总分查询 浏览学生信息 按平均分查询 信息保存文件 退出本系统 图1—1系统结构功能图
计算机应用技术系课程设计报告书
3、主要功能逻辑过程和实现算法 功能逻辑过程:
开始 m 值1,3,4 值8 值9 值7,2,6,5 值10,11 学生信息录入模块 文件保存功能模块 文件打开功能模块 查询功能模块 报表输出功能模块 用户输入,并将m 结束
图1-2系统流程图
计算机应用技术系课程设计报告书
实现算法:
#include public: char id[20]; char sex[10]; char name[10]; double grade[5]; double sumsum; double average;/ }; class student { friend class list; public: char id[20]; char sex[10]; char name[10]; double grade[5]; student() { int i; next=0; for (i=0; i<20; i++) id[i]=0; for (i=0; i<10; i++) sex[i]=0; for (i=0; i<10; i++) name[i]=0; } void s(); void setid(char id1[20]) 计算机应用技术系课程设计报告书 { for(int i=0; i<20; i++) id[i]=id1[i]; } void setsex(char sex1[10]) { for(int i=0; i<10; i++) sex[i]=sex1[i]; } void setname(char name1[10]) { for(int i=0; i<10; i++) name[i]=name1[i]; } void setgrade(double grade1[5]) { for(int i=0; i<5; i++) grade[i]=grade1[i]; } student *next; char * outid() { return id; }; char * outsex() { return sex; }; char * outname() { return name; }; double outsum() { double sum=0; for(int i=0; i<5; i++) sum+=this->outgrade(i); return sum; } 计算机应用技术系课程设计报告书 double outav() { return this->outsum()/5; } double outgrade(int i) { return grade[i]; }; void intgrade(int); }; void student::intgrade(int j) { switch (j) { case 1: cout<<\" 请输入数学成绩:\\n\"; cin>>grade[0]; break; case 2: cout<<\"请输入英语成绩:\\n\"; cin>>grade[1]; break; case 3: cout<<\"请输入语文成绩:\\n\"; cin>>grade[2]; break; case 4: cout<<\"请输入化学成绩:\\n\"; cin>>grade[3]; break; case 5: cout<<\"请输入物理成绩:\\n\"; cin>>grade[4]; break; } } void student::s() { cout<<\"请输入学号:\\n\"; 计算机应用技术系课程设计报告书 cin>>id; cout<<\"请输入姓名:\\n\"; cin>>name; cout<<\"请输入性别:\\n\"; cin>>sex; cout<<\"请输入数学成绩:\\n\"; cin>>grade[0]; cout<<\"请输入英语成绩:\\n\"; cin>>grade[1]; cout<<\"请输入语文成绩:\\n\"; cin>>grade[2]; cout<<\"请输入化学成绩:\\n\"; cin>>grade[3]; cout<<\"请输入物理成绩:\\n\"; cin>>grade[4]; } class list { private: double high[5],low[5]; public: student *last,*first; double totoal; list() { last=0; first=0; }; ~list(); void instu(); void outstu(char *); int delstu(char *n); void outstu1(char *); int delstu1(char *n); void outsum(char *); void outsum1(char *); void think(); void search(char s[10],int); void search1(char s[20],int); 计算机应用技术系课程设计报告书 double hi(int i); double lo(int i); void av(int i); void ev(int i); void scanall(); }; int main() { stucopy stu[M]; stucopy stutemp; list will; student *p, *p1=new student(),*q; ifstream input; ofstream output; char file[20],classname[20],temp[80],id[20],name[9],sex1[10]; int m=0,n=0,j=0,i=0; double grade1[5]; for(i=0; i<20; i++) id[i]=0; for(i=0; i<9; i++) name[i]=0; do { cout<<\"//----------------------------------------------------------\\\\\\n\" <<\" 0、退出系统。\\n\" <<\" 1、成绩的录入:包括学生学号、姓名、性别和各门课程成绩的录入。\\n\" <<\" 2、成绩的查询:可以根据学号或姓名查询某个学生的成绩。\\n\" <<\" 3、 成绩的修改:可以根据学号或姓名来修改相应的学生的成绩。\\n\" <<\" 4、 数据的删除:可以根据学号或姓名指定删除某个学生的数据。\\n\" <<\" 5、成绩的统计分析:包括总人数、最高成绩、最低成绩、平均成绩、\\n\" <<\" 各个分数段的人数(100-90、89-80、79、69-60、59、50以下)、及格率。\\n\" <<\" 6、总成绩和平均成绩的查询:可以根据学号或姓名查询。\\n\" <<\" 7、浏览所有学生信息。\\n\" <<\" 8、将所有学生信息保存成文件。\\n\" <<\" 9、打开指定的数据文件。\\n\" <<\" 10、按总成绩排序输出学生信息。\\n\" 计算机应用技术系课程设计报告书 <<\" 11、按学号顺序输出学生信息,并可保存成文件。\\n\" <<\"//----------------------------------------------------------\\\\\\n\"; cout< { cout<<\"请输入文件名:\"< cout<<\"请输入班级名称:\"< output< break; } cout<<\"\\n输入1:继续;输入0:退出\\n\"; cin>>m; } while(m==1); } 计算机应用技术系课程设计报告书 5、界面设计 6、系统测试 (1)主界面 (2)成绩的录入:包括学生学号、姓名、性别和各门课程成绩的录入。 计算机应用技术系课程设计报告书 (3)成绩的查询:可以根据学号或姓名查询某个学生的成绩。 (4)成绩的修改:可以根据学号或姓名来修改相应的学生的成绩。 计算机应用技术系课程设计报告书 (5)数据的删除:可以根据学号或姓名指定删除某个学生的数据。 (6)成绩的统计分析:包括总人数、最高成绩、最低成绩、平均成绩、各个分数段的人数、及格率。 计算机应用技术系课程设计报告书 (7)总成绩和平均成绩的查询:可以根据学号或姓名查询 (8)浏览所有学生信息 计算机应用技术系课程设计报告书 (9)将所有学生信息保存成文件 (10)打开指定的数据文件 计算机应用技术系课程设计报告书 (11)按总成绩排序输出学生信息 (12)按学号顺序输出学生信息,并可保存成文件 计算机应用技术系课程设计报告书 三、小组成员分工说明 独立完成 四、课程设计总结或结论 1 课程设计过程中出现的技术难点和解决方法: 技术难点:开始对文件的理解和操作不明白,不能很好的操作文件,其中最大的问题是对已存在的文件的读取问题,和程序运行不了问题。 解决办法:不会的英文问问同学或者自己上网查一下翻译。程序中出现的错误找同学帮忙把错误的地方改正了。 2 课程设计期间的主要收获: 通过这次的课程设计,让我明白要设计好一个程序需要有耐心和细心,在程序编写和调试过程中常常会出现错误,这是我门要保持冷静,不烦躁的心态,不断修改和完善程序。 另外,也让我认清了自己的编程能力,我现在还是基本还是什么都不会,还没能理解面对对象程序设计的思想,只是懂一点点C++语法而已。所以,我还要加强学习和联系,踏踏实实提高我的程序设计能力。 因篇幅问题不能全部显示,请点此查看更多更全内容