计科班
设计求
1问题描述
参加运动会n学校学校编码12…n赛分成m男子项目w女子项目项目编号男子12…m女子m+1m+2…m+w项目取前五名前三名积分取前五名积分分75321前三名积分分532取前五名前三名学生设定(m<20n<20)
2需求分析
(1)输入项目前三名前五名成绩
(2)统计学校成绩
(3)学校编号学校总分男女团体总分排序输出
(4)学校编号查询学校某项目情况项目编号查询取前三名前五名学校
二概设计
1界面设计
实现运动会分数统计系统设计含菜单项控菜单子程序连接系统项子程序方便户程序系统控菜单运行界面图1示
图1 运动会分数统计系统程序菜单
2存储结构设计
程序采链式存储类型(LNode)存储运动会分数统计系统节点信息运动会分数统计系统链表中结点包括8域:项目编号域(objnum)项目类型(objtype)运动员编号(athnum)运动员姓名(athname[20])学校编号(schnum)校名(schname[30])运动员分数(athscore)指节点指针欲(struct LNode *next)
3系统功设计
系统设置8子功菜单8子功设计描述:
(1)录入项目成绩函数creatLink()实现户选择该功时系统会户输入数运动会分数统计链表
(2)统计学校分数函数schoolScore()实现户选择该功时系统会统计学校分数
(3)学校编号序输出函数printfSchoolNumber()实现户选择该功时系统会学校编号序输出数
(4)学校总分序输出函数printfSchoolScore()实现户选择该功时系统会学校总分序输出数
(5)男女团体总分序输出函数printfManWomanScore()实现户选择该功时系统会男女团体总分序输出数
(6)学校编号查询学校某项目情况函数printfSchoolObject()实现户选择该功时系统会学校编号输出学校某项目情况
(7)项目编号查询取前三名前五名学校函数printfObjectSchool()实现户选择该功时系统会项目编号查询取前三名前五名学校情况
(8)退出exit(0)函数实现
三模块设计
1模块设计
程序包含两模块:程序模块工作区选择模块调关系图2示
程序模块
工作区选择模块
图2 模块调示意图
2系统子程序功设计
系统设置6子程序子程序函数名功说明
(1) LinkList creatLink() 创建链表(录入项目成绩)
(2) int schoolScore(LinkList L) 统计学校总分
(3) void printfSchoolNumber() 学校编号序输出
(4) void printfSchoolScore() 学校总分序输出
(5) void printfManWomanScore(LinkList L 男女团体总分排序输出
(6) void printfSchoolObject(LinkList L) 学校编号查询学校某项目情况
(7) void printfObjectSchool(LinkList L) 项目编号查询取前三名前五名学校
(8) int main() 函数
3函数调关系图
系统6子系统间调关系图3示图中数字函数编号
8 main()
1
2
3
4
5
6
7
图3 系统函数调关系图
四详细设计
1数类型定义
(1)系统采链式结构存储运动会分数统计结点节点定义:
typedef struct LNode{ 链表节点数结构
int objnum
char objtype
int athnum
char athname[20]
int schnum
char schname[30]
int athscore
struct LNode *next
}LNode*LinkList
(2)学校情况数结构结构定义成结构体数组形式定义:
struct School{
int schoolnumber
char schoolname[30]
int schoolscore
}school[30]
2系统子程序详细设计
(1)创建链表(录入项目成绩)子程序设计
LinkList creatLink(){
LinkList L(LinkList)malloc(LEN)
LinkList pq
int numobjnumn
char objtype
L>nextNULL
pL
printf(请输入男女项目总数)
scanf(d&num)
while(num){
printf(请输入项目编号)
scanf(d&objnum)
printf(请输入项目类型)
getchar()
objtypegetchar()
printf(请输入3(代表取前三名)5(代表取前五名))
scanf(d&n)
printf(请名次序输入运动员编号姓名学校编号校名成绩\n)
while(n){
q(LinkList)malloc(LEN)
q>objnumobjnum
q>objtypeobjtype
printf(请输入运动员编号)
scanf(d&q>athnum)
printf(请输入运动员姓名)
getchar()
scanf(sq>athname)
printf(请输入学校编号)
scanf(d&q>schnum)
printf(请输入校名)
getchar()
scanf(sq>schname)
printf(请输入成绩)
scanf(d&q>athscore)
q>nextNULL
p>nextq
pq
}
}
return(L)
}
(2)统计学校总分子程序设计
int schoolScore(LinkList L){
LinkList p
int i
pL>next
for(i0i<20i++){
school[i]schoolscore0
school[i]schoolnumber1
}
while(pNULL){
for(i0i<20i++){
if(school[i]schoolnumber1){
strcpy(school[i]schoolnamep>schname)
school[i]schoolnumberp>schnum
school[i]schoolscorep>athscore
pp>next
break
}
else if(school[i]schoolnumberp>schnum){
school[i]schoolscore+p>athscore
pp>next
break
}
}
}
return 0
}
五测试分析
1创建链表(录入项目成绩)
菜单户输入1回车然输入数结点数回车输入数运行结果图4示
图4 链表建立(录入项目成绩)
2统计学校总分
菜单户输入2回车运行结果图5示
图5 统计学校总分
3学校编号序输出
菜单户输入3回车运行结果图6示
图6 学校编号序输出数
4学校总分序输出
菜单户输入4回车运行结果图7示
图7 学校总分序输出数
5男女团体总分排序输出
菜单户输入5回车运行结果图8示
图8 男女团体总分排序输出数
6学校编号查询学校某项目情况
菜单户输入6回车输入学校编号回车然输入项目编号运行结果图9示
图9 学校编号查询学校某项目情况
6项目编号查询取前三名前五名学校
菜单户输入7回车输入项目编号回车然输入取名规运行结果图10示
图10 项目编号查询取前三名前五名学校
8退出
菜单户输入0回车运行结果图11示
图11 退出程序
六源程序清单
#include
#include
#include
#define NULL 0
#define LEN sizeof(LNode)
typedef struct LNode{ 链表节点数结构
int objnum
char objtype
int athnum
char athname[20]
int schnum
char schname[30]
int athscore
struct LNode *next
}LNode*LinkList
学校情况数结构
struct School{
int schoolnumber
char schoolname[30]
int schoolscore
}school[30]
创建链表
LinkList creatLink(){
LinkList L(LinkList)malloc(LEN)
LinkList pq
int numobjnumn
char objtype
L>nextNULL
pL
printf(请输入男女项目总数)
scanf(d&num)
while(num){
printf(请输入项目编号)
scanf(d&objnum)
printf(请输入项目类型)
getchar()
objtypegetchar()
printf(请输入3(代表取前三名)5(代表取前五名))
scanf(d&n)
printf(请名次序输入运动员编号姓名学校编号校名成绩\n)
while(n){
q(LinkList)malloc(LEN)
q>objnumobjnum
q>objtypeobjtype
printf(请输入运动员编号)
scanf(d&q>athnum)
printf(请输入运动员姓名)
getchar()
scanf(sq>athname)
printf(请输入学校编号)
scanf(d&q>schnum)
printf(请输入校名)
getchar()
scanf(sq>schname)
printf(请输入成绩)
scanf(d&q>athscore)
q>nextNULL
p>nextq
pq
}
}
return(L)
}
统计学校总分
int schoolScore(LinkList L){
LinkList p
int i
pL>next
for(i0i<20i++){
school[i]schoolscore0
school[i]schoolnumber1
}
while(pNULL){
for(i0i<20i++){
if(school[i]schoolnumber1){
strcpy(school[i]schoolnamep>schname)
school[i]schoolnumberp>schnum
school[i]schoolscorep>athscore
pp>next
break
}
else if(school[i]schoolnumberp>schnum){
school[i]schoolscore+p>athscore
pp>next
break
}
}
}
return 0
}
学校编号序输出
void printfSchoolNumber(){
int ijnumflag
printf( 学校编号 校 名 学校总分\n)
for(i0i++){
if(school[i]schoolnumber1)break
numschool[0]schoolnumber
flag0
for(j1j++){
if(school[j]schoolnumber1)break
if(school[j]schoolnumber
printf(8d10s12d\nschool[flag]schoolnumberschool[flag]schoolnameschool[flag]schoolscore)
school[flag]schoolnumber35565
}
}
学校总分序输出
void printfSchoolScore(){
int ijscoflag
printf( 学校编号 校 名 学校总分\n)
for(i0i++){
if(school[i]schoolscore0)break
scoschool[0]schoolscore
flag0
for(j1j++){
if(school[j]schoolscore0)break
if(school[j]schoolscore>sco){scoschool[j]schoolscoreflagj}
}
printf(8d10s12d\nschool[flag]schoolnumberschool[flag]schoolnameschool[flag]schoolscore)
school[flag]schoolscore1
}
}
男女团体总分排序输出
void printfManWomanScore(LinkList L){
LinkList p
int manscore0womanscore0
pL>next
while(pNULL){
if(p>objtype'm')manscore+p>athscore
else womanscore+p>athscore
pp>next
}
printf( 团体 总分\n)
if(manscore>womanscore){
printf( 男生8d\nmanscore)
printf( 女生8d\nwomanscore)
}
else {
printf( 女生8d\nwomanscore)
printf( 男生8d\nmanscore)
}
}
学校编号查询学校某项目情况
void printfSchoolObject(LinkList L){
LinkList p
int scnumobnumsum0
char scname[30]
pL>next
printf(请输入查学校编号)
scanf(d&scnum)
printf(请输入项目编号)
scanf(d&obnum)
while(pNULL){
if(p>schnumscnum&&p>objnumobnum){sum+p>athscorestrcpy(scnamep>schname)}
pp>next
}
printf( 学校编号 校 名 项目编号 获总分\n)
printf(8d10s12d12d\nscnumscnameobnumsum)
}
项目编号查询取前三名前五名学校
void printfObjectSchool(LinkList L){
LinkList p
int obnumni
pL>next
printf(请输入查项目编号)
scanf(d&obnum)
printf(请输入3(前三名)5(前五名))
scanf(d&n)
for(i20i<30i++){
school[i]schoolscore0
school[i]schoolnumber1
}
while(pNULL){
for(i20i<30i++){
if(school[i]schoolnumber1&&p>objnumobnum){
strcpy(school[i]schoolnamep>schname)
school[i]schoolnumberp>schnum
school[i]schoolscorep>athscore
pp>next
break
}
else if(school[i]schoolnumberp>schnum&&p>objnumobnum){
school[i]schoolscore+p>athscore
pp>next
break
}
else{pp>nextbreak}
}
}
printf( 项目编号 学校编号 校 名 学校总分\n)
*i20
while(n){
if(school[i]schoolscore0){ printf(8d12d10s12d\nobnumschool[i]schoolnumberschool[i]schoolnameschool[i]schoolscore)
i++
}
else break
}*
pL>next
while(p>objnumobnum)pp>next
while(n){
printf(8d12d10s12d\nobnump>schnump>schnamep>athscore)
pp>next
}
}
函数
int main(){
LinkList L
int menu
while(menu0){
printf(***********************欢迎运动会分数统计系统***********************\n)
printf( 1录入项目成绩\n)
printf( 2统计学校分数\n)
printf( 3学校编号序输出\n)
printf( 4学校总分序输出\n)
printf( 5男女团体总分序输出\n)
printf( 6学校编号查询学校某项目情况\n)
printf( 7项目编号查询取前三名前五名学校\n)
printf( 0退出系统\n)
printf(***********************欢迎运动会分数统计系统***********************\n)
printf(请选择功07)
scanf(d&menu)
switch(menu){
case 1 LcreatLink()printf(项目成绩录入完毕\n)break
case 2 schoolScore(L)printf(统计学校成绩完毕\n)break
case 3 printfSchoolNumber()break
case 4 schoolScore(L) printfSchoolScore()break
case 5 printfManWomanScore(L)break
case 6 printfSchoolObject(L)break
case 7 printfObjectSchool(L)break
case 0 printf(退出系统成功欢迎\n)exit(0)
default printf(功选项错误请重新输入)
}
printf(\n)
}
return 0
}
七户手册
(1)程序执行文件运动会分数统计系统演示exe
(2)进入程序会进入系统菜单界面户该界面输入子菜单前应数字回车执行相应子菜单命令
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档