教师信息管理系统设计.docx
- 文档编号:13095524
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:31
- 大小:160.22KB
教师信息管理系统设计.docx
《教师信息管理系统设计.docx》由会员分享,可在线阅读,更多相关《教师信息管理系统设计.docx(31页珍藏版)》请在冰点文库上搜索。
教师信息管理系统设计
一、设计任务分析…………………………………………………………5
二、教师信息管理系统设计与分析………………………………………11
2.1系统的总体方案设计……………………………………………11
2.2模块具体设计与分析……………………………………………13
三、系统运行界面…………………………………………………………18
四、源代码…………………………………………………………………27
五、总结体会………………………………………………………………38
六、参考文献………………………………………………………………39
一、设计任务分析
1.1系统设计要求
本课题主要是设计一个对教师信息进行管理的系统。
系统要求以菜单形式工作,工作前能先对口令进行检查,系统能在内存中完成对教师号、姓名、性别、年龄、学历、职称、工资、住址、电话等(教师号不重复)的录入、删除、浏览、查询等功能并有相应的模块输出。
1.2系统功能简介
针对要求,本系统包含以下功能模块:
(1)系统以菜单方式工作v
(2)教师信息录入功能--输入v
(3)教师信息删除功能v
(4)教师信息浏览功能--输出v
(5)查询功能
1.3核心算法介绍
1.3.1动态链表的概念:
链表在初始时必须分配足够的空间,也就是空间大小是静态的,在进行插入和删除时则不需要移动元素,修改指针域即可,所以仍然具有链表的主要优点,链表结构可以是动态地分配存储的,即在需要时才开辟结点的存储空间,实现动态链接。
1.3.2动态单链表的数据结构
动态单链表
单向链表的数据结构可以分为两部分:
数据域和指针域,数据域存储数据,指针域指向下一个储存节点的地址。
/*线性表的单链表存储结构*/
typedefstructLNode{
ElemTypedata;
structLNode*next;
}LNode,*LinkList;
/*带有头结点的单链表的基本操作(12个)*/
voidInitList(LinkList*L)
{/*操作结果:
构造一个空的线性表L*/
*L=(LinkList)malloc(sizeof(structLNode));/*产生头结点,并使L指向此头结点*/
if(!
*L)/*存储分配失败*/
exit(OVERFLOW);
(*L)->next=NULL;/*指针域为空*/
}
voidDestroyList(LinkList*L)
{/*初始条件:
线性表L已存在。
操作结果:
销毁线性表L*/
LinkListq;
while(*L)
{
q=(*L)->next;
free(*L);
*L=q;
}
}
voidClearList(LinkListL)/*不改变L*/
{/*初始条件:
线性表L已存在。
操作结果:
将L重置为空表*/
LinkListp,q;
p=L->next;/*p指向第一个结点*/
while(p)/*没到表尾*/
{
q=p->next;
free(p);
p=q;
}
L->next=NULL;/*头结点指针域为空*/
}
StatusListEmpty(LinkListL)
{/*初始条件:
线性表L已存在。
操作结果:
若L为空表,则返回TRUE,否则返回FALSE*/
if(L->next)/*非空*/
returnFALSE;
else
returnTRUE;
}
intListLength(LinkListL)
{/*初始条件:
线性表L已存在。
操作结果:
返回L中数据元素个数*/
inti=0;
LinkListp=L->next;/*p指向第一个结点*/
while(p)/*没到表尾*/
{
i++;
p=p->next;
}
returni;
}
StatusGetElem(LinkListL,inti,ElemType*e)/*算法2.8*/
{/*L为带头结点的单链表的头指针。
当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR*/
intj=1;/*j为计数器*/
LinkListp=L->next;/*p指向第一个结点*/
while(p&&j
{
p=p->next;
j++;
}
if(!
p||j>i)/*第i个元素不存在*/
returnERROR;
*e=p->data;/*取第i个元素*/
returnOK;
}
intLocateElem(LinkListL,ElemTypee,Status(*compare)(ElemType,ElemType))
{/*初始条件:
线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0)*/
/*操作结果:
返回L中第1个与e满足关系compare()的数据元素的位序。
*/
/*若这样的数据元素不存在,则返回值为0*/
inti=0;
LinkListp=L->next;
while(p)
{
i++;
if(compare(p->data,e))/*找到这样的数据元素*/
returni;
p=p->next;
}
return0;
}
StatusPriorElem(LinkListL,ElemTypecur_e,ElemType*pre_e)
{/*初始条件:
线性表L已存在*/
/*操作结果:
若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,*/
/*返回OK;否则操作失败,pre_e无定义,返回INFEASIBLE*/
LinkListq,p=L->next;/*p指向第一个结点*/
while(p->next)/*p所指结点有后继*/
{
q=p->next;/*q为p的后继*/
if(q->data==cur_e)
{
*pre_e=p->data;
returnOK;
}
p=q;/*p向后移*/
}
returnINFEASIBLE;
}
StatusNextElem(LinkListL,ElemTypecur_e,ElemType*next_e)
{/*初始条件:
线性表L已存在*/
/*操作结果:
若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,*/
/*返回OK;否则操作失败,next_e无定义,返回INFEASIBLE*/
LinkListp=L->next;/*p指向第一个结点*/
while(p->next)/*p所指结点有后继*/
{
if(p->data==cur_e)
{
*next_e=p->next->data;
returnOK;
}
p=p->next;
}
returnINFEASIBLE;
}
StatusListInsert(LinkListL,inti,ElemTypee)/*算法2.9。
不改变L*/
{/*在带头结点的单链线性表L中第i个位置之前插入元素e*/
intj=0;
LinkListp=L,s;
while(p&&j { p=p->next; j++; } if(! p||j>i-1)/*i小于1或者大于表长*/ returnERROR; s=(LinkList)malloc(sizeof(structLNode));/*生成新结点*/ s->data=e;/*插入L中*/ s->next=p->next; p->next=s; returnOK; } StatusListDelete(LinkListL,inti,ElemType*e)/*算法2.10。 不改变L*/ {/*在带头结点的单链线性表L中,删除第i个元素,并由e返回其值*/ intj=0; LinkListp=L,q; while(p->next&&j { p=p->next; j++; } if(! p->next||j>i-1)/*删除位置不合理*/ returnERROR; q=p->next;/*删除并释放结点*/ p->next=q->next; *e=q->data; free(q); returnOK; } voidListTraverse(LinkListL,void(*vi)(ElemType)) /*vi的形参类型为ElemType,与bo2-1.c中相应函数的形参类型ElemType&不同*/ {/*初始条件: 线性表L已存在。 操作结果: 依次对L的每个数据元素调用函数vi()*/ LinkListp=L->next; while(p) { vi(p->data); p=p->next; } printf("\n"); } 二、教师信息管理系统设计 2.1系统的总体方案设计 本系统共分为三个模块: 即系统的界面模块,系统主调用函数模块,系统中各个功能的子函数模块,其中子函数的功能包括录入模块,删除模块,浏览模块以及插入模块。 2.1.1系统的总体框图如下所示: 2.2具体模块设计与分析 2.2.1数据结构说明 2.2.1.1教师信息结构体链式存储表示 structteacher { longnum;//教师号 charname[20];//教师姓名 charsex[10];//性别 intage;//年龄 charedu[10];//学历 charzhechen[15];//职称 intmomey;//工资 charadd[20];//地址 chartel[15];//电话 structteacher*next;// }; 2.2.2模块具体设计与分析 2.2.2.1各个模块由相应的函数来实现,其N-S图与设计说明分别详述如下: (1)、建立动态链表对教师信息进行录入 structteacher*creat(structteacher*head1); 开辟一个新节点,并使P1,P2指向它 读入一个教师数据给P2所指向的指针 Head=NULLn=0 当P1->num不等于0 n=1 真 N不等于1? 假 Head=P2 P1->next=P2 P1=P2 再开辟一个新节点,使P2指向它 读入一个教师数据给P2所指向的节点 表尾个点指针变量变NULL 开辟一个新节点,并使P1,P2指向它 读入一个教师数据给P2所指向的指针 Head=NULLn=0 (2)、教师信息的删除功能 structteacher*del(structteacher*head,longnum); 链表是一 真 个空表 假 输出 “空表” P1=head P2=P1 P1=P1->next 当num不等于P1->num且P1指向的节点不是表尾节点 P1是要删除 是 的节点 否 P1所指的是 是 头结点 否 输出“找不到” Head=P1->next P2->next=P1->next (3)、教师信息的插入 头插入structteacher*insert1(structteacher*head,structteacher*tea); 尾插入structteacher*insert1(structteacher*head,structteacher*tea); P1=headP0=tea 原来的表 是 是空表 否 将P0所指向的节点称为唯一节点 输入插入方式: 1、头插入2、尾插入 插入方式是 是 否等于1? 否 P1=p1->next P1->next! =NULL P0->next=p1 Head=p0 P1->next=p0;p0->next=NULL n=n+1 (4)、教师信息的查询 voidsearch(structteacher*head,longnum); 输入要查找的教师的教师号 P=head K=0 P 是 =NULL 否 输出“当前没有教师信息,请录入” p->num==num 是 否 P1=p;k=1;跳出循环 P! =NULL K=1? 是 否 输出该教师的信息 输出“找不到该教师的信息” (5)、教师信息的浏览 voidlist(structteacher*head); P=head P! =tail? 是 否 输出p指向的节点 P指向下一个节点 当p指向的不是表尾 三、系统运行界面 3.1、登入界面 如果输入错误会显示错误信息并提示重新输入,输入错误次数超过三次,系统自动退出。 用户口令为2009314108,正确使用用户口令登入后的界面为: 3.2进入界面后进行功能选择 3.3教师信息录入功能 选择1进行教师信息录入,以输入为0作为结束 3.4教师信息删除功能 选择2进行删除,填入教师号后删除,以输入0作为结束。 3.5教师信息浏览功能 输入3进行信息浏览 3.6教师信息插入功能 输入4进行信息插入,有头插法和尾插法两种方式 选择头插法: 显示插入后的信息: 3.7查询功能 选择5进行查询功能,输入要查询的教师号。 当查不到信息时: 3.8退出 当选择6是就退出系统。 四、源代码 #include #include #include #defineLENsizeof(structteacher*) structteacher { longnum; charname[20]; charsex[10]; intage; charedu[10]; charzhechen[15]; intmomey; charadd[20]; chartel[15]; structteacher*next; }; intn; voidmain() { structteacher*head=NULL; structteacher*tea; longnum1; longnum2; longnum3; intinsertway; intchoose; intk=0; structteacher*sort(structteacher*head); structteacher*creat(structteacher*head1); structteacher*del(structteacher*head,longnum); structteacher*insert1(structteacher*head,structteacher*tea); structteacher*insert2(structteacher*head,structteacher*tea); voidsearch(structteacher*head,longnum); voidlist(structteacher*head); printf("请输入你的用户口令: \n"); scanf("%ld",&num3); while(num3! =2009314108&&k<2) { printf("口令错误,请重新输入.\n");k=k+1; scanf("%ld",&num3); if(k>=2) printf("口令已错误3次,禁止输入\n"); } if(num3==2009314108) { do { printf("\n\t*************************教师信息管理系统************************\n"); printf("\t*\t\t\t\t\t\t\t\t*\n"); printf("\t*\t\t\t请选择你要的服务功能\t\t\t*\n"); printf("\t*\t\t\t\t\t\t\t\t*\n"); printf("\t*\t\t\t1.教师信息录入功能\t\t\t*\n"); printf("\t*\t\t\t\t\t\t\t\t*\n"); printf("\t*\t\t\t2.教师信息删除功能\t\t\t*\n"); printf("\t*\t\t\t\t\t\t\t\t*\n"); printf("\t*\t\t\t3.教师信息浏览功能\t\t\t*\n"); printf("\t*\t\t\t\t\t\t\t\t*\n"); printf("\t*\t\t\t4.教师信息的插入功能\t\t\t*\n"); printf("\t*\t\t\t\t\t\t\t\t*\n"); printf("\t*\t\t\t5.查询功能\t\t\t\t*\n"); printf("\t*\t\t\t\t\t\t\t\t*\n"); printf("\t*\t\t\t6.退出\t\t\t\t\t*\n"); printf("\t*****************************************************************\n"); printf("inputchoose: \n"); scanf("%d",&choose); if(choose<1||choose>6) printf("你输入的数字不合法,请选择1到6之间的数字。 \n"); if(choose==1) head=creat(head); elseif(choose==2) { printf("intputthedeletenum\n"); scanf("%ld",&num1); while(num1! =0) { head=del(head,num1); printf("intputthedeletenum\n"); scanf("%ld",&num1); } } elseif(choose==3) { list(head); } elseif(choose==4) { printf("inputtheinsertdata\n"); printf("教师号\t姓名\t性别\t年龄\t学历\t职称\t工资\t住址\t电话\n"); tea=(structteacher*)malloc(LEN); scanf("%ld\t%s\t%s\t%d\t%s\t%s\t%d\t%s\t%s",&tea->num,tea->name,tea->sex,&tea->age,tea->edu,tea->zhechen, &tea->momey,tea->add,tea->tel); while(tea->num! =0) { printf("请选择插入方式: 1、头插入;2、尾插入。 \n"); scanf("%d",&insertway); if(insertway==1) head=insert1(head,tea); elseif(insertway==2) head=insert2(head,tea); printf("教师号\t姓名\t性别\t年龄\t学历\t职称\t工资\t住址\t电话\n"); tea=(structteacher*)malloc(LEN); scanf("%ld\t%s\t%s\t%d\t%s\t%s\t%d\t%s\t%s",&tea->num,tea->name,tea->sex,&tea->age,tea->edu,tea->zhechen, &tea->momey,tea->add,tea->tel); } } elseif(choose==5) { printf("inputtheteacher'snum\n"); scanf("%ld",&num2); search(head,num2); } }while(choose! =6); } } structteacher*creat(structteacher*head1) { structteacher*head=NULL,*p1,*p2; n=0; p2=p1=(structteacher*)malloc(LEN); printf("\n教师号\t姓名\t性别\t年龄\t学历\t职称\t工资\t住址\t电话\n"); scanf("%ld\t%s\t%s\t%d\t%s\t%s\t%d\t%s\t%s",&p2->num,p2->name,p2->sex,&p2->age,p2->edu,p2->zhechen,&p2->momey,p2->add,p2->tel); while(p2->num) { if(n==0)head=p1; elsep1->next=p2; p1=p2; p2=(structteacher*)malloc(LEN); pr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教师 信息管理 系统 设计