电视投票系统综合课程设计
发布时间:2024-11-21
发布时间:2024-11-21
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
综合程序 课程设计说明书
课程设计名称: 综合程序课程设计
课程设计题目: 电视大赛观众投票及排名系统
学 院 名 称: 信息工程学院
专业: 电子信息工程 班级: 120414
学号: 12041412 姓名: 彭涛
评分: 教师: 吴小润
20 15 年 3 月 20 日
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
综合程序课程设计
页2
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
综合程序 课程设计任务书
20 14 -20 15学年 第 2 学期 第 1 周- 2周
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
综合程序课程设计
页4
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
摘要
随着电视机走进了千家万户,电视上最多的是电视广告,电视剧,除此以外就是各类综艺
节目,各类综艺节目层出不穷,为了给带给观众带来更多的欢乐,增强参与感,大多电视大赛都少不了大量观众的互动,现场观众会对大赛的参赛选手进行投票支持,随着形式的发展,传统的记录排列方式已经不能满足需求,智能投票系统的出现,使投票变得轻松简单,功能也更为强大。此次设计采用 Visual C + + 程序设计语言、运用数据结构通过模块化系统来制作一个电视大赛观众投票和排名系统,以此实现选手信息的录入、观众的投票、排名显示的功能。
关键字: 大赛投票 希尔排序 排名系统
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
目录
前言 _____________________________________________________________________________ 7 正文 _____________________________________________________________________________________________ 8 第一章 设计要求 _______________________________________________________________________________ 8 第二章 设计概要 ________________________________________________________________________________ 8 第三章 设计详细 _______________________________________________________________________________ 10
1.系统的组成 _________________________________________________________________________________ 10 2.系统程序框图 ________________________________________________________________________________ 10 3..函数设计 __________________________________________________________________________________ 11
1.添加选手信息 ____________________________________________________________________________ 11 2、投票 ___________________________________________________________________________________ 13 3.希尔排序 ________________________________________________________________________________ 15 4.显示菜单 ________________________________________________________________________________ 17 5.主函数 __________________________________________________________________________________ 17
第四章 运行结果及调试 _________________________________________________________________________ 18 第五章 设计体会 _______________________________________________________________________________ 22 第六章 参考文献 ______________________________________________________________________________ 23 第七章 附件 __________________________________________________________________________________ 24
程序 _________________________________________________________________________________________ 24
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
智能电视投票系统的优越性在于他的高效率和准确率,投票系统采用合理的程序,科学
的算法,人性化的界面,使得观众投票变成一件简单的事情,本次设计通过C语言来编写一个简单实用的投票系统,通过希尔算法进行排列
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
第一章 设计要求
【问题描述】
在电视大赛中,选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,按高到低进行。现在要求编写一程序模拟实现上述系统的功能。 【实现提示】
在本例中,首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc或new函数来开辟存放选手信息的顺序表。将选手的编号和姓名依此存入顺序表单元中,观众通过按键进行投票,按’1’为1号选手投票,按’2’为2号选手投票,以此类推,以按’0’作为投票结束标志。投票结束后进行排序,在此采用希尔排序,然后为每个选手计算名次,得票相同的名次也相同
第二章 设计概要
通过对课题的需求分析,首先想到的是需要初始化(选手信息)、投票、排序、显示输出的模块,退出的功能。 初始化
课题假设选手为1到9,而且选手信息较多,采用结构体定义选手信息,在初始化中完成存储空间的开辟、对选手信息初始化。 投票
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
在投票中,完成投票功能,最初按照提示中的方向来做,但在调试过程中发现每次的投票
环节会比较繁琐,且不适宜大数据的测试,后来在老师提醒下采用随机数来模拟投票这一过程,也更科学,更符合投票这一过程。 排名 在这一环节中到没怎么纠结,按提示中的希尔排序方法来实现。
显示 这一功能的实现比价简单,用printf()函数实现
退出
系统使用完以后需要退出,是不是必要的有待考察,因为可以直接点击右上角的关闭主菜单 为了有一个友好的用户界面,增加菜单提示,方便自己调试和用户的操作。
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
第三章 设计详细
1.系统的组成
2.系统程序框图
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
3..函数设计 1.添加选手信息
通过该函数可以添加选手的信息,使用时首先输入参赛选手的人数(范围为1-9个),选手的信息包括姓名和编号,还有该函数是根据人数通过malloc函数来开辟存放选手信息的顺序表,当使用者添加完成选手的编号和姓名后,该函数进依次将选手的信息存入顺序表单元中。当下次使用,选择该功能时,就会自动读出上次保存的选手的信息,如果选手的信息丢失了,还可以通过该函数重新输入选手的信息,并且自动保存在"xuanshou.txt"的文件名的文本文档中。
void tianjia(){。。
int i=1;
p=(info *)malloc(sizeof(info));
if((fp=fopen("xuanshou.txt", "r"))!=NULL){
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
} else{
fscanf(fp,"%s%s\n",a,b); //读取"编号","姓名"这两个字符串 while(!feof(fp)){ }
fclose(fp); numbers =i-1;
printf("读取文件记录成功!\n");
fscanf(fp,"%d%s\n",&p[i]->num ,p[i]->name ); i++;
printf("不存在记录文件,请输入选手的数量:\n"); int n;
添加选手信息:首先输入参赛选手的人数(范围为1-9个),选手的信息包括姓名和编号,然后根据人数通过malloc函数来开辟存放选手信息的顺序表。最后通过输入将选手的编号和姓名依此存入顺序表单元中。
numbers =n;
scanf("%d",&n);getchar();
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
}
while(n--){ }
scanf("%d%s",&p[i]->num ,p[i]->name ); getchar(); i++;
}
printf("选手信息如下:\n"); printf("编号 姓名\n"); for( i=1;i<= numbers;i++)
printf("%d %s\n",p[i]->num ,p[i]->name ); printf("输入完成!\n");
2、投票
使用者通过该投票函数,可以对选手进行投票,该函数是定义一个p[i]->sum来存放选手的票数,当输入'1'时就为一号选手投票,输入'2'为2号选手投票,以此类推,以输入'0'作为投票结束标记。当输入的数字n(n<1||n>numbers)时,就输出"不存在此号码,请重新输入"
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
void toupiao(){ int i;
for(i=1;i<=numbers ;i++)
p[i]->sum =0;
printf("投票开始啦!\n");
printf("请观众通过按键进行投票,按'1'为1号选手投票");
printf("按'2'为2号选手投票,以此类推,以按'0'作为投票结束标记\n"); printf("投票现在正式开始:\n"); int n;
投票:创建好选手的人数和信息之后,观众就可以通过该投票函数对选手进行投票。 while(1){ scanf("%d",&n);getchar(); if(n==0)
break;
while(n<1||n>numbers){ printf("不存在此号码,请重新输入:"); scanf("%d",&n);
}
p[n]->sum ++;
}
printf("投票完成!\n");
printf("投票情况如下:\n");
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
}
for(i=1;i<=numbers ;i++)
printf("%d %s %d\n",p[i]->num ,p[i]->name ,p[i]->sum );
3.希尔排序
排序:该函数采用希尔排序法对选手的票数进行排序,排序完成后依次按名次、编号、姓名、票数进行输出
void shellinsert(info *R,int n,int dk){ }
int i;
for(i=dk+1;i<=n;i++){ }
if(R[i]->sum >R[i-dk]->sum ){ //小于时,需R[i]将插入有序表 }
*R[0] =*R[i]; //存储待插入的记录
for(int j=i-dk;j>0&&R[j]->sum <R[0]->sum ;j=j-dk)
*R[j+dk]=*R[j]; //记录后移
*R[j+dk]=*R[0]; //插入到正确位置
南昌航空大学电子信息工程课设报告,别照抄,有瑕疵
void shellsort(info *R,int n){
int i;
int t[10]={21,19,17,13,11,7,5,3,2,1}; //步长因子中除1外没有公因子,且最后一
个步长因子必须为1 for(i=0;i<10;i++)
shellinsert(R,n,t[i]); //调用每个步长因子
printf("最终排名如下:\n");
printf("名次 编号 姓名 票数\n"); int mm=1;
for(i=1;i<=numbers;i++){ if(i>=2&&p[i]->sum <p[i-1]->sum )
mm++;
printf("%d %d %s %d\n",mm,p[i]->num ,p[i]->name ,p[i]-
>sum ); }
}