芙蓉学院
数据结构课程设计
目:
题
级:
班
名:
姓
号:
学
同组人员:
起迄日期:
设计地点:
指导教师:
评阅意见:
成绩评定:
评阅人:
日期:
完成日期:2019 年 1 月
1
目录
1、具体任务………………………………………………(3)
二、评语(教师填写)………………………………………(3)
三、软件环境………………………………………………(3)
四、算法设计思想及流程图………………………………(4)
1、算法设计
2、模块功能介绍
3、主程序浏览图
五、源代码………………………………………………(5-10)
六、运行结果…………………………………………(11-12)
七、收获及体会…………………………………………(13)
八、参考文献………………………………………………(13)
2
一、 具体任务:
学生运动会成绩数据库系统记录某校运动会上全部运动项目,各系获得的分数及排名的情
况,包括 50、100、200,400,1500 米,跳高,跳远,标枪,铅球铁饼等。进入系统后可
以输入和修改某个项目的结果情况,可以按各系院编号输出总分;按总分排序;按男团体总
分排序 ;按系院编号查询;按项目编号查询;按女团体总分排序。
分步实施:
1) 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2) 完成最低要求:建立一个文件,包括某个系,5 个项目的得分情况,能对文件中的信息
进行扩充(追加),修改和删除;
3) 进一步要求:完成对多个系,多个项目的得分排序,以及完成系统查询功能。有兴趣的
同学可以自己扩充系统功能。
键盘输入:系院数目,男子项目数女子项目数,(每项目取前三名,分别为 10,5,2 分)
要求:1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4) 要提供程序测试方案
5) 程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价
值的。
二、 评语(教师填写)
三、软件环境
Microsoft Visual C++ 6.0
四、算法设计思想及流程图
1、算法设计
2
上图即为运动会设计的表格,据此表格即可定义 Academy 和 score 两个结构体,定义且完成
数据输入操作后在对其添加系院和项目、更改数据、查询总分、按(男子、女子、系院)总
分排名等操作
模块功能介绍
1)Push 添加学院或项目以及获得的成绩
2)2)Correct 更改某一个系院项目男女的分数
3)Addupscore 核算各个系院的总分
4)Sort
核算各个系院的总分并按分数高低排名
3
5)Malesort 核算各个系院的男子项目总分并按分数高低排名
6)Femalesort 核算各个系院的女子项目总分并按分数高低排名
7)Acasearch
查找特定系院所有项目的分数
8)Itemsearch 查找特定项目的所有系院分数
3、主程序浏览图
4
五、源代码
// 运动会成绩.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#include
#include
#define Maxnum 50
typedef struct /*包含学院名称和编号的代表学院的结构体*/
{
char name[10];
int num;
}Academy;
typedef struct /*分数结构体*/
{
Academy Aca[Maxnum];
struct
{
int male;
int female;
}score[Maxnum][Maxnum];
int m,n,b,g;
}Score;
typedef struct /*交换变量结构体*/
{
int score;
char name[20];
}change;
void Mainmenu(Score *p); /*主菜单*/
void Push(Score *p)
{
int flag,i,j,f,b=0,g=0;
printf("please put in flag and number:\n");
scanf("%d %d",&flag,&f);
if(flag==0)
{
printf("请输入新增的学院分数\n");
for(i=p->m+1;i<=p->m+f;i++)
for(j=1;j<=p->n;j++)
scanf("%d%d",&p->score[i][j].male,&p->score[i][j].female);
printf("请输入新的学院名字和编号:\n");
for(i=p->m+1;i<=p->m+f;i++)
5
scanf("%s %d",p->Aca[i].name,&p->Aca[i].num);
p->m+=f;
}
if(flag==1)
{
printf("请输入新增的项目分数\n");
for(j=p->n ;j
n+f;j++)
{
for(i=0;im;i++)
scanf("%d %d",&p->score[i][j].male,&p->score[i][j].female);
if(p->score[i][j].male!=-1)b++;
if(p->score[i][j].female!=-1)g++;
}
p->n+=f;
p->b+=b;
p->g+=g;
}
Mainmenu(p);
}
void Correct(Score *p)/*更改某一个系院项目的分数*/
{
int i,j,sex,f;
printf("请输入学院编号,项目编号:\n");
scanf("%d %d",&i,&j);
printf("输入修改后的成绩\n");
scanf("%d",&f);
printf("1 修改男子得分\n"
"0 修改女子得分\n");
scanf("%d",&sex);
if(sex==0)p->score[i][j].male=f;
if(sex==1)p->score[i][j].female=f;
Mainmenu(p);
}
void Addupscore(Score *p) /*核算各个系院的总分*/
{
int i,j,f;
printf("各个系院的总分\n");
for(i=1;i<=p->m;i++)
{
f=0;
for(j=1;j<=p->n;j++)
{
if(p->score[i][j].male!=-1) f=p->score[i][j].male+f;
if(p->score[i][j].female!=-1) f=p->score[i][j].female+f;
6
}
printf("%s%10d\n",p->Aca[i].name,f);
}
Mainmenu(p);
}
void Sort(Score *p) /*核算各个系院的总分*/
{
int i,j;
change a[Maxnum],t;
for(i=1;i<=p->m;i++)
{
a[i].score=0;
strcpy(a[i].name,p->Aca[i].name);
for(j=1;j<=p->n;j++)
{
if(p->score[i][j].male!=-1)a[i].score+=p->score[i][j].male;
if(p->score[i][j].female!=-1)a[i].score+=p->score[i][j].female;
}
}
for(i=1;i<=p->m-1;i++)
for(j=i+1;j<=p->m;j++)
if(a[i].score
m;i++)
printf("%s:%10d\n",a[i].name,a[i].score);
Mainmenu(p);
}
void Malesort(Score *p)/*核算各个系院的男子项目总分并按分数高低排名*/
{
int i,j;
change a[Maxnum],t;
for(i=1;i<=p->m;i++)
{
a[i].score=0;
strcpy(a[i].name,p->Aca[i].name);
for(j=1;j<=p->n;j++)
{
if(p->score[i][j].male!=-1) a[i].score+=p->score[i][j].male;
}
}
7