学生成绩管理系统

   课程设计报告

课程设计名称:        综合程序课程设计                           

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

学 院 名 称:         信息工程学院                      

      专业:  电子信息工程     班级:         

学号:         姓名:              

     

评分:                   教师:         

   20  14      3      21  

目  录

课程设计任务书----------------------------------------------------------------3

摘 要----------------------------------------------------------------------------4第一章 课程设计的需求分析-------------------------------------------------5

一、实验目的及要求------------------------------------------------------------------------------------------5

二、实验内容-----------------------------------------------------------------5

三、实验需求分析-------------------------------------------------------------6

四、课设分析-----------------------------------------------------------------7

五、详细设计-----------------------------------------------------------------8

第二章程序调试及测试分析------------------------------------------------9

一、调试方法与技巧------------------------------------------------------------9

第三章 实验设计结果及结论 -----------------------------------------------9

一、实验结果演示-------------------------------------------------------------9

二、设计总结------------------------------------------------------------------11三、参考文献------------------------------------------------------------------12

附录 实验源程序代码-------------------------------------------------------13

   电子信息工程专业 课程设计任务书

20 14 -20 15学年 第 2 学期 第 1 周- 2 周 

注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。

2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。

摘 要

随着科技的不断发展和人们的不断创新,科学在越来越多的地方展现出了它的魅力,给人类带来了许多便利和效率。对于学校来说呢,成绩管理系统无疑是一个非常重要且重大的结构之一,而为了让老师和同学甚至家长们更加直观方便的了解到学生们的成绩,我们就创造了一套学生成绩管理系统来完成这个目的。

学生成绩系统的制作是利用计算机中的Access 和 Visual Studio 20## 两个软件来完成,根据课程设计的要求,初步可以完成学生成绩的增添、修改、删除、排名,及通过学生姓名、学号来实现查询,同时也可以完成按照课程来进行排名的功能。系统开发任务主要包括数据库的设计与维护、界面设计等两个方面。能够准确高效率的完成一系列的指令。

    关键词:学生成绩、管理系统、成绩查询

第一章 课程设计的目的与要求

一、   实验目的与要求

在完成这个软件后,是的学生成绩管理系统更加的有效准确,方便有用。通过本课程设计的实践,全面总结Visual C++所学知识,和数据库的所学知识,灵活运用,完成课设任务。掌握文件操作的基本概念,初步学会用类与对象这种面向对象的程序设计方法编写应用程序。培养使用面向对象的程序设计方法编写计算机程序的能力。

    在程序中要达到能够按照学生的学号、姓名、科目等进行查询和排名,并且能够完成成绩的录入、删除、修改等一系列的指令。

二、实验内容

学生成绩管理系统

现有学生成绩信息,内容如下

姓名    学号   语文  数学   英语  政治   

张明明  01     67    78      82   90

李成友  02     78    91      88   80

张辉灿  03     68    82      56   87  

王露    04     56    45      77   67

陈东明  05     67    38      47   70

….      ..      ..     ..       …

请用C编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:

(一)功能要求:

(1)信息维护:

要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息

(2)信息查询:

要求:查询时可实现按姓名查询、按学号查询

(3)成绩统计:

要求:A输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。

(4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)

(二)其它要求:

(1)使用C或C++语言,源程序要有适当的注释,使程序容易阅读

(2)采用文本菜单界面

(3)学生可增加新功能模块

三、实验需求分析

用数组或链表数据结构完成一个学生成绩管理系统,此系统的具体功能要求如下:

1信息维护功能
  1、增加学生信息:输入学生学号、姓名、性别、 语文、数学、英语、政治四门课成绩,可插入一个或多个学生信息到当前编辑的班级数据中。

2、删除学生信息:可按学号或者姓名删除一个或多个学生信息。

3、修改学生信息:可按学号或者姓名修改学生语文、数学、英语、政治四门课任一门及多门科目成绩。

  4、学生信息每一班存为一个数据文件,数据文件可在程序中编辑和重新保存。
  5、用户输入学生信息可随时保存数据文件。

2信息查询功能
  1、浏览所有学生信息;
  2、按学号查询学生信息;
  3、按姓名查询学生信息;
  4、查询一个班总成绩和平均成绩;
 3成绩统计功能

1、统计班级总人数,每门课的最高分、最低分、平均分及各分数段( <60,60-69,70-79,80-89,>90)学生数。

4排序功能

1、 按学号输出一个班学生信息:学号、姓名、性别、语文、数学、英语、政治成绩和总成绩到屏幕和文件。

2、成绩排名按总成绩或各科成绩排序输出学生信息  

四、设计内容分析

模块基本介绍:

(一)学生信息录入及修改、删除模块

录入学生的信息:学号、姓名、性别、语文、数学、英语、政治四门成绩。用户可插入一个或多个学生信息到当前编辑的班级数据中,同时也可以进行修改和删除。

(二)文件保存功能模块

可以将学生信息存为一个数据文件。用户输入的学生信息可随时保存数据文件。

(三)查询功能模块

在此模块里,用户可实现以下操作:

1、浏览所有学生信息;

2、按学号查询学生信息;

3、按姓名查询学生信息;

4、查询每个人的总成绩、平均成绩和科目的总成绩、平均成绩;

5、按科目将学生进行排名;

6、进行成绩的统计分析:包括总人数,每门课的最高成绩、最低成绩、平均成绩、各个分数段的人数(100-90、89-80、79-70、69-60、59-50、50以下)、及格人数。

(四)报表输出功能模块

在此模块中,用户可以浏览所有学生的信息,或者可以按学号输出一个班学生信息:学号、姓名、性别、语文、数学、英语、政治、总成绩和平均成绩。

五、详细设计

1.   用户输入模块设计

提示用户输入一个0~10的值,并存储在一个整型变量m中。

2.   信息维护模块设计

通过应用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.  查询功能模块

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

5.  排序输出功能模块

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

第二章 程序调试及测试分析

一、调试方法与技巧

代码完成后,保存代码并尝试运行程序,启动调试。往往会出现以下几种常见错误。

1字母输入错误,出现此类基本错误时只需根据提示修改即可;

2编译错误,子程序或变量未定义,此时可添加头文件,定义申明;

3数据库没连接上,在建立MFC程序文档时要连接所需数据库,此次设计需连接Access中的mdb表格数据;

4在程序中偶尔也会出现一些我们不大熟悉的错误因素,一般可借助网络解决。

        

第三章实验设计结果及结论

(一)结果演示:

1、学生信息的添加、删除、修改。

图(a)

2、按姓名查询。

图(b)

3、按学号查询。

图(c)

4、按成绩查询。

图(d)

5、按科目将成绩排名。

图(e)

(二)设计总结

通过这次课程设计,让我了解了在生活中知识能够给我们带来很大了很大的帮助,让我们的生活更加方便有效了。而且通过运用Visual studio 2008和Access软件,让我对于以前学的课程有了更深的体会和巩固,温故而知新。总的来说这次课程设计还是比较成功的做出来了,我和我的同组人都还是很开心的,这种锻炼是很有必要,让我们能学以致用。

参考文献

1. 严蔚敏,吴伟民 《数据结构(C语言版)》 清华大学出版社 20##年

2. 黄维通,贾续涵 《 Visual C++面对对象与可视化程序设计(第三版)》 清华大学出版社  20##年06月版

3. 谭浩强 《C语言程序设计(第四版)》 清华大学出版社 20##年06月版

附录 实验源程序代码

void Cxs_2View::On32771()
{
UpdateData(TRUE);                               //接受用户的数据
     m_pSet->m_strFilter.Format(L"XS='%s'",m_str);  //使用CRecordset类成员变量m_strFilter进入查询状态给出查询要求
     m_pSet->Requery();                             //使用CRecordset类成员函数Requery()重新查询数据源
     UpdateData(FALSE);                             //更新记录集,将输出数据给用户
// TODO: 在此添加命令处理程序代码
}

void Cxs_2View::On32772()
{
    UpdateData();  
 m_pSet->m_strFilter.Format(L"XH=%d",m_ste);
     m_pSet->Requery();
     UpdateData(FALSE);
/*UpdateData(TRUE);
     m_pSet->m_strFilter.Format(L"XH='%s'",m_ste); 
     m_pSet->Requery();
     UpdateData(FALSE);*/
// TODO: 在此添加命令处理程序代码
}

void Cxs_2View::On32773()             //菜单响应函数
{
// TODO: 在此添加命令处理程序代码,使用CRecordset类成员函数AddNew()在表的尾部添加一条记录
css m_s;                        
    if (m_s.DoModal()==IDOK)
 {   m_pSet->AddNew();
     m_pSet->m_XS=m_s.m_c1;
         m_pSet->m_XH=m_s.m_c2;
         m_pSet->m_YW=m_s.m_c3;
         m_pSet->m_SX=m_s.m_c4;
 m_pSet->m_YY=m_s.m_c5;
         m_pSet->m_ZZ=m_s.m_c6;
     m_pSet->Update();
     UpdateData(FALSE);
}                                                       

}

void Cxs_2View::On32774()
{
m_pSet->Delete();
// TODO: 在此添加命令处理程序代码
}

void Cxs_2View::On32775()
{
// TODO: 在此添加命令处理程序代码,使用CRecordset类成员函数Edit()进入编辑状态,允许修改当前记录
css m_s;
    if (m_s.DoModal()==IDOK)
 {   m_pSet->Edit();
     m_pSet->m_XS=m_s.m_c1;
         m_pSet->m_XH=m_s.m_c2;
         m_pSet->m_YW=m_s.m_c3;
         m_pSet->m_SX=m_s.m_c4;
 m_pSet->m_YY=m_s.m_c5;
         m_pSet->m_ZZ=m_s.m_c6;
     m_pSet->Update();
     UpdateData(FALSE);
         m_pSet->Requery();
}

}

void Cxs_2View::On32777()
{
// TODO: 在此添加命令处理程序代码
m_pSet->Close();                      //通过Close()函数关闭数据库
m_pSet->m_strSort=L"YW";              //设置变量m_strSort,使用了CRecordset()类的成员m_strSort,实现按指定字段进行从小到大的排序
m_pSet->Open();                       //再次打开数据库
    UpdateData(FALSE);                    //调用函数UpdataData()函数更新已经排序过的记录在视图中的显示

}

void Cxs_2View::On32778()
{
m_pSet->Close();
m_pSet->m_strSort=L"SX";
m_pSet->Open();
    UpdateData(FALSE);
// TODO: 在此添加命令处理程序代码
}

void Cxs_2View::On32779()
{
m_pSet->Close();
m_pSet->m_strSort=L"YY";
m_pSet->Open();
    UpdateData(FALSE);
// TODO: 在此添加命令处理程序代码
}

void Cxs_2View::On32780()
{
m_pSet->Close();
m_pSet->m_strSort=L"ZZ";
m_pSet->Open();
    UpdateData(FALSE);
// TODO: 在此添加命令处理程序代码
}

void Cxs_2View::On32781()
{
 // TODO: 在此添加命令处理程序代码,实现输入任意一个课程名和一个分数段,统计出在此分数段的学生情况
   UpdateData();
  if (m_str1=="YW")
{ m_pSet->m_strFilter.Format(L"YW=%d ",m_str1);
          m_pSet->m_strFilter.Format(L"YW>%d and YW<%d ",m_str2,m_str3);
          m_pSet->Requery();
          if(m_pSet->GetRecordCount()==0)                    //如果记录条件为零
          { AfxMessageBox(L"无满足条件记录");
             return;}
  UpdateData(FALSE);}
  else if (m_str1=="SX")
 { m_pSet->m_strFilter.Format(L"SX=%d ",m_str1);
           m_pSet->m_strFilter.Format(L"SX>%d and SX<%d ",m_str2,m_str3);
           m_pSet->Requery();
          if(m_pSet->GetRecordCount()==0)
          { AfxMessageBox(L"无满足条件记录");
             return;}
   UpdateData(FALSE);}
   else if (m_str1=="YY")
 { m_pSet->m_strFilter.Format(L"YY=%d ",m_str1);
           m_pSet->m_strFilter.Format(L"YY>%d and YY<%d ",m_str2,m_str3);
           m_pSet->Requery();
          if(m_pSet->GetRecordCount()==0)
          { AfxMessageBox(L"无满足条件记录");
             return;}
   UpdateData(FALSE);}
    else if (m_str1=="ZZ")
 { m_pSet->m_strFilter.Format(L"ZZ=%d ",m_str1);
           m_pSet->m_strFilter.Format(L"ZZ>%d and ZZ<%d ",m_str2,m_str3);
           m_pSet->Requery();
          if(m_pSet->GetRecordCount()==0)               
          { AfxMessageBox(L"无满足条件记录");
             return;}
   UpdateData(FALSE);}

}

void Cxs_2View::On32782()
{
// TODO: 在此添加命令处理程序代码
UpdateData(TRUE);
m_pSet->m_strFilter.Format(L"XS like '%s'",'%'+m_str+'%');
m_pSet->Requery();
if(m_pSet->GetRecordCount()==0)
{
AfxMessageBox(L"无满足条件记录");
return;
}UpdateData(FALSE);
}

相关推荐