2022年C语言程序设计-职工信息管理系统 .pdf
《2022年C语言程序设计-职工信息管理系统 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言程序设计-职工信息管理系统 .pdf(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、信息与电子工程学院C语言课程设计职工信息管理系统设计实验日期和时间: 2011 年 06 月 27 日06 月 29 日实验类别:课程设计实验类型:设计性名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 26 页 - - - - - - - - - 一、 实验环境操作系统: windows xp 编程工具: Microsoft Visual C+ 6.0 开发环境: CPU (Inter(R)Core(TM)2 Quad cpu QB200 2.33GHz)内存:2.76G
2、B 硬盘: 228.3GB 开发地点:现代教育中心201 机房 A17座IP:10.250.11.17 二、实验目的和要求实验目的:(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作算法。(2)使学生进一步掌握程序设计、编写、调试能力。(3)使学生了解软件开发的基本步骤和内容。实验要求:完成一个职工信息管理系统程序,具体内容如下:(1)在内存中用链表记录,在硬盘上用二进制文件保存。(2)设计完的程序能够以命令行或者菜单形式增加、删除、更新和查询数据的内容。数据内容能够排序以方便查询。(3)数据库中应该有至少20 条记录。名师资料总结 - - -精品资料欢迎下载
3、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 26 页 - - - - - - - - - 三、实验内容和结果(1)程序整体功能;1、系统总体框菜单开始根 据 菜 单 输 入n 的 值 选择 程 序结束是否继续进行N Y 2 修改职工信息3 浏览职工信息4 分类查找职工信息5 删除职工信息6 从文件读取信息0 退出1 录入职工信息按职工号查找按姓名查找名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
4、3 页,共 26 页 - - - - - - - - - 2、模块设计该程序主要分为 7 个模块,分别是创建与添加模块、显示模块、查找模块、修改模块、删除模块、存档模块、文件统计模块、退出模块(2)程序组成及各模块/函数功能;创建与添加模块 :该模块的功能是输入职工信息。函数为void Add(Node *woker) 原理:采用尾插法,先建立链表与头结点, 新增一个结点, 键盘输入职工号、职工姓名、职工性别、职工出生年月、职工学历、职工职位、职工工资,将这些信息存储到新增结点中, 将新增加的节点连到链表的尾端,如此以往, 将尾结点的指针域置空, 这样就得到了一条存储职工信息的链表,这样就完成
5、了职工信息的创建与增加。显示模块 :该模块功能是显示职工信息。函数为void Disp(Node *woker) 原理:先新建一个指针P指向头结点,判断它的指针域是否为空,若为空,则输出“没有记录可以显示” ;若不为空,则输出它的指针域所指向节点所储存的职工信息, 并将该指针向后移一个结点,直到 P指向空,即输出了所有职工的信息,这样就完成了所有职工信息的显示。查找模块 :该模块功能是查找职工信息。函数为void Tongji(Node *woker) 原理:该模块分为两种查找方法,分别是按职工号查找和按职工姓名查找,因为这两种查找方法雷同, 所以这里将只解释按职工号查找的原理。先键盘输入一个
6、要查找的职工号并新建一个指针P指向头结点,判断它的指针域是否为空,若为空,则输出“没有资料可以统计分类”,若不为空,则判断它的指针域所指向节点所储存的职工信息中的职工号, 若相等,则输出这个职工的其他所有信息,并将 P指向下一个结点, 再次进行判断, 直到 P指向空, 即输出了所有查找到的信息。若不相等,则 P指向下一个结点,再次进行判断,直到P指向空,即输出了所有查找到的信息,这样就完成了职工信息的查找。修改模块: 该模块功能是修改职工信息。 函数为 void change(Node *woker) 原理:根据查找原理,查找到要修改信息的职工,删除这一节点,并新建一名师资料总结 - - -精
7、品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 26 页 - - - - - - - - - 个节点,键盘输入想要修改的内容, 并储存到新的结点中, 将新的节点连接到链表中原先删除结点的位子,这样就完成了职工信息的修改。删除模块 :该模块功能是删除管理职工信息。函数为void dismiss(Node *woker) 根据查找的原理, 查找到要修改信息的职工, 删除这一节点, 并将其前驱结点的指针域指向其后继结点,这样就完成了职工信息的删除。存档模块: 将内存中的信息存储到文件中。函数为void
8、save(Node *woker) 原理:打开文件,新建一个指针P指向头结点,判断它的指针域是否为空,若为空,则输出“无记录”,若不为空,则将这个职工的所有信息输入到文件中,并将 P指向下一个结点,直到P指向空,即输入了的信息,文件统计模块: 打开文件,统计职工数目,并输出。函数为void load(Node *woker) 退出模块: 该模块功能是退出管理档案。(3)重要数据结构,重要模块/函数算法;1:创建与添加模块:void Add(Node *woker) / 添加记录 Node *p,*r,*s; char n10; /先用于输入职工号, 也用于判断是否跳出循环r=woker; s=
9、woker-next; /使 s 为第一个有用的结点while(r-next!=NULL) /这个循环的作用是使r 为最后一个有用的结点r=r-next; /将指针置于最末尾while(1) printf(提示: 输入 0 则返回主菜单 !n); printf(n请你输入职工号 :); scanf(%s,n); if(strcmp(n,0)=0) break; p=(Node *)malloc(sizeof(Node); /申请空间 strcpy(p-data.num,n); printf(n请输入姓名 :); scanf(%s,p-data.name); 名师资料总结 - - -精品资料欢迎
10、下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 26 页 - - - - - - - - - printf(n请输入性别 :); scanf(%s,p-data.sex); printf(n请输入出生年月 :); scanf(%s,&p-data.birthday); printf(n请输入学历 :); scanf(%s,&p-data.degree); printf(n请输入职位 :); scanf(%s,&p-data.position); printf(n请输入工资 :); scanf(%s,&p-d
11、ata.salary); printf(提示: 已经完成一条记录的添加。n); p-next=NULL; r-next=p; /这一步是必需的 , 将 p 与先前的链表连起来构成一条新链表 r=p; /也是必需的 . 将 r 又重设为新链的最后一个有用结点 2:显示模块void Disp(Node *woker) /输出职工信息 Node *p; p=woker-next; if(!p) printf(n提示 :没有记录可以显示!n); return; printf(tttt显示结果 n); printf( 职工号职工姓名职工性别职工生日职工学历职工职位职工工资 n); while(p) pr
12、intf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,p-data.name,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary); p=p-next; 3:查找模块void Tongji(Node *woker) /查找统计函数 Node *p; int sel;int flag2=0,ha=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
13、 6 页,共 26 页 - - - - - - - - - p=woker-next; char find20; if(!woker-next) /若链表为空 printf(n提示 :没有资料可以统计分类!n); return; printf(提示 :n=0 退出 n=1 按职工号统计 n=2 按职工姓名名称统计 n); scanf(%d,&sel); if(sel=1) printf(n 输入你要统计分类的职工号:); scanf(%s,find); while(p) if(strcmp(p-data.num,find)=0) flag2+; if(flag2=1&ha!=flag2) pr
14、intf( 职工号职工姓名职工性别职工生日职工学历职工职位职工工资 n); printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,p-data.name,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary); ha=flag2; else if(flag2ha)printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,p-data.name,p-data.sex,p-data.birthday,p-da
15、ta.degree,p-data.position,p-data.salary);ha=flag2; p=p-next; if(flag2) printf(n*按 设 备 号 %s统 计 分 类 的 有 %d条 记录:*nn,find,flag2); else printf(n按职工号 %s 统计的结果为0 个nn,find); else if(sel=2) printf(n 输入你要统计分类的职工姓名:); scanf(%s,find); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
16、 第 7 页,共 26 页 - - - - - - - - - while(p) if(strcmp(p-data.name,find)=0) flag2+; if(flag2=1&ha!=flag2) printf( 职工号职工姓名职工性别职工生日职工学历职工职位职工工资 n); printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,p-data.name,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary); ha=flag2; else if(f
17、lag2ha)printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,p-data.name,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);ha=flag2; p=p-next; if(flag2) printf(n*按设备名称%s统计的有%d条记录:*nn,find,flag2); else printf(n按职工姓名 %s 统计分类的结果为0 个nn,find); else if(sel=0) return; 4:修改模块void chang
18、e(Node *woker) /修改职工信息函数 Node *p; char find20; if(!woker-next) printf(n提示 :没有资料可以修改!n); return; printf( 请输入要修改的职工号:); scanf(%s,find); p=woker-next; while(p!=NULL) if(strcmp(p-data.num,find)=0) /如果找到的话返回的是符合要求名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 26 页 -
19、 - - - - - - - - break; p=p-next; if(p) int x; while(1) printf( 完成修改请输入0 否则输入任意数再进行修改:); scanf(%d,&x); if(x=0) break; printf( 请输入新职工号(原来是%s ):,p-data.num); scanf(%s,p-data.num); printf( 请输入新职工姓名(原来是%s ):,p-data.name); scanf(%s,p-data.name); printf( 请输入新职工性别(原来是%s ):,p-data.sex); scanf(%s,p-data.sex)
20、; printf( 请输入新出生年月(原来是%s ):,p-data.birthday); scanf(%s,p-data.birthday); printf( 请输入新职工学历(原来是%s ):,p-data.degree); scanf(%s,p-data.degree); printf( 请输入新职工职位(原来是%s ):,p-data.position); scanf(%s,p-data.position); printf( 请输入新职工工资(原来是%s ):,p-data.salary); scanf(%s,p-data.salary); printf(n提示 :该项记录资料已经成功
21、修改!n); else printf(n提示 :你要修改的信息不存在!n); 5:删除模块void dismiss(Node *woker) /删除职工信息函数Node *p,*r,*s; char find10; if(!woker-next) printf(n提示 :没有资料可以显示!n); return; printf(n提示 :请输入您要删除的职工号!n); scanf(%s,find); p=woker-next; while(p!=NULL) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
22、- - - - 第 9 页,共 26 页 - - - - - - - - - if(strcmp(p-data.num,find)=0) /如果找到的话返回的是符合要求break; p=p-next; if(!p) printf(n提示 :找不到您想删除的职工号!n); else r=woker; while(r-next!=p) r=r-next; s=r-next; r-next=r-next-next; 6:存档模块void save(Node *woker) /将职工信息保存到文件 int n; Node *p; FILE *fp; /指向文件的指针printf( 需要保存吗 ?(1-
23、保存0-不保存) ); scanf(%d,&n); if(n) if(woker-next=NULL) printf( 无记录 ); else p=woker-next; if(fp = fopen( 职工管理系统 .dat, wb) = NULL) /打开文件,并判断打开是否正常printf(can not open filen); / 打开文件出错while(p!=NULL) fprintf(fp,%s %s %s %s %s %s %s,&p-data.num,&p-data.name,&p-data.sex,&p-data.birthday,&p-data.degree,&p-data
24、.position,&p-data.salary); p=p-next; fclose(fp); /关闭文件 7:文件统计模块void load(Node *woker) Node *p,*q; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 26 页 - - - - - - - - - FILE *fp; /指向文件的指针int recordNum; / 统计记录数if(fp = fopen( 职工管理系统.dat, rb) = NULL) /打开文件 printf(
25、can not open filen); /不能打开 p=woker; recordNum = 0; while(!feof(fp) q=(Node*)malloc(sizeof(Node); fscanf(fp, %s %s %s %s %s %s %s,p-data.num,p-data.name,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);/* 从文件读入记录*/ p-next=q; q-next=NULL; p=q; recordNum+; fclose(fp); printf( 文件里
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C语言程序设计-职工信息管理系统 2022 语言程序设计 职工 信息管理 系统
限制150内