您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 电视大赛观众投票及排名系统课程设计报告
《软件技术》课程设计电视大赛观众投票及排名系统一目的根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计报告。通过课程设计,加深对《程序设计语言》和《软件技术基础》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握和巩固三种基本的数据结构(线性结构、树形结构、图形结构)的逻辑结构、存储结构以及相关运算和应用。二需求分析1、数据输入用户程序经编译组建无误后,运行界面输入选手的数目及其基本信息(编号和姓名)。2、数据输出运行界面显示输出名次、编号、姓名、票数四项信息,若票数相同,则显示并列名次。3、功能(1)将选手信息、得票数存储,排序时直接提取,并最终输出结果。(2)采用模块化设计,使程序结构清晰明了。三概要设计1、存数结构设计typedefstructnode{intnumber;//存储编号信息charname[20];//存储姓名信息intsum;//存储票数}whl[N];定义结构体类型变量2、定义结构体指针whl*p;3、主函数voidmain(){《软件技术》课程设计定义字符变量n(操作步骤)死循环{WHL();调用WHL函数switch(n-48)多分支结构选择{case1:shuru();break;//shuru函数,实现选手的基本信息输入case2:toupiao();break;//toupiao函数,实现对各选手的投票及计数case3:shellsort(p,numbers);system(pause);break;//shellsort函数,运用希尔排序,实现对投票数的排序并对结果进行输出case4:printf(谢谢使用,再见!);exit(0);//程序结束}}}四详细设计#includestdio.h#includestdlib.h#includestring.h#includemalloc.h#defineN9//假设选手人数不超过9voidWHL()//显示主界面{printf(************************电视大赛观众投票及排名系统***************************\n\n\n);printf(1输入选手信息\n2投票\n3排序及结果\n4退出\n);}typedefstructnode//定义结构体{intnumber;//编号charname[20];//姓名intsum;//票数}whl[N];《软件技术》课程设计whl*p;intnumbers;//总共的选手人数voidshuru()//定义shuru函数,输入选手信息{inti=1,n;p=(whl*)malloc(sizeof(whl));//用malloc函数分配动态内存printf(请输入选手的数量:\n);scanf(%d,&n);getchar();//输入选手数,放入缓冲区numbers=n;//总共的选手数就为nprintf(请输入%d名选手的编号和姓名:\n,n);while(n--)//while循环输入选手信息并存储{scanf(%d%s,&p[i]-number,p[i]-name);getchar();i++;}printf(输入完成!\n);printf(选手信息如下:\n);//在运行界面显示选手信息printf(编号\t姓名\n);for(i=1;i=numbers;i++){printf(%d\t%s\n,p[i]-number,p[i]-name);}}voidtoupiao()//定义toupiao函数{inti,n;//定义整型i为选手编号、n为投票数for(i=1;i=numbers;i++)p[i]-sum=0;//将每一位选手的投票数初值计0printf(投票开始啦!\n);printf(请观众通过按键进行投票,按'1'为1号选手投票);printf(按'2'为2号选手投票,以此类推,以按'0'作为投票结束标记\n);printf(投票现在正式开始:\n);while(1)//为选手投票{scanf(%d,&n);getchar();if(n==0)//当投票为0,投票随即结束break;《软件技术》课程设计while(n1||nnumbers)//若某一位投票数小于1或大于选手总数视为投票失败,要重新输入投票数{printf(不存在此号码,请重新输入:);scanf(%d,&n);}p[n]-sum++;//将每一位选手的投票数计数}printf(投票完成!\n);}voidshellinsert(whl*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(whl*R,intn){inti;intmm=1;intt[10]={21,19,17,13,11,7,5,3,2,1};//步长因子中除1外没有公因子,且最后一个步长因子必须为1,第一趟排序间隔为21for(i=0;i10;i++)shellinsert(R,n,t[i]);//调用每个步长因子printf(最终排名如下:\n);printf(名次\t编号\t姓名\t票数\n);for(i=1;i=numbers;i++)//for循环输出显示最后结果{if(i=2&&p[i]-sump[i-1]-sum)mm++;《软件技术》课程设计printf(%d\t%d\t%s\t%d\n,mm,p[i]-number,p[i]-name,p[i]-sum);}}voidmain()//主函数{charn;//操作数while(1){WHL();//主界面printf(\n请输入您要选择的操作序号,按回车键确认:);scanf(%c,&n);getchar();while(n'1'||n'4')//若输入超过总操作数4或小于1则要重新输入{printf(输入有误,请重新输入:);scanf(%c,&n);getchar();}switch(n-48)//多分支结构,实现操作数对应函数执行,n-48保证与操作数数据类型一致{case1:shuru();break;case2:toupiao();break;case3:shellsort(p,numbers);system(pause);break;case4:printf(谢谢使用,再见!);exit(0);}}}五调试分析1、本程序在编辑过程中遇到不少麻烦例如给字符数组一个一个赋值时,要考虑输入回车的情况,在多次试验及上网查询时加了getchar()这一步骤才得以实现。2、编译组建无错误,但运行时主函数与模块之间连接出现问题经过检查发现是因为大括号位置错误而导致《软件技术》课程设计3、运行显示信息及结果时发现无法自动生成列表形式,经检查及翻阅课本后输入/t解决问题,使程序运行更加美观。六测试结果1.主界面及输入2.投票《软件技术》课程设计3.排序及结果4.并列名次结果显示《软件技术》课程设计七用户使用说明1、用户输入选手信息时,编号必须为1至9,且是整型。2、输入的操作数要正确且与自己想法一致,否则程序无法正常执行。3、投票时数字不能并列,防止出现连续错误,使得操作繁琐。八课程设计总结通过本次课程设计,我在这一过程中有许多感触,充分感受到了模块化设计的优越性,要看清问题,将问题要求理解透彻,在构思要如何实现,要用到哪些函数,要用什么算法,在课程构思中选算法是一个很重要的概念,只有确定用这么算法后才能接下来的工作,将流程图画在纸上,再依次编写代码,在程序设计中,编写代码只是一个方面,调试才是关键。它是一个相当繁琐的过程,有许多新的问题需要被解决,但同时它也是一个比较重要的过程,因为在程序调试过程中,你会学到很多新的东西,从而增加你编程的经验。通过本次实习,巩固了数据结构的相关知识,加深对课内所学的有关数据的逻辑结构和存储表示、数据结构的选择和应用、算法的设计和时空效率分析等课程基本内容的理解,进一步熟悉了VC++编程环境,提高了分析问题、解决实际问题的能力。
本文标题:电视大赛观众投票及排名系统课程设计报告
链接地址:https://www.777doc.com/doc-6909681 .html