资源描述
学 号:
《C++面向对象程序设计》大作业
题 目
学 院
专 业
信息工程
班 级
姓 名
王继文
指导教师
2015
年
11
月
15
日
目录
一 大作业的目的 1
二 大作业的内容 1
三 大作业的要求与数据 2
四 大作业应完成的工作 2
五 总体设计(包含几大功能模块) 2
六 详细设计(各功能模块的具体实现算法——流程图) 3
七 调试分析(包含各模块的测试用例,及测试结果) 5
八 总结 18
九 参考资料 19
一 大作业的目的
《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。
二 大作业的内容
(1) 初始化输入:N-参赛院系总数,M-男子竞赛项目数,W-女子竞赛项目数;
(2) 各项目名次取法有如下几种:
取前5名:第1名得分 7,第2名得分 5,第3名得分3,第4名得分2,第5名得分 1;
(3) 由程序提醒用户填写比赛结果,输入各项目获奖运动员的信息。
(4) 所有信息记录完毕后,用户可以查询各个院系或个人的比赛成绩,生成团体总分报表,查看参赛院系信息、获奖运动员、比赛项目信息等。
三 大作业的要求与数据
1、用C++语言实现系统;
2、由程序提醒用户填写比赛结果,输入各项目获奖运动员的信息。所有信息记录完毕后,用户可以查询各个院系或个人的比赛成绩,生成团体总分报表,查看参赛院系信息、获奖运动员、比赛项目信息等。
3、各项目名次取法有如下几种:
取前5名:第1名得分 7,第2名得分 5,第3名得分3,第4名得分2,第5名得分 1。
四 大作业应完成的工作
(1)编写算法;
(2)算法测试,并有具体的测试结果和结果分析;
(3)撰写大作业报告。内容包括:
1) 封面扉页
2) 设计任务书
3) 目录
4) 总体设计方案(包括流程图)
5) 使用说明及运行实例(包括界面)
6) 成员设计内容简介
7) 项目源程序代码(注意注释的使用)
8) 指导教师评语
五 总体设计(包含几大功能模块)
本文研究开发的运动会管理系统用于支持用于查询各个学校在运动会中的成绩。有几种目标:
1.支持输入各个项目的基本信息;
2.可以按比赛项目编号或名称查询、删除、修改信息。
3.可以按运动员编号或姓名查询、删除、修改信息
4.数据输入信息并能随时查询
六 详细设计(各功能模块的具体实现算法——流程图)
开始
信息录入
信息修改
信息查询
信息输出
信息删除
结束
6.1各函数的功能和实现
1.本实验中,对不同的对象采取不同的存储结构,对比赛项目采取链式结构,而对于参赛运动员采取一个结构就可以了。本程序中主要用到线性表的一些基本操作,将比赛项目信息,运动员信息,赛事信息都构造成线性表。具体功能通过主函数分别调用各函数实现。
2.参考本实验的功能要求,本程序分为七个模块:主函数、信息录入函数、信息修改函数、信息删除函数、信息查询函数,信息输出函数。
3.信息录入函数有包括比赛项目信息录入函数(包括比赛编号、名称等),运动员信息录入函数(运动员的编号、姓名、性别、年龄、工作单位或省份)、比赛赛事信息录入函数(某运动员参加某比赛项目,成绩、名次)。
4.信息修改函数包括比赛项目、运动员信息、赛事信息修改。
5.信息查询函数包括根据比赛项目、运动员编号进行查修
6.信息输出函数包括比赛项目、运动员信息、赛事信息输出等。
7.退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
如图6.1
结束
开始
输出菜单
根据菜单输入n的值选择程序
输入
退出
输出
查找
插入
删除
图 6.1
七 调试分析(包含各模块的测试用例,及测试结果)
7.1主函数
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
void fun1()
{ cout<<"******************************"<<endl;
cout<<endl;
cout<<"******学校运动会管理系统******"<<endl;
cout<<"----数据录入 请按:1----"<<endl;
cout<<"----数据修改 请按:2----"<<endl;
cout<<"----数据删除 请按:3----"<<endl;
cout<<"----数据查询 请按:4----"<<endl;
cout<<"----数据显示 请按:5----"<<endl;
cout<<"----退出系统 请按:6----"<<endl;
cout<<endl;
cout<<"*******************************"<<endl;
cout<<endl;
cout<<"*****请输入一个数据,并按回车键!*****"<<endl;
}
class Match
{
public:
Match *next;//为创建链表做准备
int number; //比赛项目编号
char call[10]; //比赛项目名称
char time[10]; //比赛时间
char place[20]; //比赛地点
friend void input1();
};
7.2输入相关信息
void input1()
{ ofstream fout("e:\\比赛项目.dat",ios::app);
char ch;
Match a;
do
{ cout<<"请分别输入比赛项目编号、名称、比赛时间、比赛地点."<<endl;
cin>>a.number>>a.call>>a.place>>a.time;
a.next=NULL;
fout.write((char *)&a,sizeof(Match));
cout<<"是否继续输入,如果继续键入Y|y"<<endl;
cin>>ch;
}while(ch=='y'||ch=='Y');
fout.close();
}
Match *head1;
void creat()
{ head1=NULL;
Match *p,*q=head1;
ifstream fin("e:\\比赛项目.dat",ios::in);
if(!fin)
{ cout<<"文件打开失败!"<<endl; exit(0);
}
p=new Match;
fin.read((char*)p,sizeof(Match));
while(!fin.eof())
{ if(head1==NULL) head1=p;
else
q->next=p;
q=p;
p=new Match;
fin.read((char*)p,sizeof(Match));
}
fin.close();
}
7.3信息修改
int change1() //对比赛项目相关信息修改
{
cout<<"您正在进行修改比赛项目有关事项操作!"<<endl;
creat();
Match *p1;
p1=head1;
cout<<"请输入要修改比赛项目的编号:"<<endl;
int number1; //要修改的比赛项目编号
int sign=0; //设置的标记变量
cin>>number1;
while(p1!=NULL)
{ if(p1->number==number1) {sign=1;break;}
p1= p1->next;
}
if (sign==0)
cout<<"没有找到要修改的记录!"<<endl;
else
{
cout<<"请选择要修改比赛项目的那些信息"<<endl;
cout<<"------修改比赛项目的编号----1"<<endl;
cout<<"------修改比赛项目的名称----2"<<endl;
cout<<"------修改比赛时间----3"<<endl;
cout<<"------修改比赛地点----4"<<endl;
cout<<"请输入对应信息的编号"<<endl;
int a;
int nu; //新的整形数据
char info[20]; //新的字符数组
cin>>a;
switch(a)
{
case 1:cout<<"请输入新的比赛编号:"<<endl;
cin>>nu;
p1->number=nu;
cout<<"比赛项目编号修改成功!"<<endl;
break;
case 2:cout<<"请输入新的比赛项目名称:"<<endl;
cin>>info;
strcpy(p1->call,info);
cout<<"比赛项目名称修改成功!"<<endl;
break;
case 3:cout<<"请输入新的比赛时间:"<<endl;
cin>>info;
strcpy(p1->time,info);
cout<<"比赛项目时间修改成功!"<<endl;
break;
case 4:cout<<"请输入新的比赛地点:"<<endl;
cin>>info;
strcpy(p1->place,info);
cout<<"比赛项目地点修改成功!"<<endl;
break;
}
ofstream fout("e:\\比赛项目.dat",ios::out);
p1=head1;
while(p1!=NULL)
{
fout.write((char*)p1,sizeof(Match));
p1=p1->next;
}
fout.close();
}
return 0;
}
7.4信息删除
int delete1() //对比赛项目相关信息进行删除
{ creat();
Match *p1,*p2;
p2=p1=head1;
cout<<"请选择要删除比赛项目的那些信息"<<endl;
cout<<"------删除比赛项目的编号----1"<<endl;
cout<<"------删除比赛项目的名称----2"<<endl;
cout<<"请输入对应信息的编号"<<endl;
int n;
cin>>n;
int num,flag=0;
char cal[10];
switch(n)
{case 1: cin>>num;
while(p1!=NULL)
{ if(p1->number==num) {flag=1;break;}
p2=p1;
p1= p1->next;
}
if (flag==0)
cout<<"没有找到要删除的记录!"<<endl;
else
p2->next=p1->next;
case 2: cin>>cal;
while(p1!=NULL)
{ if(!strcmp(p1->call,cal)) {flag=1;break;}
p2=p1;
p1= p1->next;
}
if (flag==0)
cout<<"没有找到要删除的记录!"<<endl;
else
p2->next=p1->next;
}
ofstream fout("e:\\比赛项目.dat",ios::out);
p1=head1;
while(p1!=NULL)
{
fout.write((char*)p1,sizeof(Match));
p1=p1->next;
}
fout.close();
return 0;
}
7.5信息查询
void print1()
{
creat();
Match *p1=head1;
cout<<"请分别输出比赛项目编号、名称、比赛时间、比赛地点."<<endl;
while(p1!=NULL)
{ cout<<p1->number<<'\t'<<p1->call<<'\t'<<p1->time<<'\t'<<p1->place<<endl;
p1=p1->next;
}
}
void find1()
{ creat();
Match *p1;
p1=head1;
int sign=0;//设置的标记变量
cout<<"请选择要查询比赛项目的哪些信息"<<endl;
cout<<"------按比赛项目的编号查询----1"<<endl;
cout<<"------按比赛项目的名称查询----2"<<endl;
cout<<"------按比赛时间查询----3"<<endl;
cout<<"------按比赛地点查询----4"<<endl;
cout<<"请输入对应信息的编号"<<endl;
int a;
int nu; //查询整形数据条件
char info[20]; //查询字符型数据条件
cin>>a;
switch(a)
{
case 1:cout<<"请输入要查询的比赛编号:"<<endl;
cin>>nu;
while(p1!=NULL)
{ if(p1->number==nu) {sign=1;break;}
p1= p1->next;
}
if (sign==0)
cout<<"没有找到要查询的记录!"<<endl;
else
cout<<p1->number<<'\t'<<p1->call<<'\t'<<p1->time<<'\t'<<p1->place<<endl;
break;
case 2:cout<<"请输入要查询的比赛项目名称:"<<endl;
cin>>info;
while(p1!=NULL)
{ if(p1->call==info) {sign=1;break;}
p1= p1->next;
}
if (sign==0)
cout<<"没有找到要查询的记录!"<<endl;
else
cout<<p1->number<<'\t'<<p1->call<<'\t'<<p1->time<<'\t'<<p1->place<<endl; break;
case 3:cout<<"请输入要查询的比赛时间:"<<endl;
cin>>info;
while(p1!=NULL)
{ if(!strcmp(p1->time,info)) {sign=1;break;}
p1= p1->next;
}
if (sign==0)
cout<<"没有找到要查询的记录!"<<endl;
else
cout<<p1->number<<'\t'<<p1->call<<'\t'<<p1->time<<'\t'<<p1->place<<endl; break;
case 4:cout<<"请输入要查询的比赛地点:"<<endl;
cin>>info;
while(p1!=NULL)
{ if(!strcmp(p1->place,info)) {sign=1;break;}
p1= p1->next;
}
if (sign==0)
cout<<"没有找到要查询的记录!"<<endl;
else
cout<<p1->number<<'\t'<<p1->call<<'\t'<<p1->time<<'\t'<<p1->place<<endl; break;
}
}
class Athlete
{
public:
Athlete *next;
int number; //运动员的编号
char name[10]; //运动员的姓名
char part[20]; //运动员所属工作单位或省份
char sex[20]; //运动员性别
int age; //运动员年龄
friend void input2();
};
7.6退出系统
八 总结
通过这次大作业使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。本次大作业结束了,通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也知道自己哪些方面做得还不够。这不仅是程序设计,更是锻炼我们处理问题的能力.编写程序是件细心活,稍不留神就会出错,这就必须要求我对待事情要认真!
但我们总结出了一点点的经验如下:
1、要对系统的功能和要求做出详细的分析,并合理分解任务。
2、把分解出来的子任务,做给一个相对独立的模块。
3、在设计一个模块之前,要简单构想一下总界面的显视情况。
4、针对构想出来的界面进行程序的编写。
九 参考资料
[1] 陈维兴,林小茶《C++面向对象程序设计教程(第3版)》, 清华大学出版社,2012
[2] 钱能 主编 《C++程序设计教程》 北京:清华大学出版社 1999年4月
[3] (美)斯特朗斯特鲁普 著,裘宗燕 译, 《 C++程序设计语言》, 机械工业出版社,2010
[4]网上相关资料
本科生大作业成绩评定表
班级: 姓名: 学号:
序号
评分项目
满分
实得分
1
学习态度认真、遵守纪律
10
2
设计分析合理性
10
3
设计方案正确性、可行性、创造性
20
4
设计结果正确性
40
5
设计报告的规范性
10
6
设计验收
10
总得分/等级
评语:
注:最终成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、
及格(60-69分)、60分以下为不及格
指导教师签名:
2015 年11月18日
展开阅读全文