电视大赛观众投票及排名系统
一 目的
根据所学知识,编写指定题目的C语言程序,并
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
地完成课程设计
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
。通过课程设计,加深对《程序设计语言》和《软件技术基础》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂任务功能分解
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
(自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握和巩固三种基本的数据结构(线性结构、树形结构、图形结构)的逻辑结构、存储结构以及相关运算和应用。
二 需求
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
1、数据输入
用户程序经编译组建无误后,运行界面输入选手的数目及其基本信息(编号和姓名)。
2、数据输出
运行界面显示输出名次、编号、姓名、票数四项信息,若票数相同,则显示并列名次。
3、功能
(1)将选手信息、得票数存储,排序时直接提取,并最终输出结果。
(2)采用模块化设计,使程序结构清晰明了。
三 概要设计
1、存数结构设计
typedef struct node
{
int number; //存储编号信息
char name[20]; //存储姓名信息
int sum; //存储票数
}whl[N];定义结构体类型变量
2、定义结构体指针
whl*p;
3、主函数
void main()
{
定义字符变量n(操作步骤)
死循环
{
WHL();调用WHL函数
switch(n-48)多分支结构选择
{
case 1: shuru();break;//shuru函数,实现选手的基本信息输入
case 2: toupiao();break;//toupiao函数,实现对各选手的投票及计数
case 3: shellsort(p,numbers);system("pause");break;//shellsort函数,运用希尔排序,实现对投票数的排序并对结果进行输出
case 4: printf("谢谢使用,再见!"); exit(0);//程序结束
}
}
}
四 详细设计
#include
#include
#include
#include
#define N 9 //假设选手人数不超过9
void WHL() //显示主界面
{
printf(" ************************电视大赛观众投票及排名系统*************************** \n\n\n");
printf(" 1输入选手信息\n 2投票\n 3排序及结果\n 4退出\n");
}
typedef struct node //定义结构体
{
int number; //编号
char name[20]; //姓名
int sum; //票数
}whl[N];
whl*p;
int numbers;//总共的选手人数
void shuru() //定义shuru函数,输入选手信息
{
int i=1,n;
p=(whl*)malloc(sizeof(whl)); //用malloc函数分配动态内存
printf("请输入选手的数量:\n");
scanf("%d",&n);getchar(); //输入选手数,放入缓冲区
numbers=n;//总共的选手数就为n
printf("请输入%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);}
}
void toupiao() //定义toupiao函数
{
int i,n;//定义整型i为选手编号、n为投票数
for(i=1;i<=numbers;i++)
p[i]->sum =0;//将每一位选手的投票数初值计0
printf("投票开始啦!\n");
printf("请观众通过按键进行投票,按'1'为1号选手投票");
printf("按'2'为2号选手投票,以此类推,以按'0'作为投票结束标记\n");
printf("投票现在正式开始:\n");
while(1) //为选手投票
{
scanf("%d",&n);getchar();
if(n==0) //当投票为0,投票随即结束
break;
while(n<1||n>numbers) //若某一位投票数小于1或大于选手总数视为投票失败,要重新输入投票数
{
printf("不存在此号码,请重新输入:");
scanf("%d",&n);
}
p[n]->sum ++; //将每一位选手的投票数计数
}
printf("投票完成!\n");
}
void shellinsert(whl *R,int n,int dk)//希尔排序
{
int i,j;
for(i=dk+1;i<=n;i++)
{
if(R[i]->sum >R[i-dk]->sum )
{ //小于时,需R[i]将插入有序表
*R[0] =*R[i]; //存储待插入的记录
for(j=i-dk;j>0&&R[j]->sum sum ;j=j-dk)
*R[j+dk]=*R[j]; //记录后移
*R[j+dk]=*R[0]; //插入到正确位置
}
}
}
void shellsort(whl *R,int n)
{
int i;int mm=1;
int t[10]={21,19,17,13,11,7,5,3,2,1}; //步长因子中除1外没有公因子,且最后一个步长因子必须为1,第一趟排序间隔为21
for(i=0;i<10;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]->sum sum )
mm++;
printf("%d\t%d\t%s\t%d\n",mm,p[i]->number ,p[i]->name ,p[i]->sum );
}
}
void main() //主函数
{
char n; //操作数
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保证与操作数数据类型一致
{
case 1: shuru();break;
case 2: toupiao();break;
case 3: shellsort(p,numbers);system("pause");break;
case 4: printf("谢谢使用,再见!"); exit(0);
}
}
}
五 调试分析
1、本程序在编辑过程中遇到不少麻烦例如给字符数组一个一个赋值时,要考虑输入回车的情况,在多次试验及上网查询时加了getchar()这一步骤才得以实现。
2、编译组建无错误,但运行时主函数与模块之间连接出现问题
经过检查发现是因为大括号位置错误而导致
3、运行显示信息及结果时发现无法自动生成列表形式,经检查及翻阅课本后输入/t解决问题,使程序运行更加美观。
六 测试结果
1.主界面及输入
2.投票
3.排序及结果
4.并列名次结果显示
七 用户使用说明
1、用户输入选手信息时,编号必须为1至9,且是整型。
2、输入的操作数要正确且与自己想法一致,否则程序无法正常执行。
3、投票时数字不能并列,防止出现连续错误,使得操作繁琐。
八 课程设计总结
通过本次课程设计,我在这一过程中有许多感触,充分感受到了模块化设计的优越性,要看清问题,将问题要求理解透彻,在构思要如何实现,要用到哪些函数,要用什么算法,在课程构思中选算法是一个很重要的概念,只有确定用这么算法后才能接下来的工作,将
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图画在纸上,再依次编写代码,在程序设计中,编写代码只是一个方面,调试才是关键。它是一个相当繁琐的过程,有许多新的问题需要被解决,但同时它也是一个比较重要的过程,因为在程序调试过程中,你会学到很多新的东西,从而增加你编程的经验。通过本次实习,巩固了数据结构的相关知识,加深对课内所学的有关数据的逻辑结构和存储表示、数据结构的选择和应用、算法的设计和时空效率分析等课程基本内容的理解,进一步熟悉了VC++编程环境,提高了分析问题、解决实际问题的能力。