沈阳航空工业学院
课程设计任务书
院系:航空宇航工程学院 专业:飞行器制造 班级:84030102 学号:2008040301055 题目:运动会成绩管理系统(1) 一、课程设计时间
2009~10第2学期第1周,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
1录入运动员信息;
2按所参加的项目添加成绩;
3某一项目按成绩排名。
三、课程设计要求
1. 程序质量:
贯彻结构化的程序设计思想。
用户界面友好,功能明确,操作方便。
用户界面中的菜单至少应包括“运动员信息录入”、“按项目添加成绩”、“按成绩排名(某一项目)”、“退出”4项。
代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2. 课程设计说明书:
课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:________ 学生签名:_梁大明______ 五、说明书成绩
六、教师评语
沈 阳 航 院 设 计 用 纸
目录
一、需求分析 ................................................................................................ 1 二、程序流程图 ............................................................................................ 2 三、核心技术的实现说明及相应程序段 .................................................... 5 四、个人总结 .............................................................................................. 18 五、参考文献 .............................................................................................. 19 六、源程序 .................................................................................................. 19
I
沈 阳 航 院 设 计 用 纸
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,其中每一个模块对应一个函数,他们的功能分别是:添加运动员信息函数(add),按项目添加成绩的函数(xiangmu),按项目分类函数(feilei)。在这些函数当中,每个函数的实现严格按照题目的要求。
1、添加运动员信息函数 主要实现程序最初运行时运动员数据的录入以及其后的运行中运动员数据的追加功能;
2、按项目添加成绩的函数 实现的功能是按照项目对运动员的数据记录进行;
3、按项目分类函数 按照题目的具体要求实现的是按项目的递减排序,其中项目相同者名次相同;
每一个运动员记录都包含学号(运动员是学生)、姓名、性别、项目,在程序当中,将运动员记录类型定义为结构体类型,添加以及追加的运动员信息直接写入D盘的chengji.dat文件中,其他函数每次对运动员记录的访问,其数据来源都是chengji.dat文件,这样做不但可以保证运动员数据的一致性,而且可以对运动员数据进行永久保存,保证每次运行程序都可以采用原来的数据
1
沈 阳 航 院 设 计 用 纸
二、程序流程图
1、程序总体结构图
图1程序总体结构图
2、具体功能框图
(1)添加运动员信息函数(add)
2
沈 阳 航 院 设 计 用 纸
图2 添加学生(运动员)数据函数
(2)读取运动员数据reads
3
沈 阳 航 院 设 计 用 纸
图3读取学生(运动员)数据
(3)按项目分类函数(feilei)
4
沈 阳 航 院 设 计 用 纸
`
图4按项目分类函数
三、核心技术的实现说明及相应程序段
本程序主要由三个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他
5
沈 阳 航 院 设 计 用 纸
函数来实现要求的所有功能。在这些函数当中,添加运动员信息函数、按项目添加成绩的函数和按项目分类函数是程序中较为核心的部分,下面分别进行说明。
1、添加运动员信息函数
添加数据分为两种情况,其一是在运动员文件(chengji.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的运动员信息写入该文件当中;其二是在运动员文件(chengji.dat)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下:
void add()
{
FILE *fp;
int n,i,j;
struct ydy stu;
if((fp=fopen(\"D:\\\\ chengji.dat\
6
沈 阳 航 院 设 计 用 纸
{
j=getw(fp);
rewind(fp);
printf(\"*** 请输入要添加运动员的数量,按回车键确认: **\\n\");
scanf(\"%d\
putw(j+n,fp);
fseek(fp,0L,2);
for(i=1;i<=n;i++)
{
printf(\"\\n** 请输入第%d个运动员的学号、姓名、性别、项目,用空格分开,并按回车键确认:**\\n\
7
沈 阳 航 院 设 计 用 纸
scanf(\"%s%s%s%s\
fwrite(&stu,sizeof(struct ydy),1,fp);
}
}
else
{
if((fp=fopen(\"D:\\\\ chengji.dat \
{
printf(\"** 请输入要添加运动员的数量,按回车键确认:**\");
scanf(\"%d\
putw(n,fp);
8
沈 阳 航 院 设 计 用 纸
for(i=1;i<=n;i++)
{
printf(\"\\n*** 请输入第%d个运动员的学号、姓名、性别、项目,用空格分开,并按回车键确认:\\n\
scanf(\"%s%s%s%s\
fwrite(&stu,sizeof(struct ydy),1,fp);
}
}
}
fclose(fp);
}
9
沈 阳 航 院 设 计 用 纸
2、按项目添加成绩的函数
该函数的核心内容是按照所输入的项目进行添加成绩。该函数执行时,首先调用reads函数将文件中的运动员信息读入数组当中,并由用户输入待添加运动员成绩的项目时,而后按照该学号的顺序进行查找,并按照参加了该项目的运动员的学号进行输入成绩。对运动员信息的按照项目添加是在结构体数组中实现的,当所添加项目与结构体中的项目相同时,按照学号依次输入参加该项目运动员的成绩,这些操作完成后,即按照项目添加的运动员的成绩了,并将成绩保存到数组中。在数组中添加运动员的后,还要将更改后的信息重新写回文件当中,以保证数据的一致性。具体程序段如下:
void xiangmu()
{
struct ydy stu[N];FILE *fp;
char x[20];
int i,n,ch;
printf(\"*************************************\\n\");
10
沈 阳 航 院 设 计 用 纸
printf(\"******请输入添加成绩的项目 *********\\n\");
scanf(\"%s\
reads(stu,&n);
if(n==0)
return;
printf(\"*****该项目所有运动员信息如下*****\");
for(i=0;i if(strcmp(stu[i].xiangm,x)==0) { printf(\"\\n** 该运动员的学号%s ***\\n\ 11 沈 阳 航 院 设 计 用 纸 printf(\"*** 请根据学号输入该运动员的成绩 ****\\n\"); scanf(\"%d\ stu[i].chengj=ch; printf(\"\\n%s %s %s %s %d\\n\stu[i].chengj); } } if((fp=fopen(\"d:\\\\ chengji.dat \ { printf(\"打开文件失败!\"); return; 12 沈 阳 航 院 设 计 用 纸 } putw(n,fp); for(i=0;i fclose(fp); } 3、按项目分类函数 对于项目的成绩排序采用的排序算法是冒泡法排序,整个排序过程在结构体数组stu中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。排序函数使学生数据的排列顺序发生了变化,因此也需要队员文件进行更新。具体的程序段如下: Void sort() 13 沈 阳 航 院 设 计 用 纸 { struct ydy stu[N],temp,st[N]; int i,j=0,n,k,count,p; char ch[20]; FILE *fp; printf(\"\\n*** 请输入要排名的项目 ***: 按回车键确认\\n\"); scanf(\"%s\ reads(stu,&n); for(i=0;i if(strcmp(stu[i].xiangm,ch)==0) 14 沈 阳 航 院 设 计 用 纸 { strcpy(st[j].nm,stu[i].nm); strcpy(st[j].nam,stu[i].nam); strcpy(st[j].sex,stu[i].sex); strcpy(st[j].xiangm,stu[i].xiangm); st[j].chengj=stu[i].chengj; j++; } } count=j; for(i=0;i 沈 阳 航 院 设 计 用 纸 { p=i; for(j=i+1;j if(p!=i) { temp.chengj=st[i].chengj; strcpy(temp.nam,st[i].nam); strcpy(temp.nm,st[i].nm); strcpy(temp.xiangm,st[i].xiangm); 16 沈 阳 航 院 设 计 用 纸 strcpy(temp.sex,st[i].sex); st[i].chengj=st[p].chengj; strcpy(st[i].nam,st[p].nam); strcpy(st[i].nm,st[p].nm); strcpy(st[i].xiangm,st[p].xiangm); strcpy(st[i].sex,st[p].sex); st[p].chengj=temp.chengj; strcpy(st[p].nam,st[i].nam); strcpy(st[p].nm,st[i].nm); strcpy(st[p].xiangm,st[i].xiangm); strcpy(st[p].sex,st[i].sex); 17 沈 阳 航 院 设 计 用 纸 } } for(i=0;i printf(\"%s %s %s %s %d \\n\ } } 四、个人总结 经过一周的努力终于将老师所分配的C语言程序设计课题完成。由于是第一次做课设,刚接到题目的时候有些不知所措,但经过老师耐心的指导和同学们的帮助,结合给出的参考模板以及自己以前所学习的C语言的知识,终于写出了属于自己的程序,将程序成功运行的时候心情特别高兴。在编写程序的时候以前所学习的知识不扎实,有很多还是依靠书 18 沈 阳 航 院 设 计 用 纸 本和模板来完成的。在以后的学习中,我一定会加强对程序语言的学习,争取自己能编写出一个服务自己生活的程序。在这次课设中,遇到过很多难题,还要感谢老师及同学们的耐心的帮助。这次课设不仅起到对C语言的复习,同时画流程图时也尝试了WORD软件画图,画图助手软件,发现了好用的画图软件-画图助手软件,将给以后其他学科学习或其他运用带去方便。也学到了很多东西。很高兴! 五、参考文献 1 姚合生等著.C语言程序设计.-北京:清华大学出版社,2008.9 六、源程序 #include #include #include #include #define N 20 19 沈 阳 航 院 设 计 用 纸 struct ydy { char nm[20]; char nam[10]; char sex[20]; char xiangm[20]; int chengj; }; void xiangmu(); void sort(); void add(); 20 沈 阳 航 院 设 计 用 纸 void menu(); void main() { int s; while(1) { menu(); printf(\"\\n********** 请输入你要选择的操作序号**********\\n\"); scanf(\"%d\ switch(s) {case 1:add();break; 21 沈 阳 航 院 设 计 用 纸 case 2:xiangmu();break; case 3:sort();break; case 4:exit(0); default: printf(\"******输入错误,请重新输入 **********\\n\"); } } } void menu() { printf(\"****************运动会成绩管理系统*******************\"); printf(\"\\n 1 请输入运动员信息 \"); 22 沈 阳 航 院 设 计 用 纸 printf(\"\\n 2 请按项目输入成绩 \"); printf(\"\\n 3 某一项目按成绩排名 \"); printf(\"\\n 4 退出 \"); printf(\"\\n***************************************************\"); } void reads(struct ydy stu[N],int *n ) /*读取运动员信息*/ { FILE *fp; int i=0; if((fp=fopen(\"D:\\\\ chengji.dat \ { 23 沈 阳 航 院 设 计 用 纸 printf(\"文件打开失败!\\n\"); return; } else { *n=getw(fp); for(i=0;i<*n;i++) fread(&stu[i],sizeof(struct ydy),1,fp); } fclose(fp); } 24 沈 阳 航 院 设 计 用 纸 void add() { FILE *fp; int n,i,j; struct ydy stu; if((fp=fopen(\"D:\\\\ chengji.dat \ { j=getw(fp); rewind(fp); printf(\"*** 请输入要添加运动员的数量,按回车键确认: **\\n\"); scanf(\"%d\ 25 沈 阳 航 院 设 计 用 纸 putw(j+n,fp); fseek(fp,0L,2); for(i=1;i<=n;i++) { printf(\"\\n** 请输入第%d个运动员的序号、姓名、性别、项目,用空格分开,并按回车键确认:**\\n\ scanf(\"%s%s%s%s\ fwrite(&stu,sizeof(struct ydy),1,fp); } } else 26 沈 阳 航 院 设 计 用 纸 { if((fp=fopen(\"D:\\\\ chengji.dat \ { printf(\"** 请输入要添加运动员的数量,按回车键确认:**\"); scanf(\"%d\ putw(n,fp); for(i=1;i<=n;i++) { printf(\"\\n*** 请输入第%d个运动员的序号、姓名、性别、项目,用空格分开,并按回车键确认:\\n\ scanf(\"%s%s%s%s\ 27 沈 阳 航 院 设 计 用 纸 fwrite(&stu,sizeof(struct ydy),1,fp); } } } fclose(fp); } void sort() { struct ydy stu[N],temp,st[N]; int i,j=0,n,k,count,p; char ch[20]; 28 沈 阳 航 院 设 计 用 纸 FILE *fp; printf(\"\\n*** 请输入要排名的项目 ***: 按回车键确认\\n\"); scanf(\"%s\ reads(stu,&n); for(i=0;i if(strcmp(stu[i].xiangm,ch)==0) { strcpy(st[j].nm,stu[i].nm); strcpy(st[j].nam,stu[i].nam); strcpy(st[j].sex,stu[i].sex); 29 沈 阳 航 院 设 计 用 纸 strcpy(st[j].xiangm,stu[i].xiangm); st[j].chengj=stu[i].chengj; j++; } } count=j; for(i=0;i p=i; for(j=i+1;j 沈 阳 航 院 设 计 用 纸 p=j; if(p!=i) { temp.chengj=st[i].chengj; strcpy(temp.nam,st[i].nam); strcpy(temp.nm,st[i].nm); strcpy(temp.xiangm,st[i].xiangm); strcpy(temp.sex,st[i].sex); st[i].chengj=st[p].chengj; strcpy(st[i].nam,st[p].nam); strcpy(st[i].nm,st[p].nm); 31 沈 阳 航 院 设 计 用 纸 strcpy(st[i].xiangm,st[p].xiangm); strcpy(st[i].sex,st[p].sex); st[p].chengj=temp.chengj; strcpy(st[p].nam,st[i].nam); strcpy(st[p].nm,st[i].nm); strcpy(st[p].xiangm,st[i].xiangm); strcpy(st[p].sex,st[i].sex); } } for(i=0;i 32 沈 阳 航 院 设 计 用 纸 printf(\"%s %s %s %s %d \\n\ } } void xiangmu() { struct ydy stu[N];FILE *fp; char x[20]; int i,n,ch; printf(\"*************************************\\n\"); printf(\"******请输入添加成绩的项目 *********\\n\"); 33 沈 阳 航 院 设 计 用 纸 scanf(\"%s\ reads(stu,&n); if(n==0) return; printf(\"*****该项目所有运动员信息如下*****\"); for(i=0;i if(strcmp(stu[i].xiangm,x)==0) { printf(\"\\n** 该运动员的序号%s ***\\n\ printf(\"*** 请根据学号输入该运动员的成绩 ****\\n\"); 34 沈 阳 航 院 设 计 用 纸 scanf(\"%d\ stu[i].chengj=ch; printf(\"\\n%s %s %s %s %d\\n\stu[i].chengj); } } if((fp=fopen(\"d:\\\\ chengji.dat \ { printf(\"打开文件失败!\"); return; } 35 沈 阳 航 院 设 计 用 纸 putw(n,fp); for(i=0;i fclose(fp); } 36 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务