沈 阳 工 程 学 院
程序设计基础
课 程 设 计
设计题目: 学生选课管理
系 别 信息工程系 班级 系统本112 学生姓名 乔旻浩、汪海鹏、吴睿、金涛 学号
指导教师 张欣 职称 副教授 起止日期: 2012年03月19日起——至 2012年03月30日止
沈阳工程学院
课程设计任务书
课程设计题目: 学生选课管理
系 别 信息工程系 班级 系统本112 学生姓名 乔旻浩、汪海鹏、吴睿、金涛 学号 18、
指导教师 张欣 职称 副教授 课程设计地点: 实训楼F座
课程设计时间:2012年03月19日起——至 2012年03月30日止
教研室主任 年 月 日批准
一、课程设计的性质和任务
《程序设计基础课程设计》是软件工程专业的实践性教学环节之一,是《程序设计基础》课程的辅助教学过程,是软件工程专业的一门必修课。
本课程设计通过利用C语言实现一个小型的应用系统,使学生加深理解《程序设计基础》课程中的各种基本概念、理论和原理,掌握C语言的语法、语句和程序设计的思想,巩固课堂教学内容,锻炼学生编写程序和调试程序的能力,提高应用软件设计的能力,提高分析问题和解决问题的能力,培养创新和团队的意识,从而为后续课程学习、毕业设计以及将来更好地走向工作岗位打好坚实的基础。
二、课程设计的原始资料
XX
学生可查阅有关程序设计的案例资料,进一步理解结构化程序设计的模块化程序设计思想,并利用此思想,根据对程序设计课程的学习,编写一个比较完整的简单软件系统。通过本设计,可以加深理解利用传统程序设计思想开发一个软件系统的整个流程,提高分析问题、解决问题和软件设计、编程的实际动手能力。
三、课程设计的主要内容及要求;
1.认真阅读材料,掌握程序设计模块化的思想。 2.要求在设计的过程中,建立清晰的层次结构。 3、画出主要的功能结构图和主要模块的流程图。 4.完成一简单学生选课管理程序。 5. 实现课程管理。
6. 实现选课及选课结果查询。 7.要求操作简单,用户界面友好。 8.运行程序,检查结果是否与理论值一致。 9.运行环境使用Windows,TC/VC。 四、课程设计报告的要求
课程设计报告要求参照毕业设计论文撰写规范,学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献。
课程设计报告装订顺序为:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。
五、设计完成后应提交成果的种类、数量、质量要求 1、完成任务书中指定的操作功能,运行稳定。
2、课程设计报告。
3、电子资料(程序代码,简单说明书,课程设计报告)。 五、时间进度安排; 顺序 阶段日期 计 划 完 成 内 容 备注 1 第1天 进行设计准备,阅读资料,分析设计 3月19日 任务书,明确设计要求、内容和步骤 2 第2-3天 绘制程序流程图,编写相应的程序代 3月20-21日 码 3 第4-7天 上机调试 3月22-27日 4 第8-9天 整理实验数据,撰写课程设计报告 3月28-29日 5 第10天 成绩评定 3月30日 六、主要参考资料 1.郭翠英. C语言程序设计案例精编.北京:中国水利水电出版社.2004 2. 谭浩强. C程序设计(第三版).北京:清华大学出版社.2005 3. 陈天洲. C语言高级程序设计.北京:人民邮电出版社.2002 4. 杨旭. C语言程序设计案例教程.北京:人民邮电出版社.2005 5.王为青.C语言高级编程及实例剖析.北京:人民邮电出版社.2008 6.徐慧.C语言实例解析精粹. 北京:人民邮电出版社.2006
沈 阳 工 程 学 院
程序设计基础 课程设计成绩评定表
系(部): 信息工程系 班级: 系统本112 学生姓名: 乔旻浩
指 导 教 师 评 审 意 见 评价 内容 调研 论证 工作能力 态度 工作量 说明书的质量 具 体 要 求 能独立查阅文献,收集资料;能制定课程设计方案和日程安排。 工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作, 按期圆满完成规定的设计任务,工作量饱满,难度适宜。 说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。 权重 0.1 0.2 0.2 0.5 5 5 5 5 评 分 4 4 4 4 3 3 3 3 2 2 2 2 加权分 指导教师评审成绩 (加权分合计乘以12) 指 导 教 师 签 名: 分 加权分合计 年 月 日 评 阅 教 师 评 审 意 见 评价 内容 查阅 文献 工作量 说明书的质量 具 体 要 求 查阅文献有一定广泛性;有综合归纳资料的能力 工作量饱满,难度适中。 说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。 权重 0.2 0.5 0.3 评 分 加权分 5 5 5 4 4 4 3 3 3 2 2 2 评阅教师评审成绩 (加权分合计乘以8) 评 阅 教 师 签 名: 课 程 设 计 总 评 成 绩 分 加权分合计 年 月 日 分
沈 阳 工 程 学 院
程序设计基础 课程设计成绩评定表
系(部): 信息工程系 班级: 系统本112 学生姓名: 汪海鹏
指 导 教 师 评 审 意 见 评价 内容 调研 论证 工作能力 态度 工作量 说明书的质量 具 体 要 求 能独立查阅文献,收集资料;能制定课程设计方案和日程安排。 工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作, 按期圆满完成规定的设计任务,工作量饱满,难度适宜。 说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。 权重 0.1 0.2 0.2 0.5 5 5 5 5 评 分 4 4 4 4 3 3 3 3 2 2 2 2 加权分 指导教师评审成绩 (加权分合计乘以12) 指 导 教 师 签 名: 分 加权分合计 年 月 日 评 阅 教 师 评 审 意 见 评价 内容 查阅 文献 工作量 说明书的质量 具 体 要 求 查阅文献有一定广泛性;有综合归纳资料的能力 工作量饱满,难度适中。 说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。 权重 0.2 0.5 0.3 评 分 加权分 5 5 5 4 4 4 3 3 3 2 2 2 评阅教师评审成绩 (加权分合计乘以8) 评 阅 教 师 签 名: 课 程 设 计 总 评 成 绩 分 加权分合计 年 月 日 分
沈 阳 工 程 学 院
程序设计基础 课程设计成绩评定表
系(部): 信息工程系 班级: 系统本112 学生姓名: 吴睿
指 导 教 师 评 审 意 见 评价 内容 调研 论证 工作能力 态度 工作量 说明书的质量 具 体 要 求 能独立查阅文献,收集资料;能制定课程设计方案和日程安排。 工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作, 按期圆满完成规定的设计任务,工作量饱满,难度适宜。 说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。 权重 0.1 0.2 0.2 0.5 5 5 5 5 评 分 4 4 4 4 3 3 3 3 2 2 2 2 加权分 指导教师评审成绩 (加权分合计乘以12) 指 导 教 师 签 名: 分 加权分合计 年 月 日 评 阅 教 师 评 审 意 见 评价 内容 查阅 文献 工作量 说明书的质量 具 体 要 求 查阅文献有一定广泛性;有综合归纳资料的能力 工作量饱满,难度适中。 说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。 权重 0.2 0.5 0.3 评 分 加权分 5 5 5 4 4 4 3 3 3 2 2 2 评阅教师评审成绩 (加权分合计乘以8) 评 阅 教 师 签 名: 课 程 设 计 总 评 成 绩 分 加权分合计 年 月 日 分
沈 阳 工 程 学 院
程序设计基础 课程设计成绩评定表
系(部): 信息工程系 班级: 系统本112 学生姓名: 金涛
指 导 教 师 评 审 意 见 评价 内容 调研 论证 工作能力 态度 工作量 说明书的质量 具 体 要 求 能独立查阅文献,收集资料;能制定课程设计方案和日程安排。 工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作, 按期圆满完成规定的设计任务,工作量饱满,难度适宜。 说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。 权重 0.1 0.2 0.2 0.5 5 5 5 5 评 分 4 4 4 4 3 3 3 3 2 2 2 2 加权分 指导教师评审成绩 (加权分合计乘以12) 指 导 教 师 签 名: 分 加权分合计 年 月 日 评 阅 教 师 评 审 意 见 评价 内容 查阅 文献 工作量 说明书的质量 具 体 要 求 查阅文献有一定广泛性;有综合归纳资料的能力 工作量饱满,难度适中。 说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。 权重 0.2 0.5 0.3 评 分 加权分 5 5 5 4 4 4 3 3 3 2 2 2 评阅教师评审成绩 (加权分合计乘以8) 评 阅 教 师 签 名: 课 程 设 计 总 评 成 绩
分 加权分合计 年 月 日 分
沈阳工程学院课程设计报告 目录
目 录
摘 要 .................................................................................................................................................. 1 第1章 引言 ........................................................................................................................................ 2 1.1 题目背景................................................................................................................................... 2 1.2 设计目的................................................................................................................................... 2 1.3 解决问题................................................................................................................................... 2 第2章 C语言的运行环境及其特点 ................................................................................................. 4 2.1 C语言的概述............................................................................................................................ 4 2.2 C语言的运行环境.................................................................................................................... 4 2.3 C语言的特点............................................................................................................................ 5 2.4 C语言的运行步骤.................................................................................................................... 6 2.5 C语言结构体............................................................................................................................ 8 第3章 系统分析与设计 .................................................................................................................. 10 3.1 系统功能................................................................................................................................. 10 3.2 功能设计................................................................................................................................. 11 3.2.1 主函数 ............................................................................................................................. 11 3.2.2 录入信息函数 ................................................................................................................. 11 3.2.3 管理信息函数 ................................................................................................................. 12 3.2.4 学生选课信息函数 ......................................................................................................... 13 3.2.5 查询信息函数 ................................................................................................................. 13 3.2.6 存储信息函数 ................................................................................................................. 14 第4章 系统功能实现 ...................................................................................................................... 17 4.1 主函数..................................................................................................................................... 17 4.1.1 库函数的调用 ................................................................................................................. 17 4.1.2 初始数据的定义 ............................................................................................................. 17 4.1.3 全局变量的定义 ............................................................................................................. 18 4.1.4 主函数流程 ..................................................................................................................... 18 4.2 菜单显示 ................................................................................................................................. 20 4.3 录入信息函数 ......................................................................................................................... 21 4.4 管理信息函数 ......................................................................................................................... 27 4.5 查询函数 ................................................................................................................................. 32 4.6 学生选课信息函数 ................................................................................................................. 36 4.7 存储信息函数 ......................................................................................................................... 39 结 论 .................................................................................................................................................. 43 致 谢 .................................................................................................................................................. 44 参考文献 ............................................................................................................................................ 45
沈阳工程学院课程设计报告 摘要
摘 要
近年来,当今社会的高速发展,各个领域的突飞猛进,计算机也有它卓越的进步。C语言不仅为计算机专业工作者所使用,而且为广大计算机应用人员所喜爱和使用。许多高等学校,不仅在计算机专业开设C语言课程,而且在非计算机专业也开设了C语言课程。学习C语言已经成为广大计算机应用人员和广大青年学生的迫切要求。
本组此次课程设计的题目个人帐务管理系统。 个人帐务管理系统的主要功能是首先建立客户的基本信息,以便日后进行查找,之后将其金额输入,这样就建立起基本信息了。建立基本信息后利用系统提供的添加、显示、修改、查找等功能就可以实现设计目的了。
在编写此程序中,我们应用了课本上所学过的主要知识,而且也减少的不少的存储空间。
函数的合成、调试用到是数组程序和指针函数,而且也添加了结构体,这在操作中也比较灵活运用。数组是有序数组的集合,数组中的每一个元素都属于同一个数据类型,用一个统一的数组名和下标来唯一地确定数组中的元素,将数组与循环结合起来,可以有效地处理大批量的数据,大大提高了工作效率,十分方便。
此系统中应用了结构体,数组,文件,基本的指针运用,基本的循环语句,函数的调用等。
关键词 函数,数组,结构体,文件
1
沈阳工程学院课程设计报告 第1章 引言
第1章 引言
1.1 题目背景
随着计算机技术的飞速发展,它不仅改变了世界,同时也改变了人类的生活。作为新世纪的大学生,应当站在时代发展的前列,掌握现代科学技术知识,调整自己的知识结构和能力结构,以适应社会发展的要求。
C语言成了在国内外使用的一种计算机语言。C语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好、既具有高级语言的优点,又具有低级语言的许多特点,因此特别适合于编写系统软件。现在大多数的高校都把C语言作为第一门计算机语言进行教学,这是可行的,学生是能够学习好的。学习C语言已经成为广大计算机应用人员和广大青年学生的迫切要求。
在信息时代,采用传统的算盘和计算器记帐已经显得十分的落后,而且效率低下,尤其在查询和计算方面,效率低且误差大。为了适应现代化的环境,许多的管理事务都由电脑来管理,从而提高了管理的速率和效率。
1.2 设计目的
制做学生选课系统,共包括课程信息和学生信息两部分。课程信息包括:课程编码、课程名称、适用专业、课程类型(必修、限选、必选、实践、学习)、学分、学时、主讲教师等。学生信息管理,学生选课管理(学生选课学分总数有一定范围),学生可以对课程进行查询、浏览,选完课后可以退选、重选,并可以按学号、姓名进行查询和统计。
1.3 解决问题
学生选课管理系统的主要功能是首先建立各项选课和学生的基本信息,包括课程编号、课程名称、适用专业、课程类型、学分、学时、主讲教师以及学生的相关信息等。建立基本信息后利用系统提供的添加、显示、修改、查找等功能就可以实现设计目的了。
学生选课管理系统的开发成功可以极大地方便学生自由的选课,也方便老师查询与修改,大大节省了老师的工作时间,老师也可以更加准确详细的了解学生选课的信息。学生选课管理系统除以上的功能之外,还可以进行后开发,进一步扩展系统功能,实现更大范围的学生选课管理,以及查询、删减等功能。
其中主要难点如下: ⒈ 保存调用函数设计,把输入的选课信息保存到指定文件时会发生排序混乱问题。需要把输入的信息通过先保存到临时的数组,然后进行调用。 ⒉ 新增函数的设计,实现当用户对学生和选课等信息数据库的信息录入。
2
沈阳工程学院课程设计报告 第1章 引言
⒊ 查询函数设计,通过多种方式查询学生选课的详细信息,把数据调用出来。 ⒋ 管理函数的设计,实现通过指定的学生或课程的结构体成员的输入来增添、删除该学生或该课程的信息。
3
沈阳工程学院课程设计报告 第2章 C语言的运行环境及其特点
第2章 C语言的运行环境及其特点
2.1 C语言的概述
早期的C语言主要是用于UNIX系统。由于C语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用。成为当代最优秀的程序设计语言之一。
C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。
在C语言中采用的分隔符有逗号和空格两种。逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。在关键字,标识符之间必须要有一个以上的空格符作间隔, 否则将会出现语法错误,例如把int a;写成 inta;C编译器会把inta当成一个标识符处理,其结果必然出错。
C语言的注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解释程序的意义。在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不作处理,待调试结束后再去掉注释符。
2.2 C语言的运行环境
C语言的运行环境是Turbo C,Turbo C是美国Borland公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。该公司相继推出了一套Turbo系列软件,如Turbo BASIC, TurboPascal,Turbo Prolog,这些软件很受用户欢迎。该公司在1987年首次推出Turbo C1.0产品,其中使用了全然一新的集成开发环境,即使用了一系列下拉式菜单,将文本编辑、程序编译、连接以及程序运行一体化,大大方便了程序的开发。1988年,Borland公司又推出Turbo C1.5版本,增加了图形库和文本窗口函数库等,而TurboC 2.0则是该公司1989年出版的。
Turbo C2.0在原来集成开发环境的基础上增加了查错功能,并可以在Tiny模式下直接生成。COM(数据、代码、堆栈处在同一64K 内存中)文件。还可对数学协处理器支持
8087/80287等进行仿真。Borland公司后来又推出了面向对象的程序软件包Turbo C++,它继承发展Turbo C 2.0的集成开发环境,并包含了面向对象的基本思想和设计方法。1991年为了适用Microsoft 公司的Windows 3.0 版本,Borland公司又将Turbo C++作了更新,即Turbo
4
沈阳工程学院课程设计报告 第2章 C语言的运行环境及其特点 C的新一代产品Borlandc C++也已经问世了。
C语言是在TC环境下运行的,如图2-1所示。
图2-1 C语言运行界面
2.3 C语言的特点
⒈ 简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
⒉ 运算符丰富
C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
⒊ 数据结构丰富
C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
⒋ C语言是结构式语言
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
⒌ C语言语法限制不太严格、程序设计自由度大
一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。
5
沈阳工程学院课程设计报告 第2章 C语言的运行环境及其特点
⒍ C语言允许直接访问物理地址,可以直接对硬件进行操作
因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。
⒎ C语言程序生成代码质量高,程序执行效率高 一般只比汇编程序生成的目标代码效率低10~20%。 ⒏ C语言适用范围大,可移植性好
C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。
2.4 C语言的运行步骤
⒈ 编辑源文件
在主菜单下,直接按Alt+F键,或按F10后将光带移到“File”选项上,按回车键,在“File”下面出现一个下拉菜单。
建立一个新文件,可用光标移动键将“File”菜单中的光带移到“New”处,按回车键,即可打开编辑窗口。此时,编辑窗口是空白的,光标位于编辑窗口的左上角,屏幕自动处于插入模式,可以输入源程序。屏幕右上角显示缺省文件名为NONAME.C,编辑完成之后,可用F2或选择“Save”或“Write to”进行存盘操作,此时系统将提示用户将文件名修改成为所需要的文件名,其运行界面如图2-2所示。
图2-2 保存文件
⒉ 源程序的编译、连接
直接按F9键,或将菜单“Compile”中的光带移到“Make EXE file”项上,按回车键,就可实现对源程序的编译、连接。若有错误,则在信息窗口显示出相应的信息或警告,按任
6
沈阳工程学院课程设计报告 第2章 C语言的运行环境及其特点 意键返回编辑窗口,光标停在出错位置上,可立即进行编辑修改。修改后,再按F9键进行编辑、连接。如此反复,直到没有错误为止,即可生成可执行文件。其运行界面如图2-3所示。
图2-3 程序的编译界面
⒊ 执行程序
直接按Ctrl+F9键,即可执行.EXE文件;或在主菜单中按F10进入主菜单将光带移到“Run”选项,按回车键,弹出一个菜单,选择“Run”选项,回车。
这时并不能直接看到输出结果。输出结果是显示在用户屏幕上,在TC屏幕上看不到,直接按复合键Alt+F5,或选择“Run”菜单中的“User Screen”选项,即可出现用户屏幕,查看输出结果。按任意键返回TC集成环境。
另外,选择“Run”菜单下的“Run”项,或直接按Ctrl+F9键,可将C程序的编译、连接、运行一次性完成,即第3步中包含有第2步的工作。
如果程序需要输入数据,则在运行程序后,光标停留在用户屏幕上,要求在用户输入数据,数据输入完成后程序继续运行,直至输出结果。
如果运行结果不正确或其他原因需要重新修改源程序,则需重新进入编辑状态。修改源程序,重复以上步骤,直到结果正确为止。其程序运行界面如图2-4所示。
⒋ 退出Turbo C集成环境
退出Turbo C环境,返回操作系统状态。可在主菜单选择“File”菜单的“Quit”选项,或者直接按Alt+x。
在执行退出Turbo C环境时,系统将检查一下当前编辑窗口的程序是否已经存盘,若未存盘,系统将弹出一个提示窗口,提示是否将文件存盘,若按“Y”则将当前窗口内的文件存盘后退出;若按“N”则不存盘退出,其程序运行如图2-5所示。
7
沈阳工程学院课程设计报告 第2章 C语言的运行环境及其特点
图2-4 程序的运行界面
图2-5 Turbo C的退出
2.5 C语言结构体
⒈ 结构体说明和结构体变量定义
在C语言中,结构体也是一种数据类型,可以使用结构体变量,因此像其它类型的变量一样,在使用结构体变量时要先对其定义。
定义结构体变量的一般格式为: struct 结构体名 {
类型 变量名; 类型 变量名;
8
沈阳工程学院课程设计报告 第2章 C语言的运行环境及其特点
…
} 结构体变量;
结构体名是结构体的标识符不是变量名。
类型有五种数据类型(整型、浮点型、字符型、指针型和无值型)。
构成结构体的每一个类型变量称为结构体成员,它象数组的元素一样,但数组中元素是以下标来访问的,而结构体是按变量名字来访问成员的。
⒉ 结构体变量的使用
结构体是一个新的数据类型,因此结构体变量也可以像其它类型的变量一样赋值、运算,不同的是结构体变量以成员作为基本变量。
结构体成员的表示方式为: 结构体变量.成员名 如果将\"结构体变量.成员名\"看成一个整体,则这个整体的数据类型与结构体中该成员的数据类型相同,这样就可像前面所讲的变量那样使用。
⒊ 结构体数组和结构体指针 结构体是一种新的数据类型,同样可以有结构体数组和结构体指针。 ① 结构体数组就是具有相同结构类型的变量集合。
② 结构体指针是指向结构体的指针。它由一个加在结构体变量名前的\"*\" 操作符来定义。
⒋ 链表的使用
链表的创建、输出、查找
#include int iNum; float fScore; struct student *pStrNext; }; /*创建链表*/ struct student * create() { struct student *pStrStuHead=0,*pStrStuTemp,*pStrStuTail=0; int iNumTemp; float fScoreTemp; printf(\"input num and score(>=0, <0 end):\\n\"); scanf(\"%d\ scanf(\"%f\ /* 添加结点,当输入成绩值为负数时结束 */ while(fScoreTemp>0) { /*申请结点并填入数据,结点的指针域为0,因为新结点将作为最后一个结点*/ 9 沈阳工程学院课程设计报告 第2章 C语言的运行环境及其特点 pStrStuTemp=(struct student*)malloc(sizeof(struct student)); pStrStuTemp->iNum=iNumTemp; pStrStuTemp->fScore=fScoreTemp; pStrStuTemp->pStrNext=0; /*接入链表*/ if(!pStrStuHead) /*接入第一个结点,头指针、尾指针均指向该结点*/ pStrStuHead=pStrStuTail=pStrStuTemp; else { /*接入非第一个结点*/ pStrStuTail->pStrNext=pStrStuTemp;/*接在尾指针所指结点之后*/ pStrStuTail=pStrStuTemp;/*尾指针指向新加入结点*/ } printf(\"input num and score(>=0, <0 end):\\n\"); scanf(\"%d\ scanf(\"%f\ } return pStrStuHead; } /*输出链表*/ void list(struct student *pStrStuHead) { while(pStrStuHead) { printf(\"%d\%f\\\n\输出*/ pStrStuHead=pStrStuHead->pStrNext;/*移动到下一个结点*/ } } /*查找结点*/ struct student *search(struct student *pStrStuTemp,float fScoreTemp) { while(pStrStuTemp) { if(pStrStuTemp->fScore==fScoreTemp) break; pStrStuTemp=pStrStuTemp->pStrNext;/*移动到下一个结点*/ } return pStrStuTemp; } 10 沈阳工程学院课程设计报告 第3章 系统分析与设计 第3章 系统分析与设计 3.1 系统功能 学生选课管理是一项最基本的课程管理,本程序采用结构体存储数据,再将数据存入文件中,来完成选课管理,其基本功能模块如图3-1所示。 学生选课系统 课程信息 学生信息 选 退增加 增加 从从从从 文键文键 件盘件盘删除 删除 课 课录录录录入入入入 信息存储 ⒈ 录入信息记录完成信息的录入功能,录入信息有两种方式,一种通过键盘输入,输入信息包括:课程的编号﹑名称、主修、性质、学分、课时、教师和学生的学号、姓名,另一种通过读取原有保存的文件来直接录入。 ⒉ 管理信息完成信息的删减功能,增添可通过课程和学生数据库成员的输入来增加课程和学生的相关信息,而删除可按照学生编号或课程编号来删除该学生或课程的相关信息。 ⒊ 学生选课管理,完成学生选课、退课功能,通过结构体指针的指向来实现每个学生的选课、退课需求。 ⒋ 查询信息完成信息的查询功能,可直接通过链表调用来查询到所有学生和课程的相关信息。 ⒌ 存储信息完成录入信息的存储功能,将已经录入的课程和学生信息存储到指定的路径中。 10 图3-1 功能模块图 沈阳工程学院课程设计报告 第3章 系统分析与设计 3.2 功能设计 3.2.1 主函数 主函数是程序的入口,采用模块化设计,主函数不宜复杂,功能尽量在各模块中实现。 利用switch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数其中也实现整个系统的关闭,其主要流程图如图3-2所示。 开始定义局部变量调用主菜单函数进入switch()循环输入1-8中数,选相应操作输入是否为1-8? YN判断键值调用相应函数结束 图3-2 主函数流程图 3.2.2 录入信息函数 新增函数是主函数中必不可少的一部分,在程序运行过程中用来对信息进行详细录入,本程序可通过键盘录入和文件录入两种方式,键盘录入可直接通过结构体成员的输入来录入信息,而文件录入可直接通过读取原有的保存的文件路径来录入相关信息。 11 沈阳工程学院课程设计报告 第3章 系统分析与设计 开始定义局部变量进入switch()循环输入1-2,选择录入方式输入是否为1-2?YNNN通过键盘录入?NY输入结构体成员输入文件路径YY结构体成员为Null?是否存在文件?通过文件录入?NY返回主菜单结束图3-3 录入信息函数流程图 3.2.3 管理信息函数 管理信息函数可以让用户放心的输入想要输入的信息,即使信息错误也可轻松的进行删除添加,管理信息函数流程图如图3-4所示。 开始定义局部变量进入switch()循环输入1-2,选择增加、删除输入是否为1-2?YN增加学生、课程信息?N 输入学生、课程信息删除学生、课程信息?N 输入学生、课程编号返回主菜单结束 图3-4 管理信息函数流程图 12 沈阳工程学院课程设计报告 第3章 系统分析与设计 3.2.4 学生选课信息函数 学生选课也是该程序的重要功能之一,不过其程序设计起来并不复杂,可实现学生的自由选课,选错或换课也不必担心,该程序也设计了退课功能,可自由的删减学生已选的课程,其主要流程图如图3-5所示。 图3-5 选课管理函数流程图 NN开始定义局部变量进入switch()循环输入1-2,选择选课、退课输入是否为1-2?YN学生是否选课?Y输入学生编号是否存在该学生?Y输入课程编号学生是否退课?Y输入学生编号N是否存在该学生?Y输入课程编号返回主菜单结束3.2.5 查询信息函数 查询是程序中重要的的模块,它可以显示课程和选课学生的相关信息,是管理者查看信息的主要途径,本程序分为两种查询方式,一种是直接查询课程和学生信息可直接罗列出所有课程或学生的信息,另一种可通过学号或姓名具体查询某学生的选课信息,其主要流程图如图3-6所示。 13 沈阳工程学院课程设计报告 第3章 系统分析与设计 开始定义局部变量进入switch()循环输入1-2,选择查询方式输入是否为1-2?YN查询课程信息?NY 输出所有课程信息查询学生信息?NY 输出所有学生信息返回主菜单 结束图3-6 查询信息函数流程图 3.2.6 存储信息函数 存储函数是用来对输入的信息及数据进行储存,可以方便用户在程序运行过程中可以及时的更改错误的信息,其主要流程图如图3-7所示。 开始选择存储函数调用fwrite()函数数据是否为Null?N输入文件保存路径Y返回主菜单 结束图3-7 存储信息函数流程图 14 沈阳工程学院课程设计报告 第4章 系统功能实现 第4章 系统功能实现 4.1 主函数 4.1.1 库函数的调用 ⒈ #include \"stdio.h\" 它是标准io库,预处理命令,将头文件stdio.h包含进来,stdio.h是标准输入输出流。有了它以后就可以执行标准输入函数printf和标准输出函数scanf。 ⒉ #include \"stdlib.h\" stdlib头文件即standard library标准库头文件stdlib头文件里包含了C语言的最常用的系统函数。该文件包含了的C语言标准库函数的定义。stdlib.h里面定义了五种类型、一些宏和通用工具函数。类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t;宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等;常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。 ⒊ #include \"conio.h\" conio.h不是C标准库中的头文件。conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。 ⒋ #include \"string.h\" 它是C语言里面关于字符数组的函数定义的头文件,常用函数有strlen、strcmp、strcpy等等。 ⒌ #include \"math.h\" 它是数学函数库,一些数学计算的公式的具体实现是放在math.h里。 4.1.2 初始数据的定义 struct student/*定义结构体 { int num2; 定义学生编号 char name2[20]; 定义学生姓名 int nelenum[50]; 定义课程编号 int nelen; 定义课程学分 struct student * next; }; 结构体指针 struct course 17 沈阳工程学院课程设计报告 第4章 系统功能实现 { }; int num1; 定义课程编号 char name1[20]; 定义课程名称 char major[20]; 定义课程主修 char type[20]; 定义课程类型 int credit; 定义课程学分 int period; 定义课程学时 char teacher[20]; 定义课程教师 int people; 定义选此门课程的人数 struct course *next; 结构体指针 4.1.3 全局变量的定义 N1,N2; /*该数据用于指针链表中的过渡连接数据*/ int i; /*用于存放临时的条数,相当于零时的数据处理*/ char linshi[40]; /*用于存放一些临时信息*/ 4.1.4 主函数流程 main()函数 ⒈ 功能:进入学生选课管理系统登录界面,通过最主要的switch循环语句进入相应功能的函数,大体通过结构体指针和链表,实现数据的输入输出。 其源代码主要运用的函数如下所示: ⒈ 标准输入函数scanf()和标准输出函数printf()。 ⒉ 判断函数if,它的作用是执行真假值判断,根据逻辑计算的真假值,返回不同结果,可以使用函数 if数值和公式进行条件检测。 ⒊ for循环语句for语句格式为: for(表达式1;表达式2;表达式3),语句执行过程如下: ① 先对表达式1赋初值。 ② 判别表达式2是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行表达式3,进入第二次循环,再判别表达式2,则判断表达式2的值为假,不满足条件,就终止for循环,执行循环体外语句。 ⒌ strcmp函数 strcmp函数是比较两个字符串的大小,返回比较的结果。一般形式是 i=strcmp(字符串,字符串),其中字符串1、字符串2均可为字符串常量或变量,是用于存放比较结果的整型变量。比较结果是这样规定的: 18 沈阳工程学院课程设计报告 第4章 系统功能实现 ① 字符串1小于字符串2,strcmp函数返回一个负值。 ② 字符串1等于字符串2,strcmp函数返回零。 ③ 字符串1大于字符串2,strcmp函数返回一个正值。 其主要源代码如下: void main() //主函数 { char m; int i; start: printf(\"\\\*****************************\\n\"); printf(\"\\n\\\\欢迎使用此系统!\\n\"); printf(\"\\\*****************************\\n\"); printf(\"\\n\"); printf(\"\\菜单:\\n\"); printf(\"\\\1.录入课程信息\\n\"); printf(\"\\\2.课程信息管理\\n\"); printf(\"\\\3.录入学生信息\\n\"); printf(\"\\\4.学生信息管理\\n\"); printf(\"\\\5.学生选课\\n\"); printf(\"\\\6.信息存储与浏览\\n\"); printf(\"\\\7.查找学生信息\\n\"); printf(\"\\\8.退出系统\"); printf(\"\\\\\n请输入1-8:\\n\"); scanf(\"%d\{ if(i<1 || i>8) { printf(\"请重新输入:\\n\"); goto start; } } switch(i) { case 1:system(\"cls\"); load(); goto start;break; case 2:system(\"cls\");managementc();goto start;break; case 3:system(\"cls\");input();goto start;break; case 4:system(\"cls\");managements();goto start;break; case 5:system(\"cls\");elective();goto start;break; 19 沈阳工程学院课程设计报告 第4章 系统功能实现 } case 6:system(\"cls\");store();goto start;break; case 7:system(\"cls\");search();goto start;break; case 8:{system(\"cls\"); printf(\"Thank you!\\n\\nBye-Bye!\\n\"); } 4.2 菜单显示 ⒈ 良好的界面可以为用户提供简单而快界快捷的操作,本系统的所有功能都是通过主菜单进行操作。这是一个无参函数,主要实现功能选择,在这个界面里,提供了不同函数功能,根据每个功能前面的序号进行选择,如图4-1所示。 图4-1 主菜单界面 ⒉ 函数介绍: 清晰简洁的主菜单栏,可方便用户输入1-8不同的函数选项进入不同的功能函数进行信息的调控。其源代码主要运用了标准输出函数printf()和清屏函数system (\"cls\")。 ⒊ 主要源代码如下: void main() //主函数 { char m; int i; start: printf(\"\\\*****************************\\n\"); 20 沈阳工程学院课程设计报告 第4章 系统功能实现 printf(\"\\n\\\\欢迎使用此系统!\\n\"); printf(\"\\\*****************************\\n\"); printf(\"\\n\"); printf(\"\\菜单:\\n\"); printf(\"\\\1.录入课程信息\\n\"); printf(\"\\\2.课程信息管理\\n\"); printf(\"\\\3.录入学生信息\\n\"); printf(\"\\\4.学生信息管理\\n\"); printf(\"\\\5.学生选课\\n\"); printf(\"\\\6.信息存储与浏览\\n\"); printf(\"\\\7.查找学生信息\\n\"); printf(\"\\\8.退出系统\"); printf(\"\\\\\n请输入1-8:\\n\"); scanf(\"%d\ { if(i<1 || i>8) { printf(\"请重新输入:\\n\"); goto start; } } switch(i) { case 1:system(\"cls\"); load(); goto start;break; case 2:system(\"cls\");managementc();goto start;break; case 3:system(\"cls\");input();goto start;break; case 4:system(\"cls\");managements();goto start;break; case 5:system(\"cls\");elective();goto start;break; case 6:system(\"cls\");store();goto start;break; case 7:system(\"cls\");search();goto start;break; case 8:{system(\"cls\"); printf(\"Thank you!\\n\\nBye-Bye!\\n\"); } } } 4.3 录入信息函数 ⒈该函数设置了如图4-2所示,键盘录入和文件录入两种不同的录入方式。 21 沈阳工程学院课程设计报告 第4章 系统功能实现 ⒉函数设计介绍: ①从键盘录入(void zhang( )) I 定义指向结构体变量的指针; II 从头指针指向的结构体开始依次录入结构体中所包含的各个成员,如图4-3所示; III直到输入的结构体成员的编号为0,录入结束。 ②从文件录入(void zhang1( )) I 分别定义指向结构体变量的指针和指向文件的指针; II 输入文件的路径,打开文件,若没有找到则有提示,如图4-4所示; III 将文件中的信息依次读出,最后结构体的指针为NULL。 图4-2 选择录入信息方式 图4-3 课程信息录入 22 沈阳工程学院课程设计报告 第4章 系统功能实现 图4-4 文件信息录入 ⒊ 其源代码主要运用的函数如下所示: ① 运用while循环和链表将信息分别输入到结构体中每个成员中。 ② 标准输入函数scanf()和标准输出函数printf()。 主要源代码如下: void zhang() //从键盘录入课程信息 { struct course *p1,*p2; N1=0; p1=p2=(struct course *)malloc(sizeof(struct course)); printf(\"课程编号\课程名称\主修\课程性质\学分\课时\教师\\n\"); scanf(\"%d%s%s%s%d%d%s\it,&p1->period,p1->teacher); p1->people=0; head1=NULL; while(p1->num1!=0) { N1=N1+1; if(N1==1)head1=p1; else p2->next=p1; p2=p1; p1=(struct course * )malloc(sizeof(struct course)); scanf(\"%d%s%s%s%d%d%s\&p1->period,p1->teacher); p1->people=0; } 23 沈阳工程学院课程设计报告 第4章 系统功能实现 p2->next=NULL; } void zhang1() //从文件录入课程信息 { FILE * fp; char filepath[20]; struct course *p1,*p2; N1=0; printf(\"请输入您要读取的路径:\"); getchar(); gets(filepath); if((fp=fopen(filepath,\"r\"))==NULL) { printf(\"找不到 %s 文件!\\n\ exit(0); } p1=p2=(struct course*)malloc(sizeof(struct course)); fscanf(fp,\"%d%s%s%s%d%d%s%d\->credit,&p1->period,p1->teacher,&p1->people); while(!feof(fp)) { N1=N1+1; if(N1==1) head1=p1; else p2->next=p1; p2=p1; p1=(struct course * )malloc(sizeof(struct course)); fscanf(fp,\"%d%s%s%s%d%d%s%d\credit,&p1->period,p1->teacher,&p1->people); } p2->next=NULL; } void load() //录入课程信息函数 { int i; printf(\"\\\录入课程信息\\n\"); printf(\"\\n1.从键盘录入\"); printf(\"\\n2.从文件录入\"); 24 沈阳工程学院课程设计报告 第4章 系统功能实现 printf(\"\\n3.返回主菜单\\n\"); printf(\"请选择1-3:\"); scanf(\"%d\ switch(i) { case 1: zhang(); break; case 2:zhang1();break; case 3:break; } void putin(void) //从键盘录入学生信息 { int i; struct student *p1,*p2; N2=0; p1=p2=(struct student *)malloc(sizeof(struct student)); printf(\"学号\姓名\\n\"); scanf(\"%d%s\p1->nelen=0; for(i=0;i<20;i++) p1->nelenum[i]=0; head2=NULL; while(p1->num2!=0) { N2=N2+1; if(N2==1) head2=p1; else p2->next=p1; p2=p1; p1=(struct student * )malloc(sizeof(struct student)); scanf(\"%d%s\ p1->nelen=0; for(i=0;i<20;i++) p1->nelenum[i]=0; } p2->next=NULL;} void putin2() //从文件录入学生信息 { int i=0; FILE * fp; char filepath[20]; 25 沈阳工程学院课程设计报告 第4章 系统功能实现 struct student *p1,*p2; N2=0; printf(\"请输入您要读取的路径:\"); getchar(); gets(filepath); if((fp=fopen(filepath,\"rt\"))==NULL) { printf(\"找不到 %s 文件!\\n\ exit(0); } p1=p2=(struct student*)malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); head2=NULL; while(!feof(fp)) { i=0; N2=N2+1; if(N2==1) head2=p1; else p2->next=p1; p2=p1; p1=(struct student * )malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); } p2->next=NULL; } void input() //录入学生信息函数 { int i; printf(\"\\\录入学生信息\\n\"); printf(\"\\n1.从键盘录入\\n\"); printf(\"2.从文件录入\\n\"); printf(\"3.返回主菜单\\n\"); printf(\"请输入1-3:\\n\"); scanf(\"%d\switch(i) { case 1:putin(); break; 26 沈阳工程学院课程设计报告 第4章 系统功能实现 case 2:putin2(); break; case 3:break; } } } 4.4 管理信息函数 ⒈ 信息管理函数是该程序必不可少的模块,它可以把用户不需要的信息删除掉并随时可添加重要的信息。本函数可以通过输入结构体成员对相应信息进行增添、删除,执行增加、删除命令主界面如图4-5所示,删除界面如图4-6所示。 图4-5 学生信息管理函数界面 图4-6 删除学生信息界面 2. 其源代码主要除了运用结构体指针链表之外还用了swich语句,其语义是:计算表达 27 沈阳工程学院课程设计报告 第4章 系统功能实现 式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。 如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。 在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。 这是与前面运用的if语句完全不同的,为了避免上述情况, C语言还提供了一种break语句,专用于跳出switch语句,break 语句只有关键字break,没有参数。 主要源代码如下: void insert(struct course *incourse) //增加课程信息 { struct course *p0,*p1,*p2; p1=head1; p0=incourse; if(head1==NULL) { head1=p0; p0->next=NULL; } else { while((p0->num1>p1->num1) && (p1->next!=NULL)) { p2=p1; p1=p1->next; } if(p0->num1<=p1->num1) { if(head1==p1) head1=p0; else p2->next=p0; p0->next=p1; } else { p1->next=p0; p0->next=NULL; } 28 沈阳工程学院课程设计报告 第4章 系统功能实现 } N1=N1+1; } void delc(int num1) //删除课程信息 { struct course *p1,*p2; if(head1==NULL) { printf(\"\\n无法删除!\\n\"); goto end; } p1=head1; while(num1!=p1->num1 && p1->next!=NULL) { p2=p1; p1=p1->next; } if(num1==p1->num1) { if(p1==head1) head1=p1->next; else p2->next=p1->next; printf(\"已删除\\n\"); N1=N1-1; } else printf(\"没有此课程\\n\"); end:; } void managementc() //课程信息管理函数 { struct course * p1; int i,num1; printf(\"\\\课程信息管理\\n\"); printf(\"1.添加课程\\n\"); printf(\"2.删除课程\\n\"); printf(\"3.返回\\n\"); printf(\"请输入1-3:\\n\"); 29 沈阳工程学院课程设计报告 第4章 系统功能实现 scanf(\"%d\ switch(i) { case 1:{p1=(struct course *)malloc(sizeof(struct course)); printf(\"课程编号\课程名称\主修\课程性质\学分\课时\教师\\n\"); scanf(\"%d%s%s%s%d%d%s\dit,&p1->period,p1->teacher); p1->people=0; insert(p1); } break; case 2:printf(\"请输入您要删除的课程编号:\\n\"); scanf(\"%d\ delc(num1); break; case 3:break; } } void inserts(struct student * incouse) //增加学生信息 { struct student *p0,*p1,*p2; p1=head2; p0=incouse; if(head2==NULL) { head2=p0; p0->next=NULL; } else { while((p0->num2>p1->num2) && (p1->next!=NULL)) { p2=p1; p1=p1->next; } if(p0->num2 <= p1->num2) { } if(head2==p1) head2=p0; else p2->next=p0; p0->next=p1; 30 沈阳工程学院课程设计报告 第4章 系统功能实现 else { p1->next=p0; p0->next=NULL;} } N2=N2+1; } void dels(int num2) //删除学生信息 { struct student *p1,*p2; if(head2==NULL) { printf(\"\\n无法删除\\n\"); goto end; } p1=head2; while(num2!=p1->num2 && p1->next!=NULL) { p2=p1; p1=p1->next; } if(num2==p1->num2) { if(p1==head2) head2=p1->next; else p2->next=p1->next; printf(\"已删除\\n\"); N2=N2-1; } else printf(\"没有此学生编号\\n\"); end:; } void managements() //学生信息管理函数 { struct student * p1; int i,num2; printf(\"\\\学生信息管理\\n\"); 31 沈阳工程学院课程设计报告 第4章 系统功能实现 } printf(\"1.添加学生信息\\n\"); printf(\"2.删除学生信息\\n\"); printf(\"3.返回主菜单\\n\"); printf(\"请选择1-3:\\n\"); scanf(\"%d\switch(i) { case 1:{p1=(struct student *)malloc(sizeof(struct student)); p1->nelen=0; p1->nelenum[0]=0; printf(\"num\name\\n\"); scanf(\"%d%s\ inserts(p1);}break; case 2:{printf(\"请输入您要删除的学生编号:\\n\"); scanf(\"%d\ dels(num2); } break; case 3:break; } 4.5 查询函数 ⒈ 查询是程序中重要的的模块,它可以显示用户之前储存的记录,是程序实现其功能的主要途径,本程序为用户提供课程、学生信息浏览和单个学生信息查询两种查询方式,其运行主界面如图4-7所示,单个学生查找信息界面如图4-8所示。 图4-7 课程、学生信息浏览的主界面 32 沈阳工程学院课程设计报告 第4章 系统功能实现 图4-8 查找学生信息函数界面 2.函数设计介绍: ①课程信息浏览(void listc()) I 定义指向结构体变量的指针; II从头指针指向的结构体依次向后,将课程结构体各成员的信息一次输出,直到最后一个结构体指针的值为NULL ②学生信息浏览(void lists()) I 定义指向结构体变量的指针; II从头指针指向的结构体依次向后,将学生结构体各成员的信息一次输出,直到最后一个结构体指针的值为NULL ③按学生姓名查询(void search2()) I定义指向结构体变量的指针; II 输入要查询的学生的姓名,从头指针指向的结构体依次向后,直到找到学生姓名为输入值的那个结构体; III 将该学生结构体成员的各信息依次输出 ④按学生编号查询(void search1()) I定义指向结构体变量的指针; II 输入要查询的学生的编号,从头指针指向的结构体依次向后,直到找到学生编号为输入值的那个结构体; 3. 其源代码主要运用的函数如下: ① switch函数。该函数用于用户选择查询方式。 ② 标准输入输出函数printf和scanf。 ③ for循环函数。该函数使用户输入的项与记录中的各个项循环对比。 主要源代码如下: void listc() //浏览课程信息 { struct course * p; p=head1; 33 沈阳工程学院课程设计报告 第4章 系统功能实现 printf(\"课程编号 课程名称 主修 课程性质 学分 课时 教师 选课人数\\n\"); while(p!=NULL) { printf(\"%6d%13s%13s%10s%7d%7d%12s%5d\\n\ype,p->credit,p->period,p->teacher,p->people); p=p->next; } } void lists() //浏览学生信息 { struct student * p; int a; p=head2; printf(\"学生编号 学生姓名 所选课程编号 所选课程学分\\n\"); while(p!=NULL) { printf(\"%6d%13s\ printf(\"%6d\ for(a=0;p->nelenum[a]!=0&&a<14;a++) printf(\"%d\ printf(\"\\n\"); p=p->next; } } void store() //信息存储浏览函数 { int i; printf(\"\\信息存储和浏览\\n\"); printf(\"1.课程信息浏览\\n\"); printf(\"2.学生信息浏览\\n\"); printf(\"3.信息存储\\n\"); printf(\"4.返回主菜单\\n\"); printf(\"请输入1-4:\\n\"); scanf(\"%d\switch(i) { case(1):listc();break; 34 沈阳工程学院课程设计报告 第4章 系统功能实现 case(2):lists();break; case(3):into();break; case(4):break; } } void search1() //按学生编号查找学生信息 { int a,b; struct student * p; printf(\"请输入学生编号\"); scanf(\"%d\ p=head2; printf(\"学号 学生姓名 所选课程编号 所选课程学分\\n\"); while(p!=NULL) { if(p->num2==a) { printf(\"%6d%13s \ for(b=0;p->nelenum[b]!=0&&b<14;b++) printf(\"%d\ printf(\"%10d\\n\ } p=p->next; } } void search2() //按学生姓名查找学生信息 { int b; char name[20]; struct student * p; printf(\"请输入要查找的学生姓名:\"); scanf(\"%s\p=head2; printf(\"学号 学生姓名 所选课程编号 所选课程学分\\n\"); while(p!=NULL) { if(strcmp(name,p->name2)==0) { printf(\"%6d%13s \ 35 沈阳工程学院课程设计报告 第4章 系统功能实现 for(b=0;p->nelenum[b]!=0&&b<14;b++) printf(\"%d\ printf(\"%10d\\n\ } p=p->next; } } void search() //学生信息查找主函数 { int i; printf(\"\\\学生信息查找\"); printf(\"\\n1.按学号查找\"); printf(\"\\n2.按姓名查找\"); printf(\"\\n3.返回主菜单\"); printf(\"\\n请输入1-3:\"); scanf(\"%d\switch(i) { case 1:search1();break; case 2:search2();break; case 3:break;}} 4.6 学生选课信息函数 1. 学生选课也是该程序的重要功能之一,不过其程序设计起来并不复杂,可实现学生的自由选课,选错或换课也不必担心,该程序也设计了退课功能,可自由的删减学生已选的课程,其运行主界面如图4-9所示。 2. 函数设计介绍: ①学生选课(void elect()) I 分别定义指向课程和学生结构体变量的指针; II 输入要选课的学生的编号,从头指针指向的结构体依次向后,直到找到学生编号为输入值的那个结构体,如不存在则显示要录入学生信息; III 输入要选课程的编号,从头指针指向的结构体依次向后,直到找到课程编号为输入值的那个结构体; IV 在学生结构体对应的所选课程编号中更改信息,所选学分中加上相应分值,课程结构体所选人数中相应加一 ②学生退课(void back()) I 分别定义指向课程和学生结构体变量的指针; II 输入要退课的学生的编号,从头指针指向的结构体依次向后,直到找到学生编号为输 36 沈阳工程学院课程设计报告 第4章 系统功能实现 入值的那个结构体,如不存在则显示要录入学生信息; III 输入要退课程的编号,从头指针指向的结构体依次向后,直到找到课程编号为输入值的那个结构体; IV 在学生结构体对应的所选课程编号中更改信息,所选学分中减去相应分值,课程结构体所选人数中相应减一。 图4-9 学生选课运行主界面 ⒊ 其源代码主要运用的函数如下: ① switch函数。该函数用于用户选择修改的方式。 ② 标准输入输出函数printf和scanf。 ③ for循环函数。该函数使用户输入的项与记录中的各个项循环对比。 主要源代码如下: void elect() //学生选课 { struct student * s; struct course * p; int a,i,b; printf(\"请输入您的学号:\\n\"); scanf(\"%d\ s=head2; while((s->num2)!=a&&s->next!=NULL) s=s->next; if(s->num2!=a) { printf(\"您的信息不存在,请重新输入:\\n\"); goto end; } if((s->nelen)>10) 37 沈阳工程学院课程设计报告 第4章 系统功能实现 { printf(\"您的学分已满\"); goto end; } printf(\"请输入您要选修的课程编号\\n\"); scanf(\"%d\ for(i=0;(s->nelenum[i])==0;i++); s->nelenum[i]=b; p=head1; while((p->num1)!=b) p=p->next; for(i=0;(s->nelenum[i])!=0;i++); s->nelenum[i]=b; (p->people)++; (s->nelen)=(s->nelen)+(p->credit); (p->people)++; end:; } void back() //学生退课 { struct student * p; struct course * p1; int b,i,j,a; printf(\"请输入您的学号:\\n\"); scanf(\"%d\p=head2; while(p->num2!=a&&p!=NULL) p=p->next; if(p==NULL) printf(\"您的信息不存在:\\n\"); else { printf(\"请输入您要退选的课程:\\n\"); scanf(\"%d\p1=head1; while(p1->num1!=b) p1=p1->next; for(i=0;p->nelenum[i]!=b;i++); for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1]; p->nelenum[--j]=0; 38 沈阳工程学院课程设计报告 第4章 系统功能实现 (p->nelen)=(p->nelen)-(p1->credit); (p1->people)--; printf(\"succeed!\\n\"); } } void elective() //学生选课信息管理 { int i; printf(\"\\\学生选课信息管理\\n\"); printf(\"1.选课\\n\"); printf(\"2.退课\\n\"); } printf(\"3.返回主菜单\\n\"); printf(\"请输入1-3:\\n\"); scanf(\"%d\switch(i) { case 1:elect();break; case 2:back();break; case 3:break; } 4.7 存储信息函数 ⒈ 函数介绍: 存储函数是用来对输入的信息及数据进行储存,可以方便用户在程序运行过程中可以及时的更改错误的信息,本程序在存储功能方面略显单薄,所以将存储信息函数放入浏览信息函数中,进入信息存储与浏览界面,运行程序如图4-11所示。 39 沈阳工程学院课程设计报告 第4章 系统功能实现 图4-10 信息存储函数界面 ⒉函数设计介绍: ①课程信息保存(void intoc()) I 定义指向课程结构体变量的指针和指向文件的指针; II 输入保存路径,如果没有保存则有显示; III 将课程信息写入文件中; IV 将课程信息进行保存,关闭文件 ②学生信息保存(void intos()) I 定义指向学生结构体变量的指针和指向文件的指针; II 输入保存路径,如果没有保存则有显示; III 将学生信息写入文件中; IV 将学生信息进行保存,关闭文件 ⒊其源代码主要运用的函数如下: ① 利用if函数进行判断。 ② 利用strcmp函数来判断两字符串是否相等。 ③ 运用for循环,进行重复输入。 ④ 运用指针,打开、读取和关闭文件。 主要源代码如下: void intoc() //存储课程信息 { FILE * fp; struct course * p; char filepath[30]; printf(\"输入路径:\"); getchar(); gets(filepath); if((fp=fopen(filepath,\"w\"))==NULL) 40 沈阳工程学院课程设计报告 第4章 系统功能实现 { printf(\"\\无法储存!\"); exit(0); } p=head1; while(p!=NULL) { fprintf(fp,\"%d%s%s%s%d%d%s%d\\n\iod,p->teacher,p->people); p=p->next; } fclose(fp); printf(\"已储存入%s文件!\\n\ } void intos() //存储学生信息 { FILE * fp; struct student * p; char filepath[30]; printf(\"请输入路径:\"); getchar(); gets(filepath); if((fp=fopen(filepath,\"wt\"))==NULL) { printf(\"\\n 无法储存!\"); exit(0); } p=head2; while(p!=NULL) { fwrite(p,sizeof(struct student),1,fp); p=p->next; } fclose(fp); printf(\"已储存入 %s文件!\\n\} void into() //信息存储函数 { 41 沈阳工程学院课程设计报告 第4章 系统功能实现 int i; printf(\"\\\信息存储\\n\"); printf(\"1.课程信息存储\\n\"); printf(\"2.学生信息存储\\n\"); printf(\"3.返回主菜单\\n\"); printf(\"请输入1-3\\n\"); scanf(\"%d\ switch(i) { case(1):intoc();break; case(2):intos();break; case(3):break; } }42 沈阳工程学院课程设计报告 结论 结 论 通过两周的课程设计,使我们清楚地认识到了实践的重要性,经过有针对性地上机操作,不仅可以提高我们对C语言的认识,更重要的是提高了自己的实践能力。 回顾起此次课程设计,至今我们仍感慨颇多,我们懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,应用中得到经验,才能真正掌握知识。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说文件的建立和保存,链表的运用等等。通过这次课程设计之后,我们把前面所学过的知识又重新温习了一遍。 在设计中我们遇到了很多编程问题,最后在老师的辛勤指导下,我们慢慢的掌握了设计要点,我们做的是一个个人帐务管理系统,内容包括很多。运用的函数也是非常的复杂,我们一组有四个人,我们分工合作,经过两个星期的努力,终于完成了程序,但是总是有很多错误出现,有好多是些小问题,这都是我们粗心大意造成的,所以设计程序一定要仔细,不容一点的马虎。当然也有大问题,也让我认识道理合作的力量,如果没有合作的话,我们不可能在规定时间内完成此次课程设计。 43 沈阳工程学院课程设计报告 致谢 致 谢 尊敬的老师您好! 两周的课程设计匆匆结束,在这段时间内,我们不仅学会了如何设计程序、对错误程序进行调试、如何运用创新能力,更重要的是我们认识到了自己的不足。 在修改程序的过程中,我们遇到许多在书本学习中不曾遇到过的问题,是吕老师和姜老师一次次以渊博的学识、严谨求实的科学精神和一丝不苟的治学态度帮助我们解决问题。课设让我们得到的远远超过了书本。 在系统完善过程中,我们遇到了许多的技术问题,但经过老师的细心指导及查阅大量的资料,最终问题得到了解决。同时,同学也给了我们许多有益的启示、促动和帮助,帮助我们能够顺利的完成此次课设。 在设计接近尾声时,两位老师不辞劳苦的帮助,才能帮助我们能够圆满的完成这次课程设计。没有老师的细心指导,就没有我们的设计成果。张老师和代老师程序设计方面有很多的实践经验,使得我们在设计时遇到的困难都能够迎刃而解。也让我们在设计的过程中少走了许多的弯路。在此我们由衷的向张老师和代老师表示感谢和敬意。 最后我们要再次感谢对我们有深远影响的张老师和代老师。祝您们今后事业一帆风顺,身体康健。 44 沈阳工程学院课程设计报告 参考文献 参考文献 [1]郭翠英.C语言课程设计案例精编.北京:中国水利水电出版社.2004.3 [2]谭浩强.C语言程序设计.北京:清华大学出版社.1999.12 [3]张翔.C语言函数大全.北京:清华大学出版社.2002.4 [4]浦滨.C游戏编程从入门到精通.北京: 北京希望电子出版社.2002.5 [5]陈天洲.C语言高级程序设计.北京:人民邮电出版社.2002 [6]杨旭.C语言程序设计案例教程.北京: 人民邮电出版社.2005 [7]王为青.C语言高级编程及实例剖析.北京:人民邮电出版社.2008.02 [8]徐慧.C语言实例解析精粹.北京:人民邮电出版社.2006.04 [9]姚大鹏 栾好利 张翼英 等编著.C语言程序设计教程习题与上机实训指导.中国水利水电出版社.2005 [10]王为青.C语言实例解析.北京:人民邮电出版社.2008.02 45 因篇幅问题不能全部显示,请点此查看更多更全内容