数据结构课程
课程设计
题
院
目
电视大赛观众投票及排名系统
(系)
专 业 班 级
学 生 姓 名
学
号
设 计 地 点
指 导 教 师
起止时间:
数据结构课程设计任务分配
院(系):
课程设计题目
教研室:软件教研室
电视大赛观众投票及排名系统
(1)要求小组成员达到熟练掌握数据结构的基本知识和技
能;
(2)基本掌握算法设计的思路和方法;
(3)能够利用所学的基本知识和技能,解决算法设计问题。
(4)训练用系统的观点和软件开发一般规范进行软件开发,
并在此过程中培养严谨的科学态度和良好的工作作风。初步
掌握软件开发过程的问题分析、系统设计、程序编码、测试
等基本方法和技能。
姓名
学号
承担任务
是否组长
否
否
否
是
课
程
设
计
目
的
小
组
成
员
及
任
务
分
配
1 绪 论
电视大赛观众投票及排名系统是一个运用在各种电视节目中用来进行投票
的一种较为智能的系统。该系统用途广泛例如进行选手的投票和选手的观众的支
持数量统计以及各种竞赛节目都能发挥作用。
1.1 课程设计目的
通过课程设计,加深对《数据结构》课程所学知识的理解,熟练掌握和巩固
C/C++语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指
针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运
算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂
任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握
和巩固三种基本的数据结构(线性结构、树形结构、图形结构)的逻辑结构、存
储结构以及相关运算和应用。
1.2 课程设计意义
在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对
参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,
从而自动产生冠军、亚军和季军。
1.3 问题描述
在该课程设计中,首先输入参赛选手的人数(范围为 1-9 个),然后根据人数
存放选手信息的顺序表。将选手的编号和姓名依此存入顺序表单元中,观众通过
按键进行投票,按“1”为 1 号选手投票,按“2”为 2 号选手投票,以此类推,
以按“0”作为投票结束标志。投票结束后进行排序,在此采用希尔排序,然后
为每个选手计算名次,得票相同的名次也相同。最终输出排名结果,并将结果保
存到文件中。
1
2 需 求 分 析
2.1 数据输入
用户程序经编译组建无误后,运行界面输入选手的数目及其基本信息(编号
和姓名)。
2.2 数据输出
运行界面显示输出名次、编号、姓名、票数四项信息,若票数相同,则显示
并列名次。
2.3 功能
(1) 将选手信息、得票数存储,排序时直接提取,并最终输出结果。
(2) 采用模块化设计,使程序结构清晰明了。
2
3 设 计 思 路
将输入的信息储存在顺序链表中,然后观众投票后对其累加票数,最后利用
希尔排序对选手的得票进行从高到低地排序,显示名次的先后(包含并列名次),
并对最终结果进行保存到文件。如图 3.1 所示
电视大赛观众投
票及排名系统
输
入
选
手
信
息
对
选
手
进
行
投
票
查
看
投
票
信
息
对
选
手
排
序
计
算
名
次
将
数
据
保
存
到
文
件
中
图 3.1 层次图
(1) 本程序分为四个模块:
①主程序模块:实现对函数的调用;
②顺序表模块:实现对选手信息的存储;
③投票模块:实现观众对选手的投票;
④排序模块:实现对选手成绩的排序。
(2) 它们之间的关系为:如图 3.2 所示
主
程
序
模
块
投
票
模
块
顺
序
表
模
块
图 3.2
排
序
模
块
3
4 详 细 设 计
本程序分为五个模块
(1) 主程序模块:如图 4.1 所示
实现对函数的调用;
开始
While(1)
输入 sel
switch(sel)
I
n
i
t
_
s
q
(
)
:
M
e
u
n
(
)
I
n
i
t
(
)
:
M
e
u
n
(
)
V
o
t
e
(
)
:
M
e
u
n
(
)
S
h
e
l
l
s
o
r
t
(
)
:
M
e
u
n
(
)
main( )
结束
图 4.1
4
R
a
n
k
(
)
:
M
e
u
n
(
)
D
i
s
p
l
a
y
(
)
:
M
e
u
n
(
)
S
a
v
e
(
)
:
M
e
u
n
(
)
(2) 顺序表模块:如图 4.2 所示
实现选手信息存储;
(3) 投票模块:如图 4.3 所示
实现观众对选手的投票;
开始
创建 Init()函数
开始
int i,n
调用 Vote()函数进行投票
录入选手信息
结束
图 4.2
Y
i=1
i<=L->
length
Y
N
L->data[i].s
core += 1
i++
N
int i,num
输入 num
num != 0
Y
num<0||nu
m>
N
continue
结束
图 4.3
5
(4) 排序模块: 如图 4.4 所示
实现对选手成绩的排序;
(5) 文件保存模块:如图 4.5 所示
实现对选手信息的保存.
开始
int i,j,dk
调用 Shellsort()函数
比较票数,创建增量序
列进行排序
调用 Rank()函数,
计算选手名次
结束
图 4.4
开始
i, filename[20]
输入 filename
建立新文件
将数据保存的
文件中
结束
图 4.5
6