




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件设计实践软件设计实践 报告报告 学 院 中北大学信息商务学院 专 业 通信工程专业 题 目 歌唱比赛评分系统 王 泽 学生姓名 郭世杰 贺 鑫 完成时间 2016 年 1 月 18 日 指导教师 鲁旭涛 姚爱琴 李沅 中北大学信息商务学院 2013 届课程设计说明书 2 目录目录 课课 程程 设设 计计 任任 务务 书书 4 4 1 1 需求分析需求分析 5 5 1 11 1 题目分析题目分析 5 5 1 21 2 系统分析系统分析 5 5 2 2 设计概要设计概要 6 6 3 3 程序设计及模块分工明细程序设计及模块分工明细 7 7 3 13 1 人员模块分工人员模块分工 7 7 3 23 2 人员模块分工明细人员模块分工明细 7 7 4 4 测试结果测试结果 3535 4 14 1 调试与测试调试与测试 3535 4 24 2 测试结果截图测试结果截图 3636 设计总结设计总结 4242 致致 谢谢 4343 参考文献参考文献 4444 附录附录 4545 中北大学信息商务学院 2013 届课程设计说明书 3 课课程程设设计计任任务务书书 1设计目的设计目的 C 语言是通信工程专业一门重要的专业技术课程 它是一门实践性很强的课程 软件设计实践课程是为配合 c 语言课程 对学生进行全面综合训练 与课堂教学 作业练 习题 上机实验相辅的必不可少的一个教学环节 利用所学的 C 语言知识及其编程方法 结构程序设计 数组 指针 结构体 文件操作等 内容 通过布置具有一定难度的实际程序设计题目 要求学生独立完成所布置题目 在分析设 计过程中 要求学生养成良好的编程习惯 学会分析解决简单的实际问题 学会 C 语言的实际 调试技巧和方法 要求学生在教师的指导下逐步完成应用程序的设计 2设计内容和要求设计内容和要求 有十个选手参加歌唱比赛 十个裁判对每个选手的演唱进行打分 去掉一个最高分 去掉 一个最低分 剩下分数的平均值作为每位选手最后的成绩 要求 1 采用结构体定义每个选手的参赛编号 姓名以及十个裁判打出的分数 2 从键盘输入每个选手的相关信息 参赛编号 姓名和十个得分 3 计算每位选手的最后得分 并按分数由高到低排序 4 查询功能 输入参赛选手的编号或姓名 便可输出该选手的得分以及排名 以上功能采用菜单操作方式 即从键盘输入 1 到 3 这三个数 分别完成以上 2 到 4 的功能 3设计工作任务及工作量的要求设计工作任务及工作量的要求 每个组员完成自己的模块设计 完成一份设计说明书 有正确的运行结果及结果分析 中北大学信息商务学院 2013 届课程设计说明书 4 1需求分析需求分析 1 1题目分析题目分析 软件设计实践课程是为配合 c 语言课程 对学生进行全面综合训练 与课堂教学 作业练习题 上机实验相辅的必不可少的一个教学环节 利用所学的 C 语言知识及其编程方法 结构程序设计 数组 指针 结构体 文件 操作等内容 通过布置具有一定难度的实际程序设计题目 要求学生独立完成所布置题 目 在分析设计过程中 要求学生养成良好的编程习惯 学会分析解决简单的实际问题 学会 C 语言的实际调试技巧和方法来解决实际问题 1 2系统分析系统分析 歌唱比赛评分系统包括 歌唱比赛评分系统包括 菜单 菜单 系统以菜单方式工作 界面友好 易于操作 录入录入 在每个输入前都有详细分类和提示 简单明了 根据提示输入参赛选手号数 姓名 各个评委打分成绩 查询 查询 用户输入查询条件 系统规则地在界面显示查询结果 不光可以输入号数 查询到该选手信息 每位评委打分 还可以选择排名查询 显示的数据全面 修改 修改 在已有数据的基础上实现对每位选手的信息 以及评分的修改 排名 排名 利用冒泡程序对数组进行排序 删除一个最高与最低然后进行讲剩下的值平 均 得出选手最终得分 再根据分数高低排名 储存 储存 对于已经输入的数据 已文档的信息储存到电脑硬盘中 实现永久储存 系统的程序设计环境 系统的程序设计环境 本系统使用 Visual C 作为程序开发工具 Visual C 是基于对象的快速应用程序 开发工具 是当今最强大 最灵活的应用程序开发工具之一 具有良好的可视化应用程 序开发环境和强大的可扩展数据库功能 利用 Visual C 提供的可视化组件库进行编程 可以快速 高效地开发出基于 Windows 环境的各类应用程序 Visual C 语言的特点是 面向对象设计的程序语言 Visual C 的基础编程语言是具有面向对象特性的语言 具 有代码稳定 可读性好 编译速度快等优点 并将面向对象的概念移植到了 C 语言中 使这种基础语言有了新的发展空间 与其它编程软件相比 特别是在数据库和网络应用 方面 Visual C 具有简便易用 灵活高效的特点 中北大学信息商务学院 2013 届课程设计说明书 5 开发软件通常要经过修改源代码 编译 测试 再修改 再编译 再测试等操作 这些操作形成了一个开发循环 所以快速的编译器可以大大地降低开发周期 Visual C 正是建立在这种高效编译器的基础之上 是针对 Windows 的最快的高级语言代码编 译器 因此生成的代码十分精练高效 使 Visual C 程序的运行速度更快 这也是使用 Visual C 作为程序设计开发语言的重要原因 2 2设计概要设计概要 总体设计目标 总体设计目标 使用者可以利用本系统进行对选手信息以及评委评分的各项运算操作 如 根据需求添加选信息 删除选手信息 对选手得分进行排名等 最后清晰完整的结果于屏幕中 方便了评分操作 不仅节省时间 而且提高准确性 可以达到事半功倍的效果 总体设计策略 总体设计策略 本系统采用的是自顶向下 层次化的模块结构 对高层模块 采用以事务 为中心的设计策略 把一个大的模块逐步分解成较小的相对简单的模块 对低层模块 采用以 变换为中心的设计策略 为了提高每个模块的内聚性 降低模块间的耦合性 将每个模块设计 成具有单一功能的模块 即功能内聚 使模块间的联系完全是通过主模块的控制和调用来实 现 即非直接耦合 结合上述分析该系统应包括以下模块 结合上述分析该系统应包括以下模块 选手信息浏览 选手信息录入 选手信息保存 选 手成绩查询 选手信息修改 选手信息删除 选手数据 编号 姓名 成绩 平均成绩 歌歌唱唱比比赛赛评评分分系系统统 选 手 信 息 浏 览 选 手 信 息 录 入 选 手 信 息 保 存 选 手 成 绩 查 询 选 手 信 息 修 改 选 手 信 息 删 除 图 1 总体结构图 中北大学信息商务学院 2013 届课程设计说明书 6 3 3程序设计及模块分工明细程序设计及模块分工明细 3 13 1人员模块分工人员模块分工 王 泽 浏览选手数据 browse 查询选手成绩 search 查询选手信息 print 郭世杰 菜单函数 menu select 修改函数 update 保存函数 save 贺 鑫 参赛选手信息录入 creat 成绩排序 rank 删除函数 del 公共模块 color quit welcome 3 2人员模块分工明细人员模块分工明细 浏览选手数据浏览选手数据 browse 分析 实际为链表的遍历 将头节点的指针给予临时节点 p1 用 while 语句实现链 表的遍历 STARTSTART ENDEND 申明指针变量 IF head NULL ifif head NULL 中北大学信息商务学院 2013 届课程设计说明书 7 elseelse printf n 你要浏览的选手信息如下 n printf n printf 编号 姓名 n p1 head whilewhile p1 NULL printf n printf 9d 6s n p1 num p1 name p1 p1 next printf n 查询选手成绩查询选手成绩 search 分析 提供详细成绩查询 排名查询的函数调用 其中各功能均采用菜单选择的方式 STARTSTART ENDEND 定义变量 c 并赋值 SWITCH c 输入 1 跳转到详细成绩查询 Break 输入 2 排名查询 Break 图 3 查询选手成绩 中北大学信息商务学院 2013 届课程设计说明书 8 search 函数 voidvoid search intint c printf n 请选择查询内容 n printf 1 选手详细成绩查询 2 选手排名查询 n 请输入您的选择 scanf d switchswitch c casecase 1 system cls print breakbreak casecase 2 system cls rank breakbreak 中北大学信息商务学院 2013 届课程设计说明书 9 查询选手信息 print 分析 实际为输出链表中的某个某个节点 输出某个选手的编号与姓名较为好实现 输出 10 位评委成绩则用的 for 语句来实现 STARTSTART ENDEND 输入要查找的选手编号 IF head NULL inum seeknum printf 7d 6s p1 num p1 name printf forfor i 0 igrades i 中北大学信息商务学院 2013 届课程设计说明书 11 printf 6 2lf n p1 ave check 1 getchar returnreturn elseelse p1 p1 next ifif head NULL getchar 中北大学信息商务学院 2013 届课程设计说明书 12 菜单函数菜单函数 menu select menu select 分析 菜单主函数要求设计比较简洁 只提供设输入 处理和输出部分的函数调用 其中各功 能模块用菜单方式选择 STARTSTART ENDEND 定义变量 char s 100 int c WHILE 1 利用 atoi 函数将所接收的字符串转换成数值 提供给 if 语句判断 IF c 7 输入有误Break SWITCH c 1 信息浏览 Break 2 信息录入 Break 3 信息保存 Break 4 成绩查询 Break 5 信息修改 Break 6 信息删除 Break 7 退出系统 Return Break default Break Code 图 5 菜单模块 menu select 函数 voidvoid menu select charchar s 100 intint c gets s 不管用户输入的是数字键或是字母键使用 gets 都能将输入作为字 符串接收 whilewhile 1 限定用户输入的数值必须在 1 7 之间才有效 否则要求重新输入 中北大学信息商务学院 2013 届课程设计说明书 13 c atoi s 利用 atoi 函数将所接收的字符串转换成数值 提供给 if 语句 判断 ifif c 7 printf 您的输入有误 请重新输入 gets s elseelse breakbreak switchswitch c casecase 1 system cls 清屏 browse 选手信息浏览 breakbreak casecase 2 system cls creat 选手信息录入 breakbreak casecase 3 system cls save 选手信息保存 breakbreak casecase 4 system cls search 选手成绩查询 breakbreak 中北大学信息商务学院 2013 届课程设计说明书 14 casecase 5 system cls update 选手信息修改 breakbreak casecase 6 system cls del 选手信息删除 breakbreak casecase 7 system cls quit 退出系统 returnreturn breakbreak defaultdefault breakbreak getchar system cls menu menu select 中北大学信息商务学院 2013 届课程设计说明书 15 修改函数修改函数 update update 分析 实现选手信息的修改 核心内容为链表的遍历 找出要修改的选手 修改其 个人信息 STARTSTART ENDEND 输入要修改的选手编号 IF head NULL 指向下一个节点 IF head NULL 图 6 修改模块 update 函数 voidvoid update SONGER MESSAGE p1 SONGER MESSAGE malloc LEN intint check 0 用来进行判断 是否找到了要修改的信息 中北大学信息商务学院 2013 届课程设计说明书 16 longlong updatenum printf n 请输入要修改的选手编号 scanf d 查找到要修改的选手 ifif head NULL elseelse p1 head whilewhile p1 NULL ifif p1 num updatenum printf n 你要修改的选手信息如下 n printf n printf 编号 姓名 n printf n printf 9d 6s n p1 num p1 name printf n printf n 请重新写入此选手信息 n check 1 从新写入修改项目 printf n 修改选手编号为 scanf d printf n 修改选手姓名为 scanf s p1 name returnreturn elseelse 中北大学信息商务学院 2013 届课程设计说明书 17 p1 p1 next ifif head NULL getchar 中北大学信息商务学院 2013 届课程设计说明书 18 保存函数保存函数 save save 分析 保存文件的流程 使用 fopen 函数打开 txt 文件 w 参数代表打开只写文 件 再利用 fprintf 函数写入选手内容 最后用 fclose 函数关闭文件 STARTSTART ENDEND 打开一个文件 并写入格式数据 WHILE p1 NULL 向文件写入 编号 姓名 关闭文件 图 7 保存模块 save 函数 voidvoid save 将数据保存到文件 FILE fp SONGER MESSAGE p1 SONGER MESSAGE malloc LEN p1 head fp fopen 参赛选手名单 txt w fprintf fp n fprintf fp 编号 姓名 n whilewhile p1 NULL fprintf fp n fprintf fp 9d 6s n p1 num p1 name p1 p1 next fprintf fp n fclose fp printf n t 文件已将保存到 参赛选手名单 txt 中北大学信息商务学院 2013 届课程设计说明书 19 参赛选手信息录入参赛选手信息录入 creatcreat 分析 录入信息表现为创建链表节点并给节点的元素赋值 然后对评委的分数进行排序 链表 的排序 排序选择冒泡排序法 最后去掉一个最高分去掉一个最低分 STARTSTART ENDEND 定义变量 int i j float t char c y WHILE c y c Y 录入选手信息 编号 姓名 FOR i 0 i N i 输入 10 位评委点评成绩 FOR i 0 i N 1 i FOR j 0 jgrades j p1 grades j 1 交换数的位置 去掉一个最高分 去掉一个这一低分 得出最后的平均分 IF p1 NULL 内存分配失败 IF head NULL floatfloat t charchar c y whilewhile c y c Y SONGER MESSAGE p1 SONGER MESSAGE malloc LEN printf n 请输入要录入的选手信息 n printf n 选手编号 scanf d printf n 选手姓名 scanf s p1 name printf n 请输入 10 位评委点评成绩 p1 ave 0 forfor i 0 igrades i runtime error p1 ave p1 grades i forfor i 0 i N 1 i 冒泡排序法让那个成绩从小到大排 列 然后选出最大值是最后一个 最小值是第一个 中北大学信息商务学院 2013 届课程设计说明书 21 forfor j 0 jgrades j p1 grades j 1 t p1 grades j p1 grades j p1 grades j 1 p1 grades j 1 t p1 ave p1 ave p1 grades 0 p1 grades 9 8 去掉一个最高分 去掉一个这 一低分 得出最后的平均分 p1 next NULL ifif p1 NULL printf n 内存分配失败 n n n 1 ifif head NULL head next NULL tail head printf n 选手信息录入成功 n elseelse 如果当前还有节点则插入到尾部 tail next p1 tail p1 中北大学信息商务学院 2013 届课程设计说明书 22 tail next NULL printf n 选手信息录入成功 n printf 是否继续 Y N getchar scanf c 成绩排序 rank 分析 用冒泡排序的方法对平均成绩 链表 进行排序 STARTSTART ENDEND 定义指针变量 p1 p2 endpt p p1 head IF head NULL head p1 FOR endpt NULL endpt head endpt p FOR p p1 head p1 next next endpt p1 p1 next IF p1 next ave next next ave 两节点的顺序交换 把 p1 的信息去掉 head 指向排序后的第一个节点 释放 p1 并将 p1 重新指向头指针 WHILE p1 NULL 输出选手排名 加上表尾部 getchar 图 8 成绩排序模块 中北大学信息商务学院 2013 届课程设计说明书 23 rank 函数 voidvoid rank SONGER MESSAGE p1 p2 endpt p endpt 控制循环比较 p 临时指针变量 n 0 p1 head ifif head NULL elseelse p1 SONGER MESSAGE malloc LEN p1 next head 注意理解 我们增加一个节点 放在第一个节点的前面 主 要是为了便于比较 因为第一个节点没有前驱 我们不能交换地址 head p1 让 head 指向 p1 节点 排序完成后 我们再把 p1 节点释放 掉 forfor endpt NULL endpt head endpt p 结合第 6 点理解 forfor p p1 head p1 next next endpt p1 p1 next ifif p1 next ave next next ave 如果前面的节点键值比后面 节点的键值小 则交换 p2 p1 next next 1 排序后 q 节点指向 p 节点 在调 整指向之前 我们要保存原 p 的指向节点地址 即 p2 p1 next next p1 next next p2 next 2 顺着这一步一步往下推 排序后 p1 next next 要指的是 p2 next 所以 p1 next next p2 next p2 next p1 next 3 p2 next 原是 q 发出来的指向 排序后 q 的指向要变为指向 p 的 而原来 p1 next 是指向 p 的 所以 p2 next p1 next p1 next p2 4 p1 next 原是指向 p 的 排序 后图 16 中 p1 next 要指向 q 原来 p1 next next 即 p2 是指向 q 的 所以 p1 next p2 p p1 next next 5 至此 完成了相邻两节点的顺序 交换 p1 head 把 p1 的信息去掉 head head next 让 head 指向排序后的第一个节点 free p1 释放 p1 中北大学信息商务学院 2013 届课程设计说明书 24 printf n 选手成绩排名信息如下 n printf n printf 编号 姓名 平均成绩 名次 n p1 head whilewhile p1 NULL printf n printf 9d 9s 9 1lf 5d n p1 num p1 name p1 ave n 1 n p1 p1 next printf n getchar 删除函数删除函数 del del 分析 节点的删除较为繁琐 第一种情况 数据在链表头部 并且只有一个结点 第二种情况 数据在链表头部 头结点 第三种情况 数据在链表中间 中间节点 第四种情况 数据在链表尾部 尾部节点 中北大学信息商务学院 2013 届课程设计说明书 25 STARTSTART ENDEND 定义变量 输入要删除的选手的编号 p1 head WHILE node NULL IF node num del num 输出要删除的选手信息 IF node head Return p1 node node node next IF head NULL SONGER MESSAGE malloc LEN SONGER MESSAGE p1 intint check 0 用来进行判断 是否找到了要删除的信息 longlong del num printf n 请输入要删除的选手的编号 scanf d ifif head NULL elseelse node head p1 head whilewhile node NULL ifif node num del num printf n 要删除的选手信息 n printf n printf 编号 姓名 n printf n printf 9d 6s n node num node name 在这里找到了要删除的 选手信息 printf n check 1 找到要删除的信息 赋为真 中北大学信息商务学院 2013 届课程设计说明书 27 ifif node head tail head free node printf n 删除信息成功 n 删除唯一的节点 elseelse ifif node head head head next free node printf n 删除信息成功 n 头节点删除成功 n n 1 elseelse ifif node next NULL 删除中间节点 p1 next node next free node printf n 删除信息成功 n 中间节点删除成功 n n 1 elseelse ifif node next NULL 删除尾节点 p1 next NULL tail p1 free node printf n 删除信息成功 n 尾节点删除成功 中北大学信息商务学院 2013 届课程设计说明书 28 n n 1 getchar returnreturn elseelse p1 node node node next ifif head NULL getchar 公共模块公共模块 颜色控制函数颜色控制函数 color color 分析 为了使程序看起来更美观 所以引入 windows api 来控制颜色函数 用来改变字体颜色 color 函数 voidvoid color constconst unsignedunsigned shortshort color1 仅限改变 0 15 的颜色 如果在 0 15 那么实现他的颜色 因为如果超过 15 后面 的改变的是文本背景色 中北大学信息商务学院 2013 届课程设计说明书 29 ifif color1 0 中北大学信息商务学院 2013 届课程设计说明书 33 printf n n 按任意键进入主菜单 n getch system cls menu menu select returnreturn 0 主函数主函数 main main 分析 提供程序入口 main 函数 intint main welcome returnreturn 0 库函数库函数 include include include include include include include include include include include include include include define define LEN sizeofsizeof SONGER MESSAGE define define N 10 结构体结构体 structstruct tm ptr 用于 welcome 显示时间的结构体 typedeftypedef structstruct songer 定义选手信息链表结构 longlong num 选手编号 charchar name 20 选手姓名 floatfloat grades N 选手成绩 doubledouble ave 平均成绩 中北大学信息商务学院 2013 届课程设计说明书 34 structstruct songer next 链表的结点 next 是指针变量 指向结构体变量 指针域 SONGER MESSAGE 等价于 struct SONGER MESSAGE SONGER MESSAGE head 定义链表的头指针 SONGER MESSAGE tail 定义链表的尾指针 intint n 0 n 为全局变量 用于统计结点的个数 4 4测试结果测试结果 4 14 1调试与测试调试与测试 第一 用一组简单的数据对程序进行调试 是否各函数有出错现象 然后用复杂数 据对程序进行调试 直到确定程序对正常数据没有错误为止 第二 当数据测试时 程序错误 要首先找到出错的函数 对函数中各个变量进行观 察 有时变量很多 循环多重不要急 对各个数据的观察 对程序的调试有很大的帮助 你也可以先对几个变量熟悉后 在多重循环里 确定正确的数据 将其跳过调试 对有疑 问的数据循环进行仔细观察 虽然这是比较省力气的活 但对复杂的数据错误并不是很 有效 所以仔细观察每个数据的变化对调试的成功与否有决定性作用 第三 测试时 根本的错误并不一定在运行错误的函数内 或许在前面的函数内已 经奠定了这些错误数据的基础 需要反过头来 对所有的的函数进行一项项的调试 从 程序运行的第一个函数开始调试 按照程序运行的步骤下去 一个个的确定函数的正确 性 每确定一个函数 在以后的调试中可以减少对该函数的调试次数 或者直接跳到下 一个函数 所谓的各个击破便是如此 对头文件中的各个函数的返回值和它所要传入的 参变量及其功能更是需要注意 第四 调试时 需要对错误缩小范围 从整个程序到指定函数 再到指定区域 再到指定行 在 对程序缩小范围或对编译没通过的程序缩小错误范围时可以用 来进行调试 确定 正常范围 缩小错误范围 4 24 2 测试结果截图测试结果截图 中北大学信息商务学院 2013 届课程设计说明书 35 图 10 欢迎界面 中北大学信息商务学院 2013 届课程设计说明书 36 图 11 主菜单 图 12 选手信息浏览 中北大学信息商务学院 2013 届课程设计说明书 37 图 13 选手信息录入 图 14 选手信息保存 中北大学信息商务学院 2013 届课程设计说明书 38 图 15 选手信息查询 图 16 选手详细信息查询 中北大学信息商务学院 2013 届课程设计说明书 39 图 17 选手排名查询 图 18 选手信息修改 中北大学信息商务学院 2013 届课程设计说明书 40 图 19 选手信息删除 图 20 退出系统 中北大学信息商务学院 2013 届课程设计说明书 41 设计总结设计总结 通过以上各章节的介绍 已经完成了歌唱比赛评分系统设计系统的开发 歌唱比赛评分系统设 计是一套实用性非常强的系统 可以应用到各种评分系统 歌唱比赛评分系统设计不仅需要灵活的交互功能 还需要经常与数据库进行联系 要求具有操 作简单和功能强大的数据库访问能力 界面尽量美观友好 多彩多姿 完全的图形化设计 操作者 易于上手 同时多种媒体技术的集成利用 可以方便的完成用户乐于接受的各种界面设计 本系统虽具备了基本的功能 但由于时间关系 还有很多功能待实现 在此基础上结合实际应 用中所出现的问题 更智能化的排名系统 以及增加网络评分 观众评分等功能 通过这次编程我深深的感受到对代码的变量命名 代码内注释格式 甚至嵌套中行缩进的长度 和函数间的空行数字都有明确规定 良好的编写习惯 不但有助于代码的移植和纠错 也有助于不 同人员之间的协作 我们还要有模块化思维能力 模块化思维就是编程任何一个功能模块或函数的时候 要多 想一些 不要局限在完成当前任务的简单思路上 想想看该模块是否可以脱离这个系统存在 是否可 以通过简单的修改参数的方式在其他系统和应用环境下直接引用 这样就能极大避免重复性的开发 工作 善于总结 也是学习能力的一种体现 每次完成一个编程任务 完成一段代码 都应当有目的的 跟踪该程序的应用状况 随时总结 找到自己的不足 这样所编写的程序才能逐步提高 中北大学信息商务学院 2013 届课程设计说明书 42 致致 谢谢 在学习中 老师严谨的治学态度 丰富渊博的知识 精益求精的工作态度以及侮人不倦的师者 风范是我终生学习的楷模 老师们的高深精湛的造诣与严谨求实的治学精神 将永远激励着我 在 此 谨向老师们致以衷心的感谢和崇高的敬意 另外 感谢校方给予我我们这样一次机会 能够独立地完成一个课程设计 并在这个过程当中 给予我们各种方便 使我们在这学期快要结束的时候 能够将学到的知识应用到实践中 增强了我 们实践操作和动手应用能力 提高了独立思考的能力 感谢所有任课老师和所有同学在这三年来给自己的指导和帮助 是他们教会了我专业知识 教 会了我如何学习 教会了我如何做人 正是由于他们 我才能在各方面取得显著的进步 在此向他 们表示我由衷的谢意 在这次课程设计的撰写中 我得到了许多人的帮助 首先我要感谢我的老师在课程设计上给予我的指导 提供给我的支持和帮助 这是我能顺利完 成这次设计的主要原因 更重要的是老师帮我解决了许多技术上的难题 让我能把系统做得更加完 善 在此期间 我不仅学到了许多新的知识 而且也开阔了视野 提高了自己的设计能力 其次 我要感谢帮助过我的同学 他们也为我解决了不少我不太明白的设计上的难题 最后再一次感谢所有在设计中帮助过我的良师益友和同学 中北大学信息商务学院 2013 届课程设计说明书 43 参考文献参考文献 1 谭浩强 C 程序设计 北京 清华大学出版社 2007 91 310 2 谭浩强 C 程序设计题解与上机指导 北京 清华大学出版社 2005 130 155 3 张明慧 Visual C 开发图书管理系统 北京 北京师范大学 2005 32 40 4 C 编写组编 常用 C 语言用法速查手册 北京 龙门书局 1995 34 45 5 张俐 杨莹 编著 C 语言高级程序设计 北京 清华大学出版社 2006 67 78 6 魏海新 李燕主编 C 语言程序设计实用教程 北京 机械工业出版社 2007 161 174 中北大学信息商务学院 2013 届课程设计说明书 44 附录附录 源代码 include include include include include include include include include include include include include include define define LEN sizeofsizeof SONGER MESSAGE define define N 10 structstruct tm ptr 用于 welcome 显示时间的结构体 typedeftypedef structstruct songer 定义选手信息链表结构 longlong num 选手编号 charchar name 20 选手姓名 floatfloat grades N 选手成绩 doubledouble ave 平均成绩 structstruct songer next 链表的结点 next 是指针变量 指向结构体变量 指 针域 SONGER MESSAGE 等价于 struct SONGER MESSAGE SONGER MESSAGE head 定义链表的头指针 中北大学信息商务学院 2013 届课程设计说明书 45 SONGER MESSAGE tail 定义链表的尾指针 intint n 0 n 为全局变量 用于统计结点的个数 voidvoid creat 建立单向动态链表 此函数带回一个指向链表头的指针 用于参赛选手的录入 voidvoid del 用于删除结点 用于参赛选手的删除 voidvoid search 参赛选手成绩的查询 voidvoid print 用于输出链表 voidvoid rank 按个人平均成绩从高到低的顺序进行排序 voidvoid update 参赛选手的修改 voidvoid menu 操作系统菜单界面 voidvoid menu select 菜单选择界面 voidvoid browse 选手信息浏览 voidvoid save 选手信息保存 voidvoid quit 退出系统界面 browse 函数 voidvoid browse SONGER MESSAGE p1 ifif head NULL elseelse printf n 你要浏览的选手信息如下 n printf n 中北大学信息商务学院 2013 届课程设计说明书 46 printf 编号 姓名 n p1 head whilewhile p1 NULL printf n printf 9d 6s n p1 num p1 name p1 p1 next printf n search 函数 voidvoid search intint c printf n 请选择查询内容 n printf 1 选手详细成绩查询 2 选手排名查询 n 请输入您的选择 scanf d switchswitch c casecase 1 system cls print breakbreak casecase 2 system cls rank 中北大学信息商务学院 2013 届课程设计说明书 47 breakbreak print 函数 voidvoid print SONGER MESSAGE p1 SONGER MESSAGE malloc LEN intint check 0 i longlong seeknum printf n 请输入要查找的选手编号 scanf d ifif head NULL elseelse p1 head printf n 你要找的选手的成绩如下 n 在这里找到了要查找 的选手成绩 printf n printf 编号 姓名 成绩 1 2 3 4 5 6 7 8 9 10 平均成绩 n printf n 中北大学信息商务学院 2013 届课程设计说明书 48 whilewhile p1 NULL ifif p1 num seeknum printf 7d 6s p1 num p1 name printf forfor i 0 igrades i printf 6 2lf n p1 ave check 1 getchar returnreturn elseelse p1 p1 next ifif head NULL getchar menu select 函数 中北大学信息商务学院 2013 届课程设计说明书 49 voidvoid menu select charchar s 100 intint c gets s 不管用户输入的是数字键或是字母键使用 gets 都能将输入作为字 符串接收 whilewhile 1 限定用户输入的数值必须在 1 7 之间才有效 否则要求重新输入 c atoi s 利用 atoi 函数将所接收的字符串转换成数值 提供给 if 语句 判断 ifif c 7 printf 您的输入有误 请重新输入 gets s elseelse breakbreak switchswitch c casecase 1 system cls 清屏 browse 选手信息浏览 breakbreak casecase 2 system cls creat 选手信息录入 中北大学信息商务学院 2013 届课程设计说明书 50 breakbreak casecase 3 system cls save 选手信息保存 breakbreak casecase 4 system cls search 选手成绩查询 breakbreak casecase 5 system cls update 选手信息修改 breakbreak casecase 6 system cls del 选手信息删除 breakbreak casecase 7 system cls quit 退出系统 returnreturn breakbreak defaultdefault breakbreak getchar system cls menu menu select 中北大学信息商务学院 2013 届课程设计说明书 51 update 函数 voidvoid update SONGER MESSAGE p1 SONGER MESSAGE malloc LEN intint check 0 用来进行判断 是否找到了要修改的信息 longlong updatenum printf n 请输入要修改的选手编号 scanf d 查找到要修改的选手 ifif head NULL elseelse p1 head whilewhile p1 NULL ifif p1 num updatenum printf n 你要修改的选手信息如下 n printf n printf 编号 姓名 n printf n printf 9d 6s n p1 num p1 name printf n printf n 请重新写入此选手信息 n 中北大学信息商务学院 2013 届课程设计说明书 52 check 1 从新写入修改项目 printf n 修改选手编号为 scanf d printf n 修改选手姓名为 scanf s p1 name returnreturn elseelse p1 p1 next ifif head NULL getchar save 函数 voidvoid save 将数据保存到文件 FILE fp SONGER MESSAGE p1 SONGER MESSAGE malloc LEN p1 head fp fopen 参赛选手名单 txt w fprintf fp n 中北大学信息商务学院 2013 届课程设计说明书 53 fprintf fp 编号 姓名 n whilewhile p1 NULL fprintf fp n fprintf fp 9d 6s n p1 num p1 name p1 p1 next fprintf fp n fclose fp printf n t 文件已将保存到 参赛选手名单 txt creat 函数 voidvoid creat intint i j floatfloat t charchar c y whilewhile c y c Y SONGER MESSAGE p1 SONGER MESSAGE malloc LEN printf n 请输入要录入的选手信息 n printf n 选手编号 scanf d printf n 选手姓名 scanf s p1 name 中北大学信息商务学院 2013 届课程设计说明书 54 printf n 请输入 10 位评委点评成绩 p1 ave 0 forfor i 0 igrades i runtime error p1 ave p1 grades i forfor i 0 i N 1 i 冒泡排序法让那个成绩从小到大排 列 然后选出最大值是最后一个 最小值是第一个 forfor j 0 jgrades j p1 grades j 1 t p1 grades j p1 grades j p1 grades j 1 p1 grades j 1 t p1 ave p1 ave p1 grades 0 p1 grades 9 8 去掉一个最高分 去掉一个这 一低分 得出最后的平均分 p1 next NULL ifif p1 NULL printf n 内存分配失败 n n n 1 中北大学信息商务学院 2013 届课程设计说明书 55 ifif head NULL head next NULL tail head printf n 选手信息录入成功 n elseelse 如果当前还有节点则插入到尾部 tail next p1 tail p1 tail next NULL printf n 选手信息录入成功 n printf 是否继续 Y N getchar scanf c rank 函数 voidvoid rank SONGER MESSAGE p1 p2 endpt p endpt 控制循环比较 p 临时指针变量 n 0 p1 head 中北大学信息商务学院 2013 届课程设计说明书 56 ifif head NULL elseelse p1 SONGER MESSAGE malloc LEN p1 next head 注意理解 我们增加一个节点 放在第一个节点的前面 主 要是为了便于比较 因为第一个节点没有前驱 我们不能交换地址 head p1 让 head 指向 p1 节点 排序完成后 我们再把 p1 节点释放 掉 forfor en
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高效照明系统安装与调试
- 高三第一次联考质量分析会副校长发言:凝心聚力析联考精准施策备高考
- 初中英语教学中的情感教育与德育渗透实践
- 公园水利风景区绿地系统的合理布局与植被配置
- 化学教育试题及答案
- 2025年交通运输企业安全生产试题及答案
- 成都投资计划书
- 咖啡师技能试题及答案
- 幼儿古诗词竞赛启蒙必练试题及答案
- 食品安全检测培训试题及答案
- 华中科技大学教学课件-工程传热学1王晓墨
- 学生资助政策宣传主题班会PPT
- 大一统专题复习-高中历史教学资料
- YS/T 1018-2015铼粒
- 【高等数学练习题】沈阳大学专升本自考真题汇总(附答案解析)
- 自驾游免责协议书
- 合作项目管理办法
- 建设项目安全设施“三同时”检查表
- 第五章-中药指纹图谱课件
- 国外资源储量分类(李裕伟)
- 《汽轮机原理》多级汽轮机
评论
0/150
提交评论