关闭

关闭

关闭

封号提示

内容

首页 C语言程序设计-职工信息管理系统设计(链表).doc

C语言程序设计-职工信息管理系统设计(链表).doc

C语言程序设计-职工信息管理系统设计(链表).doc

上传者: 往事已经不能回头 2017-10-11 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《C语言程序设计-职工信息管理系统设计(链表)doc》,可适用于综合领域,主题内容包含C语言程序设计职工信息管理系统设计(链表)信息与电子工程学院C语言课程设计职工信息管理系统设计实验日期和时间:年月日,月日实验类别:课程设计实验类型符等。

C语言程序设计职工信息管理系统设计(链表)信息与电子工程学院C语言课程设计职工信息管理系统设计实验日期和时间:年月日,月日实验类别:课程设计实验类型:设计性一、实验环境操作系统:windowsxp编程工具:MicrosoftVisualCInter(R)Core(TM)QuadcpuQBGHz)内存:GB开发环境:CPU(硬盘:GB开发地点:现代教育中心机房A座IP:二、实验目的和要求实验目的:()使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作算法。()使学生进一步掌握程序设计、编写、调试能力。()使学生了解软件开发的基本步骤和内容。实验要求:完成一个职工信息管理系统程序具体内容如下:()在内存中用链表记录在硬盘上用二进制文件保存。()设计完的程序能够以命令行或者菜单形式增加、删除、更新和查询数据的内容。数据内容能够排序以方便查询。()数据库中应该有至少条记录。三、实验内容和结果()程序整体功能、系统总体框开始菜单n根据菜单输入的值选择程序退出录入修改浏览分类删除从文职工职工职工查找职工件读信息信息信息职工信息取信信息息按姓按职名查工号找查找Y是否继续进行N结束、模块设计该程序主要分为个模块分别是创建与添加模块、显示模块、查找模块、修改模块、删除模块、存档模块、文件统计模块、退出模块()程序组成及各模块函数功能创建与添加模块:该模块的功能是输入职工信息。函数为voidAdd(Node*woker)原理:采用尾插法先建立链表与头结点新增一个结点键盘输入职工号、职工姓名、职工性别、职工出生年月、职工学历、职工职位、职工工资将这些信息存储到新增结点中将新增加的节点连到链表的尾端如此以往将尾结点的指针域置空这样就得到了一条存储职工信息的链表这样就完成了职工信息的创建与增加。显示模块:该模块功能是显示职工信息。函数为voidDisp(Node*woker)原理:先新建一个指针P指向头结点判断它的指针域是否为空若为空则输出“没有记录可以显示”若不为空则输出它的指针域所指向节点所储存的职工信息并将该指针向后移一个结点直到P指向空即输出了所有职工的信息这样就完成了所有职工信息的显示。查找模块:该模块功能是查找职工信息。函数为voidTongji(Node*woker)原理:该模块分为两种查找方法分别是按职工号查找和按职工姓名查找因为这两种查找方法雷同所以这里将只解释按职工号查找的原理。先键盘输入一个要查找的职工号并新建一个指针P指向头结点判断它的指针域是否为空若为空则输出“没有资料可以统计分类”若不为空则判断它的指针域所指向节点所储存的职工信息中的职工号若相等则输出这个职工的其他所有信息并将P指向下一个结点再次进行判断直到P指向空即输出了所有查找到的信息。若不相等则P指向下一个结点再次进行判断直到P指向空即输出了所有查找到的信息这样就完成了职工信息的查找。修改模块:该模块功能是修改职工信息。函数为voidchange(Node*woker)原理:根据查找原理查找到要修改信息的职工删除这一节点并新建一个节点键盘输入想要修改的内容并储存到新的结点中将新的节点连接到链表中原先删除结点的位子这样就完成了职工信息的修改。删除模块:该模块功能是删除管理职工信息。函数为voiddismiss(Node*woker)根据查找的原理查找到要修改信息的职工删除这一节点并将其前驱结点的指针域指向其后继结点这样就完成了职工信息的删除。存档模块:将内存中的信息存储到文件中。函数为voidsave(Node*woker)原理:打开文件新建一个指针P指向头结点判断它的指针域是否为空若为空则输出“无记录”若不为空则将这个职工的所有信息输入到文件中并将P指向下一个结点直到P指向空即输入了的信息文件统计模块:打开文件统计职工数目并输出。函数为voidload(Node*woker)退出模块:该模块功能是退出管理档案。()重要数据结构重要模块函数算法:创建与添加模块:voidAdd(Node*woker)添加记录{Node*p,*r,*scharn先用于输入职工号,也用于判断是否跳出循环r=wokers=woker>next使s为第一个有用的结点while(r>next!=)这个循环的作用是使r为最后一个有用的结点r=r>next将指针置于最末尾while(){printf(">>>>>>>>>>提示:输入则返回主菜单!n")printf("n请你输入职工号:")scanf("s",n)if(strcmp(n,"")==)breakp=(Node*)malloc(sizeof(Node))申请空间strcpy(p>datanum,n)printf("n请输入姓名:")scanf("s",p>dataname)printf("n请输入性别:")scanf("s",p>datasex)printf("n请输入出生年月:")scanf("s",p>databirthday)printf("n请输入学历:")scanf("s",p>datadegree)printf("n请输入职位:")scanf("s",p>dataposition)printf("n请输入工资:")scanf("s",p>datasalary)printf(">>>>>>>>>>提示:已经完成一条记录的添加。n")p>next=r>next=p这一步是必需的,将p与先前的链表连起来构成一条新链表r=p也是必需的将r又重设为新链的最后一个有用结点}}:显示模块voidDisp(Node*woker)输出职工信息{Node*pp=woker>nextif(!p){printf("n>>>>>>>>>>提示:没有记录可以显示!n")return}printf("tttt显示结果n")printf("职工号职工姓名职工性别职工生日职工学历职工职位职工工资n")while(p){printf("nsssssssn",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)p=p>next}}:查找模块voidTongji(Node*woker)查找统计函数{Node*pintselintflag=,ha=p=woker>nextcharfindif(!woker>next)若链表为空{printf("n>>>>>>>>>>提示:没有资料可以统计分类!n")return}printf(">>>>>>>>>>提示:n=====>退出n=====>按职工号统计n=====>按职工姓名名称统计n")scanf("d",sel)if(sel==){printf("n输入你要统计分类的职工号:")scanf("s",find)while(p){if(strcmp(p>datanum,find)==){flag}if(flag==ha!=flag){printf("职工号职工姓名职工性别职工生日职工学历职工职位职工工资n")printf("nsssssssn",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)ha=flag}elseif(flag>ha){printf("nsssssssn",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)ha=flag}p=p>next}if(flag){printf("n*************************按设备号s统计分类的有d条记录:*************************nn",find,flag)}else{printf("n按职工号s统计的结果为个nn",find)}}elseif(sel==){printf("n输入你要统计分类的职工姓名:")scanf("s",find)while(p){if(strcmp(p>dataname,find)==){flag}if(flag==ha!=flag){printf("职工号职工姓名职工性别职工生日职工学历职工职位职工工资n")printf("nsssssssn",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)ha=flag}elseif(flag>ha){printf("nsssssssn",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)ha=flag}p=p>next}if(flag){printf("n******************按设备名称s统计的有d条记录:********************nn",find,flag)}else{printf("n按职工姓名s统计分类的结果为个nn",find)}}elseif(sel==)return}:修改模块voidchange(Node*woker)修改职工信息函数{Node*pcharfindif(!woker>next){printf("n>>>>>>>>>>提示:没有资料可以修改!n")return}printf("请输入要修改的职工号:")scanf("s",find)p=woker>nextwhile(p!=){if(strcmp(p>datanum,find)==)如果找到的话返回的是符合要求breakp=p>next}if(p){intxwhile(){printf("完成修改请输入否则输入任意数再进行修改:")scanf("d",x)if(x==){break}printf("请输入新职工号(原来是s):",p>datanum)scanf("s",p>datanum)printf("请输入新职工姓名(原来是s):",p>dataname)scanf("s",p>dataname)printf("请输入新职工性别(原来是s):",p>datasex)scanf("s",p>datasex)printf("请输入新出生年月(原来是s):",p>databirthday)scanf("s",p>databirthday)printf("请输入新职工学历(原来是s):",p>datadegree)scanf("s",p>datadegree)printf("请输入新职工职位(原来是s):",p>dataposition)scanf("s",p>dataposition)printf("请输入新职工工资(原来是s):",p>datasalary)scanf("s",p>datasalary)printf("n>>>>>>>>>>提示:该项记录资料已经成功修改!n")}}elseprintf("n>>>>>>>>>>提示:你要修改的信息不存在!n")}:删除模块voiddismiss(Node*woker)删除职工信息函数{Node*p,*r,*scharfindif(!woker>next){printf("n>>>>>>>>>>提示:没有资料可以显示!n")return}printf("n>>>>>>>>>>提示:请输入您要删除的职工号!n")scanf("s",find)p=woker>nextwhile(p!=){if(strcmp(p>datanum,find)==)如果找到的话返回的是符合要求breakp=p>next}if(!p)printf("n>>>>>>>>>>提示:找不到您想删除的职工号!n")else{r=wokerwhile(r>next!=p)r=r>nexts=r>nextr>next=r>next>next}}:存档模块voidsave(Node*woker)将职工信息保存到文件{intnNode*pFILE*fp指向文件的指针printf("需要保存吗(保存不保存)")scanf("d",n)if(n){if(woker>next==)printf("无记录")elsep=woker>nextif((fp=fopen("职工管理系统dat","wb"))==)打开文件并判断打开是否正常printf("cannotopenfilen")打开文件出错while(p!=){fprintf(fp,"sssssss",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)p=p>next}fclose(fp)关闭文件}}:文件统计模块voidload(Node*woker){Node*p,*qFILE*fp指向文件的指针intrecordNum统计记录数if((fp=fopen("职工管理系统dat","rb"))==)打开文件{printf("cannotopenfilen")不能打开}p=wokerrecordNum=while(!feof(fp)){q=(Node*)malloc(sizeof(Node))fscanf(fp,"sssssss",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)*从文件读入记录*p>next=qq>next=p=qrecordNum}fclose(fp)printf("文件里共有d条记录:n",recordNum)}:主函数模块voidmain(){Node*wokerFILE*fpintflagNode*p,*qprintf("tttt职工信息管理系统n")woker=(Node*)malloc(sizeof(Node))woker>next=p=wokerwhile(){printf("**************************************目录**************************************")printf("n添加记录n")printf("n修改记录n")printf("n浏览记录n")printf("n分类查找记录n")printf("n删除记录n")printf("n从文件读取记录n")printf("n*EXIT*n")printf("请输入你要操作的序号:")scanf("d",flag)switch(flag){case:printf("n>>>>>>>>>>提示:已经退出系统,ByeBye!n")breakcase:Add(woker)save(woker)break增加记录case:change(woker)break修改记录case:Disp(woker)break显示记录信息case:Tongji(woker)break查找记录case:dismiss(woker)break删除记录case:load(woker)break读取记录default:printf("n>>>>>>>>>>提示:输入错误!n")break}}}()程序的运行和测试结果主界面:创建与增加模块:输入职工信息为:职工姓职工性职工出生年职工学职工职职工工职工号名别月历位资AfaaaBmbbbCfcccDmddd输入第一次时:输入第二次时:输入第三次时:输入第四次时:显示模块:输入四次后显示的结果为:存档模块:文件统计模块:查找模块:输入查找职工号为的职工信息:输入查找职工姓名为c的职工信息:修改模块:修改职工号为的职工信息为:职工姓职工性职工出生年职工学职工职职工工职工号名别月历位资Efeee职工信息变成:删除模块:删除职工号为的职工信息:删除后的结果为:退出模块:四、实验中的问题及心得此次实践课编写的是一个应用程序相对于以前我们见到的程序它要大得多运行的结果也没有预想中的好数据的输出格式不太规范而且各模块也出现了一些小问题在老师和同学的帮助下我很有耐心的一次又一次的进行修改最后运行的结果基本上达到了预期的目的。本次C语言的实习课让我对C语言的学习又有了更深入的了解也让我更深刻地领悟到了“实践出真理”这个道理在上机实践过程中学到的知识远远超过了在课堂上十几周学到的这次程序设计课让我增添了许多程序设计经验为我们将来走上工作岗位其了不小的铺垫作用。本次实习中遇到了很多以前没有遇到过的问题也曾想过要放弃但看到那些同学都在那认真的写程序给了我继续的信心。在同学和老师的帮助下我顺利的结束了本次实习让我知道原来凭借自己努力取得的成功会让自己这么欣慰也让我知道了友谊和团结的重要性。()程序清单#include"stdioh"#include"stdlibh"#include"stringh"structwokers定义一个woker的结构体{charnum职工号charname职工姓名charsex职工性别charbirthday职工出生年月chardegree职工学历charposition职工职位charsalary职工工资}typedefstructnode{structwokersdatastructnode*next建立一个链表。}NodevoidAdd(Node*woker)添加记录{Node*p,*r,*scharn先用于输入职工号,也用于判断是否跳出循环r=wokers=woker>next使s为第一个有用的结点while(r>next!=)这个循环的作用是使r为最后一个有用的结点r=r>next将指针置于最末尾while(){printf(">>>>>>>>>>提示:输入则返回主菜单!n")printf("n请你输入职工号:")scanf("s",n)if(strcmp(n,"")==)breakp=(Node*)malloc(sizeof(Node))申请空间strcpy(p>datanum,n)printf("n请输入姓名:")scanf("s",p>dataname)printf("n请输入性别:")scanf("s",p>datasex)printf("n请输入出生年月:")scanf("s",p>databirthday)printf("n请输入学历:")scanf("s",p>datadegree)printf("n请输入职位:")scanf("s",p>dataposition)printf("n请输入工资:")scanf("s",p>datasalary)printf(">>>>>>>>>>提示:已经完成一条记录的添加。n")p>next=r>next=p这一步是必需的,将p与先前的链表连起来构成一条新链表r=p也是必需的将r又重设为新链的最后一个有用结点}}voidchange(Node*woker)修改职工信息函数{Node*pcharfindif(!woker>next){printf("n>>>>>>>>>>提示:没有资料可以修改!n")return}printf("请输入要修改的职工号:")scanf("s",find)p=woker>nextwhile(p!=){if(strcmp(p>datanum,find)==)如果找到的话返回的是符合要求breakp=p>next}if(p){intxwhile(){printf("完成修改请输入否则输入任意数再进行修改:")scanf("d",x)if(x==){break}printf("请输入新职工号(原来是s):",p>datanum)scanf("s",p>datanum)printf("请输入新职工姓名(原来是s):",p>dataname)scanf("s",p>dataname)printf("请输入新职工性别(原来是s):",p>datasex)scanf("s",p>datasex)printf("请输入新出生年月(原来是s):",p>databirthday)scanf("s",p>databirthday)printf("请输入新职工学历(原来是s):",p>datadegree)scanf("s",p>datadegree)printf("请输入新职工职位(原来是s):",p>dataposition)scanf("s",p>dataposition)printf("请输入新职工工资(原来是s):",p>datasalary)scanf("s",p>datasalary)printf("n>>>>>>>>>>提示:该项记录资料已经成功修改!n")}}elseprintf("n>>>>>>>>>>提示:你要修改的信息不存在!n")}voidDisp(Node*woker)输出职工信息{Node*pp=woker>nextif(!p){printf("n>>>>>>>>>>提示:没有记录可以显示!n")return}printf("tttt显示结果n")printf("职工号职工姓名职工性别职工生日职工学历职工职位职工工资n")while(p){printf("nsssssssn",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)p=p>next}}voidTongji(Node*woker)查找统计函数{Node*pintselintflag=,ha=p=woker>nextcharfindif(!woker>next)若链表为空{printf("n>>>>>>>>>>提示:没有资料可以统计分类!n")return}printf(">>>>>>>>>>提示:n=====>退出n=====>按职工号统计n=====>按职工姓名名称统计n")scanf("d",sel)if(sel==){printf("n输入你要统计分类的职工号:")scanf("s",find)while(p){if(strcmp(p>datanum,find)==){flag}if(flag==ha!=flag){printf("职工号职工姓名职工性别职工生日职工学历职工职位职工工资n")printf("nsssssssn",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)ha=flag}elseif(flag>ha){printf("nsssssssn",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)ha=flag}p=p>next}if(flag){printf("n*************************按设备号s统计分类的有d条记录:*************************nn",find,flag)}else{printf("n按职工号s统计的结果为个nn",find)}}elseif(sel==){printf("n输入你要统计分类的职工姓名:")scanf("s",find)while(p){if(strcmp(p>dataname,find)==){flag}if(flag==ha!=flag){printf("职工号职工姓名职工性别职工生日职工学历职工职位职工工资n")printf("nsssssssn",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)ha=flag}elseif(flag>ha){printf("nsssssssn",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)ha=flag}p=p>next}if(flag){printf("n******************按设备名称s统计的有d条记录:********************nn",find,flag)}else{printf("n按职工姓名s统计分类的结果为个nn",find)}}elseif(sel==)return}voidload(Node*woker){Node*p,*qFILE*fp指向文件的指针intrecordNum统计记录数if((fp=fopen("职工管理系统dat","rb"))==)打开文件{printf("cannotopenfilen")不能打开}p=wokerrecordNum=while(!feof(fp)){q=(Node*)malloc(sizeof(Node))fscanf(fp,"sssssss",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)*从文件读入记录*p>next=qq>next=p=qrecordNum}fclose(fp)printf("文件里共有d条记录:n",recordNum)}voidsave(Node*woker)将职工信息保存到文件{intnNode*pFILE*fp指向文件的指针printf("需要保存吗(保存不保存)")scanf("d",n)if(n){if(woker>next==)printf("无记录")elsep=woker>nextif((fp=fopen("职工管理系统dat","wb"))==)打开文件并判断打开是否正常printf("cannotopenfilen")打开文件出错while(p!=){fprintf(fp,"sssssss",p>datanum,p>dataname,p>datasex,p>databirthday,p>datadegree,p>dataposition,p>datasalary)p=p>next}fclose(fp)关闭文件}}voiddismiss(Node*woker)删除职工信息函数{Node*p,*r,*scharfindif(!woker>next){printf("n>>>>>>>>>>提示:没有资料可以显示!n")return}printf("n>>>>>>>>>>提示:请输入您要删除的职工号!n")scanf("s",find)p=woker>nextwhile(p!=){if(strcmp(p>datanum,find)==)如果找到的话返回的是符合要求breakp=p>next}if(!p)printf("n>>>>>>>>>>提示:找不到您想删除的职工号!n")else{r=wokerwhile(r>next!=p)r=r>nexts=r>nextr>next=r>next>next}}voidmain(){Node*wokerFILE*fpintflagNode*p,*qprintf("tttt职工信息管理系统n")woker=(Node*)malloc(sizeof(Node))woker>next=p=wokerwhile(){printf("**************************************目录**************************************")printf("n添加记录n")printf("n修改记录n")printf("n浏览记录n")printf("n分类查找记录n")printf("n删除记录n")printf("n从文件读取记录n")printf("n*EXIT*n")printf("请输入你要操作的序号:")scanf("d",flag)switch(flag){case:printf("n>>>>>>>>>>提示:已经退出系统,ByeBye!n")breakcase:Add(woker)save(woker)break增加记录case:change(woker)break修改记录case:Disp(woker)break显示记录信息case:Tongji(woker)break查找记录case:dismiss(woker)break删除记录case:load(woker)break读取记录default:printf("n>>>>>>>>>>提示:输入错误!n")break}}}五、评分(请每个学生在做课程设计时仔细对照下面的考核标准表所列出的要求在交报告之前先自己打自评分老师将在验收成果时打分)自评分教师评分()记录用结构表示至少包含字符串(如名字)和整型(如年龄)(,)()用链表来动态保存记录并能以命令行或者菜单程序功能和原理形式增加(,)、删除(,)、查询(,)、排序(,)(,)内容。如果用数组最多得分。()用二进制文件永久保存记录,并能在程序开始运行时读取文件内容(,)在程序运行结束前保存到文件(,)()用大括号和缩进来清楚地显示程序结构。(提示:按一次"tab"键产生一个缩进)(,)()各函数有功能说明和参数说明对每个函数参数和函数返回值的含义进行说明(,)()每个源程序文件都有说明(比如本程序功能作程序质量()者包含哪些函数)(,)()每个函数长度不超过行(,)()函数、变量取名较规范易懂(,)()对不容易理解的常量、变量和语句有注释(比如全局常量、全局变量、if语句)(,)()说明程序整体功能、各模块函数功能(,)()用流程图或其他有效方法描述一个函数的算法(,)总结报告()()有小组分工情况说明和各自的经验总结(,)()附程序清单(,)()语言简练条理清楚图表规范容易理解(,)(提示:请关注一下字体大小、图表的标题)()会单步运行到任何一个语句(,)(调试手段()()单步运行时能查看变量值(,)总成绩:等级:

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/35
0下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部