您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 电视大赛观众投票及排名系统C语言设计
课程设计报告课程名称:数据结构课题:电视大赛观众投票及排名系统(排序应用)专业班级:计算机系网工12102班学号:201217030219姓名:黄婷指导老师:周慧灿日期:2013年1月2日教师评语:成绩评定:指导教师(签名):目录1.课题简介…………………………………………………………32.设计方案………………………………………………………………………43.具体设计………………………………………………………………………43.1程序原理…………………………………………………………………43.2关键代码段源码及分析…………………………………………………54.测试……………………………………………………………………………104.1测试过程中遇到的问题记录……………………………………………134.2测试结果…………………………………………………………………135.总结……………………………………………………………………………15设计体会…………………………………………………………………………15参考文献…………………………………………………………………………151.课题简介在本例中,首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc函数来开辟存放选手信息的顺序表。将选手的编号和姓名依此存入顺序表单元中,观众通过按键进行投票,按’1’为1号选手投票,按’2’为2号选手投票,以此类推,以按’0’作为投票结束标志。投票结束后进行排序,在此采用希尔排序,然后为每个选手计算名次,得票相同的名次也相同,在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。现在要求编写一程序模拟实现上述系统的功能2.设计方案1.总体思路:利用学到的C语言编程知识和编程技巧,完成一个小型管理信息系统的开发,帮助学生熟悉开发一个系统的整个过程:系统分析、程序的设计、编写与调试等过程。2.课程设计内容:.1.输入的形式和输入值的范围:由于本程序主要运用于观众投票以及选手信息的输入,所以输入的形式是数字及字符,范围不限;2.输出的形式:根据观众投票情况输出排名情况3.程序实现的功能:实现观众投票以及选手得分情况的排名4.测试数据:a.输入选手的个数以及每个选手的信息输入“4”“asdf”b.根据菜单输入选号“2”输出“1号a得分是0,排名是0;2号s得分是0,排名是0;3号d得分是0,排名是0;4号f得分是0,排名是0;”c.给选手投票,输入“123333432210”。d.根据菜单输入选号“4”,输出“第1名是3号选手d;第2名是2号选手s;第3名是1号选手a;第4名是4号选手f”“冠军是3号选手d;亚军是2号选手s;季军是1号选手a”3.具体设计原理:为了实现上述程序功能,需要定义顺序表的抽象数据类型如下ADTlist{、数据对象:D={ai|ai∈ElemSet,i=0,1,2,„,n,n≥0}数据关系:R={ai,ai+1|ai,ai+1∈D}基本操作:Initlist_Sq(&L)操作结果:构造一个空的顺序表L.ListInsert_Sq(&L,i,e)初始条件:顺序表L已存在操作结果:将元素e插入到顺序表L的第i位ListDelete_Sq(&L,i,&e)初始条件:顺序表L已存在操作结果:将顺序表L中i位置的元素删除,元素值置入e中返回locate_Sq(L,e)初始条件:顺序表L依存在操作结果:顺序表L中查找元素e并返回其位置2、本程序分为四个模块a、主程序模块:实现对函数的调用;b、顺序表模块:实现选手信息存储;c、投票模块实现观众对选手的投票;d、排序模块:实现对选手的成绩的排序;4.源代码#includestdio.h#includestdlib.h#includestring.h#includemalloc.h#defineN9//假设选手人数不超过9typedefstructnode{intnum;//编号charname[20];//姓名intsum;//票数}info[N+1];info*p;intnumbers;//总共的选手人数FILE*fp;voidtianjia(){inti=1,n;chara[10],b[10];p=(info*)malloc(sizeof(info));if((fp=fopen(xuanshou.txt,r))!=NULL){fscanf(fp,%d%s\n,&p[i]-num,p[i]-name);i++;fclose(fp);printf(读取文件记录成功!\n);}else{printf(不存在记录文件,请输入选手的数量:\n);scanf(%d,&n);getchar();numbers=n;printf(请输入%d名选手的编号和姓名:\n,n);while(n--){scanf(%d%s,&p[i]-num,p[i]-name);getchar();i++;}printf(输入完成!\n);}printf(选手信息如下:\n);printf(编号姓名\n);for(i=1;i=numbers;i++)printf(%d%s\n,p[i]-num,p[i]-name);}voidtoupiao(){inti,n;for(i=1;i=numbers;i++)p[i]-sum=0;printf(投票开始啦!\n);printf(请观众通过按键进行投票,按'1'为1号选手投票);printf(按'2'为2号选手投票,以此类推,以按'0'作为投票结束标记\n);printf(投票现在正式开始:\n);while(1){scanf(%d,&n);getchar();if(n==0)break;while(n1||nnumbers){printf(不存在此号码,请重新输入:);scanf(%d,&n);}p[n]-sum++;}printf(投票完成!\n);printf(投票情况如下:\n);printf(编号姓名票数\n);for(i=1;i=numbers;i++)printf(%d%s%d\n,p[i]-num,p[i]-name,p[i]-sum);}//希尔排序voidshellinsert(info*R,intn,intdk){inti,j;for(i=dk+1;i=n;i++){if(R[i]-sumR[i-dk]-sum){//小于时,需R[i]将插入有序表*R[0]=*R[i];//存储待插入的记录for(j=i-dk;j0&&R[j]-sumR[0]-sum;j=j-dk)*R[j+dk]=*R[j];//记录后移*R[j+dk]=*R[0];//插入到正确位置}}}voidshellsort(info*R,intn){inti;intmm=1;intt[10]={21,19,17,13,11,7,5,3,2,1};//步长因子中除1外没有公因子,且最后一个步长因子必须为1for(i=0;i10;i++)shellinsert(R,n,t[i]);//调用每个步长因子printf(最终排名如下:\n);printf(名次编号姓名票数\n);for(i=1;i=numbers;i++){if(i=2&&p[i]-sump[i-1]-sum)mm++;printf(%d%d%s%d\n,mm,p[i]-num,p[i]-name,p[i]-sum);}}voidmenu(){printf(************************电视大赛观众投票及排名系统***************************\n\n\n);printf(1添加选手信息\n2投票\n3排序\n4退出\n);}voidmain(){charn;while(1){menu();printf(\n请输入您要选择的操作序号,按回车键确认:);scanf(%c,&n);getchar();while(n'1'||n'4'){printf(输入有误,请重新输入:);scanf(%c,&n);getchar();}switch(n-48){case1:tianjia();break;case2:toupiao();break;case3:shellsort(p,numbers);system(pause);break;case4:printf(谢谢使用,再见!);exit(0);}}}.五调试分析1、本程序在编辑过程中遇到不少麻烦例如给字符数组一个一个赋值时,要考虑输入回车的情况,在多次试验及上网查询时加了getchar()这一步骤才得以实现;2、本程序的模块划分简单而合理,在操作方面比较容易,运用顺序表来存储选手信息;3、本实验程序设计中,将程序分为四个模块,使得设计时思路清晰,实现时调试顺利,各模块具有较好的可重用性,确实得到了一次良好的程序设计训练六、测试结果点击运行,进入菜单51、输入“1”,按提示输入“4,再输入选手信息“a,s,d,f”2、输入“2”,输出3、输入“3”输入“1233334322104、输入“4”,输出”。七实验总结1通过这次大实验,对自己所学有了一定的了解;2在对字符赋值时,要注意回车符号。3对一些大型实验,应该分工明确,各尽其职4体会:通过这次的课程设计,我更好的掌握了VisualC++的环境和语法,熟悉了其结构,提高的程序的编写能力和程序分析能力,并学会了用VisualC++来解决实际中的一些简单的问题,了解了程序的设计原则及方法,提高了对实际问题的分析能力,为以后的学习做了一个好的开端。随着计算机软硬件的不断发展,导航系统在客户需求中的应用已成必然。本系统在开发中也是严格按照图书管理的实际情况进行开发的,在开发中,查阅了很多相关的算法资料,巩固了数据结构、C语言和C++方面的知识,同时也学习了新的算法知识。最重要的是在开发过程中,通过不断地学习,不断提高自己编程能力和实际应用能力,还有助于改善自己的逻辑思维能力,这对自己以后对软件的开发提供很大的帮助。另外通过此次课程的设计使我认识到对知识的掌握不全面,即在学习专业知识的同时还需要再加强其他方面知识的学习,因为软件的开发有时候涉及到其他方的知识,只有了解了其他方面的知识才能收集资料,然后用于软件开发。
本文标题:电视大赛观众投票及排名系统C语言设计
链接地址:https://www.777doc.com/doc-4405677 .html