歌手比赛系统课程设计报告_第1页
歌手比赛系统课程设计报告_第2页
歌手比赛系统课程设计报告_第3页
歌手比赛系统课程设计报告_第4页
歌手比赛系统课程设计报告_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...wd......wd......wd...计算机学院信息管理与信息系统专业《程序设计综合课程设计》报告〔2010/2011学年第一学期〕学生姓名:学生班级:1学生学号:指导教师:201目录Ⅰ第一章课程设计的目的和要求11.1课程设计的目的11.2课程设计的目标11.3课程设计要求2第二章课程设计任务内容3HYPERLINK2.1课程设计题目32.2背景32.3功能需求3HYPERLINK2.4系统模块图4第三章详细设计说明53.1主函数的流程图53.2输入歌手数据63.3查询歌手数据7HYPERLINK3.4编码与调试8第四章软件使用说明及运行结果94.1使用说明94.2运行结果10第五章课程设计心得与体会13附录1:参考文献15附录2:程序清单16歌手比赛系统课程设计的目的和要求1.1课程设计的目的C++语言课程设计的主要目的是培养学生综合运用C++程序设计课程所学到的知识,编写C++程序解决实际问题的能力,以及严谨的工作态度和良好的程序设计习惯。通过课程设计的训练,学生应该能够了解程序设计的基本开发过程,掌握编写、调试和测试C++语言程序的基本技巧,充分理解构造化程序设计的基本方法。C++语言程序设计的主要任务时要求学生遵循软件开发过程的基本标准,运用构造化程序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试C++语言程序及编写设计报告。本次课程设计是通过设计一个较为简单的“歌手比赛系统〞,进一步熟悉C++中有关各种知识的运用与掌握。了解系统开发的需求分析、模块分析、程序流程图、编码测试、模块组装与整体调试的全过程,加深对C++的理解与VisualC++环境的使用;逐步熟悉程序设计的方法,并养成良好的编程习惯,进一步培养完善的C++编程设计思维,为以后进展软件编程、数据库管理等深入学习打下一个结实基础1.2课程设计的目标本课程设计的目标:稳固和加深学生对C++语言课程的基本知识的理解和掌握;掌握C++语言编程和程序调试的基本技能;掌握利用C++语言进展软件设计的方法;提高书写程序设计说明文档的能力;提高运用C++语言解决实际问题的能力。1.3课程设计要求基本要求:1.题目:设计一个“歌手比赛系统〞软件;2.了解该系统软件开发的相关背景;3.参考相关书籍学习课程设计的基本知识;4.清楚所开发系统软件的各个相关功能,以便顺利开发系统软件;5.对系统功能模块进展分析,写出设计说明文档;6.设计完成的软件要便于操作和使用;7.对自己所设计的程序进展调试,并不断完善;8.在设计过程中熟练掌握软件编程的相关知识;9.详细体会并记录相关过程,并将心得体会写在课程设计报告中;10.设计完成后提交课程设计报告。第二章课程设计任务内容2.1课程设计题目歌手比赛系统。2.2背景时下,无论是社会上某些场合还是校园内,经常举行一些歌手演唱比赛,一般不会再像以前那样用笔记录比赛的情况,歌手比赛系统由此产生。它几乎包含了一切应有的功能,歌手信息的输入,评委打分,成绩排序等功能应有尽有,省去了很多麻烦的环节,完全可以满足一次歌手比赛的需求。开发此系统只为方便一般的歌手比赛。2.3功能需求用C++实现歌手比赛系统。该系统主要有以下功能:系统以菜单方式工作;歌手数据录入功能〔歌手数据用文件保存〕--输入;歌手成绩〔评委打分〕录入功能—输入:按输入选手的顺序对其分别打分,输入每个评委的评分,对一个选手打完分之后,显示其总分和平均分;计算总成绩和平均成绩〔去掉一个最高分和一个最低分〕;歌手成绩排序〔按平均分〕:对选手按平均分进展排序,输出选手的姓名、编号、总分和平均分;歌手成绩查询功能—算法;按编号查询:输入编号,如果存在,输出选手的数据,不存在,输出“信息不存在〞。按姓名查询:输入选手姓名,存在,则输出选手数据,不存在,则输出“信息不存在〞;7、追加选手数据〔包括歌手姓名和编号〕:如果添加的选手已经存在,则不能插入,不存在,则输出“成功插入〞。8、写入数据文件:将输入的信息进展保存,保存到自己所写的文件中。2.4系统模块图以下是歌手管理系统的模块图:歌手管理系统歌手管理系统创立歌手信息评委打分成绩排序数据查询追加选手数据写入数据文件退出系统图2-1系统模块图第三章详细设计说明3.1主函数的流程图输入选手数据输入选手数据是否继续输入查询选手数据追加选手数据完毕YN成绩排序成绩输入开场图3-1主函数流程图3.2输入歌手数据输入函数:刷新此前的显示界面,然后输入在执行上步操作后的显示界面Singer*create()包含的参数有:选手姓名stringname;编号longnum。输入歌手编号、姓名输入歌手编号、姓名开场添加错误该信息是否存在完毕NY添加到文件图3-2输入函数流程图3.3查询歌手数据查询函数:刷新此前的显示界面,然后查询在执行上步操作后的显示界面按姓名查询:voidinquire();参数:姓名stringname按编号查询:voidinquire()。参数:编号longnum输入歌手编号或姓名开场输入歌手编号或姓名开场是否存在完毕NY显示所查询歌手数据图3-3查询函数流程图3.4编码与调试此程序包含六个函数:main();Singer*create();voidprint();Singer*insert();voidsave();voidmenu();voidgrade();voidrank();voidwelcome();voidinquire();Singer*import();其中:main()为主函数,可输出开机界面;voidmenu()功能选择界面,按提示可提供相关服务;Singer*create()创立歌手信息表,输入选手相关数据;voidprint()输出函数,输出选手的相关数据;Singer*insert()插入函数,插入新的选手的数据;voidsave()写入数据文件的函数,将选手的数据保存到文件夹中;voidgrade()评委打分函数,输入评委所打的分数;voidrank()成绩排序函数,对选手按平均分进展排序,并输出最终结果;voidwelcome()该函数的作用是清空屏幕;Singer*import()文件导入函数,从某文件把选手信息导入系统。第四章软件使用说明及运行结果4.1使用说明该程序可以实现对选手有关信息查找的功能,安装VisualC++6.0英文版后,在工具栏“file〞中单击“new〞选项,单击“files〞菜单,选择“C++Sourcefile〞输入文件名“歌手比赛系统〞。开场输入程序,程序输入完成,单击“build〞工具栏,选择“build[歌手比赛系统.cpp1]〞,待程序无误后,开场执行程序。根据数据构造、函数功能和主要的流程图,进展录入源代码操作。在编码时,注意代码的书写标准,包括命名惯例、注释、分隔和缩进等,这样使程序层析清晰,增强可读性和可维护性。编码操作完成后,先静态检查一下有没有语法错误,然后进展编译,更深一步检查语法错误。待编译通过时,运行程序,观察是否能够正常运行,如果有问题,再去修改源程序,直至到达了预期的效果。4.2运行结果1、初始界面,提供功能选择,输入相应数字或字母。图4-1程序截图一2、选择1,输入选手信息,包括姓名和编号〔编号必须是阿拉伯数字〕。图4-2程序截图二3、评委打分界面,会依次提醒输入每个评委所打的分数〔分数必须是0到100之内的数〕,输入完毕,显示选手的总分和平均分,也就是最终得分。图4-3程序截图三4、成绩排序界面,输入选择“4〞,输出排序的结果,显示有选手的编号、姓名、总分和平均分,排序是按平均分。图4-4程序截图四5、下面是查询界面,可按姓名或者编号查询,输出选手信息。图4-5程序截图五6、追加选手数据,输入新增选手的姓名和编号。图4-6程序截图六7、写入数据文件,保存信息到自己建立的文件内。图4-7程序截图七第五章课程设计心得与体会课程设计刚开场的时候,我真的感觉到无从下手。因为已经过去一个学期了,期间又没有怎么看书,大一的时候学的c++,不过基本上已经忘光了,而且那时候学的不深,如果单单写一个比较的小的程序还可以,大程序基本写不了。当教师把题目发给我们之后,刚开场是一筹莫展,不过短时间内就已经觉醒,重新对题目分析了一遍,了解了一下要用到哪方面的知识,然后着手去看书,重新熟悉一下以前的知识。然后去图书馆借了一些关于数据构造和c++的书。看过那些书之后,信心增加了不少,对接下来的程序编译有很大帮助。通过这三周的课程设计,我独立完成了一个较大的C++语言程序的设计,并认真完成了课程设计报告。回忆这三周的时间,我收获很大。首先,我熟练地运用了所学的知识编写程序,并成功的完成,感觉成就感很强,这大大激发了我编程的兴趣;其次,在设计的过程中遇到了一些困难,我会认真的去思考,或者充分利用网络资源来寻求帮助,提高获取信息的能力。课程设计期间,我有向教师和同学寻求帮助,在交流中共同进步。最后,我了解了软件开发的大体过程及各个步骤,这对将来的学习和工作是很有帮助的。对于信管专业的大学生来说,积累实战经历是一项极其重要的内容,很可能成为将来就业的敲门砖。而程序设计综合课程设计就是积累实战经历的一个过程,虽然程序的规模并不大,但能够让我们尽早地认识软件开发的重要性和必要性,为将来的就业打下坚实的基础。经过两个星期的上机实践学习,使我对C++语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多缺乏之处,首先是自己编程粗心大意,经常出错,通过学习也有所改进;再有对C++语言的一些标准函数不太了解,还有对函数调用的正确使用不够熟悉,以及对C++语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。这次的课程设让我认识到很多C++的内在要素:程序设计语言是程序设计的工具。这是我通过两周课程设计深深体会的一点,并且发现如果想有效的进展程序设计,正确地应用程序设计语言表达算法,必须准确的运用程序设计语言,掌握其语法知识。学习程序设计必须重视时间环节,多读程序,多编写程序,多上机实践。这次的课程设计就使得课堂教学、式样和实践之间的关系更为严密。对我的学习有着很深远的影响。我发现作为一个程序设计人员,需要掌握面向过程的程序设计,也要掌握面向对象的程序设计。从前,人们通过C++语言学习面向过程的程序设计,再通过C++学习面向对象的程序设计。其实C++并不是纯粹的面向对象的语言,它是一种混合语言。学习C++既可以编写面向过程的程序,也可以编写面向对象的程序。这一点是我通过可课程设计所的实践发现的。4.深切的感受到了C++语法的复杂,内容的繁多。发现如果对它缺乏系统的了解,将难以真正的运用,编出来的程序错误百出。附录1:参考文献[1]谭浩强编著:C++程序设计,北京:清华大学出版社,2004[2]杨秀金编著:数据构造〔c++版〕,北京:人民邮电出版社,2009.4[3]湛为芳编著:C++程序设计技术习题解答和实验指导,北京:清华大学出版社,2009.10[4]伍俊良编著:VisualC++6.0课程设计与系统开发案例.北京:清华大学出版社,2002.11[5]、〔美〕戴特尔〔Deitel,H.M.〕等编著,张引等译:C++大学基础教程〔第五版〕,北京:电子工业出版社,2006.6附录2:程序清单以下是歌手比赛系统的源代码:#include<iostream>#include<fstream>#include<string>#include<iomanip>usingnamespacestd;#defineNULL0intn=0;//链表节点数boolformExist=false;//原有链表是否存在structSinger{ stringname; longnum; intsum; intmark[10]; floataverage; Singer*next;};//创立链表Singer*create();//打印信息voidprint(Singer*pt);//插入节点Singer*insert(Singer*head,Singer*sin);//保存到文件voidsave(Singer*head,charfilename[]);//菜单voidmenu();//评委打分voidgrade(Singer*head,intmark[]);//成绩排序voidrank(Singer*&head);//欢迎voidwelcome();//按姓名查询voidinquire(Singer*head,stringname);//按编号查询voidinquire(Singer*head,longnum);//从文件导入Singer*import(charfilename[],Singer*head);intmain(){ Singer*head=NULL; Singernewsin; stringname; voidgrade(Singer*); ifstreaminfile; charfilename[20]; longnum; charchoose; boolquit=false; charc; welcome(); while(true) { menu(); cin>>choose; switch(choose) { case'1': if(formExist) { cout<<"您要创立新的链表,原有链表将丧失,是否继续(Y/N)"; cin>>c; if(!(c=='y'||c=='Y')) continue; else { n=0; head=create(); system("pause"); break; } }else { head=create(); system("pause"); break; } case'2': cout<<"请输入文件名:"; cin>>filename; head=import(filename,head); system("pause"); break; case'3': grade(head); system("pause"); break; case'4': cout<<"成绩排序结果为:"<<endl; rank(head); system("pause"); break; case'5': print(head); system("pause"); break; case'6': cout<<"请输入姓名:"<<endl; cin>>name; inquire(head,name); system("pause"); break; case'7': cout<<"请输入编号:"<<endl; cin>>num; inquire(head,num); system("pause"); break; case'8': cout<<"请输入新增选手的姓名、编号:"<<endl; cin>>; cin>>newsin.num; head=insert(head,&newsin); system("pause"); break; case'k': cout<<"请输入文件名:"; cin>>filename; save(head,filename); system("pause"); break; case'c': system("cls"); welcome(); break; case'q': quit=true; break; default: cout<<"输入错误!"<<endl; } if(quit) break; } //退出时提示保存 cout<<"您想保存这些信息吗?(Y/N)"; cin>>c; if(c=='y'||c=='Y') { cout<<"请输入文件名:"; cin>>filename; save(head,filename); } return0;}//欢迎界面voidwelcome(){ cout<<"***************************************"<<endl <<"欢迎使用歌手比赛管理系统!"<<endl <<"制作人:黄光亮 时间:2010-12-29"<<endl <<"***************************************"<<endl<<endl;}//菜单voidmenu(){ cout<<setiosflags(ios::left); cout<<"\n\n您要做什么?"<<endl <<setw(20)<<"1.创立选手信息表" <<setw(20)<<"2.从文件导入信息表"<<endl <<setw(20)<<"3.评委打分" <<setw(20)<<"4.成绩排序"<<endl <<setw(20)<<"5.打印所有的信息" <<setw(20)<<"6.按姓名查询"<<endl <<setw(20)<<"7.按编号查询" <<setw(20)<<"8.追加选手数据"<<endl <<setw(20)<<"k.保存信息表到文件" <<setw(20)<<"c.清空屏幕"<<endl <<setw(20)<<"q.退出"<<endl<<endl <<"输入您的选择:";}//创立链表Singer*create(){ boolerror=false; formExist=true; Singer*p1,*p2,*head; head=NULL; p1=head; while(true) { p2=p1; p1=newSinger; cout<<"请输入选手的姓名:(输0完毕)"; cin>>p1->name; if(p1->name=="0") break; cout<<"编号:"; cin>>p1->num; n++; if(n==1) { head=p1; p1->next=NULL; } else { p2->next=p1; p1->next=NULL; } } cout<<"输入完毕!"<<endl; returnhead;}//输出信息voidprint(Singer*head){ Singer*p=head; if(p!=NULL) { cout<<setw(15)<<"姓名"<<setw(10)<<"编号"<<endl; do { cout<<setw(15)<<p->name<<setw(10)<<p->num<<endl; p=p->next; }while(p!=NULL); cout<<"合计选手"<<n<<"人。"<<endl; } else cout<<"没有信息!"<<endl;}//评委打分voidgrade(Singer*head){Singer*p; p=head; if(p!=NULL) { do { inti,max,min; intsum=0; max=-1; min=101; cout<<"请输入"<<p->num<<"号选手"<<p->name<<"的得分\n\n"; for(i=0;i<10;i++) { cout<<"第"<<i+1<<"个评委的评分:"; cin>>p->mark[i]; if(p->mark[i]>max) max=p->mark[i]; if(p->mark[i]<min) min=p->mark[i]; sum+=p->mark[i]; } p->sum=sum; p->average=(p->sum-max-min)/8.0; cout<<"总分"<<p->sum<<"平均分:"<<p->average<<endl; p=p->next; }while(p!=NULL); } else cout<<"\n所有选手的评分输入完毕.\n"; system("pause");}//按平均分排序数出函数voidrank(Singer*&head){ /////////////////冒泡法排序///////////////////////////// //p=head; intcc; Singer*p,*q,*tail,*h; if(!head) return; tail=NULL; h=newSinger; h->next=head; //h=head; while(h->next!=tail) { p=h; q=p->next; while(q->next!=tail) { //swap if(p->next->average<q->next->average) { p->next=q->next; q->next=q->next->next; p->next->next=q; p=p->next; } else{ //nextstep q=q->next; p=p->next; } } //tailistheelementbubbleout //sinceweusesinglelink tail=q; } /* do//求出选手的的人数 {p=p->next;n++;}while(p->next!=NULL); Singer*temp=head->next; Singer*prev=head; for(i=0;i<n-1;i++) { if(head->average<temp->average) { prev->next=temp->next; temp->next=head; head=temp; } } /*for(i=1;i<n;i++)//冒泡法排序{p1=head;p2=head->next->next;for(j=0;j<n-i;j++){if(p1->next[i].average<=p2->average)//满足条件交换数据位置{p1->next->next=p2->next;p2->next=p1->next;p1->next=p2;p2=p2->next;}//ifp1=p1->next;p2=p2->next;}//for}//for */ /////////////////////输出排序后数据//////////////////////////////// head=p->next;p=h->next; cout<<setw(10)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"总分"<<setw(15)<<"平均分"<<endl; do{cout<<setw(10)<<p->num<<setw(10)<<p->name<<setw(10)<<p->sum<<setw(15)<<p->average<<endl; p=p->next;}while(p!=NULL);system("pause");}//插入信息Singer*insert(Singer*head,Singer*sin){ Singer*p0,*p1; p1=head; p0=sin; if(head==NULL) { head=p0; p0->next=NULL; } else { while(p1->next!=NULL) { if(p0->num==p1->num) { cout<<"编号为"<<p0->num<<"的选手已存在!"<<endl; returnhead; } p1=p1->next; } p1->next=p0; p0->next=NULL; n++; } cout<<"成功插入信息!"<<endl; returnhead;}//保存到文件voidsave(Singer*head,charfilename[]){ Singer*p=head; boolflag=false; if(head==NULL) { cout<<"没有可以保存的信息!"<<endl; return; } else { fstreamoutfile(filename,ios::out); if(!outfile) { cout<<"翻开数据文件出错!"<<endl; return; } do { if(flag) outfile<<endl; outfile<<p->name<<"\t"<<p->num<<'\t'<<p->mark; flag=true; p=p->next; }while(p!=NULL); outfi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论