报告封面

时间:2024.3.27

中南大学

本科生课程设计(实践)任务书、设计报告

(C++程序设计)

计算机基础教学实验中心

20##年    7月    4日

目录

一. 任务描述

目的

意义

二. 系统设计思想

系统框架

系统功能

三. 设计过程

四. 运行情况

五. 心得体会

六. 参考文献

一.任务描述

1.1目的

本课程设计的目的是培养应用《面向对象程序设计》设计方法及思想解决实际问题的能力,掌握使用面向对象程序设计语言C++,熟悉面向对象开发平台Visual C++6.0,提高调查研究、查阅技术资料以及编写技术文献的能力。

1.2意义

C++是实践性很强的课程。课程设计是加强我们实践能力的一个强有力手段。课程设计要求我们在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于我们基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。

二.系统设计思想

2.1系统框架


2.2系统功能

1、用C++语言实现系统;

2、对学生信息(包括学号、姓名、性别、英语、数学、c++、计算机基础、)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出。

3、要求设计的管理系统能够完成以下功能:

(1)、每一条记录包括一个学生的学号、姓名、(至少)4门课成绩。

(2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。)

(3)、成绩信息显示浏览功能:完成全部学生记录的显示。

(4)、查询功能:完成按姓名或学号查找学生记录,并显示。

(5)、成绩信息的删除:按姓名或学号进行删除某学生的成绩.

(6)、排序功能:按学生学号或总成绩(从小到大)进行排序。

(7)、应提供一个界面来调用各个功能,调用界面和各个功能的

操作界面应尽可能清晰美观!

三.设计过程

1.主界面的设计:

在主界面中包括“输入学生成绩  显示统计数据  查找学生成绩  修改学生成绩  删除学生成绩  插入学生成绩  按平均分降序排列   显示全部学生成绩   退出本系统”等全部的功能,之所以设计这么一个主界面,一是因为能使用户对程序操作的流程更加清楚简明,二是保证了用户同时只能对一个文件进行操作的系统要求,保证了系统不会发生打开文件紊乱或者出现致命错误。每个函数的具体功能:

1)主函数main():定义学生结构体数组,调用录入、统计等函数对成绩表进行处理;

2)录入函数Input():输入班级各个课成绩;

3)统计函数Statistic():计算平均成绩;

4)查询函数Lookup():查询指定学号学生成绩记录;

5)修改函数Modify():修改指定学号学生成绩记录;

6)删除函数Delete():删除指定学号学生记录;

7)输出函数Output():输出班级所有学生成绩记录;

8) 排序函数Sort():按平均分对学生成绩记录项进行降序排序;

9)插入函数Insert():按平均分顺序插入新记录。

2.运行情况

1).主界面

2)输入学生信息

3.“基本界面”的命名

void DIALOG1::DoDataExchange(CDataExchange* pDX)

{

    CDialog::DoDataExchange(pDX);

    //{{AFX_DATA_MAP(DIALOG1)

    DDX_Text(pDX, IDC_EDIT1, m_e1);

    DDX_Text(pDX, IDC_EDIT2, m_e2);

    DDX_Text(pDX, IDC_EDIT3, m_e3);

    DDX_Text(pDX, IDC_EDIT4, m_e4);

    DDX_Text(pDX, IDC_EDIT7, m_e5);

    DDX_Text(pDX, IDC_EDIT8, m_e6);

    DDX_Text(pDX, IDC_EDIT9, m_e7);

    DDX_Text(pDX, IDC_EDIT10, m_e8);

    //}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(DIALOG1, CDialog)

    //{{AFX_MSG_MAP(DIALOG1)

    ON_BN_CLICKED(IDC_BUTTON1, OnButton1)

    ON_BN_CLICKED(IDC_Input, OnInput)

    ON_BN_CLICKED(IDC_Lookup, OnLookup)

    ON_BN_CLICKED(IDC_Delect, OnDelect)

    ON_BN_CLICKED(IDC_Delete, OnDelete)

    ON_BN_CLICKED(IDC_Modify, OnModify)

    ON_BN_CLICKED(IDC_OK, OnOk)

    ON_BN_CLICKED(IDC_Cancel, OnCancel)

    //}}AFX_MSG_MAP

END_MESSAGE_MAP()

4.各个部分的代码

1)“输入”命令按钮的代码.

 void DIALOG1::OnInput()

{

    // TODO: Add your control notification handler code here

system("cls"); /*运行前清屏*/

    int i=0;

    int flag;

    char sign;

    cout<<endl<<"====>> 请输入学生成绩 <<===="<<endl;

    while(sign!='n'&&sign!='N') /*判断*/

    {

loop:

       cout<<"    学号:";

       cin>>stud[i].num;

       int c=0;

       while(c<i)

       {

           c++;

           if(stud[i].num==stud[i-c].num)

           {

              cout<<" 你输入的学号已经存在!请重新输入。"<<endl;

              goto loop;

           }     

       }

       cout<<"    姓名:";

       cin>>stud[i].name;

       cout<<" 性别:";

       cin>>stud[i].sex;

         do{  

           flag=0;

           cout<<"    英语成绩:";

           cin>>stud[i].english;

            if(stud[i].english>100 ||stud[i].english<1)

               cout<<"对不起,请输入1-100之间的数字!!\n";

            else

               flag=1;

       }while(flag==0);

        do{  

           flag=0;

           cout<<"    数学成绩:";

           cin>>stud[i].math;

            if(stud[i].math>100 ||stud[i].math<1)

               cout<<"对不起,请输入1-100之间的数字!!\n";

            else

               flag=1;

       }while(flag==0);

        do{  

           flag=0;

           cout<<"    C++成绩:";

           cin>>stud[i].c;

            if(stud[i].c>100 ||stud[i].c<1)

               cout<<"对不起,请输入1-100之间的数字!!\n";

            else

               flag=1;

        }while(flag==0);

        do{  

           flag=0;

           cout<<"计算机基础成绩:";

           cin>>stud[i].computer;

            if(stud[i].computer>100 ||stud[i].computer<1)

               cout<<"对不起,请输入1-100之间的数字!!\n";

            else

               flag=1;

       }while(flag==0);

    stud[i].average=(stud[i].english+stud[i].math+stud[i].c+stud[i].computer)/4;

       cout<<"    平均分为:"<<stud[i].average<<endl;

        cout<<"====>提示:是否继续写入学生成绩?(Y/N)";

       cin>>sign; /*输入判断*/

       i++;

    }

    Write(stud,i);   

}

2)“查找”命令按钮代码

void DIALOG1::OnLookup()

{

    // TODO: Add your control notification handler code here

    system("cls"); /*运行前清屏*/

    int n=Read(stud);

    int s;

    int i=0;

    cout<<endl<<"====>> 查找学生成绩 <<===="<<endl;

    cout<<"请输入需要查找学生的学号:"<<endl;

    cin>>s;

    while((stud[i].num-s)!=0&&i<n) i++; /*查找判断*/

    if(i==n)

    {

       cout<<"=====>提示:对不起,无法找到该学生的信息!"<<endl; /*输入失败信息*/

    }

    else

    {

       cout<<"---------------------------"<<endl;

       cout<<"学号:"<<stud[i].num<<endl;  /*输出该学生信息*/

       cout<<"姓名:"<<stud[i].name<<endl;

       cout<<"性别:"<<stud[i].sex<<endl;

        cout<<"英语:"<<stud[i].english<<endl;

       cout<<"数学:"<<stud[i].math<<endl;

       cout<<"C++:"<<stud[i].c<<endl;

       cout<<"计算机技术:"<<stud[i].computer<<endl;

       cout<<"平均分:"<<stud[i].average<<endl;

    }

}

3)“删除”命令按钮代码

void DIALOG1::OnDelete()

{

system("cls"); /*运行前清屏*/

    int n=Read(stud);

    int s;

    int i=0,j;

    cout<<endl<<"====>> 删除学生成绩 <<===="<<endl;

    cout<<"请输入需要删除学生的学号:"<<endl; /*交互式问寻*/

    cin>>s;

    while((stud[i].num-s)!=0&&i<n) i++; /*查找判断*/

    if(i==n)

    {

       cout<<"====>提示:对不起,无法找到该学生……"<<endl; /*返回失败信息*/

    }

    else

    {

       for(j=i;j<n-1;j++) /*删除操作*/

       {

            stud[j].num=stud[j+1].num;

           strcpy(stud[j].name,stud[j+1].name);

            strcpy(stud[j].sex,stud[j+1].sex);

            stud[j].english=stud[j+1].english;

           stud[j].math=stud[j+1].math;

           stud[j].c=stud[j+1].c;

           stud[j].computer=stud[j+1].computer;

           stud[j].average=stud[j+1].average;

       }

       cout<<"====>提示:已成功删除!"<<endl; /*返回成功信息*/

    }

    Write(stud,n-1);  // TODO: Add your control notification handler code here

   

}

4)“修改”命令按钮代码

void DIALOG1::OnModify()

{

    // TODO: Add your control notification handler code here

    system("cls"); /*运行前清屏*/

    int n=Read(stud);

    int s;

    int i=0;

    cout<<endl<<"====>> 修改学生成绩 <<===="<<endl;

    cout<<"请输入需要修改成绩学生的学号:"<<endl;

    cin>>s;

    while((stud[i].num-s)!=0&&i<n) i++; /*查找判断*/

    if(i==n)

    {

       cout<<"=====>提示:对不起,无该学生的成绩……"<<endl; /*输入失败信息*/

    }

    else

    {

       cout<<"----------该学生的信息----------"<<endl; /*格式头*/

       cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"性别"<<"\t"<<"英语"<<"\t"<<" 数学"<<"\t"<<"C++"<<"\t"<<"计算机基础"<<"\t"<<"平均分"<<endl;

       cout<<"---------------------------------"<<endl;

cout<<stud[i].num<<"\t"<<stud[i].name<<"\t"<<stud[i].sex<<"\t"<<stud[i].english<<"\t"<<stud[i].math<<"\t"<<stud[i].c<<"\t"<<stud[i].computer<<"\t"<<stud[i].average<<endl;

       cout<<"请重新输入该学生的信息"<<endl;

        cout<<"学号:"<<endl; /*交互输入*/

       cin>>stud[i].num;

       cout<<"姓名:"<<endl;

       cin>>stud[i].name;

       cout<<"性别:"<<endl;

       cin>>stud[i].sex;

        cout<<"英语成绩:"<<endl;

       cin>>stud[i].english;

       cout<<"数学成绩:"<<endl;

       cin>>stud[i].math;

       cout<<"C++成绩:"<<endl;

       cin>>stud[i].c;

       cout<<"计算机基础成绩:"<<endl;

       cin>>stud[i].computer;

    stud[i].average=(stud[i].english+stud[i].math+stud[i].c+stud[i].computer)/4;

       cout<<"平均分为:"<<stud[i].average<<endl;

        char c;

        cout<<"是否保存数据?(y/n)"<<endl;

        cin>>c;

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

        Write(stud,n);

    }

}

5)“确定”命令按钮代码

void DIALOG1::OnOk()

{

    // TODO: Add your control notification handler code here

if (FOUNCTION==Input)

{

    Input();

}

else if(FOUNCTION==Modify)

{

    Modify();

}

else if(FOUNCTION==Delete)

{

    Delete();

}

else if(FOUNCTION==Lookup)

{

    Lookup();

}

}

6)“删除”命令按钮代码

void DIALOG1::OnCancel()

{

    // TODO: Add your control notification handler code here

    _variriant_t var;

    CString str;

    FOUNCTION=NONE;

    if(m_pRecordset->BOF)

    {m_btnAdd.SetState(false);

    return;

    }

m_btnInput.EnableWindow(true);

m_btnAdd.EnableWindow(true);

m_btnDelete.EnableWindow(true);

m_btnModify.EnableWindow(true);

m_btnInput.SetState(false);

m_btnAdd.SetState(false);

m_btnDelete.SetState(false);

m_btnModify.SetState(false);

m_ctlSID.SetReadOnly(FALSE);

m_ctlCID.SetReadOnly(FALSE);

M_BTNoK.SetFocus();

if(m_pRecordset->adoEOF)

{

   m_pRecordset->MoveLast();

}

try

{

    var=m_pRecordset->GetCollect("CID");

    if(var.vt !=VT_NULL)

       m_CID=var.iVal;

    var=m_pRecordset->GetCollect("SID");

    if(var.vt !=VT_NULL)

       m_CID=var.iVal;

    var=m_pRecordset->GetCollect("IsPass");

    if(var.vt !=VT_NULL)

       m_IsPass=var.iVal;

    var=m_pRecordset->GetCollect("Score");

    m_Score=var.iVal;

    UpdateData(false);

}

catch(_com_error *e)

{

    AffxmessageBox(e->ErrorMessage());

}

}

7)主函数代码

class  Stu       //构建学生类

{

public:

    friend void Input(Stu stud[]) ;

    friend void Statistic(Stu stud[]);

    friend void Lookup(Stu stud[]) ;

    friend void Modify(Stu stud[]) ;

    friend void Delete(Stu stud[]) ;

    friend void Output(Stu stud[]) ;

    friend void Sort(Stu stud[]) ;

    friend void Insert(Stu stud[]) ;

    friend void Write(Stu stud[],int n);

    friend int Read(Stu stud[]);

private:

    int num;

    char name[8];

    char sex[4];

    float english;

    float math;

    float c;

    float computer;

    float average;

    int order;

}stud[100];

void Write(Stu stud[],int n)  //向文件中写入数据

{

    fstream myFile;

    myFile.open("student.dat",ios::out|ios::binary);

    if(!myFile)

    {

       cout<<"student.dat can't open!"<<endl;

       abort();

    }

    int count=n;

    myFile<<count<<endl<<endl;

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

    {

       myFile<<" "<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].sex<<" "<<stud[i].english<<" "<<stud[i].math<<" "<<stud[i].c

<<" "<<stud[i].computer<<" "<<stud[i].average<<endl;

    }

      myFile.close();

}

int Read(Stu stud[])  //从文件中读数据

{

      fstream myFile;

      myFile.open("student.dat",ios::in|ios::binary);

      if(!myFile)

    {

       cout<<"student.dat can't open!"<<endl;

       abort();

    }

      int count;

      myFile.seekg(0);

      myFile>>count;

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

      {  

myFile>>stud[i].num>>stud[i].name>>stud[i].sex>>stud[i].english>>stud[i].math>>stud[i].c>>stud[i].computer>>stud[i].average;

      }

   myFile.close();

   return count ;

}

五.课程设计心得

这是一个综合性较强,很实际的一个编程实例。刚学C++时候,感觉类和对象还挺有意思的,刚接触到这个题目时,觉得应该没什么大问题吧,因为,我自认为一些基本知识点都已经掌握了。可是,真的当我动手编程的时候,才发现并没有想象中的那么简单。单个知识点是弄清了,但是,将所有的知识点综合起来运用时,就碰到了各种各样的问题了。有时候,一个错误得找好久,才能发现。

本系统的重点就是要会建立两个类。一个是学生类student,用来存放一个学生的成绩记录,相当于一个结构体的功能吧。另一个类是学生成绩记录系统类stuscore,该类用来存放多个学生的成绩记录。难点就是stuscore类里的各个功能的实现。总的来说,添加,显示,查找,这三个功能比较容易,但是,删除,保存,加载这三个功能就需要花点心思了,可能是平时用的比较少吧,生疏了。可见只有通过平时多加练习,才能有助于自己巩固知识点。

最后想说的是,调试程序真的很关键。调试程序需要较大的耐心。可能调试程序的时间比自己编写整个程序的时间还要长,下的工夫还要深,但这是一个程序员必须了解,也必须接受的事实。有好几次,几个错误让我很是头疼啊,很想删了,重新来过,可是最后发现,还是得有耐心去调试程序。

为了完成这个课题,在图书馆和网上找了些资料,自己开始研究探索。开始在网上找到相但是为关的课程设计资料,并对照这课本进行分析,然后自己开始着手进行自己的设计。当然一开始并不会很顺利,但是自己还是坚持一步步探索下来,终于完成了自己的小设计,虽然这个设计做的并不是很好,功能也不强大,但始终是自己一步一步一步设计,代码是自己一个一个键敲出来的,所以不管结果,我能说我确实学到些东西了!通过这个实验的练习,我也学到了很多东西,特别是加深了对类和对象理解和应用方面,也很谢谢老师给我的帮助。

学生信息管理系统的功能基本都可以实现,但因为是初学,所以还有很多地方可以改进和完善,如系统的整体界面风格,学生资料的详细管理等等。通过不断的学习,以后应该进一步的巩固系统,这样才能够使系统实现的更充实、更完善。

六.参考文献

更多相关推荐:
素质报告书封面

20xx20xx学年度第二学期灌云县百川小学素质报告书班级姓名

调研报告封面

毛泽东思想和中国特色社会主义理论体系概论实践教学调研报告20xx20xx01课题名称大学生恋爱观调研分析以中南财经政法大学为例专业班级商务英语1002组长唐红成员沈雯雯赵伟陈小丹李珍周龙林泽宇任课教师龚先庆1毛...

调查报告封面格式

调查报告封面格式:太原科技大学思想政治理论课社会实践调查报告课程:毛泽东思想和中国特色社会主义理论体系概论题目:班级:姓名:学号姓名:学号姓名:学号姓名:学号姓名:学号(注:姓名栏根据实有人数设置,按作者贡献顺…

报告封面

检验报告正文共1页样品名称水泥委托单位澧县永兴商品混凝土有限责任公司检验类别澧县永兴商品混凝土有限责任公司实验室二一二年四月十二日报告声明1本报告仅适用于本企业内部对产品质量的控制2无澧县永兴商品混凝土有限责任...

报告书封面及目录

郑州轻工业学院本科毕业设计报告书题目人物形象设计学生姓名王龙专业班级服表07级1班学号20xx05050117院系艺术设计学院指导教师职称秦杰讲师完成时间20xx年4月25日目录1课题简介及选题背景111课题简...

报告书封面

淮海工学院实习报告书题目学院专业班级姓名学号会计实务综合实习东港学院计算机科学与技术D计算机121施晓霞20xx13019520xx年7月9日

报告封面模板

监测报告项目编号项目名称委托单位报告日期年月日陕西XXX服务有限公司说明1陕西服务有限公司是依法设置的检测服务机构我公司保证检测的科学性公正性有效性对检测数据的真实性可靠性负责对委托单位所提供的样品和技术资料保...

报告书封面1

皖西学院课程设计报告书系别机电学院专业班级电气0801班学生姓名王鸿学号20xx011166课程设计题目IGBT驱动与保护电路设计起迄日期1月3日1月9日课程设计地点A211指导教师翁志刚下达任务日期20xx年...

年审报告书(封面)

劳动保障书面审查报告书20xx年度单位名称报告时间芜湖市人力资源和社会保障局制1说明一劳动保障年度书面审查是人力资源和社会保障行政部门根据劳动保障监察条例依法对用人单位上一年度遵守劳动保障法律法规的情况进行定期...

创业报告书封面

邯郸学院20xx20xx学年第一学期创业教育期末考试大学生创业计划书序号编码作品名称专业名称团队名称团队成员型园林规划有限责任公司艺术设计黑猫陆克岭王建兵王兴基吴瑞璐苏晓琳20xx年12月目录计划摘要1公司介绍...

创业计划报告书封面与目录范例

创业计划报告书封面与目录范例第七届挑战杯创业计划大赛公司或项目名称出版时间年月指定联系人单位电话Email通信地址邮编网址保密须知本计划书属于商业机密所有权属于本公司或项目名称其所涉及的内容和资料只限于已签署投...

报告封面及目录

碧桂园豪园五期人工挖孔桩基础超前钻探报告广东省工程勘察院二0一一年九月碧桂园豪园五期人工挖孔桩基础超前钻探报告工程勘察资质证书等级综合甲级证书编号19xx18kj营业执照注册号4400001006209地址广州...

报告书封面(49篇)