C++歌手大奖赛管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#i n c l u d e<i o s t r e a m>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;
class singer//歌手类的定义
{
protected:
int no;//编号
char name[20];//姓名
char sex[10];//性别
int age; //年龄
char song[20];//参赛曲目
char department[30];//选送单位
char program[30];//比赛项目名称
char time[20];//比赛时间
char place[20]; //比赛地点
int score;//比赛成绩
singer *mynext;//指向下一个歌手的指针
public:
singer();//歌手类无参构造函数的定义
singer(int pnum,char pname[],char psex[],int page,char psong[],char
pdepart[],char program[],char time[],char place[],int score);//歌手类有参构造函数的定义
singer(int pnum,char pname[],char psex[],int page,char psong[],char
pdepart[],char program[],char time[],char place[],int score,singer *next);
//歌手类有参构造函数的定义
int getnum();//提取歌手编号函数的定义
char *getname() ;//提取歌手名字函数的定义
char *getsex();//提取歌手性别函数的定义
int getage();//提取歌手年龄函数的定义
void getagee(int as);//设置歌手年龄函数的定义
void getscoree(int ak);
char *getsong();//提取员歌手参赛曲目函数的定义
char *getdepart();//提取歌手选送单位函数的定义
char *getprogram();//提取比赛项目名称函数的定义
char *gettime();//提取比赛时间函数的定义
char *getplace();//提取比赛地点函数的定义
int getscore();//提取比赛成绩函数的定义
singer *getnext();//提取指向下一个歌手指针函数的定义
void setnext(singer *next); //设置指向下一个歌手指针函数的定义
void output1(); //输出歌手信息函数的定义
void output2();//输出赛事信息函数的定义
void output();//输出全部信息函数的定义
};
singer::singer()//歌手类无参构造函数
{
no=0;
strcpy(name,"");
strcpy(sex,"");
age=0;
strcpy(song,"");
strcpy(department,"");
strcpy(program,"");
strcpy(time,"");
strcpy(place,"");
score=0;
mynext=NULL;
}
singer::singer(int pnum,char pname[],char psex[],int page,char psong[],char
pdepart[],char pprogram[],char ptime[],char pplace[],int pscore) //歌手类有参构造函数
{
no=pnum;
strcpy(name,pname);
strcpy(sex,psex);
age=page;
strcpy(song,psong);
strcpy(department,pdepart);
strcpy(program,pprogram);
strcpy(time,ptime);
strcpy(place,pplace);
score=pscore;
mynext=NULL;
}
singer::singer(int pnum,char pname[],char psex[],int page,char psong[],char
pdepart[],char pprogram[],char ptime[],char pplace[],int pscore,singer *next)
// 歌手类有参构造函数
{
no=pnum;
strcpy(name,pname);
strcpy(sex,psex);
age=page;
strcpy(song,psong);
strcpy(department,pdepart);
strcpy(program,pprogram);
strcpy(time,ptime);
strcpy(place,pplace);
score=pscore;
mynext=next;
}
int singer::getnum() { return no; }
char *singer::getname() { return name; }
char *singer::getsex() { return sex; }
char *singer::getsong() { return song; }
char *singer::getdepart() { return department; }
int singer::getage() { return age; }
char *singer::getprogram(){return program;}
char *singer::gettime(){return time;}
char *singer::getplace(){return place;}
int singer::getscore(){return score;}
void singer::getagee(int as) { age=as; }
void singer::getscoree(int ak){score=ak;}
void singer::setnext(singer *next) { mynext=next; } singer *singer::getnext() { return mynext; }
void singer::output1()
{
cout<<" 编号 :"<<no<<endl;
cout<<" 姓名 :"<<name<<endl;
cout<<" 性别 :"<<sex<<endl;
cout<<" 年龄 :"<<age<<endl;
cout<<" 参赛歌曲 :"<<song<<endl;
cout<<" 选送单位 :"<<department<<endl;
}
void singer::output2()
{
cout<<" 比赛项目: "<<program<<endl;
cout<<" 姓名 :"<<name<<endl;
cout<<" 比赛时间 :"<<time<<endl;
cout<<" 比赛地点: "<<place<<endl;
cout<<" 得分: "<<score<<endl;
}
void singer::output()
{
cout<<" 编号 :"<<no<<endl;
cout<<" 姓名 :"<<name<<endl;
cout<<" 性别 :"<<sex<<endl;
cout<<" 年龄 :"<<age<<endl;
cout<<" 参赛歌曲 :"<<song<<endl;
cout<<" 选送单位 :"<<department<<endl;
cout<<" 比赛项目: "<<program<<endl;
cout<<" 比赛时间 :"<<time<<endl;
cout<<" 比赛地点: "<<place<<endl;
cout<<" 得分: "<<score<<endl;
}
class operate:public singer
{
private:
singer *myfirst; //指向歌手链表中结点的指针
public:
operate();//operate类无参构造函数的定义
operate(int nnum,char nname[],char nsex[],int nage,char nsong[],char
ndepart[],char nprogram[],char ntime[],char nplace[],int nscore);
~operate();//operate类析构函数的定义
void load();//从文件中加载歌手信息
void add();//增加歌手信息
void input(int number); //键盘输入新歌手基本信息
void insert(int nnum,char nname[],char nsex[],int nage,char nsong[],char
ndepart[],char nprogram[],char ntime[],char nplace[],int nscore);
bool findnum();//按编号查询歌手信息
bool findprogram();//按项目名称查询赛事信息
bool modify();//修改歌手信息
bool deletesinger();//删除歌手信息
void save();//歌手信息存盘
void showa();//显示所有歌手信息
void showb();//显示比赛赛事。
};
operate::operate ()//operate类无参构造函数的实现
{ myfirst=NULL; }
operate::operate(int nnum,char nname[],char nsex[],int nage,char nsong[],char
ndepart[],char nprogram[],char ntime[],char nplace[],int nscore) //operate类带参数构造函数的实现
{ myfirst=new
singer(nnum,nname,nsex,nage,nsong,ndepart,nprogram,ntime,nplace,nscore); }
operate::~operate()//operate类析构函数的实现
{
singer *next=myfirst,*temp;
while(next!=NULL)
{
temp=next;
next=next->getnext();
delete temp;
}
myfirst=NULL;
}
void operate::load()//从文件中加载歌手信息
{
int nnum,nage;
float nscore;
char
nname[20],nsex[20],nsong[20],ndepart[20],nprogram[20],ntime[20],nplace[20];
ifstream f1("singer.txt",ios::in);
while(f1.good())
{
f1>>nnum>>nname>>nsex>>nage>>nsong>>ndepart>>nprogram>>ntime>>nplace>>nscore ;
if(!(f1.eof()))
insert(nnum,nname,nsex,nage,nsong,ndepart,nprogram,ntime,nplace,nscore);
}
f1.close();
cout<<endl<<" 存储在文件中的学校人员信息已加载到系统中"<<endl;
}
void operate::add() //增加新歌手
{
int num,n1,n2;
singer *p=myfirst;
if(p==NULL)
{
cout<<" 目前无歌手,请输入新歌手的编号:";
cin>>num;
input(num);
}
else
{
if(p->getnext()==NULL)
{
n1=p->getnum()+1;
input(n1);
}
else
{
while(p->getnext()!=NULL)
p=p->getnext();
n2=p->getnum()+1;
input(n2); }
}
}
void operate::input(int number) //键盘输入新歌手基本信息
{
int nage;
int nscore;
nname[20],nsex[20],nsong[20],ndepart[20],nprogram[20],ntime[20],nplace[20];
cout<<" 请输入编号为 "<<number<<"的歌手信息 "<<endl;
cout<<" 输入姓名: ";cin>>nname;
cout<<" 输入性别: ";cin>>nsex;
cout<<" 输入年龄: ";cin>>nage;
cout<<" 输入参赛歌曲: ";cin>>nsong;
cout<<" 选送单位: ";cin>>ndepart;
cout<<" 比赛项目: ";cin>>nprogram;
cout<<" 比赛时间: ";cin>>ntime;
cout<<" 比赛地点: ";cin>>nplace;
cout<<" 得分: ";cin>>nscore;
insert(number,nname,nsex,nage,nsong,ndepart,nprogram,ntime,nplace,nscore);
}
void operate::insert(int nnum,char nname[],char nsex[],int nage,char
nsong[],char ndepart[],char nprogram[],char ntime[],char nplace[],int nscore)
{
singer *p=myfirst;
if(p==NULL)
myfirst=new
singer(nnum,nname,nsex,nage,nsong,ndepart,nprogram,ntime,nplace,nscore);
else
{
while(p->getnext()!=NULL)
p=p->getnext();
p->setnext(new
singer(nnum,nname,nsex,nage,nsong,ndepart,nprogram,ntime,nplace,nscore,p->getnex t()));}
}
bool operate::findnum() //按编号查询歌手信息
{
int id;
singer *s=myfirst;
singer *f=s;
cout<<" 请输入歌手的编号 :";cin>>id;
if(s==NULL)
{ cout<<"本系统暂无歌手信息!"<<endl; return false; }
else
{
while(s!=NULL)
{
if(s->getnum()==id)
{ s->output1(); return true; }
else
{ f=s; s=s->getnext(); }
cout<<" 无此歌手信息 !"<<endl;
return false;
}
}
bool operate::findprogram() //按比赛项目查询赛事信息
{
char tmpprogram[20];
singer *s=myfirst;
singer *f=s;
cout<<" 请输入比赛项目: ";
cin>>tmpprogram;
if(s==NULL)
{ cout<<" 本系统暂无项目信息! "<<endl; return false; } else
{ while(s!=NULL)
{ if(strcmp(s->getprogram(),tmpprogram)==0)
{ s->output2(); return true; }
f=s; s=s->getnext();
}
cout<<" 本系统无此项目信息! "<<endl;
return false;
}
}
bool operate::modify() //修改歌手信息
{
int number;
singer *s=myfirst;
singer *f=s;
cout<<" 请输入要修改的歌手编号 :";cin>>number;
if(s==NULL)
{cout<<" 无此歌手 !"<<endl; return false; }
else
{
while(s!=NULL)
{
if(s->getnum()==number)
{
s->output();
while(1)
{
int i;
float tmpnumber;
char temp[30];
cout<<"请选择要修改的歌手信息:"<<endl;
cout<<" 1:姓名2:性别3:年龄4:参赛曲目5:
选送单位6:比赛项目 7: 比赛时间 8: 比赛地点 9: 得分 "<<endl;
cout<<"请选择 (1~9) 中的选项 :";cin>>i;
switch(i)
{
case 1:{ cout<<"输入修改姓
名:";cin>>temp;strcpy(s->getname(),temp); }; break;
case 2:{ cout<<" 输入修改性别 :";
cin>>temp;strcpy(s->getsex(),temp); };break;
case 3:{ cout<<"输入修改年
龄:";cin>>tmpnumber;s->getagee(tmpnumber); };break;
case 4:{ cout<<"输入修改参赛歌
曲:";cin>>temp;strcpy(s->getsong(),temp); };break;
case 5:{ cout<<"输入修改选送单
位:";cin>>temp;strcpy(s->getdepart(),temp);};break;
case 6:{ cout<<"输入修改比赛项
目:";cin>>temp;strcpy(s->getprogram(),temp);};break;
case 7:{ cout<<"输入修改比赛时
间:";cin>>temp;strcpy(s->gettime(),temp);};break;
case 8:{ cout<<"输入修改比赛地
点:";cin>>temp;strcpy(s->getplace(),temp);};break;
case 9:{ cout<<"输入修改得
分:";cin>>tmpnumber;s->getscoree(tmpnumber); };break;}
return true;
}
}
else
{ s=s->getnext(); f=s; }
}
cout<<" 没有此编号的歌手 !"<<endl;
return false;
}
}
bool operate::deletesinger( ) //删除歌手信息
{
int i;
singer *s=myfirst;
singer *f=s;
cout<<" 请输入要删除歌手的编号:";cin>>i;
if(s==NULL)
{
cout<<" 无歌手可以删除 "; return false; }
else if(s->getnum()==i)
{
myfirst=myfirst->getnext();
cout<<"编号为"<<i<<"的歌手已被删除了!"<<endl;
delete s;
return true;
}
else
{
s=s->getnext();
while(s!=NULL)
{
if(s->getnum()==i)
{
f->setnext(s->getnext());
cout<<" 编号为 "<<i<<" 的成员已被删除 \n";
delete s;
return true;
}
f=s;
s=s->getnext();
}
cout<<" 要删除的歌手不存在 , 无法删除 !"<<endl;
return false;
}
}
void operate::save() //歌手信息存盘
{
ofstream f2("singer.txt",ios::out);
singer *p=myfirst;
while(p)
{
f2<<p->getnum()<<"\t"<<p->getname()<<"\t"<<p->getsex()<<"\t"<<p->getage()<<" \t"
<<p->getsong()<<"\t"<<p->getdepart()<<"\t"<<p->getprogram()<<"\t"<<p->gettim e()<<"\t"<<p->getplace()<<"\t"<<p->getscore<<endl;
p=p->getnext();
}
f2.close();
cout<<" 保存数据已经完成 "<<endl;
}
void operate::showa( ) //显示所有歌手信息
{
singer *s=myfirst;
cout<<setw(8)<<" 编号 "<<setw(8)<<" 姓名 "<<setw(8)<<" 性别 "<<setw(8)<<" 年龄"<<setw(10)<<" 参赛曲目 "<<setw(12)<<" 选送单位 "<<endl;
while(s!=NULL)
{
cout<<setw(8)<<s->getnum()<<setw(8)<<s->getname()<<setw(8)<<s->getsex()
<<setw(8)<<s->getage()<<setw(10)<<s->getsong()<<setw(12)<<s->getdepart()<<en dl;
s=s->getnext();
}
}
void operate::showb() //显示所有赛事信息
{
singer *s=myfirst;
cout<<setw(10)<<" 参赛项目 "<<setw(12)<<" 参赛时间 "<<setw(12)<<" 参赛地点
"<<setw(12)<<" 得分 "<<endl;
while(s!=NULL)
{
cout<<setw(10)<<s->getprogram()<<setw(12)<<s->gettime()<<setw(12)<<s->getpla ce()<<setw(12)<<s->getscore()<<endl;
s=s->getnext();
}
}
void menu()//主菜单
{
cout<<"|^^^^^^^^^^^^^^^^^^^^^^^^^^^| "<<endl;
cout<<" ***********************『欢迎来到歌手信息管理系统』
*************************"<<endl;
cout<<" *||
*"<<endl;
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<<" *‖7.歌手信息存盘‖*"<<endl;
cout<<" *‖8.显示所有歌手信息‖*"<<endl;
cout<<" *‖9.显示所有赛事信息‖*"<<endl;
cout<<" *‖0.退出‖*"<<endl;
cout<<" *================================================== *"<<endl;
cout<<" *提示:输入相应操作前的序号!
*"<<endl;
cout<<" *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *"<<endl;
cout<<" *感谢您的支持与使用!
*"<<endl;
cout<<" *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *"<<endl;
cout<<"
****************************************************************************"<<e
ndl;
}
void main()
{
menu();
operate op;
//int i;
while(1)
{
int p,i=0;
cout<<"请您输入操作选择(0~9):";cin>>p;
while(i==0)
{
if(p<=9&&p>=0)
i=1;
else
{ cout<<" 操作错误,请重新输入!";cin>>p;}
}
switch(p)
{
case 1:
op.load();break;
case 2:
op.add(); break;
case 3:
op.findnum();break;
case 4:
op.findprogram();break; case 5:
op.modify(); break; case 6:
op.deletesinger(); break; case 7:
op.save(); break;
case 8:
op.showa(); break;
case 9:
op.showb();break;
case 0:
{
cout<<"************ cout<<"***************结束程序运行 *************"<<endl;
再见 ******************"<<endl;
exit(1);break;
}
}
}
}。