C语言精品课
 首页 | 课程概况 | 课程教学 | 教师队伍 | 改革与研究 | 教学效果 | 成果展示 | 教学资料 
站内搜索:
 
  课程教学
 理论教学 
 实践教学-课程实践 
 实践教学-实验教学 
 
  实践教学-实验教学    
实践内容
2021-05-08 17:57  

项目概况 

项目一 

1.项目名称: 

歌手打分系统 

2.功能描述 

(1)生成字符界面的主菜单 

 

图-1生成系统主菜单界面 

(2)通过输入菜单项的序号启动相应子菜单模块的功能 

①启动歌手初始数据处理功能  

 

图-2歌手初始数据处理子菜单画面 

初始数据处理模块能实现如下功能: 

能够根据输入的歌手人数创建链表 

可以提示用户输入歌手的数据,运行效果见图-3。 

把输入的数据保存到指定文件singerOriginal.dat,运行效果见图-4。 

把输入的歌手数据按格式输出到屏幕,运行效果见图-5。 

返回到系统主菜单,运行效果见图-6。  

‍ 

 

 

 

 

图-3歌手初始数据输入画面 

图-4歌手初始数据输出到文件画面 

图-5歌手初始数据输出到屏幕画面 

图-6返回系统主菜单画面  

②启动歌手初始数据维护功能 

图-7歌手初始数据维护子菜单画面 

初始数据维护模块能实现如下功能: 

能够把文件中歌手的初始数据读入系统,运行效果见图-8。 

图-8从文件读入歌手初始数据画面 

可以显示读入歌手的数据,运行效果见图-9。 

图-9显示从文件中读入的歌手初始数据画面 

把按输入编号修改歌手的成绩数据,运行效果见图-10。 

图-10修改歌手数据画面 

把修改后的歌手数据重新保存到文件,运行效果见图-11。 

图-11保存修改后的歌手数据画面 

返回到系统主菜单,运行效果见图-12。 

图-12返回系统主菜单画面 

③启动歌手原始数据汇总及排序功能 

图-13歌手初始数据汇总子菜单画面 

歌手原始数据汇总及排序模块包含的功能如下: 

按去掉一个最高分和一个最低分的原则求每位歌手的平均分,运行效果见图-14。 

图-14歌手初始数据汇总画面 

显示汇总后的数据,运行效果见图-15。 

图-15显示歌手汇总数据画面 

把汇总后的数据输出到singerFinal.dat文件,运行效果见图-16。 

图-16把歌手汇总数据输出到文件画面 

按歌手总评分降序排列,运行效果见图-17。 

图-17按歌手总评分降序排序画面 

显示排列的结果,运行效果见图-18。 

图-18按歌手总评分降序排序画面 

把排列的结果保存到文件finalResult.txt,运行效果见图-19。 

图-19把排序结果写到文件画面 

返回系统主菜单,运行效果见图-20。 

图-20返回系统主菜单画面 

3.数据类型描述 

//定义结构体类型来创建链表 

typedef struct singer 

int id; //歌手编号 

char name[20]; //歌手姓名 

float score[9]; //评委打分 

float averScore; //总评成绩(平均分) 

struct singer *next; 

}SINGER; 

//定义结构体数据类型用来对歌手数据进行排序 

typedef struct result 

int id; //歌手编号 

char name[20]; //歌手姓名 

float averScore; //歌手成绩 

}RESULT; RESULT rs[MAX]; //全局数组,用于存储排序数据 

int personN; //全局变量,用于存储歌手人数 

4.模块划分与功能描述 

(1)系统功能模块图 

图-21歌手评分系统功能模块结构图 

图-22歌手评分系统函数调用关系图 

(2)函数及功能描述 

表-1各函数功能信息描述 

模块编号 

模块名称 

函数原型 

功能描述 

void 

void main(void); 

程序主控模块,系统功能导入和退出控制 

menu 

void menu(void); 

生成系统主菜单,通过输入选项调用子菜单功能模块 

subMenu1 

void subMenu1(void); 

生成处理歌手初始数据子菜单,通过输入选项调用子菜单功能模块 

subMenu2 

void subMenu2(void); 

生成歌手数据维护子菜单,通过输入选项调用子菜单功能模块 

subMenu3 

void subMenu3(void); 

生成歌手数据汇总子菜单,通过输入选项调用子菜单功能模块 

creatLink 

SINGER *creatLink(int n); 

创建含n个节点的单链表,返回头地址 

inputData 

void inputData(SINGER *h); 

向以h为头的单链表中输入歌手的数据 

writeOriginal 

void writeData(SINGER *h,int mode); 

把以h为头的单链表中歌手的数据按mode输出到指定文件? mode=1:输出的是原始数据;mode=2:输出求平均分后的数据 

outputData 

void outputData(SINGER *h, int mode); 

把以h为头的单链表中歌手的数据按mode输出到屏幕mode=1:输出的是原始数据;mode=2:输出求平均分后的数据 

10 

accessData 

void accessData(SINGER *h); 

把以h为头的单链表中歌手的数据按去掉一个最高分和一个最低分求平均分处理  

11 

sortData 

void sortData(SINGER *h); 

把以h为头的单链表中歌手的数据先复制编号、姓名、平均分到数组rs[],然后按平均分降序排列 

12 

readData 

void readData(SINGER *h); 

从文件singerOriginal.dat中读取数据,存到h指向的单链表 

13 

search 

SINGER *search(SINGER *h,int id); 

查找编号为id的歌手信息,返回结点地址 

14 

modifyData 

void modifyData(SINGER *h); 

输入编号,修改该歌手的打分(重新输入) 

15 

writeResult 

void writeResult(RESULT *r); 

把排序后的数据(rs[])写到指定文件 

16 

outputResult 

void outputResult(RESULT *r); 

把排序后的数据(rs[])输出到屏幕 

(3)各函数的流程图 

图-23 main函数流程图 

图-24 menu函数流程图 

图-25 subMenu1函数流程图 

图-26 subMenu2函数流程图 

图-27 subMenu3函数流程图 

图-28 creatLink函数流程图 

图-29 inputData函数流程图 

图-30 writeOriginal函数流程图 

图-31 outputData函数流程图 

图-32 accessData函数流程图 

图-33 sortData函数流程图 

图-34 readData函数流程图 

图-35 search函数流程图 

图-36 modifyData函数流程图 

图-37 writeResult函数流程图 

图-38 outputResult函数流程图 

项目二 

1.项目名称: 

十佳运动员评选系统 

2.项目概述 

某市体委与电视台联合举办十佳运动员有奖评选活动: 

(1)体委组织有关人士提出了候选运动员名单,运动员信息情况如表2-1所示: 

表2-1候选运动员名单 

运动员编号 

运动员姓名 

运动员编号 

运动员姓名 

01 

小明 

… 

… 

02 

小翔 

20 

小丹 

运动员编号是两位数字。候选人的信息已经保存在文本文件sporter.txt中。 

(2)电视台在网上设立了投票站供市民投票,选票的格式如表2-2所示:  

表2-2选票格式 

选票编号 

0000001 

投票人姓名 

马琳 

投票人地址 

中山区解放路33号 

所选运动员编号 

01 

05 

06 

10 

11 

13 

16 

17 

18 

20 

选票编号是7位数字。市民投票的数据已经保存在文本文件vote.txt中。 

(3)系统主要功能 

①统计功能 

统计并确定十佳运动员 

统计各个候选人的得票数,并根据得票数排定每次,选出十佳运动员。统计结果要求存储到文本文件sporter10.txt中。 

统计并确定10名幸运者 

根据命中率情况,选出10名获奖的投票者,并排定名次。 

命中率=命中分+次序分。 

命中分:选中十佳中的一个得10分,选中n个得n×10分。 

次序分:选票中的第一个运动员与十佳中的第一名相符(简称选中第一名)得9分,选中第二名得8分,…,选中第十名得0分。 

统计结果要求存储到文本文件voter10.txt中。 

②核对功能 

可以对选票进行浏览和查询。 

(4)要求 

①为用户操作提供选择菜单,菜单的样式如下所示:  

************************************************* 

*-------------------系统主菜单------------------* 

************************************************* 

*-------1.统计功能-----------------------------* 

*-------2.核对选票-----------------------------* 

*-------3.退出系统-----------------------------* 

************************************************* 

请输入选项号(1-3):[ ] 

************************************************* 

*-------------------核对选票模块----------------* 

************************************************* 

*-------1.浏览选票-----------------------------* 

*-------2.查询选票-----------------------------* 

*-------3.返回主菜单---------------------------* 

************************************************* 

请输入选项号(1-3):[ ] 

②主函数是控制部分,应尽量简单。 

3.系统运行示例 

(1)启动系统主菜单模块 

 

图3-1系统主菜单 

(2)启动统计功能子模块 

统计功能子模块实现的功能如下: 

显示所有运动员的数据,运行效果见图3-2。 

统计十佳运动员数据。 

把十佳运动员数据输出到文件sporter10.txt。 

把十佳运动员数据显示到屏幕,运行效果见图3-3。 

图3-2显示运动员数据画面 

图3-3显示十佳运动员数据画面 

统计每位投票者的得分,评出十位幸运投票者。 

把每位投票者的得分数据写入到文件hit.txt。 

把十位幸运投票者的数据写到文件voter10.txt。 

把十位幸运投票者的数据显示到屏幕,运行效果见图3-4。 

图3-4显示十位幸运投票者画面 

(3)启动核对选票功能子模块 

核对选票功能子模块的运行效果见图3-5,该模块实现的功能如下: 

显示所有选票的数据,运行效果见图3-6。  

 

 

图3-5核对选票子菜单 

图3-6浏览选票运行画面 

根据票号,查询选票信息,运行效果见图3-7。 

图3-7查询选票运行画面 

4.数据类型描述 

#define N 20 //宏定义-候选运动员最大数 

#define M 50 //宏定义-选票最大数 extern int sptNum; //外部全局变量——存储实际候选人数 

extern int votNum; //外部全局变量——存储实际选票数 //运动员数据定义 

struct sporter 

int num; /*运动员编号*/ 

char name[20]; /*运动员姓名*/ 

int voteNum; /*运动员的得票数*/ 

}spt[N]; //选票数据定义 

struct vote 

char id[8]; /*选票编号*/ 

char name[20]; /*投票者姓名*/ 

char address[20]; /*投票者地址*/ 

int v[10]; /*投票者投出的十佳运动员编号*/ 

int orderScore; /*投票者所得次序分*/ 

int hitScore; /*投票者所得命中分*/ 

int totalScore; /*投票者所得总分*/ 

}vot[M]; 

5.模块划分与功能描述 

(1)系统功能模块图 

图5-1一级功能模块图 

图5-2二级功能模块图 

图5-3三级功能模块图 

图5-4函数间调用关系图 

(2)函数及功能描述  

表5-1函数与功能描述 

源文件 

包含的函数 

函数原型 

功能描述> 

流程图 

main.c 

main 

void main(void) 

主导引程序,调用systemMenu()函数,实现全部功能 

见页-2 

common.c 

systemMenu 

void systemMenu(void) 

生成系统主菜单,供用户选择,并具有简单纠错能力 

见页-2 

subMenu 

void subMenu(void) 

生成核对选票子菜单,供用户选择,并具有简单纠错能力 

见页-3 

rollBack 

void rollBack(void) 

在核对选票中,每次操作结束后提供选项以控制返回主菜单 

见页-3 

browseVote.c 

browseVote 

void browseVotes(void) 

读选票文件,显示选票,调用rollBack函数控制返回上级菜单  

见页-4 

printVoteN 

void printVoteN(int n) 

把n张选票的信息输出到屏幕 

见页-4 

searchVote.c 

searchVote 

void searchVote(void) 

输入选票号,查询该选票是否存在,并显示相关信息 

见页-5 

readFiles.c 

loadSporter 

int loadSporter() 

加载运动员数据文件,获得运动员人数 

见页-6 

printSptN 

void printSptN(int n) 

输出运动员数据 

见页-7 

loadVote 

int loadVote(void) 

加载选票数据文件,获得选票数 

见页-8 

calTenSporters.c 

statisticVote 

void statisticVote(int n) 

对n张选票进行统计,得出每个2候选人的得票数 

见页-9 

orderByVote 

void orderByVote(int m) 

根据得票数对运动员数据进行排序 

见页-10 

saveSpt10 

int saveSpt10(void) 

把10佳运动员数据保存到文件 

见页-11 

printSpt10 

void printSpt10(void) 

显示10佳运动员数据 

见页-12 

calTenVoter.c 

statisticHit 

int statisticHit(int n) 

统计n张选票的命中情况得分,并把得分写到文件hit.txt 

见页-13 

sortVote 

void sortVote(int m) 

对m张选票按得分进行降序排列 

见页-14 

printVot10 

void printVot10(void) 

显示10位幸运投票者数据 

见页-15 

saveVot10 

int saveVot10(void) 

把10位幸运投票者的数据保存到文件 

见页-15 

(3)各主要函数的流程图  

图5-5 main函数流程图 

图5-6 systemMenu函数流程图 

图5-7subMenu函数流程图 

图5-8 roolBack函数流程图 

图5-9 searchVote函数流程图 

图5-10 loadSporter函数流程图 

图5-11 printSptN函数流程图 

图5-12 LoadVote函数流程图 

图5-12 staticVote函数流程图 

图5-13 orderByVote函数流程图 

图5-14 saveSpt10函数流程图 

图5-15 printSpt10函数流程图 

图5-16 stasticHit函数流程图 

图5-17 sortVote函数流程图 

图5-18 saveVote10函数流程图 

图5-19 printVote10函数流程图 

关闭窗口
城市学院首页 | 学院精品课程 | 工程实践中心 | 大连理工大学首页 | 全国软件设计大赛 | CSDN.NET | 中国IT实验室

高校学院网站  版权所有