人事管理系统——C语言
人事管理系统c课程设计

人事管理系统c 课程设计一、课程目标知识目标:1. 让学生理解人事管理系统的基本概念,掌握其功能模块和操作流程。
2. 使学生掌握数据库管理的基本方法,能够运用SQL语句进行数据查询、插入、修改和删除。
3. 帮助学生了解人力资源管理的基本原则,结合实际案例进行分析。
技能目标:1. 培养学生运用C语言编写简单的人事管理系统功能模块的能力。
2. 培养学生具备数据库设计和操作的能力,能够根据实际需求创建数据库表、编写SQL语句。
3. 提高学生的团队协作能力,通过分组讨论、协作完成项目任务。
情感态度价值观目标:1. 培养学生对待人事管理系统开发的认真态度,注重程序规范和代码质量。
2. 培养学生对人力资源管理的兴趣,激发学生探讨实际问题的热情。
3. 引导学生树立正确的职业观,认识到人事管理系统在企业管理中的重要作用。
课程性质分析:本课程为实践性较强的课程,旨在让学生在掌握基本理论知识的基础上,通过实际操作,提高解决实际问题的能力。
学生特点分析:学生具备一定的C语言基础和数据库知识,但对人事管理系统的整体架构和实际应用尚不了解,需要通过本课程的学习,逐步提高。
教学要求:1. 结合实际案例,注重理论知识与实际操作相结合,提高学生的实践能力。
2. 采用任务驱动教学法,激发学生的学习兴趣,引导学生主动探索。
3. 强化团队合作,培养学生的沟通能力和协作精神。
二、教学内容1. 人事管理系统概述- 了解人事管理系统的基本概念、发展历程和实际应用场景。
- 分析人事管理系统的功能模块和业务流程。
2. 数据库基础- 复习数据库的基本概念,如表、字段、记录等。
- 掌握SQL语句的基本操作,包括数据查询、插入、修改和删除。
3. C语言编程实践- 运用C语言编写人事管理系统中的功能模块,如员工信息录入、查询、修改等。
- 学习如何使用C语言调用数据库接口,实现数据存取。
4. 人力资源管理基础知识- 了解人力资源管理的基本原则、方法和技巧。
C人事管理系统

C人事管理系统简介C人事管理系统是一个基于C语言开发的员工管理系统,旨在帮助企业高效地管理员工和人力资源。
该系统可以实现员工信息的录入、查询、修改和删除等功能,同时还支持部门管理、岗位管理、薪资管理等人力资源管理功能。
通过C人事管理系统,企业可以更好地管理员工信息,实现人事管理的科学化和规范化。
功能模块C人事管理系统包含以下主要功能模块:1.员工管理模块:用于员工信息的录入、查询、修改和删除。
2.部门管理模块:用于部门信息的录入、查询、修改和删除。
3.岗位管理模块:用于岗位信息的录入、查询、修改和删除。
4.薪资管理模块:用于员工薪资信息的录入、查询、修改和计算。
使用说明系统安装1.确保已经安装了C编译器,比如GCC。
2.下载C人事管理系统的源代码文件。
3.打开命令行界面,进入源代码所在目录。
4.在命令行中输入如下命令进行编译:gcc main.c -o HRMS。
5.编译成功后,将会生成可执行文件HRMS。
系统初始化1.双击可执行文件HRMS或在命令行中输入./HRMS 启动系统。
员工管理1.进入员工管理模块后,可以选择添加员工、查询员工、修改员工或删除员工。
2.输入员工的基本信息,包括姓名、性别、年龄、所属部门和岗位。
确认后信息将保存在系统中。
3.查询员工时,可以按照员工编号、姓名、部门或岗位等条件进行查询。
4.修改员工信息时,输入员工编号,然后修改相应的信息。
5.删除员工时,输入员工编号,系统将会删除该员工的信息。
部门管理1.进入部门管理模块后,可以选择添加部门、查询部门、修改部门或删除部门。
2.输入部门的名称和描述,确认后部门信息将保存在系统中。
3.查询部门时,可以按照部门名称进行查询。
4.修改部门信息时,输入部门名称,然后修改相应的信息。
5.删除部门时,输入部门名称,系统将会删除该部门的信息。
岗位管理1.进入岗位管理模块后,可以选择添加岗位、查询岗位、修改岗位或删除岗位。
2.输入岗位的名称和描述,确认后岗位信息将保存在系统中。
人事管理c语言课程设计

人事管理c语言课程设计一、教学目标本课程旨在通过学习人事管理系统C语言编程,让学生掌握C语言的基本语法、数据结构、算法及面向对象编程思想,培养学生具备运用C语言解决实际问题的能力。
具体目标如下:1.知识目标:–掌握C语言的基本语法和编程规范;–理解并运用数据结构、算法解决编程问题;–学习面向对象编程,了解类和对象的概念及应用。
2.技能目标:–能够运用C语言编写简单的程序,解决实际问题;–熟练使用C语言开发工具,如编译器、调试器等;–掌握C语言编程的基本技巧,提高编程效率。
3.情感态度价值观目标:–培养学生的编程兴趣,激发创新精神;–培养学生团队合作、自主学习的良好学习态度;–使学生认识到计算机编程在现代社会的重要性,提高学生的信息素养。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、算法及面向对象编程。
具体安排如下:1.C语言基本语法:–变量、数据类型、运算符;–控制语句、函数、数组和字符串;–指针、结构体、共用体和位字段。
2.数据结构:–线性表、栈和队列;–链表、树和图。
–排序和查找算法;–递归算法;–动态规划算法。
3.面向对象编程:–类和对象的概念及创建;–继承、封装和多态;–常用类库和接口。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:教师讲解C语言的基本语法、数据结构、算法及面向对象编程的概念和原理,引导学生掌握编程知识。
2.讨论法:学生分组讨论编程问题,培养学生的团队合作精神和沟通能力。
3.案例分析法:通过分析实际案例,让学生了解编程在实际应用中的重要性,提高学生的信息素养。
4.实验法:安排实验室实践环节,让学生动手编写代码,培养学生的编程能力和实践能力。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用权威、实用的C语言编程教材,如《C程序设计语言》等。
2.参考书:提供相关领域的经典著作和优秀教材,如《C Primer Plus》等。
c语言设计的人事管理系统源码

#include<iostream.h>#include<string.h>#include<iomanip.h>#include<fstream.h>#include<stdio.h>#include<stdlib.h>#include<conio.h>int k=1,i; //定义一个标志变量class birthday{ //定义出生年月日类public:int year;int month;int day;};class people{ //声明人员基类,以后在这个基础上派生出其它类public:people(){}virtual void enter(); //虚基函数,搭成一个框架,以后在此基础上扩充virtual void display();virtual int get_no(){return number;}virtual char * get_name(){return name;}virtual void change_infor(){} //信息修改函数virtual void readfile(){} //从文件中读virtual void write(){} //将信息写入文件people operator = (people p1); //运算符重载int operator == (people p1);virtual ~people(){};protected:char name[12];int number;char sex;birthday bir;char id[15];};people people::operator =(people p1)//定义运算符重载{strcpy(name,); number=p1.number; sex=p1.sex; bir.day=p1.bir.day;bir.month=p1.bir.month; bir.year=p1.bir.year;strcpy(id,p1.id);return p1;}int people::operator ==(people p1){if(id==p1.id) return 1;else return 0;}void people::enter(){ //定义信息输入函数cout<<"输入姓名:"; cin>>name;cout<<"输入编号:"; cin>>number;cout<<"输入性别:"; cin>>sex;cout<<"生日是(年月日):"; cin>>bir.year>>bir.month>>bir.day;cout<<"身份证号:";cin>>id;}void people::display(){ //定义信息显示函数cout<<setw(8)<<"姓名"<<setw(8)<<"编号"<<setw(8)<<"性别"<<setw(8)<<"出生日期"<<setw(8)<<"身份证号"<<endl;cout<<setw(8)<<name<<setw(8)<<number<<setw(8)<<sex<<setw(8)<<bir.year<<setw(8)<<bir.mo nth<<setw(8)<<bir.day<<setw(8)<<id<<endl;}class student:virtual public people{ //以公有方式派生出学生类protected:char classnumber[20];public:student(){}virtual void enter(){people::enter();cout<<"输入班级名称:";cin>>classnumber;}virtual void display();virtual void readfile();virtual void write();virtual void change_infor();virtual ~student(){};};class teacher:virtual public people{ //以公有方式派生出老师类protected:char principalship[16];char department[16];public:teacher(){}virtual void enter(){people::enter();cout<<"输入老师的职务:";cin>>principalship;cout<<"\n 输入老师所在的部门:";cin>>department;}virtual void display();virtual void readfile();virtual void write();virtual void change_infor();virtual ~teacher(){}};//class graduate:virtual public student{ //以公有方式派生出研究生类protected:char subject[16];teacher adviser;public:graduate(){};virtual void enter(){student::enter();cout<<"输入研究生的专业:";cin>>subject;cout<<"输入导师的情况:"<<endl;adviser.enter();}virtual void display();virtual void readfile();virtual void write();virtual void change_infor();virtual ~graduate(){};};class teacher_asistant:public teacher,public graduate{ //以公有方式派生出助教类public:teacher_asistant(){};virtual void enter(){graduate::enter();cout<<"请输入助教生所在职务:";cin>>principalship;cout<<"请输入所在部门:";cin>>department;}virtual void display();virtual void readfile();virtual void write();virtual void change_infor();virtual ~teacher_asistant(){}};void student::display(){ //定义派生类学生的信息显示函数cout<<setw(8)<<"姓名"<<setw(8)<<"编号"<<setw(5)<<"性别"<<setw(12)<<"出生日期"<<setw(12)<<"身份证号"<<setw(12)<<"班级名称"<<endl;cout<<setw(8)<<name<<setw(8)<<number<<setw(5)<<sex<<setw(4)<<bir.year<<setw(4)<<bir.mo nth<<setw(4)<<bir.day<<setw(10)<<id<<setw(12)<<classnumber<<endl;}void student::write(){ //定义派生类学生的信息写入文件函数student stu;char ch;ofstream myfile("student.txt",ios::app);do{stu.enter();myfile.write((char *)&stu,sizeof(stu));cout<<"还需要输入下个学生的信息吗(y/n):";cin>>ch;}while(ch=='y'||ch=='Y');myfile.close();}void student::readfile(){ //定义派生类学生的读文件函数ifstream myfile("student.txt",ios::nocreate);while(myfile){student stu;if(myfile.read((char*)&stu,sizeof(stu))){if(stu.number!=-1) //删除一个学生的信息,通过不显示来定义删除stu.display();}}myfile.close();}void student::change_infor(){ //定义派生类学生的信息修改函数student stu;int num,p;cout<<"请输入你要修改或者删除的学生的编号:";cin>>num;fstream myfile("student.txt",ios::in|ios::out);while(myfile.good()){myfile.read((char*)&stu,sizeof(stu));if(num==stu.number){myfile.seekg(-sizeof(stu),ios::cur);cout<<"你是要修改还是要删除该学生的记录(1:删除2:修改):";cin>>p;if(p==1){stu.number=-1;break;}else {cout<<"请输入新的信息"<<endl;stu.enter();break;}}}myfile.write((char *)&stu,sizeof(stu));myfile.close();}void teacher::display(){cout<<setw(8)<<"姓名"<<setw(8)<<"编号"<<setw(5)<<"性别"<<setw(12)<<"出生日期"<<setw(12)<<"身份证号"<<setw(10)<<"职务"<<setw(10)<<"部门"<<endl;cout<<setw(8)<<name<<setw(8)<<number<<setw(5)<<sex<<setw(4)<<bir.year<<setw(4)<<bir.mo nth<<setw(4)<<bir.day<<setw(12)<<id<<setw(10)<<principalship<<setw(10)<<department<<endl ;}void teacher::readfile(){ifstream myfile("teacher.txt",ios::nocreate);while(myfile){people *p;teacher tec;p=&tec;if(myfile.read((char*)&tec,sizeof(tec))){if(tec.number!=-1)p->display();}}myfile.close();}//void teacher::write(){teacher tec;char ch;ofstream myfile("teacher.txt",ios::app);do{tec.enter();myfile.write((char *)&tec,sizeof(tec));cout<<"还需要输入下个学生的信息吗(y/n):";cin>>ch;}while(ch=='y'||ch=='Y');myfile.close();}void teacher::change_infor(){teacher tec;int num,p;cout<<"请输入你要修改或者删除的老师的编号:";cin>>num;fstream myfile("teacher.txt",ios::in|ios::out);while(myfile.good()){myfile.read((char*)&tec,sizeof(tec));if(num==tec.number){myfile.seekg(-sizeof(tec),ios::cur);cout<<"你是要修改还是要删除该老师的记录(1:删除2:修改):";cin>>p;if(p==1){tec.number=-1;break;}else {cout<<"请输入新的信息"<<endl;tec.enter();break;}}}myfile.write((char *)&tec,sizeof(tec));myfile.close();}void graduate::display(){cout<<setw(8)<<"姓名"<<setw(8)<<"编号"<<setw(5)<<"性别"<<setw(12)<<"出生日期"<<setw(8)<<"身份证号"<<setw(8)<<"班级名称"<<setw(10)<<"专业"<<endl;cout<<setw(8)<<name<<setw(8)<<number<<setw(5)<<sex<<setw(4)<<bir.year<<setw(4)<<bir.mo nth<<setw(4)<<bir.day<<setw(8)<<id<<setw(8)<<classnumber<<setw(10)<<subject<<endl;cout<<"他的导师的情况是:"<<endl;adviser.display();}void graduate::readfile(){ifstream myfile("graduate.txt",ios::nocreate);while(myfile){people *p;graduate gra;p=&gra;if(myfile.read((char*)&gra,sizeof(gra))){if(gra.number!=-1)p->display();}}myfile.close();}void graduate::write(){graduate gra;char ch;ofstream myfile("graduate.txt",ios::app);do{gra.enter();myfile.write((char *)&gra,sizeof(gra));cout<<"还需要输入下个研究生的信息吗(y/n):";cin>>ch;}while(ch=='y'||ch=='Y');myfile.close();}void graduate::change_infor(){graduate gra;int num,p;cout<<"请输入你要修改或者删除的研究生的编号:";cin>>num;fstream myfile("graduate.txt",ios::in|ios::out);while(myfile.good()){myfile.read((char*)&gra,sizeof(gra));if(num==gra.number){myfile.seekg(-sizeof(gra),ios::cur);cout<<"你是要修改还是要删除该研究生的记录(1:删除2:修改):";cin>>p;if(p==1){gra.number=-1;break;}else {cout<<"请输入新的信息"<<endl;gra.enter();break;}}}myfile.write((char *)&gra,sizeof(gra));myfile.close();}void teacher_asistant::display(){cout<<setw(8)<<"姓名"<<setw(8)<<"编号"<<setw(5)<<"性别"<<setw(12)<<"出生日期"<<setw(12)<<"身份证号"<<setw(8)<<"班级名称"<<setw(10)<<"专业"<<setw(10)<<"职务"<<setw(10)<<"部门"<<endl;cout<<setw(8)<<name<<setw(8)<<number<<setw(5)<<sex<<setw(4)<<bir.year<<setw(4)<<bir.mo nth<<setw(4)<<bir.day<<setw(8)<<id<<setw(8)<<classnumber<<setw(10)<<subject<<setw(10)<< principalship<<setw(10)<<department<<endl;cout<<"他的导师的情况是:"<<endl;adviser.display();}void teacher_asistant::readfile(){ifstream myfile("tec_asistant.txt",ios::nocreate);while(myfile){people *p;teacher_asistant tec_asis;p=&tec_asis;if(myfile.read((char*)&tec_asis,sizeof(tec_asis))){if(tec_asis.number!=-1)p->display();}}myfile.close();}void teacher_asistant::write(){teacher_asistant tec_asis;char ch;ofstream myfile("tec_asistant.txt",ios::app);do{tec_asis.enter();myfile.write((char *)&tec_asis,sizeof(tec_asis));cout<<"还需要输入下个助教生的信息吗(y/n):";cin>>ch;}while(ch=='y'||ch=='Y');myfile.close();}//void teacher_asistant::change_infor(){teacher_asistant tec_asis;int num,p;cout<<"请输入你要修改或者删除的助教生的编号:";cin>>num;fstream myfile("tec_asistant.txt",ios::in|ios::out);while(myfile.good()){myfile.read((char*)&tec_asis,sizeof(tec_asis));if(num==tec_asis.number){myfile.seekg(-sizeof(tec_asis),ios::cur);cout<<"你是要修改还是要删除该助教生的记录(1:删除2:修改):";cin>>p;if(p==1){tec_asis.number=-1;break;}else {cout<<"请输入新的信息"<<endl;tec_asis.enter();break;}}}myfile.write((char *)&tec_asis,sizeof(tec_asis));myfile.close();}void menu(){cout<<"\n\n\t\t**************************************************"<<endl;cout<<"\t\t*\t 人事管理系统\t *"<<endl;cout<<"\t\t*------------------------------------------------*"<<endl;cout<<" \t\t* 1.请输入人事信息 2.显示人事信息*"<<endl;cout<<" \t\t* 3.对信息的修改或删除 4.返回主菜单0.退出*"<<endl;cout<<"\t\t**************************************************"<<endl;cout<<" \t\t\t\t请选择操作(0=======4) "<<endl;cout<<"\t\t\t\t 请选择:";}void select(){people *pt;student st; teacher te; graduate gr; teacher_asistant t_a;if(i==1) pt=&st;else if(i==2) pt=&gr;else if(i==3) pt=&te;else if(i==4) pt=&t_a;do{int ch;cin>>ch;switch(ch){case 0:exit(0);case 1:pt->write();cout<<"你还想进行何种操作:";break;case 2:pt->readfile();cout<<"你还想进行何种操作:";break;case 3:pt->change_infor();cout<<"你还想进行何种操作:";break;case 4:k=0;break;default:cout<<"你的选择错误,请重新选择:";break;}}while(k);}void main(){b:cout<<"\n\n\t\t***************************************************"<<endl;cout<<"\t\t*\t 人事管理系统\t *"<<endl;cout<<"\t\t*-----------------------------------------------------*"<<endl;cout<<"\t\t* 1:学生*"<<endl;cout<<"\t\t* 2:研究生*"<<endl;cout<<"\t\t* 3:教师*"<<endl;cout<<"\t\t* 4:助教*"<<endl;cout<<"\t\t* 0:退出*"<<endl;cout<<"***************************************************"<<endl;cout<<"请选择(0---4):";cin>>i;switch(i){case 0:cout<<"你已经退出系统";getch();exit(0);case 1:{system("cls");menu();select();break;}case 2:{system("cls");menu();select();break;}case 3:{system("cls");menu();select();break;}case 4:{system("cls");menu();select();break;}default :cout<<"你的选择有误,请重新选择:";break;}if(k==0)k=1;system("cls");goto b;}。
c语言课程设计之人事管理系统(doc 34页)

c语言课程设计之人事管理系统(doc 34页)本科生C语言课程设计论文课程名称C语言课程设计教师姓名朱莉本科生姓名李百蝉本科生学号20111002986本科生专业地质学所在院系地球科学学院日期: 2013年12月26日目录目录 (3)1.课程论文题目 (3)2.程序设计思路 (3)3.功能模块图 (4)4.程序代码 (4)5.程序运行结果 (30)6.课程设计总结 (32)7.致谢 (32)8.参考文献 (32)一课程论文题目某高校主要人员有:在职人员(行政人员、教师、一般员工)、退休人员和临时工。
现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别。
其中,人员编号唯一,不能重复。
(1)添加删除功能:能根据学院人事的变动情况,添加删除记录;(2)查询功能:能根据编号和姓名进行查询;(3)编辑功能(高级):根据查询对相应的记录进行修改,并存储;(4)统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数(硕士学位以上或者副教授以上)),统计要求同时显示被统计者的信息;(5)排序功能:按照年龄、来院时间进行排序;(6)保存功能:能对输入的数据进行相应的存储;二程序设计思路根据题目要求,人事信息是存放在文件中的,所以应该提供相应的文件的输入输出的功能,在程序中应该有添加删除,查询,编辑,统计,排序,保存等程序实现相应的操作,另外菜单式的选择方式选择程序的功能也是必须需的。
另外程序中要求存储的模块,采用的方式均为将原文件中的所有数据读入内存,在内存中处理之后以覆盖的方式写入文件中重新储存,这样的方法容易理解、容易编写,但当文件中的数据量很大时,这种方法也存在一定的难度,在本程序中将M定为2000,也即最多可储存的职工人数为2000;根据以上需求分析,将程序分成以下几个模块:1.添加和删除****添加人员信息并保存(1)****按名称和编号查询与删除记录并保存(2)2.查询与编辑****按名称和编号查询****重新编辑信息并保存3. 统计****统计在职人数****统计党员人数****统计女工人数****统计硕士以上学历和副教授以上职称人数****将统计得到的信息保存在worker3.txt文件中4. 排序****按年龄进行排序(1)****按来院时间进行排序(2)三功能模块图四程序代码1、主函数:主函数设计的比较简单,只提供输入、处理和输出部分的函数调用。
C语言人事管理系统设计

设计题目:人事管理系统设计目录:1.设计任务---------------------------------------------------------------------------------------------12.正文-----------------------------------------------------------------------------------------------------------2(1).系统模块图------------------------------------------------------------------------------------------3 (2).模块说明---------------------------------------------------------------------------------------------3 (3).用户使用说明---------------------------------------------------------------------------------------3 (4).测试结果---------------------------------------------------------------------------------------------33.设计小结--------------------------------------------------------------------------------------------------94.附录-----------------------------------------------------------------------------------------------------------10一.设计任务1、需求分析:人事档案信息采用文件存储,因而要提供文件的输入输出操作;根据学院人事的变动情况,添加删除记录,因而要提供文件的添加删除操作;根据编号和姓名进项查询,所以要提供文件的查找操作;高级编辑功能,就是提供文件的修改操作;统计功能要提供统计操作;排序功能要提供用排序算法对文件记录的排序;另外还要提供键盘式选择菜单以实现功能选择。
人事管理系统c课程设计
人事管理系统c 课程设计一、教学目标本课程旨在通过学习人事管理系统C的相关知识,使学生掌握以下知识目标:1.理解人事管理系统C的基本概念和组成部分;2.掌握人事管理系统C的主要功能和操作方法;3.了解人事管理系统C在现代企业管理中的应用和意义。
同时,通过实践操作和案例分析,培养学生以下技能目标:1.能够熟练操作人事管理系统C进行日常的人事管理;2.能够根据企业实际情况,进行人事管理系统的配置和优化;3.能够运用人事管理系统C进行人力资源数据的分析和决策。
在教学过程中,注重培养学生的情感态度和价值观,使学生:1.认识到人事管理系统C在提高企业效率和降低成本方面的重要性;2.培养学生对新技术的敏感度和积极学习的态度;3.培养学生团队合作和解决问题的能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.人事管理系统C的基本概念和组成部分;2.人事管理系统C的主要功能和操作方法;3.人事管理系统C在现代企业管理中的应用和意义;4.人事管理系统C的配置和优化方法;5.人事管理系统C的数据分析和决策应用。
教学过程中,将结合具体教材和案例,进行详细的讲解和操作演示,确保学生能够全面掌握相关知识。
三、教学方法为了提高教学效果和学生的参与度,本课程将采用多种教学方法:1.讲授法:通过讲解和案例分析,使学生掌握人事管理系统C的基本概念和主要功能;2.讨论法:通过小组讨论和分享,培养学生的思考和解决问题的能力;3.实验法:通过实际操作和模拟实验,使学生熟练掌握人事管理系统C的操作方法;4.案例分析法:通过分析真实案例,使学生了解人事管理系统C在实际企业管理中的应用。
四、教学资源为了支持本课程的教学,将准备以下教学资源:1.教材:选择适合的教材,为学生提供全面的知识体系;2.参考书:提供相关的参考书籍,丰富学生的知识视野;3.多媒体资料:制作教学PPT和视频资料,提高学生的学习兴趣;4.实验设备:准备计算机和相关设备,为学生提供实际操作的机会。
人事管理系统c语言版
⼈事管理系统c语⾔版int menu(){printf("请按提⽰输⼊完毕操作!\n");printf("1.查询员⼯信息\n");printf("2.统计员⼯数量\n");printf("3.录⼊员⼯信息\n");printf("4.删除员⼯信息\n");printf("5.按id排序全部员⼯\n");printf("6.打印全部员⼯信息\n");printf("7.退出系统\n");return 0;}如menu()函数所看到的,该系统⼀共同拥有7个功能#include <stdio.h>#include <stdlib.h>#include <string.h>struct emp{int id;char name[50];struct emp * next;// struct emp * prev;};struct emp * initList();struct emp * addListTailNode(struct emp * head);struct emp * deleteListNode(struct emp * head,int id);struct emp * searchEmp(struct emp * head,int id);int printList(struct emp * l);int printNode(struct emp * p);struct emp * sortList(struct emp * head);int getListLen(struct emp * head);int writeToDisk(struct emp * head);struct emp * readFromDisk();int menu();int usage(struct emp * head);#include "emp.h"int main(){struct emp * head;head=readFromDisk();usage(head);return 0;}struct emp * initList(){struct emp * head;head=(struct emp *)malloc(sizeof(struct emp));head->next=NULL;return head;}struct emp * addListTailNode(struct emp * head){int id;char name[50];struct emp * p, * last , * check;last = head;while(last->next!=NULL){last=last->next;}printf("依次输⼊:员⼯id号,姓名!\n");scanf("%d%s",&id,&name);check = head;while(check!=last){ //遍历check=check->next;if(id==check->id){printf("加⼊�失败!员⼯id号反复!\n");return head;}}p=(struct emp *)malloc(sizeof(struct emp));p->id=id;strcpy(p->name,name);//last->next=p;last=p;p->next=NULL;printf("%s员⼯信息已加⼊�!\n",p->name);return head;}struct emp * deleteListNode(struct emp * head,int id){struct emp * p,* q;p = head->next;while(p!=NULL){if(p->next->id==id){break;}p=p->next;}if(head->next==NULL){printf("书籍信息为空!删除失败!\n");}else{q = p->next;p->next = q->next;printf("%s书籍信息被删除!\n",q->name);free(q);}return head;}struct emp * searchEmp(struct emp * head,int id){//查询,返回节点信息 struct emp * p;p = head->next;while(p!=NULL){if(p->id==id){break;}p=p->next;}return p;}int printNode(struct emp * p){//打印节点信息if(p!=NULL){printf("员⼯id: %d 员⼯姓名:%s\n",p->id,p->name);}else{printf("系统内⽆该员⼯信息!\n");}return 0;}int printList(struct emp * head){ //打印整条链表struct emp * p;p = head->next;while(p!=NULL){printNode(p);p=p->next;}return 0;}struct emp * sortList(struct emp * head){//排序struct emp * p,* q;int temp_id;char temp_name[50];for(p=head->next;p!=NULL;p=p->next){for(q=p->next;q!=NULL;q=q->next){if(p->id>q->id){temp_id = q->id;q->id = p->id;p->id = temp_id;//strcpy(temp_name,q->name);strcpy(q->name,p->name);strcpy(p->name,temp_name);}}}return head;}int getListLen(struct emp * head){int len=0;struct emp * p;p=head->next;while(p!=NULL){len++;p=p->next;}return len;}int writeToDisk(struct emp * head){FILE * fp;struct emp * p;if((fp = fopen("D:\\emp.hhtx", "w")) == 0){printf("写⼊失败……!\n");return 0;}//p=head->next;while(p!=NULL){fwrite(p,sizeof(struct emp),1,fp);printf("%d %s\n",p->id,p->name);p=p->next;}fclose(fp);return 0;}struct emp * readFromDisk(){FILE * fp;struct emp * head,* last,* p,* temp;head = initList();if((fp = fopen("D:\\emp.hhtx", "r")) == 0){printf("载⼊失败……未找到存档数据!\n\n"); return head;}//last = head;p=(struct emp *)malloc(sizeof(struct emp)); while(p!=NULL){p=(struct emp *)malloc(sizeof(struct emp)); fread(p,sizeof(struct emp),1,fp);printf("读取数据: %d %s\n",p->id,p->name); //last->next=p;last=p;p=p->next;}fclose(fp);printf("系统数据初始化完毕!");return head;}int menu(){printf("请按提⽰输⼊完毕操作!\n");printf("1.查询员⼯信息\n");printf("2.统计员⼯数量\n");printf("3.录⼊员⼯信息\n");printf("4.删除员⼯信息\n");printf("5.按id排序全部员⼯\n");printf("6.打印全部员⼯信息\n");printf("7.退出系统\n");return 0;}int usage(struct emp * head){int x,id;struct emp * p;menu();while(1){printf("请输⼊序列号:");scanf("%d",&x);switch(x){case 1:printf("输⼊所要查询的员⼯的id号:");scanf("%d",&id);p = searchEmp(head,id);printNode(p);printf("---------------------------------\n");break;case 2:printf("系统中⼀共存在%d个员⼯\n",getListLen(head)); break;case 3:head=addListTailNode(head);printf("---------------------------------\n");break;case 4:printf("输⼊所要删除的员⼯的id号:");scanf("%d",&id);head=deleteListNode(head,id);printf("---------------------------------\n");break;case 5:printf("排序開始……\n");head=sortList(head);printf("排序已完毕!\n");printf("---------------------------------\n");break;case 6:printList(head);printf("---------------------------------\n");break;case 7:writeToDisk(head);printf("保存完毕……\n");printf("已退出系统!\n");printf("---------------------------------\n");return 0;default:return 0;}}return 0;}。
c语言人事管理系统
一、内容(标题:宋体,粗体,四号字)本程序主要实现了对高校人事的管理。
其不仅可以对人员的新建、添加、删除的基本操作,还可以进行查询编辑、以不同的方式排序等操作。
进行操作时,只要输入相对应的数字或信息即可。
二、上机环境操作系统:win 7\.windows Xp开发工具:VC6.0三、函数调用关系图四、各函数功能说明1. void add(); 新建\添加2. void del(); 删除3. void sear_edit(); 查询编辑4. void scan(); 浏览5. void order(); 排序6. void old_order(); 年龄排序7. void comingtime_order(); 来院时间排序8. void main() 主函数五、算法描述或流程图0.main ( )函数1.add ( )函数2.del ()函数3.sear_edit( )函数4.scan ()函数5.order ( )函数6.exit ()函数六、程序运行效果图0.main ()函数1.添加函数exit ()exit ()退出2.浏览3.查询编辑4.删除5.排序6.删后浏览七、总结一星期的C语言课程设计结束了,在这八天的时间里,我自己独立完成了一个程序从构思结构,到编写代码,然后上机调试运行的过程,感觉自己收获很大。
通过解决一个又一个的问题,熟悉了C语言的应用,对计算机语言应用的理解又深了一层,在老师的指导下,学会了模块设计的方法,用流程图表示算法,掌握了用C语言进行程序设计的能力。
在设计过程中,我理解了对于一个较大的程序,不可能一次编写出一个较大的系统,通常要采取自顶向下的设计思想,先设计主函数,再通过完善一个个的功能模块来完成程序的设计过程,在设计过程中要充分理解整个程序的设计思路,采用逐步细化的方式来完成整个程序。
使各个模块能够很好地兼容在一起,并进行运行测试,程序能够无错误的运行。
之后,优化界面和显示,使人能够轻松愉悦地操作。
学校人事管理系统 c语言编写
学校人事管理系统注:开始输入的管理员的姓名和学号是,xx 2013#include <stdio.h>#include <stdlib.h>#include <windows.h>typedef struct teacher{c har name[20];c har sex[20];c har birth[20];c har post[20];//职称i nt age;c har timein[20];//入校时间} teac;teac tea[1000];int count = 0,flag1 = 0;char str[20], Administrator[20] = "xx", accounts[20] = "2013";void enter();//进入void init();//初始化void scan();//查看void find();//查找void change();//修改void sum();//统计void del();//删除void add();//添加void rank();//排序void save();//保存void copy(teac *t1, teac *t2);//赋值void main(){i nt m;e nter();i nit();w hile (1){system("cls");//清屏printf("\n\n *********学校人事管理系统*********");printf("\n ________________________________________________\n");printf("\n *1.查看职工信息表\n");printf("\n *2.查找职工\n");printf("\n *3.修改职工信息\n");printf("\n *4.统计同一类型职工的人数\n");printf("\n *5.删除某职工\n");printf("\n *6.添加职工\n");printf("\n *7.按职工的某项信息排序\n");printf("\n *8.保存\n");printf("\n *0.退出系统\n");printf("\n ________________________________________________\n"); printf(" 请输入你的选择:");scanf("%d", &m);switch(m){case 1:system("cls");scan();getchar();getchar();break;case 2:system("cls");find();getchar();getchar();break;case 3:system("cls");change();getchar();getchar();break;case 4:system("cls");sum();getchar();getchar();break;case 5:system("cls");del();getchar();getchar();break;case 6:system("cls");add();getchar();getchar();break;case 7:system("cls");rank();getchar();getchar();break;case 8:system("cls");save();getchar();getchar();break;case 0:if (flag1){printf("职工信息已改动,是否保存?(Y/N)");if ((getchar() == 'Y') || (getchar() == 'y'))save();}exit(1);break;default:printf("输入有误,请重新输入……");system("cls");break;}}}void enter(){i nt i, flag = 0;c har str1[20], str2[20];p rintf("请输入管理员的名字和帐号:");s canf("%s%s", str1, str2);i f ((strcmp(str1, Administrator) != 0) || (strcmp(accounts, str2) != 0)) {for (i=0; i<3; i++){printf("用户名或帐号有误,还有 %d 次机会,请重新输入:", 3-i);scanf("%s%s", str1, str2);if ((strcmp(str1, Administrator)== 0) || (strcmp(accounts, str2) == 0)) return ;}printf("你的输入有问题,为本系统的安全,系统将自动退出,欢迎下次使用……\n");exit(0);}}void init()//程序初始化{F ILE *fp;i nt i;f p = fopen("职工信息表.txt", "r");i f (fp == NULL){printf("打开文件失败,请查找问题");exit(0);}f or (i=0; !feof(fp); i++){fscanf(fp, "%s %s %s %s %d %s\n", tea[i].name, tea[i].sex, tea[i].birth, tea[i].post, &tea[i].age, tea[i].timein);}c ount = i;}void scan()//浏览职工信息表{i nt i;p rintf(" 姓名性别出生日期职称年龄入校时间\n");f or (i=0; i<count; i++){printf("%d: %s %s %s %s %d %s\n", i+1, tea[i].name, tea[i].sex, tea[i].birth, tea[i].post, tea[i].age, tea[i].timein);}}void find()//查找职工{i nt i, num = 0;p rintf("请输入要查找的职工的名字:");s canf("%s", str);f or (i=0; i<count; i++){if (strcmp(str, tea[i].name) == 0){num++;if (num == 1){printf("你要查找的职工的信息为:\n");printf(" 姓名性别出生日期职称年龄入校时间\n");}printf("%d: %s %s %s %s %d %s\n", num, tea[i].name, tea[i].sex, tea[i].birth, tea[i].post, tea[i].age, tea[i].timein);}}i f (num == 0)printf("没有找到你要查找的职工或输入错误,请核对后再输入!");}void change(){i nt i, j = 0, x, nianling, arr[50];p rintf("请输入要修改的职工的名字:");s canf("%s", str);f or (i=0; i<count; i++){if (strcmp(str, tea[i].name) == 0){printf("%d: %s %s %s %s %d %s\n", j+1, tea[i].name, tea[i].sex, tea[i].birth, tea[i].post, tea[i].age, tea[i].timein);arr[j] = i;j++;}}i f (j == 0){printf("没有你要查找的职工,请核对后再输入……");return ;}e lse if (j == 1){xg: printf("情输入要修改的选项:\n1 姓名\n2 性别\n3 出生日期\n4 职称\n5年龄\n6 入校时间\n7 全部\n");printf("请选择:");scanf("%d", &x);if (x == 5){printf("请输入年龄:");scanf("%d", &nianling);tea[arr[j-1]].age = nianling;}else if (x == 7){printf("请重新输入各项信息,输入顺序为:\n");printf("姓名性别出生日期职称年龄入校时间\n");scanf("%s %s %s %s %d %s", tea[arr[j-1]].name, tea[arr[j-1]].sex, tea[arr[j-1]].birth, tea[arr[j-1]].post, &tea[arr[j-1]].age, tea[arr[j-1]].timein);}else if (x<1 || x>7){printf("输入有误,请重新操作……");return ;}else{printf("请输入新的信息:");scanf("%s", str);switch (x){case 1:strcpy(tea[arr[j-1]].name, str);break;case 2:strcpy(tea[arr[j-1]].sex, str);break;case 3:strcpy(tea[arr[j-1]].birth, str);break;case 4:strcpy(tea[arr[j-1]].post, str);break;case 6:strcpy(tea[arr[j-1]].timein, str);break;}}}e lse{printf("请选择要修改的职工的:");scanf("%d", &j);goto xg;}p rintf("修改成功……\n");f lag1 = 1;}void sum()//统计同一类型的职工的信息{i nt i, j, x, sum = 0;p rintf("\n1.性别2出生日期3职称4年龄5入校时间\n请输入统计的类型:");s canf("%d", &x);i f (x<1 || x>5){printf("输入有误,请重新操作……");return ;}e lse if (x == 4){printf("请输入需统计的年龄:");scanf("%d", &j);for (i=0; i<count; i++){if (tea[i].age == j){sum++;if (sum == 1){printf("统计结果为:\n");printf(" 姓名性别出生日期职称年龄入校时间\n");}printf("%d: %s %s %s %s %d %s\n", sum, tea[i].name, tea[i].sex, tea[i].birth, tea[i].post, tea[i].age, tea[i].timein);}}}e lse if (x == 5){printf("请输入需统计的信息:");scanf("%s", &str);for (i=0; i<count; i++){if (strcmp(tea[i].timein, str) == 0){sum++;if (sum == 1){printf("统计结果为:\n");printf(" 姓名性别出生日期职称年龄入校时间\n");}printf("%d: %s %s %s %s %d %s\n", sum, tea[i].name, tea[i].sex, tea[i].birth, tea[i].post, tea[i].age, tea[i].timein);}}}e lse{printf("请输入需统计的信息:");scanf("%s", &str);for (i=0; i<count; i++){if ((strcmp(tea[i].sex, str) == 0) || (strcmp(tea[i].birth, str) == 0) || (strcmp(tea[i].post, str) == 0)){sum++;if (sum == 1){printf("统计结果为:\n");printf(" 姓名性别出生日期职称年龄入校时间\n");}printf("%d: %s %s %s %s %d %s\n", sum, tea[i].name, tea[i].sex, tea[i].birth, tea[i].post, tea[i].age, tea[i].timein);}}}i f (sum == 0){printf("没有找到有关信息或输入有误,请核对后在输入……");return ;}p rintf("总人数为:%d\n", sum);}void del()//删除职工{int i, j = 0, y, num = 0, arr[50];p rintf("请输入要删除的教师的名字:");s canf("%s", str);f or (i=0; i<count; i++){if (strcmp(str, tea[i].name) == 0){arr[j] = i;j++;if (j <= 1){printf("姓名性别出生日期职称年龄入校时间\n");}printf("%d: %s %s %s %s %d %s\n", j, tea[i].name, tea[i].sex, tea[i].birth, tea[i].post, tea[i].age, tea[i].timein);}}n um = j;i f (j == 0){printf("没有你要查找的职工,请核对后再输入……");return ;}e lse if (j == 1){y = arr[0];sc: printf("请确认是否删除(Y/N)");if ((getchar() == 'Y') || (getchar() == 'y')){for (i=y; i<count-1; i++){strcpy(tea[i].name, tea[i+1].name);strcpy(tea[i].sex, tea[i+1].sex);strcpy(tea[i].birth, tea[i+1].birth);strcpy(tea[i].post, tea[i+1].post);strcpy(tea[i].timein, tea[i+1].timein);tea[i].age = tea[i+1].age;}}elsereturn ;}e lse{printf("请选择要删除的职工:");scanf("%d", &j);if (j<1 || j>num){printf("输入有误,请重新操作……");return ;}y = arr[j-1];goto sc;}c ount--;p rintf("删除成功……");f lag1 = 1;}void add(){p rintf("请按如下格式输入需要增加的职工信息:\n");p rintf("姓名性别出生日期职称年龄入校时间\n");s canf("%s %s %s %s %d %s", tea[count].name, tea[count].sex, tea[count].birth, tea[count].post, &tea[count].age, tea[count].timein);c ount++;p rintf("添加成功……");f lag1 = 1;}void rank()//按某种顺序排序{i nt i, j, a, min = 0;t eac tea1[1000], tmp;f or (i=0; i<count; i++){copy(&tea1[i], &tea[i]);}p rintf("\n1 姓名\n2 出生日期\n3 年龄\n4 入校时间\n");p rintf("请输入需要排序的项目:");s canf("%d", &a);s witch (a){case 1:printf("\n________________________________________________\n");printf("排序结果为:\n");printf(" 姓名性别出生日期职称年龄入校时间\n");for (i=0; i<count; i++){min = i;for (j=i+1; j<count; j++){if (strcmp(tea1[j].name, tea1[min].name) < 0){min = j;}}printf("%d: %s %s %s %s %d %s\n", i+1, tea1[min].name, tea1[min].sex, tea1[min].birth, tea1[min].post, tea1[min].age, tea1[min].timein);copy(&tmp, &tea1[i]);copy(&tea1[i], &tea1[min]);copy(&tea1[min], &tmp);}break;case 2:printf("\n________________________________________________\n");printf("排序结果为:\n");printf(" 姓名性别出生日期职称年龄入校时间\n");for (i=0; i<count; i++){min = i;for (j=i+1; j<count; j++){if (strcmp(tea1[j].birth, tea1[min].birth) < 0){min = j;}}printf("%d: %s %s %s %s %d %s\n", i+1, tea1[min].name, tea1[min].sex, tea1[min].birth, tea1[min].post, tea1[min].age, tea1[min].timein);copy(&tmp, &tea1[i]);copy(&tea1[i], &tea1[min]);copy(&tea1[min], &tmp);}break;case 3:printf("\n________________________________________________\n");printf("排序结果为:\n");printf(" 姓名性别出生日期职称年龄入校时间\n");for (i=0; i<count; i++){min = i;for (j=i+1; j<count; j++){if (tea1[j].age < tea1[min].age){min = j;}}printf("%d: %s %s %s %s %d %s\n", i+1, tea1[min].name, tea1[min].sex, tea1[min].birth, tea1[min].post, tea1[min].age, tea1[min].timein);copy(&tmp, &tea1[i]);copy(&tea1[i], &tea1[min]);copy(&tea1[min], &tmp);}break;case 4:printf("\n________________________________________________\n");printf("排序结果为:\n");printf(" 姓名性别出生日期职称年龄入校时间\n");for (i=0; i<count; i++){min = i;for (j=i+1; j<count; j++){if (strcmp(tea1[j].timein, tea1[min].timein) < 0){min = j;}}printf("%d: %s %s %s %s %d %s\n", i+1, tea1[min].name, tea1[min].sex, tea1[min].birth, tea1[min].post, tea1[min].age, tea1[min].timein);copy(&tmp, &tea1[i]);copy(&tea1[i], &tea1[min]);copy(&tea1[min], &tmp);}break;default:printf("输入有误,请重新操作……");}r eturn ;}void save(){F ILE *fp;i nt i;f p = fopen("职工信息表.txt","w");f or (i=0; i<count; i++){fprintf(fp, "%s %s %s %s %d %s\n", tea[i].name, tea[i].sex, tea[i].birth, tea[i].post, tea[i].age, tea[i].timein);}p rintf("保存文件成功!\n");f close(fp);f lag1 = 0;}void copy(teac *t1, teac *t2){s trcpy(t1->name, t2->name);s trcpy(t1->sex, t2->sex);s trcpy(t1->birth, t2->birth);s trcpy(t1->post, t2->post);s trcpy(t1->timein, t2->timein); t1->age = t2->age;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人事管理管理系统[要求]某高校主要人员有:在职人员(行政人员、教师、一般员工)、退休人员和临时工。
现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别。
其中,人员编号唯一,不能重复。
(1)添加删除功能:能根据学院人事的变动情况,添加删除记录;(2)查询功能:能根据编号和姓名进行查询;(3)编辑功能(高级):根据查询对相应的记录进行修改,并存储;(4)统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数(硕士学位以上或者副教授以上)),统计要求同时显示被统计者的信息;(5)排序功能:按照年龄、来院时间进行排序;(6)保存功能:能对输入的数据进行相应的存储;一、需求分析:根据题目要求,职工信息是存放在文件中的,所以应该提供相应的文件的输入输出的功能,在程序中应该有添加删除,查询,编辑,统计,排序,保存等程序实现相应的操作,另外菜单式的选择方式选择程序的功能也是必须需的。
另外程序中要求存储的模块,采用的方式均为将原文件中的所有数据读入内存,在内存中处理之后以覆盖的方式写入文件中重新储存,这样的方法容易理解、容易编写,但当文件中的数据量很大时,这种方法也存在一定的难度,在本程序中将N定为100,也即最多可储存的职工人数为100;二、总体设计:根据以上需求分析,将程序分成以下几个模块:1、新建档案信息;2、删除信息;3、追加信息;4、搜索查找信息(按姓名或者编号搜索);5、浏览全部信息;6、修改信息;7、信息排序;8、信息统计;三、详细设计;1、主函数:〈1〉需求分析:为使系统执行完每部分功能后能够方便的回到系统主界面,main()函数设计的很简单,只包含一个menu()函数,其余的全部功能都通过menu()函数调用来实现,并通过menu()函数的递归调用实现返回主界面的功能。
main()函数定义如下:main(){menu();}而menu()定义如下:〈2〉流程图:void menu(){int n,w1;do{printf("\n\t\t\t\t菜\t单\n");printf("\n\t\t0\t新建档案信息\n\n");printf("\t\t1\t删除信息\n\n");printf("\t\t2\t追加信息\n\n");printf("\t\t3\t搜索查找信息\n\n");printf("\t\t4\t浏览所有信息\n\n");printf("\t\t5\t修改信息\n\n");printf("\t\t6\t信息排序\n\n");printf("\t\t7\t信息统计\n\n");printf("\t\t8\t离开\n\n");printf("\t\t请选择您要进行的操作[ ]\b\b"); /**显示一系列功能并提示选择**/scanf("%d",&n);if(n<0||n>8){w1=1;getchar();}else w1=0;}while(w1==1); /**输入n并判断是否属于0到8**/switch(n){case 0:build();break;case 1:del();break;case 2:add();break;case 3:search();break;case 4:browse();break;case 5:modify();break;case 6:order();break;case 7:data();break;case 8:exit(0);default:{printf("输入错误!请重新输入");menu();}/**根据n的值调用各功能函数**/}}2、各功能模块设计:(1)、新建档案信息模块:<1>、数据结构;看各个数据信息,编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别,均为字符串类型,在文件中以文本形式存放,每条记录对应一个人员的信息,可以方便信息的管理;而数据读进内存中时,可以以结构体的形式,每一个结构体包含了一个人员的全部信息,多的人员的信息组成了一个结构体数组。
定义如下:struct worker{char num[11];char name[10];char sex[2];char age[3];char zhiwu[15];char zhicheng[15];char zhengzhi[15];char xueli[15];char renzhisj[8];char laiyansj[8];char leibie[15];}wk[N],s;其中N是宏定义形式定义的字符,临时定义为100,wk[N],为存放人员信息的结构体数组,而S为临时的结构体,用来保存信息处理过程中的临时数据。
〈2〉、流程图如下:〈3〉、程序:int build(){int i,m,n,p;FILE *fp;if((fp=fopen("worker00.txt","w"))==NULL){printf("can not build file\n");printf_back(); /*输入用户要输入的学生的个数N*/}printf("您要输入的人数是(0-%d)?:",N);scanf("%d",&m);n=m;for(i=0;i<n;i++){printf("\n请输入第%d个工作人员的信息\n",i+1);input(i); /*从0到N调用输入函数input*/}for(p=0;p<=i;p++)if((fprintf(fp,"%s\t%s\t%1s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",wk[p].num,wk[p].n ame,wk[p].sex,wk[p].age,wk[p].zhiwu,wk[p].zhicheng,wk[p].zhengzhi,wk[p].xueli,wk[p].renzhisj,wk[p].laiyansj,wk[p].leibie))!=1) printf("cannot write the data\n\n"); /*将结构体数组中的数据写入文件*/fclose(fp); /*关闭文件*/ printf_back();}(2)、追加模块:〈1〉[需求分析]该模块的功能是拥护需要增加新的员工记录,从键盘输入并逐条写入到原来的文件中去,其中输入号码是要防止号码重复,重复时报告错误,重新输入。
为方便用户管理和查看,该模块采用的方式是用先把原来文件中的数据读入内存,保存在内存中,然后在内存中的数据后面增加新的数据,操作完成后用写的方式打开文件,用覆盖的方式写入。
〈2〉流程图:〈3〉程序:int add(){int i,m,n,p;FILE *fp;n=load(); /*调用加载函数load将文件中的数据读入内存*/if(n==-1){printf("\n对不起,还没有档案,请新建一个档案\n");menu();}printf("您要追加的人数是(0-%d)?:[ ]\b\b\b",N-n);scanf("%d",&m); /*输入要追加的人员个数m*/ for(i=n+1;i<=m+n;i++){printf("\n追加第%d个工作人员的信息\n",i-n);input(i); /*从n到k调用输入函数input(i)*/ }if((fp=fopen("worker00.txt","a+"))==NULL){printf("can not open file\n");printf_back(); /*调用*/}for(p=n+1;p<=m+n;p++)fprintf(fp,"%s\t%s\t%1s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",wk[p].num,wk[p].nam e,wk[p].sex,wk[p].age,wk[p].zhiwu,wk[p].zhicheng,wk[p].zhengzhi,wk[p].xueli,wk[p].renzhisj,wk[p].laiyansj,wk[p].leibie);/*从0到k以覆盖的方式写入文件并保存*/fclose(fp);printf_back(); /*关闭文件*/}(3)修改模块:〈1〉[需求分析:]该模块的功能是显示所有信息,考虑到记录较多,采用分屏显示,显示完所有的记录后,由用户输入需要修改的人员的号码,查找成功后,显示查找结果,并询问拥护修改人员的哪部分记录,根据用户选择修改相应的信息,然后保存修改后的结果;〈2〉流程图〈3〉程序;modify(){int i,n,k,p,w0=1,w1,w2=0;FILE *fp;n=load();do{k=-1;printf_face();for(i=0;i<=n;i++) printf_one(i);do{printf("\n\n请输入你要修改的信息的编号\n\t\t编号:[ ]\b\b");scanf("%s",s.num);for(i=0;i<=n;i++){if(strcmp(s.num,wk[i].num)==0){k=i;s=wk[i];}}if(k==-1) printf("\n\n没有找到您所需的信息! 请重新输入!\n");}while(k==-1);printf_face();printf_one(k);w1=modify_data(k);if(w1==1){printf("\n修改成功!\n\n要继续修改吗?\n\n\t\t1\t是\n\n\t\t2\t保存并返回\n\t[ ]\b\b");scanf("%d",&w0);w2=1;}else{w0=0;if(w2==1)wk[k]=s;}if(w0!=1&&w2==1){fp=fopen("worker00.txt","w");{for(p=0;p<=n;p++)fprintf(fp,"%s\t%s\t%1s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",wk[p].num,wk[p].nam e,wk[p].sex,wk[p].age,wk[p].zhiwu,wk[p].zhicheng,wk[p].zhengzhi,wk[p].xueli,wk[p].renzhisj,wk[p].laiyansj,wk[p].leibie);}fclose(fp);}}while(w0==1);menu();}修改数据函数如下:modify_data(int i){int c,w1;do{printf("\n请选择需要修改的项=>\n\n\t\t1\t编号\n\t\t2\t姓名\n\t\t3\t性别\n\t\t4\t年龄\n\t\t5\t职务\n\t\t6\t职称\n\t\t7\t政治面貌\n\t\t8\t学历\n\t\t9\t任职时间\n\t\t10\t来院时间\n\t\t11\t在职类别\n\n\t\t\t[ ]\b\b");scanf("%d",&c);if(c>11||c<1) printf("错误,请重新选择!");getchar();}while(c>11||c<1);do{switch(c){case 1:printf("旧的编号是%s,",wk[i].num);input_num(i,i-1);break;case 2:printf("旧的姓名是%s,请输入新的姓名:",wk[i].name);scanf("%s",wk[i].name);break;case 3:printf("旧的性别是%s,请输入新的性别:",wk[i].sex);scanf("%1s",wk[i].sex);break;case 4:printf("旧的年龄是%s,请输入新的年龄:",wk[i].age);scanf("%s",wk[i].age);break;case 5:printf("旧的职务是%s,请输入新的职务:",wk[i].zhiwu);scanf("%s",wk[i].zhiwu);break;case 6:printf("旧的职称是%s,请输入新的职称:",wk[i].zhicheng);scanf("%s",wk[i].zhicheng);break;case 7:printf("旧的政治面貌是%s,请输入新的政治面貌:",wk[i].zhengzhi);scanf("%s",wk[i].zhengzhi);break;case 8:printf("旧的学历是%s,请输入新的学历:",wk[i].xueli);scanf("%s",wk[i].xueli);break;case 9:printf("旧的任职时间是%s,请输入新的任职时间:",wk[i].renzhisj);scanf("%s",wk[i].renzhisj);break;case 10:printf("旧的来院时间是%s,请输入新的来院时间:",wk[i].laiyansj);scanf("%s",wk[i].laiyansj);break;case 11:printf("旧的在职类别是%s,请输入新的在职类别:",wk[i].leibie);scanf("%s",wk[i].leibie);break;}printf("now:\n\n");printf_face();printf_one(i);printf("\n确定修改吗?\n\n\t\t1\t是\n\t\t2\t重新修改\n\t\t3\t返回并不保存\n\t\t\t[ ]\b\b\b");scanf("%d",&w1);}while(w1==2);return(w1);}(4)删除模块:〈1〉[需求分析]:该模块的运行方式与修改模块类似,首先分屏显示所有人员的记录,显示完所有的记录后,由用户输入要删除的人员的号码,根据号码查找相应的记录并将结果显示出来,经用户确认后删除,删除的方法是将文件中的数据读入内存,赋给相应的结构体,并将结构体数组中将删除的后面的数据赋给前一个结构体,然后将相应数据写入文件并保存;〈2〉流程图:Y〈3〉程序;int del(){char c;int i,j,n,k,m,w0,w1=0,w2=0;FILE *fpt; /*fpt?*/n=load();do{k=-1;printf_face(); /*调用*/for(i=0;i<=n;i++) printf_one(i);do{printf("\n\n请输入您想要删除的人员的编号!\n\t\tNO.[ ]\b\b");scanf("%s",s.num);for(i=0;i<=n;i++)if(strcmp(s.num,wk[i].num)==0);{k=i;s=wk[i];}if(k==-1)printf("\n\n对不起,这个编号不存在! 请重新输入");}while(k==-1);printf("确定要删除吗? \t请输入y或者n\n\t\t[ ]\b\b");scanf("%1s",&c);if(c=='y'){for(j=i;j<=n;j++) wk[j]=wk[j+1];w1=1;}if(c=='n') menu();else{printf("\n错误,请输入y或者n\n");menu();}if(w1==1){printf("\n删除成功!\n\n您要继续删除吗?\n\n\t\t1\t是\n\n\t\t2\t保存并返回\n\t[]\b\b");scanf("%d",&w0);w2=1;}if(w0==2&&w2==1){fpt=fopen("worker00.txt","w");for(m=0;m<=n;m++)fprintf(fpt,"%s\t%s\t%1s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",wk[m].num,wk[m].na me,wk[m].sex,wk[m].age,wk[m].zhiwu,wk[m].zhicheng,wk[m].zhengzhi,wk[m].xueli,wk[m].renzhisj,wk[m].laiyansj,wk[m].leibie);fclose(fpt);}}while(w0==1);menu();}(5)、按号码搜索:〈1〉[需求分析]:该模块的功能是按照输入的人员的号码查找对应的记录,并将其显示,查找成功以后,增加删除和修改等功能,其中删除和修改功能可以通过调用相应的函数来实现。