c加加动态数组加无限内存人员管理系统
C语言基础-实现动态数组并增加内存管理
C语⾔基础-实现动态数组并增加内存管理⽤C语⾔实现⼀个动态数组,并对外暴露出对数组的增、删、改、查函数(可以存储任意类型的元素并实现内存管理)这⾥我的编译器就是xcode分析:模拟存放⼀个 People类有2个属性字符串类型:姓名整型:年龄array 结构体应当有数组长度:length 空间:capacity 存储对象:value(任意类型)构造⼀个任意对象类.拥有retainCount属性.为内存计数器使⽤⼀次retainCount+1,当retainCount为0时释放该对象指向的内存贴出部分代码// Object.h#ifndef Object_h#define Object_h#include <stdio>//定义结构体typedef struct Object{int retainCount;}Object;//宏定义⽅法⽅便书写#define OBJECTRETAIN(obj) objectRetain((Object*)obj)#define OBJECTRELEASE(obj) objectRelease((Object*)obj)#define GETRETAINCOUNT(obj) getRetainCount((Object*)obj)void objectRetain(Object *obj);void objectRelease(Object *obj);int getRetainCount(Object *obj);#endif /* Object_h */// Object.c#include "Object.h"#include <stdlib>void objectRetain(Object *obj) {obj->retainCount ++;// printf("retain计数+1 = %d\n",obj->retainCount);}void objectRelease(Object *obj) {obj->retainCount --;if (obj->retainCount <= 0) {free(obj);}// printf("retain计数-1 = %d\n",obj->retainCount);}//获得当前计数int getRetainCount(Object *obj) {return obj->retainCount;}下⾯开始封装.⾸先是对原始数据的封装.1. 将char* 字符串类型封装成String// String.h#ifndef String_h#define String_h#include <stdio>typedef struct String{int retainCount;char *value;}String;String* newString(char* value);char* getStringValue(String* ins);#endif /* String_h */// String.c#include "String.h"#include <stdlib>#include "Object.h"String* newString(char* value){String *str = malloc(sizeof(String));OBJECTRETAIN(str);str->value = value;return str;}char* getStringValue(String* ins){return ins->value;}2.将年龄的类型int封装成Interger// Integer.h#ifndef Integer_h#define Integer_h#include <stdio>typedef struct Integer{int retainCount;int value;}Integer;Integer* newInteger(int value);int getIntegerValue(Integer* ins);#endif /* Integer_h */// Integer.c#include "Integer.h"#include <stdlib>#include "Object.h"Integer *newInteger(int value) {Integer *new = malloc(sizeof(Integer));OBJECTRETAIN(new);new->value = value;return new;}int getIntegerValue(Integer* ins) {return ins->value;}3.定义数组中存放的类包含 name 和 age 属性// People.h#ifndef People_h#define People_h#include <stdio>#include "Integer.h"#include "String.h"typedef struct People{int retainCount;String* name;Integer* age;}People;People* newPeople(String *name,Integer *age);String* getName(People* people);Integer* getAge(People* people);#endif /* People_h */// People.c#include "People.h"#include <stdlib>#include "Object.h"People* newPeople(String *name,Integer *age){People *newP = malloc(sizeof(People));OBJECTRETAIN(newP);newP->age = age;newP->name = name;return newP;}String* getName(People* people){return people->name;}Integer* getAge(People* people){return people->age;}4.准备⼯作都做完 ,下⾯我们来实现数组Array// Array.h#ifndef Array_h#define Array_h#include <stdio>#include "People.h"#include "Object.h"typedef Object* AnyObject;typedef struct Array{int length;int capacity;AnyObject *value;}Array;Array* newArray();//增加数组元素void addElement(Array *array,AnyObject value);//删除Array* removeIndexAt(Array *arry,int index);//插⼊Array* insertIndexAt(Array *array,AnyObject value,int index);//查找AnyObject getValueIndexAt(Array *array,int index);//获取数组长度int getArrayLength(Array *array);//销毁void destroyArray(Array *array);//打印void printArray(Array *arr);#endif /* Array_h */// Array.c#include "Array.h"#include <string>#include <stdlib>#include <assert>//分配空间static AnyObject* allocMemoryByCapacity(Array *arr){return malloc(sizeof(AnyObject) * arr->capacity);}//创建数组Array* newArray(){Array *arr = malloc(sizeof(Array));arr->length = 0;arr->capacity = 32;arr->value = allocMemoryByCapacity(arr);return arr;}//获取数组长度int getArrayLength(Array *array){return array->length;}//增加元素void addElement(Array *array,AnyObject value){if (array->length >= array->capacity) {array->capacity *= 2;AnyObject *oldValue = array->value;memcpy(array->value, oldValue, array->length*sizeof(AnyObject)); free(oldValue);}OBJECTRETAIN(value);array->value[array->length] = value;array->length++;}//删除元素Array* removeIndexAt(Array *arry,int index){assert(index >= 0 && index < arry>length); //断⾔防⽌越界OBJECTRELEASE(getValueIndexAt(arry, index));arry->length -- ;for (int i = index-1; i < arry>length; i++) {arry->value[i] = arry->value[i+1];}return arry;}//在指定位置增加元素Array* insertIndexAt(Array *array,AnyObject value,int index){if (array->length >= array->capacity) {array->capacity *= 2;AnyObject *oldValue = array->value;memcpy(array->value, oldValue, array->length*sizeof(AnyObject));free(oldValue);}array->length++;//插⼊指定位置array->value[index-1] = value;//将元素后移for (int i = index; i < array>length; i++) {array->value[array->length] = array->value[array->length-i];}OBJECTRETAIN(value);return array;}//获取某个元素AnyObject getValueIndexAt(Array *array,int index){assert(index >= 0 && index < array>length);return array->value[index];}//销毁void destroyArray(Array *array){free(array->value);free(array);printf("数组被销毁\n");}//打印结果void printArray(Array *arr){for (int i = 0; i < arr>length; i++) {printf("位置:%d,姓名:%s,年龄:%d\n",i, getStringValue(getName((People*)getValueIndexAt(arr, i))),getIntegerValue(getAge((People*)getValueIndexAt(arr, i)))); }}接下来就可以来测试数据了.// main.m#import <Foundation>#import "People.h"#import "Array.h"#import "Object.h"int main(int argc, const char * argv[]) {@autoreleasepool {Array *arr = newArray();People *p0 = newPeople(newString("张三"), newInteger(20));People *p1 = newPeople(newString("李四"), newInteger(16));People *p2 = newPeople(newString("王五"), newInteger(17));People *p3 = newPeople(newString("赵⼆"), newInteger(14));People *p4 = newPeople(newString("林三"), newInteger(22));People *p5 = newPeople(newString("⼩明"), newInteger(18));People *p6 = newPeople(newString("⼩红"), newInteger(25));People *p7 = newPeople(newString("⼩⽅"), newInteger(11));People *p8 = newPeople(newString("⼩花"), newInteger(19));People *p9 = newPeople(newString("⼩兔"), newInteger(22));People *p10 = newPeople(newString("新⼈"), newInteger(23));//增加元素addElement(arr, (Object *)p0);addElement(arr, (Object *)p1);addElement(arr, (Object *)p2);addElement(arr, (Object *)p3);addElement(arr, (Object *)p4);addElement(arr, (Object *)p5);addElement(arr, (Object *)p6);addElement(arr, (Object *)p7);addElement(arr, (Object *)p8);addElement(arr, (Object *)p9);//释放内存OBJECTRELEASE((Object*) p0);OBJECTRELEASE((Object*) p1);OBJECTRELEASE((Object*) p2);OBJECTRELEASE((Object*) p3);OBJECTRELEASE((Object*) p4);OBJECTRELEASE((Object*) p5);OBJECTRELEASE((Object*) p6);OBJECTRELEASE((Object*) p7);OBJECTRELEASE((Object*) p8);OBJECTRELEASE((Object*) p9);printf("增加10个元素\n");printArray(arr);printf("删除第3个元素\n");//删除第数组中某⼀个元素removeIndexAt(arr, 3);printArray(arr);printf("插⼊P10成为第4个元素\n");//插⼊insertIndexAt(arr, (Object *)p10, 4);printArray(arr);OBJECTRELEASE((Object*) p10);printf("查找第5个元素\n");//index从0开始查找第5个元素 index=4printf("位置:%d,姓名:%s,年龄:%d\n",4, getStringValue(getName((People*)getValueIndexAt(arr, 4))),getIntegerValue(getAge((People*)getValueIndexAt(arr, 4)))); //销毁数组destroyArray(arr);}return 0;}看下结果吧。
c语言实现职工管理系统
简单的职工管理系统主要实现以下功能:(1) 新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中.(2) 删除一名职工:从职工管理文件中删除一名职工对象。
(3)查询:从职工管理文件中查询符合某些条件的职工。
(4)修改:检索某个职工对象,对其某些属性进行修改。
(5)排序:按某种需要对职工对象文件进行排序。
要求:职工信息包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
实现提示:(1)由键盘输入职工对象,以文件方式保存。
程序执行时先将文件读入内存。
(2)对职工对象中的"姓名"按字典顺序进行排序。
(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。
源代码:#include〈stdio。
h〉#include<stdlib.h〉#include<string。
h>#include <locale.h〉#define I 100static char tempstr[20]; /*用于临时存储输入信息的数组*/static struct staff{int num;char name[20];char sex;long byear;//birth year 出生年月long iyear;//imploy year 工作年月char education[20];char duty[20];char address[20];char phone[20];struct staff *next;}*head=NULL,*thisn,*newn,sta[I]={0},temp; /*temp用于交换的中间量*/void cin(void); /*输入信息*/int identify(int num);/*对职工号是否重复进行验证*/void cout(void);/*输出信息*/void sort(void);/*查询排序*/void del(void); /*删除职工信息*/int record(void);/*将文件中的数据录入结构体数组中*/void iyear(int j); /*按工作年月排序*/void education(int j); /*按学历排序*/void modify(void); /*修改职工信息*/void descending(void);/*学历降序输出*/void ascending(void);/*学历升序输出*/void printmsg(int i);/*输出信息*/void seek(void);//查询员工信息int main(void){int flag=1;while(flag){system(”cls”); /*清屏*/printf(”欢迎登陆职工信息管理系统!\n”);printf(" 【1】输入职工信息【2】输出职工信息\n”);printf(”【3】信息查询排序【4】删除职工信息\n");printf(" 【5】修改职工信息【6】查询职工信息\n”);printf("请输入以上数字,选择相应的功能:");switch (getchar()){case ’1':cin();break;/*调用输入信息的函数*/case ’2’:cout();break;/*调用输出信息的函数*/case '3':sort();break; /*调用排序的函数*/case '4’:del();break; /*调用删除职工信息函数*/case '5':modify();break; /*调用修改职工信息的函数*/case '6':seek();break; //查询员工信息default:flag=0;break; /*跳出循环体,结束程序*/}}return 0;}void cin(void) /*输入信息的函数*/{FILE *fp;int receive; /*接收返回值*/if((fp=fopen("information.txt","a+"))==NULL)/*为读写打开一个文本文件*/{printf(”文件打开错误\n");exit(1); /*关闭所有文件,终止正在执行的程序,待用户检查出错误,修改后再运行*/}newn=(struct staff *)malloc(sizeof(struct staff));if(head==NULL)/*连接链表*/{head=newn;thisn=newn;thisn—>next=NULL;}else{thisn=head;while(thisn-〉next!=NULL)thisn=thisn-〉next;thisn—>next=newn;thisn=newn;}getchar(); /*接收缓冲区中选择菜单时多余的回车*/ fputc(’\n’,fp);/*每次记录信息前先换行*/printf("请输入职工号:");gets(tempstr);thisn-〉num=atoi(tempstr); /*atoi()将字符串转换成整型数*/receive=identify(thisn—>num);while(receive){printf("请输入职工号:”);gets(tempstr);thisn->num=atoi(tempstr);receive=identify(thisn->num);}fputs(tempstr,fp);fputs(" ",fp); /*信息排版的需要*/printf("请输入姓名:");gets(thisn->name);fputs(thisn->name,fp);fputs(””,fp);printf(”请输入性别(填F或M):”);thisn—〉sex=getchar();getchar();fputc(thisn-〉sex,fp);fputs(””,fp);printf("请输入出生年月(如199001):”);gets(tempstr);thisn—>byear=atoi(tempstr);fputs(tempstr,fp);fputs(" ”,fp);printf(”请输入工作年月(如199001):");gets(tempstr);thisn—>iyear=atoi(tempstr);fputs(tempstr,fp);fputs(" ",fp);printf(”请输入学历(博士、硕士、本科、大专、高中、中专、初中、小学、其他):");gets(thisn-〉education);fputs(thisn—〉education,fp);fputs(””,fp);printf(”请输入职务:”);gets(thisn->duty);fputs(thisn-〉duty,fp);fputs(" ",fp);printf(”请输入地址:");gets(thisn-〉address);fputs(thisn—>address,fp);fputs(" ",fp);printf("请输入电话号码:”);gets(thisn-〉phone);fputs(thisn-〉phone,fp);thisn—〉next=NULL;fclose(fp);system(”cls");/*清屏*/}int identify(int num)/*对职工号是否重复进行验证*/{FILE *fp;int i;if((fp=fopen("information。
C语言课程设计 职工信息管理系统 结构体数组实现程序源代码
//C语言课程设计职工信息管理系统—结构体数组实现#include <stdio.h>#include <stdlib.h>#include <string.h>struct employee{char num[10];char name[15];char sex[5];char bm[20];char zc[20];int gz;};int read_file(struct employee em[]);void menu();void write_file(struct employee em[]);void add();void select(); //查看职工所有信息void zc_query(); //按职称查询void num_del(); //按工号删除void tongji(); //统计void sort(); //排序void num_modify(); //按工号修改职工信息void save(); //保存信息void disp(); //显示职工信息void fh(); //返回主菜单struct employee em[300]; //这个数组用来保存所有的职工信息和文件里面的一致int Number=0; //记录总的职工人数也就是数组/文件里面的职工人数void menu(){printf("\t***********************************************************************\n");printf("\t* *\n");printf("\t* 职工信息管理系统_结构体数组实现*\n");printf("\t* *\n");printf("\t* [1] 增加职工信息 [2] 查看职工信息 *\n");printf("\t* [3] 查找职工信息 [4] 删除职工信息 *\n");printf("\t* [5] 统计 [6] 职工工资排列 *\n");printf("\t* [7] 修改职工信息 [8] 保存职工信息 *\n");printf("\t* [9] 显示职工信息 [0] 退出系统 *\n");printf("\t* *\n");printf("\t***********************************************************************\n");}void main(){int choose=0;FILE *fp=NULL;char yesorno;if((fp=fopen("employee1.txt","rb+"))==NULL){printf("\n=========>提示:文件不存在,是否要创建一个?(y/n)\n");scanf("%c",&yesorno);if(yesorno=='y'||yesorno=='Y'){//这里仅为了建立文件fp=fopen("employee1.txt","wb+");fclose(fp); //关闭fp所指的文件,释放文件缓冲区}elseexit(0);}else{Number=read_file(em); //要是文件已经有数据将数据初始化到数组中}system("cls");while(1){menu();printf("\t\t====>请选择:");scanf("%d",&choose);system("cls");switch(choose){case 0:exit(0); //退出break;case 1:add();fh();//增加职工信息 break;case 2:select();fh();//查看职工信息 break;case 3:zc_query();fh();// 查找break;case 4:num_del();fh();//删除break;case 5:tongji();fh();//统计break;case 6:sort();fh();//排序break;case 7:num_modify();fh();//修改后返回 break;case 8:save();fh();//保存break;case 9:disp();fh();break;//显示default:break;}fflush(stdin);getchar();system("cls");}}void save(){printf("\t=====程序在运行时已自动保存.....\n");}void fh(){printf("\t===>按Enter键返回主菜单\n");}void num_modify() //修改职工信息{FILE *fp=NULL;char gh[60];int i=0;int changeIndex=0; //changeIndex 改变标记int index=0;printf("请输入要修改的职工工号:");scanf("%s",gh);for (i=0;i<Number;i++){if (strcmp(gh,em[i].num)==0) //比较输入工号和数组中已有工号{changeIndex=i; //保存要修改的人的下标break;}}printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[changeIndex].num,em[chan geIndex].name,em[changeIndex].sex,em[changeIndex].bm,em[changeIndex]. zc,em[changeIndex].gz);printf("请重新输入该职工信息");printf("工号:");scanf("%s",em[changeIndex].num);printf("姓名:");scanf("%s",em[changeIndex].name);printf("性别:");scanf("%s",em[changeIndex].sex);printf("部门:");scanf("%d",em[changeIndex].bm);printf("职称:");scanf("%s",em[changeIndex].zc);printf("工资:");scanf("%d",&em[changeIndex].gz);//信息修改后重新更新文件里面的数据以保持数据一致性fp=fopen("employee1.txt","wb+");for (i=0;i<Number;i++){fwrite(&em[i],sizeof(struct employee),1,fp); //把ptr所指向n*size个字节输入到fp所指向的文件中}fclose(fp);printf("\t=======>修改成功\n");}void disp() //输出所有职工信息{int i=0;for (i=0;i<Number;i++){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i]. sex,em[i].bm,em[i].zc,em[i].gz);}}void sort()//排序{struct employee t;int wantNUmber=0;int i=0;int j=0;int k=0;for(i=0;i<Number-1;i++){k=i;for(j=i+1;j<Number;j++){if(em[j].gz>em[k].gz)k=j;}if(k!=i){t=em[i];em[i]=em[k];em[k]=t;}}printf("你想输出前几名职工的信息:");scanf("%d",&wantNUmber);if (wantNUmber>Number){wantNUmber=Number;}printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");for(i=0;i<wantNUmber;i++){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i].sex, em[i].bm,em[i].zc,em[i].gz);}}void tongji()//统计{int i,m,k,max,min;double sum=0.0;for(i=0;i<Number;i++){sum=sum+em[i].gz;}printf("全体职工的总工资为:%f\n",sum);printf("平均工资为:%f\n",sum/Number);i=0;m=0;max=0;max=em[m].gz;for(i=1;i<Number;i++){if (em[i].gz>max)m=i;max=em[m].gz;}printf("最高工资为:%d\n",max);printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[m].num,em[m].name,em[m]. sex,em[m].bm,em[m].zc,em[m].gz);i=0;k=0;min=0;min=em[0].gz;for(i=1;i<Number;i++){if (em[i].gz<min)k=i;min=em[k].gz;}printf("最低工资:%d\n",min);printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[k].num,em[k].name,em[k]. sex,em[k].bm,em[k].zc,em[k].gz);}void num_del()//按工号删除FILE *fp=NULL;char gh[60];int i=0;int j=0;printf("请输入要删除的职工工号:");scanf("%d",gh);for(i=0;i<Number;i++){if (strcmp(gh,em[i].num)==0) //如果查找到就删除{for (j=i;j<Number-1;j++){em[j]=em[j+1];}Number--;}}//将剩余数据写入文件重新一写的方式打开文件把以前的数据擦除了fp=fopen("employee1.dat","wb");for (i=0;i<Number;i++){fwrite(&em[i],sizeof(struct employee),1,fp);}fclose(fp);printf("删除成功;\n");}void zc_query()//按职称查找{char zc[20];int i=0;printf("请输入要查找职工职称:");scanf("%s",zc);system("cls");printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");for (i=0;i<Number;i++){if (strcmp(zc,em[i].zc)==0){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i]. sex,em[i].bm,em[i].zc,em[i].gz);}}void select()//查看职工{int i=0;printf("以下是全部职工信息\n");printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");for(i=0;i<Number;i++){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i]. sex,em[i].bm,em[i].zc,em[i].gz);}}void add()//增加职工{int numberTemp=0;int i=0;struct employee temp; //临时保存信息printf("请输入要增加职工信息的个数:");scanf("%d",&numberTemp);for(i=0;i<numberTemp;i++){printf("输入第%d个职工信息\n",i+1);printf("工号:");scanf("%s",temp.num);printf("姓名:");scanf("%s",);printf("性别:");scanf("%s",temp.sex);printf("部门:");scanf("%s",temp.bm);printf("职称:");scanf("%s",temp.zc);printf("工资:");scanf("%d",&temp.gz);em[Number++]=temp; //将刚添加的写入到数组write_file(&temp); //将刚添加的写入到文件}printf("添加成功\n");}void write_file(struct employee *em){FILE *fp=NULL;fp=fopen("employee1.txt","rb+");fwrite(em,sizeof(struct employee),1,fp);fclose(fp);}int read_file(struct employee em[]){FILE *fp=NULL;int i=0;fp=fopen("employee1.txt","rb");while(fread(&em[i],sizeof(struct employee),1,fp)) i++;fclose(fp);return i;}。
C++公司人员管理系统
C++课程设计报告公司人员管理系统姓名:班级:学号:指导教师:成绩:完成时间:完成地点:一、设计题目(问题)描述和要求1.题目:公司人员管理系统2.问题描述:某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。
现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。
要求:(1)其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
(2)程序对所有人员有提升级别的功能(3)月薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成 ,销售经理既拿固定月薪也领取销售提成。
(4)能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息二、系统分析与模块设计根据问题描述和要求,系统要求能够按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。
确定程序至少应该具备如下功能:“查询人员”、“增加人员”、“删除人员”、“数据存盘”基本模块。
系统既然具有“数据存盘”功能-人员数据可以保存到磁盘文件,那么也就意味着今后可以从磁盘文件读出人员数据,所以系统增加了“人员数据装入”模块,以方便用户使用、避免数据重复录入。
考虑到系统实现简捷,人员数据文件采用文本文件,人员数据文件名:Person.txt。
做为一个完整系统,除了具有增加人员,删除人员信息模块,还应该具有修改人员相关信息的功能,所以本系统设计时考虑增加“修改人员”模块。
考虑到根据编号查找人员信息功能在“删除人员”、“修改人员”等模块都使用,所以可以考虑设置为一个模块。
考虑到系统要求人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
这样就要求人员编号在增加人员时自动生成(增加1)且不重复。
根据这个要求,可以考虑设置一个全局量:“当前最大编号”,每增加一个人员,当前最大编号自动增1,然后新增加人员使用这个编号。
为了保证系统能记忆这个编号,可以使用一个数据文件保存当前这个编号。
C++课程设计公司人员管理系统
设计小型公司的人员信息管理系统,它涵盖了面向对象程序设计的基本方法,具有存储,查询功能,某小型公司,主要有4类人员:经理,兼职技术人员,销售经理和兼职推销员。
现在,需要存储这些人员的姓名,编号,级别,当月薪水,计算月薪总额并显示全部信息。
月薪计算方法:经理拿固定工资8000兼职技术人员按每小时100元领取月薪兼职推销月的月薪按该推销员当月销售额的4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的5%#include<iostream。
h〉#include<string。
h>class employee{protected:char *name;int individualempNo;int grade;float accumpay;static int employeeNo;public:employee();~employee();virtual void pay()=0;virtual void promote(int increment=0);virtual void displaystatus()=0;};class technician:public employee{private:float hourlyrate;int workhours;public:technician();void promote(int);void pay();void displaystatus();};class manager:virtual public employee {protected:float monthlypay;public:manager();void promote(int);void pay();void displaystatus();};class salesman:virtual public employee {protected:float commrate;float sales;public:salesman();void promote(int);void pay();void displaystatus();};class salesmanager:public manager,public salesman {public:salesmanager();void promote(int);void pay();void displaystatus();};int employee::employeeNo=1000;employee::employee(){char namestr[50];cout〈<"请输入一个雇员的姓名:”;cin〉>namestr;name=new char[strlen(namestr)+1];strcpy(name,namestr);individualempNo++;grade=1;accumpay=0.0;}employee::~employee(){delete[]name;}void employee::promote(int increment){grade+=increment;}technician::technician(){hourlyrate=100;}void technician::promote(int){employee::promote(2);}void technician::pay(){cout〈〈”请输入"〈<name〈<”本月的工作时数:";cin〉>workhours;accumpay=hourlyrate*workhours;cout<〈”兼职技术人员”<<name<〈"编号"<<individualempNo〈〈"本月工资"〈<accumpay〈〈endl;}void technician::displaystatus(){cout〈< ”兼职技术人员"〈〈name〈〈”编号"<<individualempNo〈〈"级别为"〈<grade〈<"级,已付本月工资”〈〈accumpay〈〈endl;}salesman::salesman(){commrate=0。
公司人员管理系统C++程序
公司人员管理系统实现对公司人员按姓名或者编号显示、查找、增加、删除和保存各类人员信息的操作。
具体要求及应提交的材料某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。
现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。
要求:其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
程序对所有人员有提升级别的功能薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成,销售经理既拿固定月薪也领取销售提成。
能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息在基本要求达到后,可设计出比较友好的界面(如下拉菜单),也可用VC++ ClassWizard 设计(选作)。
#include <iostream.h>#include <iomanip.h>#include <string.h>#include <fstream.h>const int Maxr=100;class Employee //职工类{int tag;//删除标记int no;//职工编号char name[20];char zw[20];//职工姓名int salary;//职工工资public:Employee(){}char *getname() {return name;}//获取名字int gettag() {return tag;}//获取标记int getno() {return no;}//获取编号int getsalary(){return salary;}void setzw(char q[])//设置名字{strcpy(zw,q);}void setname(char na[])//设置名字{strcpy(name,na);}void getsalary(int sa){salary=sa;}void delna(){tag=1;}//删除void addemp(int n,int sa,char *na,char *q)//增加{tag=0;no=n;salary=sa;strcpy(name,na);strcpy(zw,q);}void disp()//显示职工信息{cout<<"│"<<setw(10)<<no<<"│"<<setw(10)<<name<<"│"<<setw(10)<<salary<<"│"<<setw(10)<<zw<<"│"<<endl;cout<<"├—————┼—————┼—————┼—————┤"<<endl;}};class Database//职工数据类{int top;Employee read[Maxr];public:Database()//将职工信息从employee.txt读取到read[]中{ Employee s;top=-1;fstream file("employee.txt",ios::in);while (1){file.read((char *)&s,sizeof(s));if (!file) break;top++;read[top]=s;}file.close();}void clear()//删除所有{top=-1;}int addemp (int n, int sa,char *na,char*q) //增加职工{Employee *p=query(n);if (p==NULL){top++;read[top].addemp(n,sa,na,q);return 1;}return 0;}Employee *query(int empid){for (int i=0;i<=top;i++)if (read[i].getno()==empid && read[i].gettag()==0) return &read[i];return NULL;}Employee *query1(char empna[20]){for (int i=0;i<=top;i++)if ((read[i].getname()==empna) && read[i].gettag()==0) return &read[i];return NULL;}void disp() //职工信息显示{for (int i=0;i<=top;i++)read[i].disp();}void empdata();~Database() //将read[]中的信息读如到employee.txt中{fstream file("employee.txt",ios::out);for (int i=0;i<=top;i++)if (read[i].gettag()==0)file.write((char *)&read[i],sizeof(read[i]));file.close();}};void Database::empdata()//职工维护{int choice=1;int m=1;int b=1;char rname[20];int empid; int empsa;char q[20];Employee *r;while (choice!=0){cout<<"职工维护1:新增2:更改3:删除4:查找5:显示6:全删0:退出=>"; cin>>choice;switch (choice){case 1:cout<<setw(50)<<" ┌—————————————┐\n";c out<<setw(50)<<" │ 请选择您所需的操作│\n";cout<<setw(50)<<" │ 经理:1,并按回车键│\n";cout<<setw(50)<<" │ 业务经理:2,并按回车键│\n";cout<<setw(50)<<" │ 普通职工:3,并按回车键│\n";cout<<setw(50)<<" └—————————————┘\n";cin>>m;while(m!=0){switch(m){case 1:cout<<"输入经理编号:";cin>>empid;cout<<"输入奖金: ";cin>>empsa;cout<<"输入经理姓名:";cin>>rname;addemp(empid,8000+empsa,rname,"经理");break;case 2:cout<<"输入业务经理编号:";cin>>empid;cout<<"输入月提成: ";cin>>empsa;cout<<"输入业务经理姓名:";cin>>rname;addemp(empid,4000+empsa,rname,"业务经理");break;case 3:cout<<"输入职工编号:";cin>>empid;cout<<"输入工资: ";cin>>empsa;cout<<"输入职工姓名:";cin>>rname;addemp(empid,empsa,rname,"普通职工");break;}break;}break;case 2:cout<<"输入职工编号:";cin>>empid;r=query(empid);if (r==NULL){cout<<"该职工不存在"<<endl;break;}cout<<"输入新的工资:"<<endl;cin>>empsa;r->getsalary(empsa);cout<<"请输入新的职务"<<endl;cin>>q;r->setzw(q);addemp(empid,empsa,rname,q);break;case 3:cout<<"输入职工编号:";cin>>empid;r=query(empid);if (r==NULL){cout<<"该读者不存在"<<endl;break;}r->delna();break;case 4:cout<<setw(50)<<" ┌—————————————┐\n"; cout<<setw(50)<<" │ 请选择您所需的操作│\n";cout<<setw(50)<<" │ 按编号查找1,并按回车键│\n"; cout<<setw(50)<<" │ 返回2,并按回车键│\n";cout<<setw(50)<<" └—————————————┘\n"; cin>>b;while(b!=0){switch(b){case 1:cout<<"输入职工编号:";cin>>empid;r=query(empid);if (r==NULL){cout<<"该职工不存在"<<endl;break;}cout<<"├—————┼—————┼—————┼—————┤"<<endl;cout<<"│"<<setw(10)<<"编号"<<"│"<<setw(10)<<"姓名"<<"│"<<setw(10)<<"工资"<<"│"<<setw(10)<<"职务"<<"│"<<endl;cout<<"├—————┼—————┼—————┼—————┤"<<endl;r->disp();break;case 2:break;}break;}break;case 5:cout<<"├—————┼—————┼—————┼—————┤"<<endl;cout<<"│"<<setw(10)<<"编号"<<"│"<<setw(10)<<"姓名"<<"│"<<setw(10)<<"工资"<<"│"<<setw(10)<<"职务"<<"│"<<endl;cout<<"├—————┼—————┼—————┼—————┤"<<endl;disp();break;case 6:clear();break;}}}void main(){int choice=1;Database EmpDB;while(choice!=0){cout<<"********************************************************************************"<<endl;cout<<endl;cout<<endl;cout<<setw(20)<<"******************************欢迎使用职工管理系统******************************"<<endl; cout<<endl;cout<<endl;cout<<setw(50)<<" ┌—————————————┐\n"; cout<<setw(50)<<" │ 请选择您所需的操作│\n";cout<<setw(50)<<" │ │\n";cout<<setw(50)<<" │ 操作1,并按回车键│\n";cout<<setw(50)<<" │ │\n";cout<<setw(50)<<" │ 返回0,并按回车键│\n";cout<<setw(50)<<" └—————————————┘\n"; cin>>choice;switch(choice){case 1:while(1){cout<<setw(20);EmpDB.empdata();break;break;}}}}。
C、C++之动态数组的实现
C、C++之动态数组的实现C、C++之动态数组的实现本篇博客基于笔者本⼈正在学习的C++上机课程作业,主要代码由C语⾔构成。
由于C语⾔没有 string 、vector、valarray等完善的类,所以在实现动态数组时,需要⾃⾏考虑内存的分配和管理,C语⾔中,对内存管理的函数如malloc、realloc、free等被包括在 < malloc .h >头⽂件中。
关于这些函数使⽤的具体实例,可以参考这篇⽂章:具体实现时,使⽤了某些 C++ 的特有语法,如在for循环⾥定义变量,这是C语⾔不允许的,但由于现有现有编译器⼀般都同时⽀持,因此不特别注明下⾯会贴出实验课上所⽤的测试代码,针对测试代码,可以发现,实现⼀个动态数组不难,因为已经有现成的函数可以调⽤,⽽针对数组的操作较多,需要逐⼀讨论测试⽂件如下:// LibArray.cpp : 定义控制台应⽤程序的⼊⼝点。
//// 实验内容:// 1:使⽤C语⾔实现⼀个长度可扩充的数组(包含必要的数据结构及函数);// 2:要求能存放任意类型的数据(建议先实现存储整形的代码,之后改写成适应任意类型的代码);// 3:所写程序需能通过测试程序// 4:除本⽂件(测试⽂件)之外,其他⽂件(如CLibArray.cpp及CLibArray.h⽂件)、以及⼯程由同学⾃⼰建⽴。
过程中可翻书,可查看msdn。
// 实验⽬的:// 1:熟悉相关的指针操作, 复习动态内存的相关操作.// 2:理解C程序如何实现数据类型和围绕数据类型上操作的集合// 3:为未来理解类实现的数组vector做准备// 只提交CLibArray.cpp及CLibArray.h#include "stdafx.h"#include <assert.h>#include<stdlib.h>#include "CLibArray.h"int _tmain(int argc, _TCHAR* argv[]){CArray array;array_initial(array);array_recap(array, 10);assert(array_capacity(array) == 10);//////////////////////////////////////////////////////////////////////////for (int i = 0; i < 20; ++i){array_append(array, i);}assert(array_size(array) == 20);for (int i = 0; i < array_size(array); ++i){assert(array_at(array, i) == i);}//////////////////////////////////////////////////////////////////////////CArray array2, array3;array_initial(array2);array_initial(array3);array_copy(array, array2);assert(array_compare(array, array2) == true);array_copy(array, array3);assert(array_compare(array, array3) == true);//////////////////////////////////////////////////////////////////////////array_insert(array2, 2, 3);assert(array_compare(array, array2) == false);//////////////////////////////////////////////////////////////////////////array_at(array3, 2) = 5;assert(array_compare(array, array3) == false);//////////////////////////////////////////////////////////////////////////array_destroy(array);array_destroy(array2);array_destroy(array3);return 0;}可以看出,⾸先要确定 CArray 的具体类型,以 int 型为例,动态数组具有可变的容量(capacity,已分配空间)和实际⼤⼩(size,已使⽤的空间),⽽malloc等函数的参数要求都是指针,因此,可以把 CArray 定义为结构体:// defination of CArraytypedef struct CArray{int* arrayhead;int size;int capacity;}CArray;注意,在结构体中(c++中,结构体可以看做是简单的类),是不允许初始化普通成员的,因为上述代码只是给出此类型的定义,⽽没有定义实际的变量。
C++课程设计员工管理系统
cin>>num1;
switch (num1) //用 switch 语句控制函数跳转
{
case 1:insert ();break;
case 2:average ();break;
case 3:number ();break;
case 4:check ();break;
case 5:information ();break;
5. 各操作截图
--------------------------------------------------------------5~7
6. 调试过程中出现的问题及解决方案
-----------------------------------------------------------------8
{
cout<<"编号为"<<Inf[i].NO<<endl;
cout<<"姓名为"<<Inf[i].Name<<endl;
cout<<"年龄为"<<Inf[i].Age<<endl;
4
"<<'\n';
北京工商大学课程设计报告
cout<<"性别为"<<Inf[i].Sex<<endl; } } }
VC++制作一个人事管理系统--教职工管理系统(DOC 23页)
VC++制作一个人事管理系统——教职工管理系统关键词:VC++应用程序向导增加对话框资源 ADODC控件 DataGrid控件对话框切换2.1系统设计的目的和意义人事管理系统是公司或学校或其他的事业单位用来统一管理人员的软件,下面我就一学校的教职工管理系统为例。
学校职工查询是学校管理中需要经常处理的一项工作,我的毕业设计结合一个简化的学校教职工管理系统的制作,介绍如何利用VC++的应用程序向导制作应用程序。
该系统的制作涉及一个数据库、两个数据表及其相关的对话框的制作开发,涉及在工程中增加对话框、调用对话框的方法以及应用程序向导的使用方法。
最重要的是,在我的毕业设计中,我将介绍一种新的数据源引用方法,即使用ADODC控件引用数据源并制作应用系统的方法。
我的毕业设计程序是简单的,但方法是重要的。
2.2系统功能设计本系统具有—般系统的数据处理功能,如数据录入、增加、修改、删除等。
2.3数据库与数据表的设计本系统将首先创建一个职工信息数据库,并在它之中创建两个数据表,一个是“职工信息数据表”,—个是“职工工资信息表”。
在我的毕业设计当中,我仅用Microsoft Access 2003创建教职工管理数据库及其数据表。
2.3.1利用Microsoft Access 2003创建教职工管理数据库及其数据表微软公司的许多产品所支持的数据库结构与数据库驱动器类型均是通用的,因此,用户往往可以借助于相关的工具创建数据库与数据表,这里我介绍采用Microsoft Access 2003创建数据库及其数据表的方法。
先定义职工信息数据表的结构,如表2.1所示,它专门用于记录教职工的基本情况。
表2.1职工信息数据表的结构简历备注默认是职工工资情况表的结构定义如表2.2所示,注意,这是一个简化了的职工工资数据表,因为工资表往往比较复杂,而且不同的单位工资表结构也有所不同.我不可能定义一个“万能”的工资表结构,只能创建一个具有示范意义的工资数据表结构。
c“加”“加”动态数组加无限内存人员管理系统
“信息与计算科学”专业《C++语言程序设计》课程设计班级计算科学XX学号指导教师设计日期2016·春·19周~20周(一)、设计菜单选择程序。
菜单是应用程序的界面,通过控制语句改变程序执行的顺序,设计菜单是程序设计的基础。
本设计分两步:第一步:设计一个菜单程序。
1.菜单内容:程序运行后,给出3个菜单项的内容和输入提示,如下:1)利用克莱姆法则求解线性方程组2)统计一篇英文文章的单词数3)退出程序第二步:为上述菜单项配上相应的功能。
2.程序优缺点:优点:采用了动态开辟二维数组,传递不知道大小的二维数组,程序规X,可读性强。
缺点:采用递归算法,增加了程序的时间复杂度。
3.代码段:#include<iostream>#include<string>#include <stdlib.h>#include<windows.h>using namespace std;double **open_up(int row,int line);double Price(int row,int line,double *a);void Head();void Cramer();void Statis_Words();int main(){char ch; // 选择变量while(1){Head();cout<<"\t\t选择要进行的程序:"<<endl;ch = cin.get();cout<<endl;switch(ch){case '1':system("cls");Cramer();break;case '2':system("cls");Statis_Words();break;case '3':system("cls"); cout << " 退出程序" << endl; exit(0);break;default :system("cls");cout<<"\t\t 输入有误"<<endl;}cin.get();}return 0;}void Head(){cout<<"\t\t 菜单选择程序"<<endl;cout<<"\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 "<<endl;cout<<"\t\t "<<endl; }void Cramer(){int m = 0,n = 0,i = 0,k = 0,j = 0,h = 0;double Quit = 0.0,l = 0.0;double **a = open_up(15,15); //动态开辟二维数组double **e = open_up(15,15); //动态开辟二维数组double **T = open_up(15,15); //动态开辟二维数组double **W = open_up(15,15); //动态开辟二维数组double P[15] = {0.0},d[15] = {0.0};cout << "\t\t克莱姆法则计算矩阵的值" << endl; cout << "输入所求线性方程组的系数矩阵";cout << "输入行数m和列数n" << endl;cin >> m >> n;cout<<"输入矩阵"<<endl;for(i = 0;i < m;i++){for(j = 0;j < n;j++){cin >> a[i][j];}}cout<<endl;Quit = Price(n,n,(double *)a);cout << "系数矩阵的值为:"<<Quit<<endl;cout<<"输入方程组的解矩阵"<<endl;for(i = 0;i < n;i++){cin >> d[i];}for(i = 0;i < m;i++)for(j = 0;j < n;j++){e[i][j] = a[i][j];}}for(j = 0;j < n;j++){for(i = 0;i < m;i++){a[i][j] = d[i];}for(i = 0;i < m;i++){P[j] = Price(n,n,(double*)a)/Quit; //强制类型转换}cout << "x[" << j << "]=" << P[j] <<endl;for(h = 0;h < m;h++) //重置矩阵{a[h][j] = e[h][j];}}}void Statis_Words(){char ch = '\0';int count = 0,word = 0;cout<<"输入一片英语文章以零结尾\n "<<endl;while ( (ch = cin.get()) != '0' )if((ch >= 0 && ch <= 64) || (ch >= 91 && ch <= 96) || (ch > 122 && ch < 127)) //判断是否为{word = 0;}else{if(0 == word){word = 1;count++;}}}cout<<"文章一共有"<<count<<"个单词"<<endl;}double Price(int row,int line,double *a)//求矩阵行列式的递归函数{int i = 0,j = 0,c = 0,p = 0,q = 0;double sum = 0;double **ele = open_up(row,line);//动态开辟二维数组if(row == 1){return *a;}for(i = 0;i < row;i++) //递归法求解行列式的值{for(c = 0;c < row;c++){if(c < i){p=0;}else{p=1;}for(j = 0;j < row - 1;j++){ele[c][j] = *( a+row*(c+p) + (j+1) );}}if(i % 2 == 0){q = 1;}else{q = -1;}sum += *(a+i*row+0) * q * Price(row-1,row-1,(double *)ele); }return sum;}double **open_up(int row,int line) // 动态开辟二维数组double **ele = new double *[row];for (int i = 0; i < row; i++){ele[i] = new double[line];}return ele;}4.程序运行截图:(二)、有理数的四则运算。
职工管理系统代码解释
#include<stdio.h>//printf,scanf输出,输入的头文件#include<string.h>//strcpy(),strcmp()字符串函数的头文件#include<malloc.h>#include<stdlib.h>//malloc函数的头文件<sdtlib.h>包含<malloc.h>#define ALLMAX 100typedef struct Node//定义一个结构体来表示链表的节点{int chusheng,gongzuo,dianhua;char sex,name[ALLMAX],xueli[ALLMAX],zhiwu[ALLMAX],zhuzhi[ALLMAX]; struct Node *next;}SLNode;typedef struct{/*定义一个结构体来表示基本员工的基本信息,和链表节点的结构体,有所不同比链表的结构体少了一个指向Node结构体指针变量*/int chusheng,gongzuo,dianhua;char name[ALLMAX],sex,xueli[ALLMAX],zhiwu[ALLMAX],zhuzhi[ALLMAX];}DataType;void ListInitiate(SLNode **head){//开辟一个SLNode大小的空间,来初始化链表头指针,并让next指向nullif((*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);//然后把X里的信息赋值给q链表节点q->chusheng=x.chusheng; q->gongzuo=x.gongzuo;q->dianhua=x.dianhua; strcpy(q->name,);q->sex=x.sex; strcpy(q->xueli,x.xueli);strcpy(q->zhiwu,x.zhiwu); strcpy(q->zhuzhi,x.zhuzhi);//strcpy(a1,a2)函数的功能是把a2字符的值赋值给a1if(head->next==NULL){//如果只有头节点,而没有其他的节点,则将q节点插入到头节点后head->next=q;head->next->next=NULL;}else{//如果有其他节点元素for(;p;p=p->next){//不断向后查找,当前面节点name值小于数据X里name值并且后面的节点name值大于数据X里name值的时候插入if(p->next!=NULL){if(strcmp(p->name,)<0&&strcmp(p->next->name,)>0){/*strcmp(a1,a2)函数的功能是比较a1,a2字符的值,若a1=a2,则返回值为若a1>a2,则返回一个正值,,若a1<a2,则返回一个负值*/s=p->next;p->next=q;q->next=s;break;}}else if(strcmp(p->name,)<0&&p->next==NULL){//不断先后查找,当找到最后一个节点的时候,并且前面所有的name值都小于数据X里name值,把节点插入到链表最后p->next=q;q->next=NULL;break;}if(strcmp(p->name,)>0){//后面所以节点name的值都比数据X里name值大,就把节点插入后指针后,即所以链表节点前s=head->next;head->next=q;q->next=s;break;}}}//return head;}void ListDelete(SLNode *head){//此函数的功能是删除链表中特定的节点,以职员name为关键字SLNode *p,*s;char x[20];s=head;p=head->next;if(head->next==NULL){//当链表中无节点时,给出提示信息printf("名单中无职工信息,无须删除!\n");return;}printf("请输入要删除职工的姓名:\n");//获得要删除的节点的name的值scanf("%s",x);for(p;p;p=p->next){//然后不断的往后找,知道节点里的name的值,等于输入的name的值的时候,就退出此for循环,,用break语句if(strcmp(p->name,x)==0){//找到后,要删除节点的前面节点指向要删除节点的后面节点s->next=p->next;free(p);//然后释放要删除节点的内存空间printf("删除成功!请继续操作!\n");//break,退出for循环break;}s=p;}if(p==NULL){//如果没有找到要删除的节点,则提示信息printf("名单中无职工信息,无须删除!\n");}}void Listxiugai(SLNode *head){//此函数为修改指定的节点,以职员name为关键字,DataType x;SLNode *p;p=head->next;if(p==NULL){//当链表中无节点时,给出提示信息printf("职工名单无职工信息,无须修改!\n");return;}printf("请输入要修改的职工姓名:\n");//获得要修改的节点的name的值scanf("%s",);printf("依次写入该职工的信息:\n");for(;p;p=p->next){//不断往后找,直到找到要修改的节点,让后通过scanf获得用户重新输入的各属性值,再重新赋值给要修改的节点Pif(strcmp(,p->name)==0){scanf("%s %c %d %d %s %s %s %d",p->name,&p->sex,&p->chusheng,&p->gongzuo,p->xueli,p->zhiwu,p ->zhuzhi,&p->dianhua);break;}}if(p==NULL)//如果没有找到要修改的节点,则提示信息printf("此职工不存在,无法修改其信息!\n");printf("修改成功!请继续操作!\n");}void put(SLNode *head,FILE *fp){//此函数的功能是将,链表中节点的值,打印到worker.txt文件中SLNode *p;//打开要输入信息的文件if((fp=fopen("worker.txt","w"))==NULL){//如果没有打开,则提示错误信息printf("无法打开‘worker.txt’!\n");exit(0);}for(p=head->next;p;p=p->next){//通过for循环,不断的将链表节点信息输入到文件中fprintf(fp,"%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhi wu,p->zhuzhi,p->dianhua);}//输入信息成功后,关闭打开的文件if(fclose(fp)){//如果关闭失败,则提示错误信息printf("无法关闭‘worker.txt’!\n"); exit(0);}}void Listfind(SLNode head){//此函数的功能是,寻找特定职员的信息int i;SLNode *p;DataType x;if(head.next==NULL){//如果没有链表节点,则提示信息printf("名单中无职工信息,无法查询!\n");return;}//打印出一段字符,提示用户,输入不同的数字,来执行不同的操作printf("0.退出查询系统,回到主菜单\n1.对姓名进行查询\n2.对出生年月进行查询\n3.对工作年月进行查询\n4.对学历进行查询\n5.对职务进行查询\n6.对住址进行查询\n7.对电话号码进行查询\n");for(;;){//一个空的for循环,来不断的接受用户的查询,当用户输入时,在通过break语句退出此for循环//得到用户要操作的数字,通过这个数字的不同来执行不同的查询操作scanf("%d",&i);if(i==0)//如果用户输入,则退出for循环,也就是退出查询break;if(i==1){//输入,按姓名查询p=head.next;printf("请输入姓名:");scanf("%s",);i=0;for(p;p;p=p->next){//通过用户输入的name值,来查询链表各节点中name的值,如相同,则打印到屏幕上if(strcmp(p->name,)==0){++i;//设置一个i值,来判断,有木有查询到所要查询的员工信息printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p ->zhuzhi,p->dianhua);}}if(i==0)//i=0,说明没有查询到要查询的员工信息,则提示信息printf("职工名单中不存在此人!\n");//否则说明,查询成功,即给出提示信息else printf("查询成功!请继续操作!\n");}/*下面的程序和上面的程序一样,只是通过获得不同的i值,来通过不同的关键字来查询,当i=1.对姓名进行查询i=2.对出生年月进行查询i=3.对工作年月进行查询i=4.对学历进行查询i=5.对职务进行查询 i=6.对住址进行查询i=7.对电话号码进行查询,,,所以,下面的程序就不解释啦*/if(i==2){p=head.next;printf("请输入出生年月:");scanf("%d",&x.chusheng);i=0;for(p;p;p=p->next){if(p->chusheng==x.chusheng){++i;printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p->zhuzhi,p->dianhua);}}if(i==0)printf("职工名单中没有这个时间出生的!\n");else printf("查询成功!请继续操作!\n");}if(i==3){p=head.next;printf("请输入工作年月:");scanf("%d",&x.gongzuo);i=0;for(p;p;p=p->next){if(p->gongzuo==x.gongzuo){++i;printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p ->zhuzhi,p->dianhua);}}if(i==0)printf("职工名单中没有这个时间工作的!\n");else printf("查询成功!请继续操作!\n");}if(i==4){p=head.next;printf("请输入学历:");scanf("%s",x.xueli);i=0;for(p;p;p=p->next){if(strcmp(p->xueli,x.xueli)==0){++i;printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p ->zhuzhi,p->dianhua);}}if(i==0)printf("职工名单中没有这种学历的!\n");else printf("查询成功!请继续操作!\n");}if(i==5){p=head.next;printf("请输入职务:");scanf("%s",x.zhiwu);i=0;for(p;p;p=p->next){if(strcmp(p->zhiwu,x.zhiwu)==0){++i;printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p ->zhuzhi,p->dianhua);}}if(i==0)printf("职工名单中没有这种职务的!\n");else printf("查询成功!请继续操作!\n");}if(i==6){p=head.next;printf("请输入住址:");scanf("%s",x.zhuzhi);i=0;for(p;p;p=p->next){if(strcmp(p->zhuzhi,x.zhuzhi)==0){++i;printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p ->zhuzhi,p->dianhua);}}if(i==0)printf("职工名单中没有住这的!\n");else printf("查询成功!请继续操作!\n");}if(i==7){p=head.next;printf("请输入电话:");scanf("%d",&x.dianhua);i=0;for(p;p;p=p->next){if(p->dianhua==x.dianhua){++i;printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p ->zhuzhi,p->dianhua);}}if(i==0)printf("职工名单中没人用这个号码!\n");else printf("查询成功!请继续操作!\n");}//如果用户输入i的值,不是我们提示的值,则给出用户错误信息,并让用户重新输入if(i!=0 && i!=1 && i!=2 && i!=3 && i!=4 && i!=5 && i!=6 && i!=7)printf("输入出错!请再次输入!\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->chusheng,p->gongzuo,p->xueli,p->zhiwu,p ->zhuzhi,p->dianhua);}void Listpaixu(SLNode *head){//此函数,是对职员信息来排序,,int i,n=0,m,flag=1;SLNode *p,*q,*s;if(head->next==NULL){printf("名单中无职工信息,无法排序!\n");return;}printf("0.退出排序系统,回到主菜单\n1.对性别进行排序\n2.对出生年月进行排序\n3.对工作年月进行排序\n");for(;;){scanf("%d",&i);if(i==0)break;//通过用户输入值的不同,来对节点不同的信息进行排序if(i==1){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->sex>q->sex){//如果前面节点sex大于后面的sex,则交换二节点的位置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");//排序成功后,打印出排序好的职员信息,通过调用print()函数来实现print(head);}/*下面的程序和上面的程序一样,只是通过获得不同的i值,来通过不同的关键字来排序,所以,下面的程序就不解释啦*/if(i==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->chusheng>q->chusheng){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");print(head);}if(i==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->gongzuo>q->gongzuo){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");print(head);}if(i!=0&&i!=1&&i!=2&&i!=3)printf("输入出错!请再次输入!\n");}}void main(){//main函数,程序执行的入口DataType x;//定义一个DataType结构体SLNode *head;//定义一个链表的头节点int i,n;FILE *fp;//定义一个文件指针ListInitiate(&head);//初始化链表printf("请输入职工人数n:");//提示用户输入员工的人数,来控制总的员工信息scanf("%d",&n);//获得用户输入的员工的数目值printf("请输入职工信息:姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");//提示,用户输入那些员工信息for(i=0;i<n;i++){//不断获得n个员工的信息scanf("%s %c %d %d %s %s %s %d",,&x.sex,&x.chusheng,&x.gongzuo,x.xueli,x.zhiwu,x.zhuzh i,&x.dianhua);//并将这些员工信息插入到所建的链表中head=ListInsert(head,x);}//打开要存放数据的文件if((fp=fopen("worker.txt","w"))==NULL){printf("无法打开‘worker.txt’!\n");exit(0);}//把链表中用户输入的信息,放入worker.txt文件中put(head,fp);if(fclose(fp)){printf("无法关闭‘worker.txt’!\n"); exit(0);}//打印出本系统的功能,即通过用户输入的不同的值来执行不同的操作printf("0.结束系统\n1.新增一名职工\n2.删除一名职工\n3.查询职工信息\n4.修改职工信息\n5.对职工信息进行排序\n");for(;;){scanf("%d",&i);if(i==0)break;if(i==1){//增加员工信息printf("请输入职工信息:姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");scanf("%s %c %d %d %s %s %s %d",,&x.sex,&x.chusheng,&x.gongzuo,x.xueli,x.zhiwu,x.zhuzh i,&x.dianhua);head=ListInsert(head,x);printf("新增成功!请继续操作!\n");//增加成功后,把新的链表的信息重新打印到文件中put(head,fp);}if(i==2){//删除员工信息ListDelete(head);if((fp=fopen("worker.txt","w"))==NULL){//打开文件失败,给出提示信息printf("无法打开‘worker.txt’!\n");exit(0);}//删除成功后,把新的链表的信息重新打印到文件中put(head,fp);if(fclose(fp)){printf("无法关闭‘worker.txt’!\n"); exit(0);}}if(i==3)//查找员工信息Listfind(*head);if(i==4){//修改员工信息Listxiugai(head);if((fp=fopen("worker.txt","w"))==NULL){printf("无法打开‘worker.txt’!\n");exit(0);}//修改成功后,把新的链表的信息重新打印到文件中put(head,fp);if(fclose(fp)){printf("无法关闭‘worker.txt’!\n"); exit(0); }}if(i==5){//排序员工信息SLNode *p=head;Listpaixu(p);}if(i!=0 && i!=1 && i!=2 && i!=3 && i!=4 && i!=5) //用户输入的值,不符合要求,则给出提示信息printf("输入出错!请再次输入!\n");}}。
C++实现职工管理系统
C++实现职⼯管理系统本⽂实例为⼤家分享了C++实现职⼯管理系统的具体代码,供⼤家参考,具体内容如下workermanager.h#pragma once//防⽌头⽂件重复包含#include <iostream>#include "worker.h"using namespace std;#include "boss.h"#include "employee.h"#include "manager.h"#include <fstream>#define FILENAME "empFile.txt"class WorkerManager{public:WorkerManager();void Show_Menu();//菜单功能void ExitSystem();//退出功能int m_EmpNum;//记录职⼯⼈数Worker ** m_EmpArray;//职⼯数组指针void Add_Emp();//添加职⼯void Del_Emp();//删除职⼯void Find_Emp();//查找职⼯void Mod_Emp();//修改职⼯void Show_Emp();//显⽰职⼯void Sort_Emp();//排序void Clean_File();int IsExist(int id);//按照职⼯编号判断职⼯是否存在,存在返回职⼯在数组中的位置,不存在返回-1void save();//保存⽂件bool m_FileIsEmpty;//判断⽂件是否为空,标志int get_EmpNum();//统计⼈数void init_Emp();//初始化元员⼯~WorkerManager();};worker.h#pragma once//防⽌头⽂件重复包含#include <iostream>#include <string>using namespace std;class Worker//职⼯抽象类{public://显⽰个⼈信息virtual void showInfo() = 0;//获取岗位名称virtual string getDeptName() = 0;int m_Id;//职⼯编号string m_Name;//职⼯姓名int m_DeptId;//职⼯所在部门的编号};employee.h#pragma once#include <iostream>using namespace std;#include "worker.h"class Employee :public Worker{public://构造函数Employee(int id, string name, int dId); //显⽰个⼈信息virtual void showInfo();//获取岗位信息virtual string getDeptName();};manager.h#pragma once#include <iostream>using namespace std;#include "worker.h"class Manager :public Worker{public://构造函数Manager (int id, string name, int dId); //显⽰个⼈信息virtual void showInfo();//获取岗位信息virtual string getDeptName();};boss.h#pragma once#include <iostream>using namespace std;#include "worker.h"class Boss :public Worker{public:Boss(int id, string name, int dId);virtual void showInfo();virtual string getDeptName();};职⼯管理系统.cpp#include <iostream>using namespace std;#include "WorkerManager.h"#include "worker.h"#include "employee.h"int main(){WorkerManager wm;//实例化管理对象 int choice = 0;//存储⽤户while (true){//显⽰菜单wm.Show_Menu();cout << "请输⼊你的选择:" << endl; cin >> choice;switch (choice){case 0://退出系统wm.ExitSystem();break;case 1://增加职⼯wm.Add_Emp();break;case 2://删除职⼯wm.Del_Emp();break;case 3://查找职⼯wm.Find_Emp();break;case 4://修改职⼯wm.Mod_Emp();break;case 5://显⽰职⼯wm.Show_Emp();break;case 6://排序职⼯wm.Sort_Emp();break;case 7://清空⽂档wm.Clean_File();system("cls");break;}}system("pause");return 0;}workermanager.cpp#pragma once//防⽌头⽂件重复包含#include <iostream>#include "worker.h"using namespace std;#include "boss.h"#include "employee.h"#include "manager.h"#include <fstream>#define FILENAME "empFile.txt" class WorkerManager{public:WorkerManager();void Show_Menu();//菜单功能void ExitSystem();//退出功能int m_EmpNum;//记录职⼯⼈数Worker ** m_EmpArray;//职⼯数组指针void Add_Emp();//添加职⼯void Del_Emp();//删除职⼯void Find_Emp();//查找职⼯void Mod_Emp();//修改职⼯void Show_Emp();//显⽰职⼯void Sort_Emp();//排序void Clean_File();int IsExist(int id);//按照职⼯编号判断职⼯是否存在,存在返回职⼯在数组中的位置,不存在返回-1 void save();//保存⽂件bool m_FileIsEmpty;//判断⽂件是否为空,标志int get_EmpNum();//统计⼈数void init_Emp();//初始化元员⼯~WorkerManager();};employee.cpp#include "employee.h"Employee::Employee(int id, string name, int dId){this->m_Id = id;this->m_Name = name;this->m_DeptId = dId;}void Employee::showInfo(){cout << "职⼯编号:" << this->m_Id<< "\t职⼯姓名:" << this->m_Name<< "\t岗位:" << getDeptName()<< "\t岗位职责:完成经理交给的任务" << endl;}string Employee::getDeptName(){return string("员⼯");}manager.cpp#include "manager.h"Manager::Manager(int id, string name, int dId){this->m_Id = id;this->m_Name = name;this->m_DeptId = dId;}void Manager::showInfo(){cout << "职⼯编号:" << this->m_Id<< "\t职⼯姓名:" << this->m_Name<< "\t岗位:" << getDeptName()<< "\t岗位职责:完成⽼板布置的任务并下发给员⼯" << endl;}string Manager::getDeptName(){return string("经理");}boss.cpp#include "boss.h"Boss::Boss(int id, string name, int dId){this->m_Id = id;this->m_Name = name;this->m_DeptId = dId;}void Boss::showInfo(){cout << "\t职⼯编号:" << this->m_Id<< "\t职⼯姓名:" << this->m_Name<< "\t岗位:" << getDeptName()<< "\t岗位职责:管理整个公司" << endl;}string Boss::getDeptName(){return string ("⽼板");}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
c语言课程设计之人事管理系统
C语言课程设计之人事管理系统简介人事管理系统是一种用于管理组织内人员信息和管理人力资源的系统。
在本文档中,我们将介绍一个使用C语言编写的简单人事管理系统。
该系统可以实现员工信息的添加、删除、修改和查询,以及一些基本的人事管理功能。
功能模块1. 员工信息管理模块•添加员工信息:包括姓名、工号、职位、部门等基本信息。
•删除员工信息:根据工号删除指定员工的信息。
•修改员工信息:根据工号修改指定员工的信息。
•查询员工信息:可以根据姓名、工号等条件查询员工的信息。
2. 薪资管理模块•发放工资:根据员工的工作时长、加班情况等计算工资并发放。
•调整薪资:可以根据员工表现调整薪资水平。
3. 考勤管理模块•打卡记录:记录员工的上下班打卡情况。
•考勤统计:统计员工的出勤情况,包括迟到、早退、旷工等信息。
系统设计1. 数据结构•员工信息结构体:包括姓名、工号、职位、部门等信息。
•薪资结构体:包括基本工资、加班工资等信息。
•考勤记录结构体:包括打卡时间、出勤情况等信息。
2. 功能实现•员工信息管理:使用链表或数组存储员工信息,实现增删改查操作。
•薪资管理:根据员工的工作情况计算薪资并更新薪资信息。
•考勤管理:记录员工的打卡信息并统计考勤情况。
系统实现1. 界面设计•采用控制台界面,通过菜单选择实现各项功能。
•显示员工信息列表、薪资管理界面和考勤记录界面。
2. 代码实现•使用C语言实现各个功能模块,包括管理员工信息、计算薪资、记录考勤等。
•采用函数封装、模块化设计,提高代码的可读性和可维护性。
测试与验证1. 单元测试•对每个功能模块进行单元测试,确保功能的正确性。
•模拟各种情况,包括正常情况和异常情况。
2. 系统测试•综合测试所有功能模块,验证系统的完整性和稳定性。
•模拟真实使用情况,检查系统的性能和可靠性。
总结通过本文档的介绍,我们了解了一个简单的C语言编写的人事管理系统的设计思路和实现方法。
人事管理系统是组织管理中的重要系统之一,对于提高工作效率和管理人力资源具有重要意义。
C++实现动态数组功能
C++实现动态数组功能数组数组是⼀种线性表数据结构。
它⽤⼀组连续内存空间,来存储⼀组具有相同数据类型数据。
1.线性表:数据存储像⼀条线⼀样的结构,每个线性表上的数据最多只有前和后的两个⽅向,如数组、链表、队列、栈等都是这种结构,所以实现的数组的动态操作,其他结构也可轻易的类似实现。
更重要的是,在这之后看源码就可⼤⼤降低难度。
(博主⾃⼰看的是STL源码剖析)2.⾮线性表:如⼆叉树、堆、图等。
3连续内存空间和相同数据类型:当数组作插⼊、删除操作时,为了保证数据的连续性,往往需要做⼤量的数据搬移⼯作,效率很低。
动态数组功能实现1.数组初始化考虑到扩容时数据搬移可能会发⽣的内存泄露,博主这⾥采⽤两只⼿的原则,即设定⼀个内存标志位 ItemsFlag 。
当ItemsFlag = 0,using preitems;当 ItemsFlag = 1,using items。
下⽂扩容部分有具体实现。
默认数组容量10。
enum { MAX = 10 };explicit GenericArray(int ss = MAX);template<class T>GenericArray<T>::GenericArray(int ss) : capacity(ss),counts(0){itemsFlag = 0;preitems = new T[capacity];items = nullptr;}2.析构函数释放内存。
template<class T>GenericArray<T>::~GenericArray(){if (preitems != nullptr)delete[]preitems;if (items != nullptr)delete[]items;}3.检查下标检查要操作的下标是否在数组容量范围内。
template<class T>bool GenericArray<T>::checkIndex(int index){if (index < 0 || index >= capacity){int cap = capacity - 1;cout << "Out of the range! Please ensure the index bein 0 ~ " << cap << '\n';return false;}return true;}4.获取元素数⽬和容量、判断数组空和满int count()const { return counts; }int getCapacity()const { return capacity; }bool isEmpty()const { return counts == 0; }bool isFull()const { return counts >= capacity; }5.取索引对应值、按索引修改值、打印输出、是否包含某值template<class T>T GenericArray<T>::get(int index)return preitems[index];elsereturn items[index];}void GenericArray<T>::set(int index, T elem){if(checkIndex(index)){if (!itemsFlag)preitems[index] = elem;elseitems[index] = elem;return;}}template<class T>void GenericArray<T>::printArray()const{for (int i = 0; i < counts; i++)if (!itemsFlag)cout << preitems[i] << '\t';elsecout << items[i] << '\t';cout << '\n';return;}template<class T>bool GenericArray<T>::contains(T arr){for (int i = counts - 1; i >= 0; i--)if (!itemsFlag){if (arr == preitems[i])return true;}else{if (arr == items[i])return true;}return false;}6.查找某值下标、删除某值查找某值的下标时,要考虑到该值在数组中是否重复,所以博主⽤了⼀个结构体 findArrIndex 来存储该值重复的次数和对应的下标。
员工信息管理系统c语言
员工信息管理系统c语言员工信息管理系统是一个使用C语言编写的程序,旨在帮助企业或组织管理员工的相关信息。
这个系统可以有效地记录和管理员工的基本信息、职位、工资、考勤等。
它能够提供一种便捷、高效的方式来管理员工信息,提高工作效率和准确性。
以下是一个简单的员工信息管理系统的参考代码,以展示一些基本功能:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_EMPLOYEES 100struct Employee {char name[50];int id;char position[50];float salary;};struct Employee employees[MAX_EMPLOYEES];int numEmployees = 0;void addEmployee() {if (numEmployees >= MAX_EMPLOYEES) {printf("无法添加新员工,员工数量已达上限。
\n");return;}struct Employee newEmployee;printf("请输入员工姓名: ");scanf("%s", );printf("请输入员工编号: ");scanf("%d", &newEmployee.id);printf("请输入员工职位: ");scanf("%s", newEmployee.position);printf("请输入员工工资: ");scanf("%f", &newEmployee.salary);employees[numEmployees++] = newEmployee;printf("员工添加成功!\n");}void searchEmployee() {char name[50];printf("请输入要查询的员工姓名: ");scanf("%s", name);int found = 0;for (int i = 0; i < numEmployees; i++) {if (strcmp(employees[i].name, name) == 0) {printf("员工姓名: %s\n", employees[i].name); printf("员工编号: %d\n", employees[i].id);printf("员工职位: %s\n", employees[i].position); printf("员工工资: %.2f\n", employees[i].salary);found = 1;break;}}if (!found) {printf("未找到该员工!\n");}}void printAllEmployees() {if (numEmployees == 0) {printf("没有员工信息可打印。
C语言职工管理系统源代码及运行截图(简单版)
#include<stdio.h>#include<string.h>#define N 100typedef struct worker{char name[20];long number;int y,m,d;char zhicheng[20];char bumen[20];float salary;}Worker;void Display(){printf("\n\n\n\t\t***************职工管理系统*************\n\n");printf("\t\t\t0.退\t\t 出\n");printf("\t\t\t1.新\t\t 建\n");printf("\t\t\t2.显\t\t 示\n");printf("\t\t\t3.查\t\t 询\n");printf("\t\t\t4.删\t\t 除\n\n");}/*******1.新建**********/void Add( Worker w[],int n){int i;printf("\t姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");for(i=0;i< n;i++){printf("员工%d: ",i+1);scanf("%s %ld %d %d %d %s %s %f",w[i].name,&w[i].number, &w[i].y,&w[i].m,&w[i].d,w[i].zhicheng,w[i].bumen,&w[i].salary);}}/*******2.显示**********/void Browse( Worker w[],int n ){int i;printf("\t姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");for(i=0;i< n;i++){printf("员工%d:",i+1);printf("%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i].m, w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);}}/*******3.1查询姓名**********/void SearchName( Worker w[],int n ){char name[20];int i;printf("\t\t\t输入要查询的名字:");scanf("%s",name);for( i = 0; i < n; i ++ ){if( strcmp( w[i].name,name ) == 0 ){printf("\n\t\t\t查得信息如下:\n\n");printf("姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");printf("%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i].m,w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);return;}}printf("\t\t\t查无此人!");}/*******3.2查询工号**********/void SearchNumber( Worker w[],int n ){long number;int i,k=0;printf("\t\t\t输入要查询的工号:");scanf("%ld",&number);for( i = 0; i < n; i ++ ){if( w[i].number == number ){printf("\n\t\t\t查得信息如下:\n\n");printf("姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");printf("%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i].m, w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);return;}}printf("\n\t\t\t查无此人!");}/*******3.查询**********/void Search( Worker w[],int n ){int x;printf("\t\t\t选择查询方式(1.姓名/2.工号):");scanf("%d",&x);printf("\n");switch(x){case 1:SearchName(w,n);break;case 2:SearchNumber(w,n);break;}}/*******4.删除**********/void Delete( Worker w[],int n ){char name[20];int i,j;printf("\t\t\t输入要删除的名字:");scanf("%s",name);printf("\n");for( i = 0; i < n; i ++ ){if( strcmp( w[i].name,name ) == 0 ){printf("\t\t\t将删除以下信息:\n\n");printf("\t姓名\t工号\t进场时间\t职称\t部门\t工资\n\n");printf("\t%s\t%ld\t%d-%d-%d\t%s\t%s\t%f\n\n",w[i].name,w[i].number,w[i].y,w[i]. m,w[i].d,w[i].zhicheng,w[i].bumen,w[i].salary);for( j = i;j<n-1;j++ ){w[j] = w[j+1];}printf("\t\t\t成功删除!\n\n");return;}}printf("\t\t\t查无此人!");}void Run( Worker w[],int n ){int choice;do{Display();printf("\t\t\t输入你的选择:");scanf("%d",&choice);printf("\n");switch( choice ){case 0:break;case 1:Add(w,n);break;case 2:Browse(w,n);break;case 3:Search(w,n);break;case 4:Delete(w,n);n--;break;}}while(choice);}void main(){int n;Worker w[N];printf("\t输入职员个数:");scanf("%d",&n);Run(w,n);}友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!。
C++实现简单职工管理系统
C++实现简单职工管理系统这篇文章主要为大家详细介绍了C++职工管理系统实训代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下:源码:1.单个职工的头文件staff.h:#ifndef STAFF_H_INCLUDED#define STAFF_H_INCLUDED//结构体创建struct staff{char ID[10];char name[10];char sex[10];int pay;int reward;int factpay;};//自定义结构体typedef struct staff staff;//单个职工信息创建staff Createstaff();//单个职工信息输出void Displaystaff(staff staff);//修改职工信息void updatestaff(staff *Staff);#endif // STAFF_H_INCLUDED单个职工的cpp文件staff.cpp#include <stdio.h>#include <stdlib.h>#include "staff.h"staff Createstaff(){staff staff;printf("-----------ID-----------\n");scanf("%s", staff.ID);printf("-----------name-----------\n");scanf("%s", );printf("-----------sex-----------\n");scanf("%s", staff.sex);printf("-----------pay-----------\n");scanf("%d", &staff.pay);printf("-----------reward-----------\n");scanf("%d", &staff.reward);staff.factpay = staff.pay + staff.reward; printf("\n");return staff;}void Displaystaff(staff staff){printf("%10s", staff.ID);printf("%10s", );printf("%10s", staff.sex);printf("%10d", staff.pay);printf("%10d", staff.reward);printf("%10d", staff.factpay);printf("\n");}void updatestaff(staff *Staff){printf("-----请显示要修改的数据--------\n"); Displaystaff(*Staff);printf("-------请输入要修改的数据---------"); printf("-----------pay-----------\n");scanf("%d", &Staff->pay);printf("-----------reward-----------\n");scanf("%d", &Staff->reward);Staff->factpay = Staff->pay + Staff->reward; printf("\n");}2.链表的创建链表的头文件linklist.h:#ifndef LINKLIST_H_INCLUDED#define LINKLIST_H_INCLUDED#include "staff.h"//链表结点创建struct Node{struct staff Staff;struct Node *next;};//自定义结点typedef struct Node node;typedef struct Node *linklist;//创建链表node *Createlinklist();//输出链表中的数据void Displaylinklist(node *head);//按职工号查找职工node *searchnode(node *head, char ID[]);//按姓名查找职工void searchnodebyname(node *head, char name[]); //删除职工void delenode(linklist head, char ID[]);//插入职工void insertnode(linklist head, staff Staff);//链表销毁void distroylinklist(linklist head);#endif // LINKLIST_H_INCLUDED链表创建的源程序linklist.cpp:#include <stdio.h>#include <stdlib.h>#include <string.h>#include "staff.h"#include "linklist.h"node *Createlinklist()node *head, *p;head = (node *)malloc(sizeof(node));head->next = NULL;staff a[100] = {{"11111", "mmm", "f", 12000, 2000, 14000}, {"22222", "aaa", "m", 13000, 3000, 16000}, {"33333", "sss", "f", 15000, 3000, 18000}, {"44444", "fff", "m", 17000, 8000, 25000}, {"55555", "ggg", "f", 20000, 5000, 25000}};for(int i = 0; i<5; i++){p = (node *)malloc(sizeof(node));p->Staff = a[i];p->next = head->next;head->next = p;}return head;}void Displaylinklist(node *head){linklist p;p = head->next;while(p!=NULL){Displaystaff(p->Staff);p = p->next;}}node *searchnode(node *head, char ID[]){linklist p;p = head;while(p!=NULL&&strcmp(p->next->Staff.ID, ID)!=0){p = p->next;}return p->next;}void searchnodebyname(node *head, char name[])linklist p;p = head;while((p!=NULL)&&(strcmp((p->next)->, name)!=0)) {p = p->next;}printf("-----´ËÈËΪ---------\n");printf("%s", p->next->);printf("\n");}void delenode(linklist head, char ID[]){linklist p;p = head;while(p->next&&(strcmp(p->next->Staff.ID, ID)!=0)){p = p->next;}if(p->next){p->next = p->next->next;}else{printf("=====NO FOUND========\n");}}void insertnode(linklist head, staff Staff){linklist p;p = (node *)malloc(sizeof(node));p->Staff = Staff;p->next = head->next;head->next = p;}void distroylinklist(linklist head){linklist p;p = head;while(p!=NULL){p = p->next;free(p);}}3.文件存盘file.h:#ifndef FILE_H_INCLUDED#define FILE_H_INCLUDED#include "linklist.h"#include "staff.h"//职工信息存盘void saveinformation(linklist head );//职工信息加载void loadinformation(linklist head );#endif // FILE_H_INCLUDEDfile.cpp#include <stdio.h>#include <string.h>#include <stdlib.h>#include "file.h"#include "linklist.h"#include "staff.h"void saveinformation(linklist h ){FILE *fp;linklist p;if ( (fp = fopen("stu.txt","w") ) == NULL) {printf("Failure to open stu.txt!\n"); exit(0);}for ( p = h->next; p; p=p->next ){fwrite( &(p->Staff), sizeof(node), 1, fp);}fclose(fp);}void loadinformation( linklist h ){FILE *fp;staff nodeBuffer;if ((fp = fopen("stu.txt","r")) == NULL){printf("\n\t数据文件丢失或为首次运行, 将加载测试数据\n"); return ;}while( fread(&nodeBuffer, sizeof(node), 1, fp)!=0 ){insertnode(h, nodeBuffer);}}4.主函数Mainmeun.cpp:#include <stdio.h>#include <stdlib.h>#include "linklist.h"#include "staff.h"#include "file.h"void mainmeun(linklist head);void searchmenu(linklist head);int main(void){linklist head=NULL;//int n;//printf("------请输入你要存的数据----------\n");//scanf("%d", &n);head = Createlinklist();system("cls");//Displaylinklist(head);mainmeun(head);printf("\n\n");//loadinformation(head);//saveinformation(head);return 0;}void mainmeun(linklist head){linklist p;char ID[10];//char name[10];staff Staff;int selection;int flag = 1;do{printf("=================职工管理系统===================\n"); printf("==========1.链表输出=====2.数据查询=====\n");printf("=======3.数据删除===4.数据修改=====5.添加数据======\n"); printf("=======6.链表销毁===7.信息存盘=====8.放弃存盘=====\n"); printf("==================================================\n");printf("======请选择功能(1~8):");scanf("%d", &selection);switch(selection){case 1:Displaylinklist(head);break;case 2:searchmenu(head);break;case 3:printf("=========请输入工号==========\n"); scanf("%s", ID);delenode(head, ID);break;case 4:printf("=========请输入工号==========\n"); scanf("%s", ID);p = searchnode(head, ID);updatestaff(&(p->Staff));break;case 5:printf("========添加数据=========");Staff = Createstaff();insertnode(head, Staff);break;case 6:distroylinklist(head);break;case 7:loadinformation(head);saveinformation(head);break;case 8:flag = 0;break;}}while(flag == 1);printf("========BYE=====BYE======");}void searchmenu(linklist head){linklist p;int flag = 1;char ID[10];char name[10];do{printf("=========查找菜单===========\n");printf("===1.ID==========3.退出====\n");printf("=================================\n");int selection;printf("==请选择功能(1~3):");scanf("%d", &selection);switch(selection){case 1:printf("=====请输入ID=======\n");scanf("%s", ID);p = searchnode(head, ID);Displaystaff(p->Staff);break;case 2:printf("=====请输入name======\n");scanf("%s", name);searchnodebyname(head, name);break;case 3:flag = 0;break;}system("pause");system("cls");}while(flag == 1);}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我哦。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c加加动态数组加无限内存人员管理
系统
”信息与计算科学”专业
《C++语言程序设计》课程设计
班级计算科学
姓名
学号
指导教师
设计日期·春·19周~20周
( 一) 、设计菜单选择程序。
菜单是应用程序的界面, 经过控制语句改变程序执行的顺序, 设计菜单是程序设计的基础。
本设计分两步:
第一步: 设计一个菜单程序。
1.菜单内容: 程序运行后, 给出3个菜单项的内容和输入提示, 如下:
1)利用克莱姆法则求解线性方程组
2)统计一篇英文文章的单词数
3)退出程序
第二步: 为上述菜单项配上相应的功能。
2.程序优缺点:
优点: 采用了动态开辟二维数组, 传递不知道大小的二维数组, 程序规范, 可读性强。
缺点:采用递归算法, 增加了程序的时间复杂度。
3.代码段:
#include<iostream>
#include<string>
#include <stdlib.h>
#include<windows.h>
using namespace std;
double **open_up(int row,int line);
double Price(int row,int line,double *a);
void Head();
void Cramer();
void Statis_Words();
int main()
{
char ch; // 选择变量
while(1)
{
Head();
cout<<"\t\t选择要进行的程序: "<<endl;
ch = cin.get();
cout<<endl;
switch(ch)
{
case '1':system("cls");Cramer();break;
case '2':system("cls");Statis_Words();break;
case '3':system("cls"); cout << " 退出程序" << endl; exit(0);break; default :system("cls");cout<<"\t\t 输入有误 "<<endl;
}
cin.get();
}。