《C++程序设计》课程设计说明书比赛参赛选手管理系统.docx
- 文档编号:3662993
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:21
- 大小:77.78KB
《C++程序设计》课程设计说明书比赛参赛选手管理系统.docx
《《C++程序设计》课程设计说明书比赛参赛选手管理系统.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》课程设计说明书比赛参赛选手管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
《C++程序设计》课程设计说明书比赛参赛选手管理系统
《C++程序设计》说明书
比赛参赛选手管理系统
比赛参赛选手管理系统
摘要
C++语言是目前公认的热门编程语言之一。
C++是在C语言基础上发展演变而来的一种面向对象程序设计语言。
它既支持面向过程的程序设计方法,也支持面向对象的程序设计方法。
当今,C++语言在社会的各个领域发挥着越来越重要的作用。
参赛选手系统的设计正是C++用于生活中的一项应用。
参赛选手管理系统能方便用户快捷处理选手的信息,得到想要的数据并能将选手的信息以文档方式保存。
此系统的主要管理的信息有:
选手的姓名,编号和三项赛事的成绩。
系统的主要功能有选手信息的添加、修改、显示,能对选手成绩按编号或成绩进行排序,可以根据用户的要求按姓名,编号查询选手的信息,保存信息到文件以及从文件中读取信息等功能。
目录
摘要2
第一章问题描述2
第二章问题分析2
第三章数据模型2
第四章设计流程图2
第五章程序代码2
第六章运行结果2
第七章设计总结2
参考文献2
第一章问题描述
建立一套比赛参赛选手管理系统。
定义人员基类(competitor),包含选手的基本数据和基本属性,实现以下各功能:
输入记录:
选手信息数据要以文件的形式保存,能实现选手信息数据的维护。
此模块包括子模块有:
增加选手信息、修改选手信息。
查询功能:
查询时可实现按姓名查询、按编号查询、成绩查询
排序:
能对用户指定的任意项目名,按成绩由低到高排列选手数据并显示排序结果。
显示信息:
显示选手的编号、项目、成绩等信息。
设计要求及成果
1.分析课程设计题目的要求
2.写出详细设计说明
3.编写程序代码,调试程序使其能正确运行
4.设计完成的软件要便于操作和使用
第二章问题分析
方案说明:
参赛选手管理系统是用面向对象的方法设计,由于数组的存放是连续的,而单链表是非连续存放的,是动态分配内存空间,因此此系统采用单链表来完成。
各个功能模块的实现主要转变到对单链表的遍历,添加和删除结点。
系统功能模块的划分:
在主界面中包括“增加选手修改选手查询选手信息排序保存信息读取信息退出”等全部的功能,之所以设计这么一个主界面,一是因为能使用户对程序操作的流程更加清楚简明,二是保证了用户同时只能对一个文件进行操作的系统要求,保证了系统不会发生打开文件紊乱或者出现致命错误。
功能模板的划分
显示菜单功能模板
1……增加选手功能
2……修改选手功能
3……查询选手信息
4……排序功能
5……保存信息
6……读取信息
7……退出
第三章数据模型
类的设计
定义参赛选手competitor类,包含成员变量:
姓名name,编号num,短跑、跳高、跳远成绩x,y,z。
classcompetitor//选手
public:
competitor*next;
public:
stringname;//姓名
longnum;//编号
intx,y,z;//短跑,跳高,跳远
成员函数:
voidsadd();//添加
voidsamend();//修改
voidssearch();//查询
voidstaxis();//排序
voidssave();//保存
voidsload();//读取
voidpxh();
voidpsx();
voidpyw();
voidpyy();
第四章设计流程图
图4.1流程图
第五章程序代码
#include
#include
#include
#include
usingnamespacestd;
classcompetitor
{
public:
competitor*next;
public:
stringname;//姓名
longnum;//编号
floatx,y,z;//短跑,跳高,跳远
voidplay(){cout< "< "< "< competitor(stringsname,longsnum,floatsx,floatsy,floatsz) { name=sname; num=snum; x=sx; y=sy; z=sz; } }; classcla { public: cla()//构造函数 { comp=0; sload(); } ~cla()//析构函数 { competitor*p; p=comp; while(p) { p=p->next; deletecomp; comp=p; } comp=0; } voidsadd();//添加 voidsamend();//修改 voidssearch();//查询 voidstaxis();//排序 voidssave();//保存 voidsload();//读取 voidpxh(); voidpsx(); voidpyw(); voidpyy(); private: competitor*comp;//头接点 }; voidcla: : sadd()//添加 { competitor*q; stringname1; longnum1; floatx1,y1,z1; system("cls"); cout<<"\n**增加的选手**\n"< cout<<"请输入选手的(中间用空格间隔)"< cout<<"姓名编号短跑成绩跳高成绩跳远成绩"< cin>>name1>>num1>>x1>>y1>>z1; q=newcompetitor(name1,num1,x1,y1,z1); q->next=0; if(comp) { competitor*t; t=comp; if(t->num==num1) { cout<<"编号已存在,请重新输入"< return; } while(t->next) { if(t->num==num1) { cout<<"编号已存在,请重新输入"< return; } t=t->next; } t->next=q; } else { comp=q; } cout<<"输入完毕"< } voidcla: : samend()//修改 { system("cls"); longnum1; cout<<"\n**修改选手信息**\n"; cout<<"输入要修改选手的编号"; cin>>num1;//查找要修改的结点 competitor*p1,*p2; p1=comp; while(p1) { if(p1->num==num1) break; else { p2=p1; p1=p1->next; } } if(p1! =NULL) { cout<<"编号是"< "< cout<<"姓名"< cout<<"请输入修改后的信息: 姓名短跑成绩跳高"; cout<<"成绩跳远成绩"< cin>>p1->name>>p1->x>>p1->y>>p1->z; cout<<"修改成功"< } else//未找到接点 cout<<"未找到! \n"; } voidcla: : ssearch()//查询 { system("cls"); cout<<"\n**查询选手信息**\n"< cout<<"请输入查询方式: "< cout<<"1.按编号查询"< cout<<"2.按姓名查询"< cout<<"3.返回"< charc;cin>>c; switch(c) { case'1': { longnum1; cout<<"要查询的编号"< cin>>num1;//查找要查询的结点 competitor*p1,*p2; p1=comp; while(p1) { if(p1->num==num1) break; else { p2=p1; p1=p1->next; } } if(p1! =NULL) { cout<<"编号是"< cout<<"姓名: "< "< "< "< cout<<"查询完毕..."; } else//未找到接点 cout<<"未找到! \n"; break; } case'2': { stringname1; cout<<"要查询的选手姓名"< cin>>name1;//查找要查询的结点 competitor*p1,*p2; p1=comp; while(p1) { if(p1->name==name1) break; else { p2=p1; p1=p1->next; } } if(p1! =NULL) { cout< cout<<"编号: "< "< "< "< cout<<"查询完毕..."; } else//未找到接点 cout<<"未找到! \n"; break; } case'3': return; } } voidcla: : pxh()//按编号排序 { competitor*p1,*p2; intn; p1=comp; n=1; while(p1->next) {n++;p1=p1->next;} cout<<"共有"< inti; p1=comp; for(i=1;i { p1=comp; if(p1->num>p1->next->num)//如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1;//头结点交换 comp=p2; } p1=comp; while(p1->next->next)//中间的交换 { p2=p1; p1=p1->next; if(p1->num>p1->next->num) { p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next;//交换 } } } p1=comp; do { p1->play(); p1=p1->next; }while(p1); } voidcla: : psx()//按短跑成绩排序 { competitor*p1,*p2; intn; p1=comp; n=1; while(p1->next) {n++;p1=p1->next;} cout<<"共有"< inti; p1=comp; for(i=1;i { p1=comp; if(p1->x>p1->next->x)//如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1;//头结点交换 comp=p2; } p1=comp; while(p1->next->next)//中间的交换 { p2=p1; p1=p1->next; if(p1->x>p1->next->x) { p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next;//交换 } } } p1=comp; do { p1->play(); p1=p1->next; }while(p1); } voidcla: : pyw()//按跳高成绩排序 { competitor*p1,*p2; intn; p1=comp; n=1; while(p1->next) {n++;p1=p1->next;} cout<<"共有"< inti; p1=comp; for(i=1;i { p1=comp; if(p1->y>p1->next->y)//如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1;//头结点交换 comp=p2; } p1=comp; while(p1->next->next)//中间的交换 { p2=p1; p1=p1->next; if(p1->y>p1->next->y) { p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next;//交换 } } } p1=comp; do { p1->play(); p1=p1->next; }while(p1); } voidcla: : pyy()//按跳远成绩排序 { competitor*p1,*p2; intn; p1=comp; n=1; while(p1->next) {n++;p1=p1->next;} cout<<"共有"< inti; p1=comp; for(i=1;i { p1=comp; if(p1->z>p1->next->z)//如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1;//头结点交换 comp=p2; } p1=comp; while(p1->next->next)//中间的交换 { p2=p1; p1=p1->next; if(p1->z>p1->next->z) { p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next;//交换 } } } p1=comp; do { p1->play(); p1=p1->next; }while(p1); } voidcla: : staxis()//排序 { system("cls"); charc; cout<<"请选择以何种方式排序: "< cout<<"1……以编号排序"< cout<<"2……以短跑成绩排序"< cout<<"3……以跳高成绩排序"< cout<<"4……以跳远成绩排序"< cout<<"5……返回"< cout<<"请选择(1-5)"< cin>>c; switch(c) { case'1': pxh();break; case'2': psx();break; case'3': pyw();break; case'4': pyy();break; case'5': return; } } voidcla: : ssave()//保存到文件 { system("cls");charc; cout<<"\n保存选手信息(将覆盖原文件),是否继续? [Y/N]: ";cin>>c; if(toupper(c)! ='Y')return; ofstreamtfile("date.txt",ios_base: : binary); competitor*p=comp; while(p)//写入文件 { tfile< tfile< p=p->next; } tfile.close(); cout<<"保存完毕..."< } voidcla: : sload()//读取 { competitor*p; p=comp; while(p) { comp=p->next; deletep; p=comp; } Ifstreamtfile("date.txt",ios_base: : binary); stringname1; longnum1; floatx1,y1,z1; tfile>>name1>>num1>>x1>>y1>>z1; while(tfile.good()) {//创建选手接点 competitor*s; s=comp; s=newcompetitor(name1,num1,x1,y1,z1); s->next=0; if(comp)//若已经存在结点 { competitor*p2; p2=comp; while(p2->next)//查找尾结点 { p2=p2->next; } p2->next=s;//连接 } else//若不存在结点(表空) {comp=s;//连接} tfile>>name1>>num1>>x1>>y1>>z1; } tfile.close(); cout<<"\n欢迎使用选手成绩管理系统\n"; } voidmain() { charc;claa; do { cout<<"*************************************\n"; cout<<"1……增加选手\n"; cout<<"2……修改选手\n"; cout<<"3……查询选手信息\n"; cout<<"4……排序\n"; cout<<"5……保存信息\n"; cout<<"6……读取信息\n"; cout<<"7……退出\n"; cout<<"*************************************\n"; cout<<"请选择(1-7): "; cin>>c; switch(c) { case'1': a.sadd();break; case'2': a.samend();break; case'3': a.ssearch();break; case'4': a.staxis();break; case'5': a.ssave();break; case'6': a.sload();break; } }while(c! ='7'); } 第六章运行结果 图6.1运行结果主界面 第七章设计总结 通过一个学期的C++学习,我对C++语言有了基本认识,但是对有些知识懂得还不够透彻。 通过这次为期两周的课程设计,我学到了更多关于《C++面向对象的程序设计》的内容。 这个课题用到了C++语言程序设计的知识,通过这次课程设计,使我对C++设计有了更深的了解,对课本上的知识有了进一步的掌握,同时也使我对自己的专业知识有进一步的巩固加深。 在写程序时,要注意类与对象、构造函数、析构函数、成员函数等相结合,尤其是在学好程序后,要运行,有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+程序设计 C+ 程序设计 课程设计 说明书 比赛 参赛选手 管理 系统