c语言学校运动会管理系统课设报告.doc

上传人:仙人指路1688 文档编号:2384640 上传时间:2023-02-17 格式:DOC 页数:40 大小:386KB
返回 下载 相关 举报
c语言学校运动会管理系统课设报告.doc_第1页
第1页 / 共40页
c语言学校运动会管理系统课设报告.doc_第2页
第2页 / 共40页
c语言学校运动会管理系统课设报告.doc_第3页
第3页 / 共40页
c语言学校运动会管理系统课设报告.doc_第4页
第4页 / 共40页
c语言学校运动会管理系统课设报告.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《c语言学校运动会管理系统课设报告.doc》由会员分享,可在线阅读,更多相关《c语言学校运动会管理系统课设报告.doc(40页珍藏版)》请在三一办公上搜索。

1、HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计课程设计报告课设题目: 学校运动会管理系统 专 业: 电子信息工程 班 级: T1223-14 姓 名: 王松 成 绩: 完成日期: 2013年6月7日2012年6月20日 指导教师: 张吴波 目 录目 录1.课程设计目的22.需求分析22.1要求22.2任务描述22.3运行环境32.4开发工具33.总体设计33.1系统流设计33.2系统模块设计44.详细设计54.1数据结构设计54.2模块接口设计64.3 以下是几个主要模块的流程图:75.运行结果115.1主菜单界面:115.2图书信息查询界面:

2、125.3:图书销售界面145.4图书信息整体浏览界面:195.5图书信息删除界面:195.6图书信息保存界面:225.7 退出程序:235.8图书信息新建界面:235.9修改密码236.程序调试与测试236.1程序调试236.2程序测试277.问题与不足308.建议319.编程体会3110.程序源代码:3111.参考文献5612.用户使用手册571.课程设计目的1) 通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。2) 通过课程设计,进一步掌握C语言中重要的数据结构。掌握并熟练运用指针、链表、结构体、文件等数据结构。3) 通过课程设计,提高程序开发

3、能力,能运用合理的控制流编写清晰高效的程序。4) 通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。5) 通过课程设计,加强了自己的程序分析能力。6) C语言程序设计课程设计的主要目的是培养学生在C语言程序设计课程学习后,综合运用C语言程序设计课程所学到的知识,编写C程序解决实际问题的能力,以及严谨的工作态度和良好的程序设计习惯。7) 通过本课程设计的训练,学生应该能够了解程序设计的基本开发过程,掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。能灵活应用,初步具备运用C解决实际问题

4、的能力。8) C语言课程设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C语言程序及编写设计报告等过程。2.需求分析2.1要求1) 遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。2) 运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。3) 学会利用数组、结构体、链表进行相关信息表示。4) 功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5) 各主

5、要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。6) 所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清晰。7) 界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。8) 程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。9) 学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。10) 掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。11) C语言课程设计报告的内容反应实际设计过程,且符合格式要求,无抄袭现象。2.2任务描述此系统以学校运动会

6、为背景,支持运动会管理人员对获奖人员信息进行新建、查询、以及对相应项目,院系获奖情况整体列表浏览,亦可实现保存。具体功能实现如下:1)运动员信息载入:管理人员从键盘输入获奖运动员信息,以便操作者可以实现相关需求。3)获奖信息整体浏览功能:实现对所有院系获奖信息的整体浏览,使运动会管理人员对获奖信息信息有一个整体的了解。4)单独院系获奖信息查询功能:实现对所指定院系查询其成员获奖情况。5)单独项目获奖信息查询功能:实现对所指定项目查询所有获奖成员信息。2.3运行环境1) WindowsXP/7系统2) VC+6.0编译环境2.4开发工具C语言3.总体设计3.1系统流设计本系统的功能模块如图1所示

7、,主要有以下模块:课程名称界面主菜单界面程序欢迎界面题目信息查询获奖运动员信息新建所有系部整体浏览系部获奖信息浏览项目获奖浏览信息退出程序 输出本课题题目要求退出此时进行的程序查询相应项目获奖名单查询相应系部获奖名单按书号查询查询所有系部获奖名单按书号查询输入所有获奖运动员名单按书号查询图1系统功能模块图3.2系统模块设计1) 系统欢迎界面:构造函数void welcome(),实现欢迎使用学校运动会管理系统,作者和指导老师的显示。2) 课程名称界面:构造函数void printtimu (),实现软件题目的显示。3) 主菜单界面:构造函数void menu_select (),实现系统主菜单

8、的显示。4) 获奖运动员信息新建:构造函数void shuru(),实现新建获奖运动员信息。5) 系部获奖信息查询:构造函数void xibu(),实现查询所选系部获奖信息查询。6) 项目获奖信息查询:构造函数void xiangmu(),实现查询所选项目获奖信息查询。7) 获奖运动员信息整体浏览:构造函数void shuchu(),显示所有系部获奖人员情况。8) 导入链表信息到系部结构体:构造函数void daoruxi(),导入获奖运动员分数到系部。9) 判断所输入信息合理性:构造函数int panduan(),判断新输入的获奖信息是否与之前输入的信息有冲突。10) 对用户的提示函数:构造

9、函数void TiShi(),提示学校院系及运动项目设置。11) 退出系统:构造函数void exit0(),实现退出系统。4.详细设计4.1数据结构设计根据系统要求,系统中需要保存的数据信息,其结构如下:数据项名称数据项系统表示数据类型数据长度备注系部编号xinumInt4项目编号munumInt4运动员姓名NameChar30获奖名次MCInt 4为了充分利用内存空间和实现不受限制的新建、载入获奖运动员信息,采用链表的结构保存获奖运动员信息,在新建一位运动员信息时,创建一个运动员信息的节点,将其插入到链表中,示意图如下。 运动员信息1运动员信息2通讯录信息1221运动员信息3运动员信息4为

10、此,需声明一个类型为struct student的结构体,其成员为图书的基本信息。然后通过对指针、链表、文件等数据结构的操作,实现对运动员信息的新建、查询、整体浏览、比较、保存等一系列操作。其中,结构体定义如下:struct studentint xinum;char name30;int munum;int MC;int score;struct student * next; 4.2模块接口设计1) 所有函数模块声明如下:2) void welcome();/欢迎界面/3) void printtimu();/本题题目要求/4) int menu_select();/主菜单/5) void

11、 shuru();/输入获奖运动员信息/6) void shuchu();/按照比赛成绩从高到底输出系部和其比赛成绩/7) void xibu();/查询系部获奖情况/8) void xiangmu();/查询项目获奖情况/9) void TiShi(); /提示题目所需数据/10) void daoruxi();/导入获奖运动员成绩到系部/11) int panduan();/判断所输入信息是否有错误/12) void exit0();/退出/13) 并定义 个全局变量:int writeinfo_flag=0;/*运动员信息是否保存标志*/struct student *head=NULL

12、, *p1,*p2,*p3;/*用于新建和导入运动员信息*/14) 主要模块的实现系统以主函数int main()为入口,首先通过调用void welcome()显示欢迎界面,指导老师以及作者,然后调用void TiShi()函数显示学校院系及运动项目设置情况,并通过switch(menu_select(),显示主菜单,并利用void menu_select()接受用户的返回值返回个主函数,再调用相关的函数进入到下一级菜单进行相关操作。4.3 以下是几个主要模块的流程图:题目要求1) 主函数:主函数 调用void TiShi();、void welcome()、void loadrec() 调

13、用Void menu_select()接受int menu()的返回值N是否合法 YYN是否为0调用相关函数退出系统图2 主函数5.运行结果5.1欢迎界面:图6 欢迎界面任意键自动进入系统界面。5.2主菜单界面:图7主菜单界面5.3题目输出界面:图8 题目输出界面5.4输入获奖运动员信息界面 图9 图10 输入运动员信息,并选择是否输入完全5.5顺序输出各个系部成绩界面:图11 5.6输出指定系部获奖情况界面: 图12 选择指定系部图13指定系部获奖情况界面5.7输出指定系部获奖情况界面:图14选择指定项目 图15 指定项目获奖情况6.程序调试与测试6.1程序调试(1) 各模块分别调试过程及结

14、果。(1)程序欢迎界面和程序名称界面还有题目显示做起来比较容易,做起来没出错。(2)主菜单界面我是按照老师给的一个参考程序做的,后来自己又优化了一下,没有出问题。(3)学校院系设置信息提示函数void TiShi()。提示学校院系,及运动项目设置情况。(4)输入获奖运动员信息函数void shuru()。本题最难的地方,开始定义三个学生结构体指针,利用链表输入运动员信息,在做的过程遇到最多的问题是内存问题,因为指针总是越界。所以最后链表建立的也有问题,经过逐步调试,发现程序在调用panduan()判断新输的信息是否与先前信息有矛盾的情况时把指针释放了。经过改正,程序良好运行。(5)程序中还定义

15、了void daoruxi();int panduan();两个函数,void daoruxi()是把成功输入到链表里的数据部分导入到系部结构体中,方便后面对系部获奖情况的查询。int panduan()是为了判断新输的信息是否与先前信息有矛盾的情况,并且返回值给shuru()函数,进行重新输入或者接着往后输入的选择。(6) 查询系部获奖情况函数void xibu();通过选择此功能可以进行单个查询每一个系部所有获奖运动员的姓名,参加项目,在此项目中获奖名次等信息。(7)查询项目获奖情况函数void xiangmu();通过选择此功能可以进行单个查询每一个项目所有获奖运动员的姓名,所属院系,在

16、此项目中获奖名次信息。(8)退出void exit0(),此功能可以直接退出软件。(10)新建获奖运动员信息后,便不能在进行补充。 (2) 集成调试过程及结果。1.在各模块协调操作时,因为好几个都需要得到头指针(head),为此我将保存导入运动员信息的链表中需要用到的指针定义成全局的,这样便于操作,可防止头指针传错。2.为了使在退出和记录保存函数中,在不同的情况下给出不同的提示信息,我定义了一个标志性全局变量int writeinfo_flag=0;/*信息变动标志*/。在可使运动员信息变动的函数中,当书库信息变动成功时,就执行save_flag=1,这样在退出或保存过程中就知道书库信息是否变

17、动过,以便实现相应功能。同时定义全局变量 n ,可以提示我们输入到第几个成绩,在判断函数中也起到了很大的作用,限定判断次数,不至于是判断出错。3.在输入信息时,用两个定义的全局变量指针p1,p2依次交替前进并把数据缓存到第三个指针p3中。在输入时模块同时进行数据的合法性判断,以及信息的和理性判断,当全部满足题目要求是,才输入下一个数据,如果数据不合法,软件则会提醒数据有误,并返回重新输入此数据。 4.在显示所有的系部成绩时,先调用导入函数把信息导入到开始定义的系部数组 中,然后再利用冒泡排序法,对系部成绩进行大小比较,并按从大到小的顺序交换系部成绩及西部名称。5导入运动员信息时,定义一个节点,

18、输入数据后在定义新的节点,链接新节点头与旧结点的尾,这样就连接起来了。(1)head=(struct student *)malloc(LEN);/*开辟一个新单元*/ head-next=NULL;(2)p2=(struct student *)malloc(LEN);/*开辟一个新单元*/p1-next=p2;连接起两个节点p3=p1;p1=p2;p1-next =NULL; (3) 功能调试过程及结果。1首先根据题目,新建一个文件,执行程序,看程序是否能够正常读取文件。读取正常。2分别执行不同的函数看,是否能正常运行。各个程序单独执行正常。3在运行一次的情况下,连续执行不同函数,检查是否

19、有逻辑错误。4在执行了相应的函数后,对比文件,看文件是否按程序操作的结果,正确改变了。5将文件删除,看程序是否会给出正确提示,并且限制某些没有文件不能实现的功能。6将文件置空,看是否会给出相应提示以及程序是否运行正常。6.2程序测试各模块测试用例数据及结果与文件结果一致7.问题与不足(1) 需求分析中存在的问题和分析:该程序不支持插入新的运动员信息,与实际不符。不能完全识别操作者输入的错误信息。(2) 概要设计中存在的问题和分析:全局标志性变量用的太多,在主体函数中定义变量时,容易与全局标志性产生混淆。全局指针也用的太多,虽然这样避免了传指针出错,但没有锻炼我们传参数的能力。(3) 代码编制中

20、存在的问题和分析:程序中的模块函数定义的还不够好,有的模块比较大,看起来不太清晰明了,没有较强的通用性。8.建议课设题目有些描述不清楚但是可能的情况有很多,也有些有不合理的地方,建议老师能花点时间将课设题目中有些不合理的地方改正一下。时间安排上,感觉虽然面临考试,但是极强的锻炼了自己的能力,感觉比较好,每个人都充分考虑了考虑程序中的问题,对自己的编程能力的提高有好处。 9.编程体会刚开始准备编代码时,先大致看了下老师给的题目,因为自己随着方面比较感兴趣吧,学的挺有意思,开始我知道难点在链表的建立那块,其他的没有感觉到吃力,虽然也会经常出现问题,但都是自己马虎,或者是时间长了,没有考虑到的原因。

21、当做链表那一块时,感觉压力陡增啊,我把自己输入的数据走了一圈又一圈,可是输出就是有问题,问了好多人都看不出来那里有毛病,后来老师给指出了一个关键地方,问题才解决。我现在想假如那个问题解决不了,我的课设肯定做不出来了。现在感觉挺幸运。做完课设学到了很多编程方面的技巧,比喻在编写程序时,不要将整个程序放在一起检查语法错误,那样非常难操作,可以保留主函数,然后将主体函数一个个的检查错误,这样便于错误的查找和改正。10.程序源代码:#include #include #include #include #include #include #include #define LEN sizeof(stru

22、ct student)typedef struct xibuint num;char name20;int chengji;XI;typedef struct xiangmuint num;char name20;MU;struct studentint xinum;char name30;int munum;int MC;int score;struct student * next;XI xi5=1,电信学院,0,2,汽车学院,0,3,材工学院,0,4,机械学院,0,5,英语学院,0;MU mu10=1,100米,2,200米,3,400米,4,800米,5,1500米,6,跳高,7,跳远

23、,8,铅球,9,三级跳,10,4x100接力;int n=0;void welcome();/欢迎界面/void printtimu();/本题题目要求/int menu_select();/主菜单/void shuru();/输入获奖运动员信息/void shuchu();/按照比赛成绩从高到底输出系部和其比赛成绩/void xibu();/查询系部获奖情况/void xiangmu();/查询项目获奖情况/void TiShi(); /提示题目所需数据/void daoruxi();/导入获奖运动员成绩到系部/int panduan();/判断所输入信息是否有错误/void exit0()

24、;/退出/struct student *head=NULL,*p1,*p2,*p3;/*定义结构体指针head 为头指针p1 为输入数据缓存空间指针p2 为尾指针p3*/*运动员记录保存标志全局变量*/intwriteinfo_flag=0;/*主函数*/int main()system(color F2);welcome();TiShi();for(;)switch(menu_select()case 1: system(cls); printtimu();break;case 2: system(cls); shuru();break;case 3: system(cls); shuch

25、u();break;case 4: system(cls); xibu();break; case 5: system(cls); xiangmu();break;case 0: system(cls); exit0();return 0;default :getchar();printf(n 选择错误,请正确输入你的选择(05),:n);printf(n 按任意键返回.n);getchar();getchar();system(cls);/*清屏*/ return 0;/定义数据/void TiShi()int i=0,m=0;printf(nnt 请按学校院系及奖项设置输入获奖人员,院系及

26、奖项设置如下nn);printf(nttt编号 系部 n);while(i5)printf(ttt %d %sn,xii.num,xii.name);i+;printf(nnttt编号 项目 n);while(mnext=NULL;p1=head;don+;dosystem(cls);printf(nnnnnnnt请输入第%d个获奖运动员的系部编号、运动员姓名、运动项目编号、获取名次n,n);fflush(stdin);scanf(%d%s%d%d,&p1-xinum,p1-name,&p1-munum,&p1-MC);while(p1-xinum5|p1-xinummunum10|p1-mu

27、numMCMC5)printf(您输入的信息不合法或者项目不存在,请检查后按任意键返回重新输入n);getchar();getchar();system(cls);printf(nnnnnnnt请输入第%d个获奖学生的系部编号、运动员姓名、运动项目编号、获取名次n,n);fflush(stdin);scanf(%d%s%d%d,&p1-xinum,p1-name,&p1-munum,&p1-MC);switch(p1-MC)case 1: p1-score =7;break;case 2: p1-score =5;break;case 3: p1-score =3;break; case 4:

28、 p1-score =2;break;case 5: p1-score =1;break;if(writeinfo_flag=1)i=panduan();writeinfo_flag=1;/*设置保存记录标志*/while(i=1);printf(nntt请问您是否输入完毕,是(Y),否(N),请给出您的选择nn);fflush(stdin);scanf(%c,&a);fflush(stdin);if(a=N|a=n)system(cls);p2=(struct student *)malloc(LEN);/*开辟一个新单元*/p1-next=p2;p3=p1;p1=p2;p1-next =N

29、ULL;while(a=N|a=n);system(cls);printf(nnnnnntt %d项信息输入完毕,按任意键返回.n,n);getch();system(cls);/*清屏*/判断输入数据是否符合题意/int panduan()int d=0,m=1;p2=head;for(;mnext)if(p1-xinum=p2-xinum&p1-munum=p2-munum&strcmp(p1-name,p2-name)=0)d=1;if(d=1)printf(nnnt您输入的数据中存在同一个人在同一个项目中有两种信息的情况,请任意键返回并重新输入);getchar();getchar()

30、;system(cls);/*清屏*/m+;return d; /导入获奖运动员成绩到系部/void daoruxi()int i,m=0;p2=head; while(p2!=NULL)for(i=1;ixinum)xii-1.chengji+=p2-score;p2=p2-next;/按照比赛成绩从高到底输出系部和其比赛成绩/void shuchu()int i,j,m=0, temp;char a20;if(writeinfo_flag=0) getchar();printf(nnnnnnnntt运动员信息数据库为空,不能显示,按任意键将返回:n);getchar();system(cl

31、s);/*清屏*/return;daoruxi();for(i=0;i4;i+)for(j=0;j5;j+)if(xij.chengjixij+1.chengji) temp=xij.chengji;strcpy(a,xij.name);xij.chengji=xij+1.chengji;strcpy(xij.name,xij+1.name);xij+1.chengji=temp;strcpy(xij+1.name,a);printf(nnnnnnttt按照比赛成绩从高到底输出系部和其比赛成绩nn);printf(tttt系部成绩n);while(m5)printf(tttt%s%dn,xim.name,xim.chengji);m+;printf(nnnnnttt各系部得分从高到低展示完毕,按任意键返回.n);getchar();getch();system(cls);/*清屏*/查询系部获奖情况/void xibu()int i=0,d=0;if(writein

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号