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

下载本文档

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

文档简介

1、计算机学院信息管理与信息系统专业程序设计综合课程设计报告(2010/2011学年 第一学期)学生姓名:学生班级:_J学生学号: 指导教师:2011年1月7日H录I第一章 课程设计的目的和要求 1.1 课程设计的目的1.2 课程设计的目标1.3 课程设计要求第二章 课程设计任务内容 2.1 课程设计题目 32.3 功能需求2.4 系统模块图 4第三章详细设计说明3.1 主函数的流程图 3.2 输入歌手数据3.3 查询歌手数据3.4 编码与调试 8第四章 软件使用说明及运行结果 4.1 使用说明4.2 运行结果第五章课程设计心得与体会附录1:参考文献附录2:程序清单歌手比赛系统第一章 课程设计的目

2、的和要求1.1 课程设计的目的C+邮言课程设计的主要目的是培养学生综合运用C+取序设计课程所学到的知识,编写C+?序解决实际问题的能力,以及严谨的工作态度和良好的程序设计习惯。通过课程设计的训练,学生应该能够了解程序设计的基本开发过程,掌握编写、调试和测试C+邮言程序的基本技巧,充分理解结构化程序设计的基本方法。C+邮言程序设计的主要任务时要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试C+叫言程序及编写设计报告。本次课程设计是通过设计一个较为简单的“歌手比赛系统”,进一步熟悉C+”有关各种知识的运用与掌握。了解系统开发的需求分

3、析、模块分析、程序流程图、编码测试、模块组装与整体调试的全过程,加深对C+勺理解与Visual C+训境的使用; 逐步熟悉程序设计的方法,并养成良好的编程习惯,进一步培养完善的 C+编程设计 思维,为以后进行软件编程、数据库管理等深入学习打下一个牢固基础1.2 课程设计的目标本课程设计的目标:1 .巩固和加深学生对C+切言课程的基本知识的理解和掌握;2 .掌握C+邮言编程和程序调试的基本技能;3 .掌握利用C+邮言进行软件设计的方法;4 . 提高书写程序设计说明文档的能力;5 .提高运用C+胡言解决实际问题的能力。1.3 课程设计要求基本要求:1. 题目:设计一个“歌手比赛系统”软件;2. 了

4、解该系统软件开发的相关背景;3. 参考相关书籍学习课程设计的基本知识;4. 清楚所开发系统软件的各个相关功能,以便顺利开发系统软件;5. 对系统功能模块进行分析,写出设计说明文档;6. 设计完成的软件要便于操作和使用;7. 对自己所设计的程序进行调试,并不断完善;8. 在设计过程中熟练掌握软件编程的相关知识;9. 详细体会并记录相关过程,并将心得体会写在课程设计报告中;10. 设计完成后提交课程设计报告。第二章 课程设计任务内容2.1 课程设计题目歌手比赛系统。2.2 背景时下, 无论是社会上某些场合还是校园内,经常举行一些歌手演唱比赛,一般不会再像以前那样用笔记录比赛的情况,歌手比赛系统由此

5、产生。它几乎包含了一切应有的功能,歌手信息的输入,评委打分,成绩排序等功能应有尽有,省去了很多麻烦的环节,完全可以满足一次歌手比赛的需求。开发此系统只为方便一般的歌手比赛。2.3 功能需求用C+咬现歌手比赛系统。该系统主要有以下功能:1、 系统以菜单方式工作;2、 歌手数据录入功能(歌手数据用文件保存)- 输入;3、 歌手成绩(评委打分)录入功能输入:按输入选手的顺序对其分别打分,输入每个评委的评分,对一个选手打完分之后,显示其总分和平均分;4、 计算总成绩和平均成绩(去掉一个最高分和一个最低分);5、 歌手成绩排序(按平均分): 对选手按平均分进行排序,输出选手的姓名、编号、总分和平均分;6

6、、 歌手成绩查询功能算法;按编号查询:输入编号,如果存在,输出选手的数据,不存在, 输出 “ 信息不存在”。按姓名查询:输入选手姓名,存在,则输出选手数据,不存在,则输出 “信息不存在”;7、 追加选手数据(包括歌手姓名和编号):如果添加的选手已经存在,则不能插入,不存在,则输出“成功插入”。8、 写入数据文件:将输入的信息进行保存,保存到自己所写的文件中。2.4 系统模块图以下是歌手管理系统的模块图:图2-1系统模块图第三章详细设计说明3.1主函数的流程图图3-1主函数流程图输入函数:刷新此前的显示界面,然后输入在执行上步操作后的显示界面Singer *create()包含的参数有:选手姓名

7、 string name;编号long num 。图3-2输入函数流程图3.3 查询歌手数据查询函数:刷新此前的显示界面,然后查询在执行上步操作后的显示界面按姓名查询:void inquire。; 参数:姓名 string name按编号查询:void inquire。参数:编号long num图3-3查询函数流程图3.4 编码与调试*insert() ;void此程序包含六个函数:main() ; Singer *create() ; void print() ; Singervoid save() ; void menu() ; void grade();void rank(); void

8、 welcome。inquire。; Singer *import() ;其中:main()为主函数,可输出开机界面;void menu()功能选择界面,按提示可提供相关服务;Singer *create()创建歌手信息表,输入选手相关数据;void print() 输出函数,输出选手的相关数据;Singer *insert() 插入函数,插入新的选手的数据;void save() 写入数据文件的函数,将选手的数据保存到文件夹中;void grade() 评委打分函数,输入评委所打的分数;void rank() 成绩排序函数,对选手按平均分进行排序,并输出最终结果;void welcome()

9、 该函数的作用是清空屏幕; Singer *import() 文件导入函数,从某文件把选手信息导入系统。第四章 软件使用说明及运行结果4.1 使用说明该程序可以实现对选手有关信息查找的功能,安装VisualC+6.0 英文版后,在工具栏“file ”中单击“ neW'选项,单击“files ”菜单,选择“ C+Source file ” 输入文件名 “歌手比赛系统”。 开始输入程序,程序输入完成,单击 “ build ” 工具栏,选择“ build 歌手比赛系统.cpp1 ” , 待程序无误后,开始执行程序。根据数据结构、函数功能和主要的流程图,进行录入源代码操作。在编码时,注意代码的

10、书写规范,包括命名惯例、注释、分隔和缩进等,这样使程序 层析清晰,增强可读性和可维护性。编码操作完成后,先静态检查一下有没有语法错误,然后进行编译,更深一步检查语法错误。待编译通过时,运行程序,观察是否能够正常运行,如果有问题,再去 修改源程序,直至达到了预期的效果。4.2 运行结果1、 初始界面,提供功能选择,输入相应数字或字母。图 4-1 程序截图一2、选择1,输入选手信息,包括姓名和编号(编号必须是阿拉伯数字)。图 4-2 程序截图二3、评委打分界面,会依次提醒输入每个评委所打的分数(分数必须是0 到 100 之内的数) ,输入完毕,显示选手的总分和平均分,也就是最终得分。图 4-3 程

11、序截图三4、成绩排序界面,输入选择“4”,输出排序的结果,显示有选手的编号、姓名、总分和平均分,排序是按平均分。图 4-4 程序截图四5、下面是查询界面,可按姓名或者编号查询,输出选手信息。图 4-5 程序截图五6、追加选手数据,输入新增选手的姓名和编号。图4-6 程序截图六7、写入数据文件,保存信息到自己建立的文件内。图4-7 程序截图七第五章 课程设计心得与体会课程设计刚开始的时候,我真的感觉到无从下手。因为已经过去一个学期了,期问又没有怎么看书,大一的时候学的 C+,不过基本上已经忘光了,而且那时候学的 不深, 如果单单写一个比较的小的程序还可以,大程序基本写不了。当老师把题目发给我们之

12、后,刚开始是一筹莫展,不过短时间内就已经觉醒,重新对题目分析了一遍,了解了一下要用到哪方面的知识,然后着手去看书,重新熟悉一下以前的知识。然后去图书馆借了一些关于数据结构和 C+的书。看过那些书之后,信心增加了不少,对接下来的程序编译有很大帮助。通过这三周的课程设计,我独立完成了一个较大的 C+邮言程序的设计,并认真 完成了课程设计报告。回忆这三周的时间,我收获很大。首先,我熟练地运用了所学的知识编写程序,并成功的完成,感觉成就感很强,这大大激发了我编程的兴趣;其次,在设计的过程中遇到了一些困难,我会认真的去思考,或者充分利用网络资源来寻求帮助,提高获取信息的能力。课程设计期间,我有向老师和同

13、学寻求帮助,在交流中共同进步。最后, 我了解了软件开发的大体过程及各个步骤,这对将来的学习和工作是很有帮助的。对于信管专业的大学生来说,积累实战经验是一项极其重要的内容,很可能成为将来就业的敲门砖。而程序设计综合课程设计就是积累实战经验的一个过程,虽然程序的规模并不大,但能够让我们尽早地认识软件开发的重要性和必要性,为将来的就业打下坚实的基础。经过两个星期的上机实践学习,使我对 C+邮言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己编程粗心大意,经常出错,通过学习也有所改进;再有对C+邮言的一些标准函数不太了

14、解,还有对函数调用的正确使用不够熟悉,以 及对C+叫言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所 提高。这次的课程设让我认识到很多 C+勺内在要素:1. 程序设计语言是程序设计的工具。这是我通过两周课程设计深深体会的一点,并且发现如果想有效的进行程序设计,正确地应用程序设计语言表达算法,必须准确的运用程序设计语言,掌握其语法知识。2. 学习程序设计必须重视时间环节,多读程序,多编写程序,多上机实践。这次的课程设计就使得课堂教学、式样和实践之间的关系更为紧密。对我的学习有着很深远的影响。3. 我发现作为一个程序设计人员,需要掌握面向过程的程序设计,也要掌握面向对象的程序设计。

15、从前,人们通过 C+邮言学习面向过程的程序设计,再通过 C+ 学习面向对象的程序设计。其实 C+针不是纯粹的面向对象的语言,它是一种混合语 言。学习C+般可以编写面向过程的程序,也可以编写面向对象的程序。这一点是我 通过可课程设计所的实践发现的。4. 深切的感受到了 C+加法的复杂,内容的繁多。发现如果对它缺乏系统的了 解,将难以真正的运用,编出来的程序错误百出。附录 1:参考文献1谭浩强编着:C+刑序设计,北京:清华大学出版社,20042杨秀金编着:数据结构(C+版),北京:人民邮电出版社,2009.43湛为芳编着:C+®序设计技术习题解答和实验指导,北京:清华大学出版社, 200

16、9.104 伍俊良编着:Visual C+6.0 课程设计与系统开发案例. 北京:清华大学出版社,2002.115、(美)戴特尔(Deitel,H.M.)等编着,张引等译:C+以学基础教程(第五版),北京:电子工业出版社,2006.6附录2:程序清单以下是歌手比赛系统的源代码:#include<iostream>#include<fstream>#include<string>#include<iomanip>using namespace std;#define NULL 0int n=0;/ 链表节点数bool formExist=false

17、; / 原有链表是否存在struct Singerstring name;long num;int sum;int mark10;float average;Singer *next;/ 创建链表Singer *create();/ 打印信息void print(Singer *pt);/ 插入节点Singer *insert(Singer *head,Singer *sin);/ 保存到文件void save(Singer *head,char filename);/ 菜单void menu();/ 评委打分void grade(Singer *head,int mark);/ 成绩排序vo

18、id rank(Singer *&head);/ 欢迎void welcome();/ 按姓名查询void inquire(Singer *head,string name);/ 按编号查询void inquire(Singer *head,long num);/ 从文件导入Singer *import(char filename,Singer *head);int main()Singer *head=NULL;Singer newsin;string name;void grade(Singer *);ifstream infile;char filename20;long num

19、;char choose;bool quit=false;char c;welcome();while(true)menu();cin>>choose;switch(choose)case '1':if (formExist)cout<<" 您要创建新的链表,原有链表将丢失,是否继续?(Y/N)"cin>>c;if (!(c='y'|c='Y')continue;elsen=0;head=create();system("pause");break;elsehead=cr

20、eate();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

21、);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;i

22、nquire(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(h

23、ead,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')c

24、out<<" 请输入文件名:"cin>>filename;save(head,filename);return 0;/ 欢迎界面void welcome()cout<<”*”<<endl<<"欢迎使用歌手比赛管理系统!"<<endl<<"制作人:黄光亮 时间:2010-12-29"<<endl<<”*”<<endl<<endl;/菜单 void menu()(cout<<setiosflags

25、(ios:left);cout<<"nn 您要做什么?"<<endl<<setw(20)<<"1.创建选手信息表"<<setw(20)<<"2.从文件导入信息表"<<endl<<setw(20)<<"3.评委打分"<<setw(20)<<"4.成绩排序"<<endl<<setw(20)<<"5.打印所有的信息"

26、<<setw(20)<<"6.按姓名查询"<<endl<<setw(20)<<"7.按编号查询"<<setw(20)<<"8.追加选手数据"<<endl<<setw(20)<<"k.保存信息表到文件"<<setw(20)<<"c.清空屏幕"<<endl<<setw(20)<<"q,退出"<&l

27、t;endl<<endl<<"输入您的选择:")/创建链表Singer *create()(bool error=false;formExist=true;Singer *p1,*p2,*head;head=NULL;p1=head;while(true)(p2=p1;p1=new Singer;cout<<"请输入选手的姓名:(输0结束广cin>>p1->name;if (p1->name="0")break;cout<<"编号:"cin>>

28、;p1->num;n+;if (n=1) (head=p1;p1->next=NULL;)else(p2->next=p1;p1->next=NULL;)cout<<"输入结束! "<<endl;return head;)/输出信息void print(Singer *head)(Singer *p=head;if(p!=NULL)(cout<<setw(15)<<"姓名"<<setw(10)<<"编号"<<endl;docou

29、t«setw(15)«p->name«setw(10)«p->num«endl;p=p->next;while(p!=NULL);cout«"合计选手 "vvnvv"人。"vvendl;elsecout«"没有信息! "vvendl;/评委打分void grade(Singer *head)Singer *p;p=head;if (p!=NULL)doint i, max, min;int sum=0;max = -1;min =101 ;cout

30、 <<"请输入"<<p->num<<”号选手"<<p->name<<”的彳导分nn"for (i=0; i<10; i+)(cout <<"第"<<i+1<<"个评委的评分:”;cin>>p->marki;if(p->marki>max)max=p->marki;if(p->marki<min)min=p->marki;sum+=p->marki;p-&

31、gt;sum=sum;p->average = (p->sum-max-min)/8.0;cout<<"总分"<<p->sum<<"平均分:"<<p->average<< endl;p = p->next;while(p!= NULL);elsecout<<"n所有选手的评分输入完毕.n"system("pause");/ 按平均分排序数出函数void rank(Singer *&head)/冒泡法排序/p

32、 = head;int cc;Singer *p,*q,*tail,*h;if(!head)return;tail=NULL;h = new Singer;h->next = head;/h = head;while(h->next!=tail)p=h;q=p->next;while(q->next!=tail)/swapif (p->next->average < q->next->average)p->next=q->next;q->next=q->next->next;p->next->nex

33、t=q;p=p->next;else/next stepq=q->next;p=p->next;/tail is the element bubble out/since we use single linktail=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->

34、next = temp->next;temp->next = head;head = temp;I*for(i=1; i<n; i+)/冒泡法排序p1 = head;p2 = head->next->next;for(j=0; j<n-i; j+)满足条件交if(p1->nexti.average <= p2->average)/换数据位置p1->next->next = p2->next;p2->next = p1->next;p1->next = p2;p2 = p2->next;/ifp1 =

35、 p1->next;p2 = p2->next;/for/for *1lllllllllllllllllllll输 出 排 序 后 数 据IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIhead = p->next;p = h->next;cout «setw(10)«" 编号"vvsetw(10)vv" 姓名"vvsetw(10)vv” 总分 "«setw(15)«"平均分"vvendl;docout«setw(10)«p-

36、>num«setw(10)«p->name«setw(10)«p->sum«setw(15)«p->average«end I;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;elsewhile(p1->

37、;next!=NULL)if (p0->num=p1->num)cout<<"编号为"<<p0->num<<”的选手已存在!"<<endl;return head; p1=p1->next;p1->next=p0;p0->next=NULL;n+;cout<<" 成功插入信息!"<<endl;return head;/ 保存到文件void save(Singer *head,char filename)Singer *p=head;boo

38、l flag=false;if (head=NULL)cout<<" 没有可以保存的信息!"<<endl;return;elsefstream outfile(filename,ios:out);if (!outfile)cout<<" 打开数据文件出错!"<<endl;return;doif(flag)outfile<<endl;outfile<<p->name<<"t"<<p->num<<'t'&

39、lt;<p->mark;flag=true;p=p->next;while(p!=NULL);outfile.close();cout<<" 保存成功! 保存到 "<<filename<<endl;/ 按姓名查询void inquire(Singer *head,string name)bool flag=true;Singer *p=head;int total=0;if (p=NULL)(cout<<"信息为空!"<<endl;return;)do(if(p->name=name)(if (flag)(cout<<"姓名为"<<name&

温馨提示

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

评论

0/150

提交评论