您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 北邮c++ 足球俱乐部(三版齐全)
足球俱乐部管理系统第一版本(试用版)一.开发环境VisualStudio2015二.实验描述给相关管理机构开发一个足球俱乐部的管理程序,实现对众多足球俱乐部管理的基本功能,包括:俱乐部的增删改查,其中俱乐部的属性包括:俱乐部的名称,现金,其下的球员和普通行政人员。实现对所有球员的各项属性(包括姓名、年龄、能力、年薪、转会费、进球总数、服役年限)的简单搜索,支持输入多个条件,条件之间用&&连接,如“年龄不大于25且服役年限大于5年的球员”的查询表达式为!(@age25)&&@experience5支持球员在不同俱乐部间的买卖,买卖条件为:买方俱乐部的现金=球员的转会费。交易完成后,卖方得到其转会费。三.数据结构把员工也看作一个对象,记作名为staff类,这个类的属性有姓名、年龄、能力,年薪,把球员看作一个对象,记作名为player类,这个类的属性有:姓名、年龄、能力、年薪、转会费、进球总数和服役年限,则球员和员工都具有姓名、年龄、能力,工作俱乐部这些共同属性,因此将球员看作是员工类的一个派生。把俱乐部看作一个对象,记为club类,俱乐部的属性有:俱乐部的名称,现金,其下球员和员工。将管理机构看作一个对象,记为League的一个类,则League的属性有:所有俱乐部。四.具体功能实现1.球员和员工信息的查找和修改由于球员和员工的属性都是私有成员,只能通过类的成员函数来访问和修改。这两个类的成员函数及其方法如下:Staff类:classStaff{//staff类private:stringname;//姓名intage;//年龄intability;//能力intsalary;//年薪public:Staff(conststring&Name=None,intAge=0,intAbi=0,intSal=0);~Staff(){};virtualvoidShow()const;//虚函数,打印职员信息stringGetName(){returnname;}intGetAge(){returnage;}intGetAbility(){returnability;}intGetSalary(){returnsalary;}//得到私有成员的值voidResetStaff(string&new_name,intnew_age,intnew_abi,intnew_sal);//重置一个staffvoidResetName(string&Name){name=Name;}voidResetAge(intnew_age){age=new_age;}voidResetAbillity(intnew_abi){ability=new_abi;}voidResetSalary(intnew_sal){salary=new_sal;}//修改单项值};Player类:classPlayer:publicStaff{//球员类,公有继承staff类public:intfee;//转会费intgoals;//进球数intyear;//服役年限public:Player(conststring&Name=None,intAge=0,intAbi=0,intSal=0,intFee=0,intGoals=0,intYear=0);Player(constStaff&sta,intFee=0,intGoals=0,intYear=0);//构造函数~Player(){};intGetFee(){returnfee;}intGetGoals(){returngoals;}intGetYear(){returnyear;}//得到私有成员的值virtualvoidShow()const;//打印球员信息voidResetPlayer(string&Name,intAge,intAbi,intSal,intFee,intGoals,intYear);//改写一个playervoidResetFee(intFEE){fee=FEE;}voidResetGoals(intGOALS){goals=GOALS;}voidResetYear(intYEAR){year=YEAR;}//修改单值};说明:1、在C++中,在类的内部定义了函数体的函数都会被默认为内联函数,可省略了关键字incline。2、由于员工和球员的信息不完全相同,在staff类中定义了一个虚函数virtualvoidShow()const;用于打印员工的信息。在player类中有一个同名函数virtualvoidShow()const;在调用的时候会自动覆盖基类的Show()函数,从而实现多态,打印出球员的信息。2.俱乐部的增删改查俱乐部中的球员和行政人员用vector容器来存储,其类的声明和成员函数如下:classClub{//俱乐部类private:vectorStaffstaffs;//职员vectorPlayerplayers;//球员intcash;//现金stringclubName;//俱乐部名public:Club(constStaffst,constPlayerpl,conststring&Name=None,intCash=0);Club(constStaffst,conststring&Name=None,intCash=0);Club(constPlayerpl,conststring&Name=None,intCash=0);Club(conststring&Name=None,intCash=0){clubName=Name;cash=Cash;}//构造函数stringGetClubName(){returnclubName;}intGetClubCash(){returncash;}//得到私有成员的值virtualvoidShow();//打印俱乐部信息voidResetClubName(conststring&Name){clubName=Name;}voidResetCash(constintCASH){cash=CASH;}//修改信息voidAddPlayer();voidAddPlayer1(vectorPlayer::iteratorpl){players.push_back((*pl));}//增加球员voidAddStaff();voidAddStaff1(vectorStaff::iteratorst){staffs.push_back((*st));}//增加职员voidDeletePlayer(stringname);//删除球员voidDeleteStaff(stringname);//删除职员PlayerSearchPlayer(stringname);//查找球员,返回一个球员StaffSearchStaff(stringname);//查找职员,返回一个职员voidRevisePlayer(stringname);//修改球员voidReviseStaff(stringname);//修改普通职员vectorPlayer::iteratorGetPlaSta(){returnplayers.begin();}vectorPlayer::iteratorGetPlaEnd(){returnplayers.end();}//得到player的头和超尾vectorStaff::iteratorGetStaSta(){returnstaffs.begin();}vectorStaff::iteratorGetStaEnd(){returnstaffs.end();}//得到staff的头和超尾};3.管理机构的具体功能对于所有俱乐部的管理,定义了一个League类,私有成员为所有的俱乐部,其声明如下:classLeague{//联盟类,实现对所有俱乐部的管理private:vectorClubclubs;public:vectorClub::iteratorSearClub(stringname);//搜索俱乐部voidAddClub(stringname);//添加俱乐部voidDeleteClub(stringname);//删除俱乐部voidReviseClub(stringname);//修改俱乐部vectorPlayer::iteratorSearchPlayer1(stringname);voidSearchPlayer2();//搜索球员voidChosePlayer(vectorPlayer&w,intnum,charop,inttype,vectorint&yes);//搜索球员的辅助函数voidSearchStaff(stringname);//搜索球员和职员voidTransferPlayer(stringname,stringclub1,stringclub2);//球员转会voidRevisePlayers(stringname);//修改队员信息voidReviseStaffs(stringname);//修改职员信息voidAddPlayers(stringclub);//添加队员voidAddStaffs(stringclub);//添加职员voidDeletePlayers(stringname);//删除队员voidDeleteStaffs(stringname);//删除职员virtualvoidShow();//打印联盟信息,包括所有的俱乐部及俱乐部的所有信息vectorClub::iteratorGetClubSta(){returnclubs.begin();}vectorClub::iteratorGetClubEnd(){returnclubs.end();}//得到俱乐部的头尾};五.试用版操作说明根据菜单选项输入对应功能的代码,然后进去相应的功能,姓名为字符串string,其余各属性值为int型,输入各值时,不要多输入数字。使用版功能比较简单,对于按条件搜索球员,不允许出现大非号,即&&符必须在括号外,所有的条件都是与操作。第二版本(专业版)一.实验描述在第一版本的基础,增加了文件存储和高级搜索的功能:文件存取功能:程序启动的时候会自动从League.txt文件中读取所有的俱乐部信息(其中包括所有的球员和员工信息),在对俱乐部信息进行更改后会自动更新文件存储的信息。高级搜索功能:在对球员的各项属性进行条件搜索的时候,增加了以下几种搜索方式(表达式支持&&、||、!、括号、、=、):支持球员信息的“||”查找,例如:“年龄不大于25且服役年限大于5年,或者进球数大于100的球员”,其查询表达式为:(!(@age25)&&@experience5)||@kick100可以通过球员所在俱乐部进行查找,例如:“属于俱乐部A、B的所有球员”,其查询表达式:@club=A||@club=B可以对球员的姓名进行模糊查找,例如:“名字中含有abc的所有球员”,查询表达式:@name~abc二.改进功能的实现1.文件存取功能(1)文件格式先存俱乐部名称,然后是俱乐部现金,然后下一行依次存球员名,年龄,能力值,年薪,转会费,进球数和年限,然后是职员信息,球员信息和职员信息用#号隔开,依次代表职员名,年龄,能力值,年薪,每个俱乐部之间的信息也用#隔开,文件末尾不要留空行。(2)文件的读取在League类中增加方法,voidReadFile();按照上述文件格式读取到内存中,每次程序运行开始时先将文件中的数据读取到内存中。(3)文件的更新在League类中增加方法,voidWriteFile(),按照文件格式,在程序运行结束时将数据写入文件中。2.高级搜索功能新增加一个search类,类的声明如下:#pragmaonce#includesoccerClub.hclassSearch{private:charstr[100
本文标题:北邮c++ 足球俱乐部(三版齐全)
链接地址:https://www.777doc.com/doc-2582683 .html