手机版

学生成绩管理系统C程序设计报告

发布时间:2024-10-23   来源:未知    
字号:

湖南科技学院

课程设计报告

课程名称: 计算机高级语言(C++)课程设计

课程设计题目: 学生成绩统计管理系统

系: 专 业: 年级、班: 姓 名:

学 号:

理学院

数学与应用数学 数应1301 梁莎

201305001128

指导教师: 职 称:

张晓朋 讲师

2015年7月

目录

课程实验报告

一、需求分析------------------------------------------(1)

二、概要设计------------------------------------------(2-4)

三、程序实现思路--------------------------------------(5)

四、设计总结------------------------------------------(5-7)

五、参考文献-------------------------------------------(8)

六、源代码--------------------------------------------(8-32)

七、运行情况--------------------------------------------

学生成绩管理系统C程序设计报告

第一章 需求分析

1.1目标

(1)掌握和利用C语言进行程序设计的能力。 (2)理解和运用结构化程序设计的思想和方法。 (3)掌握开发一个小型实用系统的基本方法。 (4)学会调试一个较长程序的基本方法。

(5)掌握书写程序设计开发文档的能力(书写课程设计报告)。

1.2 实现功能

(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) 按总成绩输出从高到低输出学号、姓名信息。

注:以上功能以菜单形式供用户使用,并有一定的容错功能。

第二章 概要设计

2.1设计概述

根据需求把整个系统分化成不同的模块,每个模块完成一个特定的子功能。把这些模块结合起来组成一个整体。逐一实现各个功能;

2.2系统总体结构及功能模块划分

经过对系统的需求分析,学生信息管理系统主要划分为三个部分:学生信息查询,学生信息管理,学生成绩录入三个功能模块。如图2.2.1 系统的总体结构。

图2.2.1 系统的总体结构

2.2.1学生信息查询模块

学生信息查询:学生可以根据学号、姓名、专业进行查询。如图1.2.2学生

信息查询模块结构。

图2.2.2 学生信息管理模块结构

2.2.2学生信息管理模块

学生信息管理:主要是用于学生信息更新、插入、删除,如图1.2.3学生管

图2.2.3 学生信息管理模块结构

根据对数据项与数据结构的分析,设计出能够满足系统需求的各种实体,及它们之间的关系,为后面的逻辑结构设计打下基础。 2.3

查询功能模块

在此模块里,用户可实现以下操作:1.浏览所有学生信息;2.按学号查询学生信息;3.按姓名查询学生信息;4.查询一个班每个人的总成绩和平均成绩; 5.查询一个班某一门课每个人的总成绩和平均成绩;6)进行成绩的统计分析:包括总人数,每门课的最高成绩、最低成绩、平均成绩、各个分数段的人数(100-90、89-80、79-70、69-60、59-50、50以下)、及格人数。

模块图2.3

开始

m

值 1,3,4

值8

值9

值 7,2,6,5

值 10,11

学生信息录入 模块

文件保存功能 模块

文件打开功能 模块

查询功能模块

报表输出功能 模块

用户输入, 并将值保存 至m中

m

结束

4

第三章 实现程序思路

第四章 设计和总结 4.1 学生信息录入模块设计

通过应用list中的instu()函数,来新建一个链表中的节点,即一个新的

学生信息,来进行成绩的录入功能。成绩修改功能,可以根据姓名或学号进行查询并修改相应的课程的成绩,使用了void search(char s[10],int)和void search1(char s[20],int)函数进行操作。search函数根据姓名查找,search1函数根据学号进行查找。因为学号和姓名,都是存储在字符数组中的,所以都是通过字符串的比较进行查找的。然后根据整形参数进行对应的课程成绩的修改。成绩删除功能,也是可以根据姓名或学号进行删除,查询的算法和成绩修改功能

的查询方法是一样的,当找到要删除的节点时,因为节点都是在堆内存中保存的,所以可以直接delete掉,并将前一个节点的next指针指向被删掉的节点的next指针所指向的节点。

4.2 文件保存功能模块

先提示用户输入保存文件的文件名及班级名称。文件的前两行分别是班级名称和成绩单的开头,然后通过ofstream变量output来进行学生信息的输出,一项一项的输出,并设定格式,直到输出节点为NULL为止,之后关闭output。

4.3 文件打开功能模块

先提示用户输入要打开的数据文件的名称,然后通过一个ifstream变量input来进行文件操作。首先判断文件是否存在,如果不存在则输出"File does not exist",并跳出switch语句。文件存在的话,则可以进行数据的存入了。因为数据文件具有固定的格式,即开头两行是班级名称和表头,则可以先用两次input.getline(temp,80);语句来将input设置到第三行,此时可以将数据通过input读入链表中。先用input.eof()判断文件中是否有数据,若有数据,则进行数据的读入,直到文件结束。

4.4 查询功能模块

可以根据姓名或学号进行查找,搜索方法和前几个模块相同。通过outstu1(char *n)和outstu(char *n)来进行输出。总成绩和平均成绩的查询通过函数void outsum(char *)和void outsum1(char *)来完成。通过函数scanall()来浏览所有学生的信息。通过函数think()来进行成绩的统计分析。

4.5 报表输出功能模块

通过建立一个新的类class stucopy用于拷贝student的数据,并实现排序功能。创建一个stucopy stu[M]数组,将原链表的数据拷贝与数组中,然后用选择排序方法将数组排序,然后用output按照标准的格式输出或保存为数据文件。

4.6经验和总结

(1)该学生成绩管理系统基本可以运行,但是有不少地方仍是设计得不够科学,有些在任务书上的要求没有能十分好的把它运行出来。

(2)、通过本次对C语言的深入学习,让我对C语言有了更多的了解并撑握更多的知识,成功地运用各类函数、循环变量、结构化的程序设计,以及结构体、

指针的使用。

(3)、但在学习中发现,编程确实不是很好做的,并非是你想要就能完成的,它需要的是认真、仔细地对待每一个程序块,特别是在对指针的使用时更加困难,那些指针指来指去,一不小心就会看错,编译不出来。

(4)、由于学生的我只是大一,知识水平不够,没能够完完全全地把程序做出来,而且程序中有许多不足之处不能够正确地将它改正,但总体上是可以运行的。

(5)经过这次课程设计,我发现自己不少的不足之处,我将会在以后的学习中把它们改正过来,努力学到更多的知识。

第五章 参考文献

1.秦友淑、曹化工。C语言程序设计教程。华中科技大学出版社。 2.郭翠英。C语言课程设计案例精编。中国水利水电出版社。 3.汪晓平。C语言高级实例解析。清华大学出版社。 4.张翔。 C语言函数大全。电子工业大学出版社。

5田淑清。全国计算机等级考试二级教程.高等教育出版社。

第六章 源程序及调试结果

源程序:

#include<iostream.h> #include<string.h> #include<iomanip.h> #include<fstream.h>

const int M = 20;

class stucopy//此类用于拷贝student的数据,用于排序功能的实现 { public:

char id[20]; char sex[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() { } void s();

void setid(char id1[20]) { }

void setsex(char sex1[10])

for(int i=0;i<20;i++)

id[i]=id1[i]; next=0;

for (int i=0;i<20;i++) for (i=0;i<10;i++) for (i=0;i<10;i++)

id[i]=0;

sex[i]=0; name[i]=0;

}

void setname(char name1[10]) { }

void setgrade(double grade1[5]) { }

student *next;//next指向下一个学生,构成链表 char * outid(){return id;}; char * outsex(){return sex;}; char * outname(){return name;}; double outsum() { }

double outav(){return this->outsum()/5;} double outgrade(int i){return grade[i];}; void intgrade(int); };

double sum=0; for(int i=0;i<5;i++)

sum+=this->outgrade(i); for(int i=0;i<5;i++)

grade[i]=grade1[i]; for(int i=0;i<10;i++)

name[i]=name1[i]; for(int i=0;i<10;i++)

sex[i]=sex1[i];

return sum;

void student::intgrade(int j)//用于修改学生的成绩 { }

void student::s()//用于录入学生的信息 {

cout<<"请输入学号:\n"; cin>>id;

cout<<"请输入姓名:\n"; cin>>name;

cout<<"请输入性别:\n"; cin>>sex;

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;

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();//输出所有学生的信息 };

list::~list()//析构函数,将所有创建的学生对象删掉 {

if(first!=0) {

student *p=first,*temp; while(p!=NULL){ temp=p; p=p->next; delete temp; cout<<"ok\n"; }}}

void list::instu()

{ student *p=new student(); p->s();

if(first==0){first=last=p;}else{last->next=p;last=p;} }

void list::outstu(char *n) {

if(first==0) {cout<<"班级无成员!查无此人!"<<endl;return;} student *temp=first;for(;temp!=NULL;temp=temp->next)

if(strcmp(temp->outname(),n)==0)

{

cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(6)<<"性别

"<<setw(6)<<"数学"<<setw(6)

<<"英语"<<setw(6)<<"政治"<<setw(14)<<"程序设计基础

"<<setw(6)<<"物理"<<endl;

cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(6)<<

temp->outsex()<<setw(6)

<<temp->outgrade(0)<<setw(6)<<temp->outgrade(1)<<setw(6)<<temp->o

utgrade(2)<<setw(14) }

void list::outstu1(char *n) {

if(first==0) {cout<<"班级无成员!查无此人!"<<endl;return;} student *temp=first;for(;temp!=NULL;temp=temp->next)

if(strcmp(temp->outid(),n)==0) {

cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(6)<<"性别

<<temp->outgrade(3)<<setw(6)<<temp->outgrade(4);return;}

cout<<"查无此人!"<<endl; return;

"<<setw(6)<<"数学"<<setw(6)

<<"英语"<<setw(6)<<"政治"<<setw(14)<<"程序设计基础

"<<setw(6)<<"物理"<<endl;

cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(6)<<

temp->outsex()<<setw(6)

<<temp->outgrade(0)<<setw(6)<<temp->outgrade(1)<<setw(6)<<temp->o

utgrade(2)<<setw(14) }

int list::delstu(char *n) { }

int list::delstu1(char *n) {

if(first==0) {cout<<"无数据!"<<endl;return 0;} student *temp=first; student *p;

if(strcmp(first->outid(),n)==0) { first=first->next;delete temp;

if(first==0) {cout<<"无数据!"<<endl;return 0;} student *temp=first; student *p;

if(strcmp(first->outname(),n)==0) { first=first->next;delete temp; cout<<"\n删除成功\n";return 0;}

else for(;temp->next!=NULL;temp=temp->next) {if(strcmp(temp->next->outname(),n)==0)

{p=temp->next;temp->next=temp->next->next;delete p; cout<<"\n删除成功\n";return 0;}}

cout<<"\n查无此人,删除失败\n"; return 0;

<<temp->outgrade(3)<<setw(6)<<temp->outgrade(4);return;}

cout<<"查无此人!"<<endl; return;

学生成绩管理系统C程序设计报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)