课程设计报告(学生成绩管理系统)

  • 格式:doc
  • 大小:121.50 KB
  • 文档页数:21

北京化工大学北方学院 课程设计报告

课程名称 综合课程设计 专业、班级 信工0904 学 号 090201096 姓 名 朱依帆 指导教师 张秋菊 设计时间 2012.9.3-2012.10.12

2012年 10 月 15 日 一、课程设计题目:学生成绩管理系统 二、设计要求:(本程序与肖紫友同学一起完成) 用数组或链表数据结构完成一个学生成绩管理系统,此系统的具体功能要求如下: 1.学生信息录入功能(此功能由肖紫友同学完成) (1)用户从键盘输入每个学生的信息:学号、姓名、性别、数学、英语、C++程序设计、程序设计基础、物理五门课成绩。 (2)可插入一个或多个学生信息到当前编辑的班级数据中。 (3)可删除一个或多个学生信息。 2.文件保存功能 (此功能由肖紫友同学完成) (1)学生信息每一班存为一个数据文件,数据文件可在程序中打开、编辑和重新保存。 (2)用户输入学生信息可随时保存数据文件。 3.文件打开功能 (1)程序能对当前打开的数据文件进行编辑与修改。 4.查询功能 (1)浏览所有学生信息;(此功能由肖紫友同学完成) (2)按学号查询学生信息;(此功能由肖紫友同学完成) (3)按姓名查询学生信息;(此功能由肖紫友同学完成) (4)查询一个班总成绩和平均成绩; (5)查询一个班某一门课总成绩和平均成绩; (6)查询某一门课分数段( <60,60-69,70-79,80-89,>90)学生数。 5.报表输出功能 (1) 按学号输出一个班学生信息:学号、姓名、性别、数学、英语、C++程序设计、程序设计基础、物理成绩和总成绩,到屏幕和文件。 (2) 按总成绩输出从高到低输出学号、姓名信息。 注:以上功能以菜单形式供用户使用,并有一定的容错功能。 三、数据结构设计描述 整个学生成绩管理系统采用链表作为基本数据结构,创建一个类student用于保存学生的数据且是链表中的一个节点。类list作为保存整个链表之用。主函数通过switch语句来根据用户的需要连接各个模块,以实现用户的需要。 四、系统各模块关系与分析 1. 用户输入模块 在此模块中,用户将根据菜单提示结合自己的需求输入一个0~11的值,来实现一定的功能。 2. 学生信息录入模块 此模块可以让用户从键盘输入每个学生的信息:学号、姓名、性别、数学、英语、C++程序设计、程序设计基础、物理五门课成绩。用户可插入一个或多个学生信息到当前编辑的班级数据中。 用户可删除一个或多个学生信息。 3. 文件保存功能模块 用户在确定以录入的成绩无误之后,可以将学生信息以每一班为单位存为一个数据文件。用户输入的学生信息可随时保存数据文件。 4. 文件打开功能模块 用户可以用此模块将数据文件在程序中打开、编辑,程序只能对当前打开的数据文件进行编辑。 5. 查询功能模块 在此模块里,用户可实现以下操作:1.浏览所有学生信息;2.按学号查询学生信息;3.按姓名查询学生信息;4.查询一个班每个人的总成绩和平均成绩; 5.查询一个班某一门课每个人的总成绩和平均成绩;6)进行成绩的统计分析:包括总人数,每门课的最高成绩、最低成绩、平均成绩、各个分数段的人数(100-90、89-80、79-70、69-60、59-50、50以下)、及格人数。 6. 报表输出功能模块 在此模块中,用户可以浏览所有学生的信息,或者可以按学号输出一个班学生信息:学号、姓名、性别、数学、英语、C++程序设计、程序设计基础、物理成绩和总成绩,到屏幕和文

件。也可以按总成绩输出从高到低输出学号、姓名信息。 五、主要模块算法说明 1. 用户输入模块设计 提示用户输入一个0~11的值,并存储在一个整型变量m中。 2. 学生信息录入模块设计

开始 m 值1,3,4 值8 值9 值7,2,6,5 值10,11

文件保存功能模块 学生信息录入模块 文件打开功能模块 查询功能模块 报表输出功能模块

用户输入,并将值保

m

结束 通过应用list中的instu()函数,来新建一个链表中的节点,即一个新的学生信息,来进行成绩的录入功能。成绩修改功能,可以根据姓名或学号进行查询并修改相应的课程的成绩,使用了void search(char s[10],int)和void search1(char s[20],int)函数进行操作。search函数根据姓名查找,search1函数根据学号进行查找。因为学号和姓名,都是存储在字符数组中的,所以都是通过字符串的比较进行查找的。然后根据整形参数进行对应的课程成绩的修改。成绩删除功能,也是可以根据姓名或学号进行删除,查询的算法和成绩修改功能的查询方法是一样的,当找到要删除的节点时,因为节点都是在堆内存中保存的,所以可以直接delete掉,并将前一个节点的next指针指向被删掉的节点的next指针所指向的节点。 3. 文件保存功能模块 先提示用户输入保存文件的文件名及班级名称。文件的前两行分别是班级名称和成绩单的开头,然后通过ofstream变量output来进行学生信息的输出,一项一项的输出,并设定格式,直到输出节点为NULL为止,之后关闭output。 4. 文件打开功能模块 先提示用户输入要打开的数据文件的名称,然后通过一个ifstream变量input来进行文件操作。首先判断文件是否存在,如果不存在则输出"File does not exist",并跳出switch语句。文件存在的话,则可以进行数据的存入了。因为数据文件具有固定的格式,即开头两行是班级名称和表头,则可以先用两次input.getline(temp,80);语句来将input设置到第三行,此时可以将数据通过input读入链表中。先用input.eof()判断文件中是否有数据,若有数据,则进行数据的读入,直到文件结束。 5. 查询功能模块 可以根据姓名或学号进行查找,搜索方法和前几个模块相同。通过outstu1(char *n)和outstu(char *n)来进行输出。总成绩和平均成绩的查询通过函数void outsum(char *)和void outsum1(char *)来完成。通过函数scanall()来浏览所有学生的信息。通过函数think()来进行成绩的统计分析。 6. 报表输出功能模块 通过建立一个新的类class stucopy用于拷贝student的数据,并实现排序功能。创建一个stucopy stu[M]数组,将原链表的数据拷贝与数组中,然后用选择排序方法将数组排序,然后用output按照标准的格式输出或保存为数据文件。 六、程序清单 #include #include #include #include const int M = 20; class stucopy//此类用于拷贝student的数据,用于排序功能的实现 { 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() { next=0; for (int 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;//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<<"请输入C++程序设计成绩:\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<<"请输入C++程序设计成绩:\n";