教师信息管理系统(C语言课程设计)_第1页
教师信息管理系统(C语言课程设计)_第2页
教师信息管理系统(C语言课程设计)_第3页
教师信息管理系统(C语言课程设计)_第4页
教师信息管理系统(C语言课程设计)_第5页
免费预览已结束,剩余35页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 课程设计任务书 计算机科学与技术 专业 2010 年级 一 班 陈金利 一 设计题目设计题目 教师信息管理系统设计 二 二 主要内容主要内容 教师信息包括教师号 姓名 性别 年龄 学历 职称 工资 住址 电话等 教师号不重复 试设计一教师信息管理系统 使之 能提供以下功能 1 系统以菜单方式工作 2 教师信息录入功能 输入 3 教师信息删除功能 4 教师信息浏览功能 输出 5 查询和排序功能 至少一种查询方式 算法 按教师号查询 按职称查询等 三 三 具体要求具体要求 围绕课程设计的目的和意义 基本要求如下 1 认真阅读 C 语言课程设计 指导书 明确课程设计的目的 意义和要求 2 快速总结 C 程序设计语言的精髓 如 函数的概念 函数的 设计和函数的调用 2 3 快速熟悉 Tuber C 或 C 的上机环境 能熟练进行高级编辑 操作 特别是字块操作 熟悉步进式 断点跟踪的程序调试方法 提高工作效率 4 根据 课程设计题目 采用结构化的程序设计思想 确定系 统的总体设计方案 确 定时间进度 如果是多人共一题 则要首先完 成小组内的人员分工及安排 不允许重题现象 5 学习并了解良好的程序设计风格 按质 按量 并按时间完 成课程设计的任务 6 提供可运行的课程设计系统 参加上机面试答辩 本次课程设计的重点是 学会设计并编写函数 掌握好各函数之 间的调用关系 利用文件操作函数 建立数据库并完成对数据库的各 种操作 掌握几种典型算法的应用 如 冒泡法 选择排序法和折半 查找法 同时锻炼学生根据题目进行分析 设计 编码 调试程序 和书写必要文档的综合处理能力 从实践中学习并体会程序设计的结 构化思想和设计方法 四 四 进度安排进度安排 依照教学计划 课程设计时间为 3 周 按照软件工程的思想 软 件系统的分析设计至关重要 并要充分重视书写 文档 避免甚至 杜绝 拿到题目就编码 的现象 建议将时间分为三个阶段 第一阶段 根据题目要求 拿出系统的总体设计方案 即构思各 程序模块的算法 并画出相应的 N S 图 同时编写相应的文档 第二阶段 根据 N S 图编写程序代码并单独调试 再将调试通过 的各个子模块进行集成调试 第三阶段 归纳文档资料 按要求填写在 课程设计说明书 上 并参加答辩 3 三个阶段时间分配的大概比例是 35 45 20 五 五 完成后应上交的材料完成后应上交的材料 1 课程设计的题目 系统的总功能和各子模块的功能 2 题目的设计思想 或算法 简述 3 主要程序的框图 要求用 N S 图 4 源程序代码 要求在关键的位置有注释 从而增加程序的可 读性 5 课程设计的总结报告 主要包括以下内容 1 课程设计中遇到的主要问题和解决方法 2 你的创新和得意之处 3 设计中存在的不足及改进的设想 4 本次课程设计的感想和心得体会 以上完成的源程序及相关文档 填写在 课程设计说明书 上 要求干净整洁 符合课程设计的要求和规范 六 六 总评成绩总评成绩 指导教师指导教师 签名日期签名日期 年年 月月 日日 系系 主主 任任 审核日期审核日期 年年 月月 日日 4 目录目录 1 题目设计思想简 述 5 2 程序的 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 5 2 2 5 教师信息排序函 数 10 3 源程序代 码 11 4 程序运行效果 图 33 4 1 登陆界 面 33 4 2 菜单 栏 33 4 3 录入功 能 34 4 4 浏览功 能 34 4 5 删除功 能 35 4 6 查询功 6 能 35 4 7 排序功 能 36 5 总结报 告 37 5 1 课程设计中遇到的主要问题和解决方 法 37 5 2 你的创新和得意之 处 37 5 3 设计中存在的不足及改进的设 想 37 5 4 本次课程设计的感想和心得体 会 38 1 题目设计思想简述题目设计思想简述 主函数 退 出 系 统 识别口令的函数 菜单栏函数 录入 教师 信息 的函 数 查询 教师 信息 的函 数 删除 教师 信息 的函 数 浏览 教师 信息 的函 数 教师 信息 排序 的函 数 7 如上图所示 该教师信息管理系统主要是一个以动态链表的应用 为基础来实现对教师信息的录入 查询 删除等功能 定义教师结构体如下 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 语句实现不同功能的选择 不同的功能 用不同的子函数实现 录入教师信息通过建立动态单链表来实现 浏览教师信息则通过将链表所有数据顺序输出来实现 查询功能只要从链表头开始不断往下一个结点读取信息跟所要查 找的信息比较 直到读取到的信息跟所要查找的信息相同或链表尾为 8 止 并把此结点的信息输出 删除教师信息的函数是通过查找链表中有该信息的结点后将该结 点移出链表 即使该结点前一个结点直接指向该结点后面的结点来达 到删除信息的目的 排序函数是通过交换结点在链表中的位置来实现的 即使得各结 点在链表中的位置便是所要得到的排序该信息应在的位置 这样直接 顺序输出链表的信息时就能按所要的排序输出了 2 程序的程序的 N S 图图 2 1 总程序的总程序的 N S 图图 i 0 当 i 3 当 b6 输入口令 a T a 123456 F 假 退出循环i i 1 T i 3 F 口令 3 次 输入 错误 退出 系统 输入所选择的功能 b 重新输入所要选择的功能 b T b 1 F 教师 信息 录入 功 能 T b 2 F 教师 信息 浏览 功 能 T b 3 F 教师 信息 删除 功 能 T b 4 F 9 说明 各功能都是通过调用子函数来实现的 2 2 各子函数的各子函数的 N S 图图 子函数主要包括教师信息录入 教师信息浏览 教师信息删除 教师信息查询和教师信息排序等 5 个 在退出系统时调用了一个保存 信息到文件中的函数 该函数只是简单的应用了文件的读写功能 在 此不写出其 N S 图 2 2 1 教师信息录入函数教师信息录入函数 教师 信息 查询 功 能 T b 5 F 教师 信息 排序 功 能 退出系统 p1 struct teacher malloc LEN 输入一个教师号 p1 num T 教师号为 0 F T 链表头为空 F Head p1 p3 head 当 p3 next 不为空 p3 p3 next p3 next p1 当教师号不为 0 输入教师的姓名 性别 年龄 学历 职称 月薪 住址 电话 T 第一个录入 F head p1p2 next p1 p2 p1 p1 struct teacher malloc LEN 输入一个教师号 p1 num n n 1 n 10 直到 p 为空 说明 p1 struct teacher malloc LEN 中 LEN 是在程序开头的宏 定义 define LEN sizeof struct teacher 其中 n 为全局变量 用来统 计链表的结点数 以下出现的 n 都是同一个 2 2 2 教师信息浏览函数教师信息浏览函数 说明 实际程序中在链表头为空是提供了可以浏览之前保存在文 件中的信息的功能 当选择该功能时就调用了一个读取文件的函数 该函数只是对文件读写的简单应用 详细请看后面第三部分代码 这 里不写出其 N S 图 2 2 3 教师信息删除的函数教师信息删除的函数 p2 next NULL T 链表头为空 F p head 显示 还未 录入过 信息 输出 p 所指向的位置中的教师的所有信息 p p next T 链表头为空 F 输出 还未 录入 过教 师信 息 输入要删除教师信息的教师号 i p1 head 当 i p1 num T p1 next 为空 F 退出 循环 p2 p1 p1 p1 next T i p1 num F 输出 已录 入的教师信 息中没有该 教师号 T p1 为链表头 F head p1 nextp2 next p1 next n n 1 11 2 2 4 教师信息查询的函数教师信息查询的函数 在查询方面程序为用户提供了 4 种不同方式的查询 每一种方式 的查询为一个子函数 此时也是采用一个菜单栏函数进行选择查询方 式并调用该种方式的函数 菜单栏函数跟主程序菜单栏的算法一样 此处只给出查询函数的 N S 图 说明 该 N S 图是对应姓名 教师号 职称 年龄四种查找方 式的函数的 当选择教师号查找时 输入 i 的即为教师号 与 i 做比 较的为 p 中的教师号 选择其他查找方式时类似 2 2 5 教师信息排序函数教师信息排序函数 排序也跟查询一样给出多种排序方式并采用菜单栏函数 此处也 T 链表头为空 F 输出 还未录入程序 并退出函 数 输入要查找的教师信息的对应方法的对应数据 i p head 当 p 非空时 T i 跟 p 中对应信息不等 F 输出 p 所指向的位置的教师的所有信息 j j 1 j 0 p p next T j 不为 0 F 输出 已录入的信息中不存在符合 i 的信息的教师 T 链表头不为空 F 12 只给出排序函数的 N S 图 说明 p1 p2 指向的结点用来比较 p3 p4 是用来记录结点的 当选用的排 序方式不同 p1 p2 用来比较的信息为所选方式的信息 输出 还未录入过教师信息 并退出函数 T 第二个结点为空 F p1 head p2 head next i 1 当 i 小于 n 时 j 0 当 j 小于 n i 时 p1 中的对应信息小过 p2 的 T F T p1 为链表头 F head p2p3 next p2 p4 p2 next p2 next p1 p1 next p4 p3 p2 p2 p4 p3 p1 p1 p2 p2 p2 next p1 head p2 p1 next 调用教师信息浏览函数 13 3 源程序代码源程序代码 include include include include 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 电话 14 struct teacher next 指向下一个结点 head NULL void key 口令检查的函数 int i long a for i 0 inext 16 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 中 fseek fp 0 0 将位置指针移到文件的开头 if fread 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 中 输出文件中的最后一个信息 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 申请一个结构体字节数 18 的空间用来存储一个教师的信息 printf 请输入一位教师的教师号 结束录入请输入 0 scanf ld 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 printf 学历 scanf s p1 edu 19 printf 职称 scanf s p1 title printf 月薪 scanf ld 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 p2 next NULL 将最后一个结点指向空 void print 输出教师信息的函数 struct teacher p int i p head 20 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 while i4 21 printf 选择无效 请重新输入正确选项 scanf d 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 p1 head while i p1 num 直到 p1 指向的结点是要删除的信息位置 if p1 next NULL break p1 的下个结点为空则退出循 环 p2 p1 p2 用来记录 p1 的前一个结点 22 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 判断是否只有一个信息 用冒泡法排序 23 p1 head p1 记录用来比较的两个结点中的前面一个 p2 head next p2 记录比较的两个结点中的后面个 for i 1 i n i 实现 n 1 趟比较的外循环 for j 0 jnum 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 后面的结点连接到 p1 p3 p2 p3 记录下 p2 的位置 p2 p4 p2 指向原来位置的下一个结点 else p1 中教师号没有打过 p2 中教师号 则将 p1 p2 都指向它们各自位置的下一个结点 p3 p1 记录 p1 后移一位后它前个结点的位置 p1 p2 p2 p2 next 24 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 jwage 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 26 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 jage p2 age if p1 head head p2 else p3 next p2 p4 p2 next p2 next p1 p1 next p4 p3 p2 27 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 请选择 28 scanf d while i3 printf 选择无效 请重新输入正确选项 scanf d 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 for p head p NULL p p next 29 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 30 比较 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 31 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 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 32 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 while i4 printf 选择无效 请重新输入正确选项 scanf d switch i case 1 search1 break case 2 search2 break 33 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 while i6 printf 选择无效 请重新输入正确选项 scanf d switch i 34 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 程序运行效果图程序运行效果图 4 1 登陆界面登陆界面 35 4 2 菜单栏菜单栏 4 3 录入功能录入功能 36 4 4 浏览功能浏览功能 4 5 删除功能删除功能 37 4 6 查询功能查询功能 4 7 排序功能排序功能 38 5 总结报告总结报告 39 5 1 课程设计中遇到的主要问题和解决方法课程设计中遇到的主要问题和解决方法 在这次的 C 语言课程设计的编程中 由于以前对链表和文件这两 部分的内容了解过少 因此在编程中涉及到这两方面的内容时 照成 了很大的阻碍 最主要是在对链表的结点进行交换 对文件某些特殊 的读写不清楚 而且由于第一次接触这类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论