2023年数据结构大作业含源代码.pdf
《2023年数据结构大作业含源代码.pdf》由会员分享,可在线阅读,更多相关《2023年数据结构大作业含源代码.pdf(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构大作业作业题目:职工信息管理系统姓 名:叶尔凯西革命学 号:_ _ _ _ _ _ _ _ _ _ _班 级:计算机07(1)班指导教师:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _日 期:2 0 2 3年6月1 3日职工信息管理系统(伊 犁 师 范 学 院 计 算 机 科 学 系 0 7-1班 叶 尔 凯 西)摘要:本程序实现了一个职工管理系统中的常见功能,涉及建立职工信息,输出职工信息以及根据职工号、部门号、职工的工资进行排序的功能,尚有对整个职工表的清空的功能.关 键 词:职工管理;职工管理系统;数据排序;排序1有关程序设计的引言随着信息技术
2、的发展,在更多的情况下人们借助计算机来交流和储存信息,确切地说是用计算机程序来管理当今的庞大的信息,提高了信息技术的发展.在很多场合下计算机的这样管理程序的功能都派上了用场,譬如就职工信息管理而言,就得有个使用方便,功能全面,通俗易懂的管理程序是必备的.从这一点出发,本人设计出了一个计算机管理程序 职工管理系统”,接下来就说明该程序的功能.2程序简介该程序的功能可以从以下十个方面来说明:1.输入:添加一个职工记录2.输出:输出所有职工记录3 .按职工号排序:通过职工号指针将职工记录按职工号从小到大连接起来4.按职工号输出:沿职工号指针输出所有职工记录5.按部门号排序:通过部门号指针将职工记录按
3、部门号从小到大连接起来6.按部门号输出:沿部门号指针输出所有职工记录7.按职工工资排序:通过职工工资指针将职工记录按职工工资从小到大连接起来8,按职工工资输出:沿职工号指针输出所有职工记录9.全清:删除职工文献中有的所有记录1 0.存储退出:将单链表中的所有结点存储到职工文献中,然后退出程序运营过程3实验仪器每 人1台安装有Turbo C的普通学生电脑。4实验内容运用静态链表来实现这一综合算法。5 实验重点掌握链表的常用操作。6程序功能及其实现详解下面将具体介绍本程序的所有功能的实现方式即代码的含义,在设计本程序时,本人尽也许地用了质量好一点的算法,由于本程序有以上1 0个功能,显然应有实现相
4、应功能的10个函数,但是在设计时本人将输出部分统一到一个函数中来实现.由于在面向过程的程序设计中涉及面向对象的程序设计一般都没有一种职工类型的变量,因此在一开始得建立一个结构体变量即所谓的职工类型,此部分的代码如下:t y pedef s truct node(int n o,d e pn o.salary;/*no 为职工号,d e p no 为部门号,salary 为工资数*/charnamejmaxs i ze;/*职工姓名*/str u ct node*pno,*pde p n o,*ps a lary,*next;/*pno 为职工号指针,pdepno 为部门号指针,p sal a
5、ry为工资数指针*/emplo y e e;显然,结构体中的成员涉及职工姓名、职工号、部门号、职工工资、以及一些指向其它该类型结点的指针变量.下面介绍实现第一个功能的代码:return(h);)本函数实现的功能是插入一个耿工记录到职工表中,为此我们还得把这个函数的返回类型设计成之前建立的结构体类型的指针函数,而函数的参数是一个职工类型的头指针变量,在m a in函数中也同时建立一个头指针变量,且给它赋空值,在调用该函数时就把空指针传给插入函数,当职工表为空即第一次插入一个职工记录时,很自然传给插入函数的头指针的值为空有此来判断是新建立一个结点还是在已有的结点后插入一个(连接)结点,若头指针不为
6、空,即已有一个或多个结点在职工登记表中,则只能插在最后一个节点之后.当职工表中只有一个职工记录时,(即hea d-nex t-next=N U LL时)插在第一个结点后面,当职工表中的结点多于两个时就插在最后一个结点后面.下 面 说 明 第 二 个 功 能 的 实 现 部 分:void output(employe e*h ead)(em p 1 o y e e*p;if(head=NULL)(cl r sc r();printf(Th e tabi e is e mpt y,p l ease i n s e r t bef o r e!n);)els e(p=head-nex t;i f (
7、p!=NULL)C 1 r s c r();prin t f(a 1 I info r m a t i on o f em p I o y e ennH);p rintf(e m p 1 o y ees name emp 1 o yees numb e r d e p a rtme n ts numbe r employ e e s wagesn);wh i le(p!=NU L L)(P r in t f (t%st t%d t t t%d t t%d n,p-name,p n o,p-depno,p-s a 1 a r y);p=p-n ext;)g etch();)本函数的功能是实现职工
8、登记表中的所有记录,若没有任何一个记录,则输出一个提醒语句来提醒使用者职工表为空,若不为空则从第一号结点开始输出一直到最后一个结点(以表格形式输出).下面分别介绍根据职工号、部门号以及职工工资来排序的函数:e m p 1 oy e e*Sort B yEm p loyeeNumbe r(em p 1 o y e e*h ea d)(employee*p,*q,*s,*h,*tem p;temp=malloc(s ize o f(emp 1 oyee);h=he a d;fo r(s=hea d-ne x t;s!=N DLL;s=s ne x t)p=s;for(q=s-ne x t;q!=N
9、U L L;q=q-ne x t)if(p-n o)(q-n o)叩=q;)i f(p!=s)(。t e mpn o=sno;4emp-dep n o=s-dep n o;4 e mp-salar y=s sal a ry;比 甘 c py(t em p-n am e,s-name);s-n o=p-no;s d e p no=p d epno;6s-s alary=p s a lary;。s trcpy(s-name,p-n a m e);p-no=t e mp-no;fip-depno=t e mp de p n o;P-salar y=tem psal a ry;strcpy(p-nam
10、e,t emp-n ame);)clrscr();prin t f(all d o ne!n);g e t ch();r e tur n(h);emp 1 oy e e*SortByDepartmen t Numb e r(em p 1 o yee*head)e mp 1 oyee*p,*q,*s,*h,*t emp;t e mp=m a I 1 o c(size o f(employ e e);h=hea d;fo r(s=h e a d-n e x t;s!=NUL L;s=s nex t)(P=s;f or(q=s-next;q!=N U LL;q=q-n ext)(i f (P dep
11、no)(q d e pno)P=q;)i f(p!=s)4em pno=s-no;tern p-d e p no=s-depn o;te m p -sala r y=s sa 1 ary;os t r cpy(t e m p-n ame,s-n a m e);s-no=p-n o;比一 d epno=p-d e pn o;os-salary=p-s a lary;e s trc p y(s-n am e,p-name);p-n o=tem p-no;p-depno=temp-d e pno;P-salary=t em p s a lary;ost r cp y(p-n am e,t emp n
12、 a me);)c lrscr();p r int f (a 1 I done!n );getch();r et u r n(h);)emplo y ee*S o rtByWage s(em p loye e*hea d)(emp 1 oyee*p,*q,*s,*h,*t em p;4 e m p=mal 1 o c(s i z e o f(employ e e);力二head;f or(s=h ead-n e xt;s!=NU L L;s=s-next)(P=s;f o r(q=s-n ex t;q!=NUL L;q=q-n ext)(if(p-salary)(q-sa 1 a ry)p=q
13、;)i f (p!=s)(temp-n o=sn o;t e mpdepno=s-depno;t e mp-s a lary=ssa 1 ary;s t r cp y(temp-n a m e,s-name);s-no=p-n o;s-d e pno=p-d e pno;s-s a 1 a r y=p-sal a ry;strc p y(s-n ame,p-n a me);p-n o=temp-no;P-dep n o=t em p-d epno;p sala r y=temp-sal a ry;strcpy(p-nam e,t emp n a me);)clrs c r();pri n tf
14、(a 1 I d o ne!nM);getch();retur n(h);)第一个就是根据职工号进行对职工表中的所有记录进行从小到大的排序,但是在这里说明一点,每一种排序都有相同的一点就是它们都是职工指针类型函数,且参数也是职工类型的头指针.在根据职工号来对职工登记表排序这个函数中采用的排序算法是直接选择排序法,即整体上有两层循环,第一层负责一个职工类型的指针变量从一号结点开始到最后一个结点之间的循环,其意义是把之前定义的职工类型的指针变量存放一号结点的地址,而尚有一个该类型的指针变量存放的是二号结点的地址,然后比较职工号的大小,然后把小的一个的地址存入第一个指针变量,在程序中是P指针,然后第
15、二层循环起效一直到最后一个结点为止跟一号结点的职工号比较大小最终把最小的一个的结点的地址存入P指针,然 后 该P指针的一切信息跟一号位置的结点的一切信息进行互换,若P指针最终存放的是一号结点的地址,则无需互换.接着外层循环起效,把二号结点的职工号跟三号结点开始(内外层循环的作用下两个指针往后移一步)比较,反复上述操作,一直到最后一个结点为止,最终实现把职工登记表的信息按职工号从小到大的排序.由于根据部门号排序和根据职工工资来进行排序是同样的结构,所以在这里不进行具体说明,整个函数中只有一条语句不同样,那就是根据职工号、根据部门号以及根据职工工资来进行比较时P指针一直存放职工号最小的结点、部门号
16、最小的结点或职工工资最小的结点地址.下面讲述删除功能的实现:em p Io y ee*De 1 et e AllInformat i on()(employee*h;h=NULL;clrs c r();printf(al 1 done!nM);ge t c h();return(h);)该函数是运用职工类型的指针变量赋予空值,然后返回给头指针,从而让本来存有职工记录的表置空.本程序尚有一个返回类型为空的函数,即程序一开始所呈现出的画面.v o id sho w()(c Irscr();printf(*n”);p rin tf(n );printf(welcom e t o u s e m an
17、age em ploye e s in f o r mat i on m icro sy s t emn);p r intf(H n);p r i n tf(M a.inse r t a inform a tion of employeen);p r i n t f(*b.o ut p ut.output a II i n f o r m atio n o f e m ployeen);p r intf(M c.s o r t by employees n umber n );pri n t f(d.o u t put al 1 i n fo r mation by em p 1 oy e e
18、s n u m b e rn);pr i ntf(M e.s or t by d ep a r tmen t s num be r n);print f(”f.ou t put all informati o n b y depa r tments n u mbe r n);prin t f(g.s o r t by emplo y e e s wages n);printf(M h.o utp u t all i n f o r m at i on by emplo y ee s w agesn );pri n tf(M i.d e lete al 1 emplo y e e s i n f
19、 ormation n );pr i ntf(n j.savenn);叩 r in t f(M 0,e x i t n M);p p n t f(“*)接着就是实现保存功能的函数,其代码如下:vo i d save(struct e mplo y ee*head)(FILE*file;oem p Io y ee*p;if(file=f open(d:职工登记表.txt,wb)=NULL)p r in t f (Hcan not op e n f i Ie n);fpr i n tf(file,r nH);/*将换行符号写入文献*/fp r intf(file,H em p loyee s na
20、m e em p Io y e es number depa r tme n t*s number e mp 1 oyees wagesr nM);fo r(p=h e a d-n e x t;p!=NULL;p=p nex t)(fp r int f (fi 1 e,t%st t%dttt%dtt%dr n,p nam e,p-no,p-d epno,p-s a 1 ary);/*写入记录*/fprintf(f i Ie,rn);/*将换行符号写入文献*/)f c lose(fi 1 e);/*关闭文献*/cl r s c r();p r intf(M s av e don e!n);get
21、ch();)下面说明整个程序的核心main函数,由于任何一个程序都是从main函数开始进行的,之所以由于如此,所以必须说明m a in函数:mai n()(oc h ar flag;oem p 1 oyee*h e ad;h ead=NU L L;show();sea n f(%c,&f l a g);whil e(flag!=O)switch(f 1 a g)ocase a*hea d=ins e r t(hea d);e show();c a se bz:K)u t p u t(head);s how();reak;c ase c:oh ead=So r tByEmpI o y eeNum
22、be r(head);show();c a se d:P II t p u t(h e a d);break;case 7 e:h e a d=S o rtB yD e p a r tmentN umber(hes h o w(break;cas e f:o utput(he a d);b r e a k;cas e g,:hea d=Sort B y W a ges(head);s how(b r eak;c a se h:outpu t(h e a d);。s how();cas e*i hea d=Del e teAIIInf o rmati o n();break;bbreak;os
23、h ow();ad););Mow(););b rea k;h o w()bre a k;c a se j:save(head);-s h ow();break;)scan f(%c ,&fl a g);)显而易见,在ma i n函数中除了以上说过的职工类型的头指针变量外尚有一些其他东西,那就是来提供选择功能的s witch case语句,之所以本函数能进行不同的功能的选择就是由于main函数中的whil e循 环 中 的switch c a s e语句,运用它选择不同的函数来实现不同的功能,即本程序的十个功能.7 程序运营过程详解本程序涉及输入一个职工记录,输出所有职工记录,根据职工号排序并输
24、出,根据部门号排序并输出,根据职工工资排序并输出,清空职工登记表,保存职工登记表即生成t x t文本文档和退出等功能,当我们运营程序是会出现如图1所示的窗口,其中可发现有以上说明的功能,根据旁边的小写英文字母来进行选择,方法是输入相应的小写英文字母并回车就会进入相应的功能界面.京忧 至 原 个 人 资 料 傲 喜 结 18161)乂:1.68welcome to use manage em ployees in forn ation micro systema.in s e r t a inform ation of employeeb.ou tp u t.output a ll inform
25、 ation of employeec.s o r t by em ployees numberd.output a ll in forn ation by em ployees numbere.s o r t by departm ent,s numberf.o u tp u t a l l inform ation by departm entJ s numberg.so r t by em ployees wagesh.output a l l inform ation by em ployees wagesi.d e le te a ll em ployees inform ation
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 数据结构 作业 源代码
限制150内