您的当前位置:首页正文

学生成绩管理数据结构与算法

来源:一二三四网
计算机应用技术系课程设计报告书

数据结构与算法 课程设计报告书

题目: 学生成绩管理 班级: 学号: 姓名: 指导教师:

周期: 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 #include #include #include using namespace std; const int M = 20; class stucopy {

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<>m; if (m==1)

{

cout<<\"请输入文件名:\"<>file;

cout<<\"请输入班级名称:\"<>classname; output.open(file);

output<output<output.close(); }

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++语法而已。所以,我还要加强学习和联系,踏踏实实提高我的程序设计能力。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top