公司雇员管理系统的设计青岛科技大学信息学院课程设计报告_.docx_第1页
公司雇员管理系统的设计青岛科技大学信息学院课程设计报告_.docx_第2页
公司雇员管理系统的设计青岛科技大学信息学院课程设计报告_.docx_第3页
公司雇员管理系统的设计青岛科技大学信息学院课程设计报告_.docx_第4页
公司雇员管理系统的设计青岛科技大学信息学院课程设计报告_.docx_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

青 岛 科 技 大 学本科综合课程设计报告公司雇员管理系统的设计题 目 _目录1.设计内容31.1问题描述31.2需求分析32.设计思想32.1主界面设计32.2存储结构设计32.3系统功能设计33.模块设计33.1系统子函数33.2系统功能结构图34.详细设计34.1数据类型定义34.2系统主要子函数设计31.排序函数32.建立空链表函数33.链表的遍历34.求链表长度35. 查询编号为i的雇员信息36.查询姓名为name的雇员信息37. 雇员信息删除38. 数据元素插入39. 员工信息初始化310.版本信息展示311. 程序首页面312. 登陆界面显示313. 系统主界面显示314. 登陆函数315密码修改函数316.主函数35.程序测试35.1登陆测试35.2密码修改测试35.3版本信息测试35.4信息初始化测试35.5信息查询测试35.6信息增加测试35.7信息删除测试35.8信息修改测试35.9信息排序测试35.10信息显示测试36.课程设计总结37.参考文献31. 设计内容1.1问题描述在这个雇员信息管理系统中,包括企业中所有员工的信息,如:编号、姓名、部门、时薪、工作时间等。并且该系统能够完成所有员工信息的相应查询、更新、插入、删除、以及排序等功能。1.2需求分析本课程设计要实现公司雇员信息的管理,用C语言实现系统,主要功能如下:1) 建立记录雇员信息的数据结构,用结构体实现,雇员信息包含姓名、编号、部门、工作小时、每小时应付工资。2) 雇员信息的初始化(可从键盘输入雇员信息)。3) 雇员信息的添加、修改、删除、查找。l 添加:增加一个或几个雇员的记录。l 查找:可分别按编号、姓名查找记录。若找到,则显示该雇员的详细记录,否则提示未找到。l 删除:删除已有的雇员记录。输入雇员的编号或姓名查找要删除的记录,若找到,提示是否确定删除,若选择是,则删除该雇员信息,若选择否,则取消;若没找到,提示无此雇员信息。l 修改:修改某一雇员的记录。输入雇员的编号或姓名并查找,若找到,显示该雇员的所有信息,并可进行修改;否则提示无此雇员信息。4) 计算出每个雇员的工资,并按工资进行排序。5) 雇员信息的输出。6) 密码验证登录功能实现。1) 本程序代码用C语言编写实现2) 雇员信息的存储以及对信息的操作通过线性链表实现,理由如下l 线性链表可以实现在雇员信息存储的要求l 程序中存在较多对数据元素的删除,增添等操作,利用线性链表可以提高程序的运行速度2. 设计思想2.1主界面设计输入登录密码后,可进入系统,初始密码“12345”,输入登陆密码以后,界面如下所示:2.2存储结构设计依据给定的数据格式,个人信息由6个字段来组成,即编号、姓名、性别、生日、学历、职务、电话和住址,外加一个判断关键字。如: 编号 | 姓名 | 部门 | 工作时间 | 时薪 1 zhao jiaowu 30 30本课程设计根据功能需求,使用线性链表结构来组织数据,由于要对表中某项数据进行插入、删除操作,所以使用链表比较方便并且高速。2.3系统功能设计依据程序的数据结构和功能,遵照“自顶向下”原则,描述该程序的层次结构,在总体上包括数据的插入、添加、删除、查找、更改和数据的排序以及数据的显示等功能模块。(1)输入函数功能:通过输入各项数据给数据元素,来建立一个数据表。(2)排序函数功能:按照总工资(时薪*工作时间)对员工信息进行降序排序。(3)显示函数功能:输出表中所有雇员的信息。(4)查找函数功能:按照指定关键字,对相应员工信息进行查找。(5)更改函数功能:输入员工编号,查找到员工信息,对其信息进行更新。(6)删除函数功能:查找到要删除员工的相应信息,并将其从表中永久的删除。(7)主函数功能:调用以上子函数,并用开关语句进行选择性的调用。(8)其它函数功能:主要起辅助作用,比如:菜单函数,主要起到引导作用;释放空间函数,主要用于释放已经删除节点的信息,或者释放整个链表的节点信息。3. 模块设计3.1系统子函数1) 初始化函数:LinkedList LinkedListCreat() /通过输入各项数据给数据元素,来建立一个带有头节点的数据表。2) 排序函数: LinkedList SelectSort2(LinkedList L) /按照指定关键字对员工信息进行排序。3) void LinkedListTraverse(LinkedList L)/单链表的遍历4) int LinkedListLength(LinkedList L)/求链表长度5) LinkedList LinkedListGet(LinkedList L, double i)/查询编号为i的雇员信息6) LinkedList LinkedListGet_name(LinkedList L, char name20)/查询姓名为name的雇员信息7) int LinkedListDel(LinkedList L,double num)/雇员信息删除8) void LinkedListInsert(LinkedList L, double i, double number,char name20,char department20,double time,double pay)/数据元素插入9) void show() /版本信息显示10) int index_1()/程序首页面11) int scan_login()/登陆界面显示12) int scan()/系统主界面显示13) int login()/登陆函数14) int changepass()/密码修改函数15) void main()/主函数3.2系统功能结构图4. 详细设计4.1数据类型定义结构体定义typedef structLNode/雇员数据结构描述double number;/编号char name20;/名字char department20;/部门double time;/工作时间double pay;/时薪struct LNode *next;/指针 LNode,*LinkedList;4.2系统主要子函数设计1.排序函数函数原型:LinkedList SelectSort2(LinkedList L)函数功能:对雇员信息进行排序,按照薪资(工作时间*时薪)升序排列算法要点:1) 对链表中的信息以此进行比较,若后面节点信息小于前面节点,则对两个节点的信息进行互换,以此类推2) 遍历结束以后,返回头结点的地址主要算法:LinkedList SelectSort2(LinkedList L)/排序函数实现 LinkedList p,q,small; double temp,i,j;char cop20; for(p = L-next; p-next != NULL; p = p-next) small = p; for(q = p-next; q; q = q-next) i=(q-time)*(q-pay);j=(small-time)*(small-pay); if(inumber; p-number = small-number; small-number = temp;temp = p-pay; p-pay = small-pay; small-pay = temp;temp = p-time; p-time = small-time; small-time = temp;strcpy(cop,p-name);strcpy(p-name,small-name);strcpy(small-name,cop);strcpy(cop,p-department);strcpy(p-department,small-department);strcpy(small-department,cop); return L;2.建立空链表函数函数原型:LinkedList LinkedListInit()函数功能:建立一个空链表算法要点:(1) 申请一段空间,并将L的指针指向NULL主要算法:LinkedList LinkedListInit()/线性链表初始化LinkedList L;L=(LinkedList)malloc(sizeof(LNode);L-next=NULL;return L;3.链表的遍历函数原型:LinkedList LinkedListInit()函数功能:建立一个空链表算法要点:(1) 对存储的雇员信息一一进行遍历,并按照固定格式输出(2) 遍历的判断条件为p!=NULL主要算法:void LinkedListTraverse(LinkedList L)/单链表的遍历LinkedList p;p=L-next;printf(编号|姓名|部门|工时|时薪n);while(p!=NULL)printf( %-3.0f %s %s %-3.0f %-3.0fn,p-number,p-name,p-department,p-time,p-pay);p=p-next;printf(n);4.求链表长度函数原型:int LinkedListLength(LinkedList L)函数功能:求现有链表的长度算法要点:1) 循环判断条件为p!=NULL主要算法:int LinkedListLength(LinkedList L)/求链表长度LinkedList p;int j;p=L-next;j=0;while(p!=NULL) j+;p=p-next; return j;5. 查询编号为i的雇员信息函数原型:LinkedList LinkedListGet(LinkedList L, double i)函数功能:查询编号为i的雇员信息算法要点:1) 判断的条件为传过来的形参i与判断节点的信息相等并且循环条件为p!=0&(jnext;while(p!=0&(jnumber=i) return p;elsep=p-next;j+;return 0;6.查询姓名为name的雇员信息函数原型:LinkedList LinkedListGet_name(LinkedList L, char name20)函数功能:查询姓名为name的雇员信息算法要点:1) 判断的条件为传过来的形参name20与判断节点的信息相等并且循环条件为p!=0&(jnext;while(p!=0&(jname,name)=0) return p;elsep=p-next;j+;return 0;7. 雇员信息删除函数原型:int LinkedListDel(LinkedList L,double num)函数功能:删除编号为num的雇员信息算法要点:1) 操作完成以后要释放节点p主要算法:int LinkedListDel(LinkedList L,double num)/雇员信息删除 LinkedList pre,p;pre=L;p=L-next;while(p&p-number!=num)pre=p;p=p-next;if(p=NULL)printf(数据库中没有编号为%lf的雇员信息n,num);return 1;pre-next=p-next;free(p);return 0;8. 数据元素插入函数原型:void LinkedListInsert(LinkedList L, double i, double number,char name20,char department20,double time,double pay)函数功能:数据元素插入算法要点:1) 插入位置默认为“表长+1”,所以传过的形参i为double(LinkedListLength(L)+1)主要算法:void LinkedListInsert(LinkedList L, double i, double number,char name20,char department20,double time,double pay)/数据元素插入LinkedList pre,p,s;int j=1;pre=L;p=L-next;while(pre&jnext;j+;if(pre=NULL) printf(给的i值超过了表长);exit(0);s=(LNode *)malloc(sizeof(LNode);s-number=number;strcpy(s-name,name);strcpy(s-department,department);s-time=time;s-pay=pay;pre-next=s;s-next=p;9. 员工信息初始化函数原型:LinkedList LinkedListCreat()函数功能:员工信息初始化算法要点:1) 在进行初始化之前要申请一个空链表2) 初始化的时候务必按照格式输入主要算法:LinkedList LinkedListCreat()/员工信息初始化 LinkedList L=LinkedListInit(),p,r;r=L;double number,time,pay;char name20,department20,zero20=0;printf(请按照以下格式输入信息,输入0 0 0 0 0退出n);printf(编号|姓名|部门|工作时间|时薪n);scanf(%lf %s %s %lf %lf,&number,name,department,&time,&pay);while(strcmp(name,zero)p=(LinkedList)malloc(sizeof(LNode);p-number=number;strcpy(p-name,name);strcpy(p-department,department);p-time=time;p-pay=pay;r-next=p;r=p;scanf(%lf %s %s %lf %lf,&number,name,department,&time,&pay);r-next=NULL;return L;10.版本信息展示函数原型:void show()函数功能:显示开发人员信息算法要点:无主要算法:void show()printf(*n);printf(* *n);printf(* 姓名:赵凯强 *n);printf(* 班级:信息113 *n);printf(* 学号:1108020324 *n);printf(* QQ:419927089 *n);printf(* *n);printf(*n);index_1();11. 程序首页面函数原型:int index_1()函数功能:程序首页面算法要点:无主要算法:int index_1()/程序首页面switch(scan_login()case 1:login();break;case 2:changepass();break;case 3:show();break;case 4:exit(-1);break;default:printf(请您按照提示操作!n);index_1();break;return 0;12. 登陆界面显示函数原型:int scan_login()函数功能:登陆界面显示算法要点:无主要算法:int scan_login()/登陆界面显示int d;printf(-雇员信息管理系统-n);printf(1.登陆n2.修改密码n3.版本信息n4.退出n);printf(-n);scanf(%d,&d);13. 系统主界面显示函数原型:int scan()函数功能:系统主界面显示算法要点:无主要算法:int scan()/系统主界面显示int d;printf(-雇员信息管理系统-n);printf(1.雇员信息初始化n);printf(2.雇员信息查询n);printf(3.雇员信息增加n);printf(4.雇员信息删除n);printf(5.雇员信息修改n);printf(6.雇员工资排序n);printf(7.显示所有信息n);printf(0.退出系统n);printf(-n);scanf(%d,&d);return(d);14. 登陆函数函数原型:int login()函数功能:登陆算法要点:1) 初始密码为123452) 可以进行修改密码,最多9位3) 密码输入错误以后提示重新输入或者退出主要算法:int login()/登陆函数char pass10;printf(请您输入登陆密码(最多9位):);scanf(%10s,pass);while(strcmp(pass,password)!=0)printf(对不起,您输入的密码有误,请重新输入!n);printf(或者输入“0”退出登录系统!n);scanf(%10s,pass);if(strcmp(pass,0)=0)exit(-1);printf(欢迎您成功进入系统!n);return 0;15密码修改函数函数原型:int changepass()函数功能:密码修改算法要点:1) 需要输入原密码才能进行修改2) 密码最多9位主要算法:int changepass()/密码修改函数char pass10;char newpass10;printf(请输入原密码n);scanf(%10s,pass);while(strcmp(pass,password)!=0)printf(对不起,您输入的密码有误,请重新输入!n);printf(或输入“0”返回上级系统!n);scanf(%10s,pass);if(strcmp(pass,0)=0)index_1();printf(请输入新密码(最多10位)n);scanf(%10s,newpass);strcpy(password,newpass);printf(密码修改成功!n);index_1();return 0;16.主函数函数原型:void main()函数功能:对其他函数进行调用,控制系统运行算法要点:无主要算法:void main()/主函数double num,m,n;int i=1,j,initialization=0;double number,time,pay;char name20,department20;LinkedList L,p;printf(欢迎您进入X公司雇员信息管理系统,请按照以下提示进行操作!n);index_1();while(1)switch(scan()case 1:L=LinkedListCreat();initialization=1;break;case 2:printf(请输入查询方式(1.编号 2.姓名):);scanf(%d,&j);switch(j)case 1:printf(请输入编号:);scanf(%lf,&num);p=LinkedListGet(L,num);if(p!=0)printf(编号|姓名|部门|工时|时薪n);printf( %-3.0f %s %s %-3.0f %-3.0fn,p-number,p-name,p-department,p-time,p-pay);else printf(未找到该记录!n);break;case 2:printf(请输入姓名:);scanf(%s,name);p=LinkedListGet_name(L,name);if(p!=0)printf(编号|姓名|部门|工时|时薪n);printf( %-3.0f %s %s %-3.0f %-3.0fn,p-number,p-name,p-department,p-time,p-pay);else printf(未找到该记录!n);break;break;case 3:printf(请输入所要添加的信息:);scanf(%lf %s %s %lf %lf,&number,name,department,&time,&pay);LinkedListInsert(L,double(LinkedListLength(L)+1),number,name,department,time,pay);break;case 4:printf(请输入要删除雇员信息的编号:);while(i)scanf(%lf,&m);n=LinkedListDel(L,m);if(n=0)printf(删除成功!n);i=0;else printf(请重新输入所要删除雇员信息的编号:);i=1;break;case 5:printf(请输入所要修改信息的雇员

温馨提示

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

评论

0/150

提交评论