学生成绩管理系统C++编程实验报告

时间:2024.3.31

《C++程序设计》

课程设计报告

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

专业:计算机科学与技术(网络工程)

班级:

学号:

姓名:

指导老师:

日期:2009.05.31

 目录

一、设计任务与要求…………………………………………3

1.设计内容………………………………………………3

2.课程设计的要求………………………………………3

二、系统分析(需求分析)…………………………………3

1.需求分析…………………………………………3

2.系统性能要求……………………………………3

3.系统的功能分析……………………………………3

4.系统功能模块……………………………………3

5.模块框架图…………………………………………3

三、系统设计与实现……………………………………4

1.界面设计…………………………………………4

2.功能设计与实现………………………………4

四、测试结果……………………………………4

五、总结…………………………………………5

六、参考资料……………………………………5

附录:源程序……………………………………5

一、设计任务与要求

1.设计内容:

   a.设计四个类;学生类(描述学生基本信息);成绩类:班级类;课程类(描述课程信息:课程编号,科目名称(如高等数学,大学英语等);学生成绩及课程信息用文件保存,每个类一个文件,程序执行时从文件读入;

b.能按学期,按班级完成对学生成绩的录入,修改,能按班级统计学生的成绩;求学生的总分及平均分;并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单。

– 设置学生的成绩信息:学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所占百分比

– 计算学生总评成绩:总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比)

– 显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息。分单人显示和以班输出(班成绩单格式输出到文件)

– 注意,至少一个班,30人三门课

2.课程设计的要求:

根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序来实现设计课程内容中的全部功能;设计主控模块程序.对给出的程序源代码要给出各部分的详细注释.自己根据能力及需要添加相应功能模块,增强模拟系统功能。包括系统的功能分析、系统的功能模块设计、程序流程图或结构框图、逻辑结构设计,数据库中的表、视图(如果使用)、索引的结构和定义、触发器、存储过程、课程设计体会。

二、系统分析(需求分析)

1.需求分析:

a.能对学生各科成绩进行录入:。

b.能对学生的成绩进行增加。

c.能对学生的成绩进行删除。

d.能对学生的成绩进行修改。

e.能对学生的成绩按总成绩,姓名,进行查询。

f.能输出学生的所有数据。

g.能进行成绩统计

h能进行总分查询排名。

2.系统性能要求:

a.系统安全、可靠;

b.功能齐全;

c.操作方便、界面友好;

d易于维护和扩充。

3.系统的功能分析:

资料维护:系统维护包括对学生信息的录入操作及数据表中的信息进行浏览。

系统功能:可以对数据表中的信息进行浏览。

系统查询:可以对学生的信息进行查询。

4.系统功能模块

学生成绩查询系统有:成绩录入、增加、删除、修改,数据查询,排序显示构成。

5.模块框架图

组织结构图

三、系统设计与实现

1.界面设计

程序运行后会出现一个简捷的窗口,便于用户查询数据。

2.功能设计与实现

通过主窗体调用其他窗体,具体实现可以参照系统分析相关内容。应用系统主控界面包括记录编辑和记录查询等功能模块。记录编辑功能完成学生成绩记录编辑和记录查询功能。记录查询功能可以对数据各分类的记录进行查询

四、测试结果

每一个case都能执行,但是有很多的地方都不够完善,例如:在总成绩排序中,只能输出总成绩,不能单独的输出学生的相应的信息;每次进行别的操作之前都要在进行一次数据的录入,不能直接对原有的文件进行读取。

五、总结

此次c++课程设计,在指导教师的精心教导下,我们学会了如何用C++编写一个简单的应用程序。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的查询界面,将各个功能集中出来按照程序编写原则,便于查询。

根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C++语言的理解和掌握。理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。

六、参考资料

附录:源程序

 #include<iostream>

#include<string>

#include<fstream>

#include<sstream>

#include<iomanip>

using namespace std;

class Tstu //通过定义一个类来定义数据录入的函数

{

  char name[20];

  int number;

  float math,cpp,english,average,sum;

public:

  Tstu()

  {};

  Tstu ( char n[20], int num,float ma,float cj,float eng ) ;

  float getsum();//得到总分的函数

  float getaver(); //得到平均分的函数

 friend void main(); //将主函数定义为友元函数,方便访问类中的成员

};

 Tstu::Tstu ( char n[20], int num,float ma,float cj,float eng )

 {

  strcpy(name,n); //得到姓名

  number=num; //得到学号

  math=ma; //得到数学成绩

  cpp=cj; //得到c++成绩

  english=eng; //得到英语成绩

 }

 float Tstu::getsum() //得到总分的函数

 {

  sum=cpp+english+math;

  return sum;

 }

 float Tstu::getaver() //得到平均分的函数

 {

  average=getsum()/3;

  return average;

 }

 void main()

{

 cout<<"*****************欢迎来到学生成绩查询系统*****************"<<endl;

 cout<<"请选择您需要的操作!"<<endl; //菜单的输出

 cout<<"操作:"<<endl;

 cout<<"(1)数据录入"<<endl;

 cout<<"(2)增加学生"<<endl;

 cout<<"(3)删除学生"<<endl;

 cout<<"(4)修改数据"<<endl;

 cout<<"查询:"<<endl;

 cout<<"(5)按总成绩查询"<<endl;

 cout<<"(6)按姓名查询"<<endl;

 cout<<"(7)输出所有学生的数据"<<endl;

 cout<<"成绩统计:"<<endl;

 cout<<"(8)每个学生的平均成绩"<<endl;

 cout<<"(9)各科不及格人数"<<endl;

 cout<<"排名:"<<endl;

 cout<<"(10)按总分查询排名"<<endl;

 cout<<"(11)退出"<<endl;

 cout<<"选择相关操作请输入相对的括号里的阿拉伯数字及字母!"<<endl;

 int p=0; //全局变量,用于选择菜单时的输入 

 char w;//全局变量,用于在大项中选择是否继续操作

 Tstu *s[100]; //类定义的指针将所录入的数据按类中的形式分别存储

 ofstream *file[100];

 int i=0; //全局变量,用于做每个录入数据的下标

 int j=0;

 int chris1=0; //用于判断do—while语句

 do //判断输入是否正确

 {

  cin>>p;

  if((p>=1&&p<=11))

  chris1=1;

  else

  cout<<"指令错误!请重新输入:"<<endl;

 }while(chris1==0);

 do{

   switch(p)

   {

     case 1: //数据的录入

     {

           char c; //用于在小项中选择是否继续操作

           char name[20];

           int number;

           float math,cpp,english;

      do{

          cout<<"请输入姓名:"<<endl;

          cin>>name;

          cout<<"请输入学号:"<<endl;

          cin>>number;

          cout<<"请输入数学成绩:"<<endl;

          cin>>math;

          cout<<"请输入C++成绩:"<<endl;

          cin>>cpp;

          cout<<"请输入英语成绩:"<<endl;

          cin>>english;

          fstream outfile,infile; //作一个文本文档在文件夹中用于显示所录入的数据

          outfile.open("f1.txt",ios::out|ios::app);

          if(!file)

{  cout<<"f1.txt can not open.\n";

             return;

                  }

 outfile<<name<<"  "<<"学号:"<<number<<"  "<<"数学成绩:"<<math<<"  "<<"C++成绩:"<<cpp<<"  "<<"外语成绩:"<<english<<endl;

            outfile.close();

            infile.open("f1.txt",ios::in);

            if(!file) //判断文件是否打开

                    {  cout<<"f1.txt can not open.\n";

              return;

}

            char ch;

            while(infile.get(ch))

            cout<<ch;

            cout<<endl;

            infile.close();

            j++;

            s[i]=new Tstu(name, number,math, cpp, english);

            i++;

            cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;

            cin>>c;

            chris1=0;

            do{

            if(c!='y'&&c!='n')

                    { cout<<"指令错误!请重新输入!"<<endl;

             cin>>c;

}

            else

            chris1=1;

       }while(chris1==0);

     }while(c=='y'); //重复输入

   break;

     }

     case 2: //增加学生数据

        {

               char name[20];

               int number;

               float math,cpp,english;

               char c;

            do

       {

              cout<<"请输入您要增加的学生的姓名:"<<endl;

              cin>>name;

              cout<<"请输入你要增加的学生的学号:"<<endl;

              cin>>number;

              cout<<"请输入数学成绩:"<<endl;

              cin>>math;

              cout<<"请输入C++成绩:"<<endl;

              cin>>cpp;

              cout<<"请输入英语成绩:"<<endl;

              cin>>english;

              fstream outfile,infile;

              outfile.open("f1.txt",ios::out|ios::app);

              if(!file)

         {

                cout<<"f1.txt can not open.\n";

                return;

         }

               outfile<<name<<"  "<<"学号:"<<number<<"  "<<"数学成绩:"<<math<<"  "<<"C++成绩:"<<cpp<<"  "<<"外语成绩:"<<english<<endl;

               outfile.close();

               infile.open("f1.txt",ios::in);

              if(!file)

         {

                cout<<"f1.txt can not open.\n";

                return;

         }

                char h;

                while(infile.get(h))

                cout<<h;

                cout<<endl;

                infile.close();

                j++;

                s[i]=new Tstu(name,number, math, cpp, english);

                i++;

                cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;

                cin>>c;

                if(c!='y'&&c!='n')

              {

                     cout<<"指令错误!请重新输入!"<<endl;

                     cin>>c;

              }

       }while(c=='y');

             break;

        }

     case 3://删除学生信息

        {

                char c;

                  string xingming,line,str,name;

                do

                {   ifstream fin("f1.txt");

                      fstream outfile("f2.txt",ios::trunc|ios::out); //作一个文本文档在文件夹中用于显示所录入的数据

                      cout<<"请输入您要删除的学生的姓名:"<<endl;          

                      cin>>xingming;

                       while(!fin.eof() )

                       {

                              getline(fin,line);

                          istringstream stream(line);

                          name = line.substr(0,line.find(" ",0));//找到名字,判断是否相等

                          if(name != xingming)

                          outfile<<line<<endl;

                       }

                      outfile.close();

                      fin.close();

                      fstream f("f1.txt",ios::trunc|ios::out);

                      ifstream outf("f2.txt");

                      f<<outf.rdbuf();

                      outf.close();

                      f.close();

                      cout<<"数据删除成功,想继续删除吗(y/n)"<<endl;

                      cin>>c;

                      if(c!='y'&&c!='n')

                       {

                              cout<<"指令错误!请重新输入!"<<endl;

                          cin>>c;

                       }

                }while(c=='y');

                   break;

        }

               

        case 4://修改数据

        {

                string sname,line,str,name;

              int nu;float eng,ma,com;int flag;char c;

              if(i==0)

              {

              cout<<"系统中没有输入数据,请先输入数据!"<<endl;break;

              }

              do

               {

                      flag=0;

                      cout<<"请输入您要修改的学生的姓名:";

                      cin>>name;

                      fstream fin("f1.txt",ios::in);

                      ofstream outfile("f.txt",ios::trunc|ios::out);

                      cout<<endl;

                      while(!fin.eof() ) //在文件中查找

                     {

                             getline(fin,line);

                            istringstream stream(line);

                            sname = line.substr(0,line.find(" ",0));

                            if(name!=sname)

                            {

                                   outfile<<line<<endl;

                            }

                            else flag=1;

                      }

                      fin.close();

                      if(flag=1)

                      {

                            cout<<"请输入修改学生姓名及其新学号,数学,c++和英语成绩:";

                            cin>>name>>nu>>ma>>com>>eng;

                            cout<<endl;

                            outfile<<name<<"  "<<"学号:"<<nu<<"  "<<"数学成绩:"<<ma<<"  "<<"C++成绩:"<<com<<"  "<<"外语成绩:"<<eng<<endl;

                            outfile.close();

                            fstream outf("f1.txt",ios::trunc|ios::out);

                            fstream inf("f.txt",ios::in);

                            outf<<inf.rdbuf()<<endl;

                            outf.close();

                            inf.close();

                      }

                      if(flag=0)cout<<"对不起,您要修改的学生不存在!请查证后输入!"<<endl;

                    cout<<"想继续修改吗(y/n):";

                      cin>>c;

                      cout<<endl;

                      if(c!='y'&&c!='n')

                      {

                            cout<<"  指令错误!请重新输入!"<<endl<<"     ";

                            cin>>c;

                      }

              }while(c=='y');

              break;

        }

     case 5://按总分查询

        {

               int j=0;float SUM;char c;int flag;

               if(i==0)

              {

              cout<<"系统中没有输入数据,请先输入数据!"<<endl;break;

              }

               do

               {

                      flag=0;

                      cout<<"请输入您要查询的学生的总成绩:"<<endl;

                      cin>>SUM;

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

                      {

                             if(s[j]->getsum()==SUM)

                             {

                                   flag=1;

                                   cout<<"您要查询的学生是:"<<(*s[j]).name<<endl;

                                   cout<<"该生的信息为:"<<endl;

                                   cout<<"  学号:"<<(*s[j]).number<<"  数学分数:"<<(*s[j]).math<<"  c++分数:"<<(*s[j]).cpp<<"  英语分数"<<(*s[j]).english<<endl;

                            }

                      }

                     if(flag==0)cout<<"对不起!您要查询的学生不存在!"<<endl;

                     cout<<"是否继续查?(y/n):";

                     cin>>c;

                     if(c!='y'&&c!='n')

                     {

                            cout<<"指令错误!请重新输入!"<<endl;

                      

                            cin>>c;

                     };

               }while(c=='y');

               break;

        }

     case 6://按姓名查询

        {

               char n[20];char c;int j=0;int flag;

               if(i==0)

              {

              cout<<"系统中没有输入数据,请先输入数据!"<<endl;break;

              }

               do

               {

                      flag=0;

                      cout<<"请输入要查询的名字: "<<endl;

                      cin>>n;

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

                      {

                            if(strcmp(n,(*s[j]).name)==0)

                            {

                                   flag=1;

                                   cout<<"您要查询的学生是:"<<(*s[j]).name<<endl;

                                   cout<<"该生的信息是:学号:"<<(*s[j]).number<<"  数学分数:"<<(*s[j]).math<<"c++分数:"<<(*s[j]).cpp<<"英语分数:"<<(*s[j]).english<<endl;

                            }

                      }

                            if(flag==0)

                            cout<<"对不起您要查询的学生不存在,请查证后再输入!"<<endl;

                            cout<<"您想继续查询吗?(y/n):";

                            cin>>c;

                            if(c!='y'&&c!='n')

                            {

                                   cout<<"指令错误!请重新输入:"<<endl;

                                   cin>>c;

                            }

               }while(c=='y');

               break;

        }

     case 7://输出所有学生数据

        {

               cout<<"所有学生数据如下:"<<endl;

               ifstream file;

                 file.open("f1.txt",ios::in);

             cout<<file.rdbuf();

             file.close();

             break;

        }

     case 8://统计每个学生的平均成绩

        {  

                 if(i==0)

              {

                cout<<"系统中没有输入数据,请先输入数据!"<<endl;break;

              }

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

               {

                      cout<<(*s[m]).name<<"  学号:"<<(*s[m]).number<<"  总分:"<<(*s[m]).getsum()<<"  均分:"<<(*s[m]).getaver()<<endl;

               }

               break;

        }

     case 9://统计各学科不及格人数

        {

               if(i==0)

              {

                cout<<"系统中没有输入数据,请先输入数据!"<<endl;break;

              }

               int m,n,k,j;m=0;n=0;k=0;

               for(j=0;j<i;j++)

               {

                      if(s[j]->math<60)m++;

                      if(s[j]->cpp<60)n++;

                      if(s[j]->english<60)k++;

               }

               cout<<"数学不及格人数为:"<<m<<endl;

               cout<<"c++不及格人数为:"<<n<<endl;

               cout<<"英语不及格人数为:"<<k<<endl;

               break;

        }

        case 10://按总分排名      

        {

               if(i==0)

              {

              cout<<"系统中没有输入数据,请先输入数据!"<<endl;break;

              }

               int h,g,n;int j=0;float a[100],temp;

               for(g=0;g<i;g++)

               {

                      a[j]=(*s[g]).getsum();j++;

               }

                 for(h=0;h<i;h++)

               {for(n=0;n<i-h;n++)

                      if(a[n]>a[n+1])

                      {

                         temp=a[n];a[n]=a[n+1];a[n+1]=temp;

                      }

               }

               for(n=1;n<=i;n++)

                      cout<<a[n]<<endl;

               break;

        }

}

         cout<<"  您想继续进行其他操作吗?(y/n):";

         int flag=0;

   do

   {

       cin>>w;

       cout<<endl;

       if(w!='y'&&w!='n')

       cout<<"  指令错误!请重新输入!"<<endl;

       else

       flag=1;

   }while(flag==0);

   if(w=='y')

   {

      cout<<"*****************欢迎来到学生成绩查询系统*****************"<<endl;

       cout<<"请选择您需要的操作!"<<endl; //菜单的输出

       cout<<"操作:"<<endl;

       cout<<"(1)数据录入"<<endl;

       cout<<"(2)增加学生"<<endl;

       cout<<"(3)删除学生"<<endl;

       cout<<"(4)修改数据"<<endl;

       cout<<"查询:"<<endl;

       cout<<"(5)按总成绩查询"<<endl;

       cout<<"(6)按姓名查询"<<endl;      

 cout<<"(7)输出所有学生的数据"<<endl;

       cout<<"成绩统计:"<<endl;

       cout<<"(8)每个学生的平均成绩"<<endl;

       cout<<"(9)各科不及格人数"<<endl;

       cout<<"排名:"<<endl;

       cout<<"(10)按总分查询排名"<<endl;

       cout<<"(11)退出"<<endl;

       cout<<"选择相关操作请输入相对的括号里的阿拉伯数字及字母!"<<endl;

      cin>>p;

   }

   }while(w=='y');

       

     

更多相关推荐:
java学生成绩管理系统实验报告

JAVA课内实验报告学生成绩管理系统一实验目的及实验环境实验目的在如今的高校日常管理当中学生成绩管理系统就是其中非常重要的一环特别是当前学生规模大课程门类多校区分散等实际情况学生成绩管理系统更具有非常大的实际应...

学生信息管理系统实验报告

西安郵電學院数据库原理及应用设计报告题目:学生信息管理系统一.设计目的学生管理系统是高校管理工作中一项非常重要的组成部分。用户的需求具体体现在各种信息的提供、保存、更新和查询方面,这就要求数据库结构能充分满足各…

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

1目录1需求与功能分析32系统总体框架43模块设计与分析44类的设计与分析65特色算法分析76功能测试107存在的不足与对策138程序源代码149使用说明2310参考文献2321需求与功能分析1需求分析学生成绩...

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

数据结构课程设计报告课题名称姓名学院系科班级指导老师日期学生成绩管理系统20xx年1月17日目录一问题描述3二基本要求3三设计目的4四概念设计4五详细设计51主要数据结构52模块功能53调用关系5六源程序5七测...

学生成绩管理系统数据库设计实验报告

学生成绩管理系统数据库课题雇员信息管理系统姓名学号同组姓名专业班级指导教师设计时间20xx年6月4号20xx年6月10日一需求分析阶段1信息需求对学校而言学生成绩管理系统是所有工作的首要之选但是高校学生的成绩管...

学生成绩管理系统实验报告

学生成绩管理系统C语言程序设计实训报告姓名专业班级指导教师20xx年7月14日目录一实训目的和要求1二实训任务内容1三详细设计说明1四软件使用说明2五实训心得与体会6参考文献7附录部分程序清单7I一实训目的和要...

学生成绩管理系统实验报告

数据库系统原理实验报告实验名称学生成绩管理系统院系计算机与信息工程学院班级20xx级计算机科学与技术二班姓名郅伟远学号一实验目的1熟悉并掌握数据库系统原理这门课所应用的软件SQLServer20xx以及使用该软...

数据库综合实验报告(学生成绩管理系统)

数据库综合实验报告班级:计科***班学号:****姓名:***20XX年12月数据库应用系统的初步开发一、实验类别:综合型实验二、实验目的1.掌握数据库设计的基本技术,熟悉数据库设计的每个步骤中的任务和实施方案…

学生成绩管理系统C++编程实验报告

C程序设计课程设计报告设计题目学生成绩管理系统专业计算机科学与技术网络工程班级学号姓名指导老师日期20xx0531目录一设计任务与要求31设计内容32课程设计的要求3二系统分析需求分析31需求分析32系统性能要...

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

C程序设计课程设计报告2020学年第学期题目学生成绩信息管理系统专业班级姓名学号指导教师成绩年月日目录摘要1第一章绪论211设计目的212开发工具选择213开发环境214本报告的主要内容2第二章需求分析321系...

C语言程序设计学生成绩管理系统实验报告

移通学院C语言程序设计报告书设计名称学生成绩管理系统专业指导老师班级姓名学号座号时间一实验目的1在编辑应用程序过程中逐步加深对C语言编程的理解2加强实践的能力动手能力同时进一步对所学的知识进行巩固3培养初步编程...

学生成绩管理系统实验报告

高级语言程序设计课程设计实验报告题目学生成绩管理系统专业班级姓名成绩指导教师完成日期20xx年06月24日一目的1进一步掌握和利用C语言进行程设计的能力2进一步理解和运用结构化程设计的思想和方法3初步掌握开发一...

学生成绩管理系统实验报告(31篇)