简单的职工管理系统课程设计报告
原创c语言职工管理系统课程设计报告

原创C语言职工管理系统课程设计报告1. 引言职工管理系统是一个可以对职工信息进行录入、查询、修改和删除的软件系统。
在这个项目中,我们将使用C语言来实现这个系统。
通过设计这个项目,我们旨在提高学生们对C语言的理解和应用能力。
2. 项目背景和目的职工管理系统是一个常见的实际应用场景,他在许多企事业单位中都有使用。
通过设计和实现这个系统,我们可以帮助管理人员更有效地管理职工信息,提高管理效率。
我们的目标是设计一个简单易用、功能完善的职工管理系统,可以实现以下功能:职工信息录入、职工信息查询、职工信息修改和职工信息删除。
3. 系统设计我们将使用C语言来实现职工管理系统。
系统设计主要包括以下几个方面的功能模块:3.1 菜单功能模块在这个模块中,我们将设计一个菜单来显示系统的功能选项。
用户可以通过输入相应的选项来进入不同的功能模块。
3.2 职工信息录入功能模块在这个模块中,用户可以输入职工的信息,包括职工编号、职工姓名、职工性别、职工年龄等。
系统将会将这些信息保存到一个文件中以后的查询和修改操作。
3.3 职工信息查询功能模块在这个模块中,用户可以输入职工的编号或者姓名来查询职工的信息。
系统将会根据用户输入的信息在文件中查找相应的职工信息并显示出来。
3.4 职工信息修改功能模块在这个模块中,用户可以输入职工的编号来修改职工的信息。
用户需要输入修改后的信息,并将更新后的信息保存到文件中。
3.5 职工信息删除功能模块在这个模块中,用户可以输入职工的编号来删除职工的信息。
系统将会在文件中查找相应的职工信息并删除。
4. 系统实现系统实现主要有以下几个步骤:4.1 设计程序结构首先,我们需要设计系统的程序结构。
我们将使用函数来实现不同功能模块,通过调用不同的函数来实现系统不同的功能。
4.2 实现菜单功能模块我们将使用printf函数来输出菜单,并使用scanf函数来获取用户的输入。
根据用户的输入,我们将使用switch语句来进入相应的功能模块。
职工管理系统程序设计报告

程序设计报告( 2015 / 2016 学年第一学期)题目:职员信息管理系统专业信息科技英才班组长学号姓名 Q14010120 陈明阳组员学号姓名 Q14010119 花子栋Q14010122 周行洲指导教师薛景指导单位日期 2015 年 10 月 23 日XXXXXXXXXXXXXXX(题目格式:宋体,三号,加粗,居中对齐)一、课题内容和要求(标题格式:宋体,四号,加粗,两端对齐,下同)XX系统是............(中文字体:宋体,英文字体:Times New Roman,小四号,不加粗,两端对齐,1.5倍行距,首行缩进2字符,段前段后距为0)二、相关理论知识描述该课题的相关理论知识和要点。
(中文字体:宋体,英文字体:Times New Roman,小四号,不加粗,两端对齐,1.5倍行距,首行缩进2字符,段前段后距为0)三、需求分析明确课题要完成的主要功能,并进行描述。
(中文字体:宋体,英文字体:Times New Roman,小四号,不加粗,两端对齐,1.5倍行距,首行缩进2字符,段前段后距为0)(报告中所有的图必须统一编号,图必须有名称,图形、图名称必须居中,图中所有字体为5号字体;图形中的所有框图、线条必须“组合”成为一个整体;图形必须嵌入到文字当中,不得浮于文字上方;全文中的(1)、(2)、(3)等格式必须统一为中文括号或者英文括号。
)四、概要设计1 、设计类,对每个类明确成员变量和方法,明确类与类之间的关系,并用UML图表示出来。
(二级标题格式:宋体,小四号,不加粗,两端对齐,不缩进,下同)2 、类中主要方法的实现需要有流程图(中文字体:宋体,英文字体:Times New Roman,小四号,不加粗,两端对齐,1.5倍行距,首行缩进2字符,段前段后距为0)五、源程序代码Class1:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace WindowsFormsApplication2{public class people{public int age;//年龄public string sex;//性别public string name;//姓名public int day;//出勤天数public double attend;//考勤率public int partcreated;//部门效益public double income;//个人工资public char partment;//部门public string classic;//职位// public int partrank;//部门排名// public int personrank;//个人排名public int number;//编号public people()//构造函数【附初值】{number = 0;age =day= 0;sex = "男";name = "any";partcreated = 0;partment = 'Z';classic = "职员";income = 0;}public void calincome()//计算个人收入{//throw new System.NotImplementedException();income = 4000 * attend + partcreated * 0.05;}public void calattend()//计算出勤率{//throw new System.NotImplementedException();attend = day / 31.0 ;}}}Form 1:using System;using System.Collections;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.IO;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApplication2{//private people[] poe;// public people _people;public partial class Form1 : Form{//private people[] _peo;public people[] peo;void readdatabase(people[] p)//从文件读出{Encoding.GetEncoding("GB2312"));int n = 0;while (true){string line = sr.ReadLine();if (line == string.Empty || line == null) break;string[] data = line.Split(' ');ArrayList mydata = new ArrayList();for (int i = 0; i < data.Length; i++){if (data[i].Trim() != string.Empty){mydata.Add(data[i].Trim());}}p[n].number = Convert.ToInt32(mydata[0]);p[n].name = Convert.ToString(mydata[1]);p[n].sex = Convert.ToString(mydata[2]);p[n].classic = Convert.ToString(mydata[3]);p[n].partment = Convert.ToChar(mydata[4]);p[n].partcreated = Convert.ToInt32(mydata[5]);p[n].day = Convert.ToInt32(mydata[6]);p[n].income = Convert.ToDouble(mydata[7]);p[n].attend = Convert.ToDouble(mydata[8]);p[n].age = Convert.ToInt32(mydata[9]);n++;}sr.Close();}void writedatabase(people[]p)//写入到文件{FileStream fs = new FileStream("data.dat", FileMode.Create);StreamWriter sw = new StreamWriter(fs, Encoding.Default);string text;int i;for(i=0;p[i].number!=0;i++){text = Convert.ToString(p[i].number) + " " + p[i].name + " " + p[i].sex + " " +p[i].classic + " " + p[i].partment + " " + Convert.ToString(p[i].partcreated) + " " + Convert.ToString(p[i].day) + " " + Convert.ToString(p[i].income) + " " + Convert.ToString(p[i].attend) + " " +Convert.ToString(p[i].age)+'\n';sw.Write(text);}fs.Close();}void redata(people[] p)//刷新表格{int i;dataGridView1.Rows.Clear();for (i = 0; p[i].number!=0; i++){dataGridView1.Rows.Add();dataGridView1.Rows[i].Cells["编号"].Value = p[i].number;dataGridView1.Rows[i].Cells["姓名"].Value = p[i].name;dataGridView1.Rows[i].Cells["性别"].Value = p[i].sex;dataGridView1.Rows[i].Cells["职位"].Value = p[i].classic;dataGridView1.Rows[i].Cells["部门"].Value = p[i].partment;dataGridView1.Rows[i].Cells["部门效益"].Value = p[i].partcreated;dataGridView1.Rows[i].Cells["出勤天数"].Value = p[i].day;p[i].calincome();dataGridView1.Rows[i].Cells["工资"].Value = p[i].income;p[i].calattend();dataGridView1.Rows[i].Cells["出勤"].Value = p[i].attend;dataGridView1.Rows[i].Cells["年龄"].Value = p[i].age;}}void outdata(people[] p)//将表格数据存入数组{int i;for (i = 0; i < dataGridView1.Rows.Count; i++){p[i].number = Convert.ToInt32(dataGridView1.Rows[i].Cells["编号"].Value);p[i].name = Convert.ToString(dataGridView1.Rows[i].Cells["姓名"].Value);p[i].sex = Convert.ToString(dataGridView1.Rows[i].Cells["性别"].Value);p[i].classic = Convert.ToString(dataGridView1.Rows[i].Cells["职位"].Value);p[i].partment = Convert.ToChar(dataGridView1.Rows[i].Cells["部门"].Value);p[i].partcreated = Convert.ToInt32(dataGridView1.Rows[i].Cells["部门效益"].Value);p[i].day = Convert.ToInt32(dataGridView1.Rows[i].Cells["出勤天数"].Value);p[i].income = Convert.ToDouble(dataGridView1.Rows[i].Cells["工资"].Value);p[i].attend = Convert.ToDouble(dataGridView1.Rows[i].Cells["出勤"].Value);p[i].age = Convert.ToInt32(dataGridView1.Rows[i].Cells["年龄"].Value);}for (; i < 50; i++)//剩下空间归零{p[i].number = 0;}void reflesh(people[] p)//刷新数组(以编号标记成员是否有效){int i,j;for (i = 0; i < 50; i++){if (p[i].number == 0){for (j = i; j < 49; j++)p[i] = p[i + 1];}}}void rank(people []p,int x)//排序函数/*0:编号;1:考勤;2:工资;3:职位;4:部门;5:部门效益*/ { int z;for (z = 0; ; z++)//求现有人数{if (p[z].number == 0){break; }}switch (x){case 0://排序编号{people q=p[0];int i, j;for(i=0;i<z;i++){for (j = i; j < z; j++){if(p[j].number<p[i].number){q = p[i];p[i] = p[j];p[j] = q;}}}}; break;case 1://排序考勤{int i, j;for (i = 0; i < z; i++){for (j = i; j < z; j++){if (p[j].attend < p[i].attend){q = p[i];p[i] = p[j];p[j] = q;}}}}break;case 2://排序工资{people q = p[0];int i, j;for (i = 0; i < z; i++){for (j = i; j < z; j++){if (p[j].income< p[i].income){q = p[i];p[i] = p[j];p[j] = q;}}}}break;case 3://排序职位{people q = p[0];int i, j;for (i = 0; i < z; i++){for (j = i; j < z; j++)if (p[j].classic.GetHashCode()< p[i].classic.GetHashCode()){q = p[i];p[i] = p[j];p[j] = q;}}}}; break;case 4://排序部门{people q = p[0];int i, j;for (i = 0; i < z; i++){for (j = i; j < z; j++){if (p[j].partment < p[i].partment){q = p[i];p[i] = p[j];p[j] = q;}}}}; break;case 5://排序部门效益{people q = p[0];int i, j;for (i = 0; i < z; i++){for (j = i; j < z; j++){if (p[j].partcreated< p[i].partcreated){q = p[i];p[i] = p[j];p[j] = q;}}}; break;}}double average(people[]p){int i;double ans = 0;for(i=0;p[i].number!=0;i++){ans = ans + p[i].income;}return (ans / (i));}//求工资均值void search(people []p)//搜索功能{int i;int row = dataGridView1.Rows.Count-1;//得到总行数int cell = dataGridView1.Rows[1].Cells.Count-1;//得到总列数string strTxt = textBox1.Text;//得到输入的字符串,并付值给变量Regex r = new Regex(strTxt); // 定义一个Regex对象实例for (i = 0; i < row; i++)//得到总行数并在之内循环{for (int j = 0; j < cell; j++)//得到总列数并在之内循环{Match m = r.Match(dataGridView1.Rows[i].Cells[j] .Value.ToString()); // 在字符串中模糊匹配if (m.Success){ //对比TexBox中的值是否与dataGridView中的值相同(上面这句)dataGridView1.CurrentCell = dataGridView1[j, i];//定位到相同的单元格return;//返回}else { }}}if(i==row){MessageBox.Show("未找到匹配项");}}{label2.Text = Convert.ToString(average(p));rank(p, 2);int i;for(i=0; p[i].number!=0;i++)//工资最大{i++;i--;}i--;label4.Text = p[i].name;rank(p, 5);for (i = 0; p[i].number != 0; i++)//部门效益最大{i++;i--;}i--;label6.Text = Convert.ToString( p[i--].partment);rank(peo, 0);//恢复原数组}public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e)//加载窗体时读取数据库{peo = new people[50];int i;for (i = 0; i < 50; i++){peo[i]=new people();}readdatabase(peo);rank(peo, 0);redata(peo);infor(peo);}private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e){}private void button4_Click(object sender, EventArgs e)//窗口实现排序{int x = 0;switch (comboBox1.Text){case "编号": x = 0; break;case "出勤": x = 1; break;case "工资": x = 2; break;case "职位": x = 3; break;case "部门": x = 4; break;case "部门效益": x = 5; break;}rank(peo, x);redata(peo);}private void button5_Click_1(object sender, EventArgs e)//窗口开启编辑模式{rank(peo, 0);redata(peo);dataGridView1.ReadOnly = false;MessageBox.Show(("已开始编辑,请小心使用")+'\n'+"务必输入编号,否则该成员将视为无效");label8.Text = "编辑模式" ;label8.ForeColor = System.Drawing.Color.Red;}private void button6_Click(object sender, EventArgs e)//窗口关闭编辑模式并保存{dataGridView1.ReadOnly = true;outdata(peo);reflesh(peo);writedatabase(peo);readdatabase(peo);redata(peo);infor(peo);label8.Text = "查看模式";label8.ForeColor = System.Drawing.Color.Black;private void button7_Click(object sender, EventArgs e){search(peo);}}}六、测试数据及其结果分析图5如图1所示,点击“启用编辑”按钮,开始编辑,可以添加,删除,修改职员数据。
职工管理系统课程设计报告

职工管理系统课程设计报告1.引言职工管理系统是一种企业管理软件,它的主要作用是帮助企业管理职工的基本信息、工资、考勤、培训等内容。
本文将介绍我们小组设计的职工管理系统。
2.概述职工管理系统拥有多个功能模块,包括人事管理、工资管理、考勤管理、培训管理等。
其中,人事管理模块包括职工的基本信息、职务信息、部门信息等;工资管理模块包括职工的薪资计算、社保、公积金等;考勤管理模块包括职工的出勤记录、加班、请假等;培训管理模块则包括职工的培训计划、课程安排、培训记录等。
3.功能设计我们小组的职工管理系统,采用了Java语言进行开发,使用MVC 架构模式进行开发。
具体功能设计如下:3.1人事管理模块人事管理模块用于管理职工的基本信息、职务信息、部门信息等。
其中,职工的基本信息包括姓名、性别、出生日期、身份证号等;职务信息包括职务名称、职级、任职时间等;部门信息包括部门名称、部门经理、部门编号等。
除此之外,人事管理模块还可以进行权限管理,设置不同角色的权限不同。
3.2工资管理模块工资管理模块包括职工的薪资计算、社保、公积金等。
职工的薪资计算需要考虑个人工资、绩效、考勤等因素,同时还要进行税前扣减、税后扣减等计算。
社保、公积金等则需要根据国家政策进行计算。
3.3考勤管理模块考勤管理模块用于管理职工的出勤记录、加班、请假等。
出勤记录需要记录职工的出勤时间、迟到早退、旷工等,加班需要统计职工的加班时间和加班费用,请假需要记录职工的请假类型、请假时间等。
3.4培训管理模块培训管理模块用于管理职工的培训计划、课程安排、培训记录等。
培训计划需要包括培训的目标、内容、时间、地点等,课程安排需要包括课程名称、讲师、授课时间、授课地点等,培训记录需要记录职工的培训情况、培训效果等。
4.技术选型我们小组采用了Spring Boot、MyBatis等技术进行开发,前端采用了Bootstrap、jQuery等技术进行开发。
其中,Spring Boot提供了优雅的开发方式,MyBatis则提供了便捷的数据库交互方式,Bootstrap、jQuery则为前端提供了丰富的UI组件和JavaScript库。
数据结构课程设计 简单的职工管理系统

数据结构课程设计简单的职工管理系统简单的职工管理系统设计1. 引言本文旨在设计一个简单的职工管理系统,用于匡助管理者进行职工信息的录入、查询、修改和删除等操作。
该系统基于数据结构的相关知识,通过合理的数据结构设计和算法实现,实现对职工信息的高效管理。
2. 功能需求2.1 职工信息录入系统提供一个录入界面,管理者可以输入职工的基本信息,包括职工编号、姓名、性别、年龄、职位等。
系统应该能够对输入的信息进行合法性验证,并将信息存储到合适的数据结构中。
2.2 职工信息查询系统提供一个查询界面,管理者可以根据职工的编号、姓名、职位等条件进行查询。
系统应该能够根据查询条件从数据结构中快速定位到符合条件的职工信息,并将结果展示给管理者。
2.3 职工信息修改系统提供一个修改界面,管理者可以根据职工的编号或者姓名等条件选择一个职工信息进行修改。
系统应该能够根据选择的职工信息,提供可修改的字段,并对输入的修改信息进行合法性验证,并更新数据结构中对应的职工信息。
2.4 职工信息删除系统提供一个删除界面,管理者可以根据职工的编号或者姓名等条件选择一个职工信息进行删除。
系统应该能够根据选择的职工信息,从数据结构中删除对应的职工信息,并给出相应的提示。
3. 数据结构设计为了高效地管理职工信息,我们可以采用链表作为基本的数据结构。
每一个节点表示一个职工信息,包括职工编号、姓名、性别、年龄、职位等字段。
节点之间通过指针进行连接,形成一个链表结构。
3.1 链表节点设计每一个链表节点包含以下字段:- 职工编号(int)- 姓名(string)- 性别(string)- 年龄(int)- 职位(string)- 指向下一个节点的指针(Node*)3.2 链表操作设计- 初始化链表:创建一个空链表,并初始化头节点指针为NULL。
- 添加节点:根据输入的职工信息创建一个新节点,并将其插入到链表的合适位置。
- 删除节点:根据职工的编号或者姓名等条件,找到对应的节点,并将其从链表中删除。
职工管理系统课程设计

职工管理系统课程设计一、教学目标本课程旨在使学生掌握职工管理系统的理论知识,培养学生运用职工管理系统进行实际操作的能力,并树立正确的职工管理理念。
具体目标如下:1.知识目标:•了解职工管理系统的定义、功能和应用范围;•掌握职工信息录入、查询、修改和删除的操作方法;•理解职工管理系统的数据分析和报表生成过程。
2.技能目标:•能够熟练使用职工管理系统进行职工信息的录入、查询、修改和删除;•能够根据需求设置职工管理系统的参数和权限;•能够运用职工管理系统进行数据分析和报表生成。
3.情感态度价值观目标:•培养学生对职工管理工作的重视和责任感;•培养学生遵守数据安全和隐私保护的原则;•培养学生积极向上、团结协作的工作态度。
二、教学内容本课程的教学内容主要包括职工管理系统的理论知识、操作方法和实践应用。
具体安排如下:1.职工管理系统的理论知识:•职工管理系统的定义、功能和应用范围;•职工信息录入、查询、修改和删除的基本操作;•职工管理系统的数据分析和报表生成原理。
2.职工管理系统的操作方法:•职工信息录入、查询、修改和删除的具体步骤;•职工管理系统的参数设置和权限管理;•数据分析和报表生成的实践操作。
3.职工管理系统的实践应用:•结合具体案例,分析职工管理系统的实际应用场景;•讨论职工管理系统在提高工作效率和促进团队协作方面的作用;•分析职工管理系统在企业管理和人力资源规划中的重要性。
三、教学方法为了提高教学效果和学生的参与度,本课程将采用多种教学方法相结合的方式进行教学。
具体方法如下:1.讲授法:通过教师的讲解,使学生了解职工管理系统的理论知识,为学生提供系统的知识结构。
2.讨论法:学生进行小组讨论,分享职工管理系统的操作经验和实践案例,促进学生之间的交流和合作。
3.案例分析法:通过分析具体案例,使学生了解职工管理系统在实际应用中的作用和效果,培养学生解决问题的能力。
4.实验法:安排上机实验环节,让学生亲自动手操作职工管理系统,巩固所学知识和技能。
高校职工简单管理系统课程设计报告

课程设计报告课程名称程序设计课程设计项目名称高校在职职工简单管理软件设计班级11级计算机科学与技术一班实验室名称(或课室) SS1-304 专业计算机科学与技术任课教师陈章学号11251102133姓名叶晓生广东商学院教务处制分数___________ 评语:指导教师(签名)年月日说明:指导教师评分后,课程设计报告交院(系)办公室保存。
高校在职职工简单管理软件设计1 系统功能要求:本人计划编写一个高校在职职工简单管理软件,主要用来管理职工的一些基本信息。
软件功能如下:(1)减少一个职工(需指定要删除职工的职工号);(2)增加一个职工;(3)查找一个职工号的信息(需指定职工号或电话号码);(4)统计指定二级单位的职工人数、工资总额;(5)按职工的工资多少对职工排序;(6)显示所有职工信息;(7)保存记录。
2 系统总体设计思想:(1)开发与设计的总体思想:高校在职职工简单管理软件算法说明:STEP1 预处理,定义结构体STEP2 进入欢迎界面STEP3 选择某一种功能STEP4 根据提示输入一个字母STEP5 对于输入的字母编辑删除、增加、查找、统计、排序的函数STEP6 如果输入的字母表示退出,退出系统(2)系统模块结构图(3)系统设计流程图3 系统详细设计思想(2)函数的描述1.主函数函数原型:void main(void) 功能:控制程序参数:void返回值:void2.菜单函数函数原型:void menu(void) 功能:显示菜单参数:void返回值:void3.增加职工信息函数函数原型:int add(em*,int) 功能:增加记录参数:em*,int返回值:int4.删除职工信息函数函数原型:int del(em*.int)功能:删除指定职工号职工信息参数:em*,int返回值:int5.查询职工信息函数函数原型:void search(em*,int)功能:根据职工号或职工电话号码查询职工信息6.统计职工信息函数函数原型:void count(em*,int)功能:统计同一二级单位的职工人数和工资总额7.排序函数函数原型:void sort(em*,int)功能:按照工资少到多排序8.保存职工信息函数函数原型:void sort(em*,int)功能:保存职工信息9.函数原型:void display(em*,int)功能:显示职工信息(3)本系统涉及的知识点:结构、数组、循环、函数、分支、指针、文件4 课程设计总结对C语言文件方面的知识不熟悉,对跟文件有关的函数使用也不甚了解,导致在写保存信息方面时花费了较多时间;对结构体和指针方面的知识有点忘记,需要加强复习对C语言文件如何保存与打开的知识不熟悉,与文件有关的函数使用也不清楚,经过课本,到网上查询了相关知识,询问同学,之后才逐步把自己的文件打开和存储问题解决了。
简单职工管理系统课程设计报告

简单职工管理系统课程设计报告
课程设计(论文)
题目名称简单的职工管理系统课程名称数据结构课程设计
学生姓名
学号
系、专业信息工程系、通信工程指导教师
12 月 23 日
摘要
建立一个“简单的职工管理系统”,系统以菜单方式工作,编写存放有职工基本信息,包含职工工号,姓名,性别,出生年月,学历,职务,工资,住址,电话等,而且要求录入职工号不重复;录入的职工号信息要求用文件形式保存,并能够对其进行浏览、查询、修改、删除等基本操作,建立职工信息管理的文件。
关键词:职工信息管理;文件;浏览;查询;修改;插入;删除;排序
目录
1 问题描述 (2)
2 需求分析 (2)
3 概要设计 (3)
3.1抽象数据类型定义 (3)
3.2模块划分 (3)
4 详细设计 (4)
4.1数据类型的定义 (4)
4.2主要模块的算法描述 (6)
5 测试分析 (7)
6 课程设计总结 (12)
参考文献 (12)
附录(源程序清单) (13)。
简单职工管理系统课程设计报告

简单职工管理系统课程设计报告
一、课程设计背景
在当今社会中,职工管理是企业管理中至关重要的一环。
随着企业规模的不断
扩大和职工数量的增加,传统的人工管理已经不能满足现代管理的需求。
因此,设计一个简单、有效的职工管理系统是非常必要的。
二、系统设计目标
本课程设计的目标是建立一个简单易用的职工管理系统,实现对职工信息的录入、查询、编辑和删除等基本功能,以提高管理效率。
三、系统功能设计
1. 登录功能
系统管理员可以通过用户名和密码登录系统,确保系统的安全性。
2. 职工信息录入
管理员可以录入新职工的基本信息,包括姓名、工号、职位、部门等信息。
3. 职工信息查询
系统可以根据工号或姓名等关键字查询职工信息,方便管理员查找需要的信息。
4. 职工信息编辑
管理员可以对已有职工信息进行编辑,包括修改个人信息、调整职位等。
5. 职工信息删除
管理员可以删除不需要的职工信息,确保系统数据的及时更新。
四、系统功能实现
系统采用C++语言开发,基于面向对象的编程思想,实现了上述功能模块。
通
过简单的控制台界面,管理员可以方便地进行操作。
五、课程设计总结
通过本次课程设计,我深入了解了职工管理系统的设计和实现过程,锻炼了自
己的编程能力和解决问题的能力。
同时,也对职工管理的重要性有了更深刻的认识,相信这将对我未来的工作和学习有很大帮助。
以上是简单职工管理系统课程设计报告的内容,希望能对大家有所帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河北科技大学课程设计报告学生姓名:付建海学号:********* 专业班级:计算机081班课程名称:数据结构设计题目:简单的职工管理系统学年学期:2010-2011学年第一学期指导教师:***2011年6月一、需求分析 (2)二、概要设计 (3)三、详细设计 (4)四、调试分析 (8)五、用户使用说明 (8)六、测试结果 (9)七、附录 (10)一、需求分析职工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来各个公司基本上都是靠传统的人工方式来管理职工信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。
当今社会,信息迅速膨胀,随着各个公司的规模增大,有关信息管理工作所涉及的数据量越来越大,职工信息量也大大增加,利用传统的手工查询、登记、修改等方法的处理速度远远跟不上公司的需求,有的公司不得不靠增加人力、物力来进行信息管理。
随着计算机技术的不断提高,计算机作为知识经济时代的产物,其强大的功能已为人们深刻认识,它已进入人类社会的各个行业和领域并发挥着越来越重要的作用,成为人们工作和生活中不可缺少的一部分。
而作为计算机应用的一部分,使用计算机对职工进行管理,具有手工管理所无法比拟的优点。
例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高职工管理的效率,也是公司的科学化、正规化管理和与世界接轨的重要条件。
职工管理系统作为一种管理软件正在各公司中得到越来越广泛的应用,且已达到了良好效果。
简单的职工管理系统:1、问题描述对单位的职工进行管理,包括插入、删除、查找、排序等功能。
2、要求职工对象包括姓名(字符串)、性别(字符)、出生年月(数字)、工作年月(数字)、学历(字符串)、职务(字符串)、住址(字符串)、电话(字符串)等信息。
(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。
(2)删除一名职工:从职工管理文件中删除一名职工对象。
(3)查询:从职工管理文件中查询符合某些条件的职工。
(4)修改:检索某个职工对象,对其某些属性进行修改。
(5)排序:按某种需要对职工对象文件进行排序。
3、实现功能(1)由键盘输入职工对象,以文件方式保存。
程序执行时先将文件读入内存。
(2)对职工对象中的“姓名”按字典顺序进行排序。
(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。
二、概要设计1、输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。
由键盘输入职工对象,以文件方式保存。
程序执行时先将文件读入内存。
2、系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。
如对职工对象中的"姓名"按字典顺序进行排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。
3、输出的实现:根据选择的操作,输出与之对应的信息。
综上可以绘制出职工管理功能的系统流程图,如图1所示图1 系统流程图4、系统功能结构根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以分为五个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工信息查询模块、职工信息排序模块。
其系统功能结构如图2所示。
图2 系统功能结构图5、模块函数构造根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的函数,其方法名和功能如表1所示。
表1 函数功能表三、详细设计1、抽象数据类型定义1)定义表结点(typedef struct Node)2)定义职工信息(typedef struct Datatype)3)初始化链表(ListInitiate(SLNode **head))2、主函数设计(1)根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在主函数中,实现了友好的界面设计。
系统需要输入职工的基本信息:姓名、性别、出生年月、工作年月、学历、职务、住址、电话等。
这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有七种操作的调用:新增职工信息:SLNode *ListInsert(SLNode *head,DataType x)查询职工信息:Listfind(SLNode head)删除职工信息:ListDelete(SLNode *head)修改职工信息:ListModify(SLNode *head)职工信息排序:Listpaixu(SLNode *head)保存职工信息:put(SLNode *head,FILE *fp)显示职工信息:print(SLNode *head)(2)主函数程序流程图如图3所示:图 3 主函数程序流程图3、查找算法设计在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查询操作。
这些查询操作分别为:对姓名进行查询,对性别进行查询,对出生年月进行查询,对工作年月进行查询,对学历进行查询,对职位进行查询,对住址进行查询,对电话进行查询等一些列操作。
查找算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。
查询算法程序流程图如图4所示:图 4 查询算法程序流程图4、排序算法设计在排序算法中,职工管理系统提供了四种查询操作,实现了系统的基本排序操作。
这些排序操作分别为:对姓名进行排序,对性别进行排序,对出生年月进行排序,对工作年月进行排序,等一些列操作。
排序算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。
排序的核心代码:排序算法流程图如图5所示:图5 排序算法程序流程图四、调试分析测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验是否满足规定的需求或弄清预期结果与实际结果之间的差别。
在调试查询修改功能过程中,查询的总是不正确,查询的结果显示,没有找到职工信息,最后发现查找的结点不正确,查询应该与输入的值和头结点next 比较,而不是头结点。
还有就是查询结点不知道如何循环,最后又看看了记得笔记和书,才知道如何继续查找而不出错误。
修改时总是不能正确的修改,最初时修改总是修改最后输入的数据。
最后终于找到了,又是结点写错了。
排序时注意交换的先后顺序就可以了,删除时注意交换结点的顺序。
经验与体会:本次课程设计是围绕数据结构进行。
根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。
但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。
把职工信息存储在一个单链表中,利用指针实现对职工信息的各项基本操作。
虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方。
那就是可以排序上面多设计几个算法。
实现多角度排序。
在这个系统中没有职工序号的信息,所以允许职工姓名相同,在很大程度上面,可能是的职工信息重复。
经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响,及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。
当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。
因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。
此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。
五、用户使用说明进入职工管理系统,首先看到的就是欢迎界面,然后提示:请输入要录入的职工数,输入完数字后,就提示:按次序依次输入职工的姓名、性别、出生年月、工作年月、学历、职务、电话的信息(注意是依次输入,中间可以用空格,tab,回车做切换输入),输完信息后自动回到主界面,根据提示:0.结束管理系统\ 1.新增职工信息2.删除职工信息3.查询职工信息4.修改职工信息5.职工信息排序,输入相应操作的数字,如0,退出简单职工管理系统;如1,提示依次输入职工信息,录入完毕自动返回主界面;如2,提示输入删除的姓名,成功正确返回,错误有提示无此员工信息;如3,会提示查询方式:0.退出查询系统,回到主菜单1.对姓名进行查询2.对出生年月进行查询3.对学历进行查询4.对工作年月进行查询,输入相应编号进行查询;如4,提示输入修改职工姓名,然后进行依次修改职工所有信息;如5,提示:0.退出排序系统,回到主菜单1.对性别进行排序2.对出生年月进行排序3.对工作年月进行排序4.对姓名进行排序,输入号码进行查询。
六、测试结果1)进入职工管理系统,如图6所示:图6主菜单选择界面2)新增一职工信息并查询全部职工信息,如图7、8所示:图7 新增并查询职工信息界3)修改职工信息并与前面信息对照,如图8所示:图8 修改职工信息界面4)按姓名排序职工信息并显示,如图9所示图9 按姓名排序职工信息并显示5)退出系统,如图10所示:选择0,退出职工管理系统。
图10 退出职工管理系统七、附录参考文献:[1]李云清,杨庆红,揭安全.数据结构(C语言版)[M].北京:人民邮电大学出版社,2004.6[2]潘彦.算法设计与分析基础[M].北京:清华大学出版社,2007.1[3]肖梦强,曲秀清.软件工程——原理、方法与应用[M].北京:中国水利水电出版社,2005.10[4] 吕凤翥.C++语言程序设计(第2版)[M].北京:电子工业出版社,2007.2[5] 严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2002.9实验程序:#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>#define ALLMAX 100 //总共统计的职工的人数typedef struct Node{long int born_date,work_date,tele_num;charsex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];struct Node *next;}SLNode;typedef struct{long int born_date,work_date,tele_num;charname[ALLMAX],sex,degree[ALLMAX],job[ALLMAX],address[ALLMAX];}DataType;void ListInitiate(SLNode **head)//链表初始化{if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL) exit(1);//动态分配存储空间(*head)->next=NULL;}SLNode *ListInsert(SLNode *head,DataType x)//职工信息的插入姓名并按照升序排列{SLNode *p,*q,*s;p=head->next;if((q=(SLNode *)malloc(sizeof(SLNode)))==NULL) exit(1);//动态分配存储空间q->born_date=x.born_date;q->work_date=x.work_date;q->tele_num=x.tele_num;strcpy(q->name,);q->sex=x.sex;strcpy(q->degree,x.degree);strcpy(q->job,x.job);strcpy(q->address,x.address);if(head->next==NULL){//如果只有链表的头结点,没有其他的结点,直接插入在头结点后面head->next=q;head->next->next=NULL;}else{//链表非空for(;p;p=p->next){if(p->next!=NULL){if(strcmp(p->name,)<0&&strcmp(p->next->name,)>0){//位于两个结点之间s=p->next;p->next=q;q->next=s;break;}//else if(strcmp(p->name,)==0)break; //如果姓名相同则不插入信息}else if(strcmp(p->name,)<0&&p->next==NULL){//链表非空,并且在排序中是最后一个p->next=q;q->next=NULL;break;}if(strcmp(p->name,)>0){//位于链表头结点之后的位置s=head->next;head->next=q;q->next=s;break;}}}return head;}void ListDelete(SLNode *head)//职工信息的删除{SLNode *p,*s;char x[20];s=head;p=head->next;if(head->next==NULL){//链表为空,输出:名单中无职工信息,无须删除!printf("名单中无此职工信息,无须删除!\n");return;}printf("请输入要删除职工的姓名:\n"); //输入要删除的人的姓名scanf("%s",x);for(p;p;p=p->next){//在链表中从头到尾查找输入的人的姓名if(strcmp(p->name,x)==0){ //如果存在,则删除,否则输出:名单中无职工信息,无须删除!s->next=p->next;free(p);printf("删除成功!请继续操作!\n");break;}s=p;}if(p==NULL){//链表本身为空printf("名单中无此职工信息,无须删除!\n");}}void ListModify(SLNode *head)//职工信息的修改{DataType x;SLNode *p;p=head->next;if(p==NULL){//链表本身为空printf("职工名单无职工信息,无须修改!\n");return;}printf("请输入要修改的职工姓名:\n");scanf("%s",);for(;p;p=p->next){if(strcmp(,p->name)==0){//查找到了该职工的信息printf("依次写入该职工的新信息:\n");printf("请输入职工信息:\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");scanf("%s %c %d %d %s %s %s %d",p->name,&p->sex,&p->born_date,&p->wo rk_date,p->degree,p->job,p->address,&p->tele_num);printf("修改成功!请继续操作!\n");break;}}if(p==NULL)//如果链表为空printf("此职工不存在,无法修改其信息!\n");}void put(SLNode *head,FILE *fp)//职工信息的保存{SLNode *p;if((fp=fopen("Employee.txt","w"))==NULL){//printf("无法打开'Employee.txt'!\n");exit(0);}for(p=head->next;p;p=p->next){fprintf(fp,"%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->wo rk_date,p->degree,p->job,p->address,p->tele_num);}if(fclose(fp)){printf("无法关闭'Employee.txt'!\n"); exit(0);}}void Listfind(SLNode head)//职工信息的查找{int i,j;SLNode *p;DataType x;if(head.next==NULL){//链表为空printf("名单中无职工信息,查询失败!\n");return;}//返回主菜单printf("\n");printf("\t*********************************\n");printf("\t*职工信息查询操作*\n");printf("\t**\n");printf("\t*0.退出查询系统,回到主菜单\t\t 1.对姓名进行查询\t*\n\t* 2.对出生年月进行查询\t\t 3.对学历进行查询\t*\n\t* 4.对工作年月进行查询\t\t 5.对职务进行查询\t*\n\t* 6.对住址进行查询\t\t 7.对电话进行查询\t*\n");printf("\t*********************************\n");while(1){printf("请输入您要选择的操作:");scanf("%d",&i);if(i==0)//输入0,退出查询系统,回到主菜单break;else if(i==1){//输入1,对姓名进行查询p=head.next;printf("请输入姓名:");scanf("%s",);j=0;for(p;p;p=p->next){if(strcmp(p->name,)==0){//如果存在这个人,那么j自加++j;printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_ date,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中不存在此人!\n");else printf("查询成功!继续操作!\n");}else if(i==2){//输入2,对出生年月进行查询p=head.next;printf("请输入出生年月:");scanf("%d",&x.born_date);j=0;for(p;p;p=p->next){if(p->born_date==x.born_date){//输入的出生年月在链表中存在++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_ date,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没有这个时间出生的!\n");else printf("查询成功!请继续操作!\n");}else if(i==4){//输入4,对工作年月进行查询p=head.next;printf("请输入工作年月:");scanf("%d",&x.work_date);j=0;for(p;p;p=p->next){if(p->work_date==x.work_date){++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_ date,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没有这个时间工作的!\n");else printf("查询成功!请继续操作!\n");}else if(i==3){//输入3,对学历进行查询p=head.next;printf("请输入学历:");scanf("%s",x.degree);j=0;for(p;p;p=p->next){if(strcmp(p->degree,x.degree)==0){++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_ date,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没有这种学历的!\n");else printf("查询成功!请继续操作!\n");}else if(i==5){//输入5,对职务进行查询p=head.next;printf("请输入职务:");scanf("%s",x.job);j=0;for(p;p;p=p->next){if(strcmp(p->job,x.job)==0){++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_ date,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没有这种职务的!\n");else printf("查询成功!请继续操作!\n");}else if(i==6){//输入6,对住址进行查询p=head.next;printf("请输入住址:");scanf("%s",x.address);j=0;for(p;p;p=p->next){if(strcmp(p->address,x.address)==0){++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_ date,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没有住这的!\n");else printf("查询成功!请继续操作!\n");}else if(i==7){//输入7,对电话号码进行查询p=head.next;printf("请输入电话:");scanf("%d",&x.tele_num);j=0;for(p;p;p=p->next){if(p->tele_num==x.tele_num){++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_ date,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没人用这个号码!\n");else printf("查询成功!请继续操作!\n");}else if(i!=0 && i!=1 && i!=2 && i!=3 && i!=4 && i!=5 && i!=6 && i!=7)//输入任意不是上述数字的,那么久显示输入错误printf("输入出错!请再次输入!\n");printf("\n");printf("\t*********************************\n");printf("\t*职工信息查询系统*\n");printf("\t**\n");printf("\t*0.退出查询系统,回到主菜单\t\t 1.对姓名进行查询\t*\n\t* 2.对出生年月进行查询\t\t 3.对学历进行查询\t*\n\t* 4.对工作年月进行查询\t\t 5.对职务进行查询\t*\n\t* 6.对住址进行查询\t\t 7.对电话进行查询\t*\n");printf("\t*********************************\n");//printf("0.退出查询系统,回到主菜单\n1.对姓名进行查询\n2.对出生年月进行查询\n3.对工作年月进行查询\n4.对学历进行查询\n5.对职务进行查询\n6.对住址进行查询\n7.对电话号码进行查询\n");}}void print(SLNode *head)//职工信息的显示{for(SLNode *p=head->next;p;p=p->next)//输出所有职工的信息printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_ date,p->degree,p->job,p->address,p->tele_num);}void printLink(SLNode *head)//职工信息的显示{printf("职工名单:\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");print(head);}void Listpaixu(SLNode *head)//职工信息的排序{int i,n=0,m,flag=1;SLNode *p,*q,*s;if(head->next==NULL){//职工链表为空printf("名单中无职工信息,无法排序!\n\n");return;}// printf("输入出错!请再次输入!\n\n");printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n");printf("\t\t~.~ 职工信息排序操作~.~\n");printf("\t\t~.~ ~.~\n");printf("\t\t~.~\t0.退出排序系统,回到主菜单~.~\n\t\t~.~\t1.对性别进行排序~.~\n\t\t~.~\t2.对出生年月进行排序~.~\n\t\t~.~\t3.对工作年月进行排序~.~\n\t\t~.~\t4.对姓名进行排序~.~\n");printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n");while(1){printf("请输入您要选择的操作:");scanf("%d",&i);if(i==0)//输入0,退出排序系统,回到主菜单break;else if(i==1){//输入1,对性别进行排序n=0,m,flag=1;for(p=head;NULL!=p;p=p->next)//统计职工人数n++;for(m=1;flag&&m<=n;m++){flag=0;for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){if(p->sex>q->sex)//p为当前节点,p的性别>p的后继节点的性别{if(head==p)//p为头结点{head->next=q->next;head=q;q->next=p;//交换节点信息q=head->next;p=head;}else{p->next=q->next;q->next=p;s->next=q;p=q;q=p->next;}flag=1;}}}printf("排好序的信息如下:\n");printLink(head);//输出所有节点的信息return;}else if(i==2){//输入2,对出生年月进行排序n=0,m,flag=1;for(p=head;NULL!=p;p=p->next)//统计职工人数n++;for(m=1;flag&&m<=n;n++)//循环{flag=0;for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){if(p->born_date>q->born_date)//对出生年月进行排序{if(head==p){head->next=q->next;head=q;q->next=p;q=head->next;p=head;}else{p->next=q->next;q->next=p;s->next=q;p=q;q=p->next;}flag=1;}}}printf("排好序的信息如下:\n");printLink(head);return;}else if(i==3){//输入3,按工作时间进行排序n=0,m,flag=1;for(p=head;NULL!=p;p=p->next)n++;for(m=1;flag&&m<=n;n++){flag=0;for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){ if(p->work_date>q->work_date){if(head==p){head->next=q->next;head=q;q->next=p;q=head->next;p=head;}else{p->next=q->next;q->next=p;s->next=q;p=q;q=p->next;}flag=1;}}}printf("排好序的信息如下:\n");printLink(head);return;}else if(i==4){n=0,m,flag=1;for(p=head;NULL!=p;p=p->next)n++;for(m=1;flag&&m<=n;n++){flag=0;for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){ if(p->name[0]>q->name[0]){if(head==p){head->next=q->next;head=q;q->next=p;q=head->next;p=head;}else{p->next=q->next;q->next=p;s->next=q;p=q;q=p->next;}flag=1;}}}printf("排好序的信息如下:\n");printLink(head);return;}else if(i!=0&&i!=1&&i!=2&&i!=3&&i!=4)printf("输入出错!请再次输入!\n\n");printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n");printf("\t\t~.~ 职工信息排序系统~.~\n");printf("\t\t~.~ ~.~\n");printf("\t\t~.~\t0.退出排序系统,回到主菜单~.~\n\t\t~.~\t1.对性别进行排序~.~\n\t\t~.~\t2.对出生年月进行排序~.~\n\t\t~.~\t3.对工作年月进行排序~.~\n\t\t~.~\t4.显示全部职工信息~.~\n");printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n");//printf("0.退出排序系统,回到主菜单\n1.对性别进行排序\n2.对出生年月进行排序\n3.对工作年月进行排序\n");}}void main(){DataType x;SLNode *head;int i,n;FILE *fp;ListInitiate(&head);//初始化链表printf("\n");printf("*******************************************************************************\n");printf("************************ 欢迎使用职工管理系统***************************\n");printf("*********************************************************** ********************\n");printf("请输入要录入的职工人数n:");//输入要录入的职工人数scanf("%d",&n);if(n==0) goto aa;printf("请输入职工信息:\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");for(i=0;i<n;i++)//职工信息的输入{scanf("%s %c %d %d %s %s %s %d",,&x.sex,&x.born_date,&x.work_dat e,x.degree,x.job,x.address,&x.tele_num);head=ListInsert(head,x);}if((fp=fopen("Employeetxt","rd"))==NULL){printf("\t无法打开'Employee.txt'!\n");exit(0);}put(head,fp);if(fclose(fp)){printf("\t无法关闭'Employee.txt'!\n"); exit(0);}printLink(head);aa: printf("\n");printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n");printf("\t☆* 主菜单* ☆\n");printf("\t★********** ★\n");printf("\t☆☆\n");printf("\t★\t0.结束管理系统\t\t\t1.新增职工信息\t\t★\n\t☆\t2.删除职工信息\t\t\t3.查询职工信息\t\t☆\n\t★\t4.修改职工信息\t\t\t5.职工信息排序\t\t★\n");printf("\t☆☆\n");printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n");while(1){printf("请输入您要选择的操作:");scanf("%d",&i);if(i==0)//输入0,结束系统{printf("\t\t您已经成功退出职工管理系统,谢谢使用!\n");break;}else if(i==1){//输入1,新增一名职工printf("请输入职工信息:\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");scanf("%s %c %d %d %s %s %s %d",,&x.sex,&x.born_date,&x.work_dat e,x.degree,x.job,x.address,&x.tele_num);head=ListInsert(head,x);printf("新增成功!请继续操作!\n");printLink(head);put(head,fp);//保存在文件中}else if(i==2){//输入2,删除一名职工ListDelete(head);if((fp=fopen("Employee.txt","w"))==NULL){printf("无法打开'职工名单.txt'!\n");exit(0);}put(head,fp);//保存在文件中if(fclose(fp)){printf("无法关闭'Employee.txt'!\n"); exit(0);}}else if(i==3)//输入3,查找一名职工Listfind(*head);else if(i==4){//输入4,修改职工信息ListModify(head);if((fp=fopen("Employee.txt","w"))==NULL){printf("无法打开'Employee.txt'!\n");exit(0);}put(head,fp);//保存在文件中if(fclose(fp)){printf("无法关闭'Employee.txt'!\n"); exit(0);}}else if(i==5){//输入5,对职工信息进行排序SLNode *p=head;Listpaixu(p);}//如果出入的不是上述任何一种情况就输出:输入出错else printf("输入出错!请再次输入!\n");printf("\n");printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n");printf("\t☆* 主菜单* ☆\n");printf("\t★********** ★\n");printf("\t☆☆\n");printf("\t★0.结束管理系统\t\t\t\t1.新增职工信息\t★\n\t☆ 2.删除职工信息\t\t\t\t3.查询职工信息\t☆\n\t★ 4.修改职工信息\t\t\t\t5.职工信息排序\t★\n");printf("\t☆☆\n");printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n");//printf("0.结束系统\n1.新增一名职工\n2.删除一名职工\n3.查询职工信息\n4.修改职工信息\n5.对职工信息进行排序\n");。