教师信息管理系统(C语言课程设计)
c语言程序设计课程设计选题 (1)

《C语言程序设计》课程设计课题表一、A类1.职工信息管理系统设计2.职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:3.1、职工信息录入功能(职工信息用文件保存)--输入4.2、职工信息浏览功能--输出5.3、职工信息查询功能--算法6.查询方式:按学历查询、按职工号查询、条件组合查询7.职工信息删除、修改功能(可选项)8.图书信息管理系统设计9.图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
10.试设计一图书信息管理系统,使之能提供以下功能:11.1、图书信息录入功能(图书信息用文件保存)--输入12.2、图书信息浏览功能--输出13.3、图书信息查询功能--算法14.查询方式:按书名查询、按作者名查询、条件组合查询15.图书信息的删除与修改(可选项)16.图书管理系统设计17.图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等18.功能描述:19.1、新进图书基本信息的输入。
20.2、图书基本信息的查询。
21.3、对撤消图书信息的删除。
22.4、为借书人办理注册。
23.5、办理借书手续。
24.6、办理还书手续25.要求:使用文件方式存储数据。
26.实验设备管理系统设计27.实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。
28.主要功能:29.1、能够完成对设备的录入和修改30.2、对设备进行分类统计31.3、设备的破损耗费和遗损处理32.4、设备的查询33.要求:使用文件方式存储数据。
34.学生信息管理系统设计35.学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。
试设计一学生信息管理系统,使之能提供以下功能:36.1、系统以菜单方式工作37.2、学生信息录入功能(学生信息用文件保存)--输入38.3、学生信息浏览功能--输出39.4、学生信息查询功能--按学号查询、按姓名查询、40.5、学生信息的删除与修改(可选项)41.要求:使用文件方式存储数据。
C语言选课管理系统课程设计

C语言选课管理系统课程设计一、教学目标本课程旨在让学生掌握C语言选课管理系统的开发方法,培养其编程能力和问题解决能力。
具体目标如下:1.知识目标:学生能够理解C语言的基本语法、数据结构和常用算法;掌握面向对象编程思想。
2.技能目标:学生能够使用C语言进行程序设计,独立完成选课管理系统的开发;具备调试和优化程序的能力。
3.情感态度价值观目标:培养学生对计算机科学的兴趣,使其认识到编程在实际应用中的重要性,提高其创新精神和团队合作意识。
二、教学内容本课程的教学内容主要包括C语言基础知识、数据结构、算法、面向对象编程和选课管理系统的设计与实现。
具体安排如下:1.C语言基础知识:介绍C语言的基本语法、变量、运算符、控制结构等。
2.数据结构:讲解数组、链表、栈、队列、树等基本数据结构及其应用。
3.算法:学习常用排序算法、查找算法、递归算法等,培养学生的算法思维。
4.面向对象编程:介绍类、对象、封装、继承、多态等基本概念,并学会使用面向对象的方法解决问题。
5.选课管理系统设计与实现:分析系统需求,设计系统架构,编写功能模块,完成系统集成。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:用于讲解基本概念、语法和算法,使学生掌握理论知识。
2.讨论法:学生针对案例进行分析,培养其问题解决能力和团队合作精神。
3.案例分析法:分析实际项目案例,使学生学会将理论知识应用于实际问题。
4.实验法:让学生动手编写代码,培养其编程能力和实践能力。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用权威、实用的教材,如《C程序设计原理与应用》、《C++ Primer》等。
2.参考书:提供相关领域的经典著作,如《算法导论》、《数据结构与算法分析》等。
3.多媒体资料:制作课件、教学视频等,丰富教学手段,提高教学质量。
4.实验设备:保证学生有足够的实践机会,提高其编程能力和实践能力。
教师信息管理系统

课程设计任务书计算机科学与技术专业 2010 年级一班陈金利一、设计题目教师信息管理系统设计二、主要内容教师信息包括教师号、姓名、性别、年龄、学历、职称、工资、住址、电话等(教师号不重复)。
试设计一教师信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作(2)教师信息录入功能--输入(3)教师信息删除功能(4)教师信息浏览功能--输出(5)查询和排序功能:(至少一种查询方式) --算法按教师号查询按职称查询等三、具体要求围绕课程设计的目的和意义,基本要求如下:1、认真阅读《C语言课程设计》指导书,明确课程设计的目的、意义和要求;2、快速总结C程序设计语言的精髓,如:函数的概念、函数的设计和函数的调用;3、快速熟悉Tuber C 或C++的上机环境。
能熟练进行高级编辑操作(特别是字块操作);熟悉步进式、断点跟踪的程序调试方法,提高工作效率。
4、根据“课程设计题目”,采用结构化的程序设计思想,确定系统的总体设计方案、确"定时间进度。
如果是多人共一题,则要首先完成小组内的人员分工及安排,不允许重题现象。
5.学习并了解良好的程序设计风格。
按质、按量、并按时间完成课程设计的任务。
6.提供可运行的课程设计系统,参加上机面试答辩。
本次课程设计的重点是:学会设计并编写函数,掌握好各函数之间的调用关系;利用文件操作函数,建立数据库并完成对数据库的各种操作;掌握几种典型算法的应用(如:冒泡法、选择排序法和折半查找法)。
同时锻炼学生根据题目进行分析、设计、编码、调试程序和书写必要文档的综合处理能力,从实践中学习并体会程序设计的结构化思想和设计方法。
四、进度安排依照教学计划,课程设计时间为3周。
按照软件工程的思想,软件系统的分析设计至关重要,并要充分重视书写“文档”。
避免甚至杜绝“拿到题目就编码”的现象。
建议将时间分为三个阶段:第一阶段,根据题目要求,拿出系统的总体设计方案:即构思各程序模块的算法,并画出相应的N-S图,同时编写相应的文档;第二阶段,根据N-S图编写程序代码并单独调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。
教务管理系统c语言课程设计

教务管理系统c语言课程设计一、教学目标本课程的教学目标是使学生掌握教务管理系统的基本原理和设计方法,能够运用C语言进行简单的教务管理系统开发。
具体分为以下三个部分:1.知识目标:使学生掌握C语言的基本语法、数据结构、算法和面向对象编程思想,了解教务管理系统的功能和结构。
2.技能目标:培养学生具备运用C语言进行程序设计的能力,能够独立完成简单的教务管理系统模块设计与实现。
3.情感态度价值观目标:培养学生对编程事业的热爱,提高学生解决实际问题的积极性,培养学生的团队协作精神和自主学习能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.C语言基础知识:数据类型、运算符、表达式、语句、函数等。
2.数据结构:数组、链表、栈、队列、树、图等。
3.算法:排序算法、查找算法、常用算法分析等。
4.面向对象编程:类、对象、封装、继承、多态等。
5.教务管理系统设计:系统需求分析、系统架构设计、模块划分、功能实现等。
三、教学方法为了达到本课程的教学目标,我们将采用以下几种教学方法:1.讲授法:通过讲解知识点,使学生掌握基本概念和原理。
2.案例分析法:分析实际案例,使学生了解教务管理系统的应用场景和设计方法。
3.实验法:让学生动手编写代码,培养实际编程能力。
4.讨论法:分组讨论问题,培养学生的团队协作精神和解决问题的能力。
四、教学资源为了支持本课程的教学内容和教学方法,我们将准备以下教学资源:1.教材:《C程序设计语言》(K&R)、《C Primer Plus》等。
2.参考书:《数据结构与算法分析》(C语言版)、《深度探索C++对象模型》等。
3.多媒体资料:教学PPT、视频教程、在线编程练习等。
4.实验设备:计算机、网络环境、编程调试工具等。
五、教学评估本课程的评估方式包括以下几个部分:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性。
2.作业:布置课后作业,评估学生的编程能力和对知识的理解程度。
课程信息管理系统c语言

课程信息管理系统c语言课程信息管理系统(C语言)一、引言课程信息管理系统是一种用来管理和组织课程信息的软件系统。
它能够对教学计划、课程表、学生选课等进行管理,帮助学校、教育机构或教师高效地管理课程信息。
本文将通过介绍课程信息管理系统的功能、特点和实施过程,详细阐述C语言在该系统中的应用。
二、功能介绍1. 学生管理:该系统能够记录学生的个人信息,如学号、姓名、班级等,并能进行学生选课管理,包括选课、退课等操作。
2. 课程管理:系统可以管理各门课程的信息,如课程编号、课程名称、学分等,并能进行课程安排,制定教学计划。
3. 教师管理:系统可以记录教师的基本信息,提供教师选课、授课安排等功能。
4. 成绩管理:系统能够记录学生的各科成绩,并提供成绩查询、统计等功能,方便学生和教师进行学业评估。
5. 课程评价:系统可以记录学生对课程的评价和反馈,帮助学校和教师改进教学质量。
三、特点和优势1. 数据集中管理:课程信息管理系统将学生、教师、课程等信息集中管理,方便快捷,减少重复工作。
2. 数据安全性高:系统采用数据库来存储和管理数据,确保数据的安全性和完整性。
3. 操作简便:系统界面友好,操作简单明了,即使对计算机操作不熟悉的教师和学生也能够轻松上手。
4. 信息共享:系统支持信息共享,学生、教师和管理者可以通过系统查询相关信息,提高工作效率。
5. 数据分析功能:系统能够对学生选课情况、成绩分布等进行统计和分析,为教学改革提供数据支持。
四、实施过程1. 需求分析:通过与学校、教师和学生的沟通,明确系统的需求和功能。
2. 系统设计:根据需求分析的结果,设计系统的数据库结构、界面和功能模块。
3. 编码实现:使用C语言编写相应的代码,实现系统的各个功能模块。
4. 测试调试:对系统进行功能测试和性能测试,确保系统的稳定性和可靠性。
5. 上线部署:将系统部署到服务器上,并进行相关的数据迁移和备份工作。
6. 培训和维护:对教师和学生进行系统培训,并进行后期的系统维护和更新。
c语言课程设计带解析

c语言课程设计带解析一、教学目标本课程旨在通过C语言的学习,使学生掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,培养学生具备基本的编程能力,能够编写简单的C语言程序。
同时,通过编程实践,培养学生的逻辑思维能力、问题解决能力和创新意识。
此外,通过课程的学习,使学生了解计算机编程的基本原理和方法,培养学生对计算机科学的兴趣和热情。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识。
具体包括以下几个方面:1.C语言的基本语法和规则,如变量声明、数据类型、运算符、表达式等。
2.控制结构,如条件语句、循环语句等。
3.函数的定义和调用,包括主函数、用户自定义函数等。
4.基本的数据结构,如数组、字符串等。
5.指针的概念和应用。
6.结构体和文件操作等高级内容。
三、教学方法本课程采用讲授法、实践法、讨论法等多种教学方法相结合。
在教学过程中,教师将理论知识与实际编程案例相结合,通过生动的讲解和示例,帮助学生理解和掌握C语言的基本语法和编程方法。
同时,通过上机实践和编程作业,使学生能够将所学的知识应用于实际编程中,提高编程能力。
此外,鼓励学生之间的讨论和合作,培养学生的团队协作能力和问题解决能力。
四、教学资源为了保证本课程的顺利进行,需要准备以下教学资源:1.教材:《C程序设计语言》(K&R)或《C语言 Primer》等。
2.参考书籍:提供一些相关的参考书籍,如《C专家编程》、《C陷阱与缺陷》等,供学生自主学习参考。
3.在线资源:提供一些在线编程平台和资源,如LeetCode、Codeforces等,供学生进行编程练习和挑战。
4.实验设备:提供计算机实验室,让学生能够进行上机实践和编程实验。
以上是对本课程的教学目标、教学内容、教学方法和教学资源的详细设计。
希望通过这些设计,能够帮助学生更好地学习和掌握C语言,培养学生的编程能力和计算机科学素养。
c语言课程设计职工信息管理系统

c语言课程设计职工信息管理系统一、教学目标本课程的教学目标是使学生掌握C语言职工信息管理系统的基本概念、设计和实现方法。
通过本课程的学习,学生应能理解职工信息管理系统的需求分析、系统设计、编码实现和测试评估等环节,掌握C语言编程的基本技能,并培养解决实际问题的能力。
具体来说,知识目标包括:掌握职工信息管理系统的功能模块及其相互关系;理解C语言的数据类型、运算符、控制结构、函数等基本语法;了解软件工程的基本原理和方法。
技能目标包括:能够使用C语言独立完成职工信息管理系统的设计和实现;具备基本的调试和优化代码的能力;能够进行团队合作,合理分工,共同完成项目。
情感态度价值观目标包括:培养学生对计算机科学的兴趣和热情,提高他们对编程学习的自信心;培养学生具备良好的编程习惯和团队协作精神,增强他们的责任感和使命感。
二、教学内容本课程的教学内容主要包括以下几个部分:1.职工信息管理系统的基本概念和架构:介绍职工信息管理系统的功能模块,如职工信息录入、查询、修改和删除等,以及各模块之间的关系。
2.C语言基础知识:讲解C语言的数据类型、运算符、控制结构、函数等基本语法。
3.软件工程方法:介绍需求分析、系统设计、编码实现、测试评估等软件工程基本原理和方法。
4.职工信息管理系统的实现:通过实际编码,讲解如何使用C语言实现职工信息管理系统的各个功能模块。
5.调试与优化:教授如何使用调试工具对代码进行调试,以及如何对代码进行优化,提高系统性能。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式,包括:1.讲授法:讲解C语言的基本语法和职工信息管理系统的设计原理。
2.案例分析法:分析实际案例,使学生更好地理解职工信息管理系统的实现过程。
3.实验法:安排实验课程,让学生亲自动手编写代码,实现职工信息管理系统。
4.小组讨论法:学生进行小组讨论,分享学习心得,互相答疑解惑。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:《C语言程序设计》等。
课程信息管理系统c语言课程设计

课程信息管理系统c语言课程设计一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握课程信息管理系统C语言的基本概念、原理和编程方法;技能目标要求学生能够运用C语言进行简单的程序设计和调试;情感态度价值观目标要求学生培养良好的编程习惯和团队合作精神。
通过本课程的学习,学生将了解课程信息管理系统C语言的基本语法和编程技巧,掌握C语言程序设计的基本方法,培养编程思维和解决问题的能力。
同时,学生将学会与他人合作,培养团队合作精神和良好的编程习惯。
二、教学内容根据课程目标,本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数、数组、指针等。
教学大纲将按照教材的章节进行安排,每个章节都会有相应的教学内容和教学任务。
具体的教学内容安排如下:1.第一章:C语言概述和基本语法2.第二章:数据类型和运算符3.第三章:控制结构4.第四章:函数和数组5.第五章:指针和字符串6.第六章:文件操作和程序设计三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法。
包括讲授法、讨论法、案例分析法和实验法等。
1.讲授法:通过教师的讲解,向学生传授C语言的基本概念和原理。
2.讨论法:学生进行小组讨论,促进学生之间的交流和合作。
3.案例分析法:通过分析实际案例,让学生了解C语言在实际应用中的作用和编程技巧。
4.实验法:安排实验室实践环节,让学生动手编写程序,培养编程能力和实验技能。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备适当的教学资源。
包括教材、参考书、多媒体资料和实验设备等。
1.教材:选择适合本课程的教材,作为学生学习的主要参考资料。
2.参考书:提供相关的参考书籍,供学生深入学习和拓展知识。
3.多媒体资料:制作多媒体课件和教学视频,帮助学生更好地理解和掌握知识点。
4.实验设备:提供计算机实验室,让学生进行实验和实践,提高编程能力和实验技能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书计算机科学与技术专业年级班一、设计题目教师信息管理系统设计二、主要内容教师信息包括教师号、姓名、性别、年龄、学历、职称、工资、住址、电话等(教师号不重复)。
试设计一教师信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作(2)教师信息录入功能--输入(3)教师信息删除功能(4)教师信息浏览功能--输出(5)查询和排序功能:(至少一种查询方式) --算法按教师号查询按职称查询等三、具体要求围绕课程设计的目的和意义,基本要求如下:1、认真阅读《C语言课程设计》指导书,明确课程设计的目的、意义和要求;2、快速总结C程序设计语言的精髓,如:函数的概念、函数的设计和函数的调用;3、快速熟悉Tuber C 或C++的上机环境。
能熟练进行高级编辑操作(特别是字块操作);熟悉步进式、断点跟踪的程序调试方法,提高工作效率。
4、根据“课程设计题目”,采用结构化的程序设计思想,确定系统的总体设计方案、确"定时间进度。
如果是多人共一题,则要首先完成小组内的人员分工及安排,不允许重题现象。
5.学习并了解良好的程序设计风格。
按质、按量、并按时间完成课程设计的任务。
6.提供可运行的课程设计系统,参加上机面试答辩。
本次课程设计的重点是:学会设计并编写函数,掌握好各函数之间的调用关系;利用文件操作函数,建立数据库并完成对数据库的各种操作;掌握几种典型算法的应用(如:冒泡法、选择排序法和折半查找法)。
同时锻炼学生根据题目进行分析、设计、编码、调试程序和书写必要文档的综合处理能力,从实践中学习并体会程序设计的结构化思想和设计方法。
四、进度安排依照教学计划,课程设计时间为3周。
按照软件工程的思想,软件系统的分析设计至关重要,并要充分重视书写“文档”。
避免甚至杜绝“拿到题目就编码”的现象。
建议将时间分为三个阶段:第一阶段,根据题目要求,拿出系统的总体设计方案:即构思各程序模块的算法,并画出相应的N-S图,同时编写相应的文档;第二阶段,根据N-S图编写程序代码并单独调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。
三个阶段时间分配的大概比例是:35:45:20。
五、完成后应上交的材料1.课程设计的题目、系统的总功能和各子模块的功能;2.题目的设计思想(或算法)简述;3.主要程序的框图(要求用N-S图);4.源程序代码(要求在关键的位置有注释,从而增加程序的可读性);5.课程设计的总结报告,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。
以上完成的源程序及相关文档,填写在《课程设计说明书》上,要求干净整洁,符合课程设计的要求和规范。
六、总评成绩指导教师签名日期年月日系主任审核日期年月日目录一.题目设计思想简述 (5)二.程序的N—S图 (7)2.1总程序的N—S图 (7)2.2各子函数的N—S图 (7)2.2.1教师信息录入函数 (8)2.2.2教师信息浏览函数 (8)2.2.3教师信息删除函数 (9)2.2.4教师信息查询函数 (9)2.2.5教师信息排序函数 (10)三.源程序代码 (11)四.程序运行效果图 (33)4.1登陆界面 (33)4.2菜单栏 (33)4.3录入功能 (34)4.4浏览功能 (34)4.5删除功能 (35)4.6查询功能 (35)4.7排序功能 (36)五.总结报告 (37)5.1课程设计中遇到的主要问题和解决方法 (37)5.2你的创新和得意之处 (37)5.3设计中存在的不足及改进的设想 (37)5.4本次课程设计的感想和心得体会 (38)一.题目设计思想简述如上图所示,该教师信息管理系统主要是一个以动态链表的应用为基础来实现对教师信息的录入,查询,删除等功能。
定义教师结构体如下:struct teacher{long num;//教师号char name[20];//姓名char sex[5];//性别int age;//年龄char edu[20];//学历char title[20];//职称long wage;//工资char addr[100]; //地址char telep[15];//电话struct teacher *next;}*head=NULL;主函数只进行口令函数和菜单栏函数的调用,主要工作通过菜单函数实现。
口令为123456。
菜单栏函数通过用switch语句实现不同功能的选择,不同的功能用不同的子函数实现。
录入教师信息通过建立动态单链表来实现。
浏览教师信息则通过将链表所有数据顺序输出来实现。
查询功能只要从链表头开始不断往下一个结点读取信息跟所要查找的信息比较,直到读取到的信息跟所要查找的信息相同或链表尾为止,并把此结点的信息输出。
删除教师信息的函数是通过查找链表中有该信息的结点后将该结点移出链表,即使该结点前一个结点直接指向该结点后面的结点来达到删除信息的目的。
排序函数是通过交换结点在链表中的位置来实现的,即使得各结点在链表中的位置便是所要得到的排序该信息应在的位置,这样直接顺序输出链表的信息时就能按所要的排序输出了。
二.程序的N—S图2.1总程序的N—S图说明:各功能都是通过调用子函数来实现的。
2.2各子函数的N—S图子函数主要包括教师信息录入,教师信息浏览,教师信息删除,教师信息查询和教师信息排序等5个。
在退出系统时调用了一个保存信息到文件中的函数,该函数只是简单的应用了文件的读写功能,在此不写出其N—S图。
2.2.1教师信息录入函数说明:p1=(struct teacher *)malloc(LEN)中LEN是在程序开头的宏定义(#define LEN sizeof(struct teacher))。
其中n为全局变量,用来统计链表的结点数,以下出现的n都是同一个。
2.2.2教师信息浏览函数说明:实际程序中在链表头为空是提供了可以浏览之前保存在文件中的信息的功能,当选择该功能时就调用了一个读取文件的函数。
该函数只是对文件读写的简单应用,详细请看后面第三部分代码,这里不写出其N-S图。
2.2.3教师信息删除的函数2.2.4教师信息查询的函数在查询方面程序为用户提供了4种不同方式的查询,每一种方式的查询为一个子函数,此时也是采用一个菜单栏函数进行选择查询方式并调用该种方式的函数。
菜单栏函数跟主程序菜单栏的算法一样,此处只给出查询函数的N—S图。
说明:该N—S图是对应姓名,教师号,职称,年龄四种查找方式的函数的。
当选择教师号查找时,输入i的即为教师号,与i做比较的为p中的教师号,选择其他查找方式时类似。
2.2.5教师信息排序函数排序也跟查询一样给出多种排序方式并采用菜单栏函数,此处也只给出排序函数的N—S图。
说明:p1,p2指向的结点用来比较,p3,p4是用来记录结点的,当选用的排序方式不同,p1,p2用来比较的信息为所选方式的信息。
三.源程序代码#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <string.h>#define LEN sizeof(struct teacher)//宏定义结构体字节数int n=0;struct teacher//定义结构体{long num;//教师号char name[20];//姓名char sex[5];//性别int age;//年龄char edu[20];//学历char title[20];//职称long wage;//工资char addr[100];//地址char telep[15];//电话struct teacher *next;//指向下一个结点}*head=NULL;void key()//口令检查的函数{int i;long a;for(i=0;i<3;i++){printf("请输入口令(还可输入%d次):\n",3-i);scanf("%ld",&a);if(a==123456)//检查口令是否正确{printf("欢迎进入系统\n");break;}else printf("口令错误\n");}if(i==3)//判断可以输入口令的次数是否用完{printf("可使用的口令输入次数已用完,将自动退出!\n");exit(0);}}void save()//把数据存入文件的函数{FILE *fp;int i;char filename[20];struct teacher *p;printf("\n 是否把此次登录系统录入和修改后的教师信息保存到文件中\n");printf(" 1:【是】0:【否】\n请选择:");scanf("%d",&i);while((i!=0)&&(i!=1))//判断输入的选择是否有效{printf("选择无效,请重新输入正确选项:");scanf("%d",&i);}if(i==1)//判断是否选择了要保存{printf("\n请输入要保存数据的文件名:");scanf("%s",filename);if((fp=fopen(filename,"wb"))==NULL){printf("\n无法打开文件\n");exit(0);}for(p=head;p!=NULL;p=p->next)if(fwrite(p,sizeof(struct teacher),1,fp)!=1)printf("\n此处数据有误\n");fclose(fp);}exit(0);}void read()//从文件读出数据的函数{struct teacher teach[299],temp;int i=0;FILE *fp;char filename[20];printf("\n请输入存有教师信息的文件名:");scanf("%s",filename);if((fp=fopen(filename,"rb"))==NULL){printf("\n无法打开文件\n");exit(0);}fseek(fp,-sizeof(struct teacher),2);/*将位置指针从文件末尾后退一个结构体的字节数*/fread(&temp,sizeof(struct teacher),1,fp);/*从所指向的文件中读出数据存储到结构体变量temp中*/fseek(fp,0,0);//将位置指针移到文件的开头if(fread(&teach[i],sizeof(struct teacher),1,fp)==1)/*判断文件开头读入的数据是否为空*/{printf("\n存有的教师信息如下:\n");while(teach[i].num!=temp.num)//进行循环读取文件{printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,",teach[i].num,teach[i].name,teach[i].sex,teach[i].age,teach[i].edu);printf("职称:%s\n 月薪:%ld,住址:%s,电话:%s\n",teach[i].title,teach[i].wage,teach[i].addr,teach[i].telep);i=i+1;fread(&teach[i],sizeof(struct teacher),1,fp);/*从文件中读入数据存储到结构体变量teach【i】中*/}//输出文件中的最后一个信息printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,",teach[i].num,teach[i].name,teach[i].sex,teach[i].age,teach[i].edu);printf("职称:%s\n 月薪:%ld,住址:%s,电话:%s\n",teach[i].title,teach[i].wage,teach[i].addr,teach[i].telep);fclose(fp);}else printf("该文件中无教师信息\n");//文件为空时输出此处}void creat()//录入教师信息的函数{struct teacher *p1,*p2,*p3;p1=p2=(struct teacher *)malloc(LEN);/*申请一个结构体字节数的空间用来存储一个教师的信息*/printf("请输入一位教师的教师号(结束录入请输入0):");scanf("%ld",&p1->num);if(p1->num!=0)//判断用户是要结束录入还是要存储信息if(head==NULL) head=p1;/*判断链表是否为空,是则将链表头指向p1*/else //链表不为空则将链表尾指向p1{p3=head;//p3用来记录链表的尾部while(p3->next!=NULL)/*若p3不是链表尾则将p3指向下一个结点*/p3=p3->next;p3->next=p1;//将最后一个结点指向p1}while(p1->num!=0)//判断用户是否结束录入功能{//录入该教师号的教师对应的信息printf("姓名: ");scanf("%s",p1->name);printf("性别:");scanf("%s",p1->sex);printf("年龄:");scanf("%d",&p1->age);printf("学历:");scanf("%s",p1->edu);printf("职称:");scanf("%s",p1->title);printf("月薪:");scanf("%ld",&p1->wage);printf("住址:");scanf("%s",p1->addr);printf("电话:");scanf("%s",p1->telep);n=n+1;//给统计录入的教师数n加一/*判断是否为第一个录入的信息,是则将链表头指向p1,否则将p2指向p1*/if(n==1) head=p1;else p2->next=p1;p2=p1;//p2用来记录链表的最后一个结点p1=(struct teacher *)malloc(LEN);//重新申请空间printf("请输入一位教师的教师号(结束录入请输入0): ");scanf("%ld",&p1->num);}p2->next=NULL;//将最后一个结点指向空}void print()//输出教师信息的函数{struct teacher *p;int i;p=head;if(head!=NULL)//判断链表是否为空{printf("\n这%d位教师的信息为:\n",n);do{printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%s\n",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪:%ld,住址:%s,电话:%s\n",p->wage,p->addr,p->telep);p=p->next;//将下一个结点的首地址赋给p}while(p!=NULL);//到链表尾时结束循环}else//链表为空时执行以下部分{printf("\n你此次登录系统还没有录入教师信息,可进行以下操作:\n");printf(" 1:【浏览以前保存在文件中的教师信息】2:【开始录入教师信息】\n");printf(" 3:【退出系统】4:【返回菜单】\n");printf("请选择:");scanf("%d",&i);while((i<1)&&(i>4)){printf("选择无效,请重新输入正确选项:");scanf("%d",&i);}if(i==1) read();//调用从文件读取数据的函数if(i==2) creat();//调用录入信息的函数if(i==3) exit(0);//退出系统}}void del()//删除教师信息的函数{struct teacher *p1,*p2;long i;if(head==NULL)//判断链表是否为空{printf("\n还未录入过教师信息\n");//链表为空时输出return;}printf("请输入要删除教师信息的教师号:");scanf("%ld",&i);p1=head;while(i!=p1->num)//直到p1指向的结点是要删除的信息位置{if(p1->next==NULL) break;//p1的下个结点为空则退出循环p2=p1;//p2用来记录p1的前一个结点p1=p1->next;//p1指向下一个结点}if(i==p1->num)//判断p1是否为要删除的信息{if(p1==head) head=p1->next;/*若p1为头结点则将头指针指向p1的下一个结点*/else p2->next=p1->next;/*p1非头结点则将p1后面的结点连接到p1前一个结点的后面*/printf("\n已删除教师号为%ld的教师信息\n",i);n=n-1;//记录教师数的n要减一}//p1不是要删除的信息则表示要删除的信息不再链表中else printf("\n已录入的教师信息中没有教师号为%ld的\n",i);return;}void sort1()//按教师号进行排序的函数{struct teacher *p1,*p2,*p3,*p4;int i,j;if(head==NULL){printf("\n还未录入过教师信息\n");return;}if(head->next!=NULL) //判断是否只有一个信息{//用冒泡法排序p1=head;//p1记录用来比较的两个结点中的前面一个p2=head->next;//p2记录比较的两个结点中的后面个for(i=1;i<n;i++)//实现n-1趟比较的外循环{for(j=0;j<n-i;j++)//在每一趟中进行n-i次比较的内循环{if(p1->num>p2->num)/*比较相邻两个结点中教师号大小*/{//当p1的教师号大时则对调两个结点的位置if(p1==head) head=p2;else p3->next=p2;/*p1为头结点时则将头指针指向p2,否则就将p2连接到用来记录p1前一个结点的p3的后面*/p4=p2->next;//p4用来记录p2后面的结点p2->next=p1;//p1的结点换到原来p2的位置p1->next=p4;//原来p2后面的结点连接到p1p3=p2;//p3记录下p2的位置p2=p4;//p2指向原来位置的下一个结点}else/*p1中教师号没有打过p2中教师号,则将p1,p2都指向它们各自位置的下一个结点*/{p3=p1;//记录p1后移一位后它前个结点的位置p1=p2;p2=p2->next;}}p1=head;//p1指向链表头,开始下一趟外循环的准备p2=p1->next;//p2指向链表第二个结点}}printf("\n按教师号排序后的教师信息如下:\n");print();//调用教师信息浏览函数}void sort2()//按月薪排序的函数,算法跟按教师号排序的一样{struct teacher *p1,*p2,*p3,*p4;int i,j;if(head==NULL){printf("\n还未录入过教师信息\n");return;}if(head->next!=NULL){p1=head;p2=head->next;for(i=1;i<n;i++){for(j=0;j<n-i;j++){if(p1->wage>p2->wage){if(p1==head) head=p2;else p3->next=p2;p4=p2->next;p2->next=p1;p1->next=p4;p3=p2;p2=p4;}else{p3=p1;p1=p2;p2=p2->next;}}p1=head;p2=p1->next;}}printf("\n按月薪排序后的教师信息如下:\n");print();}void sort3()//按年龄排序的函数,算法跟按教师号排序的一样{struct teacher *p1,*p2,*p3,*p4;int i,j;if(head==NULL){printf("\n还未录入过教师信息\n");return;}if(head->next!=NULL){p1=head;p2=head->next;for(i=1;i<n;i++){for(j=0;j<n-i;j++){if(p1->age>p2->age){if(p1==head) head=p2;else p3->next=p2;p4=p2->next;p2->next=p1;p1->next=p4;p3=p2;p2=p4;}else{p3=p1;p1=p2;p2=p2->next;}}p1=head;p2=p1->next;}}printf("\n按年龄排序后的教师信息如下:\n");print();}void choose1()//选择排序方式的函数{int i;printf(" 排序方式\n");printf(" 1:【按教师号排序】2:【按年龄排序】\n");printf(" 3:【按月薪排序】\n");printf("请选择:");scanf("%d",&i);while((i<1)||(i>3)){printf("选择无效,请重新输入正确选项:");scanf("%d",&i);}switch(i){case 1:sort1();break;case 2:sort3();break;case 3:sort2();break;}}void search1()//按教师号查找的函数{struct teacher *p;long i;//存储用户输入的想要删除的教师号if(head==NULL){printf("\n还未录入过教师信息\n");return;}printf("请输入要查找的教师信息的教师号:");scanf("%ld",&i);for(p=head;p!=NULL;p=p->next)//p顺序指向结点与i比较,找出有i的数据的结点并输出if(p->num==i){printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%s\n",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪:%ld,住址:%s,电话:%s\n",p->wage,p->addr,p->telep);return;}printf("已录入的教师信息中不存在该教师号\n");}void search2()//按姓名查找的函数{struct teacher *p;char i[20];//记录用户输入的想要删除的姓名int j=0;//j用来记录找到了多少个信息if(head==NULL){printf("\n还未录入过教师信息\n");return;}printf("请输入要查找的信息的教师姓名:");scanf("%s",i);for(p=head;p!=NULL;p=p->next)if(strcmp(p->name,i)==0)//比较p指向的结点中的姓名跟i的是否一致,是则输出{printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%s\n",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪:%ld,住址:%s,电话:%s\n",p->wage,p->addr,p->telep);j=j+1;//每输出一个教师的信息则j加一}if(j==0) printf("已录入的教师信息中不存在该姓名的教师\n");}void search3()//按职称查找的函数,算法与按姓名查找的一样{struct teacher *p;char i[20];int j=0;if(head==NULL){printf("\n还未录入过教师信息\n");return;}printf("请输入要查找的信息的教师职称:");scanf("%s",i);for(p=head;p!=NULL;p=p->next)if(strcmp(p->title,i)==0){printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%s\n",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪:%ld,住址:%s,电话:%s\n",p->wage,p->addr,p->telep);j=j+1;}if(j==0) printf("已录入的教师信息中不存在该职称的教师\n");}void search4()//按年龄查找的函数,算法与按教师号查找的一样{struct teacher *p;int i,j=0;if(head==NULL){printf("\n还未录入过教师信息\n");return;}printf("请输入要查找的信息的教师年龄:");scanf("%d",&i);for(p=head;p!=NULL;p=p->next)if(p->age==i){printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%s\n",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪:%ld,住址:%s,电话:%s\n",p->wage,p->addr,p->telep);j=j+1;}if(j==0) printf("已录入的教师信息中不存在该年龄的教师\n");}void choose2()//选择查找方式的函数{int i;printf(" 查询方式\n");printf(" 1:【按教师号查询】2:【按姓名查询】\n");printf(" 3:【按职称查询】4:【按年龄查询】\n");printf("请选择:");scanf("%d",&i);while((i<1)||(i>4)){printf("选择无效,请重新输入正确选项:");scanf("%d",&i);}switch(i){case 1:search1();break;case 2:search2();break;case 3:search3();break;case 4:search4();break;}}void menu()//菜单栏函数{int i;printf(" 菜单\n");printf(" 1:【教师信息录入】2:【教师信息输出】\n");printf(" 3:【教师信息删除】4:【查询个人信息】\n");printf(" 5:【排序】6:【退出系统】\n");printf("请选择: ");scanf("%d",&i);while((i<1)||(i>6)){printf("选择无效,请重新输入正确选项:");scanf("%d",&i);}switch(i){case 1:creat();break;case 2:print();break;case 3:del();break;case 4:choose2();break;case 5:choose1();break;case 6:save();}menu();}void main()//主函数{key();menu();}四.程序运行效果图4.1登陆界面4.2菜单栏4.3录入功能4.4浏览功能4.5删除功能4.6查询功能4.7排序功能五.总结报告5.1课程设计中遇到的主要问题和解决方法在这次的C语言课程设计的编程中,由于以前对链表和文件这两部分的内容了解过少,因此在编程中涉及到这两方面的内容时,照成了很大的阻碍,最主要是在对链表的结点进行交换,对文件某些特殊的读写不清楚。