C++驾校报考系统大作业试验报告

发布时间:2012-03-06 20:48:52



一、需求分析

1.1开发背景

当代社会正处在从工业社会信息社会过渡的伟大时代。在这个面临着巨大的技术革命,信息技术突飞猛进的时代,每个机构都必须紧跟时代的步伐,加强机构竞争力和提升现代化机构的管理能力。伴随着机构对信息化需求的增长,计算机、网络技术已渗透到机构的日常工作中。传统的机构内信息的交流方式已逐渐不能满足机构对大量信息的快速传递与处理的需求。
面对着日益复杂和不断发展,变化的社会环境,特别是机构间日趋剧烈的竞争形势,一个人、一个机构要在现代社会中求生存,求发展,必须具备足够的信息和强有力的信息收集与处理手段。电子计算机以强大的信息处理能力作为人类脑力劳动的有力助手登上历史舞台以后,出现了把人类从繁琐的脑力劳动下解放出来的现代信息革命。
众所周知,当今社会为信息社会,世界已进入在计算机信息管理领域中激烈竞争的年代,因此,想要加快驾校报考情景的管理,若依靠手工的话,不仅需要耗用大量的人力,物力,财力,而且工作效力低,而且难以达到预期的目的,所以特决定开发一个驾校报考情景管理信息系统。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对信息进行管理,具有着手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高信息管理的效率,也是机构发展的需要。

1.2项目目标

开发一个驾校报考管理信息系统,可以减少其工作量。其功能可概括为:

一:系统初步的建立;

二:系统的查询

三:系统的更新(包括信息的修改和删除);

四:系统的更新等诸多功能的管理系统。

1.3运行环境

软件:运行在Windows软件环境下;

硬件:具有网络连接设备的PC机或笔记本电脑;最低配置:要求内存大于128M,硬盘大于1G

二、 程序分析

2.1程序流程图

流程图一:

主函数:main()-----系统主界面

*******************功能:1.负责人通道:负责信息的录入,查找,修改,删除等一系列操作;2.学生通道:查询自己的安排,修改自己的安排等操作;3 退出系统 等功能***********************

1. 通过设定switch()函数,实现选择功能运用。

2. 通过break退出程序。

三、技术路线

3.1总体方案

3.1.1 采用的软件及开发平台

Windows XP的环境下,采用的是Microsoft公司的Visual C++作为开发平台。利用面向对象的思想实现一个多人驾校报考情景的管理系统,具体使用了:体现OOP的抽象、封装、继承、多态4种关键技术构造了基于驾校报考状况的情况建立的驾校信息联系网,使驾校的联系网更加方便,快捷,清晰

3.1.2 总体方案

总体流程图:

1.设置一个基类Date(日期),再由这个积累派生出1个派生类,为Arrange类(包括课程安排和考试安排),另外再设置一个Student类,用以记录学生的基本信息(如姓名,性别等)

2.我们可以在此基础之上设立一个驾校报考管理操作系统界面。

3.我们主要通过对开始界面分为两部分,即负责人通道和学生通道,然后分别在两个通道内进行函数功能的实现,

类说明:

1.1)基类Date里的数据成员定义为私有数据,可以通过Date类里的公有函数达到对私有数据的访问;

2.1)派生类Arrange里新增数据成员lessonNumexamNum

2)同时在Arrange类里定义了一系列的函数:getLessonNum(),getExamNum(),setLessonNum,setExamNum, lessonArrange(),showLessonArr(),examArrange()等一系列函数用来实现各种功能;

五、测试报告

5.1 阶段测试

在程序基本设计好的时候,我们对整个程序进行了一次比较系统的测试,对各个系统的主要功能也都用数据进行了检测,以确保程序的正确性,同时希望程序能够完成对驾校报考信息的输入,检索,查找,修改,删除。此次测试是在2012-1-14零晨进行的、

以下是这次测试的具体结果:

系统主界面

运行该程序,首先进入的是驾校报考信息管理系统的主界面,改界面给出了各个系统功能的介绍,并提示使用者该如何进入功能操作系统。

负责人登录页面

该页面是选择了负责人通道后显现出的登录页面,改界面给出了各个系统功能的介绍,并提示使用者该如何进入功能操作系统。

学生登录页面

该页面是选择了学生通道后显现出的登录页面,改界面给出了各个系统功能的介绍,并提示使用者该如何进入功能操作系统。

负责人登录输入页面

该页面是选择了负责人通道,并选择了输入页面后显现出的登录页面,改界面给出了此系统功能的介绍,并演示使用者该如何进入功能操作系统。

学生登录查找页面

该页面是选择了学生通道,并选择了查找页面后显现出的登录页面,改界面给出了此系统功能的介绍,并演示使用者该如何进入功能操作系统。

学生登录修改页面

该页面是选择了学生通道,并选择了修改页面后显现出的登录页面,改界面给出了此系统功能的介绍,并演示使用者该如何进入功能操作系统。

六、个人小结

6.1 个人小结

通过这次大作业,我学到了很多平时自己编程不会出现的东西。平时只是对一件细小的简单的函数功能的实现以一节课学后的知识点进行编程以便熟习所学知识,因为觉得都不是很难所以有种编程好容易得错觉有点轻视它,可是第一接触到大作业之后发现平常所做只不过是沧海一粟。

这次的大作业第一次让我有了系统的概念,已经不是针对某一项具体的描述来是一一个函数的功能,而是从整体的概念上来考虑,首先要从整个流程的构架,就拿我们的通讯录来说,根据要求我们需要创建四个群组分别在四个文件里面记录不同关系的联系人的各种信息,其次对每一个文件的进行操作如:查找、添加、删除等功能的具体实现。看是简单清晰明了,但是在实际操作过程中才发现困难重重。首先事文件的建立,写入、读出信息的陌生,其次是类的具体使用应该如何插入,另外对创建和添加通讯录联系人信息时的排序等一系列问题都让我措手不及。

还有程序之间的协调问题,和程序中的错误修改问题都让我很头疼。后来还是小组之间的讨论才解决了这一系列的问题,通过这一次的大作业,我还了解了一个方面,那就是小组成员之间的讨论是必不可少的,这样可以发现更多的问题。

最后,感老师的辅导和同学的帮助。

6.2 个人小结:
小学期结束了,当做这个C++大作业之前,有点怀疑能不能在规定的时间内做完,毕竟只有3天的时间,要做一个系统,这与以前上课的作业是不同的,因为这个大作业将会融汇我们所学的C++所有知识,选好题后便开始做了,刚开始问题不大,因为毕竟以前学C的时候也做过类似的大作业,然而问题还是有的,就是对类中的私有数据成员的访问老是搞混,这让自己做的程序老是报错,其次对类的提取也是非常最重要的,对各个类之间的关系要弄通,但是在做这个大作业中遇到的最大的难题就是文件读取操作,因为我们是采用一次读取一个块的方式将数据存入到文件中去的,这个就类似C中的结构体的存储,刚开始不大懂,便不停的看有关于C++文件读取的资料,终于文件能够存入和读取了,但是当存入多个数据块并想对其中一个数据块的内容修改后,再存入到文件中时,文件中其它的内容却被覆盖了,于是便和队友讨论,最终认为需要设置一个变量计算文件指针指过的数据块个数,这样当要对某个数据块进行修改时,便可以找到具体位置,只对这个块进行修改和覆盖,这样便解决了前面遇到的数据块覆盖问题,最后顺利的完成了任务,其实自己觉得这样的小学期对我们的作用非常大,因为它能使我们将课堂上学到的东西用于实践,培养我们的动手能力,也利于我们培养团队合作精神。

6.3 个人小结

通过这个学期期末短暂几天的大作业设计,我收获巨大,具体如下:

1. 加深了我对C++的认识,它是一个很重要的语言和和工具,对解决很多现实问题起到很好很方便的作用,

2. 加深了我对课本和PPT知识的理解,对以前很多不大明白的知识点进行了很深入的了解,以及对已学知识的巩固。

3. 通过对这个课程设计,我对一些类的继承和操作符重载进行了很深入的应用.

4. 认识到了自己的能力,在自己的努力下,一些看似很难的问题也迎刃而解

5. 认识到团队合作的重要性,一个人的力量远小于团队的力量,善于团队合作的人才能有很好的成就

6. 认识到了自己的不足,我们仍需努力,争取把以后的课程设计作业做得更好。

七、参考文献

1.课堂ppt

2.网上有关于C++文件操作资料

附录

源程序代码

define.h

class Date //定义日期类以便记录考试时间及课程时间

{

int year; //年份

int month; //月份

int day; //

int hourStart; //开始时间

int hourEnd; //结束时间

public:

void setDate(int Year,int Month,int Day,int HourStart,int HourEnd); //对类进行赋值

void showDate();

void operator =(Date);

};

class Student //定义学生类以记录学会的基本信息

{

char name[17]; //姓名

char sex; //性别

char identy[19]; //身份证号

int age; //年龄

public:

char* getIdenty(){return identy;}

void setStudent(char*Name,char Sex,int Age,char*Identy);

void modifyStudent(char*Name,char Sex,int Age,char*Identy); //修改学生基本信息

void showStudent(); //显示学生基本信息

};

class Arrange:public Date //定义安排类以安排考试或是课程等信息

{

Date lesson[6]; //定义课程类数组以记录多个课程时间信息

Date exam[5];//定义考试类数组以记录多个考试时间信息

int lessonNum; //定义lessonNum 以记录课程的数目

int examNum; //定义examNum 以记录考试的数目

public:

int getLessonNum(){return lessonNum;} //获得课程安排的数目

int getExamNum(){return examNum;} //获得考试安排的数目

void setLessonNum(int LessonNum) //设置课程数目

{

lessonNum=LessonNum;

}

void setExamNum(int ExamNum)//设置考试数目

{

examNum=ExamNum;

}

void lessonArrange(); //课程安排函数,安排课程时间段

void showLessonArr(); //显示课程安排函数,显示安排的课程

void examArrange(); //考试安排函数,安排考试时间段

void showExamArr(); //显示考试安排函数,显示安排的考试

void cancelArrange(); //取消安排函数,取消安排的考试或课程

void changeArrange(); //更改安排函数,更改已安排的考试或是课程

};

class studentInfor //定义驾校学生类

{

float charge; //费用

Arrange stu1;

Student student;

public:

void setCharge(float Charge) //设置收费情况

{

charge=Charge;

}

void showArrange(); //显示所有安排

void setStuInfor(); //设置学生信息

void showStuInfor(); //显示学生所有信息

char* getStuIdenty() //获得学生身份证号

{

char*p;

p=student.getIdenty();

return p;

}

float getCharge(){return charge;} //获得收费函数

void modifyStuInfor(); //修改学生信息函数

void cancel(); //取消函数

};

method.h

#include

#include

#include"define.h"

/*Date类中的方法的实现*/

void Date::setDate(int Year,int Month,int Day,int HourStart,int HourEnd)

{

year=Year; month=Month; day=Day;

hourStart=HourStart; hourEnd=HourEnd;

}

void Date::operator =(Date d1)

{

year=d1.year;

month=d1.month;

day=d1.day;

hourStart=d1.hourStart;

hourEnd=d1.hourEnd;

}

void Date::showDate()

{

cout<<": "<: "<: "<

cout<<"开始时间: "<结束时间: "<

if(hourStart==hourEnd==year==month==day==0) cout<<"此时间段已被取

"<

}

/*Student类中的方法的实现*/

void Student::setStudent(char*Name,char Sex,int Age,char*Identy)

{strcpy(name,Name); sex=Sex; strcpy(identy,Identy); age=Age;

}

void Student::modifyStudent(char*Name,char Sex,int Age,char*Identy)

{strcpy(name,Name); sex=Sex; strcpy(identy,Identy); age=Age;

}

void Student::showStudent()

{

cout<<"******************* 学生信息 ********************"<

cout<<"姓名: "<性别: "<年龄: "<

cout<<"身份证号: "<

}

/*Arrange类中的方法的实现*/

void Arrange::lessonArrange() //安排课程

{

int i,lessNum,Month=0,Day=0,Year=0,HourStart=0,HourEnd=0;

cout<<"请输入课程数目 : "; cin>>lessNum;

setLessonNum(lessNum);

for(i=0;i

{

cout<<"*******课程 "<

cout<<"**: ";cin>>Year;cout<<" : ";cin>>Month;cout<<" :

";cin>>Day;

cout<<"**开始时间: ";cin>>HourStart;cout<<" 结束时间:

";cin>>HourEnd;

lesson[i].setDate(Year,Month,Day,HourStart,HourEnd);

}

}

void Arrange::showLessonArr() //显示课程安排

{

int i;

cout<<"************************* 课程信息 **********************"<

if(getLessonNum()==0) cout<<"没有安排课程 !"<

else{

for(i=0;i

{

cout<<"********课程 "<

lesson[i].showDate();

cout<<"**********************************"<

}

}

}

void Arrange::examArrange() //安排考试

{

int i,testNum,Month=0,Day=0,Year=0,HourStart=0,HourEnd=0;

cout<<"请输入考试的数目 : "; cin>>testNum;

setExamNum(testNum);

for(i=0;i

{

cout<<"*******考试 "<

cout<<"**: ";cin>>Year;cout<<" : ";cin>>Month;cout<<" :

";cin>>Day;

cout<<"**开始时间: ";cin>>HourStart;cout<<" 结束时间:

";cin>>HourEnd;

exam[i].setDate(Year,Month,Day,HourStart,HourEnd);

cout<<"******************************"<

}

}

void Arrange::showExamArr() //显示考试安排

{

int i;

cout<<"*************************** 考试信息 **********************"<

if(getExamNum()==0) cout<<"没有安排考试!"<

else{

for(i=0;i

{

cout<<"********* 考试 "<

exam[i].showDate();

cout<<"***********************************************************"<

}

}

}

void Arrange::cancelArrange()

{

int choose,n;

cout<<"**取消考试或是课程 ? 请选择 : (0代表课程 ; 1代表考试 )"; cin>>choose;

switch(choose)

{

case 0:

{

showLessonArr();

if(getLessonNum()==0) cout<<"没有安排课程,无法取消"<

else{

cout<<"请选择取消哪一门课程 ( 0 to "<<(getLessonNum()-1)<<"

)"<

cout<<"选择: "; cin>>n;

lesson[n].setDate(0,0,0,0,0);

}

break;

}

case 1:

{

showExamArr();

if(getExamNum()==0) cout<<"没有安排考试,无法取消"<

else{

cout<<"请选择取消哪一场考试 ( 0 "<<(getExamNum()-1)<<" )

"<

cout<<"选择: "; cin>>n;

exam[n].setDate(0,0,0,0,0);

}

break;

}

default:

{

cout<<"错误!";

break;

}

}

}

void Arrange::changeArrange() //修改安排

{

int choose1,n,Year1=0,Month1=0,Day1=0,HourStart1=0,HourEnd1=0;

cout<<"**修改课程或是考试 ? 请选择 : (0 代表课程 ; 1 代表考试)";

cin>>choose1;

switch(choose1)

{

case 0:

{

showLessonArr();

if(getLessonNum()==0) cout<<"没有安排课程,无法修改"<

else{

cout<<"请选择修改哪一门课程 ( 0 "<<(getLessonNum()-1)<<"

)"<

cout<<"选择: "; cin>>n;

cout<<"开始输入: "<

cout<<"**: ";cin>>Year1;cout<<" : ";cin>>Month1;cout<<" :

";cin>>Day1;

cout<<"**开始时间: ";cin>>HourStart1;cout<<" 结束时间:

";cin>>HourEnd1;

lesson[n].setDate(Year1,Month1,Day1,HourStart1,HourEnd1);

}

break;

}

case 1:

{

showExamArr();

if(getExamNum()==0) cout<<"没有安排考试,无法修改"<

else{

cout<<"请选择修改哪一场考试 ( 0 to "<<(getExamNum()-1)<<"

)"<

cout<<"选择: "; cin>>n;

cout<<"开始输入: "<

cout<<"**: ";cin>>Year1;cout<<" : ";cin>>Month1;cout<<" :

";cin>>Day1;

cout<<"**开始时间: ";cin>>HourStart1;cout<<" 结束时间:

";cin>>HourEnd1;

exam[n].setDate(Year1,Month1,Day1,HourStart1,HourEnd1);

}

break;

}

default:

{

cout<<"错误!";

break;

}

}

}

void studentInfor::setStuInfor() //设置学生信息

{

char Name[15];char Identy[19]; char Sex; int Age;float Charge;

cout<<"*********** 输入学生信息 ************"<

cout<<"姓名 : "; cin>>Name; cout<<"性别: "; cin>>Sex;cout<<"年龄: ";cin>>Age;

cout<<"身份证号: ";cin>>Identy;cout<<"费用: ";cin>>Charge;

setCharge(Charge);

student.setStudent(Name,Sex,Age,Identy);

cout<<"**********输入所有安排: **********"<

cout<<"课程安排: "<

stu1.lessonArrange();

cout<<"考试安排: "<

stu1.examArrange();

}

void studentInfor::showStuInfor() //显示学生信息及其安排

{

student.showStudent();

cout<<"费用: "<

stu1.showExamArr();

stu1.showLessonArr();

}

void studentInfor::showArrange()

{

cout<<"***************安排***************"<

stu1.showExamArr();

stu1.showLessonArr();

}

void studentInfor::modifyStuInfor() //修改安排或是学生信息

{

int choice;

cout<<"请选择你想要修改的内容 : "<

cout<<"******0: 修改学生基本信息 ;"<

cout<<"******1: 修改课程或考试安排 ;"<

cout<<"*********************************************"<

cout<<"请选择 : ";cin>>choice;

switch(choice)

{

case 0:

{

char Name[15];char Identy[19];char Sex='0';int Age=0;

student.showStudent();

cout<<"输入想要修改的内容 :"<

cout<<"名字: ";cin>>Name;cout<<"性别: ";cin>>Sex;cout<<"

年龄: ";cin>>Age;

cout<<"身份证号: ";cin>>Identy;

student.modifyStudent(Name,Sex,Age,Identy);

break;

}

case 1:

{

stu1.changeArrange();

break;

}

default:

{

cout<<"错误!"; break;

}

}

}

void studentInfor::cancel() //取消学生安排

{

stu1.cancelArrange();

}

menu.cpp

#include"method.h"

#include

#include

studentInfor person;

void inputInfor()

{

ofstream ofile("stuInfor.dat",ios::out|ios::app|ios::binary);

if(!ofile)

{

cout<<"打开文件失败 !";

}

person.setStuInfor();

ofile.write((char*)&person,sizeof(person));

ofile.close();

}

void main()

{

int decide;char p='N';

do{

system("cls");

cout<<" "<<"********************************************"<

cout<<" "<<"************欢迎进入驾校报考系统************"<

cout<<" "<<"********** 0: 学生通道 ***************"<

cout<<" "<<"********** 1: 负责人通道 ***********"<

cout<<" "<<"********** 2: 退出 **********"<

cout<<" "<<"********************************************"<

cout<<"请选择: ";cin>>decide;

switch(decide)

{

case 0:

{

int n1;

char p1='N';

do{

system("cls");

cout<<" "<<"*********** 学生通道 *************"<

cout<<" "<<"*********** 0: 查找 **********"<

cout<<" "<<"*********** 1: 修改 **********"<

cout<<" "<<"*********** 2: 删除 ***********"<

cout<<" "<<"************************************"<

cout<<"请选择 : "; cin>>n1;

switch(n1)

{

case 0:

{

char Identy[19];

cout<<"请输入你想要查找的学生的身份证号: ";cin>>Identy;

ifstream ifile("stuInfor.dat",ios::in|ios::binary);

if (!ifile ) cout<<"文件打开失败"<

while(!ifile.eof())

{

ifile.read((char*)&person,sizeof(person));

if(!(strcmp(Identy,person.getStuIdenty())))

{

person.showStuInfor();

break;

}

}

if(!ifile) cout<<"查找失败"<

ifile.close();

break;

}

case 1:

{

char Identy[19];int count=0;

cout<<" 请输入你想要修改的学生的身份证号: ";cin>>Identy;

ifstream ifile("stuInfor.dat",ios::in|ios::binary);

if (!ifile ) cout<<"文件打开失败"<

while(!ifile.eof())

{

ifile.read((char*)&person,sizeof(person));

count++;

if(!(strcmp(Identy,person.getStuIdenty())))

{

ifile.close();

ofstream ofile("stuInfor.dat",ios::out|ios::in|ios::binary);

ofile.seekp((count-1)*sizeof(person),ios::cur);

person.modifyStuInfor();

ofile.write((char*)&person,sizeof(person));

ofile.close();

break;

}

}

if(!ifile) cout<<"没有你要的记录"<

ifile.close();

break;

}

case 2:

{

char Identy[19];int count=0;

cout<<" 请输入你想要删除的学生的身份证号 ";cin>>Identy;

ifstream ifile("stuInfor.dat",ios::in|ios::binary);

if (!ifile ) cout<<"文件打开失败"<

while(!ifile.eof())

{

ifile.read((char*)&person,sizeof(person));

count++;

if(!strcmp(Identy,person.getStuIdenty()))

{

ifile.close();

ofstream ofile("stuInfor.dat",ios::out|ios::in|ios::binary);

ofile.seekp((count-1)*sizeof(person),ios::cur);

person.cancel();

ofile.write((char*)&person,sizeof(person));

ofile.close();

break;

}

}

if(!ifile) cout<<"没有你要的记录"<

ifile.close();

break;

}

default:

{

cout<<"错误!";

break;

}

}

cout<<"是否在学生通道上继续操作 ? "; cin>>p1;

}while(p1=='Y'||p1=='y');

break;

}

case 1:

{

int n2;char p2='N';

do{

system("cls");

cout<<" "<<"************* 负责人通道 **************"<

cout<<" "<<"******** 0: 输入信息 *********"<

cout<<" "<<"******** 1: 查找 ***"<

cout<<" "<<"******** 2: 修改 ***"<

cout<<" "<<"******** 3: 删除 ***"<

cout<<" "<<"***************************************"<

cout<<"请选择: ";cin>>n2;

switch(n2)

{

case 0:

{

inputInfor();

cout<<"*************************************************"<

break;

}

case 1:

{

char Identy[19];

cout<<"请输入你想要查找的学生的身份证号: ";cin>>Identy;

ifstream ifile("stuInfor.dat",ios::in|ios::binary);

if (!ifile ) cout<<"文件打开失败"<

while(!ifile.eof())

{

ifile.read((char*)&person,sizeof(person));

if(!(strcmp(Identy,person.getStuIdenty())))

{

person.showStuInfor();

break;

}

}

if(!ifile) cout<<"查找失败"<

ifile.close();

break;

}

case 2:

{

char Identy[19];int count=0;

cout<<"请输入你想要修改的学生的身份证号:";cin>>Identy;

ifstream ifile("stuInfor.dat",ios::in|ios::binary);

if (!ifile ) cout<<"文件打开失败"<

while(!ifile.eof())

{

ifile.read((char*)&person,sizeof(person));

count++;

if(!(strcmp(Identy,person.getStuIdenty())))

{

ifile.close();

ofstream ofile("stuInfor.dat",ios::out|ios::in|ios::binary);

ofile.seekp((count-1)*sizeof(person),ios::cur);

person.modifyStuInfor();

ofile.write((char*)&person,sizeof(person));

ofile.close();

break;

}

}

if(!ifile) cout<<"没有你要的记录"<

ifile.close();

break;

}

case 3:

{

char Identy[19];int count=0;

cout<<"请输入你想要删除的学生的身份证号 ";cin>>Identy;

ifstream ifile("stuInfor.dat",ios::in|ios::binary);

if (!ifile ) cout<<"文件打开失败"<

while(!ifile.eof())

{

ifile.read((char*)&person,sizeof(person));

count++;

if(!strcmp(Identy,person.getStuIdenty()))

{

ifile.close();

ofstream ofile("stuInfor.dat",ios::out|ios::in|ios::binary);

ofile.seekp((count-1)*sizeof(person),ios::cur);

person.cancel();

ofile.write((char*)&person,sizeof(person));

ofile.close();

break;

}

}

if(!ifile) cout<<"没有你要的记录"<

ifile.close();

break;

}

default:

{

cout<<"错误!";

break;

}

}

cout<<"是否在负责人通道继续操作 ? "; cin>>p2;

}while(p2=='Y'||p2=='y');

break;

}

case 2:

{

break;

}

}

cout<<"************是否返回到系统 ? "; cin>>p;

}while(p=='Y'||p=='y');

}

C++驾校报考系统大作业试验报告

相关推荐