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

下载本文档

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

文档简介

1、课程设计任务书计算机科学与技术专业_年级_班_1、 设计题目教师信息管理系统设计2、 主要内容教师信息包括教师号、姓名、性别、年龄、学历、职称、工资、住址、电话等(教师号不重复)。试设计一教师信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作?(2)教师信息录入功能输入?(3)教师信息删除功能?(4)教师信息浏览功能 一一输出?(5)查询和排序功能:(至少一种查询方式)一一算法?按教师号查询? 按职称查询等3、 具体要求围绕课程设计的目的和意义,基本要求如下:1 、认真阅读 C 语言课程设计指导书,明确课程设计的目的、意义和要求;2 、快速总结C程序设计语言的精髓,如:函数的概念、函数

2、的设计和函 数的调用;3、快速熟悉Tuber C或C+勺上机环境。能熟练进行高级编辑操作(特 别是字块操作) ;熟悉步进式、断点跟踪的程序调试方法,提高工作效率。4 、根据“课程设计题目” ,采用结构化的程序设计思想,确定系统的总体设计方案、确"定时间进度。如果是多人共一题, 则要首先完成小组内的人员分工及安排,不允许重题现象。5 学习并了解良好的程序设计风格。按质、按量、并按时间完成课程设计的任务。6 提供可运行的课程设计系统,参加上机面试答辩。本次课程设计的重点是:学会设计并编写函数,掌握好各函数之间的调用关系;利用文件操作函数,建立数据库并完成对数据库的各种操作;掌握几种典型算

3、法的应用(如:冒泡法、选择排序法和折半查找法) 。同时锻炼学生根据题目进行分析、设计、编码、调试程序和书写必要文档的综合处理能力,从实践中学习并体会程序设计的结构化思想和设计方法。4、 进度安排依照教学计划,课程设计时间为 3 周。按照软件工程的思想,软件系统的分析设计至关重要,并要充分重视书写“文档” 。避免甚至杜绝“拿到题目就编码”的现象。建议将时间分为三个阶段:第一阶段,根据题目要求,拿出系统的总体设计方案:即构思各程序模块的算法,并画出相应的 N-S 图,同时编写相应的文档;第二阶段,根据N-S 图编写程序代码并单独调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按

4、要求填写在课程设计说明书上,并参 加答辩。三个阶段时间分配的大概比例是:35 : 45: 205、 完成后应上交的材料1课程设计的题目、系统的总功能和各子模块的功能;2题目的设计思想(或算法)简述;3主要程序的框图(要求用N-S 图) ;4源程序代码(要求在关键的位置有注释,从而增加程序的可读性);5课程设计的总结报告,主要包括以下内容:( 1)课程设计中遇到的主要问题和解决方法;( 2)你的创新和得意之处;( 3)设计中存在的不足及改进的设想;( 4)本次课程设计的感想和心得体会。以上完成的源程序及相关文档,填写在课程设计说明书上,要求干净整洁,符合课程设计的要求和规范。总评成绩六、指导教师

5、 签名日期 年 月 日系主任 审核日期 年 月艮目录.题目设计思想简述5.程序的 N- S图72.1 总程序的N-S图72.2 各子函数的N-S图72.2.1 教师信息录入函数2.2.2 教师信息浏览函数82.2.3 教师信息删除函数92.2.4 教师信息查询函数92.2.5 教师信息排序函数10三.源程序代码114 .程序运行效果图334.1 登陆界面334.2 菜单栏334.3 录入功能344.4 浏览功能344.5 删除功能354.6 查询功能354.7 排序功能365 .总结报告375.1课程设计中遇到的主要问题和解决方法375.2 你的创新和得意之处375.3 设计中存在的不足及改进

6、的设想375.4 本次课程设计的感想和心得体会38long num;/ 教师号char name20;/ 姓名char sex5;/ 性别int age;/ 年龄char edu20;/ 学历char title20;/ 职称long wage;/ 工资char addr100; / 地址char telep15;/ 电话struct teacher *next;*head=NULL;主函数只进行口令函数和菜单栏函数的调用,主要工作通过菜单函数实现。口令为123456。菜单栏函数通过用 switch 语句实现不同功能的选择, 不同的功能用不同的子函数实现。录入教师信息通过建立动态单链表来实现浏

7、览教师信息则通过将链表所有数据顺序输出来实现。查询功能只要从链表头开始不断往下一个结点读取信息跟所要查找的信息比较,直到读取到的信息跟所要查找的信息相同或链表尾为止,并把此 结点的信息输出。删除教师信息的函数是通过查找链表中有该信息的结点后将该结点移出 链表,即使该结点前一个结点直接指向该结点后面的结点来达到删除信息的 目的。排序函数是通过交换结点在链表中的位置来实现的,即使得各结点在链表中的位置便是所要得到的排序该信息应在的位置,这样直接顺序输出链表 的信息时就能按所要的排序输出了.程序的N S图2.1总程序的N S图息查询和教师信息排序等5个。在退出系统时调用了一个保存信息到文件中的函数,

8、该函数只是简单的应用了文件的读写功能,在此不写出其N-S图2.2.1教师信息录入函数显示“还未录入说明:实际程序中在链表头为空是提供了可以浏览之前保存在文件中的信息的功能,当选择该功能时就调用了一个读取文件的函数。该函数只是对文件读写的简单应用,详细请看后面第三部分代码,这里不写出其N-S图2.2.3教师信息删除的函数2.2.4教师信息查询的函数在查询方面程序为用户提供了 4种不同方式的查询,每一种方式的查询 为L个子函数,此时也是采用一个菜.单栏函数进行选择查询方式并调用R种 方式的函数。菜单栏函数跟主程序菜单栏的算法一样,此处只给出查询函数的N S图。说明:该N-S图是对应姓名,教师号,职

9、称,年龄四种查找方式的函数的。当选择教师号查找时,输入i的即为教师号,与i做比较的为p中的教师号,选择其他查找方式时类似2.2.5教师信息排序函数说明: 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

10、teacher/ 定义结构体long num;/ 教师号char name20;/ 姓名char sex5;/ 性别int age;/ 年龄char edu20;/ 学历char title20;/职称long wage;/ 工资char addr100;/地址char telep15;/ 电话struct teacher *next;/指向下一个结点*head=NULL;void key()/ 口令检查的函数int i;long a;for(i=0;i<3;i+)printf(" 请输入口令(还可输入歆):n",3-i);scanf("%ld",

11、&a);if(a=123456)/ 检查口令是否正确printf(" 欢迎进入系统n");break;else printf(" 口令错误 n");if(i=3)/ 判断可以输入口令的次数是否用完printf(" 可使用的口令输入次数已用完,将自动退出! n");exit(0);void save()/ 把数据存入文件的函数FILE *fp;int i;char filename20;struct teacher *p;printf("n 是否把此次登录系统录入和修改后的教师信息保存到文件中 n");pri

12、ntf("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")=NU

13、LL)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()/ 从文件读出数据的函数fread(&temp,sizeof(struct teacher),1,fp);/*从所指向的文件中);将位置指针从文件末尾struct teacher teach299,temp;int i=0;FILE *f

14、p;char filename20;printf("n 请输入存有教师信息的文件名:scanf("%s",filename);if(fp=fopen(filename,"rb")=NULL)printf("n 无法打开文件n");exit(0);fseek(fp,-sizeof(struct teacher),2);/*后退一个结构体的字节数*/读出数据存储到结构体变量temp 中*/fseek(fp,0,0);/ 将位置指针移到文件的开头判断文if(fread(&teachi,sizeof(struct teach

15、er),1,fp)=1)/*件开头读入的数据是否为空*/printf("n 存有的教师信息如下:n");while(teachi.num!=temp.num)/ 进行循环读取文件printf(" 教师号:ld,姓名:s,性别:s,年龄:d,学历 :%s,",teachi.num,,teachi.sex,teachi.age,teach );printf(" 职称 :%sn 月薪 :%ld, 住址 :%s, 电话 :%sn",teachi.title,teachi.wage,teachi.addr,tea

16、chi.telep );i=i+1;件中读入数据存储到结构体变量teach 【 i 】中 */ 输出文件中的最后一个信息printf(" 教师号:ld,姓名:s,性别:s,年龄:d,学历 :%s,",teachi.num,,teachi.sex,teachi.age,teach );printf(" 职称 :%sn 月薪 :%ld, 住址 :%s, 电话 :%sn",teachi.title,teachi.wage,teachi.addr,teachi.telep);fclose(fp);else printf("

17、; 该文件中无教师信息 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;/* 判断链表是否

18、为空,是则将链表头指向 p1*/else / 链表不为空则将链表尾指向 p1p3=head;/p3 用来记录链表的尾部while(p3->next!=NULL)/*若p3不是链表尾则将p3指向下一个结点 */p3=p3->next;p3->next=p1;/ 将最后一个结点指向 p1while(p1->num!=0)/ 判断用户是否结束录入功能/ 录入该教师号的教师对应的信息printf(" 姓名 : ");scanf("%s",p1->name);printf(" 性别: ");scanf("

19、%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(&qu

20、ot;%s",p1->addr);printf("电话:");scanf("%s",p1->telep);n=n+1;/ 给统计录入的教师数n 加一/*判断是否为第一个录入的信息,是则将链表头指向pl,否则将p2指p1*/if(n=1) head=p1;else p2->next=p1;p2=p1;/p2 用来记录链表的最后一个结点重新申请空间p1=(struct teacher *)malloc(LEN);/printf(" 请输入一位教师的教师号(结束录入请输入0): ");scanf("%l

21、d",&p1->num);p2->next=NULL;/ 将最后一个结点指向空void print()/ 输出教师信息的函数struct teacher *p;int i;p=head;if(head!=NULL)/ 判断链表是否为空printf("n这位教师的信息为:n",n);doprintf(" 教师号:ld,姓名:s,性别:s,年龄:d,学历:s, 职称 :%sn",p->num,p->name,p->sex,p->age,p->edu,p->title);printf("

22、; 月薪 :%ld, 住址 :%s, 电话 :%sn",p->wage,p->addr,p->telep);p=p->next;/ 将下一个结点的首地址赋给pwhile(p!=NULL);/ 到链表尾时结束循环else/ 链表为空时执行以下部分printf("n 你此次登录系统还没有录入教师信息, 可进行以下操作: n");printf(" 1: 【浏览以前保存在文件中的教师信息】2: 【开始录入教师信息】 n");printf("3:【退出系统】4: 【返回菜单】 n");printf("

23、 请选择: ");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(&qu

24、ot;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) hea

25、d=p1->next;/* 若 p1 为头结点则将头指针指向p1 的下一个结点 */else p2->next=p1->next;/*p1 非头结点则将p1 后面的结点连接到 p1 前一个结点的后面*/printf("n 已删除教师号为%ld 的教师信息 n",i);n=n-1;/ 记录教师数的 n 要减一/p1 不是要删除的信息则表示要删除的信息不再链表中return;void sort1()/ 按教师号进行排序的函数struct teacher *p1,*p2,*p3,*p4;int i,j;if(head=NULL)printf("n 还未

26、录入过教师信息 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 p

27、3->next=p2;/*p1 为头结点时则将头指针指向p2,否则就将p2连接到用来记录pl前一个结点的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->nex

28、t;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

29、=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;elsep3=p1;p1=p2;p2=p2->next;p1=head;p2=p1->next; printf("n 按月薪排序后的教师信息如下: n");print();void sort3()/ 按年龄排序的函数,算法跟按教师号排序的一样

30、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

31、;p#=p4;elsep3=p1;p1=p2;p2=p2->next;p1=head;p2=p1->next;n");printf("n 按年龄排序后的教师信息如下:print();void choose1()/ 选择排序方式的函数int i;printf("排序方式 n");printf(" 1: 【按教师号排序】 2:n");printf(" 3: 【按月薪排序】 n");printf(" 请选择: ");scanf("%d",&i);while(i&

32、lt;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(" 请输入要查找的教师信息的

33、教师号: ");scanf("%ld",&i);for(p=head;p!=NULL;p=p->next)/p 顺序指向结点与i 比较,找出有i 的数据的结点并输出if(p->num=i)printf("教师号:ld,姓名:s,性别:s,年龄:d,学历:s,职称 :%sn",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪 :%ld, 住址 :%s, 电话 :%sn",p->wage,p->a

34、ddr,p->telep);return;printf(" 已录入的教师信息中不存在该教师号void search2()/ 按姓名查找的函数struct teacher *p;char i20;/ 记录用户输入的想要删除的姓名int j=0;/j 用来记录找到了多少个信息if(head=NULL)printf("n 还未录入过教师信息 n");return;");n"); printf(" 请输入要查找的信息的教师姓名:scanf("%s",i);for(p=head;p!=NULL;p=p->next

35、)if(strcmp(p->name,i)=0)/ 比较 p 指向的结点中的姓名跟i 的是否一致,是则输出printf("教师号:ld,姓名:s,性别:s,年龄:d,学历:s,职称 :%sn",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪 :%ld, 住址 :%s, 电话 :%sn",p->wage,p->addr,p->telep);j=j+1;/ 每输出一个教师的信息则 j 加一if(j=0) printf(" 已录入的教师信息中不存在该姓名的教师n");void search3()/ 按职称查找的函数,算法与按姓名查找的一样struct teacher *p;char i20;int j=0;if(head=NULL)printf("n 还未录入过教师信息 n");return;printf(" 请输入要查找的信息的教师职称: ");scanf("%s&quo

温馨提示

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

评论

0/150

提交评论