教师信息管理系统C语言课程设计.docx
- 文档编号:7003801
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:31
- 大小:668.17KB
教师信息管理系统C语言课程设计.docx
《教师信息管理系统C语言课程设计.docx》由会员分享,可在线阅读,更多相关《教师信息管理系统C语言课程设计.docx(31页珍藏版)》请在冰豆网上搜索。
教师信息管理系统C语言课程设计
课程设计任务书
计算机科学与技术专业年级班
一、设计题目
教师信息管理系统设计
二、主要内容
教师信息包括教师号、姓名、性别、年龄、学历、职称、工资、住址、电话等(教师号不重复)。
试设计一教师信息管理系统,使之能提供以下功能:
oxYUvvH。
(1)系统以菜单方式工作
(2)教师信息录入功能--输入
(3)教师信息删除功能
(4)教师信息浏览功能--输出
(5)查询与排序功能:
(至少一种查询方式)--算法
按教师号查询
按职称查询等
三、具体要求
围绕课程设计得目得与意义,基本要求如下:
1、认真阅读《C语言课程设计》指导书,明确课程设计得目得、意义与要求;
2、快速总结C程序设计语言得精髓,如:
函数得概念、函数得设计与函数得调用;
3、快速熟悉TuberC或C++得上机环境。
能熟练进行高级编辑操作(特别就是字块操作);熟悉步进式、断点跟踪得程序调试方法,提高工作效率。
fnAzKBR。
4、根据“课程设计题目”,采用结构化得程序设计思想,确定系统得总体设计方案、确"定时间进度。
如果就是多人共一题,则要首先完成小组内得人员分工及安排,不允许重题现象。
zSo3bMo。
5.学习并了解良好得程序设计风格。
按质、按量、并按时间完成课程设计得任务。
6.提供可运行得课程设计系统,参加上机面试答辩。
本次课程设计得重点就是:
学会设计并编写函数,掌握好各函数之间得调用关系;利用文件操作函数,建立数据库并完成对数据库得各种操作;掌握几种典型算法得应用(如:
冒泡法、选择排序法与折半查找法)。
同时锻炼学生根据题目进行分析、设计、编码、调试程序与书写必要文档得综合处理能力,从实践中学习并体会程序设计得结构化思想与设计方法。
KDBC3WI。
四、进度安排
依照教学计划,课程设计时间为3周。
按照软件工程得思想,软件系统得分析设计至关重要,并要充分重视书写“文档”。
避免甚至杜绝“拿到题目就编码”得现象。
建议将时间分为三个阶段:
FrF3chp。
第一阶段,根据题目要求,拿出系统得总体设计方案:
即构思各程序模块得算法,并画出相应得N-S图,同时编写相应得文档;4pwpRNZ。
第二阶段,根据N-S图编写程序代码并单独调试,再将调试通过得各个子模块进行集成调试;
第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。
三个阶段时间分配得大概比例就是:
35:
45:
20。
五、完成后应上交得材料
1.课程设计得题目、系统得总功能与各子模块得功能;
2.题目得设计思想(或算法)简述;
3.主要程序得框图(要求用N-S图);
4.源程序代码(要求在关键得位置有注释,从而增加程序得可读性);
5.课程设计得总结报告,主要包括以下内容:
(1)课程设计中遇到得主要问题与解决方法;
(2)您得创新与得意之处;
(3)设计中存在得不足及改进得设想;
(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
2、2、5教师信息排序函数··································10
3.源程序代码·············································11u4AerQl。
4.程序运行效果图········································33
4、1登陆界面···········································33kmiaVU9。
4、2菜单栏·············································33lS0x7fF。
4、3录入功能···········································34O4ghLwX。
4、4浏览功能···········································34g7AqTOO。
4、5删除功能···········································35SeZy0Ru。
4、6查询功能···········································35MZ55TtJ。
4、7排序功能···········································36tmXjgbh。
5.总结报告··············································37CANy5Te。
5、1课程设计中遇到得主要问题与解决方法·················37
5、2您得创新与得意之处·································37
5、3设计中存在得不足及改进得设想·······················37
5、4本次课程设计得感想与心得体会·······················38
1.
题目设计思想简述
UbIRxRq。
如上图所示,该教师信息管理系统主要就是一个以动态链表得应用为基础来实现对教师信息得录入,查询,删除等功能。
D46yK4b。
定义教师结构体如下:
structteacher
{
longnum;//教师号
charname[20];//姓名
charsex[5];//性别
intage;//年龄
charedu[20];//学历
chartitle[20];//职称
longwage;//工资
charaddr[100];//地址
chartelep[15];//电话
structteacher*next;
}*head=NULL;
主函数只进行口令函数与菜单栏函数得调用,主要工作通过菜单函数实现。
口令为123456。
菜单栏函数通过用switch语句实现不同功能得选择,不同得功能用不同得子函数实现。
录入教师信息通过建立动态单链表来实现。
浏览教师信息则通过将链表所有数据顺序输出来实现。
查询功能只要从链表头开始不断往下一个结点读取信息跟所要查找得信息比较,直到读取到得信息跟所要查找得信息相同或链表尾为止,并把此结点得信息输出。
HLSXhMI。
删除教师信息得函数就是通过查找链表中有该信息得结点后将该结点移出链表,即使该结点前一个结点直接指向该结点后面得结点来达到删除信息得目得。
hdqJIkt。
排序函数就是通过交换结点在链表中得位置来实现得,即使得各结点在链表中得位置便就是所要得到得排序该信息应在得位置,这样直接顺序输出链表得信息时就能按所要得排序输出了。
TBXrZ8j。
2.程序得N—S图
2、1总程序得N—S图
Skb8x9N。
7wGOTg0。
说明:
各功能都就是通过调用子函数来实现得。
2、2各子函数得N—S图
子函数主要包括教师信息录入,教师信息浏览,教师信息删除,教师信息查询与教师信息排序等5个。
在退出系统时调用了一个保存信息到文件中得函数,该函数只就是简单得应用了文件得读写功能,在此不写出其N—S图。
3lrWEnj。
2、2、1教师信息录入函数
5Npspiz。
ERublXc。
说明:
p1=(structteacher*)malloc(LEN)中LEN就是在程序开头得宏定义(#defineLENsizeof(structteacher))。
其中n为全局变量,用来统计链表得结点数,以下出现得n都就是同一个。
c8WBAZd。
2、2、2教师信息浏览函数
说明:
实际程序中在链表头为空就是提供了可以浏览之前保存在文件中得信息得功能,当选择该功能时就调用了一个读取文件得函数。
该函数只就是对文件读写得简单应用,详细请瞧后面第三部分代码,这里不写出其N-S图。
E4BnsNO。
2、2、3教师信息删除得函数IfNGIpZ。
3DMkWjO。
2、2、4教师信息查询得函数
在查询方面程序为用户提供了4种不同方式得查询,每一种方式得查询为一个子函数,此时也就是采用一个菜单栏函数进行选择查询方式并调用该种方式得函数。
菜单栏函数跟主程序菜单栏得算法一样,此处只给出查询函数得N—S图。
D7AwhPY。
nD6EDoL。
说明:
该N—S图就是对应姓名,教师号,职称,年龄四种查找方式得函数得。
当选择教师号查找时,输入i得即为教师号,与i做比较得为p中得教师号,选择其她查找方式时类似。
4DKSESv。
2、2、5教师信息排序函数
排序也跟查询一样给出多种排序方式并采用菜单栏函数,此处也只给出排序函数得N—S图。
xEiKirX。
j5FcB9D。
atMLgpe。
说明:
p1,p2指向得结点用来比较,p3,p4就是用来记录结点得,当选用得排序方式不同,p1,p2用来比较得信息为所选方式得信息。
inKkYDc。
3.源程序代码
#include
#include
#include
#include
#defineLENsizeof(structteacher)//宏定义结构体字节数
intn=0;
structteacher//定义结构体
{
longnum;//教师号
charname[20];//姓名
charsex[5];//性别
intage;//年龄
charedu[20];//学历
chartitle[20];//职称
longwage;//工资
charaddr[100];//地址
chartelep[15];//电话
structteacher*next;//指向下一个结点
}*head=NULL;
voidkey()//口令检查得函数
{
inti;
longa;
for(i=0;i<3;i++)
{
printf("请输入口令(还可输入%d次):
\n",3-i);
scanf("%ld",&a);
if(a==123456)//检查口令就是否正确
{
printf("欢迎进入系统\n");
break;
}
elseprintf("口令错误\n");
}
if(i==3)//判断可以输入口令得次数就是否用完
{
printf("可使用得口令输入次数已用完,将自动退出!
\n");
exit(0);
}
}
voidsave()//把数据存入文件得函数
{
FILE*fp;
inti;
char[20];
structteacher*p;
printf("\n就是否把此次登录系统录入与修改后得教师信息保存到文件中\n");
printf("1:
【就是】0:
【否】\n请选择:
");sAF9AzR。
scanf("%d",&i);
while((i!
=0)&&(i!
=1))//判断输入得选择就是否有效
{
printf("选择无效,请重新输入正确选项:
");
scanf("%d",&i);
}
if(i==1)//判断就是否选择了要保存
{
printf("\n请输入要保存数据得文件名:
");
scanf("%s",);
if((fp=fopen(,"wb"))==NULL)
{
printf("\n无法打开文件\n");
exit(0);
}
for(p=head;p!
=NULL;p=p->next)
if(fwrite(p,sizeof(structteacher),1,fp)!
=1)
printf("\n此处数据有误\n");
fclose(fp);
}
exit(0);
}
voidread()//从文件读出数据得函数
{
structteacherteach[299],temp;
inti=0;
FILE*fp;
char[20];
printf("\n请输入存有教师信息得文件名:
");
scanf("%s",);
if((fp=fopen(,"rb"))==NULL)
{printf("\n无法打开文件\n");
exit(0);
}
fseek(fp,-sizeof(structteacher),2);/*将位置指针从文件末尾后退一个结构体得字节数*/etv7FUD。
fread(&temp,sizeof(structteacher),1,fp);/*从所指向得文件中读出数据存储到结构体变量temp中*/CDX2HMn。
fseek(fp,0,0);//将位置指针移到文件得开头
if(fread(&teach[i],sizeof(structteacher),1,fp)==1)/*判断文件开头读入得数据就是否为空*/IFKGlK5。
{
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);srOq3ZZ。
printf("职称:
%s\n月薪:
%ld,住址:
%s,电话:
%s\n",teach[i]、title,teach[i]、wage,teach[i]、addr,teach[i]、telep);HvKbNy9。
i=i+1;
fread(&teach[i],sizeof(structteacher),1,fp);/*从文件中读入数据存储到结构体变量teach【i】中*/gT43nba。
}
//输出文件中得最后一个信息
printf("教师号:
%ld,姓名:
%s,性别:
%s,年龄:
%d,学历:
%s,",teach[i]、num,teach[i]、name,teach[i]、sex,teach[i]、age,teach[i]、edu);8mlbMle。
printf("职称:
%s\n月薪:
%ld,住址:
%s,电话:
%s\n",teach[i]、title,teach[i]、wage,teach[i]、addr,teach[i]、telep);PZdJyDs。
fclose(fp);
}
elseprintf("该文件中无教师信息\n");//文件为空时输出此处
}
voidcreat()//录入教师信息得函数
{
structteacher*p1,*p2,*p3;
p1=p2=(structteacher*)malloc(LEN);/*申请一个结构体字节数得空间用来存储一个教师得信息*/xtJWTG3。
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;
elsep2->next=p1;
p2=p1;//p2用来记录链表得最后一个结点
p1=(structteacher*)malloc(LEN);//重新申请空间
printf("请输入一位教师得教师号(结束录入请输入0):
");
scanf("%ld",&p1->num);
}
p2->next=NULL;//将最后一个结点指向空
}
voidprint()//输出教师信息得函数
{
structteacher*p;
inti;
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);iPizmWa。
printf("月薪:
%ld,住址:
%s,电话:
%s\n",p->wage,p->addr,p->telep);AILYXUF。
p=p->next;//将下一个结点得首地址赋给p
}while(p!
=NULL);//到链表尾时结束循环
}
else//链表为空时执行以下部分
{
printf("\n您此次登录系统还没有录入教师信息,可进行以下操作:
\n");
printf("1:
【浏览以前保存在文件中得教师信息】2:
【开始录入教师信息】\n");73CRtdR。
printf("3:
【退出系统】4:
【返回菜单】\n");aZgV8mq。
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);//退出系统
}
}
voiddel()//删除教师信息得函数
{
structteacher*p1,*p2;
longi;
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得下一个结点*/6yU2VMN。
elsep2->next=p1->next;/*p1非头结点则将p1后面得结点连接到p1前一个结点得后面*/WasFN2E。
printf("\n已删除教师号为%ld得教师信息\n",i);
n=n-1;//记录教师数得n要减一
}
//p1不就是要删除得信息则表示要删除得信息不再链表中
elseprintf("\n已录入得教师信息中没有教师号为%ld得\n",i);
return;
}
voidsort1()//按教师号进行排序得函数
{
structteacher*p1,*p2,*p3,*p4;
inti,j;
if(head==NULL)
{printf("\n还未录入过教师信息\n");
return;
}
if(head->next!
=NULL)//判断就是否只有一个信息
{//用冒泡法排序
p1=head;//p1记录用来比较得两个结点中得前面一个
p2=head->next;//p2记录比较得两个结点中得后面个
for(i=1;i { for(j=0;j { if(p1->num>p2->num)/*比较相邻两个结点中教师号大小*/ {//当p1得教师号大时则对调两个结点得位置 if(p1==head)head=p2; elsep3->next=p2;/*p1为头结点时则将头指针指向p2,否则就将p2连接到用来记录p1前一个结点得p3得后面*/nD4TzZQ。 p4=p2->next;//p4用来记录p2后面得结点 p2->next=p1;//p1得结点换到原来p2得位置 p1->next=p4;//原来p2后面得结点连接到p1 p3=p2;//p3记录下p2得位置
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教师 信息管理 系统 语言 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)